{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/r-b-build.XPAjlJvg/b1/gtsam_4.2.0+dfsg-1_amd64.changes", "source2": "/srv/reproducible-results/rbuild-debian/r-b-build.XPAjlJvg/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 1bd507037c4dc3d69d06f84524205802 362400 libdevel optional libgtsam-dev_4.2.0+dfsg-1_amd64.deb\n- e81a300b13e483893074b764c8505572 14608736 doc optional libgtsam-doc_4.2.0+dfsg-1_all.deb\n+ fc06ad5f680d310f7b779cccf91a81a8 14607420 doc optional libgtsam-doc_4.2.0+dfsg-1_all.deb\n 0b1478212f077d679bef12907f107ec4 155193888 debug optional libgtsam4-dbgsym_4.2.0+dfsg-1_amd64.deb\n 6d1750e8cbdb95cf319b061aaad1178b 1577408 libs optional libgtsam4_4.2.0+dfsg-1_amd64.deb\n 7c73eceebd3192de6e867c5da21d0ec3 6319352 debug optional python3-gtsam-dbgsym_4.2.0+dfsg-1_amd64.deb\n 2a067e2ab7d1a4cda588f8876073151c 5910816 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 75932 2024-01-09 05:51:35.000000 control.tar.xz\n--rw-r--r-- 0 0 0 14532612 2024-01-09 05:51:35.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 76020 2024-01-09 05:51:35.000000 control.tar.xz\n+-rw-r--r-- 0 0 0 14531208 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,121 +125,121 @@\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/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/a00029.js\n usr/share/doc/libgtsam-dev/html/a00029_source.html\n usr/share/doc/libgtsam-dev/html/a00032.html\n-usr/share/doc/libgtsam-dev/html/a00032.js\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.js\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_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/a00044.js\n usr/share/doc/libgtsam-dev/html/a00044_source.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/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/a00050_source.html\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/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/a00068_source.html\n usr/share/doc/libgtsam-dev/html/a00071.html\n+usr/share/doc/libgtsam-dev/html/a00071.js\n usr/share/doc/libgtsam-dev/html/a00071_source.html\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/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_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/a00101.js\n usr/share/doc/libgtsam-dev/html/a00101_source.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_source.html\n usr/share/doc/libgtsam-dev/html/a00113.html\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_source.html\n usr/share/doc/libgtsam-dev/html/a00119.html\n usr/share/doc/libgtsam-dev/html/a00119.js\n usr/share/doc/libgtsam-dev/html/a00119_source.html\n-usr/share/doc/libgtsam-dev/html/a00122.html\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/a00128_source.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.js\n-usr/share/doc/libgtsam-dev/html/a00134_source.html\n usr/share/doc/libgtsam-dev/html/a00137.html\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/a00140_source.html\n+usr/share/doc/libgtsam-dev/html/a00143.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.js\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 usr/share/doc/libgtsam-dev/html/a00155.js\n usr/share/doc/libgtsam-dev/html/a00155_source.html\n usr/share/doc/libgtsam-dev/html/a00158.html\n@@ -249,833 +249,833 @@\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/a00182_source.html\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/a00191.html\n+usr/share/doc/libgtsam-dev/html/a00191.js\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/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/a00203.js\n-usr/share/doc/libgtsam-dev/html/a00203_source.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/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/a00212.js\n usr/share/doc/libgtsam-dev/html/a00212_source.html\n usr/share/doc/libgtsam-dev/html/a00215.html\n usr/share/doc/libgtsam-dev/html/a00215.js\n usr/share/doc/libgtsam-dev/html/a00215_source.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/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/a00236.js\n usr/share/doc/libgtsam-dev/html/a00236_source.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/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_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/a00260.html\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/a00263.js\n-usr/share/doc/libgtsam-dev/html/a00263_source.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/a00272.js\n usr/share/doc/libgtsam-dev/html/a00272_source.html\n-usr/share/doc/libgtsam-dev/html/a00275_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_source.html\n+usr/share/doc/libgtsam-dev/html/a00281.js\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.js\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/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/a00299.js\n usr/share/doc/libgtsam-dev/html/a00299_source.html\n usr/share/doc/libgtsam-dev/html/a00302.html\n usr/share/doc/libgtsam-dev/html/a00302.js\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/a00305_source.html\n-usr/share/doc/libgtsam-dev/html/a00308.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.html\n+usr/share/doc/libgtsam-dev/html/a00326.js\n+usr/share/doc/libgtsam-dev/html/a00326_source.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.js\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/a00353.html\n-usr/share/doc/libgtsam-dev/html/a00353.js\n+usr/share/doc/libgtsam-dev/html/a00347_source.html\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_source.html\n+usr/share/doc/libgtsam-dev/html/a00356.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_source.html\n usr/share/doc/libgtsam-dev/html/a00365.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/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/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/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/a00389.html\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/a00395.html\n-usr/share/doc/libgtsam-dev/html/a00395.js\n usr/share/doc/libgtsam-dev/html/a00398.html\n usr/share/doc/libgtsam-dev/html/a00398.js\n usr/share/doc/libgtsam-dev/html/a00398_source.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.js\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/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/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/a00428.html\n+usr/share/doc/libgtsam-dev/html/a00428.js\n+usr/share/doc/libgtsam-dev/html/a00428_source.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/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_source.html\n+usr/share/doc/libgtsam-dev/html/a00440.html\n+usr/share/doc/libgtsam-dev/html/a00440.js\n usr/share/doc/libgtsam-dev/html/a00443.html\n+usr/share/doc/libgtsam-dev/html/a00443.js\n usr/share/doc/libgtsam-dev/html/a00446.html\n-usr/share/doc/libgtsam-dev/html/a00446.js\n-usr/share/doc/libgtsam-dev/html/a00446_source.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/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/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/a00473.js\n+usr/share/doc/libgtsam-dev/html/a00473_source.html\n usr/share/doc/libgtsam-dev/html/a00479.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/a00485.js\n usr/share/doc/libgtsam-dev/html/a00488.html\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/a00497_source.html\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_source.html\n usr/share/doc/libgtsam-dev/html/a00509.html\n usr/share/doc/libgtsam-dev/html/a00512.html\n+usr/share/doc/libgtsam-dev/html/a00512.js\n+usr/share/doc/libgtsam-dev/html/a00512_source.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/a00515_source.html\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/a00521_source.html\n usr/share/doc/libgtsam-dev/html/a00524.html\n usr/share/doc/libgtsam-dev/html/a00524.js\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/a00527.js\n-usr/share/doc/libgtsam-dev/html/a00527_source.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/a00533.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_source.html\n+usr/share/doc/libgtsam-dev/html/a00542.js\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/a00545_source.html\n usr/share/doc/libgtsam-dev/html/a00548.html\n-usr/share/doc/libgtsam-dev/html/a00548.js\n-usr/share/doc/libgtsam-dev/html/a00548_source.html\n usr/share/doc/libgtsam-dev/html/a00551.html\n usr/share/doc/libgtsam-dev/html/a00551.js\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/a00569.html\n usr/share/doc/libgtsam-dev/html/a00572.html\n usr/share/doc/libgtsam-dev/html/a00572.js\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.js\n-usr/share/doc/libgtsam-dev/html/a00581_source.html\n usr/share/doc/libgtsam-dev/html/a00584.html\n+usr/share/doc/libgtsam-dev/html/a00584.js\n+usr/share/doc/libgtsam-dev/html/a00584_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_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/a00605.html\n usr/share/doc/libgtsam-dev/html/a00605_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.js\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/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_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/a00632.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_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/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_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_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.js\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/a00668.js\n usr/share/doc/libgtsam-dev/html/a00668_source.html\n+usr/share/doc/libgtsam-dev/html/a00671.html\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/a00680.html\n-usr/share/doc/libgtsam-dev/html/a00680.js\n+usr/share/doc/libgtsam-dev/html/a00677.js\n+usr/share/doc/libgtsam-dev/html/a00677_source.html\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.js\n usr/share/doc/libgtsam-dev/html/a00683_source.html\n-usr/share/doc/libgtsam-dev/html/a00692.html\n+usr/share/doc/libgtsam-dev/html/a00686.html\n+usr/share/doc/libgtsam-dev/html/a00689.html\n+usr/share/doc/libgtsam-dev/html/a00689.js\n+usr/share/doc/libgtsam-dev/html/a00689_source.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/a00695_source.html\n usr/share/doc/libgtsam-dev/html/a00698.html\n+usr/share/doc/libgtsam-dev/html/a00698.js\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/a00710.html\n usr/share/doc/libgtsam-dev/html/a00713.html\n usr/share/doc/libgtsam-dev/html/a00713.js\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_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_source.html\n-usr/share/doc/libgtsam-dev/html/a00734.html\n-usr/share/doc/libgtsam-dev/html/a00737.html\n+usr/share/doc/libgtsam-dev/html/a00731.html\n+usr/share/doc/libgtsam-dev/html/a00734_source.html\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/a00743.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/a00746.html\n+usr/share/doc/libgtsam-dev/html/a00746.js\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/a00785.html\n-usr/share/doc/libgtsam-dev/html/a00785_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/a00788.html\n usr/share/doc/libgtsam-dev/html/a00788.js\n usr/share/doc/libgtsam-dev/html/a00788_source.html\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/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/a00797.js\n-usr/share/doc/libgtsam-dev/html/a00797_source.html\n usr/share/doc/libgtsam-dev/html/a00800.html\n+usr/share/doc/libgtsam-dev/html/a00800.js\n+usr/share/doc/libgtsam-dev/html/a00800_source.html\n usr/share/doc/libgtsam-dev/html/a00803.html\n usr/share/doc/libgtsam-dev/html/a00803.js\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/a00809.js\n+usr/share/doc/libgtsam-dev/html/a00809_source.html\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.html\n+usr/share/doc/libgtsam-dev/html/a00818.js\n+usr/share/doc/libgtsam-dev/html/a00818_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/a00821_source.html\n-usr/share/doc/libgtsam-dev/html/a00824_source.html\n+usr/share/doc/libgtsam-dev/html/a00824.html\n usr/share/doc/libgtsam-dev/html/a00827.html\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.js\n usr/share/doc/libgtsam-dev/html/a00839.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/a00845.js\n+usr/share/doc/libgtsam-dev/html/a00845_source.html\n usr/share/doc/libgtsam-dev/html/a00848.html\n usr/share/doc/libgtsam-dev/html/a00848.js\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.js\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/a00857.js\n usr/share/doc/libgtsam-dev/html/a00857_source.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/a00863.html\n usr/share/doc/libgtsam-dev/html/a00863.js\n usr/share/doc/libgtsam-dev/html/a00863_source.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/a00869.js\n+usr/share/doc/libgtsam-dev/html/a00869_source.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/a00878.html\n-usr/share/doc/libgtsam-dev/html/a00878_source.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/a00890_source.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/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/a00899_source.html\n usr/share/doc/libgtsam-dev/html/a00905.html\n usr/share/doc/libgtsam-dev/html/a00905.js\n usr/share/doc/libgtsam-dev/html/a00905_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/a00914.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/a00917.html\n-usr/share/doc/libgtsam-dev/html/a00920.html\n-usr/share/doc/libgtsam-dev/html/a00920.js\n-usr/share/doc/libgtsam-dev/html/a00920_source.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/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/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/a00929.html\n+usr/share/doc/libgtsam-dev/html/a00929.js\n usr/share/doc/libgtsam-dev/html/a00932.html\n usr/share/doc/libgtsam-dev/html/a00932.js\n usr/share/doc/libgtsam-dev/html/a00932_source.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.js\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/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/a00959.js\n-usr/share/doc/libgtsam-dev/html/a00959_source.html\n+usr/share/doc/libgtsam-dev/html/a00962.html\n usr/share/doc/libgtsam-dev/html/a00965.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/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/a00977.js\n-usr/share/doc/libgtsam-dev/html/a00977_source.html\n usr/share/doc/libgtsam-dev/html/a00980.html\n-usr/share/doc/libgtsam-dev/html/a00980.js\n-usr/share/doc/libgtsam-dev/html/a00980_source.html\n usr/share/doc/libgtsam-dev/html/a00983.html\n-usr/share/doc/libgtsam-dev/html/a00983.js\n usr/share/doc/libgtsam-dev/html/a00983_source.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/a00992.html\n usr/share/doc/libgtsam-dev/html/a00992.js\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_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_source.html\n+usr/share/doc/libgtsam-dev/html/a01016.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/a01022.js\n+usr/share/doc/libgtsam-dev/html/a01022_source.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/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/a01034_source.html\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/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/a01082.js\n+usr/share/doc/libgtsam-dev/html/a01082_source.html\n usr/share/doc/libgtsam-dev/html/a01085_source.html\n usr/share/doc/libgtsam-dev/html/a01088.html\n-usr/share/doc/libgtsam-dev/html/a01088.js\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/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/a01106.html\n usr/share/doc/libgtsam-dev/html/a01106.js\n usr/share/doc/libgtsam-dev/html/a01106_source.html\n-usr/share/doc/libgtsam-dev/html/a01109_source.html\n+usr/share/doc/libgtsam-dev/html/a01109.html\n+usr/share/doc/libgtsam-dev/html/a01112.html\n+usr/share/doc/libgtsam-dev/html/a01112.js\n usr/share/doc/libgtsam-dev/html/a01112_source.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/a01133.html\n+usr/share/doc/libgtsam-dev/html/a01133_source.html\n usr/share/doc/libgtsam-dev/html/a01136.html\n usr/share/doc/libgtsam-dev/html/a01139.html\n-usr/share/doc/libgtsam-dev/html/a01139.js\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/a01148.html\n-usr/share/doc/libgtsam-dev/html/a01148.js\n+usr/share/doc/libgtsam-dev/html/a01145_source.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/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/a01151.js\n+usr/share/doc/libgtsam-dev/html/a01151_source.html\n usr/share/doc/libgtsam-dev/html/a01157.html\n usr/share/doc/libgtsam-dev/html/a01157.js\n usr/share/doc/libgtsam-dev/html/a01157_source.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.js\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/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_source.html\n+usr/share/doc/libgtsam-dev/html/a01190.js\n usr/share/doc/libgtsam-dev/html/a01193.html\n usr/share/doc/libgtsam-dev/html/a01193.js\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/a01205_source.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/a01211_source.html\n usr/share/doc/libgtsam-dev/html/a01214.html\n usr/share/doc/libgtsam-dev/html/a01217.html\n-usr/share/doc/libgtsam-dev/html/a01217.js\n-usr/share/doc/libgtsam-dev/html/a01217_source.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/a01220_source.html\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/a01235.html\n-usr/share/doc/libgtsam-dev/html/a01235.js\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/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_source.html\n usr/share/doc/libgtsam-dev/html/a01247.html\n usr/share/doc/libgtsam-dev/html/a01247.js\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.js\n usr/share/doc/libgtsam-dev/html/a01253_source.html\n usr/share/doc/libgtsam-dev/html/a01256.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/a01262.html\n-usr/share/doc/libgtsam-dev/html/a01262.js\n usr/share/doc/libgtsam-dev/html/a01262_source.html\n-usr/share/doc/libgtsam-dev/html/a01265_source.html\n-usr/share/doc/libgtsam-dev/html/a01268.html\n-usr/share/doc/libgtsam-dev/html/a01268.js\n+usr/share/doc/libgtsam-dev/html/a01265.html\n usr/share/doc/libgtsam-dev/html/a01268_source.html\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_source.html\n+usr/share/doc/libgtsam-dev/html/a01289.js\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_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/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.html\n usr/share/doc/libgtsam-dev/html/a01310.js\n usr/share/doc/libgtsam-dev/html/a01310_source.html\n-usr/share/doc/libgtsam-dev/html/a01313.html\n-usr/share/doc/libgtsam-dev/html/a01313.js\n usr/share/doc/libgtsam-dev/html/a01313_source.html\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_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_source.html\n+usr/share/doc/libgtsam-dev/html/a01328.js\n usr/share/doc/libgtsam-dev/html/a01331.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/a01331.js\n+usr/share/doc/libgtsam-dev/html/a01331_source.html\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.js\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/a01352.html\n usr/share/doc/libgtsam-dev/html/a01352.js\n usr/share/doc/libgtsam-dev/html/a01352_source.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/a01355_source.html\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/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/a01376.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/a01391.js\n usr/share/doc/libgtsam-dev/html/a01391_source.html\n-usr/share/doc/libgtsam-dev/html/a01397.html\n+usr/share/doc/libgtsam-dev/html/a01394.html\n+usr/share/doc/libgtsam-dev/html/a01394_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/a01403.html\n-usr/share/doc/libgtsam-dev/html/a01403_source.html\n+usr/share/doc/libgtsam-dev/html/a01406.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) 75566 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/Hybrid.pdf\n--rw-r--r-- 0 root (0) root (0) 148548 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/ImuFactor.pdf\n+-rw-r--r-- 0 root (0) root (0) 148558 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/ImuFactor.pdf\n -rw-r--r-- 0 root (0) root (0) 39726 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) 7913 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00002.html\n--rw-r--r-- 0 root (0) root (0) 14683 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) 7978 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00005.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) 17818 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00011.html\n--rw-r--r-- 0 root (0) root (0) 1016 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00011.js\n--rw-r--r-- 0 root (0) root (0) 65609 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) 17409 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00014.html\n--rw-r--r-- 0 root (0) root (0) 1045 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00014.js\n--rw-r--r-- 0 root (0) root (0) 66871 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) 8401 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00017.html\n--rw-r--r-- 0 root (0) root (0) 7983 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00020.html\n--rw-r--r-- 0 root (0) root (0) 312 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00020.js\n--rw-r--r-- 0 root (0) root (0) 48110 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) 7344 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00023.html\n--rw-r--r-- 0 root (0) root (0) 180 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00023.js\n--rw-r--r-- 0 root (0) root (0) 10629 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00026.html\n--rw-r--r-- 0 root (0) root (0) 87 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00026.js\n--rw-r--r-- 0 root (0) root (0) 15877 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) 10386 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00029.html\n--rw-r--r-- 0 root (0) root (0) 125 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00029.js\n--rw-r--r-- 0 root (0) root (0) 27505 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00029_source.html\n--rw-r--r-- 0 root (0) root (0) 66646 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00032.html\n--rw-r--r-- 0 root (0) root (0) 2508 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00032.js\n--rw-r--r-- 0 root (0) root (0) 192234 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) 8418 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00035.html\n--rw-r--r-- 0 root (0) root (0) 343 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00035.js\n--rw-r--r-- 0 root (0) root (0) 27879 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) 19377 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) 6548 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00041.html\n--rw-r--r-- 0 root (0) root (0) 65 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00041.js\n--rw-r--r-- 0 root (0) root (0) 20753 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) 6757 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00002.html\n+-rw-r--r-- 0 root (0) root (0) 156 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00002.js\n+-rw-r--r-- 0 root (0) root (0) 35281 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) 17409 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00005.html\n+-rw-r--r-- 0 root (0) root (0) 1045 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00005.js\n+-rw-r--r-- 0 root (0) root (0) 66871 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) 25653 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00008.html\n+-rw-r--r-- 0 root (0) root (0) 2086 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00008.js\n+-rw-r--r-- 0 root (0) root (0) 57397 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) 7079 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00011.html\n+-rw-r--r-- 0 root (0) root (0) 16163 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) 6595 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00014.html\n+-rw-r--r-- 0 root (0) root (0) 91 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00014.js\n+-rw-r--r-- 0 root (0) root (0) 7978 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00017.html\n+-rw-r--r-- 0 root (0) root (0) 21582 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00020.html\n+-rw-r--r-- 0 root (0) root (0) 143 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00020.js\n+-rw-r--r-- 0 root (0) root (0) 56603 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) 66646 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00023.html\n+-rw-r--r-- 0 root (0) root (0) 2508 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00023.js\n+-rw-r--r-- 0 root (0) root (0) 192234 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) 9190 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00026.html\n+-rw-r--r-- 0 root (0) root (0) 250 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00026.js\n+-rw-r--r-- 0 root (0) root (0) 12942 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) 6741 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00029.html\n+-rw-r--r-- 0 root (0) root (0) 52828 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00029_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/a00032.html\n+-rw-r--r-- 0 root (0) root (0) 16112 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) 8433 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00038.html\n+-rw-r--r-- 0 root (0) root (0) 14770 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) 11015 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00044.html\n -rw-r--r-- 0 root (0) root (0) 429 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00044.js\n -rw-r--r-- 0 root (0) root (0) 37799 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) 9190 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00047.html\n--rw-r--r-- 0 root (0) root (0) 250 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00047.js\n--rw-r--r-- 0 root (0) root (0) 12942 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) 17131 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00050.html\n--rw-r--r-- 0 root (0) root (0) 35570 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00050_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/a00056.html\n--rw-r--r-- 0 root (0) root (0) 172 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00056.js\n--rw-r--r-- 0 root (0) root (0) 18897 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) 5941 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00059.html\n--rw-r--r-- 0 root (0) root (0) 27261 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00065.html\n--rw-r--r-- 0 root (0) root (0) 1636 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00065.js\n--rw-r--r-- 0 root (0) root (0) 37709 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) 6595 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00068.html\n--rw-r--r-- 0 root (0) root (0) 91 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00068.js\n--rw-r--r-- 0 root (0) root (0) 6662 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00071.html\n--rw-r--r-- 0 root (0) root (0) 18268 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) 9399 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00074.html\n--rw-r--r-- 0 root (0) root (0) 237 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00074.js\n--rw-r--r-- 0 root (0) root (0) 12509 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) 16112 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) 6662 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00047.html\n+-rw-r--r-- 0 root (0) root (0) 18268 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) 10386 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00050.html\n+-rw-r--r-- 0 root (0) root (0) 125 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00050.js\n+-rw-r--r-- 0 root (0) root (0) 27505 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00050_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/a00053.html\n+-rw-r--r-- 0 root (0) root (0) 1345 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00053.js\n+-rw-r--r-- 0 root (0) root (0) 8418 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00056.html\n+-rw-r--r-- 0 root (0) root (0) 343 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00056.js\n+-rw-r--r-- 0 root (0) root (0) 27879 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) 10629 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00059.html\n+-rw-r--r-- 0 root (0) root (0) 87 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00059.js\n+-rw-r--r-- 0 root (0) root (0) 15877 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) 17818 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00062.html\n+-rw-r--r-- 0 root (0) root (0) 1016 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00062.js\n+-rw-r--r-- 0 root (0) root (0) 65609 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) 15649 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00065.html\n+-rw-r--r-- 0 root (0) root (0) 556 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00065.js\n+-rw-r--r-- 0 root (0) root (0) 29171 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) 6657 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00068.html\n+-rw-r--r-- 0 root (0) root (0) 27843 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00068_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/a00071.html\n+-rw-r--r-- 0 root (0) root (0) 94 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00071.js\n+-rw-r--r-- 0 root (0) root (0) 9315 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) 19377 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) 13624 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00077.html\n+-rw-r--r-- 0 root (0) root (0) 675 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00077.js\n+-rw-r--r-- 0 root (0) root (0) 39982 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) 28203 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00080.html\n -rw-r--r-- 0 root (0) root (0) 2121 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00080.js\n--rw-r--r-- 0 root (0) root (0) 15649 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00083.html\n--rw-r--r-- 0 root (0) root (0) 556 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00083.js\n--rw-r--r-- 0 root (0) root (0) 29171 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) 5816 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00086.html\n--rw-r--r-- 0 root (0) root (0) 7079 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00089.html\n--rw-r--r-- 0 root (0) root (0) 16163 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) 21582 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00092.html\n--rw-r--r-- 0 root (0) root (0) 143 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00092.js\n--rw-r--r-- 0 root (0) root (0) 56603 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) 6757 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00095.html\n--rw-r--r-- 0 root (0) root (0) 156 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00095.js\n--rw-r--r-- 0 root (0) root (0) 35281 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) 13624 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00098.html\n--rw-r--r-- 0 root (0) root (0) 675 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00098.js\n--rw-r--r-- 0 root (0) root (0) 39982 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) 6884 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00101.html\n--rw-r--r-- 0 root (0) root (0) 94 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00101.js\n--rw-r--r-- 0 root (0) root (0) 9315 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00101_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/a00104.html\n--rw-r--r-- 0 root (0) root (0) 696 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00104.js\n--rw-r--r-- 0 root (0) root (0) 31578 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) 77207 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) 6665 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00110.html\n--rw-r--r-- 0 root (0) root (0) 18668 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) 6657 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00113.html\n--rw-r--r-- 0 root (0) root (0) 27843 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/a00116.html\n--rw-r--r-- 0 root (0) root (0) 52828 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) 24215 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00119.html\n--rw-r--r-- 0 root (0) root (0) 1480 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00119.js\n--rw-r--r-- 0 root (0) root (0) 51312 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00119_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/a00122.html\n--rw-r--r-- 0 root (0) root (0) 18926 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00125.html\n--rw-r--r-- 0 root (0) root (0) 1345 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00125.js\n--rw-r--r-- 0 root (0) root (0) 26139 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00128_source.html\n--rw-r--r-- 0 root (0) root (0) 8433 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00131.html\n--rw-r--r-- 0 root (0) root (0) 14770 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) 25653 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00134.html\n--rw-r--r-- 0 root (0) root (0) 2086 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00134.js\n--rw-r--r-- 0 root (0) root (0) 57397 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) 6608 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00137.html\n--rw-r--r-- 0 root (0) root (0) 82782 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) 52200 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) 46759 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00146.html\n--rw-r--r-- 0 root (0) root (0) 3446 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00146.js\n--rw-r--r-- 0 root (0) root (0) 77745 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) 7226 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00152.html\n--rw-r--r-- 0 root (0) root (0) 126 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00152.js\n--rw-r--r-- 0 root (0) root (0) 13159 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) 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) 26139 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) 6608 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00089.html\n+-rw-r--r-- 0 root (0) root (0) 82782 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) 7057 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00092.html\n+-rw-r--r-- 0 root (0) root (0) 172 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00092.js\n+-rw-r--r-- 0 root (0) root (0) 18897 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) 24215 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00098.html\n+-rw-r--r-- 0 root (0) root (0) 1480 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00098.js\n+-rw-r--r-- 0 root (0) root (0) 51312 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) 7913 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00101.html\n+-rw-r--r-- 0 root (0) root (0) 14683 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00101_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/a00104.html\n+-rw-r--r-- 0 root (0) root (0) 237 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00104.js\n+-rw-r--r-- 0 root (0) root (0) 12509 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) 12084 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00107.html\n+-rw-r--r-- 0 root (0) root (0) 696 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00107.js\n+-rw-r--r-- 0 root (0) root (0) 31578 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) 6665 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00113.html\n+-rw-r--r-- 0 root (0) root (0) 18668 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) 8401 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00116.html\n+-rw-r--r-- 0 root (0) root (0) 46759 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00119.html\n+-rw-r--r-- 0 root (0) root (0) 3446 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00119.js\n+-rw-r--r-- 0 root (0) root (0) 77745 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00119_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/a00122_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/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) 52200 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00128_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/a00131.html\n+-rw-r--r-- 0 root (0) root (0) 65 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00131.js\n+-rw-r--r-- 0 root (0) root (0) 20753 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) 5941 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00137.html\n+-rw-r--r-- 0 root (0) root (0) 7389 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00140.html\n+-rw-r--r-- 0 root (0) root (0) 180 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00140.js\n+-rw-r--r-- 0 root (0) root (0) 9727 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) 17131 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00143.html\n+-rw-r--r-- 0 root (0) root (0) 35570 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) 27261 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00146.html\n+-rw-r--r-- 0 root (0) root (0) 1636 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00146.js\n+-rw-r--r-- 0 root (0) root (0) 37709 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) 7983 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00149.html\n+-rw-r--r-- 0 root (0) root (0) 312 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00149.js\n+-rw-r--r-- 0 root (0) root (0) 48110 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) 10375 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00152.html\n+-rw-r--r-- 0 root (0) root (0) 324 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00152.js\n+-rw-r--r-- 0 root (0) root (0) 54641 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) 7825 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00155.html\n -rw-r--r-- 0 root (0) root (0) 150 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00155.js\n -rw-r--r-- 0 root (0) root (0) 40486 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) 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) 7285 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00161.html\n--rw-r--r-- 0 root (0) root (0) 66 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00161.js\n--rw-r--r-- 0 root (0) root (0) 22085 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) 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) 7226 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00161.html\n+-rw-r--r-- 0 root (0) root (0) 126 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00161.js\n+-rw-r--r-- 0 root (0) root (0) 13159 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) 10375 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00167.html\n--rw-r--r-- 0 root (0) root (0) 324 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00167.js\n--rw-r--r-- 0 root (0) root (0) 54641 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) 5639 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00170.html\n--rw-r--r-- 0 root (0) root (0) 13635 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00173.html\n--rw-r--r-- 0 root (0) root (0) 803 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00173.js\n--rw-r--r-- 0 root (0) root (0) 85202 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) 8041 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00176.html\n--rw-r--r-- 0 root (0) root (0) 225 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00176.js\n--rw-r--r-- 0 root (0) root (0) 24383 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) 5540 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00179.html\n--rw-r--r-- 0 root (0) root (0) 7720 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00182.html\n--rw-r--r-- 0 root (0) root (0) 184 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00182.js\n--rw-r--r-- 0 root (0) root (0) 6594 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00185.html\n--rw-r--r-- 0 root (0) root (0) 86 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00185.js\n--rw-r--r-- 0 root (0) root (0) 20439 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) 5555 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00188.html\n--rw-r--r-- 0 root (0) root (0) 5552 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00191.html\n--rw-r--r-- 0 root (0) root (0) 9286 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00194.html\n--rw-r--r-- 0 root (0) root (0) 309 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00194.js\n--rw-r--r-- 0 root (0) root (0) 27194 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) 5639 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00197.html\n--rw-r--r-- 0 root (0) root (0) 206584 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) 7427 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00203.html\n--rw-r--r-- 0 root (0) root (0) 98 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00203.js\n--rw-r--r-- 0 root (0) root (0) 13987 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00203_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/a00206.html\n--rw-r--r-- 0 root (0) root (0) 162 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00206.js\n--rw-r--r-- 0 root (0) root (0) 6491 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00209.html\n--rw-r--r-- 0 root (0) root (0) 95 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00209.js\n--rw-r--r-- 0 root (0) root (0) 6998 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00212.html\n--rw-r--r-- 0 root (0) root (0) 83 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00212.js\n--rw-r--r-- 0 root (0) root (0) 24591 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00212_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/a00215.html\n--rw-r--r-- 0 root (0) root (0) 85 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00215.js\n--rw-r--r-- 0 root (0) root (0) 44827 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00215_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/a00218.html\n--rw-r--r-- 0 root (0) root (0) 12074 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00221.html\n--rw-r--r-- 0 root (0) root (0) 444 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00221.js\n--rw-r--r-- 0 root (0) root (0) 69958 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) 5566 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00224.html\n--rw-r--r-- 0 root (0) root (0) 7329 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00227.html\n--rw-r--r-- 0 root (0) root (0) 164 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00227.js\n--rw-r--r-- 0 root (0) root (0) 40301 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) 6604 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00233.html\n--rw-r--r-- 0 root (0) root (0) 82 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00233.js\n--rw-r--r-- 0 root (0) root (0) 32573 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) 10021 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00236.html\n--rw-r--r-- 0 root (0) root (0) 244 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00236.js\n--rw-r--r-- 0 root (0) root (0) 21706 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00236_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/a00239.html\n--rw-r--r-- 0 root (0) root (0) 289 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00239.js\n--rw-r--r-- 0 root (0) root (0) 24144 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) 6278 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00242.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) 7124 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00248.html\n--rw-r--r-- 0 root (0) root (0) 144 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00248.js\n--rw-r--r-- 0 root (0) root (0) 25959 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) 6589 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00251.html\n--rw-r--r-- 0 root (0) root (0) 84 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00251.js\n--rw-r--r-- 0 root (0) root (0) 47723 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) 13686 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00254.html\n--rw-r--r-- 0 root (0) root (0) 244 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00254.js\n--rw-r--r-- 0 root (0) root (0) 5592 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00257.html\n--rw-r--r-- 0 root (0) root (0) 6320 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00260.html\n--rw-r--r-- 0 root (0) root (0) 15576 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) 7580 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00263.html\n--rw-r--r-- 0 root (0) root (0) 159 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00263.js\n--rw-r--r-- 0 root (0) root (0) 29980 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00263_source.html\n--rw-r--r-- 0 root (0) root (0) 6642 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00269.html\n--rw-r--r-- 0 root (0) root (0) 18784 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) 6434 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00272.html\n--rw-r--r-- 0 root (0) root (0) 19109 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) 51201 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) 6379 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00278.html\n--rw-r--r-- 0 root (0) root (0) 5688 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00281.html\n--rw-r--r-- 0 root (0) root (0) 31329 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) 6883 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00284.html\n+-rw-r--r-- 0 root (0) root (0) 6449 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00167.html\n+-rw-r--r-- 0 root (0) root (0) 68 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00167.js\n+-rw-r--r-- 0 root (0) root (0) 18960 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) 7285 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00170.html\n+-rw-r--r-- 0 root (0) root (0) 66 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00170.js\n+-rw-r--r-- 0 root (0) root (0) 22085 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) 8041 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00173.html\n+-rw-r--r-- 0 root (0) root (0) 225 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00173.js\n+-rw-r--r-- 0 root (0) root (0) 24383 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) 5639 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00176.html\n+-rw-r--r-- 0 root (0) root (0) 10021 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00179.html\n+-rw-r--r-- 0 root (0) root (0) 244 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00179.js\n+-rw-r--r-- 0 root (0) root (0) 21706 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) 6604 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00182.html\n+-rw-r--r-- 0 root (0) root (0) 82 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00182.js\n+-rw-r--r-- 0 root (0) root (0) 32573 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00182_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/a00185.html\n+-rw-r--r-- 0 root (0) root (0) 289 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00185.js\n+-rw-r--r-- 0 root (0) root (0) 24144 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) 6491 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00188.html\n+-rw-r--r-- 0 root (0) root (0) 95 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00188.js\n+-rw-r--r-- 0 root (0) root (0) 7720 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00191.html\n+-rw-r--r-- 0 root (0) root (0) 184 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00191.js\n+-rw-r--r-- 0 root (0) root (0) 6594 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00194.html\n+-rw-r--r-- 0 root (0) root (0) 86 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00194.js\n+-rw-r--r-- 0 root (0) root (0) 20439 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) 5566 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00197.html\n+-rw-r--r-- 0 root (0) root (0) 9288 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00200.html\n+-rw-r--r-- 0 root (0) root (0) 337 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00200.js\n+-rw-r--r-- 0 root (0) root (0) 50616 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) 5540 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00203.html\n+-rw-r--r-- 0 root (0) root (0) 5592 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00206.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) 6589 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00212.html\n+-rw-r--r-- 0 root (0) root (0) 84 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00212.js\n+-rw-r--r-- 0 root (0) root (0) 47723 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00212_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/a00215.html\n+-rw-r--r-- 0 root (0) root (0) 309 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00215.js\n+-rw-r--r-- 0 root (0) root (0) 27194 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00215_source.html\n+-rw-r--r-- 0 root (0) root (0) 6642 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00218.html\n+-rw-r--r-- 0 root (0) root (0) 18784 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) 6434 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00221.html\n+-rw-r--r-- 0 root (0) root (0) 19109 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/a00227.html\n+-rw-r--r-- 0 root (0) root (0) 6998 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00230.html\n+-rw-r--r-- 0 root (0) root (0) 83 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00230.js\n+-rw-r--r-- 0 root (0) root (0) 24591 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) 7532 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00233.html\n+-rw-r--r-- 0 root (0) root (0) 162 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00233.js\n+-rw-r--r-- 0 root (0) root (0) 6738 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00236.html\n+-rw-r--r-- 0 root (0) root (0) 85 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00236.js\n+-rw-r--r-- 0 root (0) root (0) 44827 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00236_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/a00239.html\n+-rw-r--r-- 0 root (0) root (0) 7329 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00242.html\n+-rw-r--r-- 0 root (0) root (0) 164 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00242.js\n+-rw-r--r-- 0 root (0) root (0) 40301 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) 6320 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00245.html\n+-rw-r--r-- 0 root (0) root (0) 15576 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) 5555 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00248.html\n+-rw-r--r-- 0 root (0) root (0) 7580 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00251.html\n+-rw-r--r-- 0 root (0) root (0) 159 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00251.js\n+-rw-r--r-- 0 root (0) root (0) 29980 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) 7427 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00254.html\n+-rw-r--r-- 0 root (0) root (0) 98 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00254.js\n+-rw-r--r-- 0 root (0) root (0) 13987 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) 5639 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00257.html\n+-rw-r--r-- 0 root (0) root (0) 206584 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) 5552 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00263.html\n+-rw-r--r-- 0 root (0) root (0) 7124 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00266.html\n+-rw-r--r-- 0 root (0) root (0) 144 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00266.js\n+-rw-r--r-- 0 root (0) root (0) 25959 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) 5707 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00269.html\n+-rw-r--r-- 0 root (0) root (0) 12074 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00272.html\n+-rw-r--r-- 0 root (0) root (0) 444 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00272.js\n+-rw-r--r-- 0 root (0) root (0) 69958 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) 6302 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00275.html\n+-rw-r--r-- 0 root (0) root (0) 6858 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00278.html\n+-rw-r--r-- 0 root (0) root (0) 132 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00278.js\n+-rw-r--r-- 0 root (0) root (0) 19855 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) 7283 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00281.html\n+-rw-r--r-- 0 root (0) root (0) 85 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00281.js\n+-rw-r--r-- 0 root (0) root (0) 7321 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00284.html\n -rw-r--r-- 0 root (0) root (0) 136 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00284.js\n--rw-r--r-- 0 root (0) root (0) 29154 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) 9756 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00287.html\n--rw-r--r-- 0 root (0) root (0) 352 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00287.js\n--rw-r--r-- 0 root (0) root (0) 26504 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) 7569 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00293.html\n--rw-r--r-- 0 root (0) root (0) 81 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00293.js\n--rw-r--r-- 0 root (0) root (0) 32907 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) 7039 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00296.html\n--rw-r--r-- 0 root (0) root (0) 223 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00296.js\n--rw-r--r-- 0 root (0) root (0) 94047 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) 8992 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00299.html\n--rw-r--r-- 0 root (0) root (0) 103 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00299.js\n--rw-r--r-- 0 root (0) root (0) 24792 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00299_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/a00302.html\n--rw-r--r-- 0 root (0) root (0) 148 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00302.js\n--rw-r--r-- 0 root (0) root (0) 32402 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) 7047 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00305.html\n--rw-r--r-- 0 root (0) root (0) 144 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00305.js\n--rw-r--r-- 0 root (0) root (0) 25061 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00305_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/a00308.html\n--rw-r--r-- 0 root (0) root (0) 10697 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00311.html\n--rw-r--r-- 0 root (0) root (0) 403 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00311.js\n--rw-r--r-- 0 root (0) root (0) 79141 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) 6953 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00314.html\n--rw-r--r-- 0 root (0) root (0) 144 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00314.js\n--rw-r--r-- 0 root (0) root (0) 30607 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) 6858 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00317.html\n--rw-r--r-- 0 root (0) root (0) 132 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00317.js\n--rw-r--r-- 0 root (0) root (0) 19855 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) 6268 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00320.html\n--rw-r--r-- 0 root (0) root (0) 6259 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00323.html\n--rw-r--r-- 0 root (0) root (0) 6171 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00326.html\n--rw-r--r-- 0 root (0) root (0) 7527 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00329.html\n--rw-r--r-- 0 root (0) root (0) 152 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00329.js\n--rw-r--r-- 0 root (0) root (0) 49706 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) 7439 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00335.html\n--rw-r--r-- 0 root (0) root (0) 258 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00335.js\n--rw-r--r-- 0 root (0) root (0) 80368 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) 5656 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00338.html\n--rw-r--r-- 0 root (0) root (0) 10872 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00341.html\n--rw-r--r-- 0 root (0) root (0) 457 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00341.js\n--rw-r--r-- 0 root (0) root (0) 61746 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) 15430 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00344.html\n--rw-r--r-- 0 root (0) root (0) 661 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00344.js\n--rw-r--r-- 0 root (0) root (0) 23382 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) 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) 7636 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00353.html\n--rw-r--r-- 0 root (0) root (0) 101 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00353.js\n--rw-r--r-- 0 root (0) root (0) 33928 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) 6957 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00359.html\n--rw-r--r-- 0 root (0) root (0) 144 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00359.js\n--rw-r--r-- 0 root (0) root (0) 34458 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) 6253 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00362.html\n--rw-r--r-- 0 root (0) root (0) 8675 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00365.html\n--rw-r--r-- 0 root (0) root (0) 165 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00365.js\n--rw-r--r-- 0 root (0) root (0) 7581 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00368.html\n--rw-r--r-- 0 root (0) root (0) 286 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00368.js\n--rw-r--r-- 0 root (0) root (0) 41607 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) 6302 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00371.html\n--rw-r--r-- 0 root (0) root (0) 6284 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00374.html\n--rw-r--r-- 0 root (0) root (0) 7269 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00377.html\n--rw-r--r-- 0 root (0) root (0) 211 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00377.js\n--rw-r--r-- 0 root (0) root (0) 39700 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) 10562 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00380.html\n--rw-r--r-- 0 root (0) root (0) 392 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00380.js\n--rw-r--r-- 0 root (0) root (0) 84719 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) 7138 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00383.html\n--rw-r--r-- 0 root (0) root (0) 226 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00383.js\n--rw-r--r-- 0 root (0) root (0) 21252 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) 7319 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00386.html\n--rw-r--r-- 0 root (0) root (0) 164 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00386.js\n--rw-r--r-- 0 root (0) root (0) 42494 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) 6286 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00392.html\n--rw-r--r-- 0 root (0) root (0) 11287 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00395.html\n--rw-r--r-- 0 root (0) root (0) 454 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00395.js\n--rw-r--r-- 0 root (0) root (0) 10132 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00398.html\n--rw-r--r-- 0 root (0) root (0) 389 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00398.js\n--rw-r--r-- 0 root (0) root (0) 71861 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) 21198 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) 8178 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00290.html\n+-rw-r--r-- 0 root (0) root (0) 281 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00290.js\n+-rw-r--r-- 0 root (0) root (0) 68835 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) 7039 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00293.html\n+-rw-r--r-- 0 root (0) root (0) 223 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00293.js\n+-rw-r--r-- 0 root (0) root (0) 94047 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) 6968 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00296.html\n+-rw-r--r-- 0 root (0) root (0) 148 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00296.js\n+-rw-r--r-- 0 root (0) root (0) 32402 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) 7138 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00299.html\n+-rw-r--r-- 0 root (0) root (0) 226 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00299.js\n+-rw-r--r-- 0 root (0) root (0) 21252 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00299_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/a00302.html\n+-rw-r--r-- 0 root (0) root (0) 286 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00302.js\n+-rw-r--r-- 0 root (0) root (0) 41607 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) 5655 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00305.html\n+-rw-r--r-- 0 root (0) root (0) 31104 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) 5676 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00314.html\n+-rw-r--r-- 0 root (0) root (0) 6953 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00317.html\n+-rw-r--r-- 0 root (0) root (0) 144 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00317.js\n+-rw-r--r-- 0 root (0) root (0) 30607 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) 7741 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00320.html\n+-rw-r--r-- 0 root (0) root (0) 174 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00320.js\n+-rw-r--r-- 0 root (0) root (0) 103910 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) 11986 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00323.html\n+-rw-r--r-- 0 root (0) root (0) 475 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00323.js\n+-rw-r--r-- 0 root (0) root (0) 39165 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) 6957 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00326.html\n+-rw-r--r-- 0 root (0) root (0) 144 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00326.js\n+-rw-r--r-- 0 root (0) root (0) 34458 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) 6171 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00329.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) 5538 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00335.html\n+-rw-r--r-- 0 root (0) root (0) 6259 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) 9756 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00344.html\n+-rw-r--r-- 0 root (0) root (0) 352 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00344.js\n+-rw-r--r-- 0 root (0) root (0) 26504 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) 7340 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00347.html\n+-rw-r--r-- 0 root (0) root (0) 265 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00347.js\n+-rw-r--r-- 0 root (0) root (0) 32342 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00347_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/a00350.html\n+-rw-r--r-- 0 root (0) root (0) 258 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00350.js\n+-rw-r--r-- 0 root (0) root (0) 80368 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) 42494 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) 6350 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00356.html\n+-rw-r--r-- 0 root (0) root (0) 39426 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00359.html\n+-rw-r--r-- 0 root (0) root (0) 2373 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00359.js\n+-rw-r--r-- 0 root (0) root (0) 127405 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) 51201 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00362_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/a00365.html\n+-rw-r--r-- 0 root (0) root (0) 189 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00365.js\n+-rw-r--r-- 0 root (0) root (0) 42743 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) 10132 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00368.html\n+-rw-r--r-- 0 root (0) root (0) 389 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00368.js\n+-rw-r--r-- 0 root (0) root (0) 71861 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) 15430 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00371.html\n+-rw-r--r-- 0 root (0) root (0) 661 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00371.js\n+-rw-r--r-- 0 root (0) root (0) 23382 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) 4906 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00374.html\n+-rw-r--r-- 0 root (0) root (0) 6379 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00377.html\n+-rw-r--r-- 0 root (0) root (0) 6268 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00380.html\n+-rw-r--r-- 0 root (0) root (0) 6322 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00383.html\n+-rw-r--r-- 0 root (0) root (0) 5688 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00389.html\n+-rw-r--r-- 0 root (0) root (0) 31329 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) 10872 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00398.html\n+-rw-r--r-- 0 root (0) root (0) 457 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00398.js\n+-rw-r--r-- 0 root (0) root (0) 61746 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) 7695 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00401.html\n -rw-r--r-- 0 root (0) root (0) 146 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00401.js\n -rw-r--r-- 0 root (0) root (0) 34553 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) 7321 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00404.html\n--rw-r--r-- 0 root (0) root (0) 136 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00404.js\n--rw-r--r-- 0 root (0) root (0) 21198 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) 7206 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00407.html\n--rw-r--r-- 0 root (0) root (0) 189 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00407.js\n--rw-r--r-- 0 root (0) root (0) 42743 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) 6322 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00410.html\n--rw-r--r-- 0 root (0) root (0) 6288 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00413.html\n--rw-r--r-- 0 root (0) root (0) 5676 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00416.html\n--rw-r--r-- 0 root (0) root (0) 8154 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00422.html\n--rw-r--r-- 0 root (0) root (0) 210 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00422.js\n--rw-r--r-- 0 root (0) root (0) 25126 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) 6350 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00425.html\n--rw-r--r-- 0 root (0) root (0) 7340 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00431.html\n--rw-r--r-- 0 root (0) root (0) 265 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00431.js\n--rw-r--r-- 0 root (0) root (0) 32342 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) 7319 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00404.html\n+-rw-r--r-- 0 root (0) root (0) 164 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00404.js\n+-rw-r--r-- 0 root (0) root (0) 7636 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00407.html\n+-rw-r--r-- 0 root (0) root (0) 101 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00407.js\n+-rw-r--r-- 0 root (0) root (0) 33928 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) 6253 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00410.html\n+-rw-r--r-- 0 root (0) root (0) 7527 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00413.html\n+-rw-r--r-- 0 root (0) root (0) 152 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00413.js\n+-rw-r--r-- 0 root (0) root (0) 49706 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) 6883 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00416.html\n+-rw-r--r-- 0 root (0) root (0) 136 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00416.js\n+-rw-r--r-- 0 root (0) root (0) 29154 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) 8675 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00419.html\n+-rw-r--r-- 0 root (0) root (0) 165 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00419.js\n+-rw-r--r-- 0 root (0) root (0) 6288 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00422.html\n+-rw-r--r-- 0 root (0) root (0) 5665 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00425.html\n+-rw-r--r-- 0 root (0) root (0) 7569 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00428.html\n+-rw-r--r-- 0 root (0) root (0) 81 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00428.js\n+-rw-r--r-- 0 root (0) root (0) 32907 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00428_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/a00431.html\n -rw-r--r-- 0 root (0) root (0) 5565 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00434.html\n--rw-r--r-- 0 root (0) root (0) 11986 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00437.html\n--rw-r--r-- 0 root (0) root (0) 475 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00437.js\n--rw-r--r-- 0 root (0) root (0) 39165 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) 29089 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00440_source.html\n--rw-r--r-- 0 root (0) root (0) 5538 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00443.html\n--rw-r--r-- 0 root (0) root (0) 8178 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00446.html\n--rw-r--r-- 0 root (0) root (0) 281 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00446.js\n--rw-r--r-- 0 root (0) root (0) 68835 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00446_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/a00449.html\n--rw-r--r-- 0 root (0) root (0) 539 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00449.js\n--rw-r--r-- 0 root (0) root (0) 22880 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) 6171 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00455.html\n--rw-r--r-- 0 root (0) root (0) 8178 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00458.html\n--rw-r--r-- 0 root (0) root (0) 265 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00458.js\n--rw-r--r-- 0 root (0) root (0) 35173 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) 39426 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00461.html\n--rw-r--r-- 0 root (0) root (0) 2373 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00461.js\n--rw-r--r-- 0 root (0) root (0) 127405 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) 31104 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) 7741 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00467.html\n--rw-r--r-- 0 root (0) root (0) 174 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00467.js\n--rw-r--r-- 0 root (0) root (0) 103910 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) 5655 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00470.html\n--rw-r--r-- 0 root (0) root (0) 5665 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00473.html\n--rw-r--r-- 0 root (0) root (0) 10872 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00476.html\n--rw-r--r-- 0 root (0) root (0) 327 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00476.js\n+-rw-r--r-- 0 root (0) root (0) 29089 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) 11287 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00440.html\n+-rw-r--r-- 0 root (0) root (0) 454 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00440.js\n+-rw-r--r-- 0 root (0) root (0) 10872 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00443.html\n+-rw-r--r-- 0 root (0) root (0) 327 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00443.js\n+-rw-r--r-- 0 root (0) root (0) 6284 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00446.html\n+-rw-r--r-- 0 root (0) root (0) 8992 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00449.html\n+-rw-r--r-- 0 root (0) root (0) 103 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00449.js\n+-rw-r--r-- 0 root (0) root (0) 24792 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) 8178 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00452.html\n+-rw-r--r-- 0 root (0) root (0) 265 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00452.js\n+-rw-r--r-- 0 root (0) root (0) 35173 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) 5656 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00455.html\n+-rw-r--r-- 0 root (0) root (0) 8154 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00458.html\n+-rw-r--r-- 0 root (0) root (0) 210 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00458.js\n+-rw-r--r-- 0 root (0) root (0) 25126 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) 6286 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00461.html\n+-rw-r--r-- 0 root (0) root (0) 10697 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00464.html\n+-rw-r--r-- 0 root (0) root (0) 403 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00464.js\n+-rw-r--r-- 0 root (0) root (0) 79141 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) 7047 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) 25061 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) 14835 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00473.html\n+-rw-r--r-- 0 root (0) root (0) 539 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00473.js\n+-rw-r--r-- 0 root (0) root (0) 22880 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00473_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/a00479.html\n--rw-r--r-- 0 root (0) root (0) 7797 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00482.html\n--rw-r--r-- 0 root (0) root (0) 165 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00482.js\n--rw-r--r-- 0 root (0) root (0) 36848 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) 9159 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00485.html\n--rw-r--r-- 0 root (0) root (0) 180 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00485.js\n--rw-r--r-- 0 root (0) root (0) 6506 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00488.html\n--rw-r--r-- 0 root (0) root (0) 13719 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) 6903 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00491.html\n--rw-r--r-- 0 root (0) root (0) 93 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00491.js\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) 6908 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00497.html\n--rw-r--r-- 0 root (0) root (0) 134 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00497.js\n--rw-r--r-- 0 root (0) root (0) 58194 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00497_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/a00500.html\n--rw-r--r-- 0 root (0) root (0) 6403 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00503.html\n--rw-r--r-- 0 root (0) root (0) 79 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00503.js\n--rw-r--r-- 0 root (0) root (0) 29636 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) 5531 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00506.html\n--rw-r--r-- 0 root (0) root (0) 5521 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00509.html\n--rw-r--r-- 0 root (0) root (0) 5713 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00512.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) 7268 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00518.html\n--rw-r--r-- 0 root (0) root (0) 77 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00518.js\n--rw-r--r-- 0 root (0) root (0) 18804 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) 5697 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00521.html\n--rw-r--r-- 0 root (0) root (0) 7018 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00524.html\n--rw-r--r-- 0 root (0) root (0) 80 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00524.js\n--rw-r--r-- 0 root (0) root (0) 31373 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) 6690 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00527.html\n--rw-r--r-- 0 root (0) root (0) 73 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00527.js\n--rw-r--r-- 0 root (0) root (0) 57767 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) 5665 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00530.html\n--rw-r--r-- 0 root (0) root (0) 5755 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00533.html\n--rw-r--r-- 0 root (0) root (0) 6769 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00536.html\n--rw-r--r-- 0 root (0) root (0) 84 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00536.js\n--rw-r--r-- 0 root (0) root (0) 16945 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) 6226 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00539.html\n--rw-r--r-- 0 root (0) root (0) 74 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00539.js\n--rw-r--r-- 0 root (0) root (0) 15209 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) 8586 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00548.html\n--rw-r--r-- 0 root (0) root (0) 270 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00548.js\n--rw-r--r-- 0 root (0) root (0) 41431 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00548_source.html\n--rw-r--r-- 0 root (0) root (0) 6737 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00551.html\n--rw-r--r-- 0 root (0) root (0) 100 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00551.js\n--rw-r--r-- 0 root (0) root (0) 6587 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00554.html\n--rw-r--r-- 0 root (0) root (0) 162 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00554.js\n--rw-r--r-- 0 root (0) root (0) 18018 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) 9935 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00557.html\n--rw-r--r-- 0 root (0) root (0) 168 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00557.js\n--rw-r--r-- 0 root (0) root (0) 33611 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) 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) 6816 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00563.html\n--rw-r--r-- 0 root (0) root (0) 87 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00563.js\n--rw-r--r-- 0 root (0) root (0) 29314 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) 7749 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00566.html\n--rw-r--r-- 0 root (0) root (0) 5709 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00569.html\n--rw-r--r-- 0 root (0) root (0) 13267 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00572.html\n--rw-r--r-- 0 root (0) root (0) 681 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00572.js\n--rw-r--r-- 0 root (0) root (0) 22145 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) 7505 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00575.html\n--rw-r--r-- 0 root (0) root (0) 221 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00575.js\n--rw-r--r-- 0 root (0) root (0) 65993 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) 28303 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) 15849 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00581.html\n--rw-r--r-- 0 root (0) root (0) 641 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00581.js\n--rw-r--r-- 0 root (0) root (0) 30059 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) 5529 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00584.html\n--rw-r--r-- 0 root (0) root (0) 6167 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00587.html\n--rw-r--r-- 0 root (0) root (0) 101 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00587.js\n--rw-r--r-- 0 root (0) root (0) 42759 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) 7023 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00590.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) 6903 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00485.html\n+-rw-r--r-- 0 root (0) root (0) 93 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00485.js\n+-rw-r--r-- 0 root (0) root (0) 5533 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00488.html\n+-rw-r--r-- 0 root (0) root (0) 6769 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00491.html\n+-rw-r--r-- 0 root (0) root (0) 84 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00491.js\n+-rw-r--r-- 0 root (0) root (0) 16945 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) 6737 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00494.html\n+-rw-r--r-- 0 root (0) root (0) 100 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00494.js\n+-rw-r--r-- 0 root (0) root (0) 7268 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00497.html\n+-rw-r--r-- 0 root (0) root (0) 77 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00497.js\n+-rw-r--r-- 0 root (0) root (0) 18804 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00497_source.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) 8586 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00503.html\n+-rw-r--r-- 0 root (0) root (0) 270 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00503.js\n+-rw-r--r-- 0 root (0) root (0) 41431 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) 6506 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00506.html\n+-rw-r--r-- 0 root (0) root (0) 13719 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) 5524 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00509.html\n+-rw-r--r-- 0 root (0) root (0) 6226 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00512.html\n+-rw-r--r-- 0 root (0) root (0) 74 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00512.js\n+-rw-r--r-- 0 root (0) root (0) 15209 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00512_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/a00515.html\n+-rw-r--r-- 0 root (0) root (0) 134 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00515.js\n+-rw-r--r-- 0 root (0) root (0) 58194 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00515_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/a00518.html\n+-rw-r--r-- 0 root (0) root (0) 6322 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00521.html\n+-rw-r--r-- 0 root (0) root (0) 15766 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00521_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/a00524.html\n+-rw-r--r-- 0 root (0) root (0) 231 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00524.js\n+-rw-r--r-- 0 root (0) root (0) 31331 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) 5713 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00527.html\n+-rw-r--r-- 0 root (0) root (0) 6403 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00530.html\n+-rw-r--r-- 0 root (0) root (0) 79 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00530.js\n+-rw-r--r-- 0 root (0) root (0) 29636 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) 5531 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00533.html\n+-rw-r--r-- 0 root (0) root (0) 6582 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00536.html\n+-rw-r--r-- 0 root (0) root (0) 83 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00536.js\n+-rw-r--r-- 0 root (0) root (0) 42027 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) 7018 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00539.html\n+-rw-r--r-- 0 root (0) root (0) 80 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00539.js\n+-rw-r--r-- 0 root (0) root (0) 31373 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) 9159 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00542.html\n+-rw-r--r-- 0 root (0) root (0) 180 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00542.js\n+-rw-r--r-- 0 root (0) root (0) 6690 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00545.html\n+-rw-r--r-- 0 root (0) root (0) 73 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00545.js\n+-rw-r--r-- 0 root (0) root (0) 57767 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00545_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/a00548.html\n+-rw-r--r-- 0 root (0) root (0) 9935 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00551.html\n+-rw-r--r-- 0 root (0) root (0) 168 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00551.js\n+-rw-r--r-- 0 root (0) root (0) 33611 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) 7797 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00554.html\n+-rw-r--r-- 0 root (0) root (0) 165 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00554.js\n+-rw-r--r-- 0 root (0) root (0) 36848 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) 5709 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00557.html\n+-rw-r--r-- 0 root (0) root (0) 6816 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00560.html\n+-rw-r--r-- 0 root (0) root (0) 87 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00560.js\n+-rw-r--r-- 0 root (0) root (0) 29314 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) 7749 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00563.html\n+-rw-r--r-- 0 root (0) root (0) 5697 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00569.html\n+-rw-r--r-- 0 root (0) root (0) 7807 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00572.html\n+-rw-r--r-- 0 root (0) root (0) 240 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00572.js\n+-rw-r--r-- 0 root (0) root (0) 56707 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) 13267 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00575.html\n+-rw-r--r-- 0 root (0) root (0) 681 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00575.js\n+-rw-r--r-- 0 root (0) root (0) 22145 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) 5671 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00578.html\n+-rw-r--r-- 0 root (0) root (0) 18304 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) 6648 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00584.html\n+-rw-r--r-- 0 root (0) root (0) 229 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00584.js\n+-rw-r--r-- 0 root (0) root (0) 34362 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00584_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/a00587.html\n+-rw-r--r-- 0 root (0) root (0) 221 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00587.js\n+-rw-r--r-- 0 root (0) root (0) 65993 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) 6879 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00590.html\n -rw-r--r-- 0 root (0) root (0) 136 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00590.js\n--rw-r--r-- 0 root (0) root (0) 23512 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) 5734 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00593.html\n--rw-r--r-- 0 root (0) root (0) 46729 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) 38328 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) 8617 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00593.html\n+-rw-r--r-- 0 root (0) root (0) 96 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00593.js\n+-rw-r--r-- 0 root (0) root (0) 19774 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) 6459 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00596.html\n -rw-r--r-- 0 root (0) root (0) 22692 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) 6465 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00599.html\n--rw-r--r-- 0 root (0) root (0) 70 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00599.js\n--rw-r--r-- 0 root (0) root (0) 18421 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) 7205 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00602.html\n--rw-r--r-- 0 root (0) root (0) 166 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00602.js\n--rw-r--r-- 0 root (0) root (0) 56256 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) 90312 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00605_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/a00608_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/a00611.html\n--rw-r--r-- 0 root (0) root (0) 262 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00611.js\n--rw-r--r-- 0 root (0) root (0) 88802 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) 5593 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00614.html\n--rw-r--r-- 0 root (0) root (0) 17977 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) 6648 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00620.html\n--rw-r--r-- 0 root (0) root (0) 229 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00620.js\n--rw-r--r-- 0 root (0) root (0) 34362 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) 5606 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00599.html\n+-rw-r--r-- 0 root (0) root (0) 22139 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) 5639 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00605.html\n+-rw-r--r-- 0 root (0) root (0) 66585 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00605_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/a00608.html\n+-rw-r--r-- 0 root (0) root (0) 178 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00608.js\n+-rw-r--r-- 0 root (0) root (0) 36162 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) 5523 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00611.html\n+-rw-r--r-- 0 root (0) root (0) 6700 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00614.html\n+-rw-r--r-- 0 root (0) root (0) 15755 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) 5529 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00617.html\n+-rw-r--r-- 0 root (0) root (0) 5520 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00620.html\n -rw-r--r-- 0 root (0) root (0) 5705 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00623.html\n -rw-r--r-- 0 root (0) root (0) 51666 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) 8617 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00626.html\n--rw-r--r-- 0 root (0) root (0) 96 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00626.js\n--rw-r--r-- 0 root (0) root (0) 19774 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) 5520 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00629.html\n--rw-r--r-- 0 root (0) root (0) 6700 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00632.html\n--rw-r--r-- 0 root (0) root (0) 15755 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) 7807 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00635.html\n--rw-r--r-- 0 root (0) root (0) 240 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00635.js\n--rw-r--r-- 0 root (0) root (0) 56707 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) 5666 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00626.html\n+-rw-r--r-- 0 root (0) root (0) 6687 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00629.html\n+-rw-r--r-- 0 root (0) root (0) 126 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00629.js\n+-rw-r--r-- 0 root (0) root (0) 49427 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) 90312 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) 5734 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00635.html\n+-rw-r--r-- 0 root (0) root (0) 46729 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) 5591 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00638.html\n--rw-r--r-- 0 root (0) root (0) 7687 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00641.html\n--rw-r--r-- 0 root (0) root (0) 146 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00641.js\n--rw-r--r-- 0 root (0) root (0) 38682 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) 6436 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00644.html\n--rw-r--r-- 0 root (0) root (0) 22543 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) 5671 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00647.html\n--rw-r--r-- 0 root (0) root (0) 18304 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) 5523 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00650.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) 5606 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00656.html\n--rw-r--r-- 0 root (0) root (0) 22139 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) 5639 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00659.html\n--rw-r--r-- 0 root (0) root (0) 66585 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) 6363 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00662.html\n--rw-r--r-- 0 root (0) root (0) 77 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00662.js\n--rw-r--r-- 0 root (0) root (0) 15140 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) 10019 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00665.html\n--rw-r--r-- 0 root (0) root (0) 449 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00665.js\n--rw-r--r-- 0 root (0) root (0) 31790 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) 6687 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00668.html\n--rw-r--r-- 0 root (0) root (0) 126 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00668.js\n--rw-r--r-- 0 root (0) root (0) 49427 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00668_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/a00671_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/a00674.html\n--rw-r--r-- 0 root (0) root (0) 88 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00674.js\n--rw-r--r-- 0 root (0) root (0) 11023 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) 6367 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00677.html\n--rw-r--r-- 0 root (0) root (0) 6454 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00680.html\n--rw-r--r-- 0 root (0) root (0) 103 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00680.js\n--rw-r--r-- 0 root (0) root (0) 46554 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) 6879 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00683.html\n--rw-r--r-- 0 root (0) root (0) 136 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00683.js\n--rw-r--r-- 0 root (0) root (0) 38328 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) 5637 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00692.html\n--rw-r--r-- 0 root (0) root (0) 6695 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00695.html\n--rw-r--r-- 0 root (0) root (0) 189 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00695.js\n--rw-r--r-- 0 root (0) root (0) 62349 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) 5666 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00698.html\n--rw-r--r-- 0 root (0) root (0) 6945 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00701.html\n--rw-r--r-- 0 root (0) root (0) 113625 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) 7362 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00704.html\n--rw-r--r-- 0 root (0) root (0) 13056 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) 8332 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00707.html\n--rw-r--r-- 0 root (0) root (0) 192 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00707.js\n--rw-r--r-- 0 root (0) root (0) 7759 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00710.html\n--rw-r--r-- 0 root (0) root (0) 6141 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00713.html\n--rw-r--r-- 0 root (0) root (0) 83 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00713.js\n--rw-r--r-- 0 root (0) root (0) 15664 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) 5601 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00716.html\n--rw-r--r-- 0 root (0) root (0) 8297 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00719.html\n--rw-r--r-- 0 root (0) root (0) 94 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00719.js\n--rw-r--r-- 0 root (0) root (0) 7443 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00722.html\n--rw-r--r-- 0 root (0) root (0) 163 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00722.js\n--rw-r--r-- 0 root (0) root (0) 33932 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) 6842 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00725.html\n--rw-r--r-- 0 root (0) root (0) 86 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00725.js\n--rw-r--r-- 0 root (0) root (0) 40634 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) 37272 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) 69549 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) 6475 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00734.html\n--rw-r--r-- 0 root (0) root (0) 5668 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00737.html\n--rw-r--r-- 0 root (0) root (0) 12032 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) 8124 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00740.html\n--rw-r--r-- 0 root (0) root (0) 5557 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00743.html\n--rw-r--r-- 0 root (0) root (0) 5643 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00746.html\n--rw-r--r-- 0 root (0) root (0) 7999 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00749.html\n--rw-r--r-- 0 root (0) root (0) 276 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00749.js\n--rw-r--r-- 0 root (0) root (0) 21749 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) 8957 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00752.html\n--rw-r--r-- 0 root (0) root (0) 312 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00752.js\n--rw-r--r-- 0 root (0) root (0) 60246 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) 15960 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00755.html\n--rw-r--r-- 0 root (0) root (0) 891 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00755.js\n--rw-r--r-- 0 root (0) root (0) 125878 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) 6428 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00758.html\n--rw-r--r-- 0 root (0) root (0) 83 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00758.js\n--rw-r--r-- 0 root (0) root (0) 25237 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) 7995 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00761.html\n--rw-r--r-- 0 root (0) root (0) 216 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00761.js\n--rw-r--r-- 0 root (0) root (0) 73746 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) 7323 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00764.html\n--rw-r--r-- 0 root (0) root (0) 116 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00764.js\n--rw-r--r-- 0 root (0) root (0) 16423 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) 8668 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00767.html\n--rw-r--r-- 0 root (0) root (0) 180 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00767.js\n--rw-r--r-- 0 root (0) root (0) 15601 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) 7433 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00773.html\n--rw-r--r-- 0 root (0) root (0) 207 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00773.js\n--rw-r--r-- 0 root (0) root (0) 22427 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) 7717 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00641.html\n+-rw-r--r-- 0 root (0) root (0) 262 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00641.js\n+-rw-r--r-- 0 root (0) root (0) 88802 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) 5637 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00644.html\n+-rw-r--r-- 0 root (0) root (0) 7205 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00647.html\n+-rw-r--r-- 0 root (0) root (0) 166 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00647.js\n+-rw-r--r-- 0 root (0) root (0) 56256 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) 28303 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) 6476 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00653.html\n+-rw-r--r-- 0 root (0) root (0) 88 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00653.js\n+-rw-r--r-- 0 root (0) root (0) 11023 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) 28749 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) 7687 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00659.html\n+-rw-r--r-- 0 root (0) root (0) 146 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00659.js\n+-rw-r--r-- 0 root (0) root (0) 38682 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) 6167 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00665.html\n+-rw-r--r-- 0 root (0) root (0) 101 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00665.js\n+-rw-r--r-- 0 root (0) root (0) 42759 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) 5593 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00668.html\n+-rw-r--r-- 0 root (0) root (0) 17977 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00668_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/a00671.html\n+-rw-r--r-- 0 root (0) root (0) 113625 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) 6454 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00674.html\n+-rw-r--r-- 0 root (0) root (0) 103 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00674.js\n+-rw-r--r-- 0 root (0) root (0) 46554 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) 10019 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00677.html\n+-rw-r--r-- 0 root (0) root (0) 449 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00677.js\n+-rw-r--r-- 0 root (0) root (0) 31790 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/a00680_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/a00683.html\n+-rw-r--r-- 0 root (0) root (0) 22543 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) 6367 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00686.html\n+-rw-r--r-- 0 root (0) root (0) 6465 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00689.html\n+-rw-r--r-- 0 root (0) root (0) 70 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00689.js\n+-rw-r--r-- 0 root (0) root (0) 18421 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) 7023 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00695.html\n+-rw-r--r-- 0 root (0) root (0) 136 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00695.js\n+-rw-r--r-- 0 root (0) root (0) 23512 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) 6363 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00698.html\n+-rw-r--r-- 0 root (0) root (0) 77 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00698.js\n+-rw-r--r-- 0 root (0) root (0) 15140 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) 6695 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00701.html\n+-rw-r--r-- 0 root (0) root (0) 189 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00701.js\n+-rw-r--r-- 0 root (0) root (0) 62349 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) 7445 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00704.html\n+-rw-r--r-- 0 root (0) root (0) 87 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00704.js\n+-rw-r--r-- 0 root (0) root (0) 35988 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) 5648 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00710.html\n+-rw-r--r-- 0 root (0) root (0) 7940 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00713.html\n+-rw-r--r-- 0 root (0) root (0) 245 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00713.js\n+-rw-r--r-- 0 root (0) root (0) 32692 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) 5668 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00716.html\n+-rw-r--r-- 0 root (0) root (0) 12032 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) 7210 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00719.html\n+-rw-r--r-- 0 root (0) root (0) 176 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00719.js\n+-rw-r--r-- 0 root (0) root (0) 28405 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) 7999 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00722.html\n+-rw-r--r-- 0 root (0) root (0) 276 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00722.js\n+-rw-r--r-- 0 root (0) root (0) 21749 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) 8188 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00725.html\n+-rw-r--r-- 0 root (0) root (0) 313 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00725.js\n+-rw-r--r-- 0 root (0) root (0) 73410 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) 13381 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00728.html\n+-rw-r--r-- 0 root (0) root (0) 665 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00728.js\n+-rw-r--r-- 0 root (0) root (0) 19609 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) 5627 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00731.html\n+-rw-r--r-- 0 root (0) root (0) 28869 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) 69549 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) 6141 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00740.html\n+-rw-r--r-- 0 root (0) root (0) 83 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00740.js\n+-rw-r--r-- 0 root (0) root (0) 15664 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) 9091 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00746.html\n+-rw-r--r-- 0 root (0) root (0) 185 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00746.js\n+-rw-r--r-- 0 root (0) root (0) 7323 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00749.html\n+-rw-r--r-- 0 root (0) root (0) 116 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00749.js\n+-rw-r--r-- 0 root (0) root (0) 16423 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) 6581 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00752.html\n+-rw-r--r-- 0 root (0) root (0) 17930 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) 5520 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00755.html\n+-rw-r--r-- 0 root (0) root (0) 37272 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) 12146 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00761.html\n+-rw-r--r-- 0 root (0) root (0) 536 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00761.js\n+-rw-r--r-- 0 root (0) root (0) 6562 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00764.html\n+-rw-r--r-- 0 root (0) root (0) 160 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00764.js\n+-rw-r--r-- 0 root (0) root (0) 56968 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) 5571 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00767.html\n+-rw-r--r-- 0 root (0) root (0) 13120 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00770.html\n+-rw-r--r-- 0 root (0) root (0) 670 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00770.js\n+-rw-r--r-- 0 root (0) root (0) 28259 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) 5557 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00773.html\n+-rw-r--r-- 0 root (0) root (0) 7195 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00776.html\n+-rw-r--r-- 0 root (0) root (0) 94 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00776.js\n+-rw-r--r-- 0 root (0) root (0) 29635 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) 6419 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00779.html\n--rw-r--r-- 0 root (0) root (0) 6581 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00785.html\n--rw-r--r-- 0 root (0) root (0) 17930 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) 7058 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00788.html\n--rw-r--r-- 0 root (0) root (0) 138 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00788.js\n--rw-r--r-- 0 root (0) root (0) 39533 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00788_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/a00791.html\n--rw-r--r-- 0 root (0) root (0) 536 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00791.js\n--rw-r--r-- 0 root (0) root (0) 6717 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00794.html\n--rw-r--r-- 0 root (0) root (0) 138 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00794.js\n--rw-r--r-- 0 root (0) root (0) 22245 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) 7940 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00797.html\n--rw-r--r-- 0 root (0) root (0) 245 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00797.js\n--rw-r--r-- 0 root (0) root (0) 32692 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00797_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/a00800.html\n--rw-r--r-- 0 root (0) root (0) 7210 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00803.html\n--rw-r--r-- 0 root (0) root (0) 176 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00803.js\n--rw-r--r-- 0 root (0) root (0) 28405 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) 5609 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00806.html\n--rw-r--r-- 0 root (0) root (0) 5725 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00809.html\n--rw-r--r-- 0 root (0) root (0) 7195 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00812.html\n--rw-r--r-- 0 root (0) root (0) 94 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00812.js\n--rw-r--r-- 0 root (0) root (0) 29635 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) 7445 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00815.html\n--rw-r--r-- 0 root (0) root (0) 87 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00815.js\n--rw-r--r-- 0 root (0) root (0) 35988 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) 5691 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00818.html\n--rw-r--r-- 0 root (0) root (0) 7661 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00821.html\n--rw-r--r-- 0 root (0) root (0) 188 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00821.js\n--rw-r--r-- 0 root (0) root (0) 38060 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) 27298 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) 5562 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00827.html\n--rw-r--r-- 0 root (0) root (0) 7225 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00830.html\n--rw-r--r-- 0 root (0) root (0) 78 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00830.js\n--rw-r--r-- 0 root (0) root (0) 69400 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) 6901 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00833.html\n--rw-r--r-- 0 root (0) root (0) 85 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00833.js\n--rw-r--r-- 0 root (0) root (0) 46918 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) 7316 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00836.html\n--rw-r--r-- 0 root (0) root (0) 97 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00836.js\n--rw-r--r-- 0 root (0) root (0) 5627 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00839.html\n--rw-r--r-- 0 root (0) root (0) 8871 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00842.html\n--rw-r--r-- 0 root (0) root (0) 415 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00842.js\n--rw-r--r-- 0 root (0) root (0) 38721 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) 6978 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00848.html\n--rw-r--r-- 0 root (0) root (0) 82 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00848.js\n--rw-r--r-- 0 root (0) root (0) 35496 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) 10979 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00851.html\n--rw-r--r-- 0 root (0) root (0) 453 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00851.js\n--rw-r--r-- 0 root (0) root (0) 5520 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00854.html\n--rw-r--r-- 0 root (0) root (0) 13381 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00857.html\n--rw-r--r-- 0 root (0) root (0) 665 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00857.js\n--rw-r--r-- 0 root (0) root (0) 19609 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) 6366 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00860.html\n--rw-r--r-- 0 root (0) root (0) 67 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00860.js\n--rw-r--r-- 0 root (0) root (0) 13881 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) 7128 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00863.html\n--rw-r--r-- 0 root (0) root (0) 72 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00863.js\n--rw-r--r-- 0 root (0) root (0) 26183 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00863_source.html\n--rw-r--r-- 0 root (0) root (0) 6532 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00866.html\n--rw-r--r-- 0 root (0) root (0) 134 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00866.js\n--rw-r--r-- 0 root (0) root (0) 12972 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) 5648 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00869.html\n--rw-r--r-- 0 root (0) root (0) 5770 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00872.html\n--rw-r--r-- 0 root (0) root (0) 13639 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) 9091 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00875.html\n--rw-r--r-- 0 root (0) root (0) 185 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00875.js\n--rw-r--r-- 0 root (0) root (0) 6387 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00878.html\n--rw-r--r-- 0 root (0) root (0) 13406 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00878_source.html\n--rw-r--r-- 0 root (0) root (0) 13120 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00881.html\n--rw-r--r-- 0 root (0) root (0) 670 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00881.js\n--rw-r--r-- 0 root (0) root (0) 28259 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) 5571 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00887.html\n--rw-r--r-- 0 root (0) root (0) 28869 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) 6562 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00893.html\n--rw-r--r-- 0 root (0) root (0) 160 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00893.js\n--rw-r--r-- 0 root (0) root (0) 56968 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) 6663 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00896.html\n--rw-r--r-- 0 root (0) root (0) 154 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00896.js\n--rw-r--r-- 0 root (0) root (0) 29640 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) 8188 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00899.html\n--rw-r--r-- 0 root (0) root (0) 313 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00899.js\n--rw-r--r-- 0 root (0) root (0) 73410 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00899_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/a00905.html\n--rw-r--r-- 0 root (0) root (0) 80 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00905.js\n--rw-r--r-- 0 root (0) root (0) 23692 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00905_source.html\n--rw-r--r-- 0 root (0) root (0) 7763 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00908.html\n--rw-r--r-- 0 root (0) root (0) 223 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00908.js\n--rw-r--r-- 0 root (0) root (0) 38413 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) 6864 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00911.html\n--rw-r--r-- 0 root (0) root (0) 5660 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00914.html\n--rw-r--r-- 0 root (0) root (0) 5559 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00917.html\n--rw-r--r-- 0 root (0) root (0) 6439 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00920.html\n--rw-r--r-- 0 root (0) root (0) 140 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00920.js\n--rw-r--r-- 0 root (0) root (0) 33448 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) 11831 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00923.html\n--rw-r--r-- 0 root (0) root (0) 6611 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) 18128 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) 7321 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00932.html\n--rw-r--r-- 0 root (0) root (0) 197 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00932.js\n--rw-r--r-- 0 root (0) root (0) 33342 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00932_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/a00935.html\n--rw-r--r-- 0 root (0) root (0) 9760 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00938.html\n--rw-r--r-- 0 root (0) root (0) 316 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00938.js\n--rw-r--r-- 0 root (0) root (0) 59601 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) 6683 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00941.html\n--rw-r--r-- 0 root (0) root (0) 143 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00941.js\n--rw-r--r-- 0 root (0) root (0) 41393 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) 6921 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00944.html\n--rw-r--r-- 0 root (0) root (0) 152 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00944.js\n--rw-r--r-- 0 root (0) root (0) 37965 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) 32900 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) 6963 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00956.html\n--rw-r--r-- 0 root (0) root (0) 93 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00956.js\n--rw-r--r-- 0 root (0) root (0) 7639 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00959.html\n--rw-r--r-- 0 root (0) root (0) 202 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00959.js\n--rw-r--r-- 0 root (0) root (0) 39261 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00959_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/a00965.html\n--rw-r--r-- 0 root (0) root (0) 5609 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00968.html\n--rw-r--r-- 0 root (0) root (0) 5635 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00971.html\n--rw-r--r-- 0 root (0) root (0) 8571 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00974.html\n--rw-r--r-- 0 root (0) root (0) 153 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00974.js\n--rw-r--r-- 0 root (0) root (0) 49274 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) 6414 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00977.html\n--rw-r--r-- 0 root (0) root (0) 81 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00977.js\n--rw-r--r-- 0 root (0) root (0) 25637 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) 8465 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00980.html\n--rw-r--r-- 0 root (0) root (0) 231 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00980.js\n--rw-r--r-- 0 root (0) root (0) 47156 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00980_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/a00983.html\n--rw-r--r-- 0 root (0) root (0) 78 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00983.js\n--rw-r--r-- 0 root (0) root (0) 34621 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00983_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/a00986.html\n--rw-r--r-- 0 root (0) root (0) 213 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00986.js\n--rw-r--r-- 0 root (0) root (0) 55825 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) 5669 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00989.html\n--rw-r--r-- 0 root (0) root (0) 6359 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00992.html\n--rw-r--r-- 0 root (0) root (0) 82 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00992.js\n--rw-r--r-- 0 root (0) root (0) 24129 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) 7433 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00782.html\n+-rw-r--r-- 0 root (0) root (0) 207 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00782.js\n+-rw-r--r-- 0 root (0) root (0) 22427 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) 15960 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00788.html\n+-rw-r--r-- 0 root (0) root (0) 891 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00788.js\n+-rw-r--r-- 0 root (0) root (0) 125878 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00788_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/a00791.html\n+-rw-r--r-- 0 root (0) root (0) 6366 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00794.html\n+-rw-r--r-- 0 root (0) root (0) 67 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00794.js\n+-rw-r--r-- 0 root (0) root (0) 13881 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) 10979 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00797.html\n+-rw-r--r-- 0 root (0) root (0) 453 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00797.js\n+-rw-r--r-- 0 root (0) root (0) 6428 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00800.html\n+-rw-r--r-- 0 root (0) root (0) 83 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00800.js\n+-rw-r--r-- 0 root (0) root (0) 25237 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) 7058 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00803.html\n+-rw-r--r-- 0 root (0) root (0) 138 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00803.js\n+-rw-r--r-- 0 root (0) root (0) 39533 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) 7661 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00806.html\n+-rw-r--r-- 0 root (0) root (0) 188 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00806.js\n+-rw-r--r-- 0 root (0) root (0) 38060 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) 6978 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00809.html\n+-rw-r--r-- 0 root (0) root (0) 82 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00809.js\n+-rw-r--r-- 0 root (0) root (0) 35496 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00809_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/a00815.html\n+-rw-r--r-- 0 root (0) root (0) 13406 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) 6717 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00818.html\n+-rw-r--r-- 0 root (0) root (0) 138 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00818.js\n+-rw-r--r-- 0 root (0) root (0) 22245 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) 7759 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00821.html\n+-rw-r--r-- 0 root (0) root (0) 5601 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00824.html\n+-rw-r--r-- 0 root (0) root (0) 7362 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00827.html\n+-rw-r--r-- 0 root (0) root (0) 13056 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) 7995 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00833.html\n+-rw-r--r-- 0 root (0) root (0) 216 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00833.js\n+-rw-r--r-- 0 root (0) root (0) 73746 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) 5725 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00836.html\n+-rw-r--r-- 0 root (0) root (0) 5691 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00839.html\n+-rw-r--r-- 0 root (0) root (0) 27298 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) 6532 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00845.html\n+-rw-r--r-- 0 root (0) root (0) 134 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00845.js\n+-rw-r--r-- 0 root (0) root (0) 12972 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) 8332 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00848.html\n+-rw-r--r-- 0 root (0) root (0) 192 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00848.js\n+-rw-r--r-- 0 root (0) root (0) 5562 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00851.html\n+-rw-r--r-- 0 root (0) root (0) 8871 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00857.html\n+-rw-r--r-- 0 root (0) root (0) 415 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00857.js\n+-rw-r--r-- 0 root (0) root (0) 38721 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) 6663 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00860.html\n+-rw-r--r-- 0 root (0) root (0) 154 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00860.js\n+-rw-r--r-- 0 root (0) root (0) 29640 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) 8668 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00863.html\n+-rw-r--r-- 0 root (0) root (0) 180 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00863.js\n+-rw-r--r-- 0 root (0) root (0) 15601 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00863_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/a00866.html\n+-rw-r--r-- 0 root (0) root (0) 85 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00866.js\n+-rw-r--r-- 0 root (0) root (0) 46918 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) 7225 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00869.html\n+-rw-r--r-- 0 root (0) root (0) 78 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00869.js\n+-rw-r--r-- 0 root (0) root (0) 69400 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00869_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/a00872.html\n+-rw-r--r-- 0 root (0) root (0) 163 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00872.js\n+-rw-r--r-- 0 root (0) root (0) 33932 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) 7316 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00875.html\n+-rw-r--r-- 0 root (0) root (0) 97 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00875.js\n+-rw-r--r-- 0 root (0) root (0) 8297 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00878.html\n+-rw-r--r-- 0 root (0) root (0) 94 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00878.js\n+-rw-r--r-- 0 root (0) root (0) 5578 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00881.html\n+-rw-r--r-- 0 root (0) root (0) 7128 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00884.html\n+-rw-r--r-- 0 root (0) root (0) 72 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00884.js\n+-rw-r--r-- 0 root (0) root (0) 26183 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) 8957 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00887.html\n+-rw-r--r-- 0 root (0) root (0) 312 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00887.js\n+-rw-r--r-- 0 root (0) root (0) 60246 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) 5643 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00890.html\n+-rw-r--r-- 0 root (0) root (0) 5609 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00893.html\n+-rw-r--r-- 0 root (0) root (0) 6842 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00896.html\n+-rw-r--r-- 0 root (0) root (0) 86 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00896.js\n+-rw-r--r-- 0 root (0) root (0) 40634 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) 5770 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00899.html\n+-rw-r--r-- 0 root (0) root (0) 13639 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00899_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/a00905.html\n+-rw-r--r-- 0 root (0) root (0) 82 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00905.js\n+-rw-r--r-- 0 root (0) root (0) 24129 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00905_source.html\n+-rw-r--r-- 0 root (0) root (0) 6439 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00908.html\n+-rw-r--r-- 0 root (0) root (0) 140 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00908.js\n+-rw-r--r-- 0 root (0) root (0) 33448 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) 8571 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00911.html\n+-rw-r--r-- 0 root (0) root (0) 153 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00911.js\n+-rw-r--r-- 0 root (0) root (0) 49274 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) 7763 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00917.html\n+-rw-r--r-- 0 root (0) root (0) 223 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00917.js\n+-rw-r--r-- 0 root (0) root (0) 38413 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) 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) 8826 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00926.html\n+-rw-r--r-- 0 root (0) root (0) 213 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00926.js\n+-rw-r--r-- 0 root (0) root (0) 55825 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) 6963 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00929.html\n+-rw-r--r-- 0 root (0) root (0) 93 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00929.js\n+-rw-r--r-- 0 root (0) root (0) 6683 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00932.html\n+-rw-r--r-- 0 root (0) root (0) 143 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00932.js\n+-rw-r--r-- 0 root (0) root (0) 41393 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00932_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/a00935.html\n+-rw-r--r-- 0 root (0) root (0) 7069 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00938.html\n+-rw-r--r-- 0 root (0) root (0) 78 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00938.js\n+-rw-r--r-- 0 root (0) root (0) 34621 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) 32900 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) 9760 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00947.html\n+-rw-r--r-- 0 root (0) root (0) 316 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00947.js\n+-rw-r--r-- 0 root (0) root (0) 59601 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) 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) 6921 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00953.html\n+-rw-r--r-- 0 root (0) root (0) 152 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00953.js\n+-rw-r--r-- 0 root (0) root (0) 37965 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) 6414 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00956.html\n+-rw-r--r-- 0 root (0) root (0) 81 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00956.js\n+-rw-r--r-- 0 root (0) root (0) 25637 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) 5612 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00959.html\n+-rw-r--r-- 0 root (0) root (0) 6864 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00962.html\n+-rw-r--r-- 0 root (0) root (0) 5660 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00965.html\n+-rw-r--r-- 0 root (0) root (0) 7321 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00968.html\n+-rw-r--r-- 0 root (0) root (0) 197 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00968.js\n+-rw-r--r-- 0 root (0) root (0) 33342 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) 5669 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00971.html\n+-rw-r--r-- 0 root (0) root (0) 5635 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00977.html\n+-rw-r--r-- 0 root (0) root (0) 9996 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00980.html\n+-rw-r--r-- 0 root (0) root (0) 6390 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00983.html\n+-rw-r--r-- 0 root (0) root (0) 24874 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00983_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/a00986.html\n+-rw-r--r-- 0 root (0) root (0) 202 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00986.js\n+-rw-r--r-- 0 root (0) root (0) 39261 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) 8465 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00992.html\n+-rw-r--r-- 0 root (0) root (0) 231 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00992.js\n+-rw-r--r-- 0 root (0) root (0) 47156 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) 7029 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00995.html\n -rw-r--r-- 0 root (0) root (0) 35940 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) 6390 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00998.html\n--rw-r--r-- 0 root (0) root (0) 24874 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) 5757 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01001.html\n--rw-r--r-- 0 root (0) root (0) 10303 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01004.html\n--rw-r--r-- 0 root (0) root (0) 693 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01004.js\n--rw-r--r-- 0 root (0) root (0) 99817 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) 10777 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01010.html\n--rw-r--r-- 0 root (0) root (0) 201 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01010.js\n--rw-r--r-- 0 root (0) root (0) 26364 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) 6497 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01013.html\n--rw-r--r-- 0 root (0) root (0) 89 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01013.js\n--rw-r--r-- 0 root (0) root (0) 21256 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) 74370 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) 8403 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01019.html\n--rw-r--r-- 0 root (0) root (0) 161 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01019.js\n--rw-r--r-- 0 root (0) root (0) 23145 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) 5672 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01022.html\n--rw-r--r-- 0 root (0) root (0) 8813 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01025.html\n--rw-r--r-- 0 root (0) root (0) 156 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01025.js\n--rw-r--r-- 0 root (0) root (0) 60117 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) 7509 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01031.html\n--rw-r--r-- 0 root (0) root (0) 72 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01031.js\n--rw-r--r-- 0 root (0) root (0) 23599 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) 6201 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01034.html\n--rw-r--r-- 0 root (0) root (0) 8182 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01040.html\n--rw-r--r-- 0 root (0) root (0) 154 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01040.js\n--rw-r--r-- 0 root (0) root (0) 32933 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) 6611 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) 18128 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) 6521 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01001.html\n+-rw-r--r-- 0 root (0) root (0) 81 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01001.js\n+-rw-r--r-- 0 root (0) root (0) 13022 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) 10339 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01004.html\n+-rw-r--r-- 0 root (0) root (0) 493 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01004.js\n+-rw-r--r-- 0 root (0) root (0) 50078 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) 7258 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01007.html\n+-rw-r--r-- 0 root (0) root (0) 153 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01007.js\n+-rw-r--r-- 0 root (0) root (0) 32517 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) 6403 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01010.html\n+-rw-r--r-- 0 root (0) root (0) 73 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01010.js\n+-rw-r--r-- 0 root (0) root (0) 25127 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) 11271 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01013.html\n+-rw-r--r-- 0 root (0) root (0) 275 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01013.js\n+-rw-r--r-- 0 root (0) root (0) 88722 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) 5575 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01016.html\n+-rw-r--r-- 0 root (0) root (0) 8813 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01019.html\n+-rw-r--r-- 0 root (0) root (0) 156 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01019.js\n+-rw-r--r-- 0 root (0) root (0) 60117 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) 6766 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01022.html\n+-rw-r--r-- 0 root (0) root (0) 155 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01022.js\n+-rw-r--r-- 0 root (0) root (0) 35912 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01022_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/a01025.html\n+-rw-r--r-- 0 root (0) root (0) 137 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01025.js\n+-rw-r--r-- 0 root (0) root (0) 17991 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) 5676 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01028.html\n+-rw-r--r-- 0 root (0) root (0) 7249 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01031.html\n+-rw-r--r-- 0 root (0) root (0) 84 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01031.js\n+-rw-r--r-- 0 root (0) root (0) 36222 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) 6866 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01034.html\n+-rw-r--r-- 0 root (0) root (0) 152 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01034.js\n+-rw-r--r-- 0 root (0) root (0) 28417 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01034_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/a01037.html\n+-rw-r--r-- 0 root (0) root (0) 693 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01037.js\n+-rw-r--r-- 0 root (0) root (0) 99817 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) 6735 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01040.html\n+-rw-r--r-- 0 root (0) root (0) 131 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01040.js\n+-rw-r--r-- 0 root (0) root (0) 24143 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) 6674 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01043.html\n--rw-r--r-- 0 root (0) root (0) 5791 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01046.html\n--rw-r--r-- 0 root (0) root (0) 7515 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01049.html\n--rw-r--r-- 0 root (0) root (0) 99 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01049.js\n--rw-r--r-- 0 root (0) root (0) 5575 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01052.html\n--rw-r--r-- 0 root (0) root (0) 15640 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01055.html\n--rw-r--r-- 0 root (0) root (0) 919 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01055.js\n--rw-r--r-- 0 root (0) root (0) 61984 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) 5544 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01058.html\n--rw-r--r-- 0 root (0) root (0) 6662 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01061.html\n--rw-r--r-- 0 root (0) root (0) 16604 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) 6511 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01064.html\n--rw-r--r-- 0 root (0) root (0) 78 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01064.js\n--rw-r--r-- 0 root (0) root (0) 17610 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) 6802 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01067.html\n--rw-r--r-- 0 root (0) root (0) 137 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01067.js\n--rw-r--r-- 0 root (0) root (0) 17991 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) 7312 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01070.html\n--rw-r--r-- 0 root (0) root (0) 126 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01070.js\n--rw-r--r-- 0 root (0) root (0) 37468 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) 5676 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01073.html\n--rw-r--r-- 0 root (0) root (0) 6735 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01076.html\n--rw-r--r-- 0 root (0) root (0) 131 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01076.js\n--rw-r--r-- 0 root (0) root (0) 24143 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) 5765 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01079.html\n--rw-r--r-- 0 root (0) root (0) 5679 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01082.html\n--rw-r--r-- 0 root (0) root (0) 6590 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01085.html\n--rw-r--r-- 0 root (0) root (0) 87 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01085.js\n--rw-r--r-- 0 root (0) root (0) 24596 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) 7258 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01088.html\n--rw-r--r-- 0 root (0) root (0) 153 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01088.js\n--rw-r--r-- 0 root (0) root (0) 32517 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) 5816 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01091.html\n--rw-r--r-- 0 root (0) root (0) 6681 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01094.html\n--rw-r--r-- 0 root (0) root (0) 150 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01094.js\n--rw-r--r-- 0 root (0) root (0) 49490 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) 83353 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) 6646 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01100.html\n--rw-r--r-- 0 root (0) root (0) 83 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01100.js\n--rw-r--r-- 0 root (0) root (0) 13167 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) 7262 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01103.html\n--rw-r--r-- 0 root (0) root (0) 99 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01103.js\n--rw-r--r-- 0 root (0) root (0) 8787 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01106.html\n--rw-r--r-- 0 root (0) root (0) 314 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01106.js\n--rw-r--r-- 0 root (0) root (0) 68014 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01106_source.html\n--rw-r--r-- 0 root (0) root (0) 75095 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01109_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/a01112_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/a01115.html\n--rw-r--r-- 0 root (0) root (0) 176 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01115.js\n--rw-r--r-- 0 root (0) root (0) 37487 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) 6403 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01118.html\n--rw-r--r-- 0 root (0) root (0) 73 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01118.js\n--rw-r--r-- 0 root (0) root (0) 25127 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) 6521 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01121.html\n--rw-r--r-- 0 root (0) root (0) 84 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01121.js\n--rw-r--r-- 0 root (0) root (0) 37759 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) 6766 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01124.html\n--rw-r--r-- 0 root (0) root (0) 155 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01124.js\n--rw-r--r-- 0 root (0) root (0) 35912 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) 7249 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01127.html\n--rw-r--r-- 0 root (0) root (0) 84 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01127.js\n--rw-r--r-- 0 root (0) root (0) 36222 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) 5509 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01130.html\n--rw-r--r-- 0 root (0) root (0) 5542 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01133.html\n+-rw-r--r-- 0 root (0) root (0) 6662 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01046.html\n+-rw-r--r-- 0 root (0) root (0) 16604 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) 6719 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01049.html\n+-rw-r--r-- 0 root (0) root (0) 89 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01049.js\n+-rw-r--r-- 0 root (0) root (0) 94502 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) 6511 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01052.html\n+-rw-r--r-- 0 root (0) root (0) 78 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01052.js\n+-rw-r--r-- 0 root (0) root (0) 17610 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) 5791 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01055.html\n+-rw-r--r-- 0 root (0) root (0) 6497 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01058.html\n+-rw-r--r-- 0 root (0) root (0) 89 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01058.js\n+-rw-r--r-- 0 root (0) root (0) 21256 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) 7312 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01061.html\n+-rw-r--r-- 0 root (0) root (0) 126 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01061.js\n+-rw-r--r-- 0 root (0) root (0) 37468 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) 15640 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01064.html\n+-rw-r--r-- 0 root (0) root (0) 919 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01064.js\n+-rw-r--r-- 0 root (0) root (0) 61984 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) 5544 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01067.html\n+-rw-r--r-- 0 root (0) root (0) 10777 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01070.html\n+-rw-r--r-- 0 root (0) root (0) 201 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01070.js\n+-rw-r--r-- 0 root (0) root (0) 26364 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) 6646 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01073.html\n+-rw-r--r-- 0 root (0) root (0) 83 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01073.js\n+-rw-r--r-- 0 root (0) root (0) 13167 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) 5757 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01076.html\n+-rw-r--r-- 0 root (0) root (0) 8403 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01082.html\n+-rw-r--r-- 0 root (0) root (0) 161 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01082.js\n+-rw-r--r-- 0 root (0) root (0) 23145 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01082_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/a01085_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/a01088.html\n+-rw-r--r-- 0 root (0) root (0) 5537 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01091.html\n+-rw-r--r-- 0 root (0) root (0) 8050 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01094.html\n+-rw-r--r-- 0 root (0) root (0) 176 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01094.js\n+-rw-r--r-- 0 root (0) root (0) 37487 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) 8791 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01097.html\n+-rw-r--r-- 0 root (0) root (0) 265 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01097.js\n+-rw-r--r-- 0 root (0) root (0) 44674 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) 7515 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01100.html\n+-rw-r--r-- 0 root (0) root (0) 99 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01100.js\n+-rw-r--r-- 0 root (0) root (0) 5765 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01103.html\n+-rw-r--r-- 0 root (0) root (0) 6590 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01106.html\n+-rw-r--r-- 0 root (0) root (0) 87 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01106.js\n+-rw-r--r-- 0 root (0) root (0) 24596 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01106_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/a01109.html\n+-rw-r--r-- 0 root (0) root (0) 6681 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01112.html\n+-rw-r--r-- 0 root (0) root (0) 150 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01112.js\n+-rw-r--r-- 0 root (0) root (0) 49490 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01112_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/a01115.html\n+-rw-r--r-- 0 root (0) root (0) 364 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01115.js\n+-rw-r--r-- 0 root (0) root (0) 103846 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) 8787 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01118.html\n+-rw-r--r-- 0 root (0) root (0) 314 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01118.js\n+-rw-r--r-- 0 root (0) root (0) 68014 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) 6201 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01121.html\n+-rw-r--r-- 0 root (0) root (0) 5778 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01124.html\n+-rw-r--r-- 0 root (0) root (0) 30718 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) 7509 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01127.html\n+-rw-r--r-- 0 root (0) root (0) 72 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01127.js\n+-rw-r--r-- 0 root (0) root (0) 23599 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) 5542 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01130.html\n+-rw-r--r-- 0 root (0) root (0) 83353 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01133_source.html\n -rw-r--r-- 0 root (0) root (0) 5598 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01136.html\n--rw-r--r-- 0 root (0) root (0) 7950 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01139.html\n--rw-r--r-- 0 root (0) root (0) 364 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01139.js\n--rw-r--r-- 0 root (0) root (0) 103846 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) 7005 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01142.html\n--rw-r--r-- 0 root (0) root (0) 71 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01142.js\n--rw-r--r-- 0 root (0) root (0) 54857 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) 5537 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01145.html\n--rw-r--r-- 0 root (0) root (0) 6521 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01148.html\n--rw-r--r-- 0 root (0) root (0) 81 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01148.js\n--rw-r--r-- 0 root (0) root (0) 13022 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) 5641 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01151.html\n--rw-r--r-- 0 root (0) root (0) 10047 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01154.html\n--rw-r--r-- 0 root (0) root (0) 118 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01154.js\n--rw-r--r-- 0 root (0) root (0) 13067 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) 10339 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01157.html\n--rw-r--r-- 0 root (0) root (0) 493 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01157.js\n--rw-r--r-- 0 root (0) root (0) 50078 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01157_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/a01160.html\n--rw-r--r-- 0 root (0) root (0) 265 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01160.js\n--rw-r--r-- 0 root (0) root (0) 44674 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) 5778 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01163.html\n--rw-r--r-- 0 root (0) root (0) 30718 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) 6719 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01166.html\n--rw-r--r-- 0 root (0) root (0) 89 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01166.js\n--rw-r--r-- 0 root (0) root (0) 94502 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) 11271 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01169.html\n--rw-r--r-- 0 root (0) root (0) 275 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01169.js\n--rw-r--r-- 0 root (0) root (0) 88722 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) 6866 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01172.html\n--rw-r--r-- 0 root (0) root (0) 152 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01172.js\n--rw-r--r-- 0 root (0) root (0) 28417 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) 5816 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01139.html\n+-rw-r--r-- 0 root (0) root (0) 5641 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01142.html\n+-rw-r--r-- 0 root (0) root (0) 43820 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) 75095 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) 8182 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01151.html\n+-rw-r--r-- 0 root (0) root (0) 154 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01151.js\n+-rw-r--r-- 0 root (0) root (0) 32933 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) 6521 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01157.html\n+-rw-r--r-- 0 root (0) root (0) 84 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01157.js\n+-rw-r--r-- 0 root (0) root (0) 37759 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01157_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) 5672 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01166.html\n+-rw-r--r-- 0 root (0) root (0) 10047 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01169.html\n+-rw-r--r-- 0 root (0) root (0) 118 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01169.js\n+-rw-r--r-- 0 root (0) root (0) 13067 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) 7262 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01172.html\n+-rw-r--r-- 0 root (0) root (0) 99 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01172.js\n -rw-r--r-- 0 root (0) root (0) 7767 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01184.html\n--rw-r--r-- 0 root (0) root (0) 6298 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01187.html\n--rw-r--r-- 0 root (0) root (0) 79 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01187.js\n--rw-r--r-- 0 root (0) root (0) 27993 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) 6465 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01190.html\n--rw-r--r-- 0 root (0) root (0) 18491 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) 12714 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01193.html\n--rw-r--r-- 0 root (0) root (0) 674 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01193.js\n+-rw-r--r-- 0 root (0) root (0) 9294 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01190.html\n+-rw-r--r-- 0 root (0) root (0) 108 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01190.js\n+-rw-r--r-- 0 root (0) root (0) 6896 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01193.html\n+-rw-r--r-- 0 root (0) root (0) 82 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01193.js\n+-rw-r--r-- 0 root (0) root (0) 22430 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) 7996 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01196.html\n -rw-r--r-- 0 root (0) root (0) 77 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01196.js\n -rw-r--r-- 0 root (0) root (0) 18886 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) 7490 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01199.html\n--rw-r--r-- 0 root (0) root (0) 14520 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) 9089 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01202.html\n--rw-r--r-- 0 root (0) root (0) 337 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01202.js\n--rw-r--r-- 0 root (0) root (0) 37621 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) 5666 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01205.html\n--rw-r--r-- 0 root (0) root (0) 9294 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01208.html\n--rw-r--r-- 0 root (0) root (0) 108 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01208.js\n--rw-r--r-- 0 root (0) root (0) 6896 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01211.html\n--rw-r--r-- 0 root (0) root (0) 82 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01211.js\n--rw-r--r-- 0 root (0) root (0) 22430 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01211_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/a01199.html\n+-rw-r--r-- 0 root (0) root (0) 168 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01199.js\n+-rw-r--r-- 0 root (0) root (0) 15064 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) 5666 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01202.html\n+-rw-r--r-- 0 root (0) root (0) 6465 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01205.html\n+-rw-r--r-- 0 root (0) root (0) 18491 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01205_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/a01208.html\n+-rw-r--r-- 0 root (0) root (0) 807 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01208.js\n+-rw-r--r-- 0 root (0) root (0) 36213 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) 9089 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01211.html\n+-rw-r--r-- 0 root (0) root (0) 337 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01211.js\n+-rw-r--r-- 0 root (0) root (0) 37621 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01211_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/a01214.html\n--rw-r--r-- 0 root (0) root (0) 14404 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01217.html\n--rw-r--r-- 0 root (0) root (0) 807 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01217.js\n--rw-r--r-- 0 root (0) root (0) 36213 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01217_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/a01220.html\n--rw-r--r-- 0 root (0) root (0) 168 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01220.js\n--rw-r--r-- 0 root (0) root (0) 15064 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01220_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/a01223.html\n--rw-r--r-- 0 root (0) root (0) 266 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01223.js\n--rw-r--r-- 0 root (0) root (0) 75097 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) 7661 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01226.html\n+-rw-r--r-- 0 root (0) root (0) 7661 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01217.html\n+-rw-r--r-- 0 root (0) root (0) 8734 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01220.html\n+-rw-r--r-- 0 root (0) root (0) 266 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01220.js\n+-rw-r--r-- 0 root (0) root (0) 75097 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01220_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/a01223.html\n+-rw-r--r-- 0 root (0) root (0) 14520 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) 6298 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01226.html\n+-rw-r--r-- 0 root (0) root (0) 79 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01226.js\n+-rw-r--r-- 0 root (0) root (0) 27993 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) 6626 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01229.html\n -rw-r--r-- 0 root (0) root (0) 77 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01229.js\n -rw-r--r-- 0 root (0) root (0) 21272 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) 7064 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01235.html\n--rw-r--r-- 0 root (0) root (0) 100 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01235.js\n--rw-r--r-- 0 root (0) root (0) 18044 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) 6829 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01241.html\n--rw-r--r-- 0 root (0) root (0) 182 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01241.js\n--rw-r--r-- 0 root (0) root (0) 123331 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) 30917 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01247.html\n--rw-r--r-- 0 root (0) root (0) 877 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01247.js\n--rw-r--r-- 0 root (0) root (0) 8061 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01250.html\n--rw-r--r-- 0 root (0) root (0) 1057 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01250.js\n--rw-r--r-- 0 root (0) root (0) 31679 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) 12714 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01232.html\n+-rw-r--r-- 0 root (0) root (0) 674 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01232.js\n+-rw-r--r-- 0 root (0) root (0) 6847 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01238.html\n+-rw-r--r-- 0 root (0) root (0) 95 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01238.js\n+-rw-r--r-- 0 root (0) root (0) 47234 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) 8386 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01241.html\n+-rw-r--r-- 0 root (0) root (0) 234 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01241.js\n+-rw-r--r-- 0 root (0) root (0) 42102 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) 19138 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) 27308 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01247.html\n+-rw-r--r-- 0 root (0) root (0) 2405 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01247.js\n+-rw-r--r-- 0 root (0) root (0) 44752 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) 7589 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01250.html\n+-rw-r--r-- 0 root (0) root (0) 260 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01250.js\n+-rw-r--r-- 0 root (0) root (0) 70927 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) 7254 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01253.html\n -rw-r--r-- 0 root (0) root (0) 100 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01253.js\n -rw-r--r-- 0 root (0) root (0) 80135 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) 6186 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01256.html\n--rw-r--r-- 0 root (0) root (0) 27374 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) 5575 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01259.html\n--rw-r--r-- 0 root (0) root (0) 7033 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01262.html\n--rw-r--r-- 0 root (0) root (0) 172 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01262.js\n--rw-r--r-- 0 root (0) root (0) 118926 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) 19703 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) 6450 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01268.html\n--rw-r--r-- 0 root (0) root (0) 85 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01268.js\n--rw-r--r-- 0 root (0) root (0) 99463 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) 77347 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) 8386 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01274.html\n--rw-r--r-- 0 root (0) root (0) 234 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01274.js\n--rw-r--r-- 0 root (0) root (0) 42102 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) 34893 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) 7589 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01280.html\n--rw-r--r-- 0 root (0) root (0) 260 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01280.js\n--rw-r--r-- 0 root (0) root (0) 70927 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) 32324 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) 17845 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01289.html\n--rw-r--r-- 0 root (0) root (0) 13824 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) 7578 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01292.html\n--rw-r--r-- 0 root (0) root (0) 71 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01292.js\n--rw-r--r-- 0 root (0) root (0) 18772 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) 9523 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01295.html\n--rw-r--r-- 0 root (0) root (0) 304 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01295.js\n--rw-r--r-- 0 root (0) root (0) 35653 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) 22375 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) 27308 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01301.html\n--rw-r--r-- 0 root (0) root (0) 2405 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01301.js\n--rw-r--r-- 0 root (0) root (0) 44752 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) 19122 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) 6847 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01310.html\n--rw-r--r-- 0 root (0) root (0) 95 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01310.js\n--rw-r--r-- 0 root (0) root (0) 47234 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) 6936 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01313.html\n--rw-r--r-- 0 root (0) root (0) 106 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01313.js\n--rw-r--r-- 0 root (0) root (0) 36516 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) 19138 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) 7173 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01319.html\n--rw-r--r-- 0 root (0) root (0) 97 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01319.js\n--rw-r--r-- 0 root (0) root (0) 37474 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) 53045 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) 6262 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01325.html\n--rw-r--r-- 0 root (0) root (0) 85 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01325.js\n--rw-r--r-- 0 root (0) root (0) 28637 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) 5751 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01328.html\n--rw-r--r-- 0 root (0) root (0) 20551 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) 5540 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01331.html\n--rw-r--r-- 0 root (0) root (0) 6459 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01334.html\n--rw-r--r-- 0 root (0) root (0) 88 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01334.js\n--rw-r--r-- 0 root (0) root (0) 28186 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) 6595 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01337.html\n--rw-r--r-- 0 root (0) root (0) 24742 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) 22253 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) 8301 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01343.html\n--rw-r--r-- 0 root (0) root (0) 100 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01343.js\n--rw-r--r-- 0 root (0) root (0) 18569 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) 6102 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01346.html\n--rw-r--r-- 0 root (0) root (0) 72 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01346.js\n--rw-r--r-- 0 root (0) root (0) 11368 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) 5566 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01349.html\n--rw-r--r-- 0 root (0) root (0) 7104 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01352.html\n--rw-r--r-- 0 root (0) root (0) 148 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01352.js\n--rw-r--r-- 0 root (0) root (0) 37514 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01352_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/a01355.html\n--rw-r--r-- 0 root (0) root (0) 98 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01355.js\n--rw-r--r-- 0 root (0) root (0) 13828 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01355_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/a01358.html\n--rw-r--r-- 0 root (0) root (0) 6590 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01361.html\n--rw-r--r-- 0 root (0) root (0) 156 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01361.js\n--rw-r--r-- 0 root (0) root (0) 17141 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) 6870 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01364.html\n--rw-r--r-- 0 root (0) root (0) 82 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01364.js\n--rw-r--r-- 0 root (0) root (0) 28867 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) 5575 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01367.html\n--rw-r--r-- 0 root (0) root (0) 5536 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01370.html\n+-rw-r--r-- 0 root (0) root (0) 6595 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01256.html\n+-rw-r--r-- 0 root (0) root (0) 24742 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) 6186 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01262.html\n+-rw-r--r-- 0 root (0) root (0) 27374 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) 5575 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01265.html\n+-rw-r--r-- 0 root (0) root (0) 22375 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) 19122 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) 7578 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01274.html\n+-rw-r--r-- 0 root (0) root (0) 71 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01274.js\n+-rw-r--r-- 0 root (0) root (0) 18772 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) 6829 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01277.html\n+-rw-r--r-- 0 root (0) root (0) 182 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01277.js\n+-rw-r--r-- 0 root (0) root (0) 123331 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) 6954 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01280.html\n+-rw-r--r-- 0 root (0) root (0) 120 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01280.js\n+-rw-r--r-- 0 root (0) root (0) 56560 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) 5751 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01283.html\n+-rw-r--r-- 0 root (0) root (0) 20551 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) 6262 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01286.html\n+-rw-r--r-- 0 root (0) root (0) 85 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01286.js\n+-rw-r--r-- 0 root (0) root (0) 28637 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) 30917 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01289.html\n+-rw-r--r-- 0 root (0) root (0) 877 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01289.js\n+-rw-r--r-- 0 root (0) root (0) 6936 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01292.html\n+-rw-r--r-- 0 root (0) root (0) 106 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01292.js\n+-rw-r--r-- 0 root (0) root (0) 36516 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) 6450 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01295.html\n+-rw-r--r-- 0 root (0) root (0) 85 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01295.js\n+-rw-r--r-- 0 root (0) root (0) 99463 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) 18044 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) 17845 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01301.html\n+-rw-r--r-- 0 root (0) root (0) 13824 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) 7033 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01307.html\n+-rw-r--r-- 0 root (0) root (0) 172 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01307.js\n+-rw-r--r-- 0 root (0) root (0) 118926 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) 6459 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01310.html\n+-rw-r--r-- 0 root (0) root (0) 88 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01310.js\n+-rw-r--r-- 0 root (0) root (0) 28186 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) 53045 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) 32324 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) 19703 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) 77347 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) 7064 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01328.html\n+-rw-r--r-- 0 root (0) root (0) 100 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01328.js\n+-rw-r--r-- 0 root (0) root (0) 8061 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01331.html\n+-rw-r--r-- 0 root (0) root (0) 1057 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01331.js\n+-rw-r--r-- 0 root (0) root (0) 31679 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) 34893 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) 9523 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01337.html\n+-rw-r--r-- 0 root (0) root (0) 304 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01337.js\n+-rw-r--r-- 0 root (0) root (0) 35653 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) 7173 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01340.html\n+-rw-r--r-- 0 root (0) root (0) 97 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01340.js\n+-rw-r--r-- 0 root (0) root (0) 37474 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) 6870 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01343.html\n+-rw-r--r-- 0 root (0) root (0) 82 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01343.js\n+-rw-r--r-- 0 root (0) root (0) 28867 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) 5575 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01346.html\n+-rw-r--r-- 0 root (0) root (0) 5536 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01349.html\n+-rw-r--r-- 0 root (0) root (0) 7426 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01352.html\n+-rw-r--r-- 0 root (0) root (0) 98 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01352.js\n+-rw-r--r-- 0 root (0) root (0) 13828 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01352_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/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) 7104 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01358.html\n+-rw-r--r-- 0 root (0) root (0) 148 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01358.js\n+-rw-r--r-- 0 root (0) root (0) 37514 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) 5543 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01361.html\n+-rw-r--r-- 0 root (0) root (0) 5566 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01364.html\n+-rw-r--r-- 0 root (0) root (0) 6590 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01370.html\n+-rw-r--r-- 0 root (0) root (0) 156 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01370.js\n+-rw-r--r-- 0 root (0) root (0) 17141 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) 5537 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01373.html\n--rw-r--r-- 0 root (0) root (0) 7075 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01379.html\n--rw-r--r-- 0 root (0) root (0) 232 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01379.js\n--rw-r--r-- 0 root (0) root (0) 45377 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) 6648 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01382.html\n+-rw-r--r-- 0 root (0) root (0) 5554 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01376.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) 8301 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01382.html\n -rw-r--r-- 0 root (0) root (0) 100 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01382.js\n--rw-r--r-- 0 root (0) root (0) 8056 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01385.html\n--rw-r--r-- 0 root (0) root (0) 222 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01385.js\n--rw-r--r-- 0 root (0) root (0) 42918 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) 5543 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01388.html\n+-rw-r--r-- 0 root (0) root (0) 18569 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) 6102 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01385.html\n+-rw-r--r-- 0 root (0) root (0) 72 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01385.js\n+-rw-r--r-- 0 root (0) root (0) 11368 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) 7075 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01388.html\n+-rw-r--r-- 0 root (0) root (0) 232 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01388.js\n+-rw-r--r-- 0 root (0) root (0) 45377 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) 7720 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01391.html\n -rw-r--r-- 0 root (0) root (0) 280 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01391.js\n -rw-r--r-- 0 root (0) root (0) 19653 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01391_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/a01397.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) 4950 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01403.html\n--rw-r--r-- 0 root (0) root (0) 18761 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01403_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/a01394.html\n+-rw-r--r-- 0 root (0) root (0) 7579 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01394_source.html\n+-rw-r--r-- 0 root (0) root (0) 4950 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01400.html\n+-rw-r--r-- 0 root (0) root (0) 18761 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) 4958 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01406.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) 204495 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) 204471 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) 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) 13675 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex0.js\n--rw-r--r-- 0 root (0) root (0) 10951 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex1.js\n+-rw-r--r-- 0 root (0) root (0) 4301 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreedata.js\n+-rw-r--r-- 0 root (0) root (0) 13750 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex0.js\n+-rw-r--r-- 0 root (0) root (0) 11013 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) 9522 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex2.js\n+-rw-r--r-- 0 root (0) root (0) 9826 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) 9864 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex3.js\n--rw-r--r-- 0 root (0) root (0) 13580 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex4.js\n+-rw-r--r-- 0 root (0) root (0) 9394 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex3.js\n+-rw-r--r-- 0 root (0) root (0) 13609 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-June 4, 2025\n+May 2, 2024\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/VectorSerialization.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@@ -94,51 +94,47 @@\n \n \n \n \n \n
\n
\n-Functions
\n-
VectorSerialization.h File Reference
\n+Classes |\n+Namespaces
\n+
ProductLieGroup.h File Reference
\n \n
\n \n-

serialization for Vectors \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-\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+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 > >
 
\n+\n+\n+\n+\n

\n+Namespaces

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

Detailed Description

\n-

serialization for Vectors

\n+

Group product of two Lie Groups.

\n+
Date
May, 2015
\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,35 +1,30 @@\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\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-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+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-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+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-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+N\bNa\bam\bme\bes\bsp\bpa\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-serialization for Vectors\n+Group product of two Lie Groups.\n+ Date\n+ May, 2015\n Author\n Frank Dellaert\n- Date\n- February 2022\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+ * _\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/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/VectorSerialization.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,81 +98,193 @@\n
No Matches
\n \n \n \n \n \n
\n-
VectorSerialization.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-
21#include <gtsam/base/Vector.h>
\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+
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-
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+
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-
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+
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+
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,77 +1,213 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-VectorSerialization.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/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\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+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-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+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-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+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:_\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- * _\bV_\be_\bc_\bt_\bo_\br_\bS_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\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/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/debug.cpp 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@@ -95,55 +95,104 @@\n \n \n \n \n
\n \n-
debug.cpp File Reference
\n+Functions
\n+
TestableAssertions.h File Reference
\n \n
\n \n-

Global debugging flags. \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 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+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\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-GTSAM_EXPORT FastMap< std::string, ValueWithDefault< bool, false > > gtsam::debugFlags
 
\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-

Global debugging flags.

\n-
Author
Richard Roberts
\n-
Date
Feb 1, 2011
\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,33 +1,90 @@\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+_\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 N\bNa\bam\bme\bes\bsp\bpa\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+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-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+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-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+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-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+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-Global debugging flags.\n+Provides additional testing facilities for common data structures.\n Author\n- Richard Roberts\n- Date\n- Feb 1, 2011\n+ Alex Cunningham\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bd_\be_\bb_\bu_\bg_\b._\bc_\bp_\bp\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/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/cholesky.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,48 +94,166 @@\n \n \n \n \n \n
\n \n-
cholesky.h File Reference
\n+Namespaces
\n+
serialization.h File Reference
\n \n
\n \n-

Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained Cholesky. \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 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

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].
 
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-

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

\n-
Author
Richard Roberts
\n-
Date
Nov 5, 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,35 +1,146 @@\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+_\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 N\bNa\bam\bme\bes\bsp\bpa\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+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-Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained\n-Cholesky.\n+Convenience functions for serializing data structures via boost.serialization.\n Author\n+ Alex Cunningham\n Richard Roberts\n Date\n- Nov 5, 2010\n+ Feb 7, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\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/a00008.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00008.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,26 @@\n var a00008 = [\n- [\"choleskyCareful\", \"a00008.html#a747683f736c50bca16b3aab0e95b1b76\", null],\n- [\"choleskyPartial\", \"a00008.html#abe82fa6aceccfa2360cf314ab44f39ad\", null]\n+ [\"deserialize\", \"a00008.html#aa4d516d0d98946341ad2766521011d1b\", null],\n+ [\"deserializeBinary\", \"a00008.html#a56c41958e57a4bc7361ab593011462fd\", null],\n+ [\"deserializeFromBinaryFile\", \"a00008.html#aefeb77f2324e4bbfca2c8152c49a4565\", null],\n+ [\"deserializeFromBinaryStream\", \"a00008.html#a8eb16192d8ebe2532d8a69c9f2bf15b2\", null],\n+ [\"deserializeFromBinaryString\", \"a00008.html#a349b7ed4a67a8c3d80737e5383507bc4\", null],\n+ [\"deserializeFromFile\", \"a00008.html#adbb4a71187706918faca3a11519b62f6\", null],\n+ [\"deserializeFromStream\", \"a00008.html#ab181d2a3de466fc0c87bd29501bbc7ab\", null],\n+ [\"deserializeFromString\", \"a00008.html#a262487af458d1f48dd7d3bc549caae00\", null],\n+ [\"deserializeFromXMLFile\", \"a00008.html#a0d8faf2bb0a908ff484677bb2fcf707c\", null],\n+ [\"deserializeFromXMLStream\", \"a00008.html#a8d7ea177ef3e93af15a4a77c2bd7fa8b\", null],\n+ [\"deserializeFromXMLString\", \"a00008.html#a5f2fe2bfc17737ff9ae1fb8b210604f0\", null],\n+ [\"deserializeXML\", \"a00008.html#a85ab51b2e8f4cea69f72e06a5c136e85\", null],\n+ [\"serialize\", \"a00008.html#a332bad7d1e70d3c04ceca35adce7a134\", null],\n+ [\"serializeBinary\", \"a00008.html#abb476c3e77878f7e0f70dd51871f48e7\", null],\n+ [\"serializeToBinaryFile\", \"a00008.html#abdff0a4b4fdf0e609aa62fb8d8b1dbba\", null],\n+ [\"serializeToBinaryStream\", \"a00008.html#aa5d177a3bf16f9f5acf45ee62c816479\", null],\n+ [\"serializeToBinaryString\", \"a00008.html#a7fad959f63f2eac1478c5ede7b9ae4db\", null],\n+ [\"serializeToFile\", \"a00008.html#aa3261c2d455f892dae1921f8c3a39267\", null],\n+ [\"serializeToStream\", \"a00008.html#a007080ca4741cc3d3d6a209b0ae3fe61\", null],\n+ [\"serializeToString\", \"a00008.html#aa12c78301a9d2968afe5a1a14baa7e90\", null],\n+ [\"serializeToXMLFile\", \"a00008.html#a89449123a746480a1d668cecb5576708\", null],\n+ [\"serializeToXMLStream\", \"a00008.html#ae2e939177cf58b42d7ed4c9856d536c5\", null],\n+ [\"serializeToXMLString\", \"a00008.html#a16c154fe5e35242e26af8286e77eea11\", null],\n+ [\"serializeXML\", \"a00008.html#a976ff7999fcc13ef602b6ece1b078bca\", null]\n ];\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/cholesky.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,48 +98,319 @@\n
No Matches
\n \n \n \n \n \n
\n-
cholesky.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-
18#pragma once
\n-
19
\n-
20#include <gtsam/base/Matrix.h>
\n+
20#pragma once
\n
21
\n-
22namespace gtsam {
\n-
23
\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+
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+
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+
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+
116
\n+
118template <class T>
\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
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+
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,53 +1,349 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-cholesky.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-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+20#pragma once\n 21\n-22namespace _\bg_\bt_\bs_\ba_\bm {\n-23\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+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+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+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:_\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_\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- * _\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\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/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/Lie.h 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@@ -95,137 +95,47 @@\n \n \n \n \n
\n \n-
Lie.h File Reference
\n+Namespaces
\n+
DSFVector.h File Reference
\n \n
\n \n-

Base class and basic functions for Lie types. \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-\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...
class  gtsam::DSFBase
 A fast implementation of disjoint set forests that uses vector as underly data structure. 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...
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-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-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.
 
\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+

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,101 +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 | _\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\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-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+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-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-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\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+A faster implementation for DSF, which uses vector rather than btree.\n+ Date\n+ Jun 25, 2010\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+ Kai Ni\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bL_\bi_\be_\b._\bh\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/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/Lie.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@@ -98,382 +98,96 @@\n
No Matches
\n \n \n \n \n \n
\n-
Lie.h
\n+
DSFVector.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+
19#pragma once
\n+
20
\n+
21#include <gtsam/dllexport.h>
\n+\n+
23
\n+
24#include <boost/shared_ptr.hpp>
\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+
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-
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-
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+
57 void merge(const size_t& i1, const size_t& i2);
\n+
58};
\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-
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-
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-
Concept check class for variable types with Group properties.
\n-
Base class and basic functions for Manifold types.
\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
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-
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 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,440 +1,97 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Lie.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 6 * Authors: Frank Dellaert, 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+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+23\n+24#include \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+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-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+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-_\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-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-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-_\bG_\br_\bo_\bu_\bp_\b._\bh\n-Concept check class for variable types with Group properties.\n-_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n-Base class and basic functions for Manifold types.\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_\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:_\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 * _\bb_\ba_\bs_\be\n- * _\bL_\bi_\be_\b._\bh\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/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/TestableAssertions.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@@ -96,103 +96,41 @@\n \n \n \n
\n \n-
TestableAssertions.h File Reference
\n+
types.cpp File Reference
\n
\n
\n \n-

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

Functions for handling type information. \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-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\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.
 
std::string gtsam::demangle (const char *name)
 Pretty print Value type name.
 
\n

Detailed Description

\n-

Provides additional testing facilities for common data structures.

\n-
Author
Alex Cunningham
\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,90 +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-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+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-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+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-Provides additional testing facilities for common data structures.\n+Functions for handling type information.\n Author\n- Alex Cunningham\n+ Varun Agrawal\n+ Date\n+ May 18, 2020\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+ * _\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/a00014.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00014.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,14 +1,3 @@\n var a00014 = [\n- [\"assert_container_equal\", \"a00014.html#a2f509195ea2180d0f7dbd3a99a088ff4\", null],\n- [\"assert_container_equal\", \"a00014.html#a254be27d6d4b416fa2b546c77ae783fc\", null],\n- [\"assert_container_equal\", \"a00014.html#a0eec17f894b358dd9f30d7af28082ba5\", null],\n- [\"assert_container_equal\", \"a00014.html#a6d6b2964354593f69848f6bf5d3e0ca1\", null],\n- [\"assert_container_equality\", \"a00014.html#a59ba6a7db27344c5cb021f1421905020\", null],\n- [\"assert_container_equality\", \"a00014.html#aa0926a5d779171bd8e1d30fb5982b5c0\", null],\n- [\"assert_equal\", \"a00014.html#add6d6575582314cc9b5dbdbe2a86374d\", null],\n- [\"assert_equal\", \"a00014.html#a982034802415eb6e9bd02355257ed96a\", null],\n- [\"assert_equal\", \"a00014.html#a21e760bc75888053afd86a27d56b6148\", null],\n- [\"assert_inequal\", \"a00014.html#a2f19ba6625a264457805513fefcb5c32\", null],\n- [\"assert_print_equal\", \"a00014.html#a830c8c65902d7d0e763562e6c9357346\", null],\n- [\"assert_stdout_equal\", \"a00014.html#a08641f0f7145716bba9159dd95099a44\", null]\n+ [\"demangle\", \"a00014.html#a0b97fc96e5f69236e81489c66d5b92ba\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00017.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00017.html", "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.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@@ -95,54 +95,55 @@\n \n \n \n \n
\n \n-
timing.cpp File Reference
\n+Functions |\n+Variables
\n+
debug.cpp File Reference
\n \n
\n \n-

Timing utilities. \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-\n-\n-\n+\n+\n+\n+\n+\n+\n+

\n Functions

\n-GTSAM_EXPORT boost::shared_ptr< TimingOutlinegtsam::internal::gTimingRoot (new TimingOutline("Total", getTicTocID("Total")))
 
\n-GTSAM_EXPORT boost::weak_ptr< TimingOutlinegtsam::internal::gCurrentTimer (gTimingRoot)
 
\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+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-

Timing utilities.

\n-
Author
Richard Roberts, Michael Kaess
\n-
Date
Oct 5, 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,39 +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-timing.cpp File Reference\n-Timing utilities. _\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-GTSAM_EXPORT boost::shared_ptr< 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 (new\n- _\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be >\u00a0 _\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be(\"Total\", getTicTocID\n- (\"Total\")))\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- GTSAM_EXPORT boost::weak_ptr< 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- _\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be >\u00a0 (gTimingRoot)\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- 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\n- *descriptionC)\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- 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\n- *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\n- *label)\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-Timing utilities.\n+Global debugging flags.\n Author\n- Richard Roberts, Michael Kaess\n+ Richard Roberts\n Date\n- Oct 5, 2010\n+ Feb 1, 2011\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bt_\bi_\bm_\bi_\bn_\bg_\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/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/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/a00020.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00020.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,6 +1,4 @@\n var a00020 = [\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/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/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+
A thin wrapper around std::map that uses boost's fast_pool_allocator.
\n+
Typedefs for easier changing of types.
\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+_\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_\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:_\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/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/cholesky.cpp 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@@ -94,48 +94,306 @@\n \n \n \n \n \n
\n \n-
cholesky.cpp File Reference
\n+
numericalDerivative.h File Reference
\n
\n
\n \n-

Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained Cholesky. \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+Classes

struct  gtsam::internal::FixedSizeMatrix< Y, X >
 
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+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\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].
 
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-

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

\n-
Author
Richard Roberts
\n-
\n-Frank Dellaert
\n-
Date
Nov 5, 2010
\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,35 +1,516 @@\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+_\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:_\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+ 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 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+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-Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained\n-Cholesky.\n+Some functions to compute numerical derivatives.\n Author\n- Richard Roberts\n Frank Dellaert\n- Date\n- Nov 5, 2010\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+ * _\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/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,31 @@\n var a00023 = [\n- [\"choleskyCareful\", \"a00023.html#a747683f736c50bca16b3aab0e95b1b76\", null],\n- [\"choleskyPartial\", \"a00023.html#abe82fa6aceccfa2360cf314ab44f39ad\", null]\n+ [\"gtsam::internal::FixedSizeMatrix< Y, X >\", \"a02440.html\", null],\n+ [\"gtsam::G_x1< X1, X2 >\", \"a02444.html\", null],\n+ [\"numericalDerivative11\", \"a00023.html#a581a9f8db043590096fbac682b8f6a93\", null],\n+ [\"numericalDerivative11\", \"a00023.html#a4c4c5744f0b348d4ec6c047f796e7924\", null],\n+ [\"numericalDerivative21\", \"a00023.html#a157eb3b44dd4e38bbd66f3cc68a20e43\", null],\n+ [\"numericalDerivative21\", \"a00023.html#afcc94e3b49906e824c01a3d56df62d33\", null],\n+ [\"numericalDerivative22\", \"a00023.html#a5b0db4ac5f279b12fc91fab4cb40b1bf\", null],\n+ [\"numericalDerivative22\", \"a00023.html#a46d002a0529f1172aebb7e1d85d5c08c\", null],\n+ [\"numericalDerivative31\", \"a00023.html#aa8f0264edaf78d503809c1e3152340ee\", null],\n+ [\"numericalDerivative32\", \"a00023.html#acfbadc0ab0cd9386205b2737c5d0b727\", null],\n+ [\"numericalDerivative33\", \"a00023.html#a526a422ea611724345affed8b71d9bac\", null],\n+ [\"numericalDerivative41\", \"a00023.html#a3b0937e08e79604ee6ab10fca6ffe65e\", null],\n+ [\"numericalDerivative42\", \"a00023.html#af40f61e8eff01acdb028ad33b8f3529b\", null],\n+ [\"numericalDerivative43\", \"a00023.html#a6846b5cc84c1d5a54a436121b27057e0\", null],\n+ [\"numericalDerivative44\", \"a00023.html#a8061b20199f839b115512d95d058fcbf\", null],\n+ [\"numericalDerivative51\", \"a00023.html#a272af6f7139b76d085279060646e32d1\", null],\n+ [\"numericalDerivative52\", \"a00023.html#a722e98babba795ce480f89527b572251\", null],\n+ [\"numericalDerivative53\", \"a00023.html#acc2f741132522a6ce57d544a27a95855\", null],\n+ [\"numericalDerivative54\", \"a00023.html#a2cf5181fc7bca1ef6a1070959de7b975\", null],\n+ [\"numericalDerivative55\", \"a00023.html#a5ca42a2fc87373c005299f3087995a97\", null],\n+ [\"numericalDerivative61\", \"a00023.html#a0ca8a22de666bc39015da34f150df748\", null],\n+ [\"numericalDerivative62\", \"a00023.html#ac224e2384e41171181b2dbc0f700cdc1\", null],\n+ [\"numericalDerivative63\", \"a00023.html#a15c46aa999886d4ccd06ab73fc02db31\", null],\n+ [\"numericalDerivative64\", \"a00023.html#a3eb3fef9c77920dfd9496e71a0bcf669\", null],\n+ [\"numericalDerivative65\", \"a00023.html#a799c83517a20a8e0b0b014f26b50f660\", null],\n+ [\"numericalDerivative66\", \"a00023.html#a4e010b7f436124b9b421ba7dc438d987\", null],\n+ [\"numericalGradient\", \"a00023.html#afd8862271510196ec4e2d894f623942d\", null],\n+ [\"numericalHessian\", \"a00023.html#a11011d8e9bd69e486c9752875f710c18\", null],\n+ [\"numericalHessian311\", \"a00023.html#a10295660c0177e08d45812fbb7e4c554\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00026.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00026.html", "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/base/make_shared.h File Reference\n \n \n \n \n \n \n \n@@ -94,94 +94,59 @@\n \n \n \n \n \n
\n \n-
MatrixSerialization.h File Reference
\n+
make_shared.h File Reference
\n
\n
\n \n-

Serialization for matrices. \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+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<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)
 
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-

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+

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,59 +1,47 @@\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+_\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-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+N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n+namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n+\u00a0 Global functions in a separate testing namespace.\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+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-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+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-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+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-Serialization for matrices.\n+make_shared trampoline function to ensure proper alignment\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+ Fan Jiang\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+ * _\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/a00026.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00026.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,5 @@\n var a00026 = [\n- [\"save\", \"a00026.html#a068f1f8df2afd609744bc82386259e71\", null]\n+ [\"enable_if_t\", \"a00026.html#a47e06cd29f4e8a20a8a7842e4045845f\", null],\n+ [\"make_shared\", \"a00026.html#abcb9ece2bd206193ac40f118f1815c0e\", null],\n+ [\"make_shared\", \"a00026.html#a6f805b32c5544e5552d702d5e2b4e801\", null]\n ];\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/MatrixSerialization.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,91 +98,68 @@\n
No Matches
\n \n \n \n \n \n
\n-
MatrixSerialization.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// \\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+
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
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,82 +1,71 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-MatrixSerialization.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// \\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+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 * _\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+ * _\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/a00029.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00029.html", "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/DSFMap.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,73 +95,44 @@\n \n \n \n \n
\n \n-
DSFMap.h File Reference
\n+Namespaces
\n+
VerticalBlockMatrix.h File Reference
\n \n
\n \n-

Allow for arbitrary type in DSF. \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 Classes

class  gtsam::DSFMap< KEY >
 Disjoint set forest using an STL map data structure underneath Uses rank compression and union by rank, iterator version. More...
 
struct  gtsam::DSFMap< KEY >::Entry
 We store the forest in an STL map, but parents are done with pointers. More...
 
class  gtsam::IndexPair
 Small utility class for representing a wrappable pairs of ints. 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-\n-\n-

\n-Typedefs

\n-typedef std::vector< IndexPairgtsam::IndexPairVector
 
\n-typedef std::set< IndexPairgtsam::IndexPairSet
 
\n-typedef std::map< IndexPair, IndexPairSet > gtsam::IndexPairSetMap
 
\n-typedef DSFMap< IndexPairgtsam::DSFMapIndexPair
 
\n-\n-\n-\n

\n-Functions

\n-IndexPairVector gtsam::IndexPairSetAsArray (IndexPairSet &set)
 
\n

Detailed Description

\n-

Allow for arbitrary type in DSF.

\n-
Date
Oct 26, 2013
\n-
Author
Frank Dellaert
\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,48 +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 | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-DSFMap.h File Reference\n-Allow for arbitrary type in DSF. _\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- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bM_\ba_\bp_\b<_\b _\bK_\bE_\bY_\b _\b>\n-\u00a0 Disjoint set forest using an STL map data structure underneath Uses\n- rank compression and union by rank, iterator version. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bM_\ba_\bp_\b<_\b _\bK_\bE_\bY_\b _\b>_\b:_\b:_\bE_\bn_\bt_\br_\by\n-\u00a0 We store the forest in an STL map, but parents are done with pointers.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br\n-\u00a0 Small utility class for representing a wrappable pairs of ints.\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-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n- typedef std::vector< _\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:I\bIn\bnd\bde\bex\bxP\bPa\bai\bir\brV\bVe\bec\bct\bto\bor\br\n-\u00a0\n- typedef std::set< _\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:I\bIn\bnd\bde\bex\bxP\bPa\bai\bir\brS\bSe\bet\bt\n-\u00a0\n-typedef std::map< _\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br, IndexPairSet >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:I\bIn\bnd\bde\bex\bxP\bPa\bai\bir\brS\bSe\bet\btM\bMa\bap\bp\n-\u00a0\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: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-IndexPairVector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:I\bIn\bnd\bde\bex\bxP\bPa\bai\bir\brS\bSe\bet\btA\bAs\bsA\bAr\brr\bra\bay\by (IndexPairSet &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-Allow for arbitrary type in DSF.\n- Date\n- Oct 26, 2013\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- Frank Dellaert\n+ Richard Roberts\n+ Date\n+ Sep 18, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bD_\bS_\bF_\bM_\ba_\bp_\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/a00029_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00029_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/DSFMap.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,161 +98,252 @@\n
No Matches
\n \n \n \n \n \n
\n-
DSFMap.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-
19#pragma once
\n-
20
\n-
21#include <cstdlib> // Provides size_t
\n-
22#include <map>
\n-
23#include <set>
\n-
24#include <vector>
\n+
18#pragma once
\n+
19
\n+
20#include <gtsam/base/Matrix.h>
\n+\n+\n+
23
\n+
24namespace gtsam {
\n
25
\n-
26namespace gtsam {
\n-
27
\n-
33template <class KEY>
\n-
\n-
34class DSFMap {
\n-
35 protected:
\n-
\n-
37 struct Entry {
\n-
38 typename std::map<KEY, Entry>::iterator parent_;
\n-
39 size_t rank_;
\n-
40 Entry() {}
\n-
41 };
\n-
\n-
42
\n-
43 typedef typename std::map<KEY, Entry> Map;
\n-
44 typedef typename Map::iterator iterator;
\n-
45 mutable Map entries_;
\n-
46
\n-
\n-
48 iterator find__(const KEY& key) const {
\n-
49 static const Entry empty;
\n-
50 iterator it = entries_.find(key);
\n-
51 // if key does not exist, create and return itself
\n-
52 if (it == entries_.end()) {
\n-
53 it = entries_.insert(std::make_pair(key, empty)).first;
\n-
54 it->second.parent_ = it;
\n-
55 it->second.rank_ = 0;
\n-
56 }
\n-
57 return it;
\n-
58 }
\n-
\n-
59
\n-
\n-
61 iterator find_(const iterator& it) const {
\n-
62 // follow parent pointers until we reach set representative
\n-
63 iterator& parent = it->second.parent_;
\n-
64 if (parent != it) parent = find_(parent); // not yet, recurse!
\n-
65 return parent;
\n-
66 }
\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+
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-
67
\n+
66
\n+
68 template<typename CONTAINER>
\n
\n-
69 inline iterator find_(const KEY& key) const {
\n-
70 iterator initial = find__(key);
\n-
71 return find_(initial);
\n-
72 }
\n-
\n-
73
\n-
74 public:
\n-
75 typedef std::set<KEY> Set;
\n-
76
\n-
78 DSFMap() {}
\n-
79
\n-
\n-
81 inline KEY find(const KEY& key) const {
\n-
82 iterator root = find_(key);
\n-
83 return root->first;
\n-
84 }
\n-
\n-
85
\n-
\n-
87 void merge(const KEY& x, const KEY& y) {
\n-
88 // straight from http://en.wikipedia.org/wiki/Disjoint-set_data_structure
\n-
89 iterator xRoot = find_(x);
\n-
90 iterator yRoot = find_(y);
\n-
91 if (xRoot == yRoot) return;
\n-
92
\n-
93 // Merge sets
\n-
94 if (xRoot->second.rank_ < yRoot->second.rank_)
\n-
95 xRoot->second.parent_ = yRoot;
\n-
96 else if (xRoot->second.rank_ > yRoot->second.rank_)
\n-
97 yRoot->second.parent_ = xRoot;
\n-
98 else {
\n-
99 yRoot->second.parent_ = xRoot;
\n-
100 xRoot->second.rank_ = xRoot->second.rank_ + 1;
\n-
101 }
\n-
102 }
\n-
\n-
103
\n-
\n-
105 std::map<KEY, Set> sets() const {
\n-
106 std::map<KEY, Set> sets;
\n-
107 iterator it = entries_.begin();
\n-
108 for (; it != entries_.end(); it++) {
\n-
109 iterator root = find_(it);
\n-
110 sets[root->first].insert(it->first);
\n-
111 }
\n-
112 return sets;
\n-
113 }
\n-
\n-
114};
\n-
\n-
115
\n-
\n-
117class IndexPair : public std::pair<size_t,size_t> {
\n-
118 public:
\n-
119 inline IndexPair(): std::pair<size_t,size_t>(0,0) {}
\n-
120 inline IndexPair(size_t i, size_t j) : std::pair<size_t,size_t>(i,j) {}
\n-
121 inline size_t i() const { return first; };
\n-
122 inline size_t j() const { return second; };
\n-
123};
\n-
\n-
124
\n-
125typedef std::vector<IndexPair> IndexPairVector;
\n-
126typedef std::set<IndexPair> IndexPairSet;
\n-
127
\n-
128inline IndexPairVector IndexPairSetAsArray(IndexPairSet& set) { return IndexPairVector(set.begin(), set.end()); }
\n-
129
\n-
130typedef std::map<IndexPair, IndexPairSet> IndexPairSetMap;
\n-
131typedef DSFMap<IndexPair> DSFMapIndexPair;
\n-
132} // namespace gtsam
\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+
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+
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+
168
\n+
170 const DenseIndex& rowStart() const { return rowStart_; }
\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+
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+
Serialization for matrices.
\n+
A thin wrapper around std::vector that uses a custom allocator.
\n+
typedef and functions to augment Eigen's MatrixXd
\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-
Disjoint set forest using an STL map data structure underneath Uses rank compression and union by ran...
Definition DSFMap.h:34
\n-
iterator find__(const KEY &key) const
Given key, find iterator to initial entry.
Definition DSFMap.h:48
\n-
iterator find_(const iterator &it) const
Given iterator to initial entry, find the root Entry.
Definition DSFMap.h:61
\n-
iterator find_(const KEY &key) const
Given key, find the root Entry.
Definition DSFMap.h:69
\n-
std::map< KEY, Set > sets() const
return all sets, i.e. a partition of all elements
Definition DSFMap.h:105
\n-
DSFMap()
constructor
Definition DSFMap.h:78
\n-
KEY find(const KEY &key) const
Given key, find the representative key for the set in which it lives.
Definition DSFMap.h:81
\n-
void merge(const KEY &x, const KEY &y)
Merge two sets.
Definition DSFMap.h:87
\n-
We store the forest in an STL map, but parents are done with pointers.
Definition DSFMap.h:37
\n-
Small utility class for representing a wrappable pairs of ints.
Definition DSFMap.h:117
\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,166 +1,346 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DSFMap.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-19#pragma once\n-20\n-21#include // Provides size_t\n-22#include \n-23#include \n-24#include \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-26namespace _\bg_\bt_\bs_\ba_\bm {\n-27\n-33template \n-_\b3_\b4class _\bD_\bS_\bF_\bM_\ba_\bp {\n-35 protected:\n-_\b3_\b7 struct _\bE_\bn_\bt_\br_\by {\n-38 typename std::map::iterator parent_;\n-39 size_t rank_;\n-40 _\bE_\bn_\bt_\br_\by() {}\n-41 };\n-42\n-43 typedef typename std::map Map;\n-44 typedef typename Map::iterator iterator;\n-45 mutable Map entries_;\n-46\n-_\b4_\b8 iterator _\bf_\bi_\bn_\bd_\b__\b_(const KEY& key) const {\n-49 static const _\bE_\bn_\bt_\br_\by empty;\n-50 iterator it = entries_.find(key);\n-51 // if key does not exist, create and return itself\n-52 if (it == entries_.end()) {\n-53 it = entries_.insert(std::make_pair(key, empty)).first;\n-54 it->second.parent_ = it;\n-55 it->second.rank_ = 0;\n-56 }\n-57 return it;\n-58 }\n-59\n-_\b6_\b1 iterator _\bf_\bi_\bn_\bd_\b_(const iterator& it) const {\n-62 // follow parent pointers until we reach set representative\n-63 iterator& parent = it->second.parent_;\n-64 if (parent != it) parent = _\bf_\bi_\bn_\bd_\b_(parent); // not yet, recurse!\n-65 return parent;\n-66 }\n-67\n-_\b6_\b9 inline iterator _\bf_\bi_\bn_\bd_\b_(const KEY& key) const {\n-70 iterator initial = _\bf_\bi_\bn_\bd_\b__\b_(key);\n-71 return _\bf_\bi_\bn_\bd_\b_(initial);\n-72 }\n-73\n-74 public:\n-75 typedef std::set Set;\n-76\n-_\b7_\b8 _\bD_\bS_\bF_\bM_\ba_\bp() {}\n-79\n-_\b8_\b1 inline KEY _\bf_\bi_\bn_\bd(const KEY& key) const {\n-82 iterator root = _\bf_\bi_\bn_\bd_\b_(key);\n-83 return root->first;\n-84 }\n-85\n-_\b8_\b7 void _\bm_\be_\br_\bg_\be(const KEY& x, const KEY& y) {\n-88 // straight from http://en.wikipedia.org/wiki/Disjoint-set_data_structure\n-89 iterator xRoot = _\bf_\bi_\bn_\bd_\b_(x);\n-90 iterator yRoot = _\bf_\bi_\bn_\bd_\b_(y);\n-91 if (xRoot == yRoot) return;\n-92\n-93 // Merge sets\n-94 if (xRoot->second.rank_ < yRoot->second.rank_)\n-95 xRoot->second.parent_ = yRoot;\n-96 else if (xRoot->second.rank_ > yRoot->second.rank_)\n-97 yRoot->second.parent_ = xRoot;\n-98 else {\n-99 yRoot->second.parent_ = xRoot;\n-100 xRoot->second.rank_ = xRoot->second.rank_ + 1;\n-101 }\n-102 }\n-103\n-_\b1_\b0_\b5 std::map _\bs_\be_\bt_\bs() const {\n-106 std::map _\bs_\be_\bt_\bs;\n-107 iterator it = entries_.begin();\n-108 for (; it != entries_.end(); it++) {\n-109 iterator root = _\bf_\bi_\bn_\bd_\b_(it);\n-110 _\bs_\be_\bt_\bs[root->first].insert(it->first);\n-111 }\n-112 return _\bs_\be_\bt_\bs;\n-113 }\n-114};\n-115\n-_\b1_\b1_\b7class _\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br : public std::pair {\n-118 public:\n-119 inline _\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br(): std::pair(0,0) {}\n-120 inline _\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br(size_t i, size_t j) : std::pair(i,j) {}\n-121 inline size_t i() const { return first; };\n-122 inline size_t j() const { return second; };\n-123};\n-124\n-125typedef std::vector IndexPairVector;\n-126typedef std::set IndexPairSet;\n-127\n-128inline IndexPairVector IndexPairSetAsArray(IndexPairSet& set) { return\n-IndexPairVector(set.begin(), set.end()); }\n-129\n-130typedef std::map IndexPairSetMap;\n-131typedef DSFMap DSFMapIndexPair;\n-132} // namespace gtsam\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+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+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+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+_\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+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+_\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_\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+_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+typedef and functions to augment Eigen's MatrixXd\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_\bS_\bF_\bM_\ba_\bp\n-Disjoint set forest using an STL map data structure underneath Uses rank\n-compression and union by ran...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DSFMap.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bM_\ba_\bp_\b:_\b:_\bf_\bi_\bn_\bd_\b__\b_\n-iterator find__(const KEY &key) const\n-Given key, find iterator to initial entry.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DSFMap.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bM_\ba_\bp_\b:_\b:_\bf_\bi_\bn_\bd_\b_\n-iterator find_(const iterator &it) const\n-Given iterator to initial entry, find the root Entry.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DSFMap.h:61\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bM_\ba_\bp_\b:_\b:_\bf_\bi_\bn_\bd_\b_\n-iterator find_(const KEY &key) const\n-Given key, find the root Entry.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DSFMap.h:69\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bM_\ba_\bp_\b:_\b:_\bs_\be_\bt_\bs\n-std::map< KEY, Set > sets() const\n-return all sets, i.e. a partition of all elements\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DSFMap.h:105\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bM_\ba_\bp_\b:_\b:_\bD_\bS_\bF_\bM_\ba_\bp\n-DSFMap()\n-constructor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DSFMap.h:78\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bM_\ba_\bp_\b:_\b:_\bf_\bi_\bn_\bd\n-KEY find(const KEY &key) const\n-Given key, find the representative key for the set in which it lives.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DSFMap.h:81\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bM_\ba_\bp_\b:_\b:_\bm_\be_\br_\bg_\be\n-void merge(const KEY &x, const KEY &y)\n-Merge two sets.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DSFMap.h:87\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bM_\ba_\bp_\b:_\b:_\bE_\bn_\bt_\br_\by\n-We store the forest in an STL map, but parents are done with pointers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DSFMap.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br\n-Small utility class for representing a wrappable pairs of ints.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DSFMap.h:117\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- * _\bD_\bS_\bF_\bM_\ba_\bp_\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/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/numericalDerivative.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,306 +94,36 @@\n \n \n \n \n \n
\n \n-
numericalDerivative.h File Reference
\n+Namespaces
\n+
DSFVector.cpp File Reference
\n \n
\n \n-

Some functions to compute numerical derivatives. \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-Classes

struct  gtsam::internal::FixedSizeMatrix< Y, X >
 
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-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\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 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-

Some functions to compute numerical derivatives.

\n-
Author
Frank Dellaert
\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,516 +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-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:_\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- 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+_\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-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-Some functions to compute numerical derivatives.\n+a faster implementation for DSF, which uses vector rather than btree.\n+ Date\n+ Jun 25, 2010\n Author\n- Frank Dellaert\n+ Kai Ni\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+ * _\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/a00035_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00035_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/chartTesting.h Source File\n \n \n \n \n \n \n \n@@ -98,160 +98,95 @@\n
No Matches
\n \n \n \n \n \n
\n-
ThreadsafeException.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-
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-
54protected:
\n-
55 bool dynamic_;
\n-
56 mutable boost::optional<String> description_;
\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+
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+
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 // 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-
\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+
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+
Concept check for values that can be used in unit tests.
\n+
Base class and basic functions for Manifold types.
\n+
typedef and functions to augment Eigen's MatrixXd
\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+
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,169 +1,95 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\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+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-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-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+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+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+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 // 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-_\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+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+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\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\n Global functions in a separate testing 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_\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- * _\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\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/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/testLie.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,111 +98,86 @@\n
No Matches
\n \n \n \n \n \n
\n-
testLie.h
\n+
debug.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+
19#include <gtsam/base/FastMap.h>
\n+\n+
21#include <string>
\n+
22
\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+
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-
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+
44namespace gtsam {
\n+
45 GTSAM_EXTERN_EXPORT FastMap<std::string, ValueWithDefault<bool,false> > debugFlags;
\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+
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// 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+
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 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+
63#else
\n+
64
\n+
65#define ISDEBUG(S) (false)
\n+
66#define SETDEBUG(S,V) ((void)false)
\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+
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_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,119 +1,83 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-testLie.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-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+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\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+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-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+44namespace _\bg_\bt_\bs_\ba_\bm {\n+45 GTSAM_EXTERN_EXPORT FastMap >\n+debugFlags;\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+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// 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+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 Matrix H1, H2;\n-64 typedef traits T;\n-65 typedef typename T::TangentVector V;\n-66 typedef OptionalJacobian OJ;\n+63#else\n+64\n+65#define ISDEBUG(S) (false)\n+66#define SETDEBUG(S,V) ((void)false)\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+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__\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- * t\bte\bes\bst\btL\bLi\bie\be.\b.h\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/a00044_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00044_source.html", "unified_diff": "@@ -117,17 +117,17 @@\n
10 * -------------------------------------------------------------------------- */
\n
11
\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+
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@@ -285,17 +285,17 @@\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+
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
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"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00047.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00047.html", "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/FastMap.h File Reference\n \n \n \n \n \n \n \n@@ -94,59 +94,45 @@\n \n \n \n \n \n
\n \n-
make_shared.h File Reference
\n+Classes |\n+Namespaces
\n+
FastMap.h File Reference
\n \n
\n \n-

make_shared trampoline function to ensure proper alignment \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-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-

make_shared trampoline function to ensure proper alignment

\n-
Author
Fan Jiang
\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,47 +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 | _\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+_\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 _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\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-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-make_shared trampoline function to ensure proper alignment\n+A thin wrapper around std::map that uses boost's fast_pool_allocator.\n Author\n- Fan Jiang\n+ Richard Roberts\n+ Date\n+ Oct 17, 2010\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+ * _\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/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/make_shared.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@@ -98,68 +98,91 @@\n
No Matches
\n \n \n \n \n \n
\n-
make_shared.h
\n+
FastMap.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+
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
25
\n-
26#include <type_traits>
\n+
26namespace gtsam {
\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+
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-
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+
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,71 +1,112 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-make_shared.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 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+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\n-26#include \n+26namespace _\bg_\bt_\bs_\ba_\bm {\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+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:_\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_\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 * _\bb_\ba_\bs_\be\n- * _\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd_\b._\bh\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/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/serializationTestHelpers.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/DSFMap.h File Reference\n \n \n \n \n \n \n \n@@ -94,114 +94,74 @@\n \n \n \n \n \n
\n \n-
serializationTestHelpers.h File Reference
\n+Typedefs |\n+Functions
\n+
DSFMap.h File Reference
\n \n
\n \n+

Allow for arbitrary type in DSF. \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::DSFMap< KEY >
 Disjoint set forest using an STL map data structure underneath Uses rank compression and union by rank, iterator version. More...
 
struct  gtsam::DSFMap< KEY >::Entry
 We store the forest in an STL map, but parents are done with pointers. More...
 
class  gtsam::IndexPair
 Small utility class for representing a wrappable pairs of ints. 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+Typedefs

\n+typedef std::vector< IndexPairgtsam::IndexPairVector
 
\n+typedef std::set< IndexPairgtsam::IndexPairSet
 
\n+typedef std::map< IndexPair, IndexPairSet > gtsam::IndexPairSetMap
 
\n+typedef DSFMap< IndexPairgtsam::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-\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-Variables

\n-const bool verbose = false
 
\n+IndexPairVector gtsam::IndexPairSetAsArray (IndexPairSet &set)
 
\n

Detailed Description

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

Allow for arbitrary type in DSF.

\n+
Date
Oct 26, 2013
\n+
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,92 +1,48 @@\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+_\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+DSFMap.h File Reference\n+Allow for arbitrary type in DSF. _\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_\bM_\ba_\bp_\b<_\b _\bK_\bE_\bY_\b _\b>\n+\u00a0 Disjoint set forest using an STL map data structure underneath Uses\n+ rank compression and union by rank, iterator version. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bM_\ba_\bp_\b<_\b _\bK_\bE_\bY_\b _\b>_\b:_\b:_\bE_\bn_\bt_\br_\by\n+\u00a0 We store the forest in an STL map, but parents are done with pointers.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br\n+\u00a0 Small utility class for representing a wrappable pairs of ints.\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- 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+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+ typedef std::vector< _\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:I\bIn\bnd\bde\bex\bxP\bPa\bai\bir\brV\bVe\bec\bct\bto\bor\br\n+\u00a0\n+ typedef std::set< _\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:I\bIn\bnd\bde\bex\bxP\bPa\bai\bir\brS\bSe\bet\bt\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+typedef std::map< _\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br, IndexPairSet >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:I\bIn\bnd\bde\bex\bxP\bPa\bai\bir\brS\bSe\bet\btM\bMa\bap\bp\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+ 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:D\bDS\bSF\bFM\bMa\bap\bpI\bIn\bnd\bde\bex\bxP\bPa\bai\bir\br\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+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+IndexPairVector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:I\bIn\bnd\bde\bex\bxP\bPa\bai\bir\brS\bSe\bet\btA\bAs\bsA\bAr\brr\bra\bay\by (IndexPairSet &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- Author\n- Alex Cunningham\n- Richard Roberts\n+Allow for arbitrary type in DSF.\n Date\n- Feb 7, 2012\n+ Oct 26, 2013\n+ Author\n+ Frank Dellaert\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+ * _\bD_\bS_\bF_\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/a00050_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00050_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/serializationTestHelpers.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/DSFMap.h Source File\n \n \n \n \n \n \n \n@@ -98,202 +98,161 @@\n
No Matches
\n \n \n \n \n \n
\n-
serializationTestHelpers.h
\n+
DSFMap.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 <iostream>
\n-
23#include <sstream>
\n-
24#include <string>
\n+
19#pragma once
\n+
20
\n+
21#include <cstdlib> // Provides size_t
\n+
22#include <map>
\n+
23#include <set>
\n+
24#include <vector>
\n
25
\n-\n+
26namespace gtsam {
\n
27
\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-
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+
33template <class KEY>
\n+
\n+
34class DSFMap {
\n+
35 protected:
\n+
\n+
37 struct Entry {
\n+
38 typename std::map<KEY, Entry>::iterator parent_;
\n+
39 size_t rank_;
\n+
40 Entry() {}
\n+
41 };
\n+
\n+
42
\n+
43 typedef typename std::map<KEY, Entry> Map;
\n+
44 typedef typename Map::iterator iterator;
\n+
45 mutable Map entries_;
\n+
46
\n+
\n+
48 iterator find__(const KEY& key) const {
\n+
49 static const Entry empty;
\n+
50 iterator it = entries_.find(key);
\n+
51 // if key does not exist, create and return itself
\n+
52 if (it == entries_.end()) {
\n+
53 it = entries_.insert(std::make_pair(key, empty)).first;
\n+
54 it->second.parent_ = it;
\n+
55 it->second.rank_ = 0;
\n+
56 }
\n+
57 return it;
\n+
58 }
\n+
\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+
\n+
61 iterator find_(const iterator& it) const {
\n+
62 // follow parent pointers until we reach set representative
\n+
63 iterator& parent = it->second.parent_;
\n+
64 if (parent != it) parent = find_(parent); // not yet, recurse!
\n+
65 return parent;
\n+
66 }
\n+
\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+
\n+
69 inline iterator find_(const KEY& key) const {
\n+
70 iterator initial = find__(key);
\n+
71 return find_(initial);
\n+
72 }
\n+
\n+
73
\n+
74 public:
\n+
75 typedef std::set<KEY> Set;
\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+
78 DSFMap() {}
\n+
79
\n+
\n+
81 inline KEY find(const KEY& key) const {
\n+
82 iterator root = find_(key);
\n+
83 return root->first;
\n+
84 }
\n+
\n+
85
\n+
\n+
87 void merge(const KEY& x, const KEY& y) {
\n+
88 // straight from http://en.wikipedia.org/wiki/Disjoint-set_data_structure
\n+
89 iterator xRoot = find_(x);
\n+
90 iterator yRoot = find_(y);
\n+
91 if (xRoot == yRoot) return;
\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+
93 // Merge sets
\n+
94 if (xRoot->second.rank_ < yRoot->second.rank_)
\n+
95 xRoot->second.parent_ = yRoot;
\n+
96 else if (xRoot->second.rank_ > yRoot->second.rank_)
\n+
97 yRoot->second.parent_ = xRoot;
\n+
98 else {
\n+
99 yRoot->second.parent_ = xRoot;
\n+
100 xRoot->second.rank_ = xRoot->second.rank_ + 1;
\n+
101 }
\n+
102 }
\n+
\n+
103
\n+
\n+
105 std::map<KEY, Set> sets() const {
\n+
106 std::map<KEY, Set> sets;
\n+
107 iterator it = entries_.begin();
\n+
108 for (; it != entries_.end(); it++) {
\n+
109 iterator root = find_(it);
\n+
110 sets[root->first].insert(it->first);
\n+
111 }
\n+
112 return sets;
\n+
113 }
\n+
\n+
114};
\n+
\n+
115
\n+
\n+
117class IndexPair : public std::pair<size_t,size_t> {
\n+
118 public:
\n+
119 inline IndexPair(): std::pair<size_t,size_t>(0,0) {}
\n+
120 inline IndexPair(size_t i, size_t j) : std::pair<size_t,size_t>(i,j) {}
\n+
121 inline size_t i() const { return first; };
\n+
122 inline size_t j() const { return second; };
\n+
123};
\n+
\n+
124
\n+
125typedef std::vector<IndexPair> IndexPairVector;
\n+
126typedef std::set<IndexPair> IndexPairSet;
\n+
127
\n+
128inline IndexPairVector IndexPairSetAsArray(IndexPairSet& set) { return IndexPairVector(set.begin(), set.end()); }
\n+
129
\n+
130typedef std::map<IndexPair, IndexPairSet> IndexPairSetMap;
\n+
131typedef DSFMap<IndexPair> DSFMapIndexPair;
\n+
132} // namespace gtsam
\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+
Disjoint set forest using an STL map data structure underneath Uses rank compression and union by ran...
Definition DSFMap.h:34
\n+
iterator find__(const KEY &key) const
Given key, find iterator to initial entry.
Definition DSFMap.h:48
\n+
iterator find_(const iterator &it) const
Given iterator to initial entry, find the root Entry.
Definition DSFMap.h:61
\n+
iterator find_(const KEY &key) const
Given key, find the root Entry.
Definition DSFMap.h:69
\n+
std::map< KEY, Set > sets() const
return all sets, i.e. a partition of all elements
Definition DSFMap.h:105
\n+
DSFMap()
constructor
Definition DSFMap.h:78
\n+
KEY find(const KEY &key) const
Given key, find the representative key for the set in which it lives.
Definition DSFMap.h:81
\n+
void merge(const KEY &x, const KEY &y)
Merge two sets.
Definition DSFMap.h:87
\n+
We store the forest in an STL map, but parents are done with pointers.
Definition DSFMap.h:37
\n+
Small utility class for representing a wrappable pairs of ints.
Definition DSFMap.h:117
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,239 +1,166 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-serializationTestHelpers.h\n+DSFMap.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+19#pragma once\n+20\n+21#include // Provides size_t\n+22#include \n+23#include \n+24#include \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+26namespace _\bg_\bt_\bs_\ba_\bm {\n 27\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-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+33template \n+_\b3_\b4class _\bD_\bS_\bF_\bM_\ba_\bp {\n+35 protected:\n+_\b3_\b7 struct _\bE_\bn_\bt_\br_\by {\n+38 typename std::map::iterator parent_;\n+39 size_t rank_;\n+40 _\bE_\bn_\bt_\br_\by() {}\n+41 };\n+42\n+43 typedef typename std::map Map;\n+44 typedef typename Map::iterator iterator;\n+45 mutable Map entries_;\n+46\n+_\b4_\b8 iterator _\bf_\bi_\bn_\bd_\b__\b_(const KEY& key) const {\n+49 static const _\bE_\bn_\bt_\br_\by empty;\n+50 iterator it = entries_.find(key);\n+51 // if key does not exist, create and return itself\n+52 if (it == entries_.end()) {\n+53 it = entries_.insert(std::make_pair(key, empty)).first;\n+54 it->second.parent_ = it;\n+55 it->second.rank_ = 0;\n+56 }\n+57 return it;\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+_\b6_\b1 iterator _\bf_\bi_\bn_\bd_\b_(const iterator& it) const {\n+62 // follow parent pointers until we reach set representative\n+63 iterator& parent = it->second.parent_;\n+64 if (parent != it) parent = _\bf_\bi_\bn_\bd_\b_(parent); // not yet, recurse!\n+65 return parent;\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+_\b6_\b9 inline iterator _\bf_\bi_\bn_\bd_\b_(const KEY& key) const {\n+70 iterator initial = _\bf_\bi_\bn_\bd_\b__\b_(key);\n+71 return _\bf_\bi_\bn_\bd_\b_(initial);\n+72 }\n+73\n+74 public:\n+75 typedef std::set Set;\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+_\b7_\b8 _\bD_\bS_\bF_\bM_\ba_\bp() {}\n+79\n+_\b8_\b1 inline KEY _\bf_\bi_\bn_\bd(const KEY& key) const {\n+82 iterator root = _\bf_\bi_\bn_\bd_\b_(key);\n+83 return root->first;\n+84 }\n+85\n+_\b8_\b7 void _\bm_\be_\br_\bg_\be(const KEY& x, const KEY& y) {\n+88 // straight from http://en.wikipedia.org/wiki/Disjoint-set_data_structure\n+89 iterator xRoot = _\bf_\bi_\bn_\bd_\b_(x);\n+90 iterator yRoot = _\bf_\bi_\bn_\bd_\b_(y);\n+91 if (xRoot == yRoot) return;\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+93 // Merge sets\n+94 if (xRoot->second.rank_ < yRoot->second.rank_)\n+95 xRoot->second.parent_ = yRoot;\n+96 else if (xRoot->second.rank_ > yRoot->second.rank_)\n+97 yRoot->second.parent_ = xRoot;\n+98 else {\n+99 yRoot->second.parent_ = xRoot;\n+100 xRoot->second.rank_ = xRoot->second.rank_ + 1;\n+101 }\n+102 }\n+103\n+_\b1_\b0_\b5 std::map _\bs_\be_\bt_\bs() const {\n+106 std::map _\bs_\be_\bt_\bs;\n+107 iterator it = entries_.begin();\n+108 for (; it != entries_.end(); it++) {\n+109 iterator root = _\bf_\bi_\bn_\bd_\b_(it);\n+110 _\bs_\be_\bt_\bs[root->first].insert(it->first);\n+111 }\n+112 return _\bs_\be_\bt_\bs;\n+113 }\n+114};\n+115\n+_\b1_\b1_\b7class _\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br : public std::pair {\n+118 public:\n+119 inline _\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br(): std::pair(0,0) {}\n+120 inline _\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br(size_t i, size_t j) : std::pair(i,j) {}\n+121 inline size_t i() const { return first; };\n+122 inline size_t j() const { return second; };\n+123};\n+124\n+125typedef std::vector IndexPairVector;\n+126typedef std::set IndexPairSet;\n+127\n+128inline IndexPairVector IndexPairSetAsArray(IndexPairSet& set) { return\n+IndexPairVector(set.begin(), set.end()); }\n+129\n+130typedef std::map IndexPairSetMap;\n+131typedef DSFMap DSFMapIndexPair;\n+132} // 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:_\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:_\bD_\bS_\bF_\bM_\ba_\bp\n+Disjoint set forest using an STL map data structure underneath Uses rank\n+compression and union by ran...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DSFMap.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bM_\ba_\bp_\b:_\b:_\bf_\bi_\bn_\bd_\b__\b_\n+iterator find__(const KEY &key) const\n+Given key, find iterator to initial entry.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DSFMap.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bM_\ba_\bp_\b:_\b:_\bf_\bi_\bn_\bd_\b_\n+iterator find_(const iterator &it) const\n+Given iterator to initial entry, find the root Entry.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DSFMap.h:61\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bM_\ba_\bp_\b:_\b:_\bf_\bi_\bn_\bd_\b_\n+iterator find_(const KEY &key) const\n+Given key, find the root Entry.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DSFMap.h:69\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bM_\ba_\bp_\b:_\b:_\bs_\be_\bt_\bs\n+std::map< KEY, Set > sets() const\n+return all sets, i.e. a partition of all elements\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DSFMap.h:105\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bM_\ba_\bp_\b:_\b:_\bD_\bS_\bF_\bM_\ba_\bp\n+DSFMap()\n+constructor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DSFMap.h:78\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bM_\ba_\bp_\b:_\b:_\bf_\bi_\bn_\bd\n+KEY find(const KEY &key) const\n+Given key, find the representative key for the set in which it lives.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DSFMap.h:81\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bM_\ba_\bp_\b:_\b:_\bm_\be_\br_\bg_\be\n+void merge(const KEY &x, const KEY &y)\n+Merge two sets.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DSFMap.h:87\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bM_\ba_\bp_\b:_\b:_\bE_\bn_\bt_\br_\by\n+We store the forest in an STL map, but parents are done with pointers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DSFMap.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br\n+Small utility class for representing a wrappable pairs of ints.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DSFMap.h:117\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+ * _\bD_\bS_\bF_\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/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/FastDefaultAllocator.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/ThreadsafeException.h File Reference\n \n \n \n \n \n \n \n@@ -95,48 +95,56 @@\n \n \n \n \n
\n \n-
FastDefaultAllocator.h File Reference
\n+Namespaces
\n+
ThreadsafeException.h File Reference
\n \n
\n \n-

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

Base exception type that uses tbb_allocator if GTSAM is compiled with TBB. \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 Classes

struct  gtsam::internal::FastDefaultAllocator< T >
 Default allocator for list, map, and set types. More...
class  gtsam::ThreadsafeException< DERIVED >
 Base exception type that uses tbb_allocator if GTSAM is compiled with TBB. More...
 
struct  gtsam::internal::FastDefaultVectorAllocator< T >
 Default allocator for vector types (we never use boost pool for vectors) 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

Detailed Description

\n-

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

\n+

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

\n
Author
Richard Roberts
\n-
Date
Aug 15, 2013
\n+
Date
Aug 21, 2010
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,31 +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 | _\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+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 _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\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:_\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-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:_\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 *\b**\b**\b**\b**\b* D\bDe\bet\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+Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.\n Author\n Richard Roberts\n Date\n- Aug 15, 2013\n+ Aug 21, 2010\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+ * _\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/a00056.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00056.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,7 @@\n var a00056 = [\n- [\"gtsam::internal::FastDefaultAllocator< T >\", \"a02304.html\", null],\n- [\"gtsam::internal::FastDefaultVectorAllocator< T >\", \"a02308.html\", null]\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 ];\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/FastDefaultAllocator.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,106 +98,160 @@\n
No Matches
\n \n \n \n \n \n
\n-
FastDefaultAllocator.h
\n+
ThreadsafeException.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 <gtsam/config.h> // Configuration from CMake
\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/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+
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
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+
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,102 +1,169 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-FastDefaultAllocator.h\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-19#pragma once\n-20#include // Configuration from CMake\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 // 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+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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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- * _\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b._\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/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/VerticalBlockMatrix.cpp 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,36 +94,94 @@\n \n \n \n \n \n
\n \n-
VerticalBlockMatrix.cpp File Reference
\n+Functions
\n+
MatrixSerialization.h File Reference
\n \n
\n \n-

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

Serialization for matrices. \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-Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 

\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

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-
\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,23 +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\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+_\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+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 \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\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+Serialization for matrices.\n Author\n- Richard Roberts\n+ Frank Dellaert\n Date\n- Sep 18, 2010\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- * _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bc_\bp_\bp\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/a00065.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00065.html", "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/Testable.h File Reference\n \n \n \n \n \n \n \n@@ -94,186 +94,123 @@\n \n \n \n \n \n
\n \n-
Vector.h File Reference
\n+
Testable.h File Reference
\n
\n
\n \n-

typedef and functions to augment Eigen's VectorXd \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 \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 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+\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+#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-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\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+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-

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+

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_MAKE_VECTOR_DEFS

\n+\n+

◆ GTSAM_CONCEPT_TESTABLE_INST

\n \n
\n
\n \n \n- \n+ \n \n \n- \n- \n+ \n+ \n \n
#define GTSAM_MAKE_VECTOR_DEFS#define GTSAM_CONCEPT_TESTABLE_INST( N)T)   template class gtsam::IsTestable<T>;
\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+

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
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,147 +1,84 @@\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+_\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-N\bNa\bam\bme\bes\bsp\bpa\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+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-#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+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-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+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- typedef Eigen::Matrix< double, 1, 1 >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:V\bVe\bec\bct\bto\bor\br1\b1\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- typedef Eigen::Vector2d\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:V\bVe\bec\bct\bto\bor\br2\b2\n+N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n+namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n+\u00a0 Global functions in a separate testing namespace.\n \u00a0\n- typedef Eigen::Vector3d\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:V\bVe\bec\bct\bto\bor\br3\b3\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- typedef Eigen::VectorBlock< Vector >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSu\bub\bbV\bVe\bec\bct\bto\bor\br\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-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+#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- 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+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- 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+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- 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+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- 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+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-typedef and functions to augment Eigen's VectorXd\n+Concept check for values that can be used in unit tests.\n Author\n- Kai Ni\n Frank Dellaert\n- Alex Hagiopol\n- Varun Agrawal\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_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+*\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- * _\bV_\be_\bc_\bt_\bo_\br_\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/a00065.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,23 +1,10 @@\n var a00065 = [\n- [\"assert_equal\", \"a00065.html#ac3cf8e8e70cd696d9c789c31bc1e89a7\", null],\n- [\"assert_equal\", \"a00065.html#a9f3ee662d25ffb8c04b4e35c4b02e90b\", null],\n- [\"assert_inequal\", \"a00065.html#a2ca3db47b15350977c1f03c5560ab332\", null],\n- [\"concatVectors\", \"a00065.html#ae1c88acfa9575bcea3f2e738cb637a85\", null],\n- [\"concatVectors\", \"a00065.html#a09610ec69a8b3f3a00399bb378eda9cf\", null],\n- [\"dot\", \"a00065.html#ad80249acf12bbea741e755cd8fc73042\", null],\n- [\"ediv_\", \"a00065.html#a14844c96706dc362917e0d5e76d65fbe\", null],\n- [\"equal\", \"a00065.html#a3d1cad2313f69f9fa5008fdc348d1526\", null],\n- [\"equal\", \"a00065.html#aa7ed1d4fe2dd6828cfeb2d8f488b818d\", null],\n- [\"equal_with_abs_tol\", \"a00065.html#a8bdced1844ffd6a53af0396d82eaa6da\", null],\n- [\"fpEqual\", \"a00065.html#ae19c359190a379cba44bf818a2293f7c\", null],\n- [\"greaterThanOrEqual\", \"a00065.html#a368ee40bd9c0124d572d2e49bcb077bf\", null],\n- [\"house\", \"a00065.html#afb77eefc25dea0fb3e0fcc8f246b617a\", null],\n- [\"houseInPlace\", \"a00065.html#ac9c0c05b0198ec0fb6e4115edb755910\", null],\n- [\"inner_prod\", \"a00065.html#a4ca41ba9ec9d6d21a2b9f5e00f9f25ed\", null],\n- [\"linear_dependent\", \"a00065.html#a2a0cfd7908b06491df49b6a9c9186775\", null],\n- [\"operator==\", \"a00065.html#a64988014ab746343803620dc42513646\", null],\n- [\"print\", \"a00065.html#a760cc36e9009b23cf564c436294b3504\", null],\n- [\"print\", \"a00065.html#a5e5d8018a0f44a6a299406aeda27d44b\", null],\n- [\"save\", \"a00065.html#a09f2bbdb9f9d633542362dbe8d79f9ab\", null],\n- [\"weightedPseudoinverse\", \"a00065.html#aca1c56d11a05464a7a5458dc32ccc777\", null]\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\", \"a00065.html#abe0a238cdd07d484ff0be56ae945b182\", null],\n+ [\"assert_equal\", \"a00065.html#a659619cca082d1c10b07c033d48c54da\", null],\n+ [\"equal\", \"a00065.html#a1f3dc67ad88b799c469088e428c583b1\", null],\n+ [\"equal\", \"a00065.html#ad2dbee4a72127938c79162cc8b6d5152\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00065_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00065_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/Testable.h Source File\n \n \n \n \n \n \n \n@@ -98,192 +98,171 @@\n
No Matches
\n \n \n \n \n \n
\n-
Vector.h
\n+
Testable.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-
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+
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+
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-
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+
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-
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+
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-
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+
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-
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+
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-
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+
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,247 +1,175 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Vector.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-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-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+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+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-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+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-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+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_\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+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-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+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:_\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_\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- * _\bV_\be_\bc_\bt_\bo_\br_\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/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/types.cpp 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,43 +94,45 @@\n \n \n \n \n \n
\n \n-
types.cpp File Reference
\n+Classes |\n+Namespaces
\n+
FastSet.h File Reference
\n \n
\n \n-

Functions for handling type information. \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-Functions

std::string gtsam::demangle (const char *name)
 Pretty print Value type name.
 
\n

Detailed Description

\n-

Functions for handling type information.

\n-
Author
Varun Agrawal
\n-
Date
May 18, 2020
\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,27 +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-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\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-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+A thin wrapper around std::set that uses boost's fast_pool_allocator.\n Author\n- Varun Agrawal\n+ Richard Roberts\n Date\n- May 18, 2020\n+ Oct 17, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bt_\by_\bp_\be_\bs_\b._\bc_\bp_\bp\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/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/FastMap.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,45 +94,48 @@\n \n \n \n \n \n
\n \n-
FastMap.h File Reference
\n+Namespaces |\n+Typedefs
\n+
FastVector.h File Reference
\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 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+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::map that uses boost's fast_pool_allocator.

\n-
Author
Richard Roberts
\n-
Date
Oct 17, 2010
\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,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-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 | _\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:_\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+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::map that uses boost's fast_pool_allocator.\n+A thin wrapper around std::vector that uses a custom allocator.\n Author\n Richard Roberts\n+ Frank Dellaert\n Date\n- Oct 17, 2010\n+ Feb 9, 2011\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\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/a00071_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00071_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/FastVector.h Source File\n \n \n \n \n \n \n \n@@ -98,91 +98,47 @@\n
No Matches
\n \n \n \n \n \n
\n-
FastMap.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-
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-
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+
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-
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,112 +1,46 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-FastMap.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-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\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+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-_\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 * _\bb_\ba_\bs_\be\n- * _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\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/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/lieProxies.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,63 +98,111 @@\n
No Matches
\n \n \n \n \n \n
\n-
lieProxies.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-
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+
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+
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} // \\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+
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+
Some functions to compute numerical derivatives.
\n+
Base class and basic functions for Lie types.
\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,67 +1,119 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\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+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-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+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+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} // \\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+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+_\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+_\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:_\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- * _\bl_\bi_\be_\bP_\br_\bo_\bx_\bi_\be_\bs_\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/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/chartTesting.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,95 +98,220 @@\n
No Matches
\n \n \n \n \n \n
\n-
chartTesting.h
\n+
Group.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-
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-
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+
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+
32
\n+
34struct group_tag {};
\n+
35
\n+\n+\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+
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 // 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-
Concept check for values that can be used in unit tests.
\n-
Base class and basic functions for Manifold types.
\n-
typedef and functions to augment Eigen's MatrixXd
\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-
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+
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,95 +1,237 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-chartTesting.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-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+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#include \n-25#include \n-26#include \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-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+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-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+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 // 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+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-_\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\n Global functions in a separate testing 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:_\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- * c\bch\bha\bar\brt\btT\bTe\bes\bst\bti\bin\bng\bg.\b.h\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/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/Testable.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,123 +94,36 @@\n \n \n \n \n \n
\n \n-
Testable.h File Reference
\n+Namespaces
\n+
SymmetricBlockMatrix.cpp File Reference
\n \n
\n \n-

Concept check for values that can be used in unit tests. \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-\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-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

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+

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,84 +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\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- 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+_\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-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-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\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+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- 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+ Richard Roberts\n+ Date\n+ Sep 18, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\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/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/DSFVector.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@@ -96,46 +96,43 @@\n \n \n \n
\n \n-
DSFVector.h File Reference
\n+
SymmetricBlockMatrix.h File Reference
\n
\n
\n \n-

A faster implementation for DSF, which uses vector rather than btree. \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-\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...
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

Detailed Description

\n-

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

\n-
Date
Jun 25, 2010
\n-
Author
Kai Ni
\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,32 +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-DSFVector.h File Reference\n-A faster implementation for DSF, which uses vector rather than btree. _\bM_\bo_\br_\be_\b._\b._\b.\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:_\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+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 *\b**\b**\b**\b**\b* D\bDe\bet\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+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- Kai Ni\n+ Richard Roberts\n+ Date\n+ Sep 18, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bD_\bS_\bF_\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._\bh\n * Generated on Tue Jan 9 2024 05:51: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/DSFVector.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,96 +98,439 @@\n
No Matches
\n \n \n \n \n \n
\n-
DSFVector.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-
19#pragma once
\n-
20
\n-
21#include <gtsam/dllexport.h>
\n-\n-
23
\n-
24#include <boost/shared_ptr.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+
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-
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+
\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+
A thin wrapper around std::vector that uses a custom allocator.
\n+
Typedefs for easier changing of types.
\n+
typedef and functions to augment Eigen's MatrixXd
\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 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+
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,97 +1,546 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DSFVector.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-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-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_\b8class GTSAM_EXPORT _\bD_\bS_\bF_\bB_\ba_\bs_\be {\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-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+_\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+_\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_\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+_\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_\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:_\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- * _\bD_\bS_\bF_\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._\bh\n * Generated on Tue Jan 9 2024 05:51: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/timing.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@@ -96,210 +96,47 @@\n \n \n \n
\n \n-
timing.h File Reference
\n+Macros
\n+
FastDefaultAllocator.h File Reference
\n \n
\n \n-

Timing utilities. \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 \n

\n Classes

class  gtsam::internal::TimingOutline
 Timing Entry, arranged in a tree. More...
struct  gtsam::internal::FastDefaultAllocator< T >
 Default allocator for list, map, and set types. More...
 
class  gtsam::internal::AutoTicToc
 Small class that calls internal::tic at construction, and internol::toc when destroyed. 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-\n-\n-\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+

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,108 +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 | _\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+_\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:_\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+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-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+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-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+An easy way to control which allocator is used for Fast* collections.\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+ Aug 15, 2013\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bt_\bi_\bm_\bi_\bn_\bg_\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/a00092.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00092.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var a00092 = [\n- [\"gtsam::internal::TimingOutline\", \"a02516.html\", \"a02516\"],\n- [\"gtsam::internal::AutoTicToc\", \"a02520.html\", null]\n+ [\"gtsam::internal::FastDefaultAllocator< T >\", \"a02304.html\", null],\n+ [\"gtsam::internal::FastDefaultVectorAllocator< T >\", \"a02308.html\", null]\n ];\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/timing.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,328 +98,106 @@\n
No Matches
\n \n \n \n \n \n
\n-
timing.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
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+
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// 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-
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-
A thin wrapper around std::map that uses boost's fast_pool_allocator.
\n-
Typedefs for easier changing of types.
\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
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+
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,394 +1,102 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-timing.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 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+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// 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-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-_\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_\by_\bp_\be_\bs_\b._\bh\n-Typedefs for easier changing of types.\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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- * _\bt_\bi_\bm_\bi_\bn_\bg_\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/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/ProductLieGroup.h 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@@ -96,45 +96,42 @@\n \n \n \n
\n \n-
ProductLieGroup.h File Reference
\n+
WeightedSampler.h File Reference
\n
\n
\n \n-

Group product of two Lie Groups. \n+

Fast sampling without replacement. \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::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::WeightedSampler< Engine >
 
\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+

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,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-ProductLieGroup.h File Reference\n-Group product of two Lie Groups. _\bM_\bo_\br_\be_\b._\b._\b.\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:_\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:_\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 *\b**\b**\b**\b**\b* D\bDe\bet\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+Fast sampling without replacement.\n Author\n Frank Dellaert\n+ Date\n+ May 2019\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+ * _\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/a00095.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00095.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a00095 = [\n- [\"gtsam::ProductLieGroup< G, H >\", \"a02464.html\", \"a02464\"],\n- [\"gtsam::traits< ProductLieGroup< G, H > >\", \"a02468.html\", null]\n+ [\"gtsam::WeightedSampler< Engine >\", \"a02664.html\", \"a02664\"]\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/ProductLieGroup.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/WeightedSampler.h Source File\n \n \n \n \n \n \n \n@@ -98,193 +98,152 @@\n
No Matches
\n \n \n \n \n \n
\n-
ProductLieGroup.h
\n+
WeightedSampler.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+
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-
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+
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+
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-
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+
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+
132 }
\n+
133
\n+
134 return result;
\n+
135 }
\n+
136}; // namespace gtsam
\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+
137} // 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-
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+
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
\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,150 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ProductLieGroup.h\n+WeightedSampler.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+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-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+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 _\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+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+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-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+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 _\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+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+132 }\n+133\n+134 return result;\n+135 }\n+136}; // namespace gtsam\n+137} // 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:_\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:_\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\n * _\bb_\ba_\bs_\be\n- * _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b._\bh\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/a00098.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00098.html", "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/types.h File Reference\n \n \n \n \n \n \n \n@@ -97,116 +97,205 @@\n \n \n
\n \n-
Group.h File Reference
\n+Typedefs |\n+Functions
\n+
types.h File Reference
\n \n
\n \n-

Concept check class for variable types with Group properties. \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::group_tag
 tag to assert a type is a group 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::multiplicative_group_tag
 Group operator syntax flavors. More...
struct  gtsam::const_selector< BASIC_TYPE, BASIC_TYPE, AS_NON_CONST, AS_CONST >
 Specialization for the non-const version. More...
 
struct  gtsam::additive_group_tag
struct  gtsam::const_selector< const BASIC_TYPE, BASIC_TYPE, AS_NON_CONST, AS_CONST >
 Specialization for the const version. More...
 
class  gtsam::IsGroup< G >
 Group Concept. 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::DirectProduct
class  gtsam::ListOfOneContainer< T >
 A helper class that behaves as a container with one element, and works with boost::range. More...
 
struct  gtsam::traits< DirectProduct< G, H > >
class  gtsam::TbbOpenMPMixedScope
 An object whose scope defines a block where TBB and OpenMP parallelism are mixed. More...
 
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::needs_eigen_aligned_allocator< typename, typename >
 A SFINAE trait to mark classes that need special alignment. More...
 
struct  gtsam::traits< DirectSum< G, H > >
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+

\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_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+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 \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-Variables

\n-const G & gtsam::b
 
\n-const G double gtsam::tol
 
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-

Concept check class for variable types with Group properties.

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

Typedefs for easier changing of types.

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

Macro Definition Documentation

\n-\n-

◆ GTSAM_CONCEPT_GROUP_INST

\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+ \n+ \n+ \n+
#define GTSAM_CONCEPT_GROUP_INST#define assert_throw( T)   template class gtsam::IsGroup<T>;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-

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+
#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,72 +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 | _\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 | _\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 _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\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+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:_\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:_\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:_\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:_\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- 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+N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n+namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n+\u00a0 Global functions in a separate testing namespace.\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+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-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+#define\u00a0 D\bDO\bO_\b_P\bPR\bRA\bAG\bGM\bMA\bA(x)\u00a0\u00a0\u00a0_Pragma (#x)\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+#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-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+#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-N\bNa\bam\bme\bes\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 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-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 D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bC_\b_P\bPO\bOP\bP()\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 _\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-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+#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-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+#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-const G double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\bto\bol\bl\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+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+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+ \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-Concept check class for variable types with Group properties.\n- Date\n- November, 2011\n+Typedefs for easier changing of types.\n Author\n- Alex Cunningham\n- Frank Dellaert\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_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+*\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+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- * _\bG_\br_\bo_\bu_\bp_\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/a00098.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00098.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,12 +1,19 @@\n var a00098 = [\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\", \"a00098.html#aac1ea136475ea605715c809f4b3f0156\", null],\n- [\"BOOST_CONCEPT_REQUIRES\", \"a00098.html#a2e95b5b5508cf3284107e979401bd1a4\", 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\", \"a00098.html#a30d3af2da1ea940197addce4f3c223c8\", null],\n+ [\"GTSAM_MAKE_ALIGNED_OPERATOR_NEW\", \"a00098.html#aa123dd61687e08ae328154a1890b7b86\", null],\n+ [\"GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF\", \"a00098.html#a352ab46cee3a766e30b049690802fb0a\", null],\n+ [\"DenseIndex\", \"a00098.html#a21006f326f57cdf7d3f35fec40f43e40\", null],\n+ [\"FactorIndex\", \"a00098.html#a19c53f2faabb0f4b4b78ce2f7168cc14\", null],\n+ [\"Key\", \"a00098.html#adad029f5f6ffce610428b5fe768b0df2\", null],\n+ [\"void_t\", \"a00098.html#a6525d741529c7a2cd91fa913431f5fb7\", null],\n+ [\"demangle\", \"a00098.html#a0b97fc96e5f69236e81489c66d5b92ba\", null],\n+ [\"ListOfOne\", \"a00098.html#a045b43784acac77531813c4ab6c4d281\", null]\n ];\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/Group.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,220 +98,318 @@\n
No Matches
\n \n \n \n \n \n
\n-
Group.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-
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+
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-
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+
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-
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+
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-
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+
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-
146 // Construct from two subgroup elements
\n-
147 DirectProduct(const G& g, const H& h):std::pair<G,H>(g,h) {}
\n+
147 T& operator*() { return value; }
\n
148
\n-
149 // identity
\n-
150 static DirectProduct Identity() { return DirectProduct(); }
\n+
150 const T& operator*() const { return value; }
\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+
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-
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+
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-
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+
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,237 +1,343 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Group.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-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+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-_\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+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-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+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-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+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-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+_\b1_\b4_\b7 T& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*() { return value; }\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+_\b1_\b5_\b0 const T& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*() const { return value; }\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+_\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-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+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_\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:_\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- * _\bG_\br_\bo_\bu_\bp_\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/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/FastVector.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,48 +94,51 @@\n \n \n \n \n \n
\n \n-
FastVector.h File Reference
\n+Functions
\n+
VectorSerialization.h File Reference
\n \n
\n \n-

A thin wrapper around std::vector that uses a custom allocator. \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+\n+\n+\n+\n+\n+\n+\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+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

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+

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,31 +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\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+_\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+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-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+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-A thin wrapper around std::vector that uses a custom allocator.\n+serialization for Vectors\n Author\n- Richard Roberts\n Frank Dellaert\n Date\n- Feb 9, 2011\n+ February 2022\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+ * _\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/a00101_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00101_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/FastVector.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,47 +98,81 @@\n
No Matches
\n \n \n \n \n \n
\n-
FastVector.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-
20#pragma once
\n-
21
\n-\n-
23#include <vector>
\n-
24
\n-
25namespace gtsam {
\n+
19#pragma once
\n+
20
\n+
21#include <gtsam/base/Vector.h>
\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-
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+
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
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,46 +1,77 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-FastVector.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-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+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#include \n+24#include \n+25#include \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+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\n * _\bb_\ba_\bs_\be\n- * _\bF_\ba_\bs_\bt_\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/a00104.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00104.html", "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/lieProxies.h File Reference\n \n \n \n \n \n \n \n@@ -94,86 +94,64 @@\n \n \n \n \n \n
\n \n-
Manifold.h File Reference
\n+
lieProxies.h File Reference
\n
\n
\n \n-

Base class and basic functions for Manifold types. \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-\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+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\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+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 class and basic functions for Manifold types.

\n-
Author
Alex Cunningham
\n-
\n-Frank Dellaert
\n-
\n-Mike Bosse
\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,60 +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 | _\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+_\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-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+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 class and basic functions for Manifold types.\n+Provides convenient mappings of common member functions for testing.\n Author\n Alex Cunningham\n- Frank Dellaert\n- Mike Bosse\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\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/a00104.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00104.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,11 +1,5 @@\n var a00104 = [\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\", \"a00104.html#a64b5e2e3c812d2cdea5ee294100f825f\", null],\n- [\"BOOST_CONCEPT_REQUIRES\", \"a00104.html#ae03a6aedf0a82f67c2f3e987fb3aacba\", null]\n+ [\"between\", \"a00104.html#a72a7c561cc91f437a22023297fb7f658\", null],\n+ [\"inverse\", \"a00104.html#aaa623dd059a67523b029af6ec20a38da\", null],\n+ [\"rotate\", \"a00104.html#a644bbe6719d8dd756e11e8b3d2fd229a\", null]\n ];\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/Manifold.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,189 +98,63 @@\n
No Matches
\n \n \n \n \n \n
\n-
Manifold.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/base/Matrix.h>
\n-
23#include <gtsam/base/Testable.h>
\n-\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+
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-
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-
\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-
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-
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-
Special class for optional Jacobian arguments.
\n-
Concept check for values that can be used in unit tests.
\n-
typedef and functions to augment Eigen's MatrixXd
\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-
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
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,206 +1,67 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Manifold.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 <_\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#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+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-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\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-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-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-_\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-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\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:_\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\n * _\bb_\ba_\bs_\be\n- * _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\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/a00107_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00107_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/Manifold.h Source File\n \n \n \n \n \n \n \n@@ -98,487 +98,189 @@\n
No Matches
\n \n \n \n \n \n
\n-
VectorSpace.h
\n+
Manifold.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-
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-
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-
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+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+
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+
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+
\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-
99 typedef Eigen::VectorXd TangentVector;
\n-\n-
101 static int GetDimension(const Class& m) { return m.dim();}
\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 static Eigen::MatrixXd Eye(const Class& m) {
\n-
104 int dim = GetDimension(m);
\n-
105 return Eigen::MatrixXd::Identity(dim, dim);
\n-
106 }
\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 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+
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 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+
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-
\n
161
\n-
163template<class Class>
\n+
163template<typename T>
\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+\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+
Concept check for values that can be used in unit tests.
\n+
typedef and functions to augment Eigen's MatrixXd
\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-
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+
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-
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+
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-
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 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-
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,503 +1,206 @@\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-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-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-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+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+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#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+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\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-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+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 static Eigen::MatrixXd Eye(const Class& m) {\n-104 int dim = GetDimension(m);\n-105 return Eigen::MatrixXd::Identity(dim, dim);\n-106 }\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 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+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 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+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 _\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+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+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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:_\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:_\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:_\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_\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- * V\bVe\bec\bct\bto\bor\brS\bSp\bpa\bac\bce\be.\b.h\bh\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/a00113.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00113.html", "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/FastList.h File Reference\n \n \n \n \n \n \n \n@@ -96,43 +96,43 @@\n \n \n \n
\n \n-
FastSet.h File Reference
\n+
FastList.h File Reference
\n
\n
\n \n-

A thin wrapper around std::set that uses boost's fast_pool_allocator. \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 \n \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...
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 thin wrapper around std::set that uses boost's fast_pool_allocator.

\n+

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

\n
Author
Richard Roberts
\n-
Date
Oct 17, 2010
\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-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+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:_\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+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 thin wrapper around std::set that uses boost's fast_pool_allocator.\n+A thin wrapper around std::list that uses boost's fast_pool_allocator.\n Author\n Richard Roberts\n Date\n- Oct 17, 2010\n+ Oct 22, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bF_\ba_\bs_\bt_\bS_\be_\bt_\b._\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/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/FastSet.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,15 +98,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
FastSet.h
\n+
FastList.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,146 +114,83 @@\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+\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 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-
56 typedef std::set<VALUE, std::less<VALUE>,
\n-
57 typename internal::FastDefaultAllocator<VALUE>::type> Base;
\n+
57 FastList(const Base& x) : Base(x) {}
\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-
\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-
117
\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+
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-
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+
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,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-FastSet.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@@ -16,161 +16,99 @@\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+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 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-56 typedef std::set,\n-57 typename internal::FastDefaultAllocator::type> Base;\n+_\b5_\b7 _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt(const Base& x) : Base(x) {}\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-_\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+_\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-_\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:_\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+_\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 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+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- * _\bF_\ba_\bs_\bt_\bS_\be_\bt_\b._\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/a00116.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00116.html", "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/timing.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,45 +94,55 @@\n \n \n \n \n \n
\n \n-
VerticalBlockMatrix.h File Reference
\n+Namespaces |\n+Functions
\n+
timing.cpp File Reference
\n \n
\n \n-

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

Timing utilities. \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+Functions

\n+GTSAM_EXPORT boost::shared_ptr< TimingOutlinegtsam::internal::gTimingRoot (new TimingOutline("Total", getTicTocID("Total")))
 
\n+GTSAM_EXPORT boost::weak_ptr< TimingOutlinegtsam::internal::gCurrentTimer (gTimingRoot)
 
\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

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+

Timing utilities.

\n+
Author
Richard Roberts, Michael Kaess
\n+
Date
Oct 5, 2010
\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-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+timing.cpp File Reference\n+Timing utilities. _\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 boost::shared_ptr< 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 (new\n+ _\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be >\u00a0 _\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be(\"Total\", getTicTocID\n+ (\"Total\")))\n+\u00a0\n+ GTSAM_EXPORT boost::weak_ptr< 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+ _\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be >\u00a0 (gTimingRoot)\n+\u00a0\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\n+ *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\n+ *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\n+ *label)\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\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+Timing utilities.\n Author\n- Richard Roberts\n+ Richard Roberts, Michael Kaess\n Date\n- Sep 18, 2010\n+ Oct 5, 2010\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+ * _\bt_\bi_\bm_\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/a00119.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00119.html", "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/Matrix.h File Reference\n \n \n \n \n \n \n \n@@ -99,203 +99,294 @@\n
\n \n-
types.h File Reference
\n+
Matrix.h File Reference
\n
\n
\n \n-

Typedefs for easier changing of types. \n+

typedef and functions to augment Eigen's MatrixXd \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::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< OutM, OutN, OutOptions, InM, InN, InOptions >
 Reshape functor. 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, 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< const BASIC_TYPE, BASIC_TYPE, AS_NON_CONST, AS_CONST >
 Specialization for the 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::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::Reshape< N, M, InOptions, M, N, InOptions >
 Reshape specialization that does transpose. More...
 
class  gtsam::ListOfOneContainer< T >
 A helper class that behaves as a container with one element, and works with boost::range. More...
struct  gtsam::MultiplyWithInverse< N >
 Functor that implements multiplication of a vector b with the inverse of a matrix A. 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 > >
struct  gtsam::MultiplyWithInverseFunction< T, N >
 Functor that implements multiplication with the inverse of a matrix, itself the result of a function f. 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 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.
 
#define GTSAM_MAKE_MATRIX_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 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::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 \n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\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.
 
\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)
 
\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 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

Macro Definition Documentation

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

◆ GTSAM_MAKE_MATRIX_DEFS

\n \n
\n
\n \n \n- \n+ \n \n \n- \n+ \n \n \n
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF#define GTSAM_MAKE_MATRIX_DEFS( NeedsToAlign)N)
\n
\n-Value:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign) \\
\n-
using _eigen_aligned_allocator_trait = void;
\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
\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,308 @@\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+Matrix.h File Reference\n+typedef and functions to augment Eigen's MatrixXd _\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+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 \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+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 \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-\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-\u00a0\n-#define\u00a0 D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bC_\b_P\bPO\bOP\bP()\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 \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+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 \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::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 \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::Block< Matrix >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSu\bub\bbM\bMa\bat\btr\bri\bix\bx\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::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 \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+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 \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+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 \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+ Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:L\bLL\bLt\bt (const Matrix &A)\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+ Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:R\bRt\btR\bR (const Matrix &A)\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\bol\blu\bum\bmn\bnN\bNo\bor\brm\bmS\bSq\bqu\bua\bar\bre\be (const Matrix &A)\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\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 MatrixXd\n Author\n- Richard Roberts\n- Date\n- Aug 21, 2010\n+ Christian Potthast\n+ Kai Ni\n+ Frank Dellaert\n+ Alex Cunningham\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_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 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 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 * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bt_\by_\bp_\be_\bs_\b._\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/a00119.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00119.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,19 +1,46 @@\n var a00119 = [\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\", \"a00119.html#a30d3af2da1ea940197addce4f3c223c8\", null],\n- [\"GTSAM_MAKE_ALIGNED_OPERATOR_NEW\", \"a00119.html#aa123dd61687e08ae328154a1890b7b86\", null],\n- [\"GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF\", \"a00119.html#a352ab46cee3a766e30b049690802fb0a\", null],\n- [\"DenseIndex\", \"a00119.html#a21006f326f57cdf7d3f35fec40f43e40\", null],\n- [\"FactorIndex\", \"a00119.html#a19c53f2faabb0f4b4b78ce2f7168cc14\", null],\n- [\"Key\", \"a00119.html#adad029f5f6ffce610428b5fe768b0df2\", null],\n- [\"void_t\", \"a00119.html#a6525d741529c7a2cd91fa913431f5fb7\", null],\n- [\"demangle\", \"a00119.html#a0b97fc96e5f69236e81489c66d5b92ba\", null],\n- [\"ListOfOne\", \"a00119.html#a045b43784acac77531813c4ab6c4d281\", null]\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\", \"a00119.html#a3f9622226dfe06908f11b42bf0bdd22d\", null],\n+ [\"assert_equal\", \"a00119.html#abb0e19bbbeaca95843e8161b89a12fda\", null],\n+ [\"assert_inequal\", \"a00119.html#a7a116d0643f123ef3b15d91056506492\", null],\n+ [\"backSubstituteLower\", \"a00119.html#a0d998e1b770c9864946ddb031b1c4522\", null],\n+ [\"backSubstituteUpper\", \"a00119.html#a6c4876cbe85d5651a52eda0e97c60f2f\", null],\n+ [\"backSubstituteUpper\", \"a00119.html#a8b0bf332d52b333dab2b20d763c8925b\", null],\n+ [\"cholesky_inverse\", \"a00119.html#aba542e2cd85f08b76f80a0871a4ea713\", null],\n+ [\"collect\", \"a00119.html#ad8b524ba6c9aed0d21a020999c9b5d88\", null],\n+ [\"column\", \"a00119.html#a559dba69e2854eb66e34222f60f55722\", null],\n+ [\"diag\", \"a00119.html#af1c32907adce74cf9edd6ee5bba5a085\", null],\n+ [\"DLT\", \"a00119.html#ab2c65f1a69009a306b6a5f9ef31dcee2\", null],\n+ [\"equal_with_abs_tol\", \"a00119.html#af31e657258505b2e5148846ebbaa3195\", null],\n+ [\"expm\", \"a00119.html#ab15462d8c16813d0a7a5b1f76a2f64b7\", null],\n+ [\"householder\", \"a00119.html#a7baa2f3184a444adce108633c0265e0c\", null],\n+ [\"householder_\", \"a00119.html#abdd1ab05e8ac90b340fbd8f3b322dc6d\", null],\n+ [\"inplace_QR\", \"a00119.html#a7eec9339ab5a008a28ddfaa6b2c94611\", null],\n+ [\"insertSub\", \"a00119.html#ad1088fa2d1494e6a4123a6bc3f5c2d7e\", null],\n+ [\"inverse_square_root\", \"a00119.html#aff78dee59ac0250432081f39deb5f6d1\", null],\n+ [\"linear_dependent\", \"a00119.html#a4b81794af72954abafbb726fc712f5db\", null],\n+ [\"linear_independent\", \"a00119.html#ad8f0349471464c1fb515819d9503849a\", null],\n+ [\"operator!=\", \"a00119.html#ab235abf7505b634be2165e0db58239dd\", null],\n+ [\"operator==\", \"a00119.html#afd5b3cf3f54adcbdd6d9e7403f1a792f\", null],\n+ [\"operator>>\", \"a00119.html#a7d85957bab2d18cf56ab9aaf95a106de\", null],\n+ [\"operator^\", \"a00119.html#a2218e53a2b99c449e70aa5b7805895fc\", null],\n+ [\"print\", \"a00119.html#a54fa43c89c5334314c8c75939dd5c2d7\", null],\n+ [\"print\", \"a00119.html#a44ead03912d5dcf094d8421e1702ee71\", null],\n+ [\"prod\", \"a00119.html#abc29e3164ed30e785a3c48dfd1aa6ca5\", null],\n+ [\"qr\", \"a00119.html#ae32c295e2c40c1e85f146a8a6266eaa8\", null],\n+ [\"row\", \"a00119.html#a2754f325c8600303d627d9e8cf1f9949\", null],\n+ [\"save\", \"a00119.html#a3eb7eed9019d3fda8fcf74fbf85b85c9\", null],\n+ [\"skewSymmetric\", \"a00119.html#a97f108d19e52c83c331c55d35b23796e\", null],\n+ [\"stack\", \"a00119.html#a5c82884a356ddd09229a5283aed04df9\", null],\n+ [\"sub\", \"a00119.html#a9ae1d9fe2ccad044fbb88b5c1d9e035a\", null],\n+ [\"svd\", \"a00119.html#a8d7e46204d953f64a39445599dbd7eee\", null],\n+ [\"trans\", \"a00119.html#aa2e36d7ab63000feddaeb61bbfcf2db1\", null],\n+ [\"vector_scale_inplace\", \"a00119.html#a24d3ad0252f91f0ec301593c45cf5af7\", null],\n+ [\"weighted_eliminate\", \"a00119.html#a60019a03f26b92c6b2a08e43d153d4c0\", null],\n+ [\"zeroBelowDiagonal\", \"a00119.html#a57edf6ed7312f63d35f73233665c334d\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00119_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00119_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/Matrix.h Source File\n \n \n \n \n \n \n \n@@ -98,318 +98,397 @@\n
No Matches
\n
\n \n \n \n \n
\n-
types.h
\n+
Matrix.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/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+
23// \\callgraph
\n+
24
\n+
25#pragma once
\n
26
\n-
27#include <cstddef>
\n-
28#include <cstdint>
\n-
29
\n-
30#include <exception>
\n-
31#include <string>
\n+\n+
28#include <gtsam/base/Vector.h>
\n+
29#include <boost/tuple/tuple.hpp>
\n+
30
\n+
31#include <vector>
\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-
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-
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+
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+
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
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+
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,343 +1,534 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-types.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-20#pragma once\n-21\n-22#include \n-23#include \n-24#include \n-25#include // for GTSAM_USE_TBB\n+23// \\callgraph\n+24\n+25#pragma once\n 26\n-27#include \n-28#include \n-29\n-30#include \n-31#include \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-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+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 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+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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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- * _\bt_\by_\bp_\be_\bs_\b._\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/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/Vector.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,110 +96,46 @@\n \n \n \n
\n \n-
Vector.cpp File Reference
\n+
cholesky.cpp File Reference
\n
\n
\n \n-

typedef and functions to augment Eigen's Vectors \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 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
 
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-

typedef and functions to augment Eigen's Vectors

\n-
Author
Kai Ni
\n+

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

\n+
Author
Richard Roberts
\n
\n-Frank Dellaert
\n-
\n-Varun Agrawal
\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,105 +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-Vector.cpp File Reference\n-typedef and functions to augment Eigen's Vectors _\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 _\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+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-typedef and functions to augment Eigen's Vectors\n+Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained\n+Cholesky.\n Author\n- Kai Ni\n+ Richard Roberts\n Frank Dellaert\n- Varun Agrawal\n+ Date\n+ Nov 5, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bV_\be_\bc_\bt_\bo_\br_\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/a00125.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00125.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,19 +1,4 @@\n var a00125 = [\n- [\"assert_equal\", \"a00125.html#ac3cf8e8e70cd696d9c789c31bc1e89a7\", null],\n- [\"assert_equal\", \"a00125.html#a9f3ee662d25ffb8c04b4e35c4b02e90b\", null],\n- [\"assert_inequal\", \"a00125.html#a2ca3db47b15350977c1f03c5560ab332\", null],\n- [\"concatVectors\", \"a00125.html#ae1c88acfa9575bcea3f2e738cb637a85\", null],\n- [\"concatVectors\", \"a00125.html#a09610ec69a8b3f3a00399bb378eda9cf\", null],\n- [\"ediv_\", \"a00125.html#a14844c96706dc362917e0d5e76d65fbe\", null],\n- [\"equal_with_abs_tol\", \"a00125.html#a8bdced1844ffd6a53af0396d82eaa6da\", null],\n- [\"fpEqual\", \"a00125.html#ae19c359190a379cba44bf818a2293f7c\", null],\n- [\"greaterThanOrEqual\", \"a00125.html#a368ee40bd9c0124d572d2e49bcb077bf\", null],\n- [\"house\", \"a00125.html#afb77eefc25dea0fb3e0fcc8f246b617a\", null],\n- [\"houseInPlace\", \"a00125.html#ac9c0c05b0198ec0fb6e4115edb755910\", null],\n- [\"linear_dependent\", \"a00125.html#a2a0cfd7908b06491df49b6a9c9186775\", null],\n- [\"operator==\", \"a00125.html#a64988014ab746343803620dc42513646\", null],\n- [\"print\", \"a00125.html#a760cc36e9009b23cf564c436294b3504\", null],\n- [\"print\", \"a00125.html#a5e5d8018a0f44a6a299406aeda27d44b\", null],\n- [\"save\", \"a00125.html#a09f2bbdb9f9d633542362dbe8d79f9ab\", null],\n- [\"weightedPseudoinverse\", \"a00125.html#aca1c56d11a05464a7a5458dc32ccc777\", null]\n+ [\"choleskyCareful\", \"a00125.html#a747683f736c50bca16b3aab0e95b1b76\", null],\n+ [\"choleskyPartial\", \"a00125.html#abe82fa6aceccfa2360cf314ab44f39ad\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00128_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00128_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/GenericValue.h Source File\n \n \n \n \n \n \n \n@@ -98,140 +98,281 @@\n
No Matches
\n \n \n \n \n \n
\n-
ConcurrentMap.h
\n+
GenericValue.h
\n
\n
\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-
22
\n-
23// Change class depending on whether we are using TBB
\n-
24#ifdef GTSAM_USE_TBB
\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 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+
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-
49#endif
\n+
49public:
\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+
51 typedef T type;
\n+
52
\n+
53protected:
\n
54
\n-\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-
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::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+
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+
Base class and basic functions for Manifold types.
\n+
The base class for any variable that can be optimized or used in a factor.
\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+
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-
  • gtsam
  • base
  • ConcurrentMap.h
  • \n+
  • gtsam
  • base
  • GenericValue.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,168 +1,324 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ConcurrentMap.h\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\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+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 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+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-49#endif\n+49public:\n 50\n-51#include \n-52#include \n-53#include \n+51 typedef T type;\n+52\n+53protected:\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+_\b5_\b5 T _\bv_\ba_\bl_\bu_\be_\b_;\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-_\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+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 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+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+_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n+Base class and basic functions for Manifold types.\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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+_\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 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+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- * C\bCo\bon\bnc\bcu\bur\brr\bre\ben\bnt\btM\bMa\bap\bp.\b.h\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/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/debug.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@@ -94,61 +94,45 @@\n \n \n \n \n \n
\n \n-
debug.h File Reference
\n+Classes |\n+Namespaces
\n+
Value.h File Reference
\n \n
\n \n-

Global debugging flags. \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+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-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-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

Detailed Description

\n-

Global debugging flags.

\n+

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

\n
Author
Richard Roberts
\n-
Date
Feb 1, 2011
\n+
Date
Jan 14, 2012
\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-_\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+_\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 _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\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-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-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\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+The base class for any variable that can be optimized or used in a factor.\n Author\n Richard Roberts\n Date\n- Feb 1, 2011\n+ Jan 14, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bd_\be_\bb_\bu_\bg_\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/a00131_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00131_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/Value.h Source File\n \n \n \n \n \n \n \n@@ -98,86 +98,100 @@\n
No Matches
\n \n \n \n \n \n
\n-
debug.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 * -------------------------------------------------------------------------- */
\n
11
\n-
19#include <gtsam/base/FastMap.h>
\n-\n-
21#include <string>
\n+
19#pragma once
\n+
20
\n+
21#include <gtsam/config.h> // Configuration from CMake
\n
22
\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+
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-
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+
60 virtual size_t dim() const = 0;
\n+
61
\n+
68 virtual Value* retract_(const Vector& delta) const = 0;
\n
69
\n-
A thin wrapper around std::map that uses boost's fast_pool_allocator.
\n-
Included from all GTSAM files.
\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
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
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,83 +1,119 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-debug.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 * -------------------------------------------------------------------------\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+19#pragma once\n+20\n+21#include // Configuration from CMake\n 22\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+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-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+_\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-_\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+_\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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\n * _\bb_\ba_\bs_\be\n- * _\bd_\be_\bb_\bu_\bg_\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/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/SymmetricBlockMatrix.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,45 +94,36 @@\n \n \n \n \n \n
\n \n-
SymmetricBlockMatrix.h File Reference
\n+
VerticalBlockMatrix.cpp File Reference
\n
\n
\n \n-

Access to matrices via blocks of pre-defined sizes. \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-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

Detailed Description

\n-

Access to matrices via blocks of pre-defined sizes.

\n-

Used in GaussianFactor and GaussianConditional.

Author
Richard Roberts
\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,29 +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-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+_\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 *\b**\b**\b**\b**\b* D\bDe\bet\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+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\n Date\n Sep 18, 2010\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+ * _\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/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/WeightedSampler.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@@ -94,44 +94,48 @@\n \n \n \n \n \n
\n \n-
WeightedSampler.h File Reference
\n+Namespaces |\n+Functions
\n+
cholesky.h File Reference
\n \n
\n \n-

Fast sampling without replacement. \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-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+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-

Fast sampling without replacement.

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

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

\n+
Author
Richard Roberts
\n+
Date
Nov 5, 2010
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,26 +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-WeightedSampler.h File Reference\n-Fast sampling without replacement. _\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-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+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-Fast sampling without replacement.\n+Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained\n+Cholesky.\n Author\n- Frank Dellaert\n+ Richard Roberts\n Date\n- May 2019\n+ Nov 5, 2010\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+ * _\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/a00140.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00140.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,4 @@\n var a00140 = [\n- [\"gtsam::WeightedSampler< Engine >\", \"a02664.html\", \"a02664\"]\n+ [\"choleskyCareful\", \"a00140.html#a747683f736c50bca16b3aab0e95b1b76\", null],\n+ [\"choleskyPartial\", \"a00140.html#abe82fa6aceccfa2360cf314ab44f39ad\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00140_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00140_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/cholesky.h Source File\n \n \n \n \n \n \n \n@@ -98,152 +98,48 @@\n
No Matches
\n \n \n \n \n \n
\n-
WeightedSampler.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#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-
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-
132 }
\n-
133
\n-
134 return result;
\n-
135 }
\n-
136}; // namespace gtsam
\n-
\n-
137} // namespace gtsam
\n+
18#pragma once
\n+
19
\n+
20#include <gtsam/base/Matrix.h>
\n+
21
\n+
22namespace gtsam {
\n+
23
\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-
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+
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": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-utf-8\n+us-ascii\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,150 +1,53 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-WeightedSampler.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#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-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-132 }\n-133\n-134 return result;\n-135 }\n-136}; // namespace gtsam\n-137} // namespace gtsam\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+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:_\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:_\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- * _\bW_\be_\bi_\bg_\bh_\bt_\be_\bd_\bS_\ba_\bm_\bp_\bl_\be_\br_\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/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/GenericValue.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,281 +98,202 @@\n
No Matches
\n \n \n \n \n \n
\n-
GenericValue.h
\n+
serializationTestHelpers.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+
22#include <iostream>
\n+
23#include <sstream>
\n+
24#include <string>
\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+\n+
27
\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+
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-
\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+
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 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+
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-
\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+
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 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-
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-
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+
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-
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+
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,324 +1,239 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GenericValue.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-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+22#include \n+23#include \n+24#include \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+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+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+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-_\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+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 _\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+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-_\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+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 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-_\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-_\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+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:_\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_\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- * G\bGe\ben\bne\ber\bri\bic\bcV\bVa\bal\blu\bue\be.\b.h\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/a00146.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00146.html", "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/Vector.h File Reference\n \n \n \n \n \n \n \n@@ -94,299 +94,186 @@\n \n \n \n \n \n
\n \n-
Matrix.h File Reference
\n+
Vector.h File Reference
\n
\n
\n \n-

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

typedef and functions to augment Eigen's VectorXd \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::Reshape< OutM, OutN, OutOptions, InM, InN, InOptions >
 Reshape functor. 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::Reshape< M, N, InOptions, M, N, InOptions >
 Reshape specialization that does nothing as shape stays the same. More...
 
struct  gtsam::Reshape< N, M, InOptions, M, N, InOptions >
 Reshape specialization that does transpose. More...
 
struct  gtsam::MultiplyWithInverse< N >
 Functor that implements multiplication of a vector b with the inverse of a matrix A. More...
 
struct  gtsam::MultiplyWithInverseFunction< T, N >
 Functor that implements multiplication with the inverse of a matrix, itself the result of a function f. 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

#define GTSAM_MAKE_MATRIX_DEFS(N)
 
\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 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 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-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\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)
 
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-

typedef and functions to augment Eigen's MatrixXd

\n-
Author
Christian Potthast
\n-
\n-Kai Ni
\n+

typedef and functions to augment Eigen's VectorXd

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

Macro Definition Documentation

\n-\n-

◆ GTSAM_MAKE_MATRIX_DEFS

\n+\n+

◆ GTSAM_MAKE_VECTOR_DEFS

\n \n
\n
\n \n \n- \n+ \n \n \n \n \n \n
#define GTSAM_MAKE_MATRIX_DEFS#define GTSAM_MAKE_VECTOR_DEFS( N)
\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:
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
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,308 +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-Matrix.h File Reference\n-typedef and functions to augment Eigen's MatrixXd _\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:_\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-\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-\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 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::MatrixXd\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:M\bMa\bat\btr\bri\bix\bx\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, 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+ 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::Block< Matrix >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSu\bub\bbM\bMa\bat\btr\bri\bix\bx\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::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+ typedef Eigen::Vector3d\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:V\bVe\bec\bct\bto\bor\br3\b3\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+ 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-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+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- Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:L\bLL\bLt\bt (const Matrix &A)\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- Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:R\bRt\btR\bR (const Matrix &A)\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\bol\blu\bum\bmn\bnN\bNo\bor\brm\bmS\bSq\bqu\bua\bar\bre\be (const Matrix &A)\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 MatrixXd\n+typedef and functions to augment Eigen's VectorXd\n Author\n- Christian Potthast\n Kai Ni\n Frank Dellaert\n- Alex Cunningham\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_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\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 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+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- * _\bM_\ba_\bt_\br_\bi_\bx_\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/a00146.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00146.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,46 +1,23 @@\n var a00146 = [\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\", \"a00146.html#a3f9622226dfe06908f11b42bf0bdd22d\", null],\n- [\"assert_equal\", \"a00146.html#abb0e19bbbeaca95843e8161b89a12fda\", null],\n- [\"assert_inequal\", \"a00146.html#a7a116d0643f123ef3b15d91056506492\", null],\n- [\"backSubstituteLower\", \"a00146.html#a0d998e1b770c9864946ddb031b1c4522\", null],\n- [\"backSubstituteUpper\", \"a00146.html#a6c4876cbe85d5651a52eda0e97c60f2f\", null],\n- [\"backSubstituteUpper\", \"a00146.html#a8b0bf332d52b333dab2b20d763c8925b\", null],\n- [\"cholesky_inverse\", \"a00146.html#aba542e2cd85f08b76f80a0871a4ea713\", null],\n- [\"collect\", \"a00146.html#ad8b524ba6c9aed0d21a020999c9b5d88\", null],\n- [\"column\", \"a00146.html#a559dba69e2854eb66e34222f60f55722\", null],\n- [\"diag\", \"a00146.html#af1c32907adce74cf9edd6ee5bba5a085\", null],\n- [\"DLT\", \"a00146.html#ab2c65f1a69009a306b6a5f9ef31dcee2\", null],\n- [\"equal_with_abs_tol\", \"a00146.html#af31e657258505b2e5148846ebbaa3195\", null],\n- [\"expm\", \"a00146.html#ab15462d8c16813d0a7a5b1f76a2f64b7\", null],\n- [\"householder\", \"a00146.html#a7baa2f3184a444adce108633c0265e0c\", null],\n- [\"householder_\", \"a00146.html#abdd1ab05e8ac90b340fbd8f3b322dc6d\", null],\n- [\"inplace_QR\", \"a00146.html#a7eec9339ab5a008a28ddfaa6b2c94611\", null],\n- [\"insertSub\", \"a00146.html#ad1088fa2d1494e6a4123a6bc3f5c2d7e\", null],\n- [\"inverse_square_root\", \"a00146.html#aff78dee59ac0250432081f39deb5f6d1\", null],\n- [\"linear_dependent\", \"a00146.html#a4b81794af72954abafbb726fc712f5db\", null],\n- [\"linear_independent\", \"a00146.html#ad8f0349471464c1fb515819d9503849a\", null],\n- [\"operator!=\", \"a00146.html#ab235abf7505b634be2165e0db58239dd\", null],\n- [\"operator==\", \"a00146.html#afd5b3cf3f54adcbdd6d9e7403f1a792f\", null],\n- [\"operator>>\", \"a00146.html#a7d85957bab2d18cf56ab9aaf95a106de\", null],\n- [\"operator^\", \"a00146.html#a2218e53a2b99c449e70aa5b7805895fc\", null],\n- [\"print\", \"a00146.html#a54fa43c89c5334314c8c75939dd5c2d7\", null],\n- [\"print\", \"a00146.html#a44ead03912d5dcf094d8421e1702ee71\", null],\n- [\"prod\", \"a00146.html#abc29e3164ed30e785a3c48dfd1aa6ca5\", null],\n- [\"qr\", \"a00146.html#ae32c295e2c40c1e85f146a8a6266eaa8\", null],\n- [\"row\", \"a00146.html#a2754f325c8600303d627d9e8cf1f9949\", null],\n- [\"save\", \"a00146.html#a3eb7eed9019d3fda8fcf74fbf85b85c9\", null],\n- [\"skewSymmetric\", \"a00146.html#a97f108d19e52c83c331c55d35b23796e\", null],\n- [\"stack\", \"a00146.html#a5c82884a356ddd09229a5283aed04df9\", null],\n- [\"sub\", \"a00146.html#a9ae1d9fe2ccad044fbb88b5c1d9e035a\", null],\n- [\"svd\", \"a00146.html#a8d7e46204d953f64a39445599dbd7eee\", null],\n- [\"trans\", \"a00146.html#aa2e36d7ab63000feddaeb61bbfcf2db1\", null],\n- [\"vector_scale_inplace\", \"a00146.html#a24d3ad0252f91f0ec301593c45cf5af7\", null],\n- [\"weighted_eliminate\", \"a00146.html#a60019a03f26b92c6b2a08e43d153d4c0\", null],\n- [\"zeroBelowDiagonal\", \"a00146.html#a57edf6ed7312f63d35f73233665c334d\", null]\n+ [\"assert_equal\", \"a00146.html#ac3cf8e8e70cd696d9c789c31bc1e89a7\", null],\n+ [\"assert_equal\", \"a00146.html#a9f3ee662d25ffb8c04b4e35c4b02e90b\", null],\n+ [\"assert_inequal\", \"a00146.html#a2ca3db47b15350977c1f03c5560ab332\", null],\n+ [\"concatVectors\", \"a00146.html#ae1c88acfa9575bcea3f2e738cb637a85\", null],\n+ [\"concatVectors\", \"a00146.html#a09610ec69a8b3f3a00399bb378eda9cf\", null],\n+ [\"dot\", \"a00146.html#ad80249acf12bbea741e755cd8fc73042\", null],\n+ [\"ediv_\", \"a00146.html#a14844c96706dc362917e0d5e76d65fbe\", null],\n+ [\"equal\", \"a00146.html#a3d1cad2313f69f9fa5008fdc348d1526\", null],\n+ [\"equal\", \"a00146.html#aa7ed1d4fe2dd6828cfeb2d8f488b818d\", null],\n+ [\"equal_with_abs_tol\", \"a00146.html#a8bdced1844ffd6a53af0396d82eaa6da\", null],\n+ [\"fpEqual\", \"a00146.html#ae19c359190a379cba44bf818a2293f7c\", null],\n+ [\"greaterThanOrEqual\", \"a00146.html#a368ee40bd9c0124d572d2e49bcb077bf\", null],\n+ [\"house\", \"a00146.html#afb77eefc25dea0fb3e0fcc8f246b617a\", null],\n+ [\"houseInPlace\", \"a00146.html#ac9c0c05b0198ec0fb6e4115edb755910\", null],\n+ [\"inner_prod\", \"a00146.html#a4ca41ba9ec9d6d21a2b9f5e00f9f25ed\", null],\n+ [\"linear_dependent\", \"a00146.html#a2a0cfd7908b06491df49b6a9c9186775\", null],\n+ [\"operator==\", \"a00146.html#a64988014ab746343803620dc42513646\", null],\n+ [\"print\", \"a00146.html#a760cc36e9009b23cf564c436294b3504\", null],\n+ [\"print\", \"a00146.html#a5e5d8018a0f44a6a299406aeda27d44b\", null],\n+ [\"save\", \"a00146.html#a09f2bbdb9f9d633542362dbe8d79f9ab\", null],\n+ [\"weightedPseudoinverse\", \"a00146.html#aca1c56d11a05464a7a5458dc32ccc777\", null]\n ];\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/Matrix.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,397 +98,192 @@\n
No Matches
\n
\n \n \n \n \n
\n-
Matrix.h
\n+
Vector.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-
26
\n-\n-
28#include <gtsam/base/Vector.h>
\n-
29#include <boost/tuple/tuple.hpp>
\n-
30
\n-
31#include <vector>
\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+
29#include <Eigen/Core>
\n+
30#include <iosfwd>
\n+
31#include <list>
\n
32
\n-
38namespace gtsam {
\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-
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+
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-
\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+
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 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+
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-
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+
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-
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+
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-
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+
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 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+
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-
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+
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-
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+
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-
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+
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-
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,534 +1,247 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Matrix.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-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+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+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-38namespace _\bg_\bt_\bs_\ba_\bm {\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-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-148\n-152GTSAM_EXPORT void _\bp_\br_\bi_\bn_\bt(const Matrix& A, const std::string& s, std::ostream&\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-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+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-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+_\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-_\b2_\b4_\b2inline Matrix _\bt_\br_\ba_\bn_\bs(const Matrix& A) { return A.transpose(); }\n-243\n-245template \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+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:_\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:_\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:_\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_\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_\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:_\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:_\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:_\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_\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- * _\bM_\ba_\bt_\br_\bi_\bx_\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/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/Chebyshev.h 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@@ -96,46 +96,61 @@\n \n \n \n
\n \n-
Chebyshev.h File Reference
\n+
BasisFactors.h File Reference
\n
\n
\n \n-

Chebyshev basis decompositions. \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+\n+\n \n

\n Classes

struct  gtsam::Chebyshev1Basis
 Basis of Chebyshev polynomials of the first kind https://en.wikipedia.org/wiki/Chebyshev_polynomials#First_kind These are typically denoted with the symbol T_n, where n is the degree. More...
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...
 
struct  gtsam::Chebyshev2Basis
 Basis of Chebyshev polynomials of the second kind. 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 basis decompositions.

\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,32 +1,58 @@\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-Chebyshev.h File Reference\n-Chebyshev basis decompositions. _\bM_\bo_\br_\be_\b._\b._\b.\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-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b1_\bB_\ba_\bs_\bi_\bs\n- _\bB_\ba_\bs_\bi_\bs of Chebyshev polynomials of the first kind _\bh_\bt_\bt_\bp_\bs_\b:_\b/_\b/\n-\u00a0 _\be_\bn_\b._\bw_\bi_\bk_\bi_\bp_\be_\bd_\bi_\ba_\b._\bo_\br_\bg_\b/_\bw_\bi_\bk_\bi_\b/_\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b__\bp_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\bs_\b#_\bF_\bi_\br_\bs_\bt_\b__\bk_\bi_\bn_\bd These are\n- typically denoted with the symbol T_n, where n is the degree. _\bM_\bo_\br_\be_\b._\b._\b.\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-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b2_\bB_\ba_\bs_\bi_\bs\n-\u00a0 _\bB_\ba_\bs_\bi_\bs of Chebyshev polynomials of the second kind. _\bM_\bo_\br_\be_\b._\b._\b.\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 basis decompositions.\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_\b._\bh\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/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,6 @@\n var a00152 = [\n- [\"gtsam::Chebyshev1Basis\", \"a02732.html\", null],\n- [\"gtsam::Chebyshev2Basis\", \"a02736.html\", null]\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 ];\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/Chebyshev.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@@ -98,15 +98,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
Chebyshev.h
\n+
BasisFactors.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,56 +114,251 @@\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/basis/Basis.h>
\n+\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-
35 Parameters parameters_;
\n-
36
\n-
45 static Weights CalculateWeights(size_t N, double x, double a = -1,
\n-
46 double b = 1);
\n-
47
\n-
66 static Weights DerivativeWeights(size_t N, double x, double a = -1,
\n-
67 double b = 1);
\n-
68}; // Chebyshev1Basis
\n-
\n-
69
\n-
\n-
80struct GTSAM_EXPORT Chebyshev2Basis : Basis<Chebyshev2Basis> {
\n-
81 using Parameters = Eigen::Matrix<double, -1, 1 /*Nx1*/>;
\n-
82
\n-
91 static Weights CalculateWeights(size_t N, double x, double a = -1,
\n-
92 double b = 1);
\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+
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+
\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-
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+
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
\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-Chebyshev.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@@ -16,56 +16,297 @@\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_\bi_\bs_\b/_\bB_\ba_\bs_\bi_\bs_\b._\bh>\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-_\b3_\b2struct GTSAM_EXPORT _\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b1_\bB_\ba_\bs_\bi_\bs : _\bB_\ba_\bs_\bi_\bs {\n-33 using Parameters = Eigen::Matrix;\n-34\n-35 Parameters parameters_;\n-36\n-45 static Weights CalculateWeights(size_t N, double x, double a = -1,\n-46 double b = 1);\n-47\n-66 static Weights DerivativeWeights(size_t N, double x, double a = -1,\n-67 double b = 1);\n-68}; // Chebyshev1Basis\n-69\n-_\b8_\b0struct GTSAM_EXPORT _\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b2_\bB_\ba_\bs_\bi_\bs : _\bB_\ba_\bs_\bi_\bs {\n-81 using Parameters = Eigen::Matrix;\n-82\n-91 static Weights CalculateWeights(size_t N, double x, double a = -1,\n-92 double b = 1);\n-93\n-103 static Weights DerivativeWeights(size_t N, double x, double a = -1,\n-104 double b = 1);\n-105}; // Chebyshev2Basis\n-106\n-107} // namespace gtsam\n-_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n-Base class and basic functions for Manifold types.\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+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:_\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:_\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b1_\bB_\ba_\bs_\bi_\bs\n-Basis of Chebyshev polynomials of the first kind https://en.wikipedia.org/wiki/\n-Chebyshev_polynomials#...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Chebyshev.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b2_\bB_\ba_\bs_\bi_\bs\n-Basis of Chebyshev polynomials of the second kind.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Chebyshev.h:80\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\n * _\bb_\ba_\bs_\bi_\bs\n- * _\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b._\bh\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/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
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/base/VectorSpace.h>
\n
25
\n
26#include <iostream>
\n
27
\n
28namespace gtsam {
\n
29
\n
37template <int M>
\n@@ -260,16 +260,16 @@\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-
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+
typedef and functions to augment Eigen's MatrixXd
\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"}, {"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/Fourier.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,44 +95,83 @@\n \n \n \n \n
\n \n-
Fourier.h File Reference
\n+Namespaces |\n+Typedefs |\n+Functions
\n+
Basis.h File Reference
\n \n
\n \n-

Fourier decomposition, see e.g. \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 Classes

class  gtsam::FourierBasis
 Fourier basis. More...
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...
 
\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-

Fourier decomposition, see e.g.

\n-

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

Author
Varun Agrawal, Frank Dellaert
\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,28 +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-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 | _\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:_\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:_\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 \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-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+Compute an interpolating basis.\n Author\n- Varun Agrawal, Frank Dellaert\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- * _\bF_\bo_\bu_\br_\bi_\be_\br_\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/a00158.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00158.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,11 @@\n var a00158 = [\n- [\"gtsam::FourierBasis\", \"a02748.html\", null]\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 ];\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/Fourier.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,106 +98,473 @@\n
No Matches
\n \n \n \n \n \n
\n-
Fourier.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
6 * Authors: Frank Dellaert, 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/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+
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
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-
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+
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,109 +1,554 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Fourier.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 6 * Authors: Frank Dellaert, 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_\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+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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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- * _\bF_\bo_\bu_\br_\bi_\be_\br_\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/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/Chebyshev2.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Chebyshev.h File Reference\n \n \n \n \n \n \n \n@@ -96,46 +96,46 @@\n \n \n \n
\n \n-
Chebyshev2.h File Reference
\n+
Chebyshev.h File Reference
\n
\n
\n \n-

Pseudo-spectral parameterization for Chebyshev polynomials of the second kind. \n+

Chebyshev basis decompositions. \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::Chebyshev2
 Chebyshev Interpolation on Chebyshev points of the second kind Note that N here, the number of points, is one less than N from 'Approximation Theory and Approximation Practice by L. More...
struct  gtsam::Chebyshev1Basis
 Basis of Chebyshev polynomials of the first kind https://en.wikipedia.org/wiki/Chebyshev_polynomials#First_kind These are typically denoted with the symbol T_n, where n is the degree. More...
 
struct  gtsam::Chebyshev2Basis
 Basis of Chebyshev polynomials of the second kind. More...
 
\n \n \n \n \n

\n Namespaces

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

Detailed Description

\n-

Pseudo-spectral parameterization for Chebyshev polynomials of the second kind.

\n-

In a pseudo-spectral case, rather than the parameters acting as weights for the bases polynomials (as in Chebyshev2Basis), here the parameters are the values at a specific set of points in the interval, the \"Chebyshev points\". These values uniquely determine the polynomial that interpolates them at the Chebyshev points.

\n-

This is different from Chebyshev.h since it leverage ideas from pseudo-spectral optimization, i.e. we don't decompose into basis functions, rather estimate function values at the Chebyshev points.

\n-

Please refer to Agrawal21icra for more details.

\n+

Chebyshev basis decompositions.

\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,39 +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-Chebyshev2.h File Reference\n-Pseudo-spectral parameterization for Chebyshev polynomials of the second kind.\n-_\bM_\bo_\br_\be_\b._\b._\b.\n+Chebyshev.h File Reference\n+Chebyshev basis decompositions. _\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_\bb_\by_\bs_\bh_\be_\bv_\b2\n- Chebyshev Interpolation on Chebyshev points of the second kind Note\n-\u00a0 that N here, the number of points, is one less than N from\n- 'Approximation Theory and Approximation Practice by L. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b1_\bB_\ba_\bs_\bi_\bs\n+ _\bB_\ba_\bs_\bi_\bs of Chebyshev polynomials of the first kind _\bh_\bt_\bt_\bp_\bs_\b:_\b/_\b/\n+\u00a0 _\be_\bn_\b._\bw_\bi_\bk_\bi_\bp_\be_\bd_\bi_\ba_\b._\bo_\br_\bg_\b/_\bw_\bi_\bk_\bi_\b/_\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b__\bp_\bo_\bl_\by_\bn_\bo_\bm_\bi_\ba_\bl_\bs_\b#_\bF_\bi_\br_\bs_\bt_\b__\bk_\bi_\bn_\bd These are\n+ typically denoted with the symbol T_n, where n is the degree. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b2_\bB_\ba_\bs_\bi_\bs\n+\u00a0 _\bB_\ba_\bs_\bi_\bs of Chebyshev polynomials of the second kind. _\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-Pseudo-spectral parameterization for Chebyshev polynomials of the second kind.\n-In a pseudo-spectral case, rather than the parameters acting as weights for the\n-bases polynomials (as in Chebyshev2Basis), here the parameters are the v\bva\bal\blu\bue\bes\bs\n-at a specific set of points in the interval, the \"Chebyshev points\". These\n-values uniquely determine the polynomial that interpolates them at the\n-Chebyshev points.\n-This is different from _\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b._\bh since it leverage ideas from pseudo-spectral\n-optimization, i.e. we don't decompose into basis functions, rather estimate\n-function values at the Chebyshev points.\n-Please refer to Agrawal21icra for more details.\n+Chebyshev basis decompositions.\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_\b2_\b._\bh\n+ * _\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b._\bh\n * Generated on Tue Jan 9 2024 05:51: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::Chebyshev2\", \"a02740.html\", null]\n+ [\"gtsam::Chebyshev1Basis\", \"a02732.html\", null],\n+ [\"gtsam::Chebyshev2Basis\", \"a02736.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/Chebyshev2.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Chebyshev.h Source File\n \n \n \n \n \n \n \n@@ -98,122 +98,72 @@\n
No Matches
\n \n \n \n \n \n
\n-
Chebyshev2.h
\n+
Chebyshev.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-
33#pragma once
\n+
19#pragma once
\n+
20
\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-
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-
49
\n-
50 using Base = Basis<Chebyshev2>;
\n-
51 using Parameters = Eigen::Matrix<double, /*Nx1*/ -1, 1>;
\n-
52 using DiffMatrix = Eigen::Matrix<double, /*NxN*/ -1, -1>;
\n-
53
\n-
\n-
55 static double Point(size_t N, int j) {
\n-
56 assert(j >= 0 && size_t(j) < N);
\n-
57 const double dtheta = M_PI / (N > 1 ? (N - 1) : 1);
\n-
58 // We add -PI so that we get values ordered from -1 to +1
\n-
59 // sin(- M_PI_2 + dtheta*j); also works
\n-
60 return cos(-M_PI + dtheta * j);
\n-
61 }
\n-
\n-
62
\n-
\n-
64 static double Point(size_t N, int j, double a, double b) {
\n-
65 assert(j >= 0 && size_t(j) < N);
\n-
66 const double dtheta = M_PI / (N - 1);
\n-
67 // We add -PI so that we get values ordered from -1 to +1
\n-
68 return a + (b - a) * (1. + cos(-M_PI + dtheta * j)) / 2;
\n-
69 }
\n-
\n-
70
\n-
\n-
72 static Vector Points(size_t N) {
\n-
73 Vector points(N);
\n-
74 for (size_t j = 0; j < N; j++) points(j) = Point(N, j);
\n-
75 return points;
\n-
76 }
\n-
\n-
77
\n-
\n-
79 static Vector Points(size_t N, double a, double b) {
\n-
80 Vector points = Points(N);
\n-
81 const double T1 = (a + b) / 2, T2 = (b - a) / 2;
\n-
82 points = T1 + (T2 * points).array();
\n-
83 return points;
\n-
84 }
\n-
\n-
85
\n-
94 static Weights CalculateWeights(size_t N, double x, double a = -1,
\n-
95 double b = 1);
\n-
96
\n-
101 static Weights DerivativeWeights(size_t N, double x, double a = -1,
\n-
102 double b = 1);
\n-
103
\n-
108 static DiffMatrix DifferentiationMatrix(size_t N, double a = -1,
\n-
109 double b = 1);
\n-
110
\n-
129 static Weights IntegrationWeights(size_t N, double a = -1, double b = 1);
\n-
130
\n-
134 template <size_t M>
\n-
\n-
135 static Matrix matrix(std::function<Eigen::Matrix<double, M, 1>(double)> f,
\n-
136 size_t N, double a = -1, double b = 1) {
\n-
137 Matrix Xmat(M, N);
\n-
138 for (size_t j = 0; j < N; j++) {
\n-
139 Xmat.col(j) = f(Point(N, j, a, b));
\n-
140 }
\n-
141 return Xmat;
\n-
142 }
\n-
\n-
143}; // \\ Chebyshev2
\n-
\n-
144
\n-
145} // namespace gtsam
\n-
Special class for optional Jacobian arguments.
\n-
Base class and basic functions for Manifold types.
\n-
Compute an interpolating basis.
\n+
35 Parameters parameters_;
\n+
36
\n+
45 static Weights CalculateWeights(size_t N, double x, double a = -1,
\n+
46 double b = 1);
\n+
47
\n+
66 static Weights DerivativeWeights(size_t N, double x, double a = -1,
\n+
67 double b = 1);
\n+
68}; // Chebyshev1Basis
\n+
\n+
69
\n+
\n+
80struct GTSAM_EXPORT Chebyshev2Basis : Basis<Chebyshev2Basis> {
\n+
81 using Parameters = Eigen::Matrix<double, -1, 1 /*Nx1*/>;
\n+
82
\n+
91 static Weights CalculateWeights(size_t N, double x, double a = -1,
\n+
92 double b = 1);
\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
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-
static Matrix matrix(std::function< Eigen::Matrix< double, M, 1 >(double)> f, size_t N, double a=-1, double b=1)
Create matrix of values at Chebyshev points given vector-valued function.
Definition Chebyshev2.h:135
\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
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,128 +1,71 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Chebyshev2.h\n+Chebyshev.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-33#pragma once\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_\bi_\bs_\b/_\bB_\ba_\bs_\bi_\bs_\b._\bh>\n+23\n+24namespace _\bg_\bt_\bs_\ba_\bm {\n+25\n+_\b3_\b2struct GTSAM_EXPORT _\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b1_\bB_\ba_\bs_\bi_\bs : _\bB_\ba_\bs_\bi_\bs {\n+33 using Parameters = Eigen::Matrix;\n 34\n-35#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n-36#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-37#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\bi_\bs_\b/_\bB_\ba_\bs_\bi_\bs_\b._\bh>\n-38\n-39namespace _\bg_\bt_\bs_\ba_\bm {\n-40\n-_\b4_\b6class GTSAM_EXPORT _\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b2 : public _\bB_\ba_\bs_\bi_\bs {\n-47 public:\n-48 EIGEN_MAKE_ALIGNED_OPERATOR_NEW\n-49\n-50 using _\bB_\ba_\bs_\be = _\bB_\ba_\bs_\bi_\bs_\b<_\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b2_\b>;\n-51 using Parameters = Eigen::Matrix;\n-52 using DiffMatrix = Eigen::Matrix;\n-53\n-_\b5_\b5 static double _\bP_\bo_\bi_\bn_\bt(size_t N, int j) {\n-56 assert(j >= 0 && size_t(j) < N);\n-57 const double dtheta = M_PI / (N > 1 ? (N - 1) : 1);\n-58 // We add -PI so that we get values ordered from -1 to +1\n-59 // sin(- M_PI_2 + dtheta*j); also works\n-60 return cos(-M_PI + dtheta * j);\n-61 }\n-62\n-_\b6_\b4 static double _\bP_\bo_\bi_\bn_\bt(size_t N, int j, double a, double b) {\n-65 assert(j >= 0 && size_t(j) < N);\n-66 const double dtheta = M_PI / (N - 1);\n-67 // We add -PI so that we get values ordered from -1 to +1\n-68 return a + (b - a) * (1. + cos(-M_PI + dtheta * j)) / 2;\n-69 }\n-70\n-_\b7_\b2 static Vector _\bP_\bo_\bi_\bn_\bt_\bs(size_t N) {\n-73 Vector points(N);\n-74 for (size_t j = 0; j < N; j++) points(j) = Point(N, j);\n-75 return points;\n-76 }\n-77\n-_\b7_\b9 static Vector _\bP_\bo_\bi_\bn_\bt_\bs(size_t N, double a, double b) {\n-80 Vector points = Points(N);\n-81 const double T1 = (a + b) / 2, T2 = (b - a) / 2;\n-82 points = T1 + (T2 * points).array();\n-83 return points;\n-84 }\n-85\n-94 static Weights CalculateWeights(size_t N, double x, double a = -1,\n-95 double b = 1);\n-96\n-101 static Weights DerivativeWeights(size_t N, double x, double a = -1,\n-102 double b = 1);\n-103\n-108 static DiffMatrix DifferentiationMatrix(size_t N, double a = -1,\n-109 double b = 1);\n-110\n-129 static Weights IntegrationWeights(size_t N, double a = -1, double b = 1);\n-130\n-134 template \n-_\b1_\b3_\b5 static Matrix _\bm_\ba_\bt_\br_\bi_\bx(std::function(double)> f,\n-136 size_t N, double a = -1, double b = 1) {\n-137 Matrix Xmat(M, N);\n-138 for (size_t j = 0; j < N; j++) {\n-139 Xmat.col(j) = f(Point(N, j, a, b));\n-140 }\n-141 return Xmat;\n-142 }\n-143}; // \\ Chebyshev2\n-144\n-145} // 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+35 Parameters parameters_;\n+36\n+45 static Weights CalculateWeights(size_t N, double x, double a = -1,\n+46 double b = 1);\n+47\n+66 static Weights DerivativeWeights(size_t N, double x, double a = -1,\n+67 double b = 1);\n+68}; // Chebyshev1Basis\n+69\n+_\b8_\b0struct GTSAM_EXPORT _\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b2_\bB_\ba_\bs_\bi_\bs : _\bB_\ba_\bs_\bi_\bs {\n+81 using Parameters = Eigen::Matrix;\n+82\n+91 static Weights CalculateWeights(size_t N, double x, double a = -1,\n+92 double b = 1);\n+93\n+103 static Weights DerivativeWeights(size_t N, double x, double a = -1,\n+104 double b = 1);\n+105}; // Chebyshev2Basis\n+106\n+107} // namespace gtsam\n _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n Base class and basic functions for Manifold types.\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:_\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:_\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b2\n-Chebyshev Interpolation on Chebyshev points of the second kind Note that N\n-here, the number of points...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Chebyshev2.h:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b2_\b:_\b:_\bP_\bo_\bi_\bn_\bt\n-static double Point(size_t N, int j)\n-Specific Chebyshev point.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Chebyshev2.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b2_\b:_\b:_\bP_\bo_\bi_\bn_\bt\n-static double Point(size_t N, int j, double a, double b)\n-Specific Chebyshev point, within [a,b] interval.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Chebyshev2.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b2_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\bs\n-static Vector Points(size_t N)\n-All Chebyshev points.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Chebyshev2.h:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b2_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\bs\n-static Vector Points(size_t N, double a, double b)\n-All Chebyshev points, within [a,b] interval.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Chebyshev2.h:79\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b2_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx\n-static Matrix matrix(std::function< Eigen::Matrix< double, M, 1 >(double)> f,\n-size_t N, double a=-1, double b=1)\n-Create matrix of values at Chebyshev points given vector-valued function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Chebyshev2.h:135\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b1_\bB_\ba_\bs_\bi_\bs\n+Basis of Chebyshev polynomials of the first kind https://en.wikipedia.org/wiki/\n+Chebyshev_polynomials#...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Chebyshev.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b2_\bB_\ba_\bs_\bi_\bs\n+Basis of Chebyshev polynomials of the second kind.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Chebyshev.h:80\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\bi_\bs\n- * _\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b2_\b._\bh\n+ * _\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b._\bh\n * Generated on Tue Jan 9 2024 05:51: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/BasisFactors.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@@ -96,61 +96,43 @@\n \n \n \n
\n \n-
BasisFactors.h File Reference
\n+
Fourier.h File Reference
\n
\n
\n \n-

Factor definitions for various Basis functors. \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 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...
class  gtsam::FourierBasis
 Fourier basis. More...
 
\n \n \n \n \n

\n Namespaces

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

Detailed Description

\n-

Factor definitions for various Basis functors.

\n-
Author
Varun Agrawal
\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,58 +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-BasisFactors.h File Reference\n-Factor definitions for various Basis functors. _\bM_\bo_\br_\be_\b._\b._\b.\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:_\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+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 *\b**\b**\b**\b**\b* D\bDe\bet\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+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\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_\bF_\ba_\bc_\bt_\bo_\br_\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/a00167.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00167.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,6 +1,3 @@\n var a00167 = [\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::FourierBasis\", \"a02748.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00167_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00167_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/Fourier.h Source File\n \n \n \n \n \n \n \n@@ -98,267 +98,106 @@\n
No Matches
\n \n \n \n \n \n
\n-
BasisFactors.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/basis/Basis.h>
\n-\n+
20#pragma once
\n+
21
\n+
22#include <gtsam/basis/Basis.h>
\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-
\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+
\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-
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+
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
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,312 +1,109 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-BasisFactors.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_\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+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-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-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+_\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-_\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:_\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:_\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\n * _\bb_\ba_\bs_\bi_\bs\n- * _\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\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/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/Chebyshev.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Chebyshev2.h File Reference\n \n \n \n \n \n \n \n@@ -94,36 +94,48 @@\n \n \n \n \n \n

\n \n-
Chebyshev.cpp File Reference
\n+
Chebyshev2.h File Reference
\n
\n
\n \n-

Chebyshev basis decompositions. \n+

Pseudo-spectral parameterization for Chebyshev polynomials of the second kind. \n More...

\n+\n+

Go to the source code of this file.

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

\n+Classes

class  gtsam::Chebyshev2
 Chebyshev Interpolation on Chebyshev points of the second kind Note that N here, the number of points, is one less than N from 'Approximation Theory and Approximation Practice by L. More...
 
\n \n \n \n \n

\n Namespaces

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

Detailed Description

\n-

Chebyshev basis decompositions.

\n+

Pseudo-spectral parameterization for Chebyshev polynomials of the second kind.

\n+

In a pseudo-spectral case, rather than the parameters acting as weights for the bases polynomials (as in Chebyshev2Basis), here the parameters are the values at a specific set of points in the interval, the \"Chebyshev points\". These values uniquely determine the polynomial that interpolates them at the Chebyshev points.

\n+

This is different from Chebyshev.h since it leverage ideas from pseudo-spectral optimization, i.e. we don't decompose into basis functions, rather estimate function values at the Chebyshev points.

\n+

Please refer to Agrawal21icra for more details.

\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,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-Chebyshev.cpp File Reference\n-Chebyshev basis decompositions. _\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+Chebyshev2.h File Reference\n+Pseudo-spectral parameterization for Chebyshev polynomials of the second kind.\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_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b2\n+ Chebyshev Interpolation on Chebyshev points of the second kind Note\n+\u00a0 that N here, the number of points, is one less than N from\n+ 'Approximation Theory and Approximation Practice by L. _\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 basis decompositions.\n+Pseudo-spectral parameterization for Chebyshev polynomials of the second kind.\n+In a pseudo-spectral case, rather than the parameters acting as weights for the\n+bases polynomials (as in Chebyshev2Basis), here the parameters are the v\bva\bal\blu\bue\bes\bs\n+at a specific set of points in the interval, the \"Chebyshev points\". These\n+values uniquely determine the polynomial that interpolates them at the\n+Chebyshev points.\n+This is different from _\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b._\bh since it leverage ideas from pseudo-spectral\n+optimization, i.e. we don't decompose into basis functions, rather estimate\n+function values at the Chebyshev points.\n+Please refer to Agrawal21icra for more details.\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._\bh\n * Generated on Tue Jan 9 2024 05:51: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.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00173.html", "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/FitBasis.h File Reference\n \n \n \n \n \n \n \n@@ -96,82 +96,55 @@\n \n \n \n
\n \n-
Basis.h File Reference
\n+Typedefs
\n+
FitBasis.h File Reference
\n \n
\n \n-

Compute an interpolating basis. \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-\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::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 Typedefs

\n-using gtsam::Weights = Eigen::Matrix< double, 1, -1 >
 
\n-\n-\n-\n-\n-\n+\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+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-

Compute an interpolating basis.

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

Fit a Basis using least-squares.

\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,71 +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 | _\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 | _\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:_\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_\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 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+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-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+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-Compute an interpolating basis.\n- Author\n- Varun Agrawal, Jing Dong, Frank Dellaert\n+Fit a Basis using least-squares.\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- * _\bB_\ba_\bs_\bi_\bs_\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/a00173.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00173.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,11 +1,5 @@\n var a00173 = [\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\", \"a00173.html#ga2ce44d31cae1eda44c2a86d32d92b935\", null]\n+ [\"gtsam::FitBasis< Basis >\", \"a02744.html\", \"a02744\"],\n+ [\"Sample\", \"a00173.html#a9920fe883a2f506440aca7c1a2bd1a00\", null],\n+ [\"Sequence\", \"a00173.html#a24ec5d6ec6b211d0cbaf645c11c198de\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00173_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00173_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/FitBasis.h Source File\n \n \n \n \n \n \n \n@@ -98,473 +98,119 @@\n
No Matches
\n \n \n \n \n \n
\n-
Basis.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-
19#pragma once
\n-
20
\n-
21#include <gtsam/base/Matrix.h>
\n-\n-\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#include <iostream>
\n+
25#pragma once
\n
26
\n-
68namespace gtsam {
\n-
69
\n-
70using Weights = Eigen::Matrix<double, 1, -1>; /* 1xN vector */
\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-
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+\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-
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-
Special class for optional Jacobian arguments.
\n-
typedef and functions to augment Eigen's MatrixXd
\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+
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-
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+
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,554 +1,157 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Basis.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-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+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#include \n+25#pragma once\n 26\n-68namespace _\bg_\bt_\bs_\ba_\bm {\n-69\n-70using Weights = Eigen::Matrix; /* 1xN vector */\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-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+_\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-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-_\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_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\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+_\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:_\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:_\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- * _\bB_\ba_\bs_\bi_\bs_\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/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/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/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/DiscreteDistribution.cpp 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@@ -94,32 +94,61 @@\n \n \n \n \n \n
\n \n-
DiscreteDistribution.cpp File Reference
\n+Classes |\n+Namespaces |\n+Functions
\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+Classes

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+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-
Date
December 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,20 +1,42 @@\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+_\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+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\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+\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- Date\n- December 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_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn_\b._\bc_\bp_\bp\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/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/DiscreteFactorGraph.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,44 +94,45 @@\n \n \n \n \n \n
\n \n-
DiscreteFactorGraph.cpp File Reference
\n+Classes |\n+Namespaces
\n+
DiscreteBayesNet.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::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-\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
Feb 14, 2011
\n+
Date
Feb 15, 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,34 +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-DiscreteFactorGraph.cpp File Reference\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-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- Feb 14, 2011\n+ Feb 15, 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_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\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/a00182.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00182.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a00182 = [\n- [\"EliminateDiscrete\", \"a00182.html#ga6996e9c84467350b071645649231223a\", null],\n- [\"EliminateForMPE\", \"a00182.html#ga9bd0b2859a7513198a369f5de3c8cde3\", null]\n+ [\"gtsam::traits< DiscreteBayesNet >\", \"a02820.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00185.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00185.html", "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/DiscreteKey.h File Reference\n \n \n \n \n \n \n \n@@ -95,42 +95,61 @@\n \n \n \n \n
\n \n-
DiscreteDistribution.h File Reference
\n+Namespaces |\n+Typedefs |\n+Functions
\n+
DiscreteKey.h File Reference
\n \n
\n \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+\n \n

\n Classes

class  gtsam::DiscreteDistribution
 A prior probability on a set of discrete variables. More...
struct  gtsam::DiscreteKeys
 DiscreteKeys is a set of keys that can be assembled using the & operator. More...
 
struct  gtsam::traits< DiscreteDistribution >
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-
Date
December 2021
\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,27 +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-DiscreteDistribution.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+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- 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+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_\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_\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- Date\n- December 2021\n+specialized key for discrete variables\n Author\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_\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_\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/a00185.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00185.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,6 @@\n var a00185 = [\n- [\"gtsam::traits< DiscreteDistribution >\", \"a02844.html\", null]\n+ [\"gtsam::DiscreteKeys\", \"a02876.html\", \"a02876\"],\n+ [\"gtsam::traits< DiscreteKeys >\", \"a02880.html\", null],\n+ [\"DiscreteKey\", \"a00185.html#gad529b58f00471d8f8b25a89b48b7afc2\", null],\n+ [\"operator&\", \"a00185.html#a0be4f243161c2fd937df60aee511eb16\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00185_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00185_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/DiscreteKey.h Source File\n \n \n \n \n \n \n \n@@ -98,105 +98,121 @@\n
No Matches
\n \n \n \n \n \n
\n-
DiscreteDistribution.h
\n+
DiscreteKey.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-
24
\n-
25namespace gtsam {
\n-
26
\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+
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+
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-
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+
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-
\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+
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+
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
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-
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+
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,125 +1,148 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DiscreteDistribution.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 6 * Authors: Frank Dellaert, 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-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-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+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+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-_\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+_\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-_\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+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+_\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 _\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_\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_\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 * _\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_\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/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/DiscreteLookupDAG.cpp 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,34 +94,45 @@\n \n \n \n \n \n
\n \n-
DiscreteLookupDAG.cpp File Reference
\n+Namespaces |\n+Functions
\n+
DiscreteFactor.cpp File Reference
\n \n
\n+\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

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

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,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-DiscreteLookupDAG.cpp File Reference\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 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_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG_\b._\bc_\bp_\bp\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/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/DiscreteBayesNet.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteFactorGraph.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,34 +94,44 @@\n \n \n \n \n \n
\n \n-
DiscreteBayesNet.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
Feb 15, 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,21 +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-DiscreteBayesNet.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- Feb 15, 2011\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_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\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/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/DiscreteValues.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@@ -95,58 +95,42 @@\n \n \n \n \n
\n \n-
DiscreteValues.h File Reference
\n+Namespaces
\n+
DiscreteDistribution.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::DiscreteValues
 A map from keys to values. More...
class  gtsam::DiscreteDistribution
 A prior probability on a set of discrete variables. More...
 
struct  gtsam::traits< DiscreteValues >
struct  gtsam::traits< DiscreteDistribution >
 
\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-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
Dec 13, 2021
\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,43 +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-DiscreteValues.h File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\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_\bV_\ba_\bl_\bu_\be_\bs\n-\u00a0 A map from keys to values. _\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_\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 _\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-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-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\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+ December 2021\n Author\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_\bV_\ba_\bl_\bu_\be_\bs_\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/a00194.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00194.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,6 +1,3 @@\n var a00194 = [\n- [\"gtsam::traits< DiscreteValues >\", \"a02904.html\", null],\n- [\"cartesianProduct\", \"a00194.html#a55a86a4657d82f6ff048a10d058c529f\", null],\n- [\"html\", \"a00194.html#a147114735037c2260d4810a8820e72f6\", null],\n- [\"markdown\", \"a00194.html#a2b6707b04064df79d26d1016dfa2a013\", null]\n+ [\"gtsam::traits< DiscreteDistribution >\", \"a02844.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00194_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00194_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/DiscreteDistribution.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-
DiscreteValues.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@@ -114,120 +114,89 @@\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-
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+\n+
21
\n+
22#include <string>
\n+
23#include <vector>
\n+
24
\n+
25namespace gtsam {
\n+
26
\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-
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+
69 DiscreteDistribution(const DiscreteKey& key, const std::string& spec)
\n+
70 : DiscreteDistribution(Signature(key, {}, spec)) {}
\n+
\n
71
\n-
74 DiscreteValues& insert(const DiscreteValues& values);
\n
75
\n-
79 DiscreteValues& update(const DiscreteValues& values);
\n+
77 void print(
\n+
78 const std::string& s = "Discrete Prior: ",
\n+
79 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
\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-
specialized key for discrete variables
\n-
An assignment from labels to a discrete value index (size_t)
\n-\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-
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+
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,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DiscreteValues.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@@ -16,153 +16,110 @@\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-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+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_\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+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-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+_\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-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+77 void print(\n+78 const std::string& s = \"Discrete Prior: \",\n+79 const KeyFormatter& formatter = DefaultKeyFormatter) const override;\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-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh\n-specialized key for discrete variables\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-_\bK_\be_\by_\b._\bh\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:_\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_\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_\bV_\ba_\bl_\bu_\be_\bs_\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/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/DecisionTreeFactor.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteJunctionTree.cpp File Reference\n \n \n \n \n \n \n \n@@ -95,37 +95,33 @@\n \n \n \n \n
\n \n-
DecisionTreeFactor.cpp File Reference
\n+
DiscreteJunctionTree.cpp File Reference
\n
\n
\n-\n-

discrete factor \n-More...

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

\n Namespaces

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

Detailed Description

\n-

discrete factor

\n-
Date
Feb 14, 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,23 +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-DecisionTreeFactor.cpp File Reference\n-discrete factor _\bM_\bo_\br_\be_\b._\b._\b.\n+DiscreteJunctionTree.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-discrete factor\n Date\n- Feb 14, 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_\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_\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/a00200_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00200_source.html", "has_internal_linenos": true, "unified_diff": "@@ -25,12888 +25,3140 @@\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 3230 305f 736f vTree('a00200_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+00000290: 7363 7269 7074 2074 7970 653d 2274 6578 script type=\"tex\n+000002a0: 742f 6a61 7661 7363 7269 7074 2220 7372 t/javascript\" sr\n+000002b0: 633d 2264 796e 7365 6374 696f 6e73 2e6a c=\"dynsections.j\n+000002c0: 7322 3e3c 2f73 6372 6970 743e 0a3c 6c69 s\">....\n+00000380: 3c73 6372 6970 7420 7479 7065 3d22 7465 ...\n+00000440: 3c73 6372 6970 7420 7479 7065 3d22 7465 .\n+00000480: 3c73 6372 6970 7420 7479 7065 3d22 7465 .<\n+00000510: 7363 7269 7074 2074 7970 653d 2274 6578 script type=\"tex\n+00000520: 742f 6a61 7661 7363 7269 7074 2220 6173 t/javascript\" as\n+00000530: 796e 633d 2261 7379 6e63 2220 7372 633d ync=\"async\" src=\n+00000540: 2266 696c 653a 2f2f 2f75 7372 2f73 6861 \"file:///usr/sha\n+00000550: 7265 2f6a 6176 6173 6372 6970 742f 6d61 re/javascript/ma\n+00000560: 7468 6a61 782f 4d61 7468 4a61 782e 6a73 thjax/MathJax.js\n+00000570: 3f63 6f6e 6669 673d 5465 582d 4d4d 4c2d ?config=TeX-MML-\n+00000580: 414d 5f43 4854 4d4c 223e 3c2f 7363 7269 AM_CHTML\">.\n+000005d0: 0a3c 2f68 6561 643e 0a3c 626f 6479 3e0a ...\n+000005e0: 3c64 6976 2069 643d 2274 6f70 223e 3c21
.
.. . <\n+00000670: 7472 2069 643d 2270 726f 6a65 6374 726f tr id=\"projectro\n+00000680: 7722 3e0a 2020 3c74 6420 6964 3d22 7072 w\">. . \n+000006a0: 3c64 6976 2069 643d 2270 726f 6a65 6374
gtsam 4.2.0<\n+000006e0: 2f73 7061 6e3e 0a20 2020 3c2f 6469 763e /span>.
\n+000006f0: 0a20 2020 3c64 6976 2069 643d 2270 726f .
gtsam\n+00000710: 3c2f 6469 763e 0a20 203c 2f74 643e 0a20
. . \n+00000720: 3c2f 7472 3e0a 203c 2f74 626f 6479 3e0a . .\n+00000730: 3c2f 7461 626c 653e 0a3c 2f64 6976 3e0a .
.\n+00000740: 3c21 2d2d 2065 6e64 2068 6561 6465 7220 .../* \n+000007a0: 406c 6963 656e 7365 206d 6167 6e65 743a @license magnet:\n+000007b0: 3f78 743d 7572 6e3a 6274 6968 3a64 3364 ?xt=urn:btih:d3d\n+000007c0: 3961 3961 3635 3935 3532 3166 3936 3636 9a9a6595521f9666\n+000007d0: 6135 6539 3463 6338 3330 6461 6238 3362 a5e94cc830dab83b\n+000007e0: 3635 3639 3926 616d 703b 646e 3d65 7870 65699&dn=exp\n+000007f0: 6174 2e74 7874 204d 4954 202a 2f0a 7661 at.txt MIT */.va\n+00000800: 7220 7365 6172 6368 426f 7820 3d20 6e65 r searchBox = ne\n+00000810: 7720 5365 6172 6368 426f 7828 2273 6561 w SearchBox(\"sea\n+00000820: 7263 6842 6f78 222c 2022 7365 6172 6368 rchBox\", \"search\n+00000830: 2f22 2c27 2e68 746d 6c27 293b 0a2f 2a20 /\",'.html');./* \n+00000840: 406c 6963 656e 7365 2d65 6e64 202a 2f0a @license-end */.\n+00000850: 3c2f 7363 7269 7074 3e0a 3c73 6372 6970 ..../* @\n+000008f0: 6c69 6365 6e73 6520 6d61 676e 6574 3a3f license magnet:?\n+00000900: 7874 3d75 726e 3a62 7469 683a 6433 6439 xt=urn:btih:d3d9\n+00000910: 6139 6136 3539 3535 3231 6639 3636 3661 a9a6595521f9666a\n+00000920: 3565 3934 6363 3833 3064 6162 3833 6236 5e94cc830dab83b6\n+00000930: 3536 3939 2661 6d70 3b64 6e3d 6578 7061 5699&dn=expa\n+00000940: 742e 7478 7420 4d49 5420 2a2f 0a24 2866 t.txt MIT */.$(f\n+00000950: 756e 6374 696f 6e28 2920 7b0a 2020 696e unction() {. in\n+00000960: 6974 4d65 6e75 2827 272c 7472 7565 2c66 itMenu('',true,f\n+00000970: 616c 7365 2c27 7365 6172 6368 2e70 6870 alse,'search.php\n+00000980: 272c 2753 6561 7263 6827 293b 0a20 2024 ','Search');. $\n+00000990: 2864 6f63 756d 656e 7429 2e72 6561 6479 (document).ready\n+000009a0: 2866 756e 6374 696f 6e28 2920 7b20 696e (function() { in\n+000009b0: 6974 5f73 6561 7263 6828 293b 207d 293b it_search(); });\n+000009c0: 0a7d 293b 0a2f 2a20 406c 6963 656e 7365 .});./* @license\n+000009d0: 2d65 6e64 202a 2f0a 3c2f 7363 7269 7074 -end */..
../* @\n+00000a20: 6c69 6365 6e73 6520 6d61 676e 6574 3a3f license magnet:?\n+00000a30: 7874 3d75 726e 3a62 7469 683a 6433 6439 xt=urn:btih:d3d9\n+00000a40: 6139 6136 3539 3535 3231 6639 3636 3661 a9a6595521f9666a\n+00000a50: 3565 3934 6363 3833 3064 6162 3833 6236 5e94cc830dab83b6\n+00000a60: 3536 3939 2661 6d70 3b64 6e3d 6578 7061 5699&dn=expa\n+00000a70: 742e 7478 7420 4d49 5420 2a2f 0a24 2864 t.txt MIT */.$(d\n+00000a80: 6f63 756d 656e 7429 2e72 6561 6479 2866 ocument).ready(f\n+00000a90: 756e 6374 696f 6e28 2920 7b20 696e 6974 unction() { init\n+00000aa0: 5f63 6f64 6566 6f6c 6428 3029 3b20 7d29 _codefold(0); })\n+00000ab0: 3b0a 2f2a 2040 6c69 6365 6e73 652d 656e ;./* @license-en\n+00000ac0: 6420 2a2f 0a3c 2f73 6372 6970 743e 0a3c d */..<\n+00000ad0: 2f64 6976 3e3c 212d 2d20 746f 7020 2d2d /div>.
.
...
.
.
.
.
<\n+00000ec0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
Loading\n+00000ef0: 2e2e 2e3c 2f64 6976 3e0a 3c64 6976 2063 ...
.
S\n+00000f20: 6561 7263 6869 6e67 2e2e 2e3c 2f64 6976 earching....
No Matche\n+00000f60: 733c 2f64 6976 3e0a 3c2f 6469 763e 0a3c s
.
.<\n+00000f70: 2f64 6976 3e0a 3c2f 6469 763e 0a3c 2f64 /div>.
...
.
Discrete\n+00000fd0: 4661 6374 6f72 4772 6170 682e 683c 2f64 FactorGraph.h
.
\n+00000ff0: 3c21 2d2d 6865 6164 6572 2d2d 3e0a 3c64 ..Go to\n+00001030: 2074 6865 2064 6f63 756d 656e 7461 7469 the documentati\n+00001040: 6f6e 206f 6620 7468 6973 2066 696c 652e on of this file.\n+00001050: 3c2f 613e 3c64 6976 2063 6c61 7373 3d22
1/* ---------\n+000010e0: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------\n+000010f0: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------\n+00001100: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------\n+00001110: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------\n+00001120: 2d2d 2d3c 2f73 7061 6e3e 3c2f 6469 763e ---
\n+00001130: 0a3c 6469 7620 636c 6173 733d 226c 696e ..
3 * GTSAM Cop\n+00001220: 7972 6967 6874 2032 3031 302c 2047 656f yright 2010, Geo\n+00001230: 7267 6961 2054 6563 6820 5265 7365 6172 rgia Tech Resear\n+00001240: 6368 2043 6f72 706f 7261 7469 6f6e 2c3c ch Corporation,<\n+00001250: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
.<\n+00001270: 6120 6964 3d22 6c30 3030 3034 2220 6e61 a id=\"l00004\" na\n+00001280: 6d65 3d22 6c30 3030 3034 223e 3c2f 613e me=\"l00004\">\n+00001290: 3c73 7061 6e20 636c 6173 733d 226c 696e 4 * Atlant\n+000012d0: 612c 2047 656f 7267 6961 2033 3033 3332 a, Georgia 30332\n+000012e0: 2d30 3431 353c 2f73 7061 6e3e 3c2f 6469 -0415.
5\n+00001340: 3c2f 7370 616e 3e3c 7370 616e 2063 6c61 * \n+00001360: 416c 6c20 5269 6768 7473 2052 6573 6572 All Rights Reser\n+00001370: 7665 643c 2f73 7061 6e3e 3c2f 6469 763e ved
\n+00001380: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n+000013b0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 6 * Au\n+000013f0: 7468 6f72 733a 2046 7261 6e6b 2044 656c thors: Frank Del\n+00001400: 6c61 6572 742c 2065 7420 616c 2e20 2873 laert, et al. (s\n+00001410: 6565 2054 4841 4e4b 5320 666f 7220 7468 ee THANKS for th\n+00001420: 6520 6675 6c6c 2061 7574 686f 7220 6c69 e full author li\n+00001430: 7374 293c 2f73 7061 6e3e 3c2f 6469 763e st)
\n+00001440: 0a3c 6469 7620 636c 6173 733d 226c 696e ..
8 * See LICEN\n+00001530: 5345 2066 6f72 2074 6865 206c 6963 656e SE for the licen\n+00001540: 7365 2069 6e66 6f72 6d61 7469 6f6e 3c2f se information
.<\n+00001590: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+000015a0: 6e6f 223e 2020 2020 393c 2f73 7061 6e3e no\"> 9
\n+000015b0: 3c73 7061 6e20 636c 6173 733d 2263 6f6d .
\n+00001620: 3130 3c2f 7370 616e 3e3c 7370 616e 2063 10 \n+00001640: 2a20 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d * --------------\n+00001650: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------\n+00001660: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------\n+00001670: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------\n+00001680: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 202a 2f3c ------------ */<\n+00001690: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
.<\n+000016b0: 6120 6964 3d22 6c30 3030 3131 2220 6e61 a id=\"l00011\" na\n+000016c0: 6d65 3d22 6c30 3030 3131 223e 3c2f 613e me=\"l00011\">\n+000016d0: 3c73 7061 6e20 636c 6173 733d 226c 696e 11
.
19#pragma \n+00001770: 6f6e 6365 3c2f 7370 616e 3e3c 2f64 6976 once.
20<\n+000017d0: 2f73 7061 6e3e 203c 2f64 6976 3e0a 3c64 /span>
.\n+000017f0: 3c61 2069 643d 226c 3030 3032 3122 206e 21#in\n+00001850: 636c 7564 6520 266c 743b 3c61 2063 6c61 clude <gts\n+00001880: 616d 2f64 6973 6372 6574 652f 4465 6369 am/discrete/Deci\n+00001890: 7369 6f6e 5472 6565 4661 6374 6f72 2e68 sionTreeFactor.h\n+000018a0: 3c2f 613e 2667 743b 3c2f 7370 616e 3e3c ><\n+000018b0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n+00001900: 2032 323c 2f73 7061 6e3e 3c73 7061 6e20 22#include &l\n+00001930: 743b 3c61 2063 6c61 7373 3d22 636f 6465 t;gtsam/discr\n+00001960: 6574 652f 4469 7363 7265 7465 4c6f 6f6b ete/DiscreteLook\n+00001970: 7570 4441 472e 683c 2f61 3e26 6774 3b3c upDAG.h><\n+00001980: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
.<\n+000019a0: 6120 6964 3d22 6c30 3030 3233 2220 6e61 a id=\"l00023\" na\n+000019b0: 6d65 3d22 6c30 3030 3233 223e 3c2f 613e me=\"l00023\">\n+000019c0: 3c73 7061 6e20 636c 6173 733d 226c 696e 23#inc\n+00001a00: 6c75 6465 2026 6c74 3b3c 6120 636c 6173 lude <gtsa\n+00001a30: 6d2f 696e 6665 7265 6e63 652f 456c 696d m/inference/Elim\n+00001a40: 696e 6174 6561 626c 6546 6163 746f 7247 inateableFactorG\n+00001a50: 7261 7068 2e68 3c2f 613e 2667 743b 3c2f raph.h>
.<\n+00001aa0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n+00001ab0: 6e6f 223e 2020 2032 343c 2f73 7061 6e3e no\"> 24\n+00001ac0: 3c73 7061 6e20 636c 6173 733d 2270 7265 #incl\n+00001ae0: 7564 6520 266c 743b 3c61 2063 6c61 7373 ude <gtsam\n+00001b10: 2f69 6e66 6572 656e 6365 2f46 6163 746f /inference/Facto\n+00001b20: 7247 7261 7068 2e68 3c2f 613e 2667 743b rGraph.h>\n+00001b30: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
.\n+00001b50: 3c61 2069 643d 226c 3030 3032 3522 206e 25#in\n+00001bb0: 636c 7564 6520 266c 743b 3c61 2063 6c61 clude <gts\n+00001be0: 616d 2f69 6e66 6572 656e 6365 2f4f 7264 am/inference/Ord\n+00001bf0: 6572 696e 672e 683c 2f61 3e26 6774 3b3c ering.h><\n+00001c00: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
.<\n+00001c20: 6120 6964 3d22 6c30 3030 3236 2220 6e61 a id=\"l00026\" na\n+00001c30: 6d65 3d22 6c30 3030 3236 223e 3c2f 613e me=\"l00026\">\n+00001c40: 3c73 7061 6e20 636c 6173 733d 226c 696e 26#inc\n+00001c80: 6c75 6465 2026 6c74 3b3c 6120 636c 6173 lude <gtsa\n+00001cb0: 6d2f 6261 7365 2f46 6173 7453 6574 2e68 m/base/FastSet.h\n+00001cc0: 3c2f 613e 2667 743b 3c2f 7370 616e 3e3c ><\n+00001cd0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n+00001d20: 2032 373c 2f73 7061 6e3e 203c 2f64 6976 27 .
28<\n+00001d80: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span>#include <bo\n+00001db0: 6f73 742f 6d61 6b65 5f73 6861 7265 642e ost/make_shared.\n+00001dc0: 6870 7026 6774 3b3c 2f73 7061 6e3e 3c2f hpp>.
\n+00001e20: 3239 3c2f 7370 616e 3e3c 7370 616e 2063 29#include <\n+00001e50: 3b73 7472 696e 6726 6774 3b3c 2f73 7061 ;string>
.
30#include\n+00001ee0: 2026 6c74 3b75 7469 6c69 7479 2667 743b <utility>\n+00001ef0: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
.\n+00001f10: 3c61 2069 643d 226c 3030 3033 3122 206e 31#in\n+00001f70: 636c 7564 6520 266c 743b 7665 6374 6f72 clude <vector\n+00001f80: 2667 743b 3c2f 7370 616e 3e3c 2f64 6976 >.
32<\n+00001fe0: 2f73 7061 6e3e 203c 2f64 6976 3e0a 3c64 /span>
.\n+00002000: 3c61 2069 643d 226c 3030 3033 3322 206e 33namespac\n+00002060: 6520 3c2f 7370 616e 3e3c 6120 636c 6173 e gtsam {
.
34 \n+00002100: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n+00002150: 2020 3335 3c2f 7370 616e 3e3c 7370 616e 35// Forward decl\n+00002180: 6172 6174 696f 6e73 3c2f 7370 616e 3e3c arations<\n+00002190: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n+000021e0: 2033 363c 2f73 7061 6e3e 3c73 7061 6e20 36\n+00002200: 636c 6173 7320 3c2f 7370 616e 3e44 6973 class Dis\n+00002210: 6372 6574 6546 6163 746f 7247 7261 7068 creteFactorGraph\n+00002220: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n+00002270: 2020 2033 373c 2f73 7061 6e3e 3c73 7061 37class D\n+000022a0: 6973 6372 6574 6543 6f6e 6469 7469 6f6e iscreteCondition\n+000022b0: 616c 3b3c 2f64 6976 3e0a 3c64 6976 2063 al;
.
38class DiscreteBayesNe\n+00002340: 743b 3c2f 6469 763e 0a3c 6469 7620 636c t;
.
39class \n+000023c0: 4469 7363 7265 7465 456c 696d 696e 6174 DiscreteEliminat\n+000023d0: 696f 6e54 7265 653b 3c2f 6469 763e 0a3c ionTree;
.<\n+000023e0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+000023f0: 3e3c 6120 6964 3d22 6c30 3030 3430 2220 > 40class <\n+00002450: 2f73 7061 6e3e 4469 7363 7265 7465 4261 /span>DiscreteBa\n+00002460: 7965 7354 7265 653b 3c2f 6469 763e 0a3c yesTree;
.<\n+00002470: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+00002480: 3e3c 6120 6964 3d22 6c30 3030 3431 2220 > 41class <\n+000024e0: 2f73 7061 6e3e 4469 7363 7265 7465 4a75 /span>DiscreteJu\n+000024f0: 6e63 7469 6f6e 5472 6565 3b3c 2f64 6976 nctionTree;.
42<\n+00002550: 2f73 7061 6e3e 203c 2f64 6976 3e0a 3c64 /span>
.\n+00002570: 3c61 2069 643d 226c 3030 3035 3122 206e 51GTSAM_EXPORT.
\n+00002610: 3532 3c2f 7370 616e 3e73 7464 3a3a 7061 52std::pa\n+00002620: 6972 266c 743b 4469 7363 7265 7465 436f ir<DiscreteCo\n+00002630: 6e64 6974 696f 6e61 6c3a 3a73 6861 7265 nditional::share\n+00002640: 645f 7074 722c 2044 6563 6973 696f 6e54 d_ptr, DecisionT\n+00002650: 7265 6546 6163 746f 723a 3a73 6861 7265 reeFactor::share\n+00002660: 645f 7074 7226 6774 3b3c 2f64 6976 3e0a d_ptr>
.\n+00002670: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n+000026a0: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 53EliminateD\n+00002720: 6973 6372 6574 653c 2f61 3e28 3c73 7061 iscrete(const D\n+00002750: 6973 6372 6574 6546 6163 746f 7247 7261 iscreteFactorGra\n+00002760: 7068 2661 6d70 3b20 6661 6374 6f72 732c ph& factors,\n+00002770: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n+000027c0: 2020 3534 3c2f 7370 616e 3e20 2020 2020 54 \n+000027d0: 2020 2020 2020 2020 2020 2020 203c 7370 const \n+00002800: 4f72 6465 7269 6e67 2661 6d70 3b20 6672 Ordering& fr\n+00002810: 6f6e 7461 6c4b 6579 7329 3b3c 2f64 6976 ontalKeys);.
55<\n+00002870: 2f73 7061 6e3e 203c 2f64 6976 3e0a 3c64 /span>
.\n+00002890: 3c61 2069 643d 226c 3030 3036 3422 206e 64GTSAM_EXPORT.
\n+00002930: 3635 3c2f 7370 616e 3e73 7464 3a3a 7061 65std::pa\n+00002940: 6972 266c 743b 4469 7363 7265 7465 436f ir<DiscreteCo\n+00002950: 6e64 6974 696f 6e61 6c3a 3a73 6861 7265 nditional::share\n+00002960: 645f 7074 722c 2044 6563 6973 696f 6e54 d_ptr, DecisionT\n+00002970: 7265 6546 6163 746f 723a 3a73 6861 7265 reeFactor::share\n+00002980: 645f 7074 7226 6774 3b3c 2f64 6976 3e0a d_ptr>
.\n+00002990: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n+000029c0: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 66EliminateF\n+00002a40: 6f72 4d50 453c 2f61 3e28 3c73 7061 6e20 orMPE(\n+00002a60: 636f 6e73 743c 2f73 7061 6e3e 2044 6973 const Dis\n+00002a70: 6372 6574 6546 6163 746f 7247 7261 7068 creteFactorGraph\n+00002a80: 2661 6d70 3b20 6661 6374 6f72 732c 3c2f & factors,.
\n+00002ae0: 3637 3c2f 7370 616e 3e20 2020 2020 2020 67 \n+00002af0: 2020 2020 2020 2020 203c 7370 616e 2063 c\n+00002b10: 6f6e 7374 3c2f 7370 616e 3e20 4f72 6465 onst Orde\n+00002b20: 7269 6e67 2661 6d70 3b20 6672 6f6e 7461 ring& fronta\n+00002b30: 6c4b 6579 7329 3b3c 2f64 6976 3e0a 3c64 lKeys);
.\n+00002b50: 3c61 2069 643d 226c 3030 3036 3822 206e 68
.
\n+00002be0: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n+00002c10: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 6\n+00002c50: 393c 2f61 3e3c 2f73 7061 6e3e 3c73 7061 9template<> \n+00002ca0: 7374 7275 6374 203c 2f73 7061 6e3e 3c61 struct Elimi\n+00002ce0: 6e61 7469 6f6e 5472 6169 7473 3c2f 613e nationTraits\n+00002cf0: 266c 743b 3c61 2063 6c61 7373 3d22 636f <\n+00002d20: 4469 7363 7265 7465 4661 6374 6f72 4772 DiscreteFactorGr\n+00002d30: 6170 683c 2f61 3e26 6774 3b3c 2f64 6976 aph>.
70<\n+00002d90: 2f73 7061 6e3e 7b3c 2f64 6976 3e0a 3c64 /span>{
.\n+00002db0: 3c61 2069 643d 226c 3030 3037 3122 206e 71\n+00002e30: 3c2f 613e 3c2f 7370 616e 3e20 203c 7370 typedef Di\n+00002e90: 7363 7265 7465 4661 6374 6f72 3c2f 613e screteFactor\n+00002ea0: 203c 6120 636c 6173 733d 2263 6f64 6520 FactorType;\n+00002f00: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00002f10: 2020 203c 2f64 6976 3e0a 3c64 6976 2063
.
72\n+00002fb0: 3c2f 7370 616e 3e20 203c 7370 616e 2063 t\n+00002fd0: 7970 6564 6566 3c2f 7370 616e 3e20 3c61 ypedef Discre\n+00003010: 7465 4661 6374 6f72 4772 6170 683c 2f61 teFactorGraph FactorGraphTyp\n+00003080: 653c 2f61 3e3b 2020 2020 2020 2020 203c e; <\n+00003090: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
73 typed\n+00003150: 6566 3c2f 7370 616e 3e20 3c61 2063 6c61 ef DiscreteCo\n+00003190: 6e64 6974 696f 6e61 6c3c 2f61 3e20 3c61 nditional Co\n+000031f0: 6e64 6974 696f 6e61 6c54 7970 653c 2f61 nditionalType; ..\n+000033a0: 3c61 2069 643d 226c 3030 3037 3522 206e 75\n+00003420: 3c2f 613e 3c2f 7370 616e 3e20 203c 7370 typedef Di\n+00003480: 7363 7265 7465 456c 696d 696e 6174 696f screteEliminatio\n+00003490: 6e54 7265 653c 2f61 3e20 3c61 2063 6c61 nTree Elimin\n+000034f0: 6174 696f 6e54 7265 6554 7970 653c 2f61 ationTreeType;
.
76\n+000035a0: 3c2f 7370 616e 3e20 203c 7370 616e 2063 t\n+000035c0: 7970 6564 6566 3c2f 7370 616e 3e20 3c61 ypedef Discre\n+00003600: 7465 4261 7965 7354 7265 653c 2f61 3e20 teBayesTree \n+00003610: 3c61 2063 6c61 7373 3d22 636f 6465 2068 \n+00003660: 4261 7965 7354 7265 6554 7970 653c 2f61 BayesTreeType; <\n+00003680: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
77 typed\n+00003740: 6566 3c2f 7370 616e 3e20 3c61 2063 6c61 ef DiscreteJu\n+00003780: 6e63 7469 6f6e 5472 6565 3c2f 613e 203c nctionTree <\n+00003790: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n+000037a0: 5f74 7970 6564 6566 2220 6872 6566 3d22 _typedef\" href=\"\n+000037b0: 6130 3238 3630 2e68 746d 6c23 6133 3130 a02860.html#a310\n+000037c0: 3563 6436 3531 3264 3136 3734 6436 6434 5cd6512d1674d6d4\n+000037d0: 3333 3033 3463 3837 6234 6530 6322 3e4a 33034c87b4e0c\">J\n+000037e0: 756e 6374 696f 6e54 7265 6554 7970 653c unctionTreeType<\n+000037f0: 2f61 3e3b 2020 2020 2020 203c 2f64 6976 /a>; .
78<\n+00003850: 2f73 7061 6e3e 2020 3c2f 6469 763e 0a3c /span>
.<\n+00003860: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+00003870: 3e3c 6120 6964 3d22 6c30 3030 3830 2220 > 80 stati\n+000038d0: 633c 2f73 7061 6e3e 2073 7464 3a3a 7061 c std::pa\n+000038e0: 6972 266c 743b 626f 6f73 743a 3a73 6861 ir<boost::sha\n+000038f0: 7265 645f 7074 7226 6c74 3b43 6f6e 6469 red_ptr<Condi\n+00003900: 7469 6f6e 616c 5479 7065 2667 743b 2c3c tionalType>,<\n+00003910: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n+00003960: 2038 313c 2f73 7061 6e3e 2020 2020 2020 81 \n+00003970: 2020 2020 2020 2020 2020 2020 2062 6f6f boo\n+00003980: 7374 3a3a 7368 6172 6564 5f70 7472 266c st::shared_ptr&l\n+00003990: 743b 4661 6374 6f72 5479 7065 2667 743b t;FactorType>\n+000039a0: 2026 6774 3b3c 2f64 6976 3e0a 3c64 6976 >
..
\n+00003a80: 2020 3832 3c2f 613e 3c2f 7370 616e 3e20 82 \n+00003a90: 203c 6120 636c 6173 733d 2263 6f64 6520 DefaultElimina\n+00003af0: 7465 3c2f 613e 283c 7370 616e 2063 6c61 te(con\n+00003b10: 7374 3c2f 7370 616e 3e20 3c61 2063 6c61 st FactorGrap\n+00003b50: 6854 7970 653c 2f61 3e26 616d 703b 2066 hType& f\n+00003b60: 6163 746f 7273 2c20 3c73 7061 6e20 636c actors, co\n+00003b80: 6e73 743c 2f73 7061 6e3e 203c 6120 636c nst Ordering<\n+00003bc0: 2f61 3e26 616d 703b 206b 6579 7329 207b /a>& keys) {\n+00003bd0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n+00003c20: 2020 3833 3c2f 7370 616e 3e20 2020 203c 83 <\n+00003c30: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+00003c40: 6f72 6466 6c6f 7722 3e72 6574 7572 6e3c ordflow\">return<\n+00003c50: 2f73 7061 6e3e 203c 6120 636c 6173 733d /span> Elimina\n+00003cb0: 7465 4469 7363 7265 7465 3c2f 613e 2866 teDiscrete(f\n+00003cc0: 6163 746f 7273 2c20 6b65 7973 293b 3c2f actors, keys);.
\n+00003d20: 3834 3c2f 7370 616e 3e20 207d 3c2f 6469 84 }.
.
85 \n+00003d90: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
.<\n+00003df0: 6120 6964 3d22 6c30 3030 3837 2220 6e61 a id=\"l00087\" na\n+00003e00: 6d65 3d22 6c30 3030 3837 223e 3c2f 613e me=\"l00087\">\n+00003e10: 3c73 7061 6e20 636c 6173 733d 226c 696e 87<\n+00003e70: 2f61 3e3c 2f73 7061 6e3e 2020 3c73 7061 /a> static \n+00003ea0: 3c61 2063 6c61 7373 3d22 636f 6465 2068 Orde\n+00003ed0: 7269 6e67 3c2f 613e 203c 6120 636c 6173 ring Defaul\n+00003f30: 744f 7264 6572 696e 6746 756e 633c 2f61 tOrderingFunc(
.
88 \n+00003fa0: 2020 203c 7370 616e 2063 6c61 7373 3d22 const FactorGraphTyp\n+00004000: 653c 2f61 3e26 616d 703b 2067 7261 7068 e& graph\n+00004010: 2c3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ,
.
\n+00004060: 2020 2038 393c 2f73 7061 6e3e 2020 2020 89 \n+00004070: 2020 626f 6f73 743a 3a6f 7074 696f 6e61 boost::optiona\n+00004080: 6c26 6c74 3b63 6f6e 7374 2056 6172 6961 l<const Varia\n+00004090: 626c 6549 6e64 6578 2661 6d70 3b26 6774 bleIndex&>\n+000040a0: 3b20 7661 7269 6162 6c65 496e 6465 7829 ; variableIndex)\n+000040b0: 207b 3c2f 6469 763e 0a3c 6469 7620 636c {
.
90 \n+00004110: 203c 7370 616e 2063 6c61 7373 3d22 6b65 retur\n+00004130: 6e3c 2f73 7061 6e3e 203c 6120 636c 6173 n Orderi\n+00004190: 6e67 3a3a 436f 6c61 6d64 3c2f 613e 282a ng::Colamd(*\n+000041a0: 7661 7269 6162 6c65 496e 6465 7829 3b3c variableIndex);<\n+000041b0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n+00004200: 2039 313c 2f73 7061 6e3e 2020 7d3c 2f64 91 }.
.
92}\n+00004270: 3b3c 2f64 6976 3e0a 3c2f 6469 763e 0a3c ;
.
.<\n+00004280: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+00004290: 3e3c 6120 6964 3d22 6c30 3030 3933 2220 > 93
.
.
\n+00004390: 3939 3c2f 613e 3c2f 7370 616e 3e3c 7370 99class \n+000043c0: 4754 5341 4d5f 4558 504f 5254 203c 6120 GTSAM_EXPORT Discret\n+00004400: 6546 6163 746f 7247 7261 7068 3c2f 613e eFactorGraph\n+00004410: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n+00004460: 2031 3030 3c2f 7370 616e 3e20 2020 203a 100 :\n+00004470: 203c 7370 616e 2063 6c61 7373 3d22 6b65 public FactorGraph\n+000044d0: 266c 743b 4469 7363 7265 7465 4661 6374 <DiscreteFact\n+000044e0: 6f72 2667 743b 2c3c 2f64 6976 3e0a 3c64 or>,
.\n+00004500: 3c61 2069 643d 226c 3030 3130 3122 206e 101 pu\n+00004560: 626c 6963 3c2f 7370 616e 3e20 3c61 2063 blic Eliminat\n+000045a0: 6561 626c 6546 6163 746f 7247 7261 7068 eableFactorGraph\n+000045b0: 3c2f 613e 266c 743b 4469 7363 7265 7465 <Discrete\n+000045c0: 4661 6374 6f72 4772 6170 6826 6774 3b20 FactorGraph> \n+000045d0: 7b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 {
.
\n+00004620: 2020 3130 323c 2f73 7061 6e3e 203c 7370 102 public\n+00004650: 3a3c 2f64 6976 3e0a 3c64 6976 2063 6c61 :
.
\n+000046a0: 3c61 2063 6c61 7373 3d22 6c69 6e65 2220 103 usi\n+00004710: 6e67 203c 2f73 7061 6e3e 3c61 2063 6c61 ng This =\n+00004750: 203c 6120 636c 6173 733d 2263 6f64 6520 Dis\n+00004780: 6372 6574 6546 6163 746f 7247 7261 7068 creteFactorGraph\n+00004790: 3c2f 613e 3b20 2020 2020 2020 2020 203c ; <\n+000047a0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
104 using\n+00004860: 203c 2f73 7061 6e3e 3c61 2063 6c61 7373 Base = <\n+000048a0: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n+000048b0: 5f63 6c61 7373 2220 6872 6566 3d22 6130 _class\" href=\"a0\n+000048c0: 3335 3234 2e68 746d 6c22 3e46 6163 746f 3524.html\">Facto\n+000048d0: 7247 7261 7068 266c 743b 4469 7363 7265 rGraph<Discre\n+000048e0: 7465 4661 6374 6f72 2667 743b 3c2f 613e teFactor>\n+000048f0: 3b20 203c 2f64 6976 3e0a 3c64 6976 2063 ;
.
105\n+00004990: 3c2f 7370 616e 3e20 203c 7370 616e 2063 u\n+000049b0: 7369 6e67 203c 2f73 7061 6e3e 3c61 2063 sing Base\n+00004a10: 456c 696d 696e 6174 6561 626c 653c 2f61 Eliminateable =
..
107\n+00004b80: 3c2f 7370 616e 3e20 203c 7370 616e 2063 u\n+00004ba0: 7369 6e67 203c 2f73 7061 6e3e 3c61 2063 sing shar\n+00004c00: 6564 5f70 7472 3c2f 613e 203d 2062 6f6f ed_ptr = boo\n+00004c10: 7374 3a3a 7368 6172 6564 5f70 7472 266c st::shared_ptr&l\n+00004c20: 743b 5468 6973 2667 743b 3b20 203c 2f64 t;This>; .
10\n+00004c80: 383c 2f73 7061 6e3e 203c 2f64 6976 3e0a 8
.\n+00004c90: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n+00004cc0: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 1\n+00004d20: 3039 3c2f 613e 3c2f 7370 616e 3e20 203c 09 <\n+00004d30: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n+00004d40: 6f72 6422 3e75 7369 6e67 203c 2f73 7061 ord\">using Va\n+00004d80: 6c75 6573 3c2f 613e 203d 203c 6120 636c lues = DiscreteV\n+00004dc0: 616c 7565 733c 2f61 3e3b 2020 3c2f 6469 alues; .
110\n+00004e20: 3c2f 7370 616e 3e20 3c2f 6469 763e 0a3c
.<\n+00004e30: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n+00004e40: 3e3c 6120 6964 3d22 6c30 3031 3131 2220 > 111 using\n+00004ea0: 203c 2f73 7061 6e3e 496e 6469 6365 7320 Indices \n+00004eb0: 3d20 3c61 2063 6c61 7373 3d22 636f 6465 = KeyVector;\n+00004f10: 2020 3c2f 6469 763e 0a3c 6469 7620 636c
.
112 .
114 DiscreteFac\n+00005070: 746f 7247 7261 7068 3c2f 613e 2829 207b torGraph() {\n+00005080: 7d3c 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+0000c350: 0a3c 6469 7620 6964 3d22 6e61 762d 7061 .
\n+0000c3a0: 0a20 203c 756c 3e0a 2020 2020 3c6c 6920 . \n+0000c5a0: 0a3c 2f64 6976 3e0a 3c2f 626f 6479 3e0a .
..\n+0000c5b0: 3c2f 6874 6d6c 3e0a .\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,1242 +1,352 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DecisionTree-inl.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 6 * Authors: Frank Dellaert, 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_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n-23\n-24#include \n-25#include \n-26#include \n-27#include \n-28\n-29#include \n-30#include \n-31#include \n-32#include \n-33#include \n-34#include \n-35#include \n-36#include \n-37\n-38namespace _\bg_\bt_\bs_\ba_\bm {\n-39\n-40 /\n-****************************************************************************/\n-41 // Node\n-42 /\n-****************************************************************************/\n-43#ifdef DT_DEBUG_MEMORY\n-44 template\n-45 int DecisionTree::Node::nrNodes = 0;\n-46#endif\n-47\n-48 /\n-****************************************************************************/\n-49 // Leaf\n-50 /\n-****************************************************************************/\n-51 template \n-_\b5_\b2 struct _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be::_\bL_\be_\ba_\bf : public _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be::Node {\n-_\b5_\b4 Y _\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\b_;\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+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-_\b5_\b9 size_t _\bn_\br_\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\bs_\b_;\n-60\n-_\b6_\b2 _\bL_\be_\ba_\bf() {}\n-63\n-_\b6_\b5 _\bL_\be_\ba_\bf(const Y& constant, size_t nrAssignments = 1)\n-66 : constant_(constant), nrAssignments_(nrAssignments) {}\n-67\n-_\b6_\b9 const Y& _\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt() const {\n-70 return constant_;\n-71 }\n-72\n-_\b7_\b4 size_t _\bn_\br_\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\bs() const { return nrAssignments_; }\n-75\n-_\b7_\b7 bool _\bs_\ba_\bm_\be_\bL_\be_\ba_\bf(const _\bL_\be_\ba_\bf& q) const override {\n-78 return constant_ == q._\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\b_;\n-79 }\n-80\n-_\b8_\b2 bool _\bs_\ba_\bm_\be_\bL_\be_\ba_\bf(const _\bN_\bo_\bd_\be& q) const override {\n-83 return (q.isLeaf() && q.sameLeaf(*this));\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 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bd_\be& q, const CompareFunc& compare) const override {\n-88 const _\bL_\be_\ba_\bf* other = dynamic_cast(&q);\n-89 if (!other) return false;\n-90 return compare(this->constant_, other->_\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\b_);\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-_\b9_\b4 void _\bp_\br_\bi_\bn_\bt(const std::string& s, const LabelFormatter& labelFormatter,\n-95 const ValueFormatter& valueFormatter) const override {\n-96 std::cout << s << \" Leaf \" << valueFormatter(constant_) << std::endl;\n-97 }\n-98\n-_\b1_\b0_\b0 void _\bd_\bo_\bt(std::ostream& os, const LabelFormatter& labelFormatter,\n-101 const ValueFormatter& valueFormatter,\n-102 bool showZero) const override {\n-103 std::string value = valueFormatter(constant_);\n-104 if (showZero || value.compare(\"0\"))\n-105 os << \"\\\"\" << this->id() << \"\\\" [label=\\\"\" << value\n-106 << \"\\\", shape=box, rank=sink, height=0.35, fixedsize=true]\\n\";\n-107 }\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_\b1_\b0 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 override {\n-111 return constant_;\n-112 }\n-113\n-_\b1_\b1_\b5 _\bN_\bo_\bd_\be_\bP_\bt_\br _\ba_\bp_\bp_\bl_\by(const _\bU_\bn_\ba_\br_\by& op) const override {\n-116 _\bN_\bo_\bd_\be_\bP_\bt_\br f(new _\bL_\be_\ba_\bf(op(constant_), nrAssignments_));\n-117 return f;\n-118 }\n-119\n-_\b1_\b2_\b1 _\bN_\bo_\bd_\be_\bP_\bt_\br _\ba_\bp_\bp_\bl_\by(const UnaryAssignment& op,\n-122 const _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b<_\bL_\b>& assignment) const override {\n-123 _\bN_\bo_\bd_\be_\bP_\bt_\br f(new _\bL_\be_\ba_\bf(op(assignment, constant_), nrAssignments_));\n-124 return f;\n-125 }\n-126\n-127 // Apply binary operator \"h = f op g\" on Leaf node\n-128 // Note op is not assumed commutative so we need to keep track of order\n-129 // Simply calls apply on argument to call correct virtual method:\n-130 // fL.apply_f_op_g(gL) -> gL.apply_g_op_fL(fL) (below)\n-131 // fL.apply_f_op_g(gC) -> gC.apply_g_op_fL(fL) (Choice)\n-132 _\bN_\bo_\bd_\be_\bP_\bt_\br apply_f_op_g(const _\bN_\bo_\bd_\be& g, const Binary& op) const override {\n-133 return g.apply_g_op_fL(*this, op);\n-134 }\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+_\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 // Applying binary operator to two leaves results in a leaf\n-137 _\bN_\bo_\bd_\be_\bP_\bt_\br apply_g_op_fL(const Leaf& fL, const Binary& op) const override {\n-138 // fL op gL\n-139 _\bN_\bo_\bd_\be_\bP_\bt_\br h(new Leaf(op(fL.constant_, constant_), nrAssignments_));\n-140 return h;\n-141 }\n-142\n-143 // If second argument is a Choice node, call it's apply with leaf as second\n-144 _\bN_\bo_\bd_\be_\bP_\bt_\br apply_g_op_fC(const Choice& fC, const Binary& op) const override {\n-145 return fC.apply_fC_op_gL(*this, op); // operand order back to normal\n-146 }\n-147\n-_\b1_\b4_\b9 _\bN_\bo_\bd_\be_\bP_\bt_\br _\bc_\bh_\bo_\bo_\bs_\be(const L& label, size_t index) const override {\n-150 return _\bN_\bo_\bd_\be_\bP_\bt_\br(new _\bL_\be_\ba_\bf(constant(), nrAssignments()));\n-151 }\n-152\n-153 bool isLeaf() const override { return true; }\n-_\b1_\b5_\b4\n-155 private:\n-156 using Base = _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bN_\bo_\bd_\be;\n-157\n-159 friend class boost::serialization::access;\n-160 template \n-161 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n-162 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);\n-163 ar& BOOST_SERIALIZATION_NVP(constant_);\n-164 ar& BOOST_SERIALIZATION_NVP(nrAssignments_);\n-165 }\n-166 }; // Leaf\n-_\b1_\b6_\b7\n-168 /\n-****************************************************************************/\n-169 // Choice\n-170 /\n-****************************************************************************/\n-171 template\n-_\b1_\b7_\b2 struct _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be::_\bC_\bh_\bo_\bi_\bc_\be: public _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be::Node {\n-_\b1_\b7_\b4 L _\bl_\ba_\bb_\be_\bl_\b_;\n-175\n-_\b1_\b7_\b7 std::vector _\bb_\br_\ba_\bn_\bc_\bh_\be_\bs_\b_;\n-178\n-_\b1_\b7_\b9 private:\n-184 size_t allSame_;\n-185\n-186 using ChoicePtr = boost::shared_ptr;\n-187\n-_\b1_\b8_\b8 public:\n-_\b1_\b9_\b0 _\bC_\bh_\bo_\bi_\bc_\be() {}\n-_\b1_\b9_\b1\n-192 ~Choice() override {\n-193#ifdef DT_DEBUG_MEMORY\n-_\b1_\b9_\b4 std::std::cout << Node::nrNodes << \" destructing (Choice) \" << this->id()\n-195 << std::std::endl;\n-196#endif\n-_\b1_\b9_\b7 }\n-198\n-_\b2_\b0_\b0 static _\bN_\bo_\bd_\be_\bP_\bt_\br _\bU_\bn_\bi_\bq_\bu_\be(const ChoicePtr& f) {\n-_\b2_\b0_\b1#ifndef GTSAM_DT_NO_PRUNING\n-202 if (f->allSame_) {\n-203 assert(f->branches().size() > 0);\n-_\b2_\b0_\b4 _\bN_\bo_\bd_\be_\bP_\bt_\br f0 = f->branches_[0];\n-205\n-206 size_t nrAssignments = 0;\n-207 for(auto branch: f->branches()) {\n-208 assert(branch->isLeaf());\n-209 nrAssignments +=\n-210 boost::dynamic_pointer_cast(branch)->nrAssignments();\n-211 }\n-212 _\bN_\bo_\bd_\be_\bP_\bt_\br newLeaf(\n-213 new Leaf(boost::dynamic_pointer_cast(f0)->constant(),\n-214 nrAssignments));\n-_\b2_\b1_\b5 return newLeaf;\n-216 } else\n-217#endif\n-218 return f;\n-219 }\n-220\n-221 bool isLeaf() const override { return false; }\n-222\n-_\b2_\b2_\b4 _\bC_\bh_\bo_\bi_\bc_\be(const L& label, size_t count) :\n-225 label_(label), allSame_(true) {\n-226 branches_.reserve(count);\n-227 }\n-_\b2_\b2_\b8\n-_\b2_\b3_\b0 _\bC_\bh_\bo_\bi_\bc_\be(const _\bC_\bh_\bo_\bi_\bc_\be& f, const _\bC_\bh_\bo_\bi_\bc_\be& g, const Binary& op) :\n-231 allSame_(true) {\n-232 // Choose what to do based on label\n-233 if (f._\bl_\ba_\bb_\be_\bl() > g._\bl_\ba_\bb_\be_\bl()) {\n-234 // f higher than g\n-235 label_ = f._\bl_\ba_\bb_\be_\bl();\n-236 size_t count = f.nrChoices();\n-237 branches_.reserve(count);\n-238 for (size_t i = 0; i < count; i++)\n-239 push_back(f._\bb_\br_\ba_\bn_\bc_\bh_\be_\bs_\b_[i]->apply_f_op_g(g, op));\n-240 } else if (g._\bl_\ba_\bb_\be_\bl() > f._\bl_\ba_\bb_\be_\bl()) {\n-241 // f lower than g\n-_\b2_\b4_\b2 label_ = g._\bl_\ba_\bb_\be_\bl();\n-243 size_t count = g.nrChoices();\n-244 branches_.reserve(count);\n-245 for (size_t i = 0; i < count; i++)\n-246 push_back(g._\bb_\br_\ba_\bn_\bc_\bh_\be_\bs_\b_[i]->apply_g_op_fC(f, op));\n-247 } else {\n-248 // f same level as g\n-249 label_ = f._\bl_\ba_\bb_\be_\bl();\n-250 size_t count = f.nrChoices();\n-251 branches_.reserve(count);\n-252 for (size_t i = 0; i < count; i++)\n-253 push_back(f._\bb_\br_\ba_\bn_\bc_\bh_\be_\bs_\b_[i]->apply_f_op_g(*g._\bb_\br_\ba_\bn_\bc_\bh_\be_\bs_\b_[i], op));\n-254 }\n-255 }\n-256\n-_\b2_\b5_\b8 const L& _\bl_\ba_\bb_\be_\bl() const {\n-259 return label_;\n-_\b2_\b6_\b0 }\n-261\n-262 size_t nrChoices() const {\n-_\b2_\b6_\b3 return branches_.size();\n-264 }\n-265\n-266 const std::vector& branches() const {\n-267 return branches_;\n-268 }\n-269\n-_\b2_\b7_\b1 void _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(const _\bN_\bo_\bd_\be_\bP_\bt_\br& node) {\n-272 // allSame_ is restricted to leaf nodes in a decision tree\n-273 if (allSame_ && !branches_.empty()) {\n-274 allSame_ = node->sameLeaf(*branches_.back());\n-275 }\n-276 branches_.push_back(node);\n-277 }\n-278\n-_\b2_\b8_\b0 void _\bp_\br_\bi_\bn_\bt(const std::string& s, const LabelFormatter& labelFormatter,\n-281 const ValueFormatter& valueFormatter) const override {\n-282 std::cout << s << \" Choice(\";\n-283 std::cout << labelFormatter(label_) << \") \" << std::endl;\n-284 for (size_t i = 0; i < branches_.size(); i++)\n-285 branches_[i]->_\bp_\br_\bi_\bn_\bt((boost::format(\"%s %d\") % s % i).str(),\n-286 labelFormatter, valueFormatter);\n-287 }\n-288\n-_\b2_\b9_\b0 void _\bd_\bo_\bt(std::ostream& os, const LabelFormatter& labelFormatter,\n-291 const ValueFormatter& valueFormatter,\n-292 bool showZero) const override {\n-293 os << \"\\\"\" << this->id() << \"\\\" [shape=circle, label=\\\"\" << label_\n-294 << \"\\\"]\\n\";\n-295 size_t B = branches_.size();\n-296 for (size_t i = 0; i < B; i++) {\n-_\b2_\b9_\b7 const _\bN_\bo_\bd_\be_\bP_\bt_\br& branch = branches_[i];\n-298\n-299 // Check if zero\n-300 if (!showZero) {\n-301 const Leaf* leaf = dynamic_cast(branch.get());\n-302 if (leaf && valueFormatter(leaf->constant()).compare(\"0\")) continue;\n-303 }\n-304\n-305 os << \"\\\"\" << this->id() << \"\\\" -> \\\"\" << branch->id() << \"\\\"\";\n-306 if (B == 2 && i == 0) os << \" [style=dashed]\";\n-307 os << std::endl;\n-308 branch->dot(os, labelFormatter, valueFormatter, showZero);\n-309 }\n-310 }\n-311\n-_\b3_\b1_\b3 bool _\bs_\ba_\bm_\be_\bL_\be_\ba_\bf(const _\bL_\be_\ba_\bf& q) const override {\n-_\b3_\b1_\b4 return false;\n-315 }\n-316\n-_\b3_\b1_\b8 bool _\bs_\ba_\bm_\be_\bL_\be_\ba_\bf(const _\bN_\bo_\bd_\be& q) const override {\n-319 return (q.isLeaf() && q.sameLeaf(*this));\n-320 }\n-321\n-_\b3_\b2_\b3 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bd_\be& q, const CompareFunc& compare) const override {\n-324 const _\bC_\bh_\bo_\bi_\bc_\be* other = dynamic_cast(&q);\n-325 if (!other) return false;\n-326 if (this->label_ != other->_\bl_\ba_\bb_\be_\bl_\b_) return false;\n-327 if (branches_.size() != other->_\bb_\br_\ba_\bn_\bc_\bh_\be_\bs_\b_.size()) return false;\n-328 // we don't care about shared pointers being equal here\n-329 for (size_t i = 0; i < branches_.size(); i++)\n-330 if (!(branches_[i]->_\be_\bq_\bu_\ba_\bl_\bs(*(other->_\bb_\br_\ba_\bn_\bc_\bh_\be_\bs_\b_[i]), compare)))\n-331 return false;\n-332 return true;\n-333 }\n-334\n-_\b3_\b3_\b6 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 override {\n-337#ifndef NDEBUG\n-_\b3_\b3_\b8 typename _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b<_\bL_\b>_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br it = x.find(label_);\n-339 if (it == x.end()) {\n-340 std::cout << \"Trying to find value for \" << label_ << std::endl;\n-_\b3_\b4_\b1 throw std::invalid_argument(\n-342 \"DecisionTree::operator(): value undefined for a label\");\n-343 }\n-344#endif\n-345 size_t index = x.at(label_);\n-346 _\bN_\bo_\bd_\be_\bP_\bt_\br child = branches_[index];\n-347 return (*child)(x);\n-348 }\n-349\n-_\b3_\b5_\b1 Choice(const L& label, const Choice& f, const _\bU_\bn_\ba_\br_\by& op) :\n-352 label_(label), allSame_(true) {\n-353 branches_.reserve(f.branches_.size()); // reserve space\n-_\b3_\b5_\b4 for (const _\bN_\bo_\bd_\be_\bP_\bt_\br& branch : f.branches_) {\n-355 push_back(branch->apply(op));\n-356 }\n-357 }\n-358\n-_\b3_\b6_\b9 _\bC_\bh_\bo_\bi_\bc_\be(const L& label, const _\bC_\bh_\bo_\bi_\bc_\be& f, const UnaryAssignment& op,\n-370 const _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b<_\bL_\b>& assignment)\n-371 : label_(label), allSame_(true) {\n-372 branches_.reserve(f._\bb_\br_\ba_\bn_\bc_\bh_\be_\bs_\b_.size()); // reserve space\n-_\b3_\b7_\b3\n-374 _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b<_\bL_\b> assignment_ = assignment;\n-375\n-376 for (size_t i = 0; i < f._\bb_\br_\ba_\bn_\bc_\bh_\be_\bs_\b_.size(); i++) {\n-_\b3_\b7_\b7 assignment_[label_] = i; // Set assignment for label to i\n-378\n-379 const _\bN_\bo_\bd_\be_\bP_\bt_\br branch = f._\bb_\br_\ba_\bn_\bc_\bh_\be_\bs_\b_[i];\n-380 push_back(branch->apply(op, assignment_));\n-_\b3_\b8_\b1\n-382 // Remove the assignment so we are backtracking\n-383 auto assignment_it = assignment_.find(label_);\n-384 assignment_.erase(assignment_it);\n-385 }\n-386 }\n-387\n-_\b3_\b8_\b9 _\bN_\bo_\bd_\be_\bP_\bt_\br _\ba_\bp_\bp_\bl_\by(const _\bU_\bn_\ba_\br_\by& op) const override {\n-390 auto r = boost::make_shared(label_, *this, op);\n-391 return Unique(r);\n-392 }\n-393\n-_\b3_\b9_\b5 _\bN_\bo_\bd_\be_\bP_\bt_\br _\ba_\bp_\bp_\bl_\by(const UnaryAssignment& op,\n-396 const _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b<_\bL_\b>& assignment) const override {\n-397 auto r = boost::make_shared(label_, *this, op, assignment);\n-398 return Unique(r);\n-399 }\n-400\n-401 // Apply binary operator \"h = f op g\" on Choice node\n-402 // Note op is not assumed commutative so we need to keep track of order\n-403 // Simply calls apply on argument to call correct virtual method:\n-404 // fC.apply_f_op_g(gL) -> gL.apply_g_op_fC(fC) -> (Leaf)\n-405 // fC.apply_f_op_g(gC) -> gC.apply_g_op_fC(fC) -> (below)\n-406 _\bN_\bo_\bd_\be_\bP_\bt_\br apply_f_op_g(const _\bN_\bo_\bd_\be& g, const Binary& op) const override {\n-407 return g.apply_g_op_fC(*this, op);\n-408 }\n-409\n-410 // If second argument of binary op is Leaf node, recurse on branches\n-411 _\bN_\bo_\bd_\be_\bP_\bt_\br apply_g_op_fL(const Leaf& fL, const Binary& op) const override {\n-412 auto h = boost::make_shared(label(), nrChoices());\n-413 for (auto&& branch : branches_)\n-414 h->push_back(fL.apply_f_op_g(*branch, op));\n-415 return Unique(h);\n-416 }\n-417\n-418 // If second argument of binary op is Choice, call constructor\n-419 _\bN_\bo_\bd_\be_\bP_\bt_\br apply_g_op_fC(const Choice& fC, const Binary& op) const override {\n-420 auto h = boost::make_shared(fC, *this, op);\n-421 return Unique(h);\n-422 }\n-423\n-424 // If second argument of binary op is Leaf\n-425 template\n-426 _\bN_\bo_\bd_\be_\bP_\bt_\br apply_fC_op_gL(const Leaf& gL, OP op) const {\n-427 auto h = boost::make_shared(label(), nrChoices());\n-428 for (auto&& branch : branches_)\n-429 h->push_back(branch->apply_f_op_g(gL, op));\n-430 return Unique(h);\n-431 }\n-432\n-_\b4_\b3_\b4 _\bN_\bo_\bd_\be_\bP_\bt_\br _\bc_\bh_\bo_\bo_\bs_\be(const L& label, size_t index) const override {\n-435 if (label_ == label) return branches_[index]; // choose branch\n-436\n-437 // second case, not label of interest, just recurse\n-438 auto r = boost::make_shared(label_, branches_.size());\n-439 for (auto&& branch : branches_)\n-440 r->push_back(branch->choose(label, index));\n-441 return Unique(r);\n-442 }\n-443\n-444 private:\n-445 using Base = _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bN_\bo_\bd_\be;\n-446\n-448 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 & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);\n-452 ar& BOOST_SERIALIZATION_NVP(label_);\n-453 ar& BOOST_SERIALIZATION_NVP(branches_);\n-454 ar& BOOST_SERIALIZATION_NVP(allSame_);\n-455 }\n-456 }; // Choice\n-457\n-458 /\n-****************************************************************************/\n-459 // DecisionTree\n-460 /\n-****************************************************************************/\n-461 template\n-_\b4_\b6_\b2 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be() {\n-463 }\n-464\n-465 template\n-466 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const NodePtr& root) :\n-467 root_(root) {\n-468 }\n-469\n-470 /\n-****************************************************************************/\n-471 template\n-_\b4_\b7_\b2 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const Y& y) {\n-473 root_ = _\bN_\bo_\bd_\be_\bP_\bt_\br(new _\bL_\be_\ba_\bf(y));\n-474 }\n-475\n-476 /\n-****************************************************************************/\n-477 template \n-_\b4_\b7_\b8 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const L& label, const Y& y1, const Y& y2)\n-{\n-479 auto a = boost::make_shared(label, 2);\n-480 _\bN_\bo_\bd_\be_\bP_\bt_\br l1(new _\bL_\be_\ba_\bf(y1)), l2(new _\bL_\be_\ba_\bf(y2));\n-481 a->push_back(l1);\n-482 a->push_back(l2);\n-483 root_ = Choice::Unique(a);\n-484 }\n-485\n-486 /\n-****************************************************************************/\n-487 template \n-_\b4_\b8_\b8 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bL_\ba_\bb_\be_\bl_\bC& labelC, const Y& y1,\n-489 const Y& y2) {\n-490 if (labelC.second != 2) throw std::invalid_argument(\n-491 \"DecisionTree: binary constructor called with non-binary label\");\n-492 auto a = boost::make_shared(labelC.first, 2);\n-493 _\bN_\bo_\bd_\be_\bP_\bt_\br l1(new _\bL_\be_\ba_\bf(y1)), l2(new _\bL_\be_\ba_\bf(y2));\n-494 a->push_back(l1);\n-495 a->push_back(l2);\n-496 root_ = Choice::Unique(a);\n-497 }\n-498\n-499 /\n-****************************************************************************/\n-500 template\n-_\b5_\b0_\b1 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const std::vector& labelCs,\n-502 const std::vector& ys) {\n-503 // call recursive Create\n-504 root_ = create(labelCs.begin(), labelCs.end(), ys.begin(), ys.end());\n-505 }\n-506\n-507 /\n-****************************************************************************/\n-508 template\n-_\b5_\b0_\b9 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const std::vector& labelCs,\n-510 const std::string& table) {\n-511 // Convert std::string to values of type Y\n-512 std::vector ys;\n-513 std::istringstream iss(table);\n-514 copy(std::istream_iterator(iss), std::istream_iterator(),\n-515 back_inserter(ys));\n-516\n-517 // now call recursive Create\n-518 root_ = create(labelCs.begin(), labelCs.end(), ys.begin(), ys.end());\n-519 }\n-520\n-521 /\n-****************************************************************************/\n-522 template\n-_\b5_\b2_\b3 template _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(\n-524 Iterator begin, Iterator end, const L& label) {\n-525 root_ = compose(begin, end, label);\n-526 }\n-527\n-528 /\n-****************************************************************************/\n-529 template\n-_\b5_\b3_\b0 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const L& label,\n-531 const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be& f0, const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be& f1) {\n-532 const std::vector functions{f0, f1};\n-533 root_ = compose(functions.begin(), functions.end(), label);\n-534 }\n-535\n-536 /\n-****************************************************************************/\n-537 template \n-538 template \n-_\b5_\b3_\b9 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\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,\n-540 Func Y_of_X) {\n-541 // Define functor for identity mapping of node label.\n-542 auto L_of_L = [](const L& label) { return label; };\n-543 root_ = convertFrom(other._\br_\bo_\bo_\bt_\b_, L_of_L, Y_of_X);\n-544 }\n-545\n-546 /\n-****************************************************************************/\n-547 template \n-548 template \n-_\b5_\b4_\b9 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\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,\n-550 const std::map& map, Func Y_of_X) {\n-551 auto L_of_M = [&map](const M& label) -> L { return map.at(label); };\n-552 root_ = convertFrom(other._\br_\bo_\bo_\bt_\b_, L_of_M, Y_of_X);\n-553 }\n-554\n-555 /\n-****************************************************************************/\n-556 // Called by two constructors above.\n-557 // Takes a label and a corresponding range of decision trees, and creates a\n-558 // new decision tree. However, the order of the labels needs to be\n-respected,\n-559 // so we cannot just create a root Choice node on the label: if the label\n-is\n-560 // not the highest label, we need a complicated/ expensive recursive call.\n-561 template \n-562 template \n-563 typename _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bN_\bo_\bd_\be_\bP_\bt_\br _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bc_\bo_\bm_\bp_\bo_\bs_\be(\n-564 Iterator begin, Iterator end, const L& label) const {\n-565 // find highest label among branches\n-566 boost::optional highestLabel;\n-567 size_t nrChoices = 0;\n-568 for (Iterator it = begin; it != end; it++) {\n-569 if (it->root_->isLeaf())\n-570 continue;\n-571 boost::shared_ptr c =\n-572 boost::dynamic_pointer_cast(it->root_);\n-573 if (!highestLabel || c->label() > *highestLabel) {\n-574 highestLabel.reset(c->label());\n-575 nrChoices = c->nrChoices();\n-576 }\n-577 }\n-578\n-579 // if label is already in correct order, just put together a choice on\n-label\n-580 if (!nrChoices || !highestLabel || label > *highestLabel) {\n-581 auto choiceOnLabel = boost::make_shared(label, end - begin);\n-582 for (Iterator it = begin; it != end; it++)\n-583 choiceOnLabel->push_back(it->root_);\n-584 return Choice::Unique(choiceOnLabel);\n-585 } else {\n-586 // Set up a new choice on the highest label\n-587 auto choiceOnHighestLabel =\n-588 boost::make_shared(*highestLabel, nrChoices);\n-589 // now, for all possible values of highestLabel\n-590 for (size_t index = 0; index < nrChoices; index++) {\n-591 // make a new set of functions for composing by iterating over the given\n-592 // functions, and selecting the appropriate branch.\n-593 std::vector functions;\n-594 for (Iterator it = begin; it != end; it++) {\n-595 // by restricting the input functions to value i for labelBelow\n-596 DecisionTree chosen = it->choose(*highestLabel, index);\n-597 functions.push_back(chosen);\n-598 }\n-599 // We then recurse, for all values of the highest label\n-600 NodePtr fi = compose(functions.begin(), functions.end(), label);\n-601 choiceOnHighestLabel->push_back(fi);\n-602 }\n-603 return Choice::Unique(choiceOnHighestLabel);\n-604 }\n-605 }\n-606\n-607 /\n-****************************************************************************/\n-608 // \"create\" is a bit of a complicated thing, but very useful.\n-609 // It takes a range of labels and a corresponding range of values,\n-610 // and creates a decision tree, as follows:\n-611 // - if there is only one label, creates a choice node with values in\n-leaves\n-612 // - otherwise, it evenly splits up the range of values and creates a tree\n-for\n-613 // each sub-range, and assigns that tree to first label's choices\n-614 // Example:\n-615 // create([B A],[1 2 3 4]) would call\n-616 // create([A],[1 2])\n-617 // create([A],[3 4])\n-618 // and produce\n-619 // B=0\n-620 // A=0: 1\n-621 // A=1: 2\n-622 // B=1\n-623 // A=0: 3\n-624 // A=1: 4\n-625 // Note, through the magic of \"compose\", create([A B],[1 3 2 4]) will\n-produce\n-626 // exactly the same tree as above: the highest label is always the root.\n-627 // However, it will be *way* faster if labels are given highest to lowest.\n-628 template\n-629 template\n-_\b6_\b3_\b0 typename _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bN_\bo_\bd_\be_\bP_\bt_\br _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bc_\br_\be_\ba_\bt_\be(\n-631 It begin, It end, ValueIt beginY, ValueIt endY) const {\n-632 // get crucial counts\n-633 size_t nrChoices = begin->second;\n-634 size_t size = endY - beginY;\n-635\n-636 // Find the next key to work on\n-637 It labelC = begin + 1;\n-638 if (labelC == end) {\n-639 // Base case: only one key left\n-640 // Create a simple choice node with values as leaves.\n-641 if (size != nrChoices) {\n-642 std::cout << \"Trying to create DD on \" << begin->first << std::endl;\n-643 std::cout << boost::format(\n-644 \"DecisionTree::create: expected %d values but got %d \"\n-645 \"instead\") %\n-646 nrChoices % size\n-647 << std::endl;\n-648 throw std::invalid_argument(\"DecisionTree::create invalid argument\");\n-649 }\n-650 auto choice = boost::make_shared(begin->first, endY - beginY);\n-651 for (ValueIt y = beginY; y != endY; y++)\n-652 choice->push_back(_\bN_\bo_\bd_\be_\bP_\bt_\br(new _\bL_\be_\ba_\bf(*y)));\n-653 return Choice::Unique(choice);\n-654 }\n-655\n-656 // Recursive case: perform \"Shannon expansion\"\n-657 // Creates one tree (i.e.,function) for each choice of current key\n-658 // by calling create recursively, and then puts them all together.\n-659 std::vector functions;\n-660 size_t _\bs_\bp_\bl_\bi_\bt = size / nrChoices;\n-661 for (size_t i = 0; i < nrChoices; i++, beginY += _\bs_\bp_\bl_\bi_\bt) {\n-662 _\bN_\bo_\bd_\be_\bP_\bt_\br f = create(labelC, end, beginY, beginY + _\bs_\bp_\bl_\bi_\bt);\n-663 functions.emplace_back(f);\n-664 }\n-665 return compose(functions.begin(), functions.end(), begin->first);\n-666 }\n-667\n-668 /\n-****************************************************************************/\n-669 template \n-670 template \n-_\b6_\b7_\b1 typename _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bN_\bo_\bd_\be_\bP_\bt_\br _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bc_\bo_\bn_\bv_\be_\br_\bt_\bF_\br_\bo_\bm(\n-672 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-673 std::function L_of_M,\n-674 std::function Y_of_X) const {\n-675 using LY = _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>;\n-676\n-677 // Ugliness below because apparently we can't have templated virtual\n-678 // functions.\n-679 // If leaf, apply unary conversion \"op\" and create a unique leaf.\n-680 using MXLeaf = typename _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bM_\b,_\b _\bX_\b>_\b:_\b:_\bL_\be_\ba_\bf;\n-681 if (auto leaf = boost::dynamic_pointer_cast(f)) {\n-682 return _\bN_\bo_\bd_\be_\bP_\bt_\br(new _\bL_\be_\ba_\bf(Y_of_X(leaf->constant()), leaf->nrAssignments()));\n-683 }\n-684\n-685 // Check if Choice\n-686 using MXChoice = typename _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bM_\b,_\b _\bX_\b>_\b:_\b:_\bC_\bh_\bo_\bi_\bc_\be;\n-687 auto choice = boost::dynamic_pointer_cast(f);\n-688 if (!choice) throw std::invalid_argument(\n-689 \"DecisionTree::convertFrom: Invalid NodePtr\");\n-690\n-691 // get new label\n-692 const M oldLabel = choice->label();\n-693 const L newLabel = L_of_M(oldLabel);\n-694\n-695 // put together via Shannon expansion otherwise not sorted.\n-696 std::vector functions;\n-697 for (auto&& branch : choice->branches()) {\n-698 functions.emplace_back(convertFrom(branch, L_of_M, Y_of_X));\n-699 }\n-700 return LY::compose(functions.begin(), functions.end(), newLabel);\n-701 }\n-702\n-703 /\n-****************************************************************************/\n-714 template \n-_\b7_\b1_\b5 struct _\bV_\bi_\bs_\bi_\bt {\n-716 using F = std::function;\n-_\b7_\b1_\b7 explicit _\bV_\bi_\bs_\bi_\bt(F _\bf) : _\bf(_\bf) {}\n-_\b7_\b1_\b8 F _\bf;\n-719\n-_\b7_\b2_\b1 void _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const typename _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bN_\bo_\bd_\be_\bP_\bt_\br& node) const {\n-722 using Leaf = typename _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bL_\be_\ba_\bf;\n-723 if (auto leaf = boost::dynamic_pointer_cast(node))\n-724 return _\bf(leaf->constant());\n-725\n-726 using Choice = typename _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bC_\bh_\bo_\bi_\bc_\be;\n-727 auto choice = boost::dynamic_pointer_cast(node);\n-728 if (!choice)\n-729 throw std::invalid_argument(\"DecisionTree::Visit: Invalid NodePtr\");\n-730 for (auto&& branch : choice->branches()) (*this)(branch); // recurse!\n-731 }\n-732 };\n-733\n-734 template \n-735 template \n-_\b7_\b3_\b6 void _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bv_\bi_\bs_\bi_\bt(Func f) const {\n-737 _\bV_\bi_\bs_\bi_\bt_\b<_\bL_\b,_\b _\bY_\b> visit(f);\n-738 visit(root_);\n-739 }\n-740\n-741 /\n-****************************************************************************/\n-751 template \n-_\b7_\b5_\b2 struct _\bV_\bi_\bs_\bi_\bt_\bL_\be_\ba_\bf {\n-753 using F = std::function_\b:_\b:_\bL_\be_\ba_\bf&)>;\n-_\b7_\b5_\b4 explicit _\bV_\bi_\bs_\bi_\bt_\bL_\be_\ba_\bf(F _\bf) : _\bf(_\bf) {}\n-_\b7_\b5_\b5 F _\bf;\n-756\n-_\b7_\b5_\b8 void _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const typename _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bN_\bo_\bd_\be_\bP_\bt_\br& node) const {\n-759 using Leaf = typename _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bL_\be_\ba_\bf;\n-760 if (auto leaf = boost::dynamic_pointer_cast(node))\n-761 return _\bf(*leaf);\n-762\n-763 using Choice = typename _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bC_\bh_\bo_\bi_\bc_\be;\n-764 auto choice = boost::dynamic_pointer_cast(node);\n-765 if (!choice)\n-766 throw std::invalid_argument(\"DecisionTree::VisitLeaf: Invalid NodePtr\");\n-767 for (auto&& branch : choice->branches()) (*this)(branch); // recurse!\n-768 }\n-769 };\n-770\n-771 template \n-772 template \n-_\b7_\b7_\b3 void _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bv_\bi_\bs_\bi_\bt_\bL_\be_\ba_\bf(Func f) const {\n-774 _\bV_\bi_\bs_\bi_\bt_\bL_\be_\ba_\bf_\b<_\bL_\b,_\b _\bY_\b> visit(f);\n-775 visit(root_);\n-776 }\n-777\n-778 /\n-****************************************************************************/\n-785 template \n-_\b7_\b8_\b6 struct _\bV_\bi_\bs_\bi_\bt_\bW_\bi_\bt_\bh {\n-787 using F = std::function&, const Y&)>;\n-_\b7_\b8_\b8 explicit _\bV_\bi_\bs_\bi_\bt_\bW_\bi_\bt_\bh(F _\bf) : _\bf(_\bf) {}\n-_\b7_\b8_\b9 _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b<_\bL_\b> _\ba_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt;\n-_\b7_\b9_\b0 F _\bf;\n-791\n-_\b7_\b9_\b3 void _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const typename _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bN_\bo_\bd_\be_\bP_\bt_\br& node) {\n-794 using Leaf = typename _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bL_\be_\ba_\bf;\n-795 if (auto leaf = boost::dynamic_pointer_cast(node))\n-796 return _\bf(_\ba_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt, leaf->constant());\n-797\n-798 using Choice = typename _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bC_\bh_\bo_\bi_\bc_\be;\n-799 auto choice = boost::dynamic_pointer_cast(node);\n-800 if (!choice)\n-801 throw std::invalid_argument(\"DecisionTree::VisitWith: Invalid NodePtr\");\n-802 for (size_t i = 0; i < choice->nrChoices(); i++) {\n-803 _\ba_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt[choice->label()] = i; // Set assignment for label to i\n-804\n-805 (*this)(choice->branches()[i]); // recurse!\n-806\n-807 // Remove the choice so we are backtracking\n-808 auto choice_it = _\ba_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt.find(choice->label());\n-809 _\ba_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt.erase(choice_it);\n-810 }\n-811 }\n-812 };\n-813\n-814 template \n-815 template \n-_\b8_\b1_\b6 void _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bv_\bi_\bs_\bi_\bt_\bW_\bi_\bt_\bh(Func f) const {\n-817 _\bV_\bi_\bs_\bi_\bt_\bW_\bi_\bt_\bh_\b<_\bL_\b,_\b _\bY_\b> visit(f);\n-818 visit(root_);\n-819 }\n-820\n-821 /\n-****************************************************************************/\n-822 template \n-_\b8_\b2_\b3 size_t _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bn_\br_\bL_\be_\ba_\bv_\be_\bs() const {\n-824 size_t total = 0;\n-825 visit([&total](const Y& node) { total += 1; });\n-826 return total;\n-827 }\n-828\n-829 /\n-****************************************************************************/\n-830 // fold is just done with a visit\n-831 template \n-832 template \n-_\b8_\b3_\b3 X _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bf_\bo_\bl_\bd(Func f, X x0) const {\n-834 visit([&](const Y& y) { x0 = f(y, x0); });\n-835 return x0;\n-836 }\n-837\n-838 /\n-****************************************************************************/\n-852 template \n-_\b8_\b5_\b3 std::set _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bl_\ba_\bb_\be_\bl_\bs() const {\n-854 std::set unique;\n-855 auto f = [&](const _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b<_\bL_\b>& assignment, const Y&) {\n-856 for (auto&& kv : assignment) {\n-857 unique.insert(kv.first);\n-858 }\n-859 };\n-860 visitWith(f);\n-861 return unique;\n-862 }\n-863\n-864/\n-****************************************************************************/\n-865 template \n-866 bool _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be& other,\n-867 const CompareFunc& compare) const {\n-868 return root_->equals(*other._\br_\bo_\bo_\bt_\b_, compare);\n-869 }\n-870\n-871 template \n-_\b8_\b7_\b2 void _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bp_\br_\bi_\bn_\bt(const std::string& s,\n-873 const LabelFormatter& labelFormatter,\n-874 const ValueFormatter& valueFormatter) const {\n-875 root_->print(s, labelFormatter, valueFormatter);\n-876 }\n-877\n-878 template\n-_\b8_\b7_\b9 bool _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be& other) const {\n-880 return root_->equals(*other._\br_\bo_\bo_\bt_\b_);\n-881 }\n-882\n-883 template\n-_\b8_\b8_\b4 const Y& _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\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-885 return root_->operator ()(x);\n-886 }\n-887\n-888 template\n-_\b8_\b8_\b9 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b> _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\ba_\bp_\bp_\bl_\by(const _\bU_\bn_\ba_\br_\by& op) const {\n-890 // It is unclear what should happen if tree is empty:\n-891 if (empty()) {\n-892 throw std::runtime_error(\n-893 \"DecisionTree::apply(unary op) undefined for empty tree.\");\n-894 }\n-895 return _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(root_->apply(op));\n-896 }\n-897\n-899 template \n-_\b9_\b0_\b0 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b> _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\ba_\bp_\bp_\bl_\by(\n-901 const UnaryAssignment& op) const {\n-902 // It is unclear what should happen if tree is empty:\n-903 if (empty()) {\n-904 throw std::runtime_error(\n-905 \"DecisionTree::apply(unary op) undefined for empty tree.\");\n-906 }\n-907 _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b<_\bL_\b> assignment;\n-908 return _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(root_->apply(op, assignment));\n-909 }\n-910\n-911 /\n-****************************************************************************/\n-912 template\n-_\b9_\b1_\b3 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b> _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\ba_\bp_\bp_\bl_\by(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be& g,\n-914 const Binary& op) const {\n-915 // It is unclear what should happen if either tree is empty:\n-916 if (empty() || g._\be_\bm_\bp_\bt_\by()) {\n-917 throw std::runtime_error(\n-918 \"DecisionTree::apply(binary op) undefined for empty trees.\");\n-919 }\n-920 // apply the operaton on the root of both diagrams\n-921 _\bN_\bo_\bd_\be_\bP_\bt_\br h = root_->apply_f_op_g(*g._\br_\bo_\bo_\bt_\b_, op);\n-922 // create a new class with the resulting root \"h\"\n-923 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be result(h);\n-924 return result;\n-925 }\n-926\n-927 /\n-****************************************************************************/\n-928 // The way this works:\n-929 // We have an ADT, picture it as a tree.\n-930 // At a certain depth, we have a branch on \"label\".\n-931 // The function \"choose(label,index)\" will return a tree of one less depth,\n-932 // where there is no more branch on \"label\": only the subtree under that\n-933 // branch point corresponding to the value \"index\" is left instead.\n-934 // The function below get all these smaller trees and \"ops\" them together.\n-935 // This implements marginalization in Darwiche09book, pg 330\n-936 template\n-_\b9_\b3_\b7 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b> _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bc_\bo_\bm_\bb_\bi_\bn_\be(const L& label,\n-938 size_t cardinality, const Binary& op) const {\n-939 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be result = choose(label, 0);\n-940 for (size_t index = 1; index < cardinality; index++) {\n-941 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be chosen = choose(label, index);\n-942 result = result.apply(chosen, op);\n-943 }\n-944 return result;\n-945 }\n-946\n-947 /\n-****************************************************************************/\n-948 template \n-_\b9_\b4_\b9 void _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bd_\bo_\bt(std::ostream& os,\n-950 const LabelFormatter& labelFormatter,\n-951 const ValueFormatter& valueFormatter,\n-952 bool showZero) const {\n-953 os << \"digraph G {\\n\";\n-954 root_->dot(os, labelFormatter, valueFormatter, showZero);\n-955 os << \" [ordering=out]}\" << std::endl;\n-956 }\n-957\n-958 template \n-_\b9_\b5_\b9 void _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bd_\bo_\bt(const std::string& name,\n-960 const LabelFormatter& labelFormatter,\n-961 const ValueFormatter& valueFormatter,\n-962 bool showZero) const {\n-963 std::ofstream os((name + \".dot\").c_str());\n-964 _\bd_\bo_\bt(os, labelFormatter, valueFormatter, showZero);\n-965 int result =\n-966 system((\"dot -Tpdf \" + name + \".dot -o \" + name + \".pdf >& /dev/null\")\n-967 .c_str());\n-968 if (result == -1)\n-969 throw std::runtime_error(\"DecisionTree::dot system call failed\");\n-970 }\n-971\n-972 template \n-_\b9_\b7_\b3 std::string _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bd_\bo_\bt(const LabelFormatter& labelFormatter,\n-974 const ValueFormatter& valueFormatter,\n-975 bool showZero) const {\n-976 std::stringstream ss;\n-977 _\bd_\bo_\bt(ss, labelFormatter, valueFormatter, showZero);\n-978 return ss.str();\n-979 }\n-980\n-981/\n-******************************************************************************/\n-982\n-983 } // 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+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+_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n+Variable ordering for the elimination algorithm.\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+_\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:_\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:_\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_\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:_\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:_\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:_\bL_\be_\ba_\bf_\b:_\b:_\bc_\bh_\bo_\bo_\bs_\be\n-NodePtr choose(const L &label, size_t index) const override\n-choose a branch, create new memory !\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:149\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_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-const Y & operator()(const Assignment< L > &x) const override\n-evaluate\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:110\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_\b:_\b:_\ba_\bp_\bp_\bl_\by\n-NodePtr apply(const UnaryAssignment &op, const Assignment< L > &assignment)\n-const override\n-Apply unary operator with assignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:121\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_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const Node &q, const CompareFunc &compare) const override\n-equality up to tolerance\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:87\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_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\b_\n-Y constant_\n-constant stored in this leaf\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:54\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_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s, const LabelFormatter &labelFormatter, const\n-ValueFormatter &valueFormatter) const override\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:94\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_\b:_\b:_\ba_\bp_\bp_\bl_\by\n-NodePtr apply(const Unary &op) const override\n-apply unary operator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:115\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_\b:_\b:_\bs_\ba_\bm_\be_\bL_\be_\ba_\bf\n-bool sameLeaf(const Leaf &q) const override\n-Leaf-Leaf equality.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:77\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_\b:_\b:_\bL_\be_\ba_\bf\n-Leaf(const Y &constant, size_t nrAssignments=1)\n-Constructor from constant.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:65\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_\b:_\b:_\bn_\br_\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\bs_\b_\n-size_t nrAssignments_\n-The number of assignments contained within this leaf.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:59\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_\b:_\b:_\bd_\bo_\bt\n-void dot(std::ostream &os, const LabelFormatter &labelFormatter, const\n-ValueFormatter &valueFormatter, bool showZero) const override\n-Write graphviz format to stream os.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:100\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_\b:_\b:_\bL_\be_\ba_\bf\n-Leaf()\n-Default constructor for serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:62\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_\b:_\b:_\bs_\ba_\bm_\be_\bL_\be_\ba_\bf\n-bool sameLeaf(const Node &q) const override\n-polymorphic equality: is q a leaf and is it the same as this leaf?\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:82\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_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt\n-const Y & constant() const\n-Return the constant.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:69\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_\b:_\b:_\bn_\br_\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\bs\n-size_t nrAssignments() const\n-Return the number of assignments contained within this leaf.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:74\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_\b:_\b:_\bC_\bh_\bo_\bi_\bc_\be_\b:_\b:_\ba_\bp_\bp_\bl_\by\n-NodePtr apply(const Unary &op) const override\n-apply unary operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:389\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_\b:_\b:_\bC_\bh_\bo_\bi_\bc_\be\n-Choice(const L &label, const Choice &f, const UnaryAssignment &op, const\n-Assignment< L > &assignment)\n-Constructor which accepts a UnaryAssignment op and the corresponding\n-assignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:369\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_\b:_\b:_\bl_\ba_\bb_\be_\bl\n-const L & label() const\n-Return the label of this choice node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:258\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_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s, const LabelFormatter &labelFormatter, const\n-ValueFormatter &valueFormatter) const override\n-print (as a tree).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:280\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_\b:_\b:_\ba_\bp_\bp_\bl_\by\n-NodePtr apply(const UnaryAssignment &op, const Assignment< L > &assignment)\n-const override\n-Apply unary operator with assignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:395\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_\b:_\b:_\bl_\ba_\bb_\be_\bl_\b_\n-L label_\n-the label of the variable on which we split\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:174\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_\b:_\b:_\bs_\ba_\bm_\be_\bL_\be_\ba_\bf\n-bool sameLeaf(const Node &q) const override\n-polymorphic equality: if q is a leaf, could be...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:318\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_\b:_\b:_\bC_\bh_\bo_\bi_\bc_\be\n-Choice(const Choice &f, const Choice &g, const Binary &op)\n-Construct from applying binary op to two Choice nodes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:230\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_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n-void push_back(const NodePtr &node)\n-add a branch: TODO merge into constructor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:271\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_\b:_\b:_\bb_\br_\ba_\bn_\bc_\bh_\be_\bs_\b_\n-std::vector< NodePtr > branches_\n-The children of this Choice node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:177\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_\b:_\b:_\bC_\bh_\bo_\bi_\bc_\be\n-Choice()\n-Default constructor for serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:190\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_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-const Y & operator()(const Assignment< L > &x) const override\n-evaluate\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:336\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_\b:_\b:_\bC_\bh_\bo_\bi_\bc_\be\n-Choice(const L &label, size_t count)\n-Constructor, given choice label and mandatory expected branch count.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:224\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_\b:_\b:_\bc_\bh_\bo_\bo_\bs_\be\n-NodePtr choose(const L &label, size_t index) const override\n-choose a branch, recursively\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:434\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_\b:_\b:_\bd_\bo_\bt\n-void dot(std::ostream &os, const LabelFormatter &labelFormatter, const\n-ValueFormatter &valueFormatter, bool showZero) const override\n-output to graphviz (as a a graph)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:290\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_\b:_\b:_\bs_\ba_\bm_\be_\bL_\be_\ba_\bf\n-bool sameLeaf(const Leaf &q) const override\n-Choice-Leaf equality: always false.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:313\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_\b:_\b:_\bU_\bn_\bi_\bq_\bu_\be\n-static NodePtr Unique(const ChoicePtr &f)\n-If all branches of a choice node f are the same, just return a branch.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:200\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_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const Node &q, const CompareFunc &compare) const override\n-equality\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:323\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\bi_\bs_\bi_\bt\n-Functor performing depth-first visit to each leaf with the leaf value as the\n-argument.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:715\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\b:_\b:_\bf\n-F f\n-folding function object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:718\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-void operator()(const typename DecisionTree< L, Y >::NodePtr &node) const\n-Do a depth-first visit on the tree rooted at node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:721\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\b:_\b:_\bV_\bi_\bs_\bi_\bt\n-Visit(F f)\n-Construct from folding function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:717\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\bL_\be_\ba_\bf\n-Functor performing depth-first visit to each leaf with the Leaf object passed\n-as an argument.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:752\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\bL_\be_\ba_\bf_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\bL_\be_\ba_\bf\n-VisitLeaf(F f)\n-Construct from folding function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:754\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\bL_\be_\ba_\bf_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-void operator()(const typename DecisionTree< L, Y >::NodePtr &node) const\n-Do a depth-first visit on the tree rooted at node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:758\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\bL_\be_\ba_\bf_\b:_\b:_\bf\n-F f\n-folding function object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:755\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\bW_\bi_\bt_\bh\n-Functor performing depth-first visit to each leaf with the leaf's Assignment\n-and value passed as a...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:786\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\bW_\bi_\bt_\bh_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\bW_\bi_\bt_\bh\n-VisitWith(F f)\n-Construct from folding function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:788\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\bW_\bi_\bt_\bh_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt\n-Assignment< L > assignment\n-Assignment, mutating through recursion.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:789\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\bW_\bi_\bt_\bh_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-void operator()(const typename DecisionTree< L, Y >::NodePtr &node)\n-Do a depth-first visit on the tree rooted at node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:793\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\bi_\bs_\bi_\bt_\bW_\bi_\bt_\bh_\b:_\b:_\bf\n-F f\n-folding function object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:790\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_\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_\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:_\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:_\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+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 * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * D\bDe\bec\bci\bis\bsi\bio\bon\bnT\bTr\bre\bee\be-\b-i\bin\bnl\bl.\b.h\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/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/DiscreteJunctionTree.h 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,51 +94,32 @@\n
\n
\n
\n
\n \n
\n \n-
DiscreteJunctionTree.h File Reference
\n+Namespaces
\n+
DiscreteDistribution.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::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-
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,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-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_\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+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-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 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_\bJ_\bu_\bn_\bc_\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._\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/DiscreteValues.cpp 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@@ -94,44 +94,36 @@\n
\n
\n
\n
\n \n
\n \n-
DiscreteValues.cpp File Reference
\n+Namespaces
\n+
AlgebraicDecisionTree.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

\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+
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,31 +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-DiscreteValues.cpp File Reference\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\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-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+ Feb 20, 2022\n Author\n+ Mike Sheffler\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_\bV_\ba_\bl_\bu_\be_\bs_\b._\bc_\bp_\bp\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/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/DiscreteFactor.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@@ -95,44 +95,83 @@\n
\n
\n
\n \n
\n \n-
DiscreteFactor.cpp File Reference
\n+Typedefs |\n+Functions |\n+Variables
\n+
Signature.cpp File Reference
\n
\n
\n \n-

discrete factor \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+\n+\n+

\n Functions

std::vector< double > gtsam::expNormalize (const std::vector< double > &logProbs)
 Normalize a set of log probabilities.
 
\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-

discrete factor

\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,28 +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 | _\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+_\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-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+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-discrete factor\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_\bF_\ba_\bc_\bt_\bo_\br_\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/a00209.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00209.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,5 @@\n var a00209 = [\n- [\"expNormalize\", \"a00209.html#ae1c1177c8725296b34601409322400ea\", null]\n+ [\"operator%\", \"a00209.html#ae4856250df52ce4b9b4b16c7a833408c\", null],\n+ [\"operator%\", \"a00209.html#ab98cf2a4777006c28d6983db5d8ec574\", null],\n+ [\"operator|\", \"a00209.html#aa6c58dfb2fc9398a026e3268ba2edfad\", null]\n ];\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/DiscreteBayesTree.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@@ -96,47 +96,43 @@\n
\n
\n \n
\n \n-
DiscreteBayesTree.h File Reference
\n+
DecisionTreeFactor.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::DiscreteBayesTreeClique
 A clique in a DiscreteBayesTree. More...
class  gtsam::DecisionTreeFactor
 A discrete probabilistic factor. More...
 
class  gtsam::DiscreteBayesTree
 A Bayes tree representing a Discrete density. More...
struct  gtsam::traits< DecisionTreeFactor >
 
\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 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+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_\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+ 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-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+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 *\b**\b**\b**\b**\b* D\bDe\bet\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 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_\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/a00212.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00212.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00212 = [\n- [\"gtsam::DiscreteBayesTreeClique\", \"a02824.html\", \"a02824\"]\n+ [\"gtsam::traits< DecisionTreeFactor >\", \"a02812.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00212_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00212_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/DiscreteBayesTree.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,134 +98,241 @@\n
No Matches
\n
\n
\n
\n
\n \n
\n-
DiscreteBayesTree.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
6 * Authors: Frank Dellaert, 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-
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+
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
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+
53 protected:
\n+
54 std::map<Key, size_t> cardinalities_;
\n+
55
\n+
56 public:
\n
59
\n-
60 //** evaluate conditional probability of subtree for given DiscreteValues */
\n-
61 double evaluate(const DiscreteValues& values) const;
\n+\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-
\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+
64 DecisionTreeFactor(const DiscreteKeys& keys, const ADT& potentials);
\n+
65
\n+\n+
86 const std::vector<double>& table);
\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-
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+
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+
specialized key for discrete variables
\n+
Algebraic Decision Trees.
\n+\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-
string html(const DiscreteValues &values, const KeyFormatter &keyFormatter, const DiscreteValues::Names &names)
Free version of html.
Definition DiscreteValues.cpp:134
\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 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 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 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+
Definition Ordering.h:34
\n+
the error.
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,155 +1,303 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DiscreteBayesTree.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 6 * Authors: Frank Dellaert, 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_\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+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 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+53 protected:\n+54 std::map cardinalities_;\n+55\n+56 public:\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+61 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br();\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-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+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 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-98\n-102\n-104 std::string markdown(const KeyFormatter& keyFormatter =\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 DefaultKeyFormatter,\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+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_\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_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\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:_\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+_\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 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:_\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:_\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:_\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_\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:_\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_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\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/a00215.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00215.html", "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.h File Reference\n \n \n \n \n \n \n \n@@ -95,44 +95,58 @@\n
\n
\n
\n \n
\n \n-
DiscreteConditional.h File Reference
\n+Namespaces |\n+Functions
\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+\n \n

\n Classes

class  gtsam::DiscreteConditional
 Discrete Conditional Density Derives from DecisionTreeFactor. More...
class  gtsam::DiscreteValues
 A map from keys to values. More...
 
struct  gtsam::traits< DiscreteConditional >
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+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

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,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-DiscreteConditional.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+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_\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+ 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_\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 _\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::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_\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._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00215.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00215.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,6 @@\n var a00215 = [\n- [\"gtsam::traits< DiscreteConditional >\", \"a02836.html\", null]\n+ [\"gtsam::traits< DiscreteValues >\", \"a02904.html\", null],\n+ [\"cartesianProduct\", \"a00215.html#a55a86a4657d82f6ff048a10d058c529f\", null],\n+ [\"html\", \"a00215.html#a147114735037c2260d4810a8820e72f6\", null],\n+ [\"markdown\", \"a00215.html#a2b6707b04064df79d26d1016dfa2a013\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00215_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00215_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/DiscreteConditional.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@@ -98,228 +98,136 @@\n
No Matches
\n
\n
\n
\n
\n \n
\n-
DiscreteConditional.h
\n+
DiscreteValues.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/inference/Conditional-inst.h>
\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+
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-
30namespace gtsam {
\n-
31
\n-
\n-
38class GTSAM_EXPORT DiscreteConditional
\n-
39 : public DecisionTreeFactor,
\n-
40 public Conditional<DecisionTreeFactor, DiscreteConditional> {
\n-
41 public:
\n-
42 // typedefs needed to play nice with gtsam
\n-\n-
44 typedef boost::shared_ptr<This> shared_ptr;
\n-\n-\n-\n-
48
\n-\n-
50
\n-
53
\n-\n-
56
\n-
58 DiscreteConditional(size_t nFrontals, const DecisionTreeFactor& f);
\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+
57 void print(const std::string& s = "",
\n+
58 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n
59
\n-
64 DiscreteConditional(size_t nFrontals, const DiscreteKeys& keys,
\n-
65 const ADT& potentials);
\n+
61 bool equals(const DiscreteValues& x, double tol = 1e-9) const;
\n+
62
\n
66
\n-
68 explicit DiscreteConditional(const Signature& signature);
\n-
69
\n-
\n-
77 DiscreteConditional(const DiscreteKey& key, const DiscreteKeys& parents,
\n-
78 const Signature::Table& table)
\n-
79 : DiscreteConditional(Signature(key, parents, table)) {}
\n-
\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+
75
\n+
79 DiscreteValues& update(const DiscreteValues& values);
\n
80
\n-
\n-
90 DiscreteConditional(const DiscreteKey& key, const DiscreteKeys& parents,
\n-
91 const std::string& spec)
\n-
92 : DiscreteConditional(Signature(key, parents, spec)) {}
\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-
\n-
95 DiscreteConditional(const DiscreteKey& key, const std::string& spec)
\n-
96 : DiscreteConditional(Signature(key, {}, spec)) {}
\n-
\n-
97
\n-
102 DiscreteConditional(const DecisionTreeFactor& joint,
\n-
103 const DecisionTreeFactor& marginal);
\n-
104
\n-
110 DiscreteConditional(const DecisionTreeFactor& joint,
\n-
111 const DecisionTreeFactor& marginal,
\n-
112 const Ordering& orderedKeys);
\n-
113
\n-
129 DiscreteConditional operator*(const DiscreteConditional& other) const;
\n-
130
\n-
132 DiscreteConditional marginal(Key key) const;
\n-
133
\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-
139 void print(
\n-
140 const std::string& s = "Discrete Conditional: ",
\n-
141 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
\n-
142
\n-
144 bool equals(const DiscreteFactor& other, double tol = 1e-9) const override;
\n-
145
\n-
149
\n-
\n-
151 double logProbability(const DiscreteValues& x) const {
\n-
152 return -error(x);
\n-
153 }
\n-
\n-
154
\n-
\n-\n-
157 const std::string& s = "Discrete Conditional: ",
\n-
158 const KeyFormatter& formatter = DefaultKeyFormatter) const {
\n-
159 static_cast<const BaseConditional*>(this)->print(s, formatter);
\n-
160 }
\n-
\n-
161
\n-
\n-
163 double evaluate(const DiscreteValues& values) const {
\n-
164 return ADT::operator()(values);
\n-
165 }
\n-
\n-
166
\n-
167 using DecisionTreeFactor::error;
\n-
168 using DecisionTreeFactor::operator();
\n-
169
\n-
183 shared_ptr choose(const DiscreteValues& given) const;
\n-
184
\n-
186 DecisionTreeFactor::shared_ptr likelihood(
\n-
187 const DiscreteValues& frontalValues) const;
\n-
188
\n-
190 DecisionTreeFactor::shared_ptr likelihood(size_t frontal) const;
\n-
191
\n-
197 size_t sample(const DiscreteValues& parentsValues) const;
\n-
198
\n-
200 size_t sample(size_t parent_value) const;
\n-
201
\n-
203 size_t sample() const;
\n-
204
\n-
209 size_t argmax() const;
\n-
210
\n-
214
\n-
216 void sampleInPlace(DiscreteValues* parentsValues) const;
\n-
217
\n-
219 std::vector<DiscreteValues> frontalAssignments() const;
\n-
220
\n-
222 std::vector<DiscreteValues> allAssignments() const;
\n-
223
\n-
227
\n-
229 std::string markdown(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
230 const Names& names = {}) const override;
\n-
231
\n-
233 std::string html(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
234 const Names& names = {}) const override;
\n-
235
\n-
236
\n-
240
\n-
245 double evaluate(const HybridValues& x) const override;
\n-
246
\n-
247 using BaseConditional::operator();
\n-
248
\n-
\n-
253 double logProbability(const HybridValues& x) const override {
\n-
254 return -error(x);
\n-
255 }
\n-
\n-
256
\n-
262 double logNormalizationConstant() const override { return 0.0; }
\n-
263
\n-
265
\n-
266#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n-
269 size_t GTSAM_DEPRECATED solve(const DiscreteValues& parentsValues) const;
\n-
270 void GTSAM_DEPRECATED solveInPlace(DiscreteValues* parentsValues) const;
\n-
272#endif
\n-
273
\n-
274 protected:
\n-
276 DiscreteConditional::ADT choose(const DiscreteValues& given,
\n-
277 bool forceComplete) const;
\n-
278
\n-
279 private:
\n-
281 friend class boost::serialization::access;
\n-
282 template <class Archive>
\n-
283 void serialize(Archive& ar, const unsigned int /*version*/) {
\n-
284 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseFactor);
\n-
285 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseConditional);
\n-
286 }
\n-
287};
\n-
\n-
288// DiscreteConditional
\n-
289
\n-
290// traits
\n-
291template <>
\n-
292struct traits<DiscreteConditional> : public Testable<DiscreteConditional> {};
\n-
293
\n-
294} // namespace gtsam
\n-
signatures for conditional densities
\n-\n-
std::pair< Key, size_t > DiscreteKey
Key type for discrete variables.
Definition DiscreteKey.h:36
\n+
138// traits
\n+
139template <>
\n+
140struct traits<DiscreteValues> : public Testable<DiscreteValues> {};
\n+
141
\n+
142} // namespace gtsam
\n+
specialized key for discrete variables
\n+
An assignment from labels to a discrete value index (size_t)
\n+\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-\n-
A discrete probabilistic factor.
Definition DecisionTreeFactor.h:45
\n-
Discrete Conditional Density Derives from DecisionTreeFactor.
Definition DiscreteConditional.h:40
\n-
DiscreteConditional(const DiscreteKey &key, const std::string &spec)
No-parent specialization; can also use DiscreteDistribution.
Definition DiscreteConditional.h:95
\n-
DiscreteConditional(const DiscreteKey &key, const DiscreteKeys &parents, const std::string &spec)
Construct from key, parents, and a string specifying the conditional probability table (CPT) in 00 01...
Definition DiscreteConditional.h:90
\n-
double evaluate(const DiscreteValues &values) const
Evaluate, just look up in AlgebraicDecisonTree.
Definition DiscreteConditional.h:163
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition DiscreteConditional.h:44
\n-
DiscreteConditional(const DiscreteKey &key, const DiscreteKeys &parents, const Signature::Table &table)
Construct from key, parents, and a Signature::Table specifying the conditional probability table (CPT...
Definition DiscreteConditional.h:77
\n-
Conditional< BaseFactor, This > BaseConditional
Typedef to our conditional base class.
Definition DiscreteConditional.h:47
\n-
double logProbability(const HybridValues &x) const override
< HybridValues version
Definition DiscreteConditional.h:253
\n-
DiscreteConditional This
Typedef to this class.
Definition DiscreteConditional.h:43
\n-
DecisionTreeFactor BaseFactor
Typedef to our factor base class.
Definition DiscreteConditional.h:45
\n-
DiscreteConditional()
Default constructor needed for serialization.
Definition DiscreteConditional.h:55
\n-
double logProbability(const DiscreteValues &x) const
Log-probability is just -error(x).
Definition DiscreteConditional.h:151
\n-
void printSignature(const std::string &s="Discrete Conditional: ", const KeyFormatter &formatter=DefaultKeyFormatter) const
print index signature only
Definition DiscreteConditional.h:156
\n-
double logNormalizationConstant() const override
logNormalizationConstant K is just zero, such that logProbability(x) = log(evaluate(x)) = - error(x) ...
Definition DiscreteConditional.h:262
\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-
Signature for a discrete conditional density, used to construct conditionals.
Definition Signature.h:54
\n-
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n-
Definition Conditional.h:64
\n-
the error.
\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,286 +1,168 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DiscreteConditional.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#pragma once\n-20\n-21#include \n-22#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-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh>\n-24\n-25#include \n-26#include \n-27#include \n-28#include \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-30namespace _\bg_\bt_\bs_\ba_\bm {\n-31\n-_\b3_\b8class GTSAM_EXPORT _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-39 : public _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br,\n-40 public _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl {\n-41 public:\n-42 // typedefs needed to play nice with gtsam\n-_\b4_\b3 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\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 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br;\n-46 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-_\b4_\b7 _\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl;\n-48\n-_\b4_\b9 using _\bV_\ba_\bl_\bu_\be_\bs = _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs;\n-50\n-53\n-_\b5_\b5 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl() {}\n-56\n-58 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(size_t nFrontals, const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br& f);\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+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-64 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(size_t nFrontals, const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& keys,\n-65 const ADT& potentials);\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-68 explicit _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(const _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be& signature);\n-69\n-_\b7_\b7 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(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-78 const Signature::Table& table)\n-79 : _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be(key, parents, table)) {}\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+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-_\b9_\b0 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(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-91 const std::string& spec)\n-92 : _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be(key, parents, spec)) {}\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 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key, const std::string& spec)\n-96 : _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be(key, {}, spec)) {}\n-97\n-102 DiscreteConditional(const DecisionTreeFactor& joint,\n-103 const DecisionTreeFactor& marginal);\n-104\n-110 DiscreteConditional(const DecisionTreeFactor& joint,\n-111 const DecisionTreeFactor& marginal,\n-112 const Ordering& orderedKeys);\n-113\n-129 DiscreteConditional operator*(const DiscreteConditional& other) const;\n-130\n-132 DiscreteConditional marginal(Key key) const;\n-133\n-137\n-139 void print(\n-140 const std::string& s = \"Discrete Conditional: \",\n-141 const KeyFormatter& formatter = DefaultKeyFormatter) const override;\n-142\n-144 bool equals(const DiscreteFactor& other, double tol = 1e-9) const override;\n-145\n-149\n-_\b1_\b5_\b1 double _\bl_\bo_\bg_\bP_\br_\bo_\bb_\ba_\bb_\bi_\bl_\bi_\bt_\by(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& x) const {\n-152 return -error(x);\n-153 }\n-154\n-_\b1_\b5_\b6 void _\bp_\br_\bi_\bn_\bt_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be(\n-157 const std::string& s = \"Discrete Conditional: \",\n-158 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const {\n-159 static_cast(this)->_\bp_\br_\bi_\bn_\bt(s, formatter);\n-160 }\n-161\n-_\b1_\b6_\b3 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-164 return ADT::operator()(values);\n-165 }\n-166\n-167 using DecisionTreeFactor::error;\n-168 using DecisionTreeFactor::operator();\n-169\n-183 shared_ptr choose(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& given) const;\n-184\n-186 DecisionTreeFactor::shared_ptr likelihood(\n-187 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& frontalValues) const;\n-188\n-190 DecisionTreeFactor::shared_ptr likelihood(size_t frontal) const;\n-191\n-197 size_t sample(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& parentsValues) const;\n-198\n-200 size_t sample(size_t parent_value) const;\n-201\n-203 size_t sample() const;\n-204\n-209 size_t argmax() const;\n-210\n-214\n-216 void sampleInPlace(_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs* parentsValues) const;\n-217\n-219 std::vector frontalAssignments() const;\n-220\n-222 std::vector allAssignments() const;\n-223\n-227\n-229 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+_\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-230 const Names& names = {}) const override;\n-231\n-233 std::string html(const KeyFormatter& keyFormatter = DefaultKeyFormatter,\n-234 const Names& names = {}) const override;\n-235\n-236\n-240\n-245 double evaluate(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& x) const override;\n-246\n-247 using BaseConditional::operator();\n-248\n-_\b2_\b5_\b3 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& x) const override {\n-254 return -error(x);\n-255 }\n-256\n-_\b2_\b6_\b2 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 override { return 0.0; }\n-263\n-265\n-266#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n-269 size_t GTSAM_DEPRECATED solve(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& parentsValues) const;\n-270 void GTSAM_DEPRECATED solveInPlace(_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs* parentsValues) const;\n-272#endif\n-273\n-274 protected:\n-276 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bA_\bD_\bT choose(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& given,\n-277 bool forceComplete) const;\n-278\n-279 private:\n-_\b2_\b8_\b1 friend class boost::serialization::access;\n-282 template \n-283 void serialize(Archive& ar, const unsigned int /*version*/) {\n-284 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br);\n-285 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl);\n-286 }\n-287};\n-288// DiscreteConditional\n-289\n-290// traits\n-291template <>\n-_\b2_\b9_\b2struct _\bt_\br_\ba_\bi_\bt_\bs<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-{};\n-293\n-294} // namespace gtsam\n-_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh\n-signatures for conditional densities\n-_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\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+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+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh\n+specialized key for discrete variables\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+_\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:_\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_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bK_\be_\by_\b _\b>\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_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-DiscreteConditional(const DiscreteKey &key, const std::string &spec)\n-No-parent specialization; can also use DiscreteDistribution.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:95\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:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-DiscreteConditional(const DiscreteKey &key, const DiscreteKeys &parents, const\n-std::string &spec)\n-Construct from key, parents, and a string specifying the conditional\n-probability table (CPT) in 00 01...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:90\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:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be\n-double evaluate(const DiscreteValues &values) const\n-Evaluate, just look up in AlgebraicDecisonTree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:163\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_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-DiscreteConditional(const DiscreteKey &key, const DiscreteKeys &parents, const\n-Signature::Table &table)\n-Construct from key, parents, and a Signature::Table specifying the conditional\n-probability table (CPT...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:77\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:_\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 DiscreteConditional.h:47\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:_\bl_\bo_\bg_\bP_\br_\bo_\bb_\ba_\bb_\bi_\bl_\bi_\bt_\by\n-double logProbability(const HybridValues &x) const override\n-< HybridValues version\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:253\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:_\bT_\bh_\bi_\bs\n-DiscreteConditional This\n-Typedef to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:43\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:_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n-DecisionTreeFactor BaseFactor\n-Typedef to our factor base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.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_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-DiscreteConditional()\n-Default constructor needed for serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:55\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:_\bl_\bo_\bg_\bP_\br_\bo_\bb_\ba_\bb_\bi_\bl_\bi_\bt_\by\n-double logProbability(const DiscreteValues &x) const\n-Log-probability is just -error(x).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.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_\b:_\b:_\bp_\br_\bi_\bn_\bt_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n-void printSignature(const std::string &s=\"Discrete Conditional: \", const\n-KeyFormatter &formatter=DefaultKeyFormatter) const\n-print index signature only\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:156\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:_\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-double logNormalizationConstant() const override\n-logNormalizationConstant K is just zero, such that logProbability(x) = log\n-(evaluate(x)) = - error(x) ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:262\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:_\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:_\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-_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-the error.\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 * _\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._\bh\n * Generated on Tue Jan 9 2024 05:51: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/DiscreteEliminationTree.cpp 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@@ -94,34 +94,49 @@\n
\n
\n
\n
\n \n
\n \n-
DiscreteEliminationTree.cpp File Reference
\n+
DiscreteMarginals.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+Classes

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

Detailed Description

\n-
Date
Mar 29, 2013
\n-
Author
Frank Dellaert
\n+

A class for computing marginals in a DiscreteFactorGraph.

\n+
Author
Abhijit Kundu
\n+
\n+Richard Roberts
\n
\n-Richard Roberts
\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,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-DiscreteEliminationTree.cpp File Reference\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+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 *\b**\b**\b**\b**\b* D\bDe\bet\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+A class for computing marginals in a DiscreteFactorGraph.\n Author\n- Frank Dellaert\n+ Abhijit Kundu\n Richard Roberts\n+ Frank Dellaert\n+ Date\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_\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_\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.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/DecisionTree.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,73 +95,44 @@\n
\n
\n
\n \n
\n \n-
DecisionTree.h File Reference
\n+Namespaces
\n+
Assignment.h File Reference
\n
\n
\n \n-

Decision Tree for use in DiscreteFactors. \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-\n+\n+\n \n

\n Classes

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

Detailed Description

\n-

Decision Tree for use in DiscreteFactors.

\n-
Author
Frank Dellaert
\n-
\n-Can Erdogan
\n-
Date
Jan 30, 2012
\n+

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

\n+
Author
Frank Dellaert
\n+
Date
Feb 5, 2012
\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,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-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\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:_\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+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-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-Decision Tree for use in DiscreteFactors.\n+An assignment from labels to a discrete value index (size_t)\n Author\n Frank Dellaert\n- Can Erdogan\n Date\n- Jan 30, 2012\n+ Feb 5, 2012\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+ * _\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/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/DecisionTree.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,333 +98,110 @@\n
No Matches
\n
\n
\n
\n
\n \n
\n-
DecisionTree.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-
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+
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+
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+
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-
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+
110}; // Assignment
\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-
Concept check for values that can be used in unit tests.
\n-
Typedefs for easier changing of types.
\n-
An assignment from labels to a discrete value index (size_t)
\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-
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+
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": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-utf-8\n+us-ascii\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,417 +1,111 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DecisionTree.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 6 * Authors: Frank Dellaert, 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-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+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+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+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\n-109 // Unique ID for dot files\n-110 const void* id() const { return this; }\n+108 return allPossValues;\n+109 }\n+110}; // Assignment\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_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n-_\bt_\by_\bp_\be_\bs_\b._\bh\n-Typedefs for easier changing of types.\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+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:_\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_\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- * _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\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/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/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/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/DiscreteBayesTree.h File Reference\n \n \n \n \n \n \n \n@@ -95,57 +95,48 @@\n \n \n \n \n
\n \n-
DiscreteFactorGraph.h File Reference
\n+Namespaces
\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+\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...
class  gtsam::DiscreteBayesTreeClique
 A clique in a DiscreteBayesTree. More...
 
struct  gtsam::traits< DiscreteFactorGraph >
 traits 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-\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 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,45 +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-DiscreteFactorGraph.h File Reference\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-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+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_\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+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-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 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_\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 * Generated on Tue Jan 9 2024 05:51: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.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00230.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,6 +1,3 @@\n var a00230 = [\n- [\"gtsam::EliminationTraits< DiscreteFactorGraph >\", \"a02860.html\", \"a02860\"],\n- [\"gtsam::traits< DiscreteFactorGraph >\", \"a02868.html\", null],\n- [\"EliminateDiscrete\", \"a00230.html#ga6996e9c84467350b071645649231223a\", null],\n- [\"EliminateForMPE\", \"a00230.html#ga9bd0b2859a7513198a369f5de3c8cde3\", null]\n+ [\"gtsam::DiscreteBayesTreeClique\", \"a02824.html\", \"a02824\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00230_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00230_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/DiscreteFactorGraph.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,233 +98,134 @@\n
No Matches
\n \n \n \n \n \n
\n-
DiscreteFactorGraph.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-\n-
26#include <gtsam/base/FastSet.h>
\n-
27
\n-
28#include <boost/make_shared.hpp>
\n+
21#pragma once
\n+
22
\n+\n+\n+\n+\n+\n+
28
\n
29#include <string>
\n-
30#include <utility>
\n-
31#include <vector>
\n+
30
\n+
31namespace gtsam {
\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+
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
\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+
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-
\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+
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-
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-\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-
Variable elimination algorithms for factor graphs.
\n-
Factor Graph Base Class.
\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+
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-
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+
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-\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 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-
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+
DiscreteBayesTree()
Default constructor, creates an empty Bayes tree.
Definition DiscreteBayesTree.h:86
\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+
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": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-utf-8\n+us-ascii\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,352 +1,155 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DiscreteFactorGraph.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/_\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+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#include \n-31#include \n+30\n+31namespace _\bg_\bt_\bs_\ba_\bm {\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+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+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 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+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-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+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_\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+_\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-_\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-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+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-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_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG_\b._\bh\n-_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\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-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-_\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+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_\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_\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:_\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+_\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:_\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+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:_\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_\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_\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 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_\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:_\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:_\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_\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 * Generated on Tue Jan 9 2024 05:51: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.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00233.html", "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/DiscreteValues.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,45 +94,44 @@\n \n \n \n \n \n
\n \n-
DiscreteBayesNet.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::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+\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 15, 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-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+_\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 15, 2011\n+ January, 2022\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_\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/a00233.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00233.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,4 @@\n var a00233 = [\n- [\"gtsam::traits< DiscreteBayesNet >\", \"a02820.html\", null]\n+ [\"html\", \"a00233.html#a147114735037c2260d4810a8820e72f6\", null],\n+ [\"markdown\", \"a00233.html#a2b6707b04064df79d26d1016dfa2a013\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00236.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00236.html", "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/DiscreteConditional.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+
DiscreteConditional.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::Signature
 Signature for a discrete conditional density, used to construct conditionals. More...
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-\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-
Author
Frank Dellaert
\n-
Date
Feb 27, 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,42 +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-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+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:_\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:_\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-_\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+ 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._\bh\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/a00236.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00236.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,3 @@\n var a00236 = [\n- [\"operator%\", \"a00236.html#ae4856250df52ce4b9b4b16c7a833408c\", null],\n- [\"operator%\", \"a00236.html#ab98cf2a4777006c28d6983db5d8ec574\", null],\n- [\"operator|\", \"a00236.html#aa6c58dfb2fc9398a026e3268ba2edfad\", null]\n+ [\"gtsam::traits< DiscreteConditional >\", \"a02836.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00236_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00236_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/DiscreteConditional.h Source File\n \n \n \n \n \n \n \n@@ -98,112 +98,228 @@\n
No Matches
\n \n \n \n \n \n
\n-
Signature.h
\n+
DiscreteConditional.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+
20
\n+
21#include <gtsam/inference/Conditional-inst.h>
\n+\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+
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+
31
\n+
\n+
38class GTSAM_EXPORT DiscreteConditional
\n+
39 : public DecisionTreeFactor,
\n+
40 public Conditional<DecisionTreeFactor, DiscreteConditional> {
\n+
41 public:
\n+
42 // typedefs needed to play nice with gtsam
\n+\n+
44 typedef boost::shared_ptr<This> shared_ptr;
\n+\n+\n+\n+
48
\n+\n+
50
\n+
53
\n+\n+
56
\n+
58 DiscreteConditional(size_t nFrontals, const DecisionTreeFactor& f);
\n+
59
\n+
64 DiscreteConditional(size_t nFrontals, const DiscreteKeys& keys,
\n+
65 const ADT& potentials);
\n
66
\n-
68 DiscreteKeys parents_;
\n+
68 explicit DiscreteConditional(const Signature& signature);
\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-
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+
\n+
77 DiscreteConditional(const DiscreteKey& key, const DiscreteKeys& parents,
\n+
78 const Signature::Table& table)
\n+
79 : DiscreteConditional(Signature(key, parents, table)) {}
\n+
\n+
80
\n+
\n+
90 DiscreteConditional(const DiscreteKey& key, const DiscreteKeys& parents,
\n+
91 const std::string& spec)
\n+
92 : DiscreteConditional(Signature(key, parents, spec)) {}
\n+
\n+
93
\n+
\n+
95 DiscreteConditional(const DiscreteKey& key, const std::string& spec)
\n+
96 : DiscreteConditional(Signature(key, {}, spec)) {}
\n+
\n+
97
\n+
102 DiscreteConditional(const DecisionTreeFactor& joint,
\n+
103 const DecisionTreeFactor& marginal);
\n
104
\n-
112 Signature(const DiscreteKey& key);
\n+
110 DiscreteConditional(const DecisionTreeFactor& joint,
\n+
111 const DecisionTreeFactor& marginal,
\n+
112 const Ordering& orderedKeys);
\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+
129 DiscreteConditional operator*(const DiscreteConditional& other) const;
\n+
130
\n+
132 DiscreteConditional marginal(Key key) const;
\n+
133
\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+
139 void print(
\n+
140 const std::string& s = "Discrete Conditional: ",
\n+
141 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
\n+
142
\n+
144 bool equals(const DiscreteFactor& other, double tol = 1e-9) const override;
\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+
149
\n+
\n+
151 double logProbability(const DiscreteValues& x) const {
\n+
152 return -error(x);
\n+
153 }
\n+
\n+
154
\n+
\n+\n+
157 const std::string& s = "Discrete Conditional: ",
\n+
158 const KeyFormatter& formatter = DefaultKeyFormatter) const {
\n+
159 static_cast<const BaseConditional*>(this)->print(s, formatter);
\n+
160 }
\n+
\n+
161
\n+
\n+
163 double evaluate(const DiscreteValues& values) const {
\n+
164 return ADT::operator()(values);
\n+
165 }
\n+
\n+
166
\n+
167 using DecisionTreeFactor::error;
\n+
168 using DecisionTreeFactor::operator();
\n+
169
\n+
183 shared_ptr choose(const DiscreteValues& given) const;
\n+
184
\n+
186 DecisionTreeFactor::shared_ptr likelihood(
\n+
187 const DiscreteValues& frontalValues) const;
\n+
188
\n+
190 DecisionTreeFactor::shared_ptr likelihood(size_t frontal) const;
\n+
191
\n+
197 size_t sample(const DiscreteValues& parentsValues) const;
\n+
198
\n+
200 size_t sample(size_t parent_value) const;
\n+
201
\n+
203 size_t sample() const;
\n+
204
\n+
209 size_t argmax() const;
\n+
210
\n+
214
\n+
216 void sampleInPlace(DiscreteValues* parentsValues) const;
\n+
217
\n+
219 std::vector<DiscreteValues> frontalAssignments() const;
\n+
220
\n+
222 std::vector<DiscreteValues> allAssignments() const;
\n+
223
\n+
227
\n+
229 std::string markdown(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
230 const Names& names = {}) const override;
\n+
231
\n+
233 std::string html(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
234 const Names& names = {}) const override;
\n+
235
\n+
236
\n+
240
\n+
245 double evaluate(const HybridValues& x) const override;
\n+
246
\n+
247 using BaseConditional::operator();
\n+
248
\n+
\n+
253 double logProbability(const HybridValues& x) const override {
\n+
254 return -error(x);
\n+
255 }
\n+
\n+
256
\n+
262 double logNormalizationConstant() const override { return 0.0; }
\n+
263
\n+
265
\n+
266#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n+
269 size_t GTSAM_DEPRECATED solve(const DiscreteValues& parentsValues) const;
\n+
270 void GTSAM_DEPRECATED solveInPlace(DiscreteValues* parentsValues) const;
\n+
272#endif
\n+
273
\n+
274 protected:
\n+
276 DiscreteConditional::ADT choose(const DiscreteValues& given,
\n+
277 bool forceComplete) const;
\n+
278
\n+
279 private:
\n+
281 friend class boost::serialization::access;
\n+
282 template <class Archive>
\n+
283 void serialize(Archive& ar, const unsigned int /*version*/) {
\n+
284 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseFactor);
\n+
285 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseConditional);
\n+
286 }
\n+
287};
\n+
\n+
288// DiscreteConditional
\n+
289
\n+
290// traits
\n+
291template <>
\n+
292struct traits<DiscreteConditional> : public Testable<DiscreteConditional> {};
\n+
293
\n+
294} // namespace gtsam
\n+
signatures for conditional densities
\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-
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+
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+\n+
A discrete probabilistic factor.
Definition DecisionTreeFactor.h:45
\n+
Discrete Conditional Density Derives from DecisionTreeFactor.
Definition DiscreteConditional.h:40
\n+
DiscreteConditional(const DiscreteKey &key, const std::string &spec)
No-parent specialization; can also use DiscreteDistribution.
Definition DiscreteConditional.h:95
\n+
DiscreteConditional(const DiscreteKey &key, const DiscreteKeys &parents, const std::string &spec)
Construct from key, parents, and a string specifying the conditional probability table (CPT) in 00 01...
Definition DiscreteConditional.h:90
\n+
double evaluate(const DiscreteValues &values) const
Evaluate, just look up in AlgebraicDecisonTree.
Definition DiscreteConditional.h:163
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition DiscreteConditional.h:44
\n+
DiscreteConditional(const DiscreteKey &key, const DiscreteKeys &parents, const Signature::Table &table)
Construct from key, parents, and a Signature::Table specifying the conditional probability table (CPT...
Definition DiscreteConditional.h:77
\n+
Conditional< BaseFactor, This > BaseConditional
Typedef to our conditional base class.
Definition DiscreteConditional.h:47
\n+
double logProbability(const HybridValues &x) const override
< HybridValues version
Definition DiscreteConditional.h:253
\n+
DiscreteConditional This
Typedef to this class.
Definition DiscreteConditional.h:43
\n+
DecisionTreeFactor BaseFactor
Typedef to our factor base class.
Definition DiscreteConditional.h:45
\n+
DiscreteConditional()
Default constructor needed for serialization.
Definition DiscreteConditional.h:55
\n+
double logProbability(const DiscreteValues &x) const
Log-probability is just -error(x).
Definition DiscreteConditional.h:151
\n+
void printSignature(const std::string &s="Discrete Conditional: ", const KeyFormatter &formatter=DefaultKeyFormatter) const
print index signature only
Definition DiscreteConditional.h:156
\n+
double logNormalizationConstant() const override
logNormalizationConstant K is just zero, such that logProbability(x) = log(evaluate(x)) = - error(x) ...
Definition DiscreteConditional.h:262
\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
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+
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n+
Definition Conditional.h:64
\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-Signature.h\n+DiscreteConditional.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,272 @@\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+20\n+21#include \n+22#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+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\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+25#include \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_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+39 : public _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br,\n+40 public _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl {\n+41 public:\n+42 // typedefs needed to play nice with gtsam\n+_\b4_\b3 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\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 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br;\n+46 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+_\b4_\b7 _\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl;\n+48\n+_\b4_\b9 using _\bV_\ba_\bl_\bu_\be_\bs = _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs;\n+50\n+53\n+_\b5_\b5 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl() {}\n+56\n+58 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(size_t nFrontals, const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br& f);\n+59\n+64 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(size_t nFrontals, const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& keys,\n+65 const ADT& potentials);\n 66\n-68 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs parents_;\n+68 explicit _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(const _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be& signature);\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-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+_\b7_\b7 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(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+78 const Signature::Table& table)\n+79 : _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be(key, parents, table)) {}\n+80\n+_\b9_\b0 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(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+91 const std::string& spec)\n+92 : _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be(key, parents, spec)) {}\n+93\n+_\b9_\b5 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key, const std::string& spec)\n+96 : _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be(key, {}, spec)) {}\n+97\n+102 DiscreteConditional(const DecisionTreeFactor& joint,\n+103 const DecisionTreeFactor& marginal);\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+110 DiscreteConditional(const DecisionTreeFactor& joint,\n+111 const DecisionTreeFactor& marginal,\n+112 const Ordering& orderedKeys);\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+129 DiscreteConditional operator*(const DiscreteConditional& other) const;\n+130\n+132 DiscreteConditional marginal(Key key) const;\n+133\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+139 void print(\n+140 const std::string& s = \"Discrete Conditional: \",\n+141 const KeyFormatter& formatter = DefaultKeyFormatter) const override;\n+142\n+144 bool equals(const DiscreteFactor& other, double tol = 1e-9) const override;\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+149\n+_\b1_\b5_\b1 double _\bl_\bo_\bg_\bP_\br_\bo_\bb_\ba_\bb_\bi_\bl_\bi_\bt_\by(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& x) const {\n+152 return -error(x);\n+153 }\n+154\n+_\b1_\b5_\b6 void _\bp_\br_\bi_\bn_\bt_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be(\n+157 const std::string& s = \"Discrete Conditional: \",\n+158 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const {\n+159 static_cast(this)->_\bp_\br_\bi_\bn_\bt(s, formatter);\n+160 }\n+161\n+_\b1_\b6_\b3 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+164 return ADT::operator()(values);\n+165 }\n+166\n+167 using DecisionTreeFactor::error;\n+168 using DecisionTreeFactor::operator();\n+169\n+183 shared_ptr choose(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& given) const;\n+184\n+186 DecisionTreeFactor::shared_ptr likelihood(\n+187 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& frontalValues) const;\n+188\n+190 DecisionTreeFactor::shared_ptr likelihood(size_t frontal) const;\n+191\n+197 size_t sample(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& parentsValues) const;\n+198\n+200 size_t sample(size_t parent_value) const;\n+201\n+203 size_t sample() const;\n+204\n+209 size_t argmax() const;\n+210\n+214\n+216 void sampleInPlace(_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs* parentsValues) const;\n+217\n+219 std::vector frontalAssignments() const;\n+220\n+222 std::vector allAssignments() const;\n+223\n+227\n+229 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+230 const Names& names = {}) const override;\n+231\n+233 std::string html(const KeyFormatter& keyFormatter = DefaultKeyFormatter,\n+234 const Names& names = {}) const override;\n+235\n+236\n+240\n+245 double evaluate(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& x) const override;\n+246\n+247 using BaseConditional::operator();\n+248\n+_\b2_\b5_\b3 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& x) const override {\n+254 return -error(x);\n+255 }\n+256\n+_\b2_\b6_\b2 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 override { return 0.0; }\n+263\n+265\n+266#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n+269 size_t GTSAM_DEPRECATED solve(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& parentsValues) const;\n+270 void GTSAM_DEPRECATED solveInPlace(_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs* parentsValues) const;\n+272#endif\n+273\n+274 protected:\n+276 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bA_\bD_\bT choose(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& given,\n+277 bool forceComplete) const;\n+278\n+279 private:\n+_\b2_\b8_\b1 friend class boost::serialization::access;\n+282 template \n+283 void serialize(Archive& ar, const unsigned int /*version*/) {\n+284 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br);\n+285 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl);\n+286 }\n+287};\n+288// DiscreteConditional\n+289\n+290// traits\n+291template <>\n+_\b2_\b9_\b2struct _\bt_\br_\ba_\bi_\bt_\bs<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+{};\n+293\n+294} // namespace gtsam\n+_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh\n+signatures for conditional densities\n+_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\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:_\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:_\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:_\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:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bK_\be_\by_\b _\b>\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_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+DiscreteConditional(const DiscreteKey &key, const std::string &spec)\n+No-parent specialization; can also use DiscreteDistribution.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:95\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:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+DiscreteConditional(const DiscreteKey &key, const DiscreteKeys &parents, const\n+std::string &spec)\n+Construct from key, parents, and a string specifying the conditional\n+probability table (CPT) in 00 01...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:90\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:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be\n+double evaluate(const DiscreteValues &values) const\n+Evaluate, just look up in AlgebraicDecisonTree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:163\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_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+DiscreteConditional(const DiscreteKey &key, const DiscreteKeys &parents, const\n+Signature::Table &table)\n+Construct from key, parents, and a Signature::Table specifying the conditional\n+probability table (CPT...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:77\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:_\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 DiscreteConditional.h:47\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:_\bl_\bo_\bg_\bP_\br_\bo_\bb_\ba_\bb_\bi_\bl_\bi_\bt_\by\n+double logProbability(const HybridValues &x) const override\n+< HybridValues version\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:253\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:_\bT_\bh_\bi_\bs\n+DiscreteConditional This\n+Typedef to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:43\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:_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n+DecisionTreeFactor BaseFactor\n+Typedef to our factor base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.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_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+DiscreteConditional()\n+Default constructor needed for serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:55\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:_\bl_\bo_\bg_\bP_\br_\bo_\bb_\ba_\bb_\bi_\bl_\bi_\bt_\by\n+double logProbability(const DiscreteValues &x) const\n+Log-probability is just -error(x).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.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_\b:_\b:_\bp_\br_\bi_\bn_\bt_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n+void printSignature(const std::string &s=\"Discrete Conditional: \", const\n+KeyFormatter &formatter=DefaultKeyFormatter) const\n+print index signature only\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:156\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:_\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+double logNormalizationConstant() const override\n+logNormalizationConstant K is just zero, such that logProbability(x) = log\n+(evaluate(x)) = - error(x) ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:262\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:_\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:_\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+_\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- * _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\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 * Generated on Tue Jan 9 2024 05:51: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/a00239.html", "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/DiscreteConditional.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,62 +94,41 @@\n \n \n \n \n \n
\n \n-
DiscreteKey.h File Reference
\n+Variables
\n+
DiscreteConditional.cpp File Reference
\n \n
\n-\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+\n+\n

\n-Functions

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

\n+Variables

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

Detailed Description

\n-

specialized key for discrete variables

\n-
Author
Frank Dellaert
\n-
Date
Feb 28, 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,39 +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-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+_\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-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+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-specialized key for discrete variables\n+ Date\n+ Feb 14, 2011\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_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\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/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/DiscreteConditional.cpp 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@@ -94,41 +94,50 @@\n \n \n \n \n \n
\n \n-
DiscreteConditional.cpp File Reference
\n+Classes |\n+Namespaces
\n+
AlgebraicDecisionTree.h 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-\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+

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,25 +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 | _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n-DiscreteConditional.cpp File Reference\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 N\bNa\bam\bme\bes\bsp\bpa\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+Algebraic Decision Trees.\n Author\n- Duy-Nguyen Ta\n Frank Dellaert\n+ Date\n+ Mar 14, 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_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bc_\bp_\bp\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/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/DiscreteBayesTree.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,37 +94,43 @@\n \n \n \n \n \n
\n \n-
DiscreteBayesTree.cpp File Reference
\n+
DiscreteEliminationTree.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+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-

Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree.

\n-

DiscreteBayesTree

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,22 +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-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+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-Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree.\n-DiscreteBayesTree\n+ Date\n+ Mar 29, 2013\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_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\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/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/DiscreteLookupDAG.h 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@@ -94,46 +94,34 @@\n \n \n \n \n \n
\n \n-
DiscreteLookupDAG.h File Reference
\n+
DiscreteLookupDAG.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

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+
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,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-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+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- January, 2022\n+ Feb 14, 2011\n Author\n- Frank dellaert\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_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG_\b._\bh\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/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/DecisionTreeFactor.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,44 +95,51 @@\n \n \n \n \n
\n \n-
DecisionTreeFactor.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::DecisionTreeFactor
 A discrete probabilistic factor. More...
class  gtsam::DiscreteFactor
 Base class for discrete probabilistic factors The most general one is the derived DecisionTreeFactor. More...
 
struct  gtsam::traits< DecisionTreeFactor >
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
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,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-DecisionTreeFactor.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_\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_\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_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\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_\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 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_\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_\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/a00251.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00251.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,4 @@\n var a00251 = [\n- [\"gtsam::traits< DecisionTreeFactor >\", \"a02812.html\", null]\n+ [\"gtsam::traits< DiscreteFactor >\", \"a02856.html\", null],\n+ [\"expNormalize\", \"a00251.html#ae1c1177c8725296b34601409322400ea\", null]\n ];\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/DecisionTreeFactor.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,15 +98,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
DecisionTreeFactor.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@@ -114,225 +114,127 @@\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-
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+\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
65
\n-\n-
86 const std::vector<double>& table);
\n-
87
\n-
106 DecisionTreeFactor(const DiscreteKeys& keys, const std::string& table);
\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-
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+
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 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-
specialized key for discrete variables
\n-\n-
Variable ordering for the elimination algorithm.
\n-
std::pair< Key, size_t > DiscreteKey
Key type for discrete variables.
Definition DiscreteKey.h:36
\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-
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::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-
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+
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-
Definition Ordering.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,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DecisionTreeFactor.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@@ -16,288 +16,181 @@\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-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+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 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-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+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 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+_\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 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-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_\bK_\be_\by_\b._\bh\n-specialized key for discrete variables\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\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:_\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+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:_\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:_\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:_\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_\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:_\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_\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_\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_\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/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/Signature.cpp 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@@ -94,84 +94,51 @@\n \n \n \n \n \n
\n \n-
Signature.cpp File Reference
\n+Typedefs
\n+
DiscreteJunctionTree.h File Reference
\n \n
\n \n-

signatures for conditional densities \n-More...

\n+

Go to the source code of this file.

\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...
 
\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+\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+using gtsam::DiscreteCluster = DiscreteJunctionTree::Cluster
 typedef for wrapper:
 
\n

Detailed Description

\n-

signatures for conditional densities

\n-
Author
Frank Dellaert
\n-
Date
Feb 27, 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,57 +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 | _\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+_\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_\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-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+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-signatures for conditional densities\n+ Date\n+ Mar 29, 2013\n Author\n Frank Dellaert\n- Date\n- Feb 27, 2011\n+ Richard Roberts\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_\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/a00254.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00254.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,3 @@\n var a00254 = [\n- [\"operator%\", \"a00254.html#ae4856250df52ce4b9b4b16c7a833408c\", null],\n- [\"operator%\", \"a00254.html#ab98cf2a4777006c28d6983db5d8ec574\", null],\n- [\"operator|\", \"a00254.html#aa6c58dfb2fc9398a026e3268ba2edfad\", null]\n+ [\"DiscreteCluster\", \"a00254.html#aa8c26fa5afbbfd23795d7d421e543a81\", 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/AlgebraicDecisionTree.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@@ -95,35 +95,37 @@\n \n \n \n \n
\n \n-
AlgebraicDecisionTree.cpp File Reference
\n+
DecisionTreeFactor.cpp File Reference
\n
\n
\n+\n+

discrete factor \n+More...

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

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,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-AlgebraicDecisionTree.cpp File Reference\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 *\b**\b**\b**\b**\b* D\bDe\bet\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 20, 2022\n+ Feb 14, 2011\n Author\n- Mike Sheffler\n Duy-Nguyen Ta\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_\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/a00260_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00260_source.html", "has_internal_linenos": true, "unified_diff": "@@ -25,950 +25,12888 @@\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 6973 6372 6574 6545 6c69 6d69 te/DiscreteElimi\n-00000200: 6e61 7469 6f6e 5472 6565 2e68 2053 6f75 nationTree.h Sou\n-00000210: 7263 6520 4669 6c65 3c2f 7469 746c 653e rce File\n-00000220: 0a3c 6c69 6e6b 2068 7265 663d 2274 6162 ...\n-000002d0: 0a3c 6c69 6e6b 2068 7265 663d 226e 6176 .....\n-00000400: 3c73 6372 6970 7420 7479 7065 3d22 7465 .<\n-00000890: 2f73 6372 6970 743e 0a3c 7363 7269 7074 /script>..\n-000008d0: 3c73 6372 6970 7420 7479 7065 3d22 7465 .\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 3236 305f 736f vTree('a00260_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: 0a3c 2f64 6976 3e0a 0a3c 6469 7620 636c .
..
. \n-00000fa0: 3c64 6976 2063 6c61 7373 3d22 6865 6164
Disc\n-00000fd0: 7265 7465 456c 696d 696e 6174 696f 6e54 reteEliminationT\n-00000fe0: 7265 652e 683c 2f64 6976 3e3c 2f64 6976 ree.h
.
.
.Go to the doc\n-00001040: 756d 656e 7461 7469 6f6e 206f 6620 7468 umentation of th\n-00001050: 6973 2066 696c 652e 3c2f 613e 3c64 6976 is file.
1<\n-000010c0: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span>/* -\n-000010e0: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------\n-000010f0: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------\n-00001100: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------\n-00001110: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------\n-00001120: 2d2d 2d2d 2d2d 2d2d 2d2d 2d3c 2f73 7061 -----------
.
2 .
3<\n-00001200: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span> * G\n-00001220: 5453 414d 2043 6f70 7972 6967 6874 2032 TSAM Copyright 2\n-00001230: 3031 302c 2047 656f 7267 6961 2054 6563 010, Georgia Tec\n-00001240: 6820 5265 7365 6172 6368 2043 6f72 706f h Research Corpo\n-00001250: 7261 7469 6f6e 2c3c 2f73 7061 6e3e 3c2f ration,.
\n-000012b0: 2034 3c2f 7370 616e 3e3c 7370 616e 2063 4 \n-000012d0: 2a20 4174 6c61 6e74 612c 2047 656f 7267 * Atlanta, Georg\n-000012e0: 6961 2033 3033 3332 2d30 3431 353c 2f73 ia 30332-0415
.
5<\n-00001350: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-00001360: 656e 7422 3e20 2a20 416c 6c20 5269 6768 ent\"> * All Righ\n-00001370: 7473 2052 6573 6572 7665 643c 2f73 7061 ts Reserved
.
6 * Authors: F\n-00001400: 7261 6e6b 2044 656c 6c61 6572 742c 2065 rank Dellaert, e\n-00001410: 7420 616c 2e20 2873 6565 2054 4841 4e4b t al. (see THANK\n-00001420: 5320 666f 7220 7468 6520 6675 6c6c 2061 S for the full a\n-00001430: 7574 686f 7220 6c69 7374 293c 2f73 7061 uthor list)
.
7 .
8<\n-00001510: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span> * S\n-00001530: 6565 204c 4943 454e 5345 2066 6f72 2074 ee LICENSE for t\n-00001540: 6865 206c 6963 656e 7365 2069 6e66 6f72 he license infor\n-00001550: 6d61 7469 6f6e 3c2f 7370 616e 3e3c 2f64 mation.
\n-000015b0: 393c 2f73 7061 6e3e 3c73 7061 6e20 636c 9
.<\n-000015f0: 6120 6964 3d22 6c30 3030 3130 2220 6e61 a id=\"l00010\" na\n-00001600: 6d65 3d22 6c30 3030 3130 223e 3c2f 613e me=\"l00010\">\n-00001610: 3c73 7061 6e20 636c 6173 733d 226c 696e 10 * ------\n-00001650: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------\n-00001660: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------\n-00001670: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------\n-00001680: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------\n-00001690: 2d2d 2d2d 202a 2f3c 2f73 7061 6e3e 3c2f ---- */.
\n-000016f0: 3131 3c2f 7370 616e 3e20 3c2f 6469 763e 11
\n-00001700: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00001730: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 19\n-00001770: 2370 7261 676d 6120 6f6e 6365 3c2f 7370 #pragma once
.
20 <\n-000017e0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00001830: 2032 313c 2f73 7061 6e3e 3c73 7061 6e20 21#include &l\n-00001860: 743b 3c61 2063 6c61 7373 3d22 636f 6465 t;gtsam/discr\n-00001890: 6574 652f 4469 7363 7265 7465 4261 7965 ete/DiscreteBaye\n-000018a0: 734e 6574 2e68 3c2f 613e 2667 743b 3c2f sNet.h>
.<\n-000018f0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00001900: 6e6f 223e 2020 2032 323c 2f73 7061 6e3e no\"> 22\n-00001910: 3c73 7061 6e20 636c 6173 733d 2270 7265 #incl\n-00001930: 7564 6520 266c 743b 3c61 2063 6c61 7373 ude <gtsam\n-00001960: 2f64 6973 6372 6574 652f 4469 7363 7265 /discrete/Discre\n-00001970: 7465 4661 6374 6f72 4772 6170 682e 683c teFactorGraph.h<\n-00001980: 2f61 3e26 6774 3b3c 2f73 7061 6e3e 3c2f /a>>.
\n-000019e0: 3233 3c2f 7370 616e 3e3c 7370 616e 2063 23#include <\n-00001a10: 3b3c 6120 636c 6173 733d 2263 6f64 6522 ;gtsam/infere\n-00001a40: 6e63 652f 456c 696d 696e 6174 696f 6e54 nce/EliminationT\n-00001a50: 7265 652e 683c 2f61 3e26 6774 3b3c 2f73 ree.h>
.
24 \n-00001ac0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00001b10: 2020 3235 3c2f 7370 616e 3e3c 7370 616e 25namespace gtsam {.
2\n-00001bd0: 363c 2f73 7061 6e3e 203c 2f64 6976 3e0a 6
.\n-00001be0: 3c64 6976 2063 6c61 7373 3d22 666f 6c64
.
<\n-00001c70: 6120 636c 6173 733d 226c 696e 6522 2068 a class=\"line\" h\n-00001c80: 7265 663d 2261 3032 3834 382e 6874 6d6c ref=\"a02848.html\n-00001c90: 223e 2020 2033 313c 2f61 3e3c 2f73 7061 \"> 31 class \n-00001cc0: 3c2f 7370 616e 3e47 5453 414d 5f45 5850 GTSAM_EXP\n-00001cd0: 4f52 5420 3c61 2063 6c61 7373 3d22 636f ORT \n-00001d00: 4469 7363 7265 7465 456c 696d 696e 6174 DiscreteEliminat\n-00001d10: 696f 6e54 7265 653c 2f61 3e20 3a3c 2f64 ionTree :.
3\n-00001d70: 323c 2f73 7061 6e3e 2020 2020 3c73 7061 2 public \n-00001da0: 3c61 2063 6c61 7373 3d22 636f 6465 2068 Elim\n-00001dd0: 696e 6174 696f 6e54 7265 653c 2f61 3e26 inationTree&\n-00001de0: 6c74 3b44 6973 6372 6574 6542 6179 6573 lt;DiscreteBayes\n-00001df0: 4e65 742c 2044 6973 6372 6574 6546 6163 Net, DiscreteFac\n-00001e00: 746f 7247 7261 7068 2667 743b 3c2f 6469 torGraph>.
33\n-00001e60: 3c2f 7370 616e 3e20 207b 3c2f 6469 763e {
\n-00001e70: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00001ea0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 34 pub\n-00001ee0: 6c69 633c 2f73 7061 6e3e 3a3c 2f64 6976 lic:.
\n-00001f80: 2020 3335 3c2f 613e 3c2f 7370 616e 3e20 35 \n-00001f90: 2020 203c 7370 616e 2063 6c61 7373 3d22 typedef\n-00001fb0: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 EliminationT\n-00001ff0: 7265 6526 6c74 3b44 6973 6372 6574 6542 ree<DiscreteB\n-00002000: 6179 6573 4e65 742c 2044 6973 6372 6574 ayesNet, Discret\n-00002010: 6546 6163 746f 7247 7261 7068 2667 743b eFactorGraph>\n-00002020: 3c2f 613e 203c 6120 636c 6173 733d 2263 Base; <\n-00002080: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
36 typ\n-00002140: 6564 6566 3c2f 7370 616e 3e20 3c61 2063 edef Discrete\n-00002180: 456c 696d 696e 6174 696f 6e54 7265 653c EliminationTree<\n-00002190: 2f61 3e20 3c61 2063 6c61 7373 3d22 636f /a> This; .
37 type\n-000022b0: 6465 663c 2f73 7061 6e3e 2062 6f6f 7374 def boost\n-000022c0: 3a3a 7368 6172 6564 5f70 7472 266c 743b ::shared_ptr<\n-000022d0: 5468 6973 2667 743b 203c 6120 636c 6173 This> shared_\n-00002330: 7074 723c 2f61 3e3b 203c 2f64 6976 3e0a ptr;
.\n-00002340: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n-000023d0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-000023e0: 6e6f 223e 2020 2034 373c 2f73 7061 6e3e no\"> 47
\n-000023f0: 2020 2020 3c61 2063 6c61 7373 3d22 636f \n-00002420: 4469 7363 7265 7465 456c 696d 696e 6174 DiscreteEliminat\n-00002430: 696f 6e54 7265 653c 2f61 3e28 3c73 7061 ionTree(const <\n-00002460: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-00002470: 5f63 6c61 7373 2220 6872 6566 3d22 6130 _class\" href=\"a0\n-00002480: 3238 3634 2e68 746d 6c22 3e44 6973 6372 2864.html\">Discr\n-00002490: 6574 6546 6163 746f 7247 7261 7068 3c2f eteFactorGraph& factorGr\n-000024b0: 6170 682c 3c2f 6469 763e 0a3c 6469 7620 aph,
.
48 \n-00002510: 2020 2020 203c 7370 616e 2063 6c61 7373 const\n-00002530: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 VariableInde\n-00002570: 783c 2f61 3e26 616d 703b 2073 7472 7563 x& struc\n-00002580: 7475 7265 2c20 3c73 7061 6e20 636c 6173 ture, cons\n-000025a0: 743c 2f73 7061 6e3e 203c 6120 636c 6173 t Ordering& order);.
\n-00002640: 3439 3c2f 7370 616e 3e20 3c2f 6469 763e 49
\n-00002650: 0a3c 6469 7620 636c 6173 733d 226c 696e ..\n-00002770: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
57 .
\n-000028e0: 3539 3c2f 7370 616e 3e20 2020 203c 7370 59 bool \n-00002940: 6571 7561 6c73 3c2f 613e 283c 7370 616e equals(const This& other, <\n-000029b0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-000029c0: 6f72 6474 7970 6522 3e64 6f75 626c 653c ordtype\">double<\n-000029d0: 2f73 7061 6e3e 2074 6f6c 203d 2031 652d /span> tol = 1e-\n-000029e0: 3929 203c 7370 616e 2063 6c61 7373 3d22 9) const;
.<\n-00002a20: 6120 6964 3d22 6c30 3030 3630 2220 6e61 a id=\"l00060\" na\n-00002a30: 6d65 3d22 6c30 3030 3630 223e 3c2f 613e me=\"l00060\">\n-00002a40: 3c73 7061 6e20 636c 6173 733d 226c 696e 60
.
61 <\n-00002ac0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00002ad0: 6f72 6422 3e70 7269 7661 7465 3c2f 7370 ord\">private:
.
62 \n-00002b40: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00002b90: 2020 3633 3c2f 7370 616e 3e20 2020 203c 63 <\n-00002ba0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00002bb0: 6f72 6422 3e66 7269 656e 643c 2f73 7061 ord\">friend class ::Elimi\n-00002bd0: 6e61 7469 6f6e 5472 6565 5465 7374 6572 nationTreeTester\n-00002be0: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-00002c30: 2020 2036 343c 2f73 7061 6e3e 203c 2f64 64 .
6\n-00002c90: 353c 2f73 7061 6e3e 2020 7d3b 3c2f 6469 5 };.
.
66 <\n-00002d00: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00002d50: 2036 373c 2f73 7061 6e3e 7d3c 2f64 6976 67}.
.
.
.
\n-00002f10: 3c64 6976 2063 6c61 7373 3d22 7474 646f
Global functi\n-00002f30: 6f6e 7320 696e 2061 2073 6570 6172 6174 ons in a separat\n-00002f40: 6520 7465 7374 696e 6720 6e61 6d65 7370 e testing namesp\n-00002f50: 6163 652e 3c2f 6469 763e 3c64 6976 2063 ace.
\n-00002f70: 4465 6669 6e69 7469 6f6e 3c2f 623e 2063 Definition c\n-00002f80: 6861 7274 5465 7374 696e 672e 683a 3238 hartTesting.h:28\n-00002f90: 3c2f 6469 763e 3c2f 6469 763e 0a3c 6469
.\n-00002fc0: 3c64 6976 2063 6c61 7373 3d22 7474 6e61
gtsam:\n-00002ff0: 3a65 7175 616c 733c 2f61 3e3c 2f64 6976 :equals
Template to \n-00003020: 6372 6561 7465 2061 2062 696e 6172 7920 create a binary \n-00003030: 7072 6564 6963 6174 652e 3c2f 6469 763e predicate.
\n-00003040: 3c64 6976 2063 6c61 7373 3d22 7474 6465
Definition\n-00003060: 3c2f 623e 2054 6573 7461 626c 652e 683a Testable.h:\n-00003070: 3131 313c 2f64 6976 3e3c 2f64 6976 3e0a 111
.\n-00003080: 3c64 6976 2063 6c61 7373 3d22 7474 6322
gts\n-000030d0: 616d 3a3a 4469 7363 7265 7465 456c 696d am::DiscreteElim\n-000030e0: 696e 6174 696f 6e54 7265 653c 2f61 3e3c inationTree<\n-000030f0: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
Eliminat\n-00003110: 696f 6e20 7472 6565 2066 6f72 2064 6973 ion tree for dis\n-00003120: 6372 6574 6520 6661 6374 6f72 732e 3c2f crete factors.
Defini\n-00003150: 7469 6f6e 3c2f 623e 2044 6973 6372 6574 tion Discret\n-00003160: 6545 6c69 6d69 6e61 7469 6f6e 5472 6565 eEliminationTree\n-00003170: 2e68 3a33 333c 2f64 6976 3e3c 2f64 6976 .h:33
.
gtsam::Discre\n-00003220: 7465 456c 696d 696e 6174 696f 6e54 7265 teEliminationTre\n-00003230: 653a 3a54 6869 733c 2f61 3e3c 2f64 6976 e::This
DiscreteEli\n-00003260: 6d69 6e61 7469 6f6e 5472 6565 2054 6869 minationTree Thi\n-00003270: 733c 2f64 6976 3e3c 6469 7620 636c 6173 s
This c\n-00003290: 6c61 7373 2e3c 2f64 6976 3e3c 6469 7620 lass.
Definition \n-000032c0: 4469 7363 7265 7465 456c 696d 696e 6174 DiscreteEliminat\n-000032d0: 696f 6e54 7265 652e 683a 3336 3c2f 6469 ionTree.h:36
.boost::shared_\n-000033d0: 7074 7226 6c74 3b20 5468 6973 2026 6774 ptr< This >\n-000033e0: 3b20 7368 6172 6564 5f70 7472 3c2f 6469 ; shared_ptr
Shared poin\n-00003410: 7465 7220 746f 2074 6869 7320 636c 6173 ter to this clas\n-00003420: 732e 3c2f 6469 763e 3c64 6976 2063 6c61 s.
De\n-00003440: 6669 6e69 7469 6f6e 3c2f 623e 2044 6973 finition Dis\n-00003450: 6372 6574 6545 6c69 6d69 6e61 7469 6f6e creteElimination\n-00003460: 5472 6565 2e68 3a33 373c 2f64 6976 3e3c Tree.h:37
<\n-00003470: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
<\n-000034d0: 6120 6872 6566 3d22 6130 3238 3438 2e68 a href=\"a02848.h\n-000034e0: 746d 6c23 6165 3465 3661 6663 3335 3335 tml#ae4e6afc3535\n-000034f0: 3832 3138 3366 3363 3838 3161 3361 6361 82183f3c881a3aca\n-00003500: 6435 3763 6122 3e67 7473 616d 3a3a 4469 d57ca\">gtsam::Di\n-00003510: 7363 7265 7465 456c 696d 696e 6174 696f screteEliminatio\n-00003520: 6e54 7265 653a 3a42 6173 653c 2f61 3e3c nTree::Base<\n-00003530: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
Elimina\n-00003550: 7469 6f6e 5472 6565 266c 743b 2044 6973 tionTree< Dis\n-00003560: 6372 6574 6542 6179 6573 4e65 742c 2044 creteBayesNet, D\n-00003570: 6973 6372 6574 6546 6163 746f 7247 7261 iscreteFactorGra\n-00003580: 7068 2026 6774 3b20 4261 7365 3c2f 6469 ph > Base
Base class.\n-000035b0: 3c2f 6469 763e 3c64 6976 2063 6c61 7373
Defi\n-000035d0: 6e69 7469 6f6e 3c2f 623e 2044 6973 6372 nition Discr\n-000035e0: 6574 6545 6c69 6d69 6e61 7469 6f6e 5472 eteEliminationTr\n-000035f0: 6565 2e68 3a33 353c 2f64 6976 3e3c 2f64 ee.h:35
.
gtsam::Discrete\n-00003660: 4661 6374 6f72 4772 6170 683c 2f61 3e3c FactorGraph<\n-00003670: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
A Discre\n-00003690: 7465 2046 6163 746f 7220 4772 6170 6820 te Factor Graph \n-000036a0: 6973 2061 2066 6163 746f 7220 6772 6170 is a factor grap\n-000036b0: 6820 7768 6572 6520 616c 6c20 6661 6374 h where all fact\n-000036c0: 6f72 7320 6172 6520 4469 7363 7265 7465 ors are Discrete\n-000036d0: 2c20 692e 652e 3c2f 6469 763e 3c64 6976 , i.e.
<\n-000036f0: 623e 4465 6669 6e69 7469 6f6e 3c2f 623e b>Definition\n-00003700: 2044 6973 6372 6574 6546 6163 746f 7247 DiscreteFactorG\n-00003710: 7261 7068 2e68 3a31 3031 3c2f 6469 763e raph.h:101
\n-00003720: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
gtsam::Elimi\n-00003780: 6e61 7469 6f6e 5472 6565 3c2f 613e 3c2f nationTree
An elimin\n-000037b0: 6174 696f 6e20 7472 6565 2069 7320 6120 ation tree is a \n-000037c0: 6461 7461 2073 7472 7563 7475 7265 2075 data structure u\n-000037d0: 7365 6420 696e 7465 726d 6564 6961 7465 sed intermediate\n-000037e0: 6c79 2064 7572 696e 6720 656c 696d 696e ly during elimin\n-000037f0: 6174 696f 6e2e 3c2f 6469 763e 3c64 6976 ation.
<\n-00003810: 623e 4465 6669 6e69 7469 6f6e 3c2f 623e b>Definition\n-00003820: 2045 6c69 6d69 6e61 7469 6f6e 5472 6565 EliminationTree\n-00003830: 2e68 3a35 323c 2f64 6976 3e3c 2f64 6976 .h:52
..
gtsam::Varia\n-00003940: 626c 6549 6e64 6578 3c2f 613e 3c2f 6469 bleIndex
The Variabl\n-00003970: 6549 6e64 6578 2063 6c61 7373 2063 6f6d eIndex class com\n-00003980: 7075 7465 7320 616e 6420 7374 6f72 6573 putes and stores\n-00003990: 2074 6865 2062 6c6f 636b 2063 6f6c 756d the block colum\n-000039a0: 6e20 7374 7275 6374 7572 6520 6f66 2061 n structure of a\n-000039b0: 2066 6163 746f 7220 6772 6170 682e 3c2f factor graph.
Defini\n-000039e0: 7469 6f6e 3c2f 623e 2056 6172 6961 626c tion Variabl\n-000039f0: 6549 6e64 6578 2e68 3a34 333c 2f64 6976 eIndex.h:43
.
<\n-00003a20: 2f64 6976 3e3c 212d 2d20 636f 6e74 656e /div>.
..\n-00003a90: 3c21 2d2d 2069 6420 6973 206e 6565 6465 . <\n-00003ac0: 756c 3e0a 2020 2020 3c6c 6920 636c 6173 ul>.
  • gtsam\n-00003b20: 3c2f 613e 3c2f 6c69 3e3c 6c69 2063 6c61
  • disc\n-00003b80: 7265 7465 3c2f 613e 3c2f 6c69 3e3c 6c69 rete
  • DiscreteElimin\n-00003bd0: 6174 696f 6e54 7265 652e 683c 2f61 3e3c ationTree.h<\n-00003be0: 2f6c 693e 0a20 2020 203c 6c69 2063 6c61 /li>.
  • Gene\n-00003c00: 7261 7465 6420 6f6e 2054 7565 204a 616e rated on Tue Jan\n-00003c10: 2039 2032 3032 3420 3035 3a35 313a 3335 9 2024 05:51:35\n-00003c20: 2066 6f72 2067 7473 616d 2062 7920 3c61 for gtsam by \"do\n-00003ca0: 1.9\n-00003cb0: 2e38 203c 2f6c 693e 0a20 203c 2f75 6c3e .8
  • . \n-00003cc0: 0a3c 2f64 6976 3e0a 3c2f 626f 6479 3e0a .
    ..\n-00003cd0: 3c2f 6874 6d6c 3e0a .\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
    \n-\n-

    Go to the source code of this file.

    \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...
     
    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
    Feb 14, 2011
    \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,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 | _\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_\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_\bF_\ba_\bc_\bt_\bo_\br_\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-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+ Feb 15, 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_\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/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/DiscreteMarginals.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,49 +94,37 @@\n
    \n
    \n
    \n
    \n \n
    \n \n-
    DiscreteMarginals.h File Reference
    \n+
    DiscreteBayesTree.cpp File Reference
    \n
    \n
    \n \n-

    A class for computing marginals in a DiscreteFactorGraph. \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-Classes

    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

    Detailed Description

    \n-

    A class for computing marginals in a DiscreteFactorGraph.

    \n-
    Author
    Abhijit Kundu
    \n-
    \n-Richard Roberts
    \n+

    Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree.

    \n+

    DiscreteBayesTree

    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,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-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-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+_\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-A class for computing marginals in a DiscreteFactorGraph.\n+Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree.\n+DiscreteBayesTree\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_\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/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/Assignment.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@@ -95,44 +95,73 @@\n
    \n
    \n
    \n \n
    \n \n-
    Assignment.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    DecisionTree.h File Reference
    \n
    \n
    \n \n-

    An assignment from labels to a discrete value index (size_t) \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::Assignment< L >
     An assignment from labels to value index (size_t). 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+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-

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

    \n-
    Author
    Frank Dellaert
    \n-
    Date
    Feb 5, 2012
    \n+

    Decision Tree for use in DiscreteFactors.

    \n+
    Author
    Frank Dellaert
    \n+
    \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,27 +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\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+_\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:_\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+ 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+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-An assignment from labels to a discrete value index (size_t)\n+Decision Tree for use in DiscreteFactors.\n Author\n Frank Dellaert\n+ Can Erdogan\n Date\n- Feb 5, 2012\n+ Jan 30, 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_\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/a00272_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00272_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/Assignment.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,110 +98,333 @@\n
    No Matches
    \n
    \n
    \n
    \n
    \n \n
    \n-
    Assignment.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-
    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-
    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+
    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} // namespace gtsam
    \n-
    std::pair< Key, size_t > DiscreteKey
    Key type for discrete variables.
    Definition DiscreteKey.h:36
    \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+
    Concept check for values that can be used in unit tests.
    \n+
    Typedefs for easier changing of types.
    \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+
    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-
    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+
    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,111 +1,417 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Assignment.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 \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-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+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 return allPossValues;\n-109 }\n-110}; // Assignment\n+108\n+109 // Unique ID for dot files\n+110 const void* id() const { return this; }\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+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_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n+_\bt_\by_\bp_\be_\bs_\b._\bh\n+Typedefs for easier changing of types.\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:_\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:_\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_\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- * _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\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/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/Cal3_S2Stereo.cpp 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@@ -94,42 +94,47 @@\n
    \n
    \n
    \n
    \n \n
    \n \n-
    Cal3_S2Stereo.cpp File Reference
    \n+Classes |\n+Namespaces
    \n+
    Cyclic.h File Reference
    \n
    \n
    \n \n-

    The most common 5DOF 3D->2D calibration + Stereo baseline. \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+Classes

    class  gtsam::Cyclic< N >
     Cyclic group of order N. More...
     
    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-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+

    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,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-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+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:_\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:_\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-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+Cyclic group, i.e., the integers modulo N.\n Author\n- Chris Beall\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_\bS_\bt_\be_\br_\be_\bo_\b._\bc_\bp_\bp\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/a00281.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00281.html", "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/Rot3.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,38 +94,53 @@\n
    \n
    \n
    \n
    \n \n
    \n \n-
    SOn-inl.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    Rot3.cpp File Reference
    \n
    \n
    \n \n-

    Template implementations for SO(n) \n+

    Rotation, common code between Rotation matrix and Quaternion. \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-

    Template implementations for SO(n)

    \n-
    Author
    Frank Dellaert
    \n-
    Date
    March 2019
    \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,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-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+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+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-Template implementations for SO(n)\n+Rotation, common code between Rotation matrix and Quaternion.\n Author\n+ Alireza Fathi\n+ Christian Potthast\n Frank Dellaert\n- Date\n- March 2019\n+ Richard Roberts\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+ * _\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/a00284.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00284.html", "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/Cal3DS2.h File Reference\n \n \n \n \n \n \n \n@@ -96,46 +96,52 @@\n
    \n
    \n \n
    \n \n-
    Cal3_S2.h File Reference
    \n+
    Cal3DS2.h File Reference
    \n
    \n
    \n \n-

    The most common 5DOF 3D->2D calibration. \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-\n+\n \n

    \n Classes

    class  gtsam::Cal3_S2
     The most common 5DOF 3D->2D calibration. More...
    class  gtsam::Cal3DS2
     Calibration of a camera with radial distortion that also supports Lie-group behaviors for optimization. More...
     
    struct  gtsam::traits< Cal3_S2 >
    struct  gtsam::traits< Cal3DS2 >
     
    struct  gtsam::traits< const Cal3_S2 >
    struct  gtsam::traits< const Cal3DS2 >
     
    \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-
    Author
    Frank Dellaert
    \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,29 +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-Cal3_S2.h File Reference\n-The most common 5DOF 3D->2D calibration. _\bM_\bo_\br_\be_\b._\b._\b.\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_\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_\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_\b__\bS_\b2_\b _\b>\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_\b__\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 _\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 *\b**\b**\b**\b**\b* D\bDe\bet\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+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- Frank Dellaert\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_\b__\bS_\b2_\b._\bh\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/a00284.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00284.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var a00284 = [\n- [\"gtsam::traits< Cal3_S2 >\", \"a02948.html\", null],\n- [\"gtsam::traits< const Cal3_S2 >\", \"a02952.html\", null]\n+ [\"gtsam::traits< Cal3DS2 >\", \"a02984.html\", null],\n+ [\"gtsam::traits< const Cal3DS2 >\", \"a02988.html\", null]\n ];\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/Cal3_S2.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@@ -98,142 +98,113 @@\n
    No Matches
    \n
    \n
    \n
    \n
    \n \n
    \n-
    Cal3_S2.h
    \n+
    Cal3DS2.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+
    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+
    \n+
    35class GTSAM_EXPORT Cal3DS2 : public Cal3DS2_Base {
    \n+
    36 using Base = Cal3DS2_Base;
    \n
    37
    \n-
    39 using shared_ptr = boost::shared_ptr<Cal3_S2>;
    \n+
    38 public:
    \n+
    39 enum { dimension = 9 };
    \n
    40
    \n+
    42 using shared_ptr = boost::shared_ptr<Cal3DS2>;
    \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-
    \n-
    50
    \n-
    52 Cal3_S2(const Vector5& d) : Cal3(d) {}
    \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-
    60 Cal3_S2(double fov, int w, int h) : Cal3(fov, w, h) {}
    \n+
    54 ~Cal3DS2() override {}
    \n+
    55
    \n+
    59
    \n+
    60 Cal3DS2(const Vector9& v) : Base(v) {}
    \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+
    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-
    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+
    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-
    \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-
    124
    \n-
    \n-
    126 Vector5 localCoordinates(const Cal3_S2& T2) const {
    \n-
    127 return T2.vector() - vector();
    \n-
    128 }
    \n-
    \n-
    129
    \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+
    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
    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-
    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+
    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,186 +1,126 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Cal3_S2.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-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+21#pragma once\n+22\n+23#include \n+24#include \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-39 using shared_ptr = boost::shared_ptr;\n+38 public:\n+39 enum { dimension = 9 };\n 40\n+42 using shared_ptr = boost::shared_ptr;\n 43\n-_\b4_\b5 _\bC_\ba_\bl_\b3_\b__\bS_\b2() = default;\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+_\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-_\b6_\b0 _\bC_\ba_\bl_\b3_\b__\bS_\b2(double fov, int w, int h) : _\bC_\ba_\bl_\b3(fov, w, h) {}\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-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+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-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+_\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-_\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-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-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+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:_\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:_\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:_\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 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+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 * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bh\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/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/Quaternion.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@@ -95,56 +95,48 @@\n
    \n
    \n
    \n \n
    \n \n-
    Quaternion.h File Reference
    \n+Namespaces
    \n+
    CameraSet.h File Reference
    \n
    \n
    \n \n-

    Lie Group wrapper for Eigen Quaternions. \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+\n \n

    \n Classes

    struct  gtsam::traits< QUATERNION_TYPE >
    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 > >
     
    \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-

    Lie Group wrapper for Eigen Quaternions.

    \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,30 +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 | _\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+_\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 _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\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+ 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 \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-Lie Group wrapper for Eigen Quaternions.\n+Base class to create smart factors on poses or cameras.\n Author\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- * _\bQ_\bu_\ba_\bt_\be_\br_\bn_\bi_\bo_\bn_\b._\bh\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/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,5 @@\n var a00293 = [\n- [\"gtsam::traits< QUATERNION_TYPE >\", \"a03208.html\", null]\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 ];\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/Quaternion.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@@ -98,200 +98,494 @@\n
    No Matches
    \n
    \n
    \n
    \n
    \n \n
    \n-
    Quaternion.h
    \n+
    CameraSet.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/concepts.h>
    \n-
    22#include <gtsam/geometry/SO3.h> // Logmap/Expmap derivatives
    \n-
    23#include <limits>
    \n-
    24#include <iostream>
    \n-
    25
    \n-
    26#define QUATERNION_TYPE Eigen::Quaternion<_Scalar,_Options>
    \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-
    28namespace gtsam {
    \n+
    28#include <vector>
    \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-
    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+
    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+
    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-
    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+
    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} // \\namespace gtsam
    \n-
    185
    \n-
    Base class and basic functions for Lie types.
    \n-
    3*3 matrix representation of SO(3)
    \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+
    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+
    #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+
    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+
    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-
    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-
    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+
    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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,214 +1,606 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Quaternion.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 6 * Authors: Frank Dellaert, 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-25\n-26#define QUATERNION_TYPE Eigen::Quaternion<_Scalar,_Options>\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-28namespace _\bg_\bt_\bs_\ba_\bm {\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-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-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+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+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-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+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} // \\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+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+_\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+_\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_\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:_\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:_\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:_\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:_\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\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bQ_\bu_\ba_\bt_\be_\br_\bn_\bi_\bo_\bn_\b._\bh\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/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/CameraSet.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3_S2Stereo.h File Reference\n \n \n \n \n \n \n \n@@ -96,47 +96,46 @@\n
    \n
    \n \n
    \n \n-
    CameraSet.h File Reference
    \n+
    Cal3_S2Stereo.h File Reference
    \n
    \n
    \n \n-

    Base class to create smart factors on poses or cameras. \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-\n+\n \n

    \n Classes

    class  gtsam::CameraSet< CAMERA >
     A set of cameras, all with their own calibration. More...
    class  gtsam::Cal3_S2Stereo
     The most common 5DOF 3D->2D calibration, stereo version. More...
     
    struct  gtsam::traits< CameraSet< CAMERA > >
    struct  gtsam::traits< Cal3_S2Stereo >
     
    struct  gtsam::traits< const CameraSet< CAMERA > >
    struct  gtsam::traits< const Cal3_S2Stereo >
     
    \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
    Frank Dellaert
    \n-
    Date
    Feb 19, 2015
    \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,31 +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-CameraSet.h File Reference\n-Base class to create smart factors on poses or cameras. _\bM_\bo_\br_\be_\b._\b._\b.\n+Cal3_S2Stereo.h File Reference\n+The most common 5DOF 3D->2D calibration + Stereo baseline. _\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+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo\n+\u00a0 The most common 5DOF 3D->2D calibration, stereo version. _\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+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\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:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\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+The most common 5DOF 3D->2D calibration + Stereo baseline.\n Author\n- Frank Dellaert\n- Date\n- Feb 19, 2015\n+ Chris Beall\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+ * _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\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/a00296.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00296.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,4 @@\n var a00296 = [\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::traits< Cal3_S2Stereo >\", \"a02960.html\", null],\n+ [\"gtsam::traits< const Cal3_S2Stereo >\", \"a02964.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00296_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00296_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/Cal3_S2Stereo.h Source File\n \n \n \n \n \n \n \n@@ -98,494 +98,163 @@\n
    No Matches
    \n
    \n
    \n
    \n
    \n \n
    \n-
    CameraSet.h
    \n+
    Cal3_S2Stereo.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-
    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+
    18#pragma once
    \n+
    19
    \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+
    32 double b_ = 1.0f;
    \n+
    33
    \n+
    34 public:
    \n+
    35 enum { dimension = 6 };
    \n+
    36
    \n+
    38 using shared_ptr = boost::shared_ptr<Cal3_S2Stereo>;
    \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+
    42
    \n+
    44 Cal3_S2Stereo() = default;
    \n+
    45
    \n+
    \n+
    47 Cal3_S2Stereo(double fx, double fy, double s, double u0, double v0, double b)
    \n+
    48 : Cal3_S2(fx, fy, s, u0, v0), b_(b) {}
    \n+
    \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+
    51 Cal3_S2Stereo(const Vector6& d)
    \n+
    52 : Cal3_S2(d(0), d(1), d(2), d(3), d(4)), b_(d(5)) {}
    \n
    \n+
    53
    \n+
    \n+
    55 Cal3_S2Stereo(double fov, int w, int h, double b)
    \n+
    56 : Cal3_S2(fov, w, h), b_(b) {}
    \n+
    \n+
    57
    \n+
    59
    \n+
    67 Point2 uncalibrate(const Point2& p, OptionalJacobian<2, 6> Dcal = boost::none,
    \n+
    68 OptionalJacobian<2, 2> Dp = boost::none) const;
    \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+
    77 Point2 calibrate(const Point2& p, OptionalJacobian<2, 6> Dcal = boost::none,
    \n+
    78 OptionalJacobian<2, 2> Dp = boost::none) const;
    \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+
    85 Vector3 calibrate(const Vector3& p) const { return Cal3_S2::calibrate(p); }
    \n+
    86
    \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+
    91 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,
    \n+
    92 const Cal3_S2Stereo& cal);
    \n+
    93
    \n+
    95 void print(const std::string& s = "") const override;
    \n+
    96
    \n+
    98 bool equals(const Cal3_S2Stereo& other, double tol = 10e-9) const;
    \n+
    99
    \n+
    103
    \n+
    105 const Cal3_S2& calibration() const { return *this; }
    \n+
    106
    \n+
    108 Matrix3 K() const override { return Cal3_S2::K(); }
    \n+
    109
    \n+
    111 inline double baseline() const { return b_; }
    \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-
    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-
    #define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
    This marks a GTSAM object to require alignment.
    Definition types.h:308
    \n-
    Access to matrices via blocks of pre-defined sizes.
    \n-
    3D Point
    \n-
    Calibrated camera for which only pose is unknown.
    \n-\n+
    \n+
    114 Vector6 vector() const {
    \n+
    115 Vector6 v;
    \n+
    116 v << Cal3_S2::vector(), b_;
    \n+
    117 return v;
    \n+
    118 }
    \n+
    \n+
    119
    \n+
    123
    \n+
    125 inline size_t dim() const override { return Dim(); }
    \n+
    126
    \n+
    128 inline static size_t Dim() { return dimension; }
    \n+
    129
    \n+
    \n+
    131 inline Cal3_S2Stereo retract(const Vector& d) const {
    \n+
    132 return Cal3_S2Stereo(fx() + d(0), fy() + d(1), skew() + d(2), px() + d(3),
    \n+
    133 py() + d(4), b_ + d(5));
    \n+
    134 }
    \n+
    \n+
    135
    \n+
    \n+
    137 Vector6 localCoordinates(const Cal3_S2Stereo& T2) const {
    \n+
    138 return T2.vector() - vector();
    \n+
    139 }
    \n+
    \n+
    140
    \n+
    144
    \n+
    145 private:
    \n+
    147 friend class boost::serialization::access;
    \n+
    148 template <class Archive>
    \n+
    149 void serialize(Archive& ar, const unsigned int /*version*/) {
    \n+
    150 ar& boost::serialization::make_nvp(
    \n+
    151 "Cal3_S2", boost::serialization::base_object<Cal3_S2>(*this));
    \n+
    152 ar& BOOST_SERIALIZATION_NVP(b_);
    \n+
    153 }
    \n+
    155};
    \n+
    \n+
    156
    \n+
    157// Define GTSAM traits
    \n+
    158template <>
    \n+
    159struct traits<Cal3_S2Stereo> : public internal::Manifold<Cal3_S2Stereo> {};
    \n+
    160
    \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
    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+
    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-
    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+
    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+
    The most common 5DOF 3D->2D calibration.
    Definition Cal3_S2.h:34
    \n+
    The most common 5DOF 3D->2D calibration, stereo version.
    Definition Cal3_S2Stereo.h:30
    \n+
    Vector6 vector() const
    vectorized form (column-wise)
    Definition Cal3_S2Stereo.h:114
    \n+
    Cal3_S2Stereo(double fx, double fy, double s, double u0, double v0, double b)
    constructor from doubles
    Definition Cal3_S2Stereo.h:47
    \n+
    Vector6 localCoordinates(const Cal3_S2Stereo &T2) const
    Unretraction for the calibration.
    Definition Cal3_S2Stereo.h:137
    \n+
    const Cal3_S2 & calibration() const
    return calibration, same for left and right
    Definition Cal3_S2Stereo.h:105
    \n+
    size_t dim() const override
    return DOF, dimensionality of tangent space
    Definition Cal3_S2Stereo.h:125
    \n+
    Vector3 calibrate(const Vector3 &p) const
    Convert homogeneous image coordinates to intrinsic coordinates.
    Definition Cal3_S2Stereo.h:85
    \n+
    Cal3_S2Stereo retract(const Vector &d) const
    Given 6-dim tangent vector, create new calibration.
    Definition Cal3_S2Stereo.h:131
    \n+
    Matrix3 K() const override
    return calibration matrix K, same for left and right
    Definition Cal3_S2Stereo.h:108
    \n+
    static size_t Dim()
    return DOF, dimensionality of tangent space
    Definition Cal3_S2Stereo.h:128
    \n+
    Cal3_S2Stereo(double fov, int w, int h, double b)
    easy constructor; field-of-view in degrees, assumes zero skew
    Definition Cal3_S2Stereo.h:55
    \n+
    double baseline() const
    return baseline
    Definition Cal3_S2Stereo.h:111
    \n+
    Cal3_S2Stereo(const Vector6 &d)
    constructor from vector
    Definition Cal3_S2Stereo.h:51
    \n+
    Cal3_S2Stereo()=default
    default calibration leaves coordinates unchanged
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,606 +1,204 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-CameraSet.h\n+Cal3_S2Stereo.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-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+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_\b._\bh>\n+21#include \n+22\n+23namespace _\bg_\bt_\bs_\ba_\bm {\n+24\n+_\b3_\b0class GTSAM_EXPORT _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo : public _\bC_\ba_\bl_\b3_\b__\bS_\b2 {\n+31 private:\n+32 double b_ = 1.0f;\n+33\n+34 public:\n+35 enum { dimension = 6 };\n+36\n+38 using shared_ptr = boost::shared_ptr;\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+42\n+_\b4_\b4 _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo() = default;\n+45\n+_\b4_\b7 _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo(double fx, double fy, double s, double u0, double v0, double\n+b)\n+48 : _\bC_\ba_\bl_\b3_\b__\bS_\b2(fx, fy, s, u0, v0), b_(b) {}\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+_\b5_\b1 _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo(const Vector6& d)\n+52 : _\bC_\ba_\bl_\b3_\b__\bS_\b2(d(0), d(1), d(2), d(3), d(4)), b_(d(5)) {}\n+53\n+_\b5_\b5 _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo(double fov, int w, int h, double b)\n+56 : _\bC_\ba_\bl_\b3_\b__\bS_\b2(fov, w, h), b_(b) {}\n+57\n+59\n+67 _\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 _\b6_\b> Dcal = boost::\n+none,\n+68 _\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 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+77 _\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 _\b6_\b> Dcal = boost::none,\n+78 _\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 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+_\b8_\b5 Vector3 _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be(const Vector3& p) const { return Cal3_S2::calibrate(p); }\n+86\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+91 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,\n+92 const _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo& cal);\n+93\n+95 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const override;\n+96\n+98 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo& other, double tol = 10e-9) const;\n+99\n+103\n+_\b1_\b0_\b5 const _\bC_\ba_\bl_\b3_\b__\bS_\b2& _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn() const { return *this; }\n+106\n+_\b1_\b0_\b8 Matrix3 _\bK() const override { return Cal3_S2::K(); }\n+109\n+_\b1_\b1_\b1 inline double _\bb_\ba_\bs_\be_\bl_\bi_\bn_\be() const { return b_; }\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-_\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-_\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_\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-_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n-3D Point\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-_\bK_\be_\by_\b._\bh\n+_\b1_\b1_\b4 Vector6 _\bv_\be_\bc_\bt_\bo_\br() const {\n+115 Vector6 v;\n+116 v << Cal3_S2::vector(), b_;\n+117 return v;\n+118 }\n+119\n+123\n+_\b1_\b2_\b5 inline size_t _\bd_\bi_\bm() const override { return Dim(); }\n+126\n+_\b1_\b2_\b8 inline static size_t _\bD_\bi_\bm() { return dimension; }\n+129\n+_\b1_\b3_\b1 inline _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo _\br_\be_\bt_\br_\ba_\bc_\bt(const Vector& d) const {\n+132 return _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo(fx() + d(0), fy() + d(1), skew() + d(2), px() + d(3),\n+133 py() + d(4), b_ + d(5));\n+134 }\n+135\n+_\b1_\b3_\b7 Vector6 _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo& T2) const {\n+138 return T2._\bv_\be_\bc_\bt_\bo_\br() - vector();\n+139 }\n+140\n+144\n+145 private:\n+_\b1_\b4_\b7 friend class boost::serialization::access;\n+148 template \n+149 void serialize(Archive& ar, const unsigned int /*version*/) {\n+150 ar& boost::serialization::make_nvp(\n+151 \"Cal3_S2\", boost::serialization::base_object(*this));\n+152 ar& BOOST_SERIALIZATION_NVP(b_);\n+153 }\n+155};\n+156\n+157// Define GTSAM traits\n+158template <>\n+_\b1_\b5_\b9struct _\bt_\br_\ba_\bi_\bt_\bs<_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {};\n+160\n+161template <>\n+_\b1_\b6_\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+163};\n+164\n+165} // \\ namespace gtsam\n+_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bh\n+The most common 5DOF 3D->2D 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:_\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:_\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:_\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:_\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_\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_\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:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br\n+Vector6 vector() const\n+vectorized form (column-wise)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2Stereo.h:114\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo\n+Cal3_S2Stereo(double fx, double fy, double s, double u0, double v0, double b)\n+constructor from doubles\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2Stereo.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n+Vector6 localCoordinates(const Cal3_S2Stereo &T2) const\n+Unretraction for the calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2Stereo.h:137\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b:_\b:_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn\n+const Cal3_S2 & calibration() const\n+return calibration, same for left and right\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2Stereo.h:105\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b:_\b:_\bd_\bi_\bm\n+size_t dim() const override\n+return DOF, dimensionality of tangent space\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2Stereo.h:125\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b:_\b:_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be\n+Vector3 calibrate(const Vector3 &p) const\n+Convert homogeneous image coordinates to intrinsic coordinates.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2Stereo.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt\n+Cal3_S2Stereo retract(const Vector &d) const\n+Given 6-dim tangent vector, create new calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2Stereo.h:131\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b:_\b:_\bK\n+Matrix3 K() const override\n+return calibration matrix K, same for left and right\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2Stereo.h:108\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\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_S2Stereo.h:128\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo\n+Cal3_S2Stereo(double fov, int w, int h, double b)\n+easy constructor; field-of-view in degrees, assumes zero skew\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2Stereo.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b:_\b:_\bb_\ba_\bs_\be_\bl_\bi_\bn_\be\n+double baseline() const\n+return baseline\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2Stereo.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo\n+Cal3_S2Stereo(const Vector6 &d)\n+constructor from vector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2Stereo.h:51\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo\n+Cal3_S2Stereo()=default\n+default calibration leaves coordinates unchanged\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+ * _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\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/a00299.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00299.html", "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/PinholeSet.h File Reference\n \n \n \n \n \n \n \n@@ -94,57 +94,48 @@\n
    \n
    \n
    \n
    \n \n
    \n \n-
    SimpleCamera.h File Reference
    \n+Classes |\n+Namespaces
    \n+
    PinholeSet.h File Reference
    \n
    \n
    \n \n-

    A simple camera class with a Cal3_S2 calibration. \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-\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

    Detailed Description

    \n-

    A simple camera class with a Cal3_S2 calibration.

    \n-
    Date
    Aug 16, 2009
    \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,39 +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 | _\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+_\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-N\bNa\bam\bme\bes\bsp\bpa\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+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-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+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-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+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-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+N\bNa\bam\bme\bes\bsp\bpa\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 simple camera class with a Cal3_S2 calibration.\n- Date\n- Aug 16, 2009\n+A CameraSet of either CalibratedCamera, PinholePose, or PinholeCamera.\n Author\n Frank Dellaert\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+ * _\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/a00299.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00299.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,5 @@\n var a00299 = [\n- [\"PinholeCameraCal3_S2\", \"a00299.html#a3a2e8c622e65623a6853c84073bdb4f2\", null]\n+ [\"gtsam::PinholeSet< CAMERA >\", \"a03136.html\", \"a03136\"],\n+ [\"gtsam::traits< PinholeSet< CAMERA > >\", \"a03140.html\", null],\n+ [\"gtsam::traits< const PinholeSet< CAMERA > >\", \"a03144.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00299_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00299_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/SimpleCamera.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholeSet.h Source File\n \n \n \n \n \n \n \n@@ -98,141 +98,117 @@\n
    No Matches
    \n
    \n
    \n
    \n
    \n \n
    \n-
    SimpleCamera.h
    \n+
    PinholeSet.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-\n-\n-\n-\n-
    29
    \n-
    30namespace gtsam {
    \n+
    18#pragma once
    \n+
    19
    \n+\n+\n+
    22#include <boost/optional.hpp>
    \n+
    23
    \n+
    24namespace gtsam {
    \n+
    25
    \n+
    29template<class CAMERA>
    \n+
    \n+
    30class PinholeSet: public CameraSet<CAMERA> {
    \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+
    32private:
    \n+
    33 typedef CameraSet<CAMERA> Base;
    \n+
    34 typedef PinholeSet<CAMERA> This;
    \n+
    35
    \n+
    36protected:
    \n+
    37
    \n+
    38public:
    \n
    39
    \n-
    40#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
    \n-
    45class GTSAM_EXPORT SimpleCamera : public PinholeCameraCal3_S2 {
    \n+
    \n+
    41 virtual ~PinholeSet() {
    \n+
    42 }
    \n+
    \n+
    43
    \n
    46
    \n-
    47 typedef PinholeCamera<Cal3_S2> Base;
    \n-
    48 typedef boost::shared_ptr<SimpleCamera> shared_ptr;
    \n-
    49
    \n-
    50public:
    \n+
    \n+
    48 void print(const std::string& s = "") const override {
    \n+
    49 Base::print(s);
    \n+
    50 }
    \n+
    \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-
    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-
    The most common 5DOF 3D->2D calibration.
    \n-
    Unified Calibration Model, see Mei07icra for details.
    \n-
    Calibration used by Bundler.
    \n-
    Base class for all pinhole cameras.
    \n-
    Calibration of a fisheye camera.
    \n-
    Bearing-Range product.
    \n-
    Calibration of a camera with radial distortion, calculations in base class Cal3DS2_Base.
    \n+
    \n+
    53 bool equals(const PinholeSet& p, double tol = 1e-9) const {
    \n+
    54 return Base::equals(p, tol); // TODO all flags
    \n+
    55 }
    \n+
    \n+
    56
    \n+
    58
    \n+
    \n+\n+
    61 const typename CAMERA::MeasurementVector& measured,
    \n+
    62 const TriangulationParameters& params) const {
    \n+
    63 return gtsam::triangulateSafe(*this, measured, params);
    \n+
    64 }
    \n+
    \n+
    65
    \n+
    66private:
    \n+
    67
    \n+\n+
    70 template<class ARCHIVE>
    \n+
    71 void serialize(ARCHIVE & ar, const unsigned int version) {
    \n+
    72 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
    \n+
    73 }
    \n+
    74};
    \n+
    \n+
    75
    \n+
    76template<class CAMERA>
    \n+
    \n+
    77struct traits<PinholeSet<CAMERA> > : public Testable<PinholeSet<CAMERA> > {
    \n+
    78};
    \n+
    \n+
    79
    \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+
    Functions for triangulation.
    \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+
    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+
    TriangulationResult triangulateSafe(const typename CAMERA::MeasurementVector &measured, const TriangulationParameters &params) const
    triangulateSafe
    Definition PinholeSet.h:60
    \n+
    bool equals(const PinholeSet &p, double tol=1e-9) const
    equals
    Definition PinholeSet.h:53
    \n+
    virtual ~PinholeSet()
    Virtual destructor.
    Definition PinholeSet.h:41
    \n+
    void print(const std::string &s="") const override
    print
    Definition PinholeSet.h:48
    \n+
    friend class boost::serialization::access
    Serialization function.
    Definition PinholeSet.h:69
    \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", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,160 +1,134 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SimpleCamera.h\n+PinholeSet.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/_\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+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_\bm_\be_\br_\ba_\bS_\be_\bt_\b._\bh>\n+21#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+22#include \n+23\n+24namespace _\bg_\bt_\bs_\ba_\bm {\n+25\n+29template\n+_\b3_\b0class _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt: public _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt {\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+32private:\n+33 typedef _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b> Base;\n+34 typedef _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b> This;\n+35\n+36protected:\n+37\n+38public:\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+_\b4_\b1 virtual _\b~_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt() {\n+42 }\n+43\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+_\b4_\b8 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const override {\n+49 Base::print(s);\n+50 }\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-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-_\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_\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_\bF_\bi_\bs_\bh_\be_\by_\be_\b._\bh\n-Calibration of a fisheye camera.\n-_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh\n-Bearing-Range product.\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+_\b5_\b3 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt& p, double tol = 1e-9) const {\n+54 return Base::equals(p, tol); // TODO all flags\n+55 }\n+56\n+58\n+_\b6_\b0 _\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(\n+61 const typename CAMERA::MeasurementVector& measured,\n+62 const _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs& params) const {\n+63 return _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bS_\ba_\bf_\be(*this, measured, params);\n+64 }\n+65\n+66private:\n+67\n+_\b6_\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+70 template\n+71 void serialize(ARCHIVE & ar, const unsigned int version) {\n+72 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);\n+73 }\n+74};\n+75\n+76template\n+_\b7_\b7struct _\bt_\br_\ba_\bi_\bt_\bs<_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt > : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be > {\n+78};\n+79\n+80template\n+_\b8_\b1struct _\bt_\br_\ba_\bi_\bt_\bs > : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+> {\n+82};\n+83\n+84} // \\ namespace gtsam\n+_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b._\bh\n+Base class to create smart factors on poses or cameras.\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_\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:_\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:_\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_\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:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt\n+PinholeSet: triangulates point and keeps an estimate of it around.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeSet.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bS_\ba_\bf_\be\n+TriangulationResult triangulateSafe(const typename CAMERA::MeasurementVector\n+&measured, const TriangulationParameters ¶ms) const\n+triangulateSafe\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeSet.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const PinholeSet &p, double tol=1e-9) const\n+equals\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeSet.h:53\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt_\b:_\b:_\b~_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt\n+virtual ~PinholeSet()\n+Virtual destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeSet.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\") const override\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeSet.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\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 PinholeSet.h:69\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_\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\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+ * _\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/a00302.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00302.html", "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.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,46 +96,49 @@\n
    \n
    \n \n
    \n \n-
    Cal3_S2Stereo.h File Reference
    \n+
    BearingRange.h File Reference
    \n
    \n
    \n \n-

    The most common 5DOF 3D->2D calibration + Stereo baseline. \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::Cal3_S2Stereo
     The most common 5DOF 3D->2D calibration, stereo version. 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< Cal3_S2Stereo >
    struct  gtsam::traits< BearingRange< A1, A2 > >
     
    struct  gtsam::traits< const Cal3_S2Stereo >
    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-

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

    \n-
    Author
    Chris Beall
    \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-Cal3_S2Stereo.h File Reference\n-The most common 5DOF 3D->2D calibration + Stereo baseline. _\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_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo\n-\u00a0 The most common 5DOF 3D->2D calibration, stereo version. _\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_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\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:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b _\b>\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-The most common 5DOF 3D->2D calibration + Stereo baseline.\n+Bearing-Range product.\n+ Date\n+ July, 2015\n Author\n- Chris Beall\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_\bS_\bt_\be_\br_\be_\bo_\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/a00302.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00302.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,6 @@\n var a00302 = [\n- [\"gtsam::traits< Cal3_S2Stereo >\", \"a02960.html\", null],\n- [\"gtsam::traits< const Cal3_S2Stereo >\", \"a02964.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/a00302_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00302_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_S2Stereo.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,163 +98,228 @@\n
    No Matches
    \n
    \n
    \n
    \n \n \n
    \n-
    Cal3_S2Stereo.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-\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-
    32 double b_ = 1.0f;
    \n-
    33
    \n-
    34 public:
    \n-
    35 enum { dimension = 6 };
    \n-
    36
    \n-
    38 using shared_ptr = boost::shared_ptr<Cal3_S2Stereo>;
    \n-
    39
    \n-
    42
    \n-
    44 Cal3_S2Stereo() = default;
    \n-
    45
    \n-
    \n-
    47 Cal3_S2Stereo(double fx, double fy, double s, double u0, double v0, double b)
    \n-
    48 : Cal3_S2(fx, fy, s, u0, v0), b_(b) {}
    \n-
    \n-
    49
    \n-
    \n-
    51 Cal3_S2Stereo(const Vector6& d)
    \n-
    52 : Cal3_S2(d(0), d(1), d(2), d(3), d(4)), b_(d(5)) {}
    \n-
    \n-
    53
    \n-
    \n-
    55 Cal3_S2Stereo(double fov, int w, int h, double b)
    \n-
    56 : Cal3_S2(fov, w, h), b_(b) {}
    \n-
    \n-
    57
    \n-
    59
    \n-
    67 Point2 uncalibrate(const Point2& p, OptionalJacobian<2, 6> Dcal = boost::none,
    \n-
    68 OptionalJacobian<2, 2> Dp = boost::none) const;
    \n-
    69
    \n-
    77 Point2 calibrate(const Point2& p, OptionalJacobian<2, 6> Dcal = boost::none,
    \n-
    78 OptionalJacobian<2, 2> Dp = boost::none) const;
    \n-
    79
    \n-
    85 Vector3 calibrate(const Vector3& p) const { return Cal3_S2::calibrate(p); }
    \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+
    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+
    \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-
    91 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,
    \n-
    92 const Cal3_S2Stereo& cal);
    \n-
    93
    \n-
    95 void print(const std::string& s = "") const override;
    \n-
    96
    \n-
    98 bool equals(const Cal3_S2Stereo& other, double tol = 10e-9) const;
    \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-
    103
    \n-
    105 const Cal3_S2& calibration() const { return *this; }
    \n-
    106
    \n-
    108 Matrix3 K() const override { return Cal3_S2::K(); }
    \n-
    109
    \n-
    111 inline double baseline() const { return b_; }
    \n-
    112
    \n-
    \n-
    114 Vector6 vector() const {
    \n-
    115 Vector6 v;
    \n-
    116 v << Cal3_S2::vector(), b_;
    \n-
    117 return v;
    \n-
    118 }
    \n-
    \n-
    119
    \n-
    123
    \n-
    125 inline size_t dim() const override { return Dim(); }
    \n-
    126
    \n-
    128 inline static size_t Dim() { return dimension; }
    \n-
    129
    \n-
    \n-
    131 inline Cal3_S2Stereo retract(const Vector& d) const {
    \n-
    132 return Cal3_S2Stereo(fx() + d(0), fy() + d(1), skew() + d(2), px() + d(3),
    \n-
    133 py() + d(4), b_ + d(5));
    \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 Vector6 localCoordinates(const Cal3_S2Stereo& T2) const {
    \n-
    138 return T2.vector() - vector();
    \n-
    139 }
    \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-
    140
    \n
    144
    \n-
    145 private:
    \n-
    147 friend class boost::serialization::access;
    \n-
    148 template <class Archive>
    \n-
    149 void serialize(Archive& ar, const unsigned int /*version*/) {
    \n-
    150 ar& boost::serialization::make_nvp(
    \n-
    151 "Cal3_S2", boost::serialization::base_object<Cal3_S2>(*this));
    \n-
    152 ar& BOOST_SERIALIZATION_NVP(b_);
    \n-
    153 }
    \n-
    155};
    \n-
    \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// Define GTSAM traits
    \n-
    158template <>
    \n-
    159struct traits<Cal3_S2Stereo> : public internal::Manifold<Cal3_S2Stereo> {};
    \n+
    157 friend class boost::serialization::access;
    \n+
    158
    \n
    160
    \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+
    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+
    Concept check for values that can be used in unit tests.
    \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
    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+
    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-
    Template to create a binary predicate.
    Definition Testable.h:111
    \n-
    The most common 5DOF 3D->2D calibration.
    Definition Cal3_S2.h:34
    \n-
    The most common 5DOF 3D->2D calibration, stereo version.
    Definition Cal3_S2Stereo.h:30
    \n-
    Vector6 vector() const
    vectorized form (column-wise)
    Definition Cal3_S2Stereo.h:114
    \n-
    Cal3_S2Stereo(double fx, double fy, double s, double u0, double v0, double b)
    constructor from doubles
    Definition Cal3_S2Stereo.h:47
    \n-
    Vector6 localCoordinates(const Cal3_S2Stereo &T2) const
    Unretraction for the calibration.
    Definition Cal3_S2Stereo.h:137
    \n-
    const Cal3_S2 & calibration() const
    return calibration, same for left and right
    Definition Cal3_S2Stereo.h:105
    \n-
    size_t dim() const override
    return DOF, dimensionality of tangent space
    Definition Cal3_S2Stereo.h:125
    \n-
    Vector3 calibrate(const Vector3 &p) const
    Convert homogeneous image coordinates to intrinsic coordinates.
    Definition Cal3_S2Stereo.h:85
    \n-
    Cal3_S2Stereo retract(const Vector &d) const
    Given 6-dim tangent vector, create new calibration.
    Definition Cal3_S2Stereo.h:131
    \n-
    Matrix3 K() const override
    return calibration matrix K, same for left and right
    Definition Cal3_S2Stereo.h:108
    \n-
    static size_t Dim()
    return DOF, dimensionality of tangent space
    Definition Cal3_S2Stereo.h:128
    \n-
    Cal3_S2Stereo(double fov, int w, int h, double b)
    easy constructor; field-of-view in degrees, assumes zero skew
    Definition Cal3_S2Stereo.h:55
    \n-
    double baseline() const
    return baseline
    Definition Cal3_S2Stereo.h:111
    \n-
    Cal3_S2Stereo(const Vector6 &d)
    constructor from vector
    Definition Cal3_S2Stereo.h:51
    \n-
    Cal3_S2Stereo()=default
    default calibration leaves coordinates unchanged
    \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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,204 +1,268 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Cal3_S2Stereo.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/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bh>\n-21#include \n-22\n-23namespace _\bg_\bt_\bs_\ba_\bm {\n-24\n-_\b3_\b0class GTSAM_EXPORT _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo : public _\bC_\ba_\bl_\b3_\b__\bS_\b2 {\n-31 private:\n-32 double b_ = 1.0f;\n-33\n-34 public:\n-35 enum { dimension = 6 };\n-36\n-38 using shared_ptr = boost::shared_ptr;\n-39\n-42\n-_\b4_\b4 _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo() = default;\n-45\n-_\b4_\b7 _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo(double fx, double fy, double s, double u0, double v0, double\n-b)\n-48 : _\bC_\ba_\bl_\b3_\b__\bS_\b2(fx, fy, s, u0, v0), b_(b) {}\n-49\n-_\b5_\b1 _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo(const Vector6& d)\n-52 : _\bC_\ba_\bl_\b3_\b__\bS_\b2(d(0), d(1), d(2), d(3), d(4)), b_(d(5)) {}\n-53\n-_\b5_\b5 _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo(double fov, int w, int h, double b)\n-56 : _\bC_\ba_\bl_\b3_\b__\bS_\b2(fov, w, h), b_(b) {}\n-57\n-59\n-67 _\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 _\b6_\b> Dcal = boost::\n-none,\n-68 _\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-69\n-77 _\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 _\b6_\b> Dcal = boost::none,\n-78 _\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-79\n-_\b8_\b5 Vector3 _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be(const Vector3& p) const { return Cal3_S2::calibrate(p); }\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+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+_\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-91 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,\n-92 const _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo& cal);\n-93\n-95 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const override;\n-96\n-98 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo& other, double tol = 10e-9) const;\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-103\n-_\b1_\b0_\b5 const _\bC_\ba_\bl_\b3_\b__\bS_\b2& _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn() const { return *this; }\n-106\n-_\b1_\b0_\b8 Matrix3 _\bK() const override { return Cal3_S2::K(); }\n-109\n-_\b1_\b1_\b1 inline double _\bb_\ba_\bs_\be_\bl_\bi_\bn_\be() const { return b_; }\n-112\n-_\b1_\b1_\b4 Vector6 _\bv_\be_\bc_\bt_\bo_\br() const {\n-115 Vector6 v;\n-116 v << Cal3_S2::vector(), b_;\n-117 return v;\n-118 }\n-119\n-123\n-_\b1_\b2_\b5 inline size_t _\bd_\bi_\bm() const override { return Dim(); }\n-126\n-_\b1_\b2_\b8 inline static size_t _\bD_\bi_\bm() { return dimension; }\n-129\n-_\b1_\b3_\b1 inline _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo _\br_\be_\bt_\br_\ba_\bc_\bt(const Vector& d) const {\n-132 return _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo(fx() + d(0), fy() + d(1), skew() + d(2), px() + d(3),\n-133 py() + d(4), b_ + d(5));\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 Vector6 _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo& T2) const {\n-138 return T2._\bv_\be_\bc_\bt_\bo_\br() - vector();\n-139 }\n-140\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-145 private:\n-_\b1_\b4_\b7 friend class boost::serialization::access;\n-148 template \n-149 void serialize(Archive& ar, const unsigned int /*version*/) {\n-150 ar& boost::serialization::make_nvp(\n-151 \"Cal3_S2\", boost::serialization::base_object(*this));\n-152 ar& BOOST_SERIALIZATION_NVP(b_);\n-153 }\n-155};\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// Define GTSAM traits\n-158template <>\n-_\b1_\b5_\b9struct _\bt_\br_\ba_\bi_\bt_\bs<_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {};\n+157 friend class boost::serialization::access;\n+158\n 160\n-161template <>\n-_\b1_\b6_\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-163};\n-164\n-165} // \\ namespace gtsam\n-_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bh\n-The most common 5DOF 3D->2D calibration.\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+_\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__\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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_\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_\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:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br\n-Vector6 vector() const\n-vectorized form (column-wise)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2Stereo.h:114\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo\n-Cal3_S2Stereo(double fx, double fy, double s, double u0, double v0, double b)\n-constructor from doubles\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2Stereo.h:47\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n-Vector6 localCoordinates(const Cal3_S2Stereo &T2) const\n-Unretraction for the calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2Stereo.h:137\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b:_\b:_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn\n-const Cal3_S2 & calibration() const\n-return calibration, same for left and right\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2Stereo.h:105\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b:_\b:_\bd_\bi_\bm\n-size_t dim() const override\n-return DOF, dimensionality of tangent space\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2Stereo.h:125\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b:_\b:_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be\n-Vector3 calibrate(const Vector3 &p) const\n-Convert homogeneous image coordinates to intrinsic coordinates.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2Stereo.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt\n-Cal3_S2Stereo retract(const Vector &d) const\n-Given 6-dim tangent vector, create new calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2Stereo.h:131\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b:_\b:_\bK\n-Matrix3 K() const override\n-return calibration matrix K, same for left and right\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2Stereo.h:108\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\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_S2Stereo.h:128\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo\n-Cal3_S2Stereo(double fov, int w, int h, double b)\n-easy constructor; field-of-view in degrees, assumes zero skew\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2Stereo.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b:_\b:_\bb_\ba_\bs_\be_\bl_\bi_\bn_\be\n-double baseline() const\n-return baseline\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2Stereo.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo\n-Cal3_S2Stereo(const Vector6 &d)\n-constructor from vector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2Stereo.h:51\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo\n-Cal3_S2Stereo()=default\n-default calibration leaves coordinates unchanged\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\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\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/a00305.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00305.html", "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/Rot3M.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,51 +94,41 @@\n \n \n \n \n \n
    \n \n-
    Cal3Unified.h File Reference
    \n+
    Rot3M.cpp File Reference
    \n
    \n
    \n \n-

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

    Rotation (internal: 3*3 matrix 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+

    Rotation (internal: 3*3 matrix representation*)

    \n+
    Author
    Alireza Fathi
    \n+
    \n+Christian Potthast
    \n+
    \n+Frank Dellaert
    \n
    \n-Varun Agrawal
    \n+Richard Roberts
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,33 +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-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+_\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 N\bNa\bam\bme\bes\bsp\bpa\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-Unified Calibration Model, see Mei07icra for details.\n- Date\n- Mar 8, 2014\n+Rotation (internal: 3*3 matrix representation*)\n Author\n- Jing Dong\n- Varun Agrawal\n+ Alireza Fathi\n+ Christian Potthast\n+ Frank Dellaert\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_\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/a00311_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00311_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/SOn.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@@ -98,400 +98,178 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    SOn.h
    \n+
    OrientedPlane3.h
    \n
    \n
    \n-Go to the documentation of this file.
    1/* ----------------------------------------------------------------------------
    \n+
    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+
    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 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#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+
    21#pragma once
    \n+
    22
    \n+
    23#include <gtsam/geometry/Unit3.h>
    \n+\n+
    25#include <string>
    \n
    26
    \n-
    27#include <boost/serialization/nvp.hpp>
    \n+
    27namespace gtsam {
    \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-
    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+
    \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+
    45
    \n+
    48
    \n+
    \n+\n+
    51 n_(), d_(0.0) {
    \n+
    52 }
    \n+
    \n+
    53
    \n+
    \n+
    55 OrientedPlane3(const Unit3& n, double d) :
    \n+
    56 n_(n), d_(d) {
    \n+
    57 }
    \n+
    \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+
    \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-
    73 public:
    \n-
    76
    \n-
    78 template <int N_ = N, typename = IsFixed<N_>>
    \n-
    79 SO() : matrix_(MatrixNN::Identity()) {}
    \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 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-
    90 template <typename Derived>
    \n-
    91 explicit SO(const Eigen::MatrixBase<Derived>& R) : matrix_(R.eval()) {}
    \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-
    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+
    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-
    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+
    110 inline size_t dim() const {
    \n+
    111 return 3;
    \n+
    112 }
    \n+
    \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+
    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+
    \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-
    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-
    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-
    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-
    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/*
    \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 Lie types.
    \n-
    make_shared trampoline function to ensure proper alignment
    \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-
    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+
    3D Pose
    \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+
    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 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+
    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-
    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+
    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,507 +1,201 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\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+OrientedPlane3.h\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+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 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#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+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-27#include \n+27namespace _\bg_\bt_\bs_\ba_\bm {\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-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+_\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+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+_\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-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+_\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-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+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 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-90 template \n-_\b9_\b1 explicit _\bS_\bO(const Eigen::MatrixBase& R) : _\bm_\ba_\bt_\br_\bi_\bx_\b_(R.eval()) {}\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-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+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-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+_\b1_\b1_\b0 inline size_t _\bd_\bi_\bm() const {\n+111 return 3;\n+112 }\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+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+_\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-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-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-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-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/*\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-_\bL_\bi_\be_\b._\bh\n-Base class and basic functions for Lie 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-_\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-_\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+_\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:_\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:_\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:_\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:_\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_\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:_\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 * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bO_\bn_\b._\bh\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/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/Cal3Bundler.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,51 +94,36 @@\n
    \n
    \n \n \n \n
    \n \n-
    Cal3Bundler.h File Reference
    \n+
    CalibratedCamera.cpp File Reference
    \n
    \n
    \n \n-

    Calibration used by Bundler. \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-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

    Detailed Description

    \n-

    Calibration used by Bundler.

    \n-
    Date
    Sep 25, 2010
    \n-
    Author
    Yong Dian Jian
    \n-
    \n-Varun Agrawal
    \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,32 +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-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-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-\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 *\b**\b**\b**\b**\b* D\bDe\bet\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+Calibrated camera for which only pose is unknown.\n Date\n- Sep 25, 2010\n+ Aug 17, 2009\n Author\n- Yong Dian Jian\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_\bB_\bu_\bn_\bd_\bl_\be_\br_\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/a00317.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00317.html", "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/Cal3Bundler.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+
    Cal3Bundler.h File Reference
    \n
    \n
    \n \n-

    Cyclic group, i.e., the integers modulo N. \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+\n+\n \n

    \n Classes

    class  gtsam::Cyclic< N >
     Cyclic group of order N. More...
    class  gtsam::Cal3Bundler
     Calibration used by Bundler. More...
     
    struct  gtsam::traits< Cyclic< N > >
     Define cyclic group to be a model of the Additive Group concept. 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

    Detailed Description

    \n-

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

    \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,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-Cyclic.h File Reference\n-Cyclic group, i.e., the integers modulo N. _\bM_\bo_\br_\be_\b._\b._\b.\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_\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+ 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_\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 _\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 \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+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- * _\bC_\by_\bc_\bl_\bi_\bc_\b._\bh\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/a00317.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00317.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var a00317 = [\n- [\"gtsam::Cyclic< N >\", \"a03060.html\", \"a03060\"],\n- [\"gtsam::traits< Cyclic< N > >\", \"a03064.html\", 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/a00317_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00317_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/Cal3Bundler.h Source File\n \n \n \n \n \n \n \n@@ -98,114 +98,162 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    Cyclic.h
    \n+
    Cal3Bundler.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-
    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-
    76
    \n-
    Concept check for values that can be used in unit tests.
    \n-
    Concept check class for variable types with Group properties.
    \n+
    20#pragma once
    \n+
    21
    \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+
    35 double tol_ = 1e-5;
    \n+
    36
    \n+
    37 // NOTE: We use the base class fx to represent the common focal length.
    \n+
    38 // Also, image center parameters (u0, v0) are not optimized
    \n+
    39 // but are treated as constants.
    \n+
    40
    \n+
    41 public:
    \n+
    42 enum { dimension = 3 };
    \n+
    43
    \n+
    45 using shared_ptr = boost::shared_ptr<Cal3Bundler>;
    \n+
    46
    \n+
    49
    \n+
    51 Cal3Bundler() = default;
    \n+
    52
    \n+
    \n+
    62 Cal3Bundler(double f, double k1, double k2, double u0 = 0, double v0 = 0,
    \n+
    63 double tol = 1e-5)
    \n+
    64 : Cal3(f, f, 0, u0, v0), k1_(k1), k2_(k2), tol_(tol) {}
    \n+
    \n+
    65
    \n+
    66 ~Cal3Bundler() override {}
    \n+
    67
    \n+
    71
    \n+
    73 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,
    \n+
    74 const Cal3Bundler& cal);
    \n+
    75
    \n+
    77 void print(const std::string& s = "") const override;
    \n+
    78
    \n+
    80 bool equals(const Cal3Bundler& K, double tol = 10e-9) const;
    \n+
    81
    \n+
    85
    \n+
    87 inline double k1() const { return k1_; }
    \n+
    88
    \n+
    90 inline double k2() const { return k2_; }
    \n+
    91
    \n+
    93 inline double px() const { return u0_; }
    \n+
    94
    \n+
    96 inline double py() const { return v0_; }
    \n+
    97
    \n+
    98 Matrix3 K() const override;
    \n+
    99 Vector4 k() const;
    \n+
    100
    \n+
    101 Vector3 vector() const;
    \n+
    102
    \n+
    103#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
    \n+
    105 inline double GTSAM_DEPRECATED u0() const { return u0_; }
    \n+
    106
    \n+
    108 inline double GTSAM_DEPRECATED v0() const { return v0_; }
    \n+
    109#endif
    \n+
    110
    \n+
    119 Point2 uncalibrate(const Point2& p, OptionalJacobian<2, 3> Dcal = boost::none,
    \n+
    120 OptionalJacobian<2, 2> Dp = boost::none) const;
    \n+
    121
    \n+
    130 Point2 calibrate(const Point2& pi, OptionalJacobian<2, 3> Dcal = boost::none,
    \n+
    131 OptionalJacobian<2, 2> Dp = boost::none) const;
    \n+
    132
    \n+
    134 Matrix2 D2d_intrinsic(const Point2& p) const;
    \n+
    135
    \n+
    137 Matrix23 D2d_calibration(const Point2& p) const;
    \n+
    138
    \n+
    140 Matrix25 D2d_intrinsic_calibration(const Point2& p) const;
    \n+
    141
    \n+
    145
    \n+
    147 size_t dim() const override { return Dim(); }
    \n+
    148
    \n+
    150 inline static size_t Dim() { return dimension; }
    \n+
    151
    \n+
    \n+
    153 inline Cal3Bundler retract(const Vector& d) const {
    \n+
    154 return Cal3Bundler(fx_ + d(0), k1_ + d(1), k2_ + d(2), u0_, v0_);
    \n+
    155 }
    \n+
    \n+
    156
    \n+
    \n+
    158 Vector3 localCoordinates(const Cal3Bundler& T2) const {
    \n+
    159 return T2.vector() - vector();
    \n+
    160 }
    \n+
    \n+
    161
    \n+
    162 private:
    \n+
    166
    \n+
    168 friend class boost::serialization::access;
    \n+
    169 template <class Archive>
    \n+
    170 void serialize(Archive& ar, const unsigned int /*version*/) {
    \n+
    171 ar& boost::serialization::make_nvp(
    \n+
    172 "Cal3Bundler", boost::serialization::base_object<Cal3>(*this));
    \n+
    173 ar& BOOST_SERIALIZATION_NVP(k1_);
    \n+
    174 ar& BOOST_SERIALIZATION_NVP(k2_);
    \n+
    175 ar& BOOST_SERIALIZATION_NVP(tol_);
    \n+
    176 }
    \n+
    177
    \n+
    179};
    \n+
    \n+
    180
    \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
    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-
    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+
    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+
    double k2() const
    distorsion parameter k2
    Definition Cal3Bundler.h:90
    \n+
    Cal3Bundler()=default
    Default constructor.
    \n+
    Cal3Bundler retract(const Vector &d) const
    Update calibration with tangent space delta.
    Definition Cal3Bundler.h:153
    \n+
    double py() const
    image center in y
    Definition Cal3Bundler.h:96
    \n+
    Cal3Bundler(double f, double k1, double k2, double u0=0, double v0=0, double tol=1e-5)
    Constructor.
    Definition Cal3Bundler.h:62
    \n+
    Vector3 localCoordinates(const Cal3Bundler &T2) const
    Calculate local coordinates to another calibration.
    Definition Cal3Bundler.h:158
    \n+
    double px() const
    image center in x
    Definition Cal3Bundler.h:93
    \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", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,118 +1,196 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Cyclic.h\n+Cal3Bundler.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-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-76\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_\br_\bo_\bu_\bp_\b._\bh\n-Concept check class for variable types with Group properties.\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+25namespace _\bg_\bt_\bs_\ba_\bm {\n+26\n+_\b3_\b2class GTSAM_EXPORT _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br : public _\bC_\ba_\bl_\b3 {\n+33 private:\n+34 double k1_ = 0.0f, k2_ = 0.0f;\n+35 double tol_ = 1e-5;\n+36\n+37 // NOTE: We use the base class fx to represent the common focal length.\n+38 // Also, image center parameters (u0, v0) are not optimized\n+39 // but are treated as constants.\n+40\n+41 public:\n+42 enum { dimension = 3 };\n+43\n+45 using shared_ptr = boost::shared_ptr;\n+46\n+49\n+_\b5_\b1 _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br() = default;\n+52\n+_\b6_\b2 _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br(double f, double k1, double k2, double u0 = 0, double v0 = 0,\n+63 double tol = 1e-5)\n+64 : _\bC_\ba_\bl_\b3(f, f, 0, u0, v0), k1_(k1), k2_(k2), tol_(tol) {}\n+65\n+66 _\b~_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br() override {}\n+67\n+71\n+73 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,\n+74 const Cal3Bundler& cal);\n+75\n+77 void print(const std::string& s = \"\") const override;\n+78\n+80 bool equals(const Cal3Bundler& K, double tol = 10e-9) const;\n+81\n+85\n+_\b8_\b7 inline double _\bk_\b1() const { return k1_; }\n+88\n+_\b9_\b0 inline double _\bk_\b2() const { return k2_; }\n+91\n+_\b9_\b3 inline double _\bp_\bx() const { return u0_; }\n+94\n+_\b9_\b6 inline double _\bp_\by() const { return v0_; }\n+97\n+98 Matrix3 K() const override;\n+99 Vector4 k() const;\n+100\n+101 Vector3 vector() const;\n+102\n+103#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n+105 inline double GTSAM_DEPRECATED u0() const { return u0_; }\n+106\n+108 inline double GTSAM_DEPRECATED v0() const { return v0_; }\n+109#endif\n+110\n+119 _\bP_\bo_\bi_\bn_\bt_\b2 uncalibrate(const Point2& p, OptionalJacobian<2, 3> Dcal = boost::\n+none,\n+120 OptionalJacobian<2, 2> Dp = boost::none) const;\n+121\n+130 _\bP_\bo_\bi_\bn_\bt_\b2 calibrate(const Point2& pi, OptionalJacobian<2, 3> Dcal = boost::\n+none,\n+131 OptionalJacobian<2, 2> Dp = boost::none) const;\n+132\n+134 Matrix2 D2d_intrinsic(const Point2& p) const;\n+135\n+137 Matrix23 D2d_calibration(const Point2& p) const;\n+138\n+140 Matrix25 D2d_intrinsic_calibration(const Point2& p) const;\n+141\n+145\n+_\b1_\b4_\b7 size_t _\bd_\bi_\bm() const override { return Dim(); }\n+148\n+_\b1_\b5_\b0 inline static size_t _\bD_\bi_\bm() { return dimension; }\n+151\n+_\b1_\b5_\b3 inline _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br _\br_\be_\bt_\br_\ba_\bc_\bt(const Vector& d) const {\n+154 return _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br(fx_ + d(0), k1_ + d(1), k2_ + d(2), u0_, v0_);\n+155 }\n+156\n+_\b1_\b5_\b8 Vector3 _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br& T2) const {\n+159 return T2.vector() - vector();\n+160 }\n+161\n+162 private:\n+166\n+_\b1_\b6_\b8 friend class boost::serialization::access;\n+169 template \n+170 void serialize(Archive& ar, const unsigned int /*version*/) {\n+171 ar& boost::serialization::make_nvp(\n+172 \"Cal3Bundler\", boost::serialization::base_object(*this));\n+173 ar& BOOST_SERIALIZATION_NVP(k1_);\n+174 ar& BOOST_SERIALIZATION_NVP(k2_);\n+175 ar& BOOST_SERIALIZATION_NVP(tol_);\n+176 }\n+177\n+179};\n+180\n+181template <>\n+_\b1_\b8_\b2struct _\bt_\br_\ba_\bi_\bt_\bs<_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {};\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:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n+{};\n+186\n+187} // 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:_\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:_\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+_\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\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_\bB_\bu_\bn_\bd_\bl_\be_\br\n+Calibration used by Bundler.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Bundler.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b:_\b:_\bk_\b1\n+double k1() const\n+distorsion parameter k1\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Bundler.h:87\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b:_\b:_\bk_\b2\n+double k2() const\n+distorsion parameter k2\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Bundler.h:90\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br\n+Cal3Bundler()=default\n+Default constructor.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt\n+Cal3Bundler retract(const Vector &d) const\n+Update calibration with tangent space delta.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Bundler.h:153\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\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 Cal3Bundler.h:96\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br\n+Cal3Bundler(double f, double k1, double k2, double u0=0, double v0=0, double\n+tol=1e-5)\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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Bundler.h:62\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n+Vector3 localCoordinates(const Cal3Bundler &T2) const\n+Calculate local coordinates to another calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Bundler.h:158\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\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 Cal3Bundler.h:93\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b:_\b:_\bd_\bi_\bm\n+size_t dim() const override\n+return DOF, dimensionality of tangent space\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Bundler.h:147\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\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 Cal3Bundler.h:150\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+ * _\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.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/Cal3DS2.cpp 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@@ -94,41 +94,54 @@\n \n \n \n \n \n
    \n \n-
    Cal3DS2.cpp File Reference
    \n+Classes |\n+Namespaces
    \n+
    PinholePose.h File Reference
    \n \n
    \n+\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+Classes

    class  gtsam::PinholeBaseK< CALIBRATION >
     A pinhole camera class that has a Pose3 and a fixed Calibration. More...
     
    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 > >
     
    \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+

    Pinhole camera with known calibration.

    \n+
    Author
    Yong-Dian Jian
    \n
    \n-Varun Agrawal
    \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,24 +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-Cal3DS2.cpp File Reference\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+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\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+\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+\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+Pinhole camera with known calibration.\n Author\n- ydjian\n- Varun Agrawal\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- * _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b._\bc_\bp_\bp\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/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/Cal3Bundler.cpp 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@@ -94,39 +94,117 @@\n \n \n \n \n \n
    \n \n-
    Cal3Bundler.cpp File Reference
    \n+
    SO3.h 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-std::ostream & gtsam::operator<< (std::ostream &os, const Cal3Bundler &cal)
     
    \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-
    Date
    Sep 25, 2010
    \n-
    Author
    ydjian
    \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,23 +1,61 @@\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-Cal3Bundler.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+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 N\bNa\bam\bme\bes\bsp\bpa\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-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_\bB_\bu_\bn_\bd_\bl_\be_\br &cal)\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- Date\n- Sep 25, 2010\n+3*3 matrix representation of SO(3)\n Author\n- ydjian\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- * _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b._\bc_\bp_\bp\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/a00326.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00326.html", "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/Cal3Fisheye.h File Reference\n \n \n \n \n \n \n \n@@ -94,41 +94,51 @@\n \n \n \n \n \n
    \n \n-
    Pose2.cpp File Reference
    \n+Classes |\n+Namespaces
    \n+
    Cal3Fisheye.h File Reference
    \n \n
    \n \n-

    2D Pose \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+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-Functions

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

    Detailed Description

    \n-

    2D Pose

    \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,21 +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-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\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 N\bNa\bam\bme\bes\bsp\bpa\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-2D Pose\n+Calibration of a fisheye camera.\n+ Date\n+ Apr 8, 2020\n+ Author\n+ ghaggin\n+ Varun Agrawal\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+ * _\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/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/SphericalCamera.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,52 +94,41 @@\n \n \n \n \n \n
    \n \n-
    SphericalCamera.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    Pose2.cpp File Reference
    \n \n
    \n \n-

    Calibrated camera with spherical projection. \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-\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+std::ostream & gtsam::operator<< (std::ostream &os, const Pose2 &pose)
     
    \n

    Detailed Description

    \n-

    Calibrated camera with spherical projection.

    \n-
    Date
    Aug 26, 2021
    \n-
    Author
    Luca Carlone
    \n+

    2D Pose

    \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-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+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-Calibrated camera with spherical projection.\n- Date\n- Aug 26, 2021\n- Author\n- Luca Carlone\n+2D Pose\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+ * _\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/a00335.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00335.html", "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/Cyclic.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,51 +94,35 @@\n \n \n \n \n \n
    \n \n-
    PinholeCamera.h File Reference
    \n+
    Cyclic.cpp File Reference
    \n
    \n
    \n \n-

    Base class for all pinhole cameras. \n+

    Cyclic group implementation. \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::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 >
     
    \n \n \n \n \n

    \n Namespaces

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

    Detailed Description

    \n-

    Base class for all pinhole cameras.

    \n-
    Author
    Yong-Dian Jian
    \n-
    Date
    Jan 27, 2012
    \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,33 +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-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:_\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-\u00a0\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 *\b**\b**\b**\b**\b* D\bDe\bet\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+Cyclic group implementation.\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+ * _\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/a00338.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00338.html", "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/geometry/Cal3Bundler.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,38 +94,39 @@\n \n \n \n \n \n
    \n \n-
    SOn.cpp File Reference
    \n+Namespaces |\n+Functions
    \n+
    Cal3Bundler.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+std::ostream & gtsam::operator<< (std::ostream &os, const Cal3Bundler &cal)
     
    \n

    Detailed Description

    \n-

    Definitions of dynamic specializations of SO(n)

    \n-
    Author
    Frank Dellaert
    \n-
    \n-Varun Agrawal
    \n-
    Date
    March 2019
    \n+
    Date
    Sep 25, 2010
    \n+
    Author
    ydjian
    \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\n-SOn.cpp File Reference\n-Definitions of dynamic specializations of SO(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+Cal3Bundler.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_\bB_\bu_\bn_\bd_\bl_\be_\br &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-Definitions of dynamic specializations of SO(n)\n- Author\n- Frank Dellaert\n- Varun Agrawal\n Date\n- March 2019\n+ Sep 25, 2010\n+ Author\n+ ydjian\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bO_\bn_\b._\bc_\bp_\bp\n+ * _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\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/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/Pose3.h 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@@ -95,75 +95,50 @@\n \n \n \n \n
    \n \n-
    Pose3.h File Reference
    \n+Namespaces
    \n+
    StereoCamera.h File Reference
    \n \n
    \n \n-

    3D Pose \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 \n-\n-\n-\n-\n-\n-\n-\n+\n \n

    \n Classes

    class  gtsam::Pose3
     A 3D pose (R,t) : (Rot3,Point3) More...
    class  gtsam::StereoCheiralityException
     
    struct  gtsam::Pose3::ChartAtOrigin
    class  gtsam::StereoCamera
     A stereo camera class, parameterize by left camera pose and stereo calibration. More...
     
    struct  gtsam::traits< Pose3 >
    struct  gtsam::traits< StereoCamera >
     
    struct  gtsam::traits< const Pose3 >
     
    struct  gtsam::Bearing< Pose3, Point3 >
     
    struct  gtsam::Bearing< Pose3, Pose3 >
     
    struct  gtsam::Range< Pose3, T >
    struct  gtsam::traits< const StereoCamera >
     
    \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 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,48 +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 | _\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+_\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:_\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+ 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-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+ 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 _\bP_\bo_\bs_\be_\b3_\b _\b>\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 _\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+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-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 Stereo Camera based on two Simple Cameras.\n+A Rectified Stereo Camera.\n+ Author\n+ Chris Beall\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_\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/a00341.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00341.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,9 +1,5 @@\n var a00341 = [\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 >\", \"a00341.html#aefb606eb24889c0f418acf1515a2c723\", null]\n+ [\"gtsam::StereoCheiralityException\", \"a03336.html\", null],\n+ [\"gtsam::traits< StereoCamera >\", \"a03344.html\", null],\n+ [\"gtsam::traits< const StereoCamera >\", \"a03348.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00341_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00341_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/Pose3.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@@ -98,334 +98,222 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    Pose3.h
    \n+
    StereoCamera.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// \\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-
    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+\n+\n+\n+
    23
    \n+
    24namespace gtsam {
    \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+
    42
    \n+
    \n+
    47class GTSAM_EXPORT StereoCamera {
    \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+\n+
    56 typedef StereoPoint2Vector MeasurementVector;
    \n+
    57
    \n+
    58private:
    \n+
    59 Pose3 leftCamPose_;
    \n+
    60 Cal3_S2Stereo::shared_ptr K_;
    \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+
    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 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+
    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-
    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-
    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+
    \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+
    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+
    \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 static Pose3 Expmap(const Vector6& xi, OptionalJacobian<6, 6> Hxi = boost::none);
    \n+
    139 StereoPoint2 project(const Point3& point) const;
    \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+
    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-
    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+
    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 // 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-
    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-
    \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-
    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 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-
    \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-
    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 Point
    \n-
    Bearing-Range product.
    \n-
    3D rotation represented as a rotation matrix or quaternion
    \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+
    The most common 5DOF 3D->2D calibration + Stereo baseline.
    \n+
    3D Pose
    \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
    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+
    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-
    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+
    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-
    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+
    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,402 +1,265 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Pose3.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-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-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+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+_\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 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+_\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-_\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+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 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+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-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-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+_\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+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+_\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 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+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-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+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-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+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 // 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-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-_\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-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 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-_\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-_\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-_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n-3D Point\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+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+_\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+_\bP_\bo_\bs_\be_\b3_\b._\bh\n+3D Pose\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_\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:_\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:_\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:_\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_\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:_\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- * _\bP_\bo_\bs_\be_\b3_\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/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/Point3.h 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@@ -98,95 +98,67 @@\n \n
    \n \n-
    Point3.h File Reference
    \n+
    SO4.h File Reference
    \n
    \n
    \n \n-

    3D Point \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

    \n Classes

    struct  gtsam::Range< Point3, Point3 >
    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-\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+using gtsam::SO4 = SO< 4 >
     
    \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\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.
     
    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-

    3D Point

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

    4*4 matrix representation of SO(4)

    \n+
    Author
    Frank Dellaert
    \n
    \n-Frank Dellaert
    \n+Luca Carlone
    \n+
    Date
    March 2019
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,72 +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-Point3.h File Reference\n-3D Point _\bM_\bo_\br_\be_\b._\b._\b.\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:_\bR_\ba_\bn_\bg_\be_\b<_\b _\bP_\bo_\bi_\bn_\bt_\b3_\b,_\b _\bP_\bo_\bi_\bn_\bt_\b3_\b _\b>\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- 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+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- 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+ 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-3D Point\n+4*4 matrix representation of SO(4)\n Author\n- Alireza Fathi\n- Christian Potthast\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_\bi_\bn_\bt_\b3_\b._\bh\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/a00344.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00344.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,11 +1,7 @@\n var a00344 = [\n- [\"gtsam::Range< Point3, Point3 >\", \"a03152.html\", null],\n- [\"Point3\", \"a00344.html#aaa8ed89fd60ea4601d9de63c4811525b\", null],\n- [\"cross\", \"a00344.html#a86bf6ed2ffb0ecc42a7deb8922f4ca4f\", null],\n- [\"distance3\", \"a00344.html#aa42f7ec660b7353de39f9c86a26711cc\", null],\n- [\"dot\", \"a00344.html#a7dc820e4e47218768f104b43a184a1bd\", null],\n- [\"mean\", \"a00344.html#a300205092710091b8745c0a145da20a1\", null],\n- [\"means\", \"a00344.html#a57f778b84bc6106471006421d289b832\", null],\n- [\"norm3\", \"a00344.html#ac37b6f807985ffd25217e33f6136fe58\", null],\n- [\"normalize\", \"a00344.html#abb52bb00c68909fc1147e5d112e8c2ae\", null]\n+ [\"gtsam::traits< SO4 >\", \"a03296.html\", null],\n+ [\"gtsam::traits< const SO4 >\", \"a03300.html\", null],\n+ [\"serialize\", \"a00344.html#a76855a1214bf05a8704ee3deaece6339\", null],\n+ [\"stiefel\", \"a00344.html#a3e57e4771f13855a495ec2c6454c9121\", null],\n+ [\"topLeft\", \"a00344.html#a8d21728e3da4cf1a96e1b6f87a97da47\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00344_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00344_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/Point3.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@@ -98,113 +98,141 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    Point3.h
    \n+
    SO4.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-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// \\callgraph
    \n+
    20#pragma once
    \n
    21
    \n-
    22#pragma once
    \n+
    22#include <gtsam/geometry/SOn.h>
    \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+
    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-
    36typedef Vector3 Point3;
    \n-
    37typedef std::vector<Point3, Eigen::aligned_allocator<Point3> > Point3Vector;
    \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// 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+
    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-
    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+
    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-
    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+
    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-
    76GTSAM_EXPORT Point3Pair means(const std::vector<Point3Pair> &abPointPairs);
    \n-
    77
    \n-
    78template <typename A1, typename A2>
    \n-
    79struct Range;
    \n+
    79GTSAM_EXPORT Matrix43 stiefel(const SO4 &Q, OptionalJacobian<12, 6> H = boost::none);
    \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+
    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 Lie types.
    \n+
    Concept check class for variable types with Group properties.
    \n+
    Base class and basic functions for Manifold 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-
    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+
    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,140 +1,178 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Point3.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-20// \\callgraph\n+20#pragma once\n 21\n-22#pragma once\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 \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+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-_\b3_\b6typedef Vector3 _\bP_\bo_\bi_\bn_\bt_\b3;\n-37typedef std::vector > Point3Vector;\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// 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+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-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+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-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+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-76GTSAM_EXPORT Point3Pair _\bm_\be_\ba_\bn_\bs(const std::vector &abPointPairs);\n-77\n-78template \n-79struct Range;\n+79GTSAM_EXPORT Matrix43 _\bs_\bt_\bi_\be_\bf_\be_\bl(const SO4 &Q, OptionalJacobian<12, 6> H =\n+boost::none);\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-_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-typedef and functions to augment Eigen's VectorXd\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+_\bL_\bi_\be_\b._\bh\n+Base class and basic functions for Lie types.\n+_\bG_\br_\bo_\bu_\bp_\b._\bh\n+Concept check class for variable types with Group properties.\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_\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:_\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_\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 * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\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/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/Rot3.cpp 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@@ -94,53 +94,51 @@\n \n \n \n \n \n
    \n \n-
    Rot3.cpp File Reference
    \n+Classes |\n+Namespaces
    \n+
    Similarity2.h File Reference
    \n \n
    \n \n-

    Rotation, common code between Rotation matrix and Quaternion. \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+Classes

    class  gtsam::Similarity2
     2D similarity transform More...
     
    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-\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+

    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,34 +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-Rot3.cpp File Reference\n-Rotation, common code between Rotation matrix and 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+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+ 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:_\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-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+Implementation of Similarity2 transform.\n Author\n- Alireza Fathi\n- Christian Potthast\n- Frank Dellaert\n- Richard Roberts\n- Varun Agrawal\n+ John Lambert, Varun Agrawal\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_\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/a00347.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00347.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,6 @@\n var a00347 = [\n- [\"RQ\", \"a00347.html#a5172b5b6d51bd5348c7e551e1376f60a\", 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/a00353_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00353_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/Unit3.h Source File\n \n \n \n \n \n \n \n@@ -98,177 +98,245 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    Cal3.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-
    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+
    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+
    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 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+
    57 enum {
    \n+
    58 dimension = 2
    \n+
    59 };
    \n+
    60
    \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+
    \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-
    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-
    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+
    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-
    118 Cal3(const std::string& path);
    \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-
    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+
    122
    \n+
    129 const Matrix32& basis(OptionalJacobian<6, 2> H = boost::none) const;
    \n
    130
    \n-
    132 bool equals(const Cal3& K, double tol = 10e-9) const;
    \n+
    132 Matrix3 skew() const;
    \n
    133
    \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-
    146
    \n-
    148 inline double skew() const { return s_; }
    \n-
    149
    \n-
    151 inline double px() const { return u0_; }
    \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
    152
    \n-
    154 inline double py() const { return v0_; }
    \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+
    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
    \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+
    167 Point3 cross(const Point3& q) const {
    \n+
    168 return point3().cross(q);
    \n+
    169 }
    \n
    \n+
    170
    \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+
    175
    \n+
    \n+
    177 inline static size_t Dim() {
    \n+
    178 return 2;
    \n+
    179 }
    \n+
    \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+
    \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-
    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+
    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+
    #define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
    This marks a GTSAM object to require alignment.
    Definition types.h:308
    \n+
    serialization for Vectors
    \n+
    Base class and basic functions for Manifold types.
    \n+
    typedef and functions to augment Eigen's MatrixXd
    \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-
    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+
    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+
    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-
    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+
    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,224 +1,285 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\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+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-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+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+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 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+57 enum {\n+58 dimension = 2\n+59 };\n+60\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+_\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-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-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+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-118 _\bC_\ba_\bl_\b3(const std::string& path);\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-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+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 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bC_\ba_\bl_\b3& K, double tol = 10e-9) const;\n+132 Matrix3 skew() const;\n 133\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-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+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 152\n-_\b1_\b5_\b4 inline double _\bp_\by() const { return v0_; }\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+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 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+_\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-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+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 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_\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-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+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+_\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+_\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+_\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:_\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:_\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\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:_\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+_\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-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+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- * _\bC_\ba_\bl_\b3_\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/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/Cal3Fisheye.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/triangulation.h File Reference\n \n \n \n \n \n \n \n@@ -95,50 +95,192 @@\n
    \n \n \n \n
    \n \n-
    Cal3Fisheye.h File Reference
    \n+Namespaces |\n+Typedefs |\n+Functions
    \n+
    triangulation.h File Reference
    \n \n
    \n \n-

    Calibration of a fisheye camera. \n+

    Functions for triangulation. \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::Cal3Fisheye
     Calibration of a fisheye camera. More...
    class  gtsam::TriangulationUnderconstrainedException
     Exception thrown by triangulateDLT when SVD returns rank < 3. More...
     
    struct  gtsam::traits< Cal3Fisheye >
    class  gtsam::TriangulationCheiralityException
     Exception thrown by triangulateDLT when landmark is behind one or more of the cameras. More...
     
    struct  gtsam::traits< const Cal3Fisheye >
    struct  gtsam::TriangulationParameters
     
    class  gtsam::TriangulationResult
     TriangulationResult is an optional point, along with the reasons why it is invalid. 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::CameraSetCal3Bundler = CameraSet< PinholeCamera< Cal3Bundler > >
     
    \n+using gtsam::CameraSetCal3_S2 = CameraSet< PinholeCamera< Cal3_S2 > >
     
    \n+using gtsam::CameraSetCal3DS2 = CameraSet< PinholeCamera< Cal3DS2 > >
     
    \n+using gtsam::CameraSetCal3Fisheye = CameraSet< PinholeCamera< Cal3Fisheye > >
     
    \n+using gtsam::CameraSetCal3Unified = CameraSet< PinholeCamera< Cal3Unified > >
     
    \n+using gtsam::CameraSetSpherical = CameraSet< SphericalCamera >
     
    \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\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

    Vector4 gtsam::triangulateHomogeneousDLT (const std::vector< Matrix34, Eigen::aligned_allocator< Matrix34 > > &projection_matrices, const Point2Vector &measurements, double rank_tol=1e-9)
     DLT triangulation: See Hartley and Zisserman, 2nd Ed., page 312.
     
    Vector4 gtsam::triangulateHomogeneousDLT (const std::vector< Matrix34, Eigen::aligned_allocator< Matrix34 > > &projection_matrices, const std::vector< Unit3 > &measurements, double rank_tol=1e-9)
     Same math as Hartley and Zisserman, 2nd Ed., page 312, but with unit-norm bearing vectors (contrarily to pinhole projection, the z entry is not assumed to be 1 as in Hartley and Zisserman)
     
    Point3 gtsam::triangulateDLT (const std::vector< Matrix34, Eigen::aligned_allocator< Matrix34 > > &projection_matrices, const Point2Vector &measurements, double rank_tol=1e-9)
     DLT triangulation: See Hartley and Zisserman, 2nd Ed., page 312.
     
    \n+Point3 gtsam::triangulateDLT (const std::vector< Matrix34, Eigen::aligned_allocator< Matrix34 > > &projection_matrices, const std::vector< Unit3 > &measurements, double rank_tol=1e-9)
     overload of previous function to work with Unit3 (projected to canonical camera)
     
    Point3 gtsam::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.org/pdf/2205.12197.pdf by Sebastien Henry and John Christian.
     
    template<class CALIBRATION >
    std::pair< NonlinearFactorGraph, Valuesgtsam::triangulationGraph (const std::vector< Pose3 > &poses, boost::shared_ptr< CALIBRATION > sharedCal, const Point2Vector &measurements, Key landmarkKey, const Point3 &initialEstimate, const SharedNoiseModel &model=noiseModel::Unit::Create(2))
     Create a factor graph with projection factors from poses and one calibration.
     
    template<class CAMERA >
    std::pair< NonlinearFactorGraph, Valuesgtsam::triangulationGraph (const CameraSet< CAMERA > &cameras, const typename CAMERA::MeasurementVector &measurements, Key landmarkKey, const Point3 &initialEstimate, const SharedNoiseModel &model=nullptr)
     Create a factor graph with projection factors from pinhole cameras (each camera has a pose and calibration)
     
    Point3 gtsam::optimize (const NonlinearFactorGraph &graph, const Values &values, Key landmarkKey)
     Optimize for triangulation.
     
    template<class CALIBRATION >
    Point3 gtsam::triangulateNonlinear (const std::vector< Pose3 > &poses, boost::shared_ptr< CALIBRATION > sharedCal, const Point2Vector &measurements, const Point3 &initialEstimate, const SharedNoiseModel &model=nullptr)
     Given an initial estimate , refine a point using measurements in several cameras.
     
    template<class CAMERA >
    Point3 gtsam::triangulateNonlinear (const CameraSet< CAMERA > &cameras, const typename CAMERA::MeasurementVector &measurements, const Point3 &initialEstimate, const SharedNoiseModel &model=nullptr)
     Given an initial estimate , refine a point using measurements in several cameras.
     
    \n+template<class CAMERA >
    std::vector< Matrix34, Eigen::aligned_allocator< Matrix34 > > gtsam::projectionMatricesFromCameras (const CameraSet< CAMERA > &cameras)
     
    \n+template<class CALIBRATION >
    std::vector< Matrix34, Eigen::aligned_allocator< Matrix34 > > gtsam::projectionMatricesFromPoses (const std::vector< Pose3 > &poses, boost::shared_ptr< CALIBRATION > sharedCal)
     
    template<class CALIBRATION >
    Cal3_S2 gtsam::createPinholeCalibration (const CALIBRATION &cal)
     Create a pinhole calibration from a different Cal3 object, removing distortion.
     
    \n+template<class CALIBRATION , class MEASUREMENT >
    MEASUREMENT gtsam::undistortMeasurementInternal (const CALIBRATION &cal, const MEASUREMENT &measurement, boost::optional< Cal3_S2 > pinholeCal=boost::none)
     Internal undistortMeasurement to be used by undistortMeasurement and undistortMeasurements.
     
    template<class CALIBRATION >
    Point2Vector gtsam::undistortMeasurements (const CALIBRATION &cal, const Point2Vector &measurements)
     Remove distortion for measurements so as if the measurements came from a pinhole camera.
     
    \n+template<>
    Point2Vector gtsam::undistortMeasurements (const Cal3_S2 &cal, const Point2Vector &measurements)
     Specialization for Cal3_S2 as it doesn't need to be undistorted.
     
    template<class CAMERA >
    CAMERA::MeasurementVector gtsam::undistortMeasurements (const CameraSet< CAMERA > &cameras, const typename CAMERA::MeasurementVector &measurements)
     Remove distortion for measurements so as if the measurements came from a pinhole camera.
     
    \n+template<class CAMERA = PinholeCamera<Cal3_S2>>
    PinholeCamera< Cal3_S2 >::MeasurementVector gtsam::undistortMeasurements (const CameraSet< PinholeCamera< Cal3_S2 > > &cameras, const PinholeCamera< Cal3_S2 >::MeasurementVector &measurements)
     Specialize for Cal3_S2 to do nothing.
     
    \n+template<class CAMERA = SphericalCamera>
    SphericalCamera::MeasurementVector gtsam::undistortMeasurements (const CameraSet< SphericalCamera > &cameras, const SphericalCamera::MeasurementVector &measurements)
     Specialize for SphericalCamera to do nothing.
     
    template<class CALIBRATION >
    Point3Vector gtsam::calibrateMeasurementsShared (const CALIBRATION &cal, const Point2Vector &measurements)
     Convert pixel measurements in image to homogeneous measurements in the image plane using shared camera intrinsics.
     
    template<class CAMERA >
    Point3Vector gtsam::calibrateMeasurements (const CameraSet< CAMERA > &cameras, const typename CAMERA::MeasurementVector &measurements)
     Convert pixel measurements in image to homogeneous measurements in the image plane using camera intrinsics of each measurement.
     
    \n+template<class CAMERA = SphericalCamera>
    Point3Vector gtsam::calibrateMeasurements (const CameraSet< SphericalCamera > &cameras, const SphericalCamera::MeasurementVector &measurements)
     Specialize for SphericalCamera to do nothing.
     
    template<class CALIBRATION >
    Point3 gtsam::triangulatePoint3 (const std::vector< Pose3 > &poses, boost::shared_ptr< CALIBRATION > sharedCal, const Point2Vector &measurements, double rank_tol=1e-9, bool optimize=false, const SharedNoiseModel &model=nullptr, const bool useLOST=false)
     Function to triangulate 3D landmark point from an arbitrary number of poses (at least 2) using the DLT.
     
    template<class CAMERA >
    Point3 gtsam::triangulatePoint3 (const CameraSet< CAMERA > &cameras, const typename CAMERA::MeasurementVector &measurements, double rank_tol=1e-9, bool optimize=false, const SharedNoiseModel &model=nullptr, const bool useLOST=false)
     Function to triangulate 3D landmark point from an arbitrary number of poses (at least 2) using the DLT.
     
    \n+template<class CALIBRATION >
    Point3 gtsam::triangulatePoint3 (const CameraSet< PinholeCamera< CALIBRATION > > &cameras, const Point2Vector &measurements, double rank_tol=1e-9, bool optimize=false, const SharedNoiseModel &model=nullptr, const bool useLOST=false)
     Pinhole-specific version.
     
    \n+template<class CAMERA >
    TriangulationResult gtsam::triangulateSafe (const CameraSet< CAMERA > &cameras, const typename CAMERA::MeasurementVector &measured, const TriangulationParameters &params)
     triangulateSafe: extensive checking of the outcome
     
    \n

    Detailed Description

    \n-

    Calibration of a fisheye camera.

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

    Functions for triangulation.

    \n+
    Date
    July 31, 2013
    \n+
    Author
    Chris Beall
    \n+
    \n+Akshay Krishnan
    \n+
    Date
    July 31, 2013
    \n+
    Author
    Chris Beall
    \n+
    \n+Luca Carlone
    \n
    \n-Varun Agrawal
    \n+Akshay Krishnan
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,32 +1,295 @@\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+_\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+triangulation.h File Reference\n+Functions for triangulation. _\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+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bU_\bn_\bd_\be_\br_\bc_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+\u00a0 Exception thrown by triangulateDLT when SVD returns rank < 3. _\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+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+\u00a0 Exception thrown by triangulateDLT when landmark is behind one or more\n+ of the 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_\bF_\bi_\bs_\bh_\be_\by_\be_\b _\b>\n+struct \u00a0 _\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+\u00a0\n+ class \u00a0 _\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+\u00a0 _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt is an optional point, along with the reasons why\n+ it is invalid. _\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:C\bCa\bam\bme\ber\bra\baS\bSe\bet\btC\bCa\bal\bl3\b3B\bBu\bun\bnd\bdl\ble\ber\br = _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br > >\n+\u00a0\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCa\bam\bme\ber\bra\baS\bSe\bet\btC\bCa\bal\bl3\b3_\b_S\bS2\b2 = _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bC_\ba_\bl_\b3_\b__\bS_\b2 > >\n+\u00a0\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCa\bam\bme\ber\bra\baS\bSe\bet\btC\bCa\bal\bl3\b3D\bDS\bS2\b2 = _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bC_\ba_\bl_\b3_\bD_\bS_\b2 > >\n+\u00a0\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCa\bam\bme\ber\bra\baS\bSe\bet\btC\bCa\bal\bl3\b3F\bFi\bis\bsh\bhe\bey\bye\be = _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be > >\n+\u00a0\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCa\bam\bme\ber\bra\baS\bSe\bet\btC\bCa\bal\bl3\b3U\bUn\bni\bif\bfi\bie\bed\bd = _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd > >\n+\u00a0\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCa\bam\bme\ber\bra\baS\bSe\bet\btS\bSp\bph\bhe\ber\bri\bic\bca\bal\bl = _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba >\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+ Vector4\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bH_\bo_\bm_\bo_\bg_\be_\bn_\be_\bo_\bu_\bs_\bD_\bL_\bT (const\n+ std::vector< Matrix34, Eigen::\n+ aligned_allocator< Matrix34 > >\n+ &projection_matrices, const\n+ Point2Vector &measurements, double\n+ rank_tol=1e-9)\n+\u00a0 DLT triangulation: See Hartley and\n+ Zisserman, 2nd Ed., page 312.\n+\u00a0\n+ Vector4\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bH_\bo_\bm_\bo_\bg_\be_\bn_\be_\bo_\bu_\bs_\bD_\bL_\bT (const\n+ std::vector< Matrix34, Eigen::\n+ aligned_allocator< Matrix34 > >\n+ &projection_matrices, const std::\n+ vector< _\bU_\bn_\bi_\bt_\b3 > &measurements, double\n+ rank_tol=1e-9)\n+ Same math as Hartley and Zisserman, 2nd\n+ Ed., page 312, but with unit-norm\n+\u00a0 bearing vectors (contrarily to pinhole\n+ projection, the z entry is not assumed\n+ to be 1 as in Hartley and Zisserman)\n+\u00a0\n+ _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bD_\bL_\bT (const std::\n+ vector< Matrix34, Eigen::\n+ aligned_allocator< Matrix34 > >\n+ &projection_matrices, const\n+ Point2Vector &measurements, double\n+ rank_tol=1e-9)\n+\u00a0 DLT triangulation: See Hartley and\n+ Zisserman, 2nd Ed., page 312.\n+\u00a0\n+ _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\btr\bri\bia\ban\bng\bgu\bul\bla\bat\bte\beD\bDL\bLT\bT (const std::\n+ vector< Matrix34, Eigen::\n+ aligned_allocator< Matrix34 > >\n+ &projection_matrices, const std::\n+ vector< _\bU_\bn_\bi_\bt_\b3 > &measurements, double\n+ rank_tol=1e-9)\n+ overload of previous function to work\n+\u00a0 with _\bU_\bn_\bi_\bt_\b3 (projected to canonical\n+ camera)\n+\u00a0\n+ _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bL_\bO_\bS_\bT (const std::\n+ vector< _\bP_\bo_\bs_\be_\b3 > &poses, const\n+ Point3Vector &calibratedMeasurements,\n+ const SharedIsotropic\n+ &measurementNoise)\n+ Triangulation using the LOST (Linear\n+ Optimal Sine Triangulation) algorithm\n+\u00a0 proposed in _\bh_\bt_\bt_\bp_\bs_\b:_\b/_\b/_\ba_\br_\bx_\bi_\bv_\b._\bo_\br_\bg_\b/_\bp_\bd_\bf_\b/\n+ _\b2_\b2_\b0_\b5_\b._\b1_\b2_\b1_\b9_\b7_\b._\bp_\bd_\bf by Sebastien Henry and\n+ John Christian.\n+\u00a0\n+template\n+std::pair< _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh, _\bV_\ba_\bl_\bu_\be_\bs _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bG_\br_\ba_\bp_\bh (const std::\n+ >\u00a0 vector< _\bP_\bo_\bs_\be_\b3 > &poses, boost::\n+ shared_ptr< CALIBRATION > sharedCal,\n+ const Point2Vector &measurements, _\bK_\be_\by\n+ landmarkKey, const _\bP_\bo_\bi_\bn_\bt_\b3\n+ &initialEstimate, const\n+ _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model=_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:\n+ _\bU_\bn_\bi_\bt_\b:_\b:_\bC_\br_\be_\ba_\bt_\be(2))\n+\u00a0 Create a factor graph with projection\n+ factors from poses and one calibration.\n+\u00a0\n+template\n+std::pair< _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh, _\bV_\ba_\bl_\bu_\be_\bs _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bG_\br_\ba_\bp_\bh (const\n+ >\u00a0 _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< CAMERA > &cameras, const\n+ typename CAMERA::MeasurementVector\n+ &measurements, _\bK_\be_\by landmarkKey, const\n+ _\bP_\bo_\bi_\bn_\bt_\b3 &initialEstimate, const\n+ _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model=nullptr)\n+ Create a factor graph with projection\n+\u00a0 factors from pinhole cameras (each\n+ camera has a pose and calibration)\n+\u00a0\n+ _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be (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+ _\bV_\ba_\bl_\bu_\be_\bs &values, _\bK_\be_\by landmarkKey)\n+\u00a0 Optimize for triangulation.\n+\u00a0\n+template\n+ _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br (const\n+ std::vector< _\bP_\bo_\bs_\be_\b3 > &poses, boost::\n+ shared_ptr< CALIBRATION > sharedCal,\n+ const Point2Vector &measurements, const\n+ _\bP_\bo_\bi_\bn_\bt_\b3 &initialEstimate, const\n+ _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model=nullptr)\n+ Given an initial estimate , refine a\n+\u00a0 point using measurements in several\n+ cameras.\n+\u00a0\n+template\n+ _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br (const\n+ _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< CAMERA > &cameras, const\n+ typename CAMERA::MeasurementVector\n+ &measurements, const _\bP_\bo_\bi_\bn_\bt_\b3\n+ &initialEstimate, const\n+ _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model=nullptr)\n+ Given an initial estimate , refine a\n+\u00a0 point using measurements in several\n+ cameras.\n+\u00a0\n+template\n+ std::vector< Matrix34, Eigen:: g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bro\boj\bje\bec\bct\bti\bio\bon\bnM\bMa\bat\btr\bri\bic\bce\bes\bsF\bFr\bro\bom\bmC\bCa\bam\bme\ber\bra\bas\bs\n+ aligned_allocator< Matrix34 > >\u00a0 (const _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< CAMERA > &cameras)\n+\u00a0\n+template\n+ std::vector< Matrix34, Eigen:: g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bro\boj\bje\bec\bct\bti\bio\bon\bnM\bMa\bat\btr\bri\bic\bce\bes\bsF\bFr\bro\bom\bmP\bPo\bos\bse\bes\bs\n+ aligned_allocator< Matrix34 > >\u00a0 (const std::vector< _\bP_\bo_\bs_\be_\b3 > &poses,\n+ boost::shared_ptr< CALIBRATION >\n+ sharedCal)\n+\u00a0\n+template\n+ _\bC_\ba_\bl_\b3_\b__\bS_\b2\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn (const\n+ CALIBRATION &cal)\n+ Create a pinhole calibration from a\n+\u00a0 different _\bC_\ba_\bl_\b3 object, removing\n+ distortion.\n+\u00a0\n+template\n+ MEASUREMENT\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:u\bun\bnd\bdi\bis\bst\bto\bor\brt\btM\bMe\bea\bas\bsu\bur\bre\bem\bme\ben\bnt\btI\bIn\bnt\bte\ber\brn\bna\bal\bl\n+ (const CALIBRATION &cal, const\n+ MEASUREMENT &measurement, boost::\n+ optional< _\bC_\ba_\bl_\b3_\b__\bS_\b2 > pinholeCal=boost::\n+ none)\n+ Internal undistortMeasurement to be\n+\u00a0 used by undistortMeasurement and\n+ undistortMeasurements.\n+\u00a0\n+template\n+ Point2Vector\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bu_\bn_\bd_\bi_\bs_\bt_\bo_\br_\bt_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs (const\n+ CALIBRATION &cal, const Point2Vector\n+ &measurements)\n+ Remove distortion for measurements so\n+\u00a0 as if the measurements came from a\n+ pinhole camera.\n+\u00a0\n+ template<>\n+ Point2Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:u\bun\bnd\bdi\bis\bst\bto\bor\brt\btM\bMe\bea\bas\bsu\bur\bre\bem\bme\ben\bnt\bts\bs (const\n+ _\bC_\ba_\bl_\b3_\b__\bS_\b2 &cal, const Point2Vector\n+ &measurements)\n+\u00a0 Specialization for _\bC_\ba_\bl_\b3_\b__\bS_\b2 as it\n+ doesn't need to be undistorted.\n+\u00a0\n+template\n+ CAMERA::MeasurementVector\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bu_\bn_\bd_\bi_\bs_\bt_\bo_\br_\bt_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs (const\n+ _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< CAMERA > &cameras, const\n+ typename CAMERA::MeasurementVector\n+ &measurements)\n+ Remove distortion for measurements so\n+\u00a0 as if the measurements came from a\n+ pinhole camera.\n+\u00a0\n+template>\n+ _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bC_\ba_\bl_\b3_\b__\bS_\b2 >:: g\bgt\bts\bsa\bam\bm:\b::\b:u\bun\bnd\bdi\bis\bst\bto\bor\brt\btM\bMe\bea\bas\bsu\bur\bre\bem\bme\ben\bnt\bts\bs (const\n+ MeasurementVector\u00a0 _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bC_\ba_\bl_\b3_\b__\bS_\b2 > >\n+ &cameras, const _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bC_\ba_\bl_\b3_\b__\bS_\b2\n+ >::MeasurementVector &measurements)\n+\u00a0 Specialize for _\bC_\ba_\bl_\b3_\b__\bS_\b2 to do nothing.\n+\u00a0\n+template\n+ SphericalCamera::MeasurementVector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:u\bun\bnd\bdi\bis\bst\bto\bor\brt\btM\bMe\bea\bas\bsu\bur\bre\bem\bme\ben\bnt\bts\bs (const\n+ _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba > &cameras,\n+ const SphericalCamera::\n+ MeasurementVector &measurements)\n+\u00a0 Specialize for _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba to do\n+ nothing.\n+\u00a0\n+template\n+ Point3Vector\u00a0 _\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+ (const CALIBRATION &cal, const\n+ Point2Vector &measurements)\n+ Convert pixel measurements in image to\n+\u00a0 homogeneous measurements in the image\n+ plane using shared camera intrinsics.\n+\u00a0\n+template\n+ Point3Vector\u00a0 _\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 (const\n+ _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< CAMERA > &cameras, const\n+ typename CAMERA::MeasurementVector\n+ &measurements)\n+ Convert pixel measurements in image to\n+\u00a0 homogeneous measurements in the image\n+ plane using camera intrinsics of each\n+ measurement.\n+\u00a0\n+template\n+ Point3Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bca\bal\bli\bib\bbr\bra\bat\bte\beM\bMe\bea\bas\bsu\bur\bre\bem\bme\ben\bnt\bts\bs (const\n+ _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba > &cameras,\n+ const SphericalCamera::\n+ MeasurementVector &measurements)\n+\u00a0 Specialize for _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba to do\n+ nothing.\n+\u00a0\n+template\n+ _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bP_\bo_\bi_\bn_\bt_\b3 (const std::\n+ vector< _\bP_\bo_\bs_\be_\b3 > &poses, boost::\n+ shared_ptr< CALIBRATION > sharedCal,\n+ const Point2Vector &measurements,\n+ double rank_tol=1e-9, bool\n+ _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be=false, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+ &model=nullptr, const bool\n+ useLOST=false)\n+ Function to triangulate 3D landmark\n+\u00a0 point from an arbitrary number of poses\n+ (at least 2) using the DLT.\n+\u00a0\n+template\n+ _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bP_\bo_\bi_\bn_\bt_\b3 (const\n+ _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< CAMERA > &cameras, const\n+ typename CAMERA::MeasurementVector\n+ &measurements, double rank_tol=1e-9,\n+ bool _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be=false, const\n+ _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model=nullptr, const\n+ bool useLOST=false)\n+ Function to triangulate 3D landmark\n+\u00a0 point from an arbitrary number of poses\n+ (at least 2) using the DLT.\n+\u00a0\n+template\n+ _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\btr\bri\bia\ban\bng\bgu\bul\bla\bat\bte\beP\bPo\boi\bin\bnt\bt3\b3 (const\n+ _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< CALIBRATION >\n+ > &cameras, const Point2Vector\n+ &measurements, double rank_tol=1e-9,\n+ bool _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be=false, const\n+ _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model=nullptr, const\n+ bool useLOST=false)\n+\u00a0 Pinhole-specific version.\n+\u00a0\n+template\n+ _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\btr\bri\bia\ban\bng\bgu\bul\bla\bat\bte\beS\bSa\baf\bfe\be (const\n+ _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< CAMERA > &cameras, const\n+ typename CAMERA::MeasurementVector\n+ &measured, const\n+ _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶ms)\n+\u00a0 triangulateSafe: extensive checking of\n+ the outcome\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\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+Functions for triangulation.\n+ Date\n+ July 31, 2013\n+ Author\n+ Chris Beall\n+ Akshay Krishnan\n Date\n- Apr 8, 2020\n+ July 31, 2013\n Author\n- ghaggin\n- Varun Agrawal\n+ Chris Beall\n+ Luca Carlone\n+ Akshay Krishnan\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+ * _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\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/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,30 @@\n var a00359 = [\n- [\"gtsam::traits< Cal3Fisheye >\", \"a03000.html\", null],\n- [\"gtsam::traits< const Cal3Fisheye >\", \"a03004.html\", null]\n+ [\"gtsam::TriangulationUnderconstrainedException\", \"a03364.html\", null],\n+ [\"gtsam::TriangulationCheiralityException\", \"a03368.html\", null],\n+ [\"gtsam::TriangulationParameters\", \"a03372.html\", \"a03372\"],\n+ [\"gtsam::TriangulationResult\", \"a03376.html\", \"a03376\"],\n+ [\"calibrateMeasurements\", \"a00359.html#aebe53b43e5151ce9c355b4aa4ba57c13\", null],\n+ [\"calibrateMeasurements\", \"a00359.html#a48ad2c1085fcae3881fa956f4cd81890\", null],\n+ [\"calibrateMeasurementsShared\", \"a00359.html#a0a386184e9ed9cc4ec844d48d91ba759\", null],\n+ [\"createPinholeCalibration\", \"a00359.html#a3d070e707c4b2d69d0f024a30501f06c\", null],\n+ [\"optimize\", \"a00359.html#a4b0057879b0c5f323185452b0d1a4232\", null],\n+ [\"triangulateDLT\", \"a00359.html#aed2918ac0049316bf09f96879efca3b6\", null],\n+ [\"triangulateDLT\", \"a00359.html#a523a0528f883f1c569a8a4c9a0e514a0\", null],\n+ [\"triangulateHomogeneousDLT\", \"a00359.html#af378e231b519e8bb1f09f4aa13a38dca\", null],\n+ [\"triangulateHomogeneousDLT\", \"a00359.html#a8d16887f8890aaf7ceb5e3cbb181a191\", null],\n+ [\"triangulateLOST\", \"a00359.html#a0f9e5111ffc481b34f0123418b0ecd13\", null],\n+ [\"triangulateNonlinear\", \"a00359.html#a13ac0858b6f6600f5a4242aeb797692f\", null],\n+ [\"triangulateNonlinear\", \"a00359.html#a9dab6b5829b51511735b6b841bb36a36\", null],\n+ [\"triangulatePoint3\", \"a00359.html#a58f4009e3a8872d0ac6780d654cccc2e\", null],\n+ [\"triangulatePoint3\", \"a00359.html#aac6df5bbfb7131cbb05e2a9691e59ba3\", null],\n+ [\"triangulatePoint3\", \"a00359.html#ab79854d3cb3bcc4f562fc88a0731a447\", null],\n+ [\"triangulateSafe\", \"a00359.html#a8d52d7d8a5e5c8d7318ce95ee57e9cfa\", null],\n+ [\"triangulationGraph\", \"a00359.html#a2b96bc32f3c5c436db3fe60e5139319e\", null],\n+ [\"triangulationGraph\", \"a00359.html#ad167fac94fa72c0d3b8db36e5fa2becb\", null],\n+ [\"undistortMeasurementInternal\", \"a00359.html#a46a14c34d729a626825e4eff8a7de8dd\", null],\n+ [\"undistortMeasurements\", \"a00359.html#af01b2988c1bb89268ad572ea7d7ba293\", null],\n+ [\"undistortMeasurements\", \"a00359.html#a31e52d463db397f0dda1a13352ab217c\", null],\n+ [\"undistortMeasurements\", \"a00359.html#a1a0e4ac1b773cc295daae7849c833876\", null],\n+ [\"undistortMeasurements\", \"a00359.html#a7f3d15de99fffcc537089fa1440d8ca2\", null],\n+ [\"undistortMeasurements\", \"a00359.html#a6a1849035b3acd163d6de715e7683ebf\", 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/Cal3Fisheye.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/triangulation.h Source File\n \n \n \n \n \n \n \n@@ -98,177 +98,675 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    Cal3Fisheye.h
    \n+
    triangulation.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/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-
    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+
    21#pragma once
    \n+
    22
    \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+\n+
    42 std::runtime_error("Triangulation Underconstrained Exception.") {
    \n+
    43 }
    \n+
    44};
    \n+
    \n+
    45
    \n+
    \n+
    47class GTSAM_EXPORT TriangulationCheiralityException: public std::runtime_error {
    \n+
    48public:
    \n+\n+
    50 std::runtime_error(
    \n+
    51 "Triangulation Cheirality Exception: The resulting landmark is behind one or more cameras.") {
    \n+
    52 }
    \n+
    53};
    \n+
    \n+
    54
    \n+
    62GTSAM_EXPORT Vector4 triangulateHomogeneousDLT(
    \n+
    63 const std::vector<Matrix34, Eigen::aligned_allocator<Matrix34>>& projection_matrices,
    \n+
    64 const Point2Vector& measurements, double rank_tol = 1e-9);
    \n+
    65
    \n+
    74GTSAM_EXPORT Vector4 triangulateHomogeneousDLT(
    \n+
    75 const std::vector<Matrix34, Eigen::aligned_allocator<Matrix34>>& projection_matrices,
    \n+
    76 const std::vector<Unit3>& measurements, double rank_tol = 1e-9);
    \n
    77
    \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+
    85GTSAM_EXPORT Point3 triangulateDLT(
    \n+
    86 const std::vector<Matrix34, Eigen::aligned_allocator<Matrix34>>& projection_matrices,
    \n+
    87 const Point2Vector& measurements,
    \n+
    88 double rank_tol = 1e-9);
    \n+
    89
    \n+
    93GTSAM_EXPORT Point3 triangulateDLT(
    \n+
    94 const std::vector<Matrix34, Eigen::aligned_allocator<Matrix34>>& projection_matrices,
    \n+
    95 const std::vector<Unit3>& measurements,
    \n+
    96 double rank_tol = 1e-9);
    \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+
    108GTSAM_EXPORT Point3 triangulateLOST(const std::vector<Pose3>& poses,
    \n+
    109 const Point3Vector& calibratedMeasurements,
    \n+
    110 const SharedIsotropic& measurementNoise);
    \n+
    111
    \n+
    121template<class CALIBRATION>
    \n+
    \n+
    122std::pair<NonlinearFactorGraph, Values> triangulationGraph(
    \n+
    123 const std::vector<Pose3>& poses, boost::shared_ptr<CALIBRATION> sharedCal,
    \n+
    124 const Point2Vector& measurements, Key landmarkKey,
    \n+
    125 const Point3& initialEstimate,
    \n+
    126 const SharedNoiseModel& model = noiseModel::Unit::Create(2)) {
    \n+
    127 Values values;
    \n+
    128 values.insert(landmarkKey, initialEstimate); // Initial landmark value
    \n+\n+
    130 for (size_t i = 0; i < measurements.size(); i++) {
    \n+
    131 const Pose3& pose_i = poses[i];
    \n+
    132 typedef PinholePose<CALIBRATION> Camera;
    \n+
    133 Camera camera_i(pose_i, sharedCal);
    \n+
    134 graph.emplace_shared<TriangulationFactor<Camera> > //
    \n+
    135 (camera_i, measurements[i], model, landmarkKey);
    \n+
    136 }
    \n+
    137 return std::make_pair(graph, values);
    \n+
    138}
    \n+
    \n+
    139
    \n+
    149template<class CAMERA>
    \n+
    \n+
    150std::pair<NonlinearFactorGraph, Values> triangulationGraph(
    \n+
    151 const CameraSet<CAMERA>& cameras,
    \n+
    152 const typename CAMERA::MeasurementVector& measurements, Key landmarkKey,
    \n+
    153 const Point3& initialEstimate,
    \n+
    154 const SharedNoiseModel& model = nullptr) {
    \n+
    155 Values values;
    \n+
    156 values.insert(landmarkKey, initialEstimate); // Initial landmark value
    \n+\n+\n+\n+
    160 for (size_t i = 0; i < measurements.size(); i++) {
    \n+
    161 const CAMERA& camera_i = cameras[i];
    \n+
    162 graph.emplace_shared<TriangulationFactor<CAMERA> > //
    \n+
    163 (camera_i, measurements[i], model? model : unit, landmarkKey);
    \n+
    164 }
    \n+
    165 return std::make_pair(graph, values);
    \n+
    166}
    \n+
    \n+
    167
    \n+
    175GTSAM_EXPORT Point3 optimize(const NonlinearFactorGraph& graph,
    \n+
    176 const Values& values, Key landmarkKey);
    \n+
    177
    \n+
    186template<class CALIBRATION>
    \n+
    \n+
    187Point3 triangulateNonlinear(const std::vector<Pose3>& poses,
    \n+
    188 boost::shared_ptr<CALIBRATION> sharedCal,
    \n+
    189 const Point2Vector& measurements, const Point3& initialEstimate,
    \n+
    190 const SharedNoiseModel& model = nullptr) {
    \n+
    191
    \n+
    192 // Create a factor graph and initial values
    \n+
    193 Values values;
    \n+\n+
    195 boost::tie(graph, values) = triangulationGraph<CALIBRATION> //
    \n+
    196 (poses, sharedCal, measurements, Symbol('p', 0), initialEstimate, model);
    \n+
    197
    \n+
    198 return optimize(graph, values, Symbol('p', 0));
    \n+
    199}
    \n+
    \n+
    200
    \n+
    208template<class CAMERA>
    \n+
    \n+\n+
    210 const CameraSet<CAMERA>& cameras,
    \n+
    211 const typename CAMERA::MeasurementVector& measurements, const Point3& initialEstimate,
    \n+
    212 const SharedNoiseModel& model = nullptr) {
    \n+
    213
    \n+
    214 // Create a factor graph and initial values
    \n+
    215 Values values;
    \n+\n+
    217 boost::tie(graph, values) = triangulationGraph<CAMERA> //
    \n+
    218 (cameras, measurements, Symbol('p', 0), initialEstimate, model);
    \n+
    219
    \n+
    220 return optimize(graph, values, Symbol('p', 0));
    \n+
    221}
    \n+
    \n+
    222
    \n+
    223template<class CAMERA>
    \n+
    224std::vector<Matrix34, Eigen::aligned_allocator<Matrix34>>
    \n+
    225projectionMatricesFromCameras(const CameraSet<CAMERA> &cameras) {
    \n+
    226 std::vector<Matrix34, Eigen::aligned_allocator<Matrix34>> projection_matrices;
    \n+
    227 for (const CAMERA &camera: cameras) {
    \n+
    228 projection_matrices.push_back(camera.cameraProjectionMatrix());
    \n+
    229 }
    \n+
    230 return projection_matrices;
    \n+
    231}
    \n+
    232
    \n+
    233// overload, assuming pinholePose
    \n+
    234template<class CALIBRATION>
    \n+
    235std::vector<Matrix34, Eigen::aligned_allocator<Matrix34>> projectionMatricesFromPoses(
    \n+
    236 const std::vector<Pose3> &poses, boost::shared_ptr<CALIBRATION> sharedCal) {
    \n+
    237 std::vector<Matrix34, Eigen::aligned_allocator<Matrix34>> projection_matrices;
    \n+
    238 for (size_t i = 0; i < poses.size(); i++) {
    \n+
    239 PinholePose<CALIBRATION> camera(poses.at(i), sharedCal);
    \n+
    240 projection_matrices.push_back(camera.cameraProjectionMatrix());
    \n+
    241 }
    \n+
    242 return projection_matrices;
    \n+
    243}
    \n+
    244
    \n+
    252template <class CALIBRATION>
    \n+
    \n+
    253Cal3_S2 createPinholeCalibration(const CALIBRATION& cal) {
    \n+
    254 const auto& K = cal.K();
    \n+
    255 return Cal3_S2(K(0, 0), K(1, 1), K(0, 1), K(0, 2), K(1, 2));
    \n+
    256}
    \n+
    \n+
    257
    \n+
    260template <class CALIBRATION, class MEASUREMENT>
    \n+
    \n+\n+
    262 const CALIBRATION& cal, const MEASUREMENT& measurement,
    \n+
    263 boost::optional<Cal3_S2> pinholeCal = boost::none) {
    \n+
    264 if (!pinholeCal) {
    \n+
    265 pinholeCal = createPinholeCalibration(cal);
    \n+
    266 }
    \n+
    267 return pinholeCal->uncalibrate(cal.calibrate(measurement));
    \n+
    268}
    \n+
    \n+
    269
    \n+
    281template <class CALIBRATION>
    \n+
    \n+
    282Point2Vector undistortMeasurements(const CALIBRATION& cal,
    \n+
    283 const Point2Vector& measurements) {
    \n+
    284 Cal3_S2 pinholeCalibration = createPinholeCalibration(cal);
    \n+
    285 Point2Vector undistortedMeasurements;
    \n+
    286 // Calibrate with cal and uncalibrate with pinhole version of cal so that
    \n+
    287 // measurements are undistorted.
    \n+
    288 std::transform(measurements.begin(), measurements.end(),
    \n+
    289 std::back_inserter(undistortedMeasurements),
    \n+
    290 [&cal, &pinholeCalibration](const Point2& measurement) {
    \n+
    291 return undistortMeasurementInternal<CALIBRATION>(
    \n+
    292 cal, measurement, pinholeCalibration);
    \n+
    293 });
    \n+
    294 return undistortedMeasurements;
    \n+
    295}
    \n+
    \n+
    296
    \n+
    298template <>
    \n+
    \n+
    299inline Point2Vector undistortMeasurements(const Cal3_S2& cal,
    \n+
    300 const Point2Vector& measurements) {
    \n+
    301 return measurements;
    \n+
    302}
    \n+
    \n+
    303
    \n+
    315template <class CAMERA>
    \n+
    \n+
    316typename CAMERA::MeasurementVector undistortMeasurements(
    \n+
    317 const CameraSet<CAMERA>& cameras,
    \n+
    318 const typename CAMERA::MeasurementVector& measurements) {
    \n+
    319 const size_t nrMeasurements = measurements.size();
    \n+
    320 assert(nrMeasurements == cameras.size());
    \n+
    321 typename CAMERA::MeasurementVector undistortedMeasurements(nrMeasurements);
    \n+
    322 for (size_t ii = 0; ii < nrMeasurements; ++ii) {
    \n+
    323 // Calibrate with cal and uncalibrate with pinhole version of cal so that
    \n+
    324 // measurements are undistorted.
    \n+
    325 undistortedMeasurements[ii] =
    \n+
    326 undistortMeasurementInternal<typename CAMERA::CalibrationType>(
    \n+
    327 cameras[ii].calibration(), measurements[ii]);
    \n+
    328 }
    \n+
    329 return undistortedMeasurements;
    \n+
    330}
    \n+
    \n+
    331
    \n+
    333template <class CAMERA = PinholeCamera<Cal3_S2>>
    \n+
    \n+
    334inline PinholeCamera<Cal3_S2>::MeasurementVector undistortMeasurements(
    \n+
    335 const CameraSet<PinholeCamera<Cal3_S2>>& cameras,
    \n+
    336 const PinholeCamera<Cal3_S2>::MeasurementVector& measurements) {
    \n+
    337 return measurements;
    \n+
    338}
    \n+
    \n+
    339
    \n+
    341template <class CAMERA = SphericalCamera>
    \n+
    \n+
    342inline SphericalCamera::MeasurementVector undistortMeasurements(
    \n+
    343 const CameraSet<SphericalCamera>& cameras,
    \n+
    344 const SphericalCamera::MeasurementVector& measurements) {
    \n+
    345 return measurements;
    \n+
    346}
    \n+
    \n+
    347
    \n+
    356template <class CALIBRATION>
    \n+
    \n+
    357inline Point3Vector calibrateMeasurementsShared(
    \n+
    358 const CALIBRATION& cal, const Point2Vector& measurements) {
    \n+
    359 Point3Vector calibratedMeasurements;
    \n+
    360 // Calibrate with cal and uncalibrate with pinhole version of cal so that
    \n+
    361 // measurements are undistorted.
    \n+
    362 std::transform(measurements.begin(), measurements.end(),
    \n+
    363 std::back_inserter(calibratedMeasurements),
    \n+
    364 [&cal](const Point2& measurement) {
    \n+
    365 Point3 p;
    \n+
    366 p << cal.calibrate(measurement), 1.0;
    \n+
    367 return p;
    \n+
    368 });
    \n+
    369 return calibratedMeasurements;
    \n+
    370}
    \n+
    \n+
    371
    \n+
    380template <class CAMERA>
    \n+
    \n+
    381inline Point3Vector calibrateMeasurements(
    \n+
    382 const CameraSet<CAMERA>& cameras,
    \n+
    383 const typename CAMERA::MeasurementVector& measurements) {
    \n+
    384 const size_t nrMeasurements = measurements.size();
    \n+
    385 assert(nrMeasurements == cameras.size());
    \n+
    386 Point3Vector calibratedMeasurements(nrMeasurements);
    \n+
    387 for (size_t ii = 0; ii < nrMeasurements; ++ii) {
    \n+
    388 calibratedMeasurements[ii]
    \n+
    389 << cameras[ii].calibration().calibrate(measurements[ii]),
    \n+
    390 1.0;
    \n+
    391 }
    \n+
    392 return calibratedMeasurements;
    \n+
    393}
    \n+
    \n+
    394
    \n+
    396template <class CAMERA = SphericalCamera>
    \n+
    \n+
    397inline Point3Vector calibrateMeasurements(
    \n+
    398 const CameraSet<SphericalCamera>& cameras,
    \n+
    399 const SphericalCamera::MeasurementVector& measurements) {
    \n+
    400 Point3Vector calibratedMeasurements(measurements.size());
    \n+
    401 for (size_t ii = 0; ii < measurements.size(); ++ii) {
    \n+
    402 calibratedMeasurements[ii] << measurements[ii].point3();
    \n+
    403 }
    \n+
    404 return calibratedMeasurements;
    \n+
    405}
    \n+
    \n+
    406
    \n+
    420template <class CALIBRATION>
    \n+
    \n+
    421Point3 triangulatePoint3(const std::vector<Pose3>& poses,
    \n+
    422 boost::shared_ptr<CALIBRATION> sharedCal,
    \n+
    423 const Point2Vector& measurements,
    \n+
    424 double rank_tol = 1e-9, bool optimize = false,
    \n+
    425 const SharedNoiseModel& model = nullptr,
    \n+
    426 const bool useLOST = false) {
    \n+
    427 assert(poses.size() == measurements.size());
    \n+
    428 if (poses.size() < 2) throw(TriangulationUnderconstrainedException());
    \n+
    429
    \n+
    430 // Triangulate linearly
    \n+
    431 Point3 point;
    \n+
    432 if (useLOST) {
    \n+
    433 // Reduce input noise model to an isotropic noise model using the mean of
    \n+
    434 // the diagonal.
    \n+
    435 const double measurementSigma = model ? model->sigmas().mean() : 1e-4;
    \n+
    436 SharedIsotropic measurementNoise =
    \n+
    437 noiseModel::Isotropic::Sigma(2, measurementSigma);
    \n+
    438 // calibrate the measurements to obtain homogenous coordinates in image
    \n+
    439 // plane.
    \n+
    440 auto calibratedMeasurements =
    \n+
    441 calibrateMeasurementsShared<CALIBRATION>(*sharedCal, measurements);
    \n+
    442
    \n+
    443 point = triangulateLOST(poses, calibratedMeasurements, measurementNoise);
    \n+
    444 } else {
    \n+
    445 // construct projection matrices from poses & calibration
    \n+
    446 auto projection_matrices = projectionMatricesFromPoses(poses, sharedCal);
    \n+
    447
    \n+
    448 // Undistort the measurements, leaving only the pinhole elements in effect.
    \n+
    449 auto undistortedMeasurements =
    \n+
    450 undistortMeasurements<CALIBRATION>(*sharedCal, measurements);
    \n+
    451
    \n+
    452 point =
    \n+
    453 triangulateDLT(projection_matrices, undistortedMeasurements, rank_tol);
    \n+
    454 }
    \n+
    455
    \n+
    456 // Then refine using non-linear optimization
    \n+
    457 if (optimize)
    \n+
    458 point = triangulateNonlinear<CALIBRATION> //
    \n+
    459 (poses, sharedCal, measurements, point, model);
    \n+
    460
    \n+
    461#ifdef GTSAM_THROW_CHEIRALITY_EXCEPTION
    \n+
    462 // verify that the triangulated point lies in front of all cameras
    \n+
    463 for (const Pose3& pose : poses) {
    \n+
    464 const Point3& p_local = pose.transformTo(point);
    \n+
    465 if (p_local.z() <= 0) throw(TriangulationCheiralityException());
    \n+
    466 }
    \n+
    467#endif
    \n+
    468
    \n+
    469 return point;
    \n+
    470}
    \n+
    \n+
    471
    \n+
    486template <class CAMERA>
    \n+
    \n+\n+
    488 const typename CAMERA::MeasurementVector& measurements,
    \n+
    489 double rank_tol = 1e-9, bool optimize = false,
    \n+
    490 const SharedNoiseModel& model = nullptr,
    \n+
    491 const bool useLOST = false) {
    \n+
    492 size_t m = cameras.size();
    \n+
    493 assert(measurements.size() == m);
    \n+
    494
    \n+
    495 if (m < 2) throw(TriangulationUnderconstrainedException());
    \n+
    496
    \n+
    497 // Triangulate linearly
    \n+
    498 Point3 point;
    \n+
    499 if (useLOST) {
    \n+
    500 // Reduce input noise model to an isotropic noise model using the mean of
    \n+
    501 // the diagonal.
    \n+
    502 const double measurementSigma = model ? model->sigmas().mean() : 1e-4;
    \n+
    503 SharedIsotropic measurementNoise =
    \n+
    504 noiseModel::Isotropic::Sigma(2, measurementSigma);
    \n+
    505
    \n+
    506 // construct poses from cameras.
    \n+
    507 std::vector<Pose3> poses;
    \n+
    508 poses.reserve(cameras.size());
    \n+
    509 for (const auto& camera : cameras) poses.push_back(camera.pose());
    \n+
    510
    \n+
    511 // calibrate the measurements to obtain homogenous coordinates in image
    \n+
    512 // plane.
    \n+
    513 auto calibratedMeasurements =
    \n+
    514 calibrateMeasurements<CAMERA>(cameras, measurements);
    \n+
    515
    \n+
    516 point = triangulateLOST(poses, calibratedMeasurements, measurementNoise);
    \n+
    517 } else {
    \n+
    518 // construct projection matrices from poses & calibration
    \n+
    519 auto projection_matrices = projectionMatricesFromCameras(cameras);
    \n+
    520
    \n+
    521 // Undistort the measurements, leaving only the pinhole elements in effect.
    \n+
    522 auto undistortedMeasurements =
    \n+
    523 undistortMeasurements<CAMERA>(cameras, measurements);
    \n+
    524
    \n+
    525 point =
    \n+
    526 triangulateDLT(projection_matrices, undistortedMeasurements, rank_tol);
    \n+
    527 }
    \n+
    528
    \n+
    529 // Then refine using non-linear optimization
    \n+
    530 if (optimize) {
    \n+
    531 point = triangulateNonlinear<CAMERA>(cameras, measurements, point, model);
    \n+
    532 }
    \n+
    533
    \n+
    534#ifdef GTSAM_THROW_CHEIRALITY_EXCEPTION
    \n+
    535 // verify that the triangulated point lies in front of all cameras
    \n+
    536 for (const CAMERA& camera : cameras) {
    \n+
    537 const Point3& p_local = camera.pose().transformTo(point);
    \n+
    538 if (p_local.z() <= 0) throw(TriangulationCheiralityException());
    \n+
    539 }
    \n+
    540#endif
    \n+
    541
    \n+
    542 return point;
    \n+
    543}
    \n+
    \n+
    544
    \n+
    546template <class CALIBRATION>
    \n+
    \n+\n+
    548 const Point2Vector& measurements,
    \n+
    549 double rank_tol = 1e-9, bool optimize = false,
    \n+
    550 const SharedNoiseModel& model = nullptr,
    \n+
    551 const bool useLOST = false) {
    \n+
    552 return triangulatePoint3<PinholeCamera<CALIBRATION>> //
    \n+
    553 (cameras, measurements, rank_tol, optimize, model, useLOST);
    \n+
    554}
    \n+
    \n+
    555
    \n+
    \n+
    556struct GTSAM_EXPORT TriangulationParameters {
    \n+
    557
    \n+\n+\n+
    561
    \n+\n+
    567
    \n+\n+
    574
    \n+\n+
    576
    \n+
    \n+
    586 TriangulationParameters(const double _rankTolerance = 1.0,
    \n+
    587 const bool _enableEPI = false, double _landmarkDistanceThreshold = -1,
    \n+
    588 double _dynamicOutlierRejectionThreshold = -1,
    \n+
    589 const SharedNoiseModel& _noiseModel = nullptr) :
    \n+
    590 rankTolerance(_rankTolerance), enableEPI(_enableEPI), //
    \n+
    591 landmarkDistanceThreshold(_landmarkDistanceThreshold), //
    \n+
    592 dynamicOutlierRejectionThreshold(_dynamicOutlierRejectionThreshold),
    \n+
    593 noiseModel(_noiseModel){
    \n+
    594 }
    \n+
    \n+
    595
    \n+
    596 // stream to output
    \n+
    597 friend std::ostream &operator<<(std::ostream &os,
    \n+
    598 const TriangulationParameters& p) {
    \n+
    599 os << "rankTolerance = " << p.rankTolerance << std::endl;
    \n+
    600 os << "enableEPI = " << p.enableEPI << std::endl;
    \n+
    601 os << "landmarkDistanceThreshold = " << p.landmarkDistanceThreshold
    \n+
    602 << std::endl;
    \n+
    603 os << "dynamicOutlierRejectionThreshold = "
    \n+
    604 << p.dynamicOutlierRejectionThreshold << std::endl;
    \n+
    605 os << "noise model" << std::endl;
    \n+
    606 return os;
    \n+
    607 }
    \n+
    608
    \n+
    609private:
    \n+
    610
    \n+
    612 friend class boost::serialization::access;
    \n+
    613 template<class ARCHIVE>
    \n+
    614 void serialize(ARCHIVE & ar, const unsigned int version) {
    \n+
    615 ar & BOOST_SERIALIZATION_NVP(rankTolerance);
    \n+
    616 ar & BOOST_SERIALIZATION_NVP(enableEPI);
    \n+
    617 ar & BOOST_SERIALIZATION_NVP(landmarkDistanceThreshold);
    \n+
    618 ar & BOOST_SERIALIZATION_NVP(dynamicOutlierRejectionThreshold);
    \n+
    619 }
    \n+
    620};
    \n+
    \n+
    621
    \n+
    \n+
    626class TriangulationResult : public boost::optional<Point3> {
    \n+
    627 public:
    \n+
    628 enum Status { VALID, DEGENERATE, BEHIND_CAMERA, OUTLIER, FAR_POINT };
    \n+
    629 Status status;
    \n+
    630
    \n+
    631 private:
    \n+
    632 TriangulationResult(Status s) : status(s) {}
    \n+
    633
    \n+
    634 public:
    \n+\n+
    639
    \n+
    643 TriangulationResult(const Point3& p) : status(VALID) { reset(p); }
    \n+
    644 static TriangulationResult Degenerate() {
    \n+
    645 return TriangulationResult(DEGENERATE);
    \n+
    646 }
    \n+
    647 static TriangulationResult Outlier() { return TriangulationResult(OUTLIER); }
    \n+
    648 static TriangulationResult FarPoint() {
    \n+
    649 return TriangulationResult(FAR_POINT);
    \n+
    650 }
    \n+
    651 static TriangulationResult BehindCamera() {
    \n+
    652 return TriangulationResult(BEHIND_CAMERA);
    \n+
    653 }
    \n+
    654 bool valid() const { return status == VALID; }
    \n+
    655 bool degenerate() const { return status == DEGENERATE; }
    \n+
    656 bool outlier() const { return status == OUTLIER; }
    \n+
    657 bool farPoint() const { return status == FAR_POINT; }
    \n+
    658 bool behindCamera() const { return status == BEHIND_CAMERA; }
    \n+
    659 // stream to output
    \n+
    660 friend std::ostream& operator<<(std::ostream& os,
    \n+
    661 const TriangulationResult& result) {
    \n+
    662 if (result)
    \n+
    663 os << "point = " << *result << std::endl;
    \n+
    664 else
    \n+
    665 os << "no point, status = " << result.status << std::endl;
    \n+
    666 return os;
    \n+
    667 }
    \n+
    668
    \n+
    669 private:
    \n+\n+
    672 template <class ARCHIVE>
    \n+
    673 void serialize(ARCHIVE& ar, const unsigned int version) {
    \n+
    674 ar& BOOST_SERIALIZATION_NVP(status);
    \n+
    675 }
    \n+
    676};
    \n+
    \n+
    677
    \n+
    679template<class CAMERA>
    \n+
    \n+\n+
    681 const typename CAMERA::MeasurementVector& measured,
    \n+
    682 const TriangulationParameters& params) {
    \n+
    683
    \n+
    684 size_t m = cameras.size();
    \n+
    685
    \n+
    686 // if we have a single pose the corresponding factor is uninformative
    \n+
    687 if (m < 2)
    \n+
    688 return TriangulationResult::Degenerate();
    \n+
    689 else
    \n+
    690 // We triangulate the 3D position of the landmark
    \n+
    691 try {
    \n+
    692 Point3 point =
    \n+
    693 triangulatePoint3<CAMERA>(cameras, measured, params.rankTolerance,
    \n+
    694 params.enableEPI, params.noiseModel);
    \n+
    695
    \n+
    696 // Check landmark distance and re-projection errors to avoid outliers
    \n+
    697 size_t i = 0;
    \n+
    698 double maxReprojError = 0.0;
    \n+
    699 for(const CAMERA& camera: cameras) {
    \n+
    700 const Pose3& pose = camera.pose();
    \n+
    701 if (params.landmarkDistanceThreshold > 0
    \n+
    702 && distance3(pose.translation(), point)
    \n+\n+
    704 return TriangulationResult::FarPoint();
    \n+
    705#ifdef GTSAM_THROW_CHEIRALITY_EXCEPTION
    \n+
    706 // verify that the triangulated point lies in front of all cameras
    \n+
    707 // Only needed if this was not yet handled by exception
    \n+
    708 const Point3& p_local = pose.transformTo(point);
    \n+
    709 if (p_local.z() <= 0)
    \n+
    710 return TriangulationResult::BehindCamera();
    \n+
    711#endif
    \n+
    712 // Check reprojection error
    \n+
    713 if (params.dynamicOutlierRejectionThreshold > 0) {
    \n+
    714 const typename CAMERA::Measurement& zi = measured.at(i);
    \n+
    715 Point2 reprojectionError = camera.reprojectionError(point, zi);
    \n+
    716 maxReprojError = std::max(maxReprojError, reprojectionError.norm());
    \n+
    717 }
    \n+
    718 i += 1;
    \n+
    719 }
    \n+
    720 // Flag as degenerate if average reprojection error is too large
    \n+\n+
    722 && maxReprojError > params.dynamicOutlierRejectionThreshold)
    \n+
    723 return TriangulationResult::Outlier();
    \n+
    724
    \n+
    725 // all good!
    \n+
    726 return TriangulationResult(point);
    \n+\n+
    728 // This exception is thrown if
    \n+
    729 // 1) There is a single pose for triangulation - this should not happen because we checked the number of poses before
    \n+
    730 // 2) The rank of the matrix used for triangulation is < 3: rotation-only, parallel cameras (or motion towards the landmark)
    \n+
    731 return TriangulationResult::Degenerate();
    \n+\n+
    733 // point is behind one of the cameras: can be the case of close-to-parallel cameras or may depend on outliers
    \n+
    734 return TriangulationResult::BehindCamera();
    \n+
    735 }
    \n+
    736}
    \n+
    \n+
    737
    \n+
    738// Vector of Cameras - used by the Python/MATLAB wrapper
    \n+
    739using CameraSetCal3Bundler = CameraSet<PinholeCamera<Cal3Bundler>>;
    \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+
    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+
    Calibration of a fisheye camera.
    \n+
    Base class for all pinhole cameras.
    \n+
    2D Pose
    \n+
    Calibrated camera with spherical projection.
    \n+
    The most common 5DOF 3D->2D calibration.
    \n+
    Unified Calibration Model, see Mei07icra for details.
    \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+
    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
    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+
    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+
    Point3 triangulateNonlinear(const std::vector< Pose3 > &poses, boost::shared_ptr< CALIBRATION > sharedCal, const Point2Vector &measurements, const Point3 &initialEstimate, const SharedNoiseModel &model=nullptr)
    Given an initial estimate , refine a point using measurements in several cameras.
    Definition triangulation.h:187
    \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+
    noiseModel::Base::shared_ptr SharedNoiseModel
    Aliases.
    Definition NoiseModel.h:724
    \n+
    Point3 triangulatePoint3(const std::vector< Pose3 > &poses, boost::shared_ptr< CALIBRATION > sharedCal, const Point2Vector &measurements, double rank_tol=1e-9, bool optimize=false, const SharedNoiseModel &model=nullptr, const bool useLOST=false)
    Function to triangulate 3D landmark point from an arbitrary number of poses (at least 2) using the DL...
    Definition triangulation.h:421
    \n+
    std::pair< NonlinearFactorGraph, Values > triangulationGraph(const std::vector< Pose3 > &poses, boost::shared_ptr< CALIBRATION > sharedCal, const Point2Vector &measurements, Key landmarkKey, const Point3 &initialEstimate, const SharedNoiseModel &model=noiseModel::Unit::Create(2))
    Create a factor graph with projection factors from poses and one calibration.
    Definition triangulation.h:122
    \n+
    std::uint64_t Key
    Integer nonlinear key type.
    Definition types.h:100
    \n+
    Point3Vector calibrateMeasurements(const CameraSet< CAMERA > &cameras, const typename CAMERA::MeasurementVector &measurements)
    Convert pixel measurements in image to homogeneous measurements in the image plane using camera intri...
    Definition triangulation.h:381
    \n+
    Point3 triangulateDLT(const std::vector< Matrix34, Eigen::aligned_allocator< Matrix34 > > &projection_matrices, const Point2Vector &measurements, double rank_tol)
    DLT triangulation: See Hartley and Zisserman, 2nd Ed., page 312.
    Definition triangulation.cpp:127
    \n+
    Vector4 triangulateHomogeneousDLT(const std::vector< Matrix34, Eigen::aligned_allocator< Matrix34 > > &projection_matrices, const Point2Vector &measurements, double rank_tol)
    DLT triangulation: See Hartley and Zisserman, 2nd Ed., page 312.
    Definition triangulation.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-
    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+
    The most common 5DOF 3D->2D calibration.
    Definition Cal3_S2.h:34
    \n+
    A set of cameras, all with their own calibration.
    Definition CameraSet.h:36
    \n+
    A pinhole camera class that has a Pose3 and a Calibration.
    Definition PinholeCamera.h:33
    \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+
    Point3 transformTo(const Point3 &point, OptionalJacobian< 3, 6 > Hself=boost::none, OptionalJacobian< 3, 3 > Hpoint=boost::none) const
    takes point in world coordinates and transforms it to Pose coordinates
    Definition Pose3.cpp:371
    \n+
    const Point3 & translation(OptionalJacobian< 3, 6 > Hself=boost::none) const
    get translation
    Definition Pose3.cpp:308
    \n+
    Exception thrown by triangulateDLT when SVD returns rank < 3.
    Definition triangulation.h:39
    \n+
    Exception thrown by triangulateDLT when landmark is behind one or more of the cameras.
    Definition triangulation.h:47
    \n+
    Definition triangulation.h:556
    \n+
    TriangulationParameters(const double _rankTolerance=1.0, const bool _enableEPI=false, double _landmarkDistanceThreshold=-1, double _dynamicOutlierRejectionThreshold=-1, const SharedNoiseModel &_noiseModel=nullptr)
    Constructor.
    Definition triangulation.h:586
    \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+
    SharedNoiseModel noiseModel
    used in the nonlinear triangulation
    Definition triangulation.h:575
    \n+
    TriangulationResult is an optional point, along with the reasons why it is invalid.
    Definition triangulation.h:626
    \n+
    TriangulationResult()
    Default constructor, only for serialization.
    Definition triangulation.h:638
    \n+
    TriangulationResult(const Point3 &p)
    Constructor.
    Definition triangulation.h:643
    \n+
    friend class boost::serialization::access
    Serialization function.
    Definition triangulation.h:671
    \n+
    Character and index key used to refer to variables.
    Definition Symbol.h:35
    \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+
    static shared_ptr Create(size_t dim)
    Create a unit covariance noise model.
    Definition NoiseModel.h:597
    \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+
    Non-linear factor for a constraint derived from a 2D measurement.
    Definition TriangulationFactor.h:33
    \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,224 +1,815 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Cal3Fisheye.h\n+triangulation.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-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+21#pragma once\n+22\n+23#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+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_\b__\bS_\b2_\b._\bh>\n+27#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+28#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+29#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+30#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b._\bh>\n+31#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b2_\b._\bh>\n+32#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+33#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+34#include \n+35\n+36namespace _\bg_\bt_\bs_\ba_\bm {\n+37\n+_\b3_\b9class GTSAM_EXPORT _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bU_\bn_\bd_\be_\br_\bc_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn: public std::\n+runtime_error {\n+40public:\n+41 _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bU_\bn_\bd_\be_\br_\bc_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn() :\n+42 std::runtime_error(\"Triangulation Underconstrained Exception.\") {\n+43 }\n+44};\n+45\n+_\b4_\b7class GTSAM_EXPORT _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn: public std::\n+runtime_error {\n+48public:\n+49 _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn() :\n+50 std::runtime_error(\n+51 \"Triangulation Cheirality Exception: The resulting landmark is behind one or\n+more cameras.\") {\n+52 }\n+53};\n+54\n+62GTSAM_EXPORT Vector4 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bH_\bo_\bm_\bo_\bg_\be_\bn_\be_\bo_\bu_\bs_\bD_\bL_\bT(\n+63 const std::vector>&\n+projection_matrices,\n+64 const Point2Vector& measurements, double rank_tol = 1e-9);\n+65\n+74GTSAM_EXPORT Vector4 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bH_\bo_\bm_\bo_\bg_\be_\bn_\be_\bo_\bu_\bs_\bD_\bL_\bT(\n+75 const std::vector>&\n+projection_matrices,\n+76 const std::vector& measurements, double rank_tol = 1e-9);\n 77\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+85GTSAM_EXPORT _\bP_\bo_\bi_\bn_\bt_\b3 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bD_\bL_\bT(\n+86 const std::vector>&\n+projection_matrices,\n+87 const Point2Vector& measurements,\n+88 double rank_tol = 1e-9);\n+89\n+93GTSAM_EXPORT _\bP_\bo_\bi_\bn_\bt_\b3 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bD_\bL_\bT(\n+94 const std::vector>&\n+projection_matrices,\n+95 const std::vector& measurements,\n+96 double rank_tol = 1e-9);\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+108GTSAM_EXPORT _\bP_\bo_\bi_\bn_\bt_\b3 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bL_\bO_\bS_\bT(const std::vector& poses,\n+109 const Point3Vector& calibratedMeasurements,\n+110 const SharedIsotropic& measurementNoise);\n+111\n+121template\n+_\b1_\b2_\b2std::pair _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bG_\br_\ba_\bp_\bh(\n+123 const std::vector& poses, boost::shared_ptr sharedCal,\n+124 const Point2Vector& measurements, _\bK_\be_\by landmarkKey,\n+125 const _\bP_\bo_\bi_\bn_\bt_\b3& initialEstimate,\n+126 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model = _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bC_\br_\be_\ba_\bt_\be(2)) {\n+127 _\bV_\ba_\bl_\bu_\be_\bs values;\n+128 values._\bi_\bn_\bs_\be_\br_\bt(landmarkKey, initialEstimate); // Initial landmark value\n+129 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh graph;\n+130 for (size_t i = 0; i < measurements.size(); i++) {\n+131 const _\bP_\bo_\bs_\be_\b3& pose_i = poses[i];\n+132 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+133 Camera camera_i(pose_i, sharedCal);\n+134 graph.emplace_shared<_\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+135 (camera_i, measurements[i], model, landmarkKey);\n+136 }\n+137 return std::make_pair(graph, values);\n+138}\n+139\n+149template\n+_\b1_\b5_\b0std::pair _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bG_\br_\ba_\bp_\bh(\n+151 const _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>& cameras,\n+152 const typename CAMERA::MeasurementVector& measurements, _\bK_\be_\by landmarkKey,\n+153 const _\bP_\bo_\bi_\bn_\bt_\b3& initialEstimate,\n+154 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model = nullptr) {\n+155 _\bV_\ba_\bl_\bu_\be_\bs values;\n+156 values._\bi_\bn_\bs_\be_\br_\bt(landmarkKey, initialEstimate); // Initial landmark value\n+157 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh graph;\n+158 static _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl unit(_\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+159 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b:_\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 for (size_t i = 0; i < measurements.size(); i++) {\n+161 const CAMERA& camera_i = cameras[i];\n+162 graph.emplace_shared<_\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+163 (camera_i, measurements[i], model? model : unit, landmarkKey);\n+164 }\n+165 return std::make_pair(graph, values);\n+166}\n+167\n+175GTSAM_EXPORT _\bP_\bo_\bi_\bn_\bt_\b3 _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(const NonlinearFactorGraph& graph,\n+176 const _\bV_\ba_\bl_\bu_\be_\bs& values, _\bK_\be_\by landmarkKey);\n+177\n+186template\n+_\b1_\b8_\b7_\bP_\bo_\bi_\bn_\bt_\b3 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br(const std::vector& poses,\n+188 boost::shared_ptr sharedCal,\n+189 const Point2Vector& measurements, const _\bP_\bo_\bi_\bn_\bt_\b3& initialEstimate,\n+190 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model = nullptr) {\n+191\n+192 // Create a factor graph and initial values\n+193 _\bV_\ba_\bl_\bu_\be_\bs values;\n+194 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh graph;\n+195 boost::tie(graph, values) = triangulationGraph //\n+196 (poses, sharedCal, measurements, _\bS_\by_\bm_\bb_\bo_\bl('p', 0), initialEstimate, model);\n+197\n+198 return _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(graph, values, _\bS_\by_\bm_\bb_\bo_\bl('p', 0));\n+199}\n+200\n+208template\n+_\b2_\b0_\b9_\bP_\bo_\bi_\bn_\bt_\b3 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br(\n+210 const _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>& cameras,\n+211 const typename CAMERA::MeasurementVector& measurements, const _\bP_\bo_\bi_\bn_\bt_\b3&\n+initialEstimate,\n+212 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model = nullptr) {\n+213\n+214 // Create a factor graph and initial values\n+215 _\bV_\ba_\bl_\bu_\be_\bs values;\n+216 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh graph;\n+217 boost::tie(graph, values) = triangulationGraph //\n+218 (cameras, measurements, _\bS_\by_\bm_\bb_\bo_\bl('p', 0), initialEstimate, model);\n+219\n+220 return _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(graph, values, _\bS_\by_\bm_\bb_\bo_\bl('p', 0));\n+221}\n+222\n+223template\n+224std::vector>\n+225projectionMatricesFromCameras(const CameraSet &cameras) {\n+226 std::vector>\n+projection_matrices;\n+227 for (const CAMERA &camera: cameras) {\n+228 projection_matrices.push_back(camera.cameraProjectionMatrix());\n+229 }\n+230 return projection_matrices;\n+231}\n+232\n+233// overload, assuming pinholePose\n+234template\n+235std::vector>\n+projectionMatricesFromPoses(\n+236 const std::vector &poses, boost::shared_ptr sharedCal)\n+{\n+237 std::vector>\n+projection_matrices;\n+238 for (size_t i = 0; i < poses.size(); i++) {\n+239 PinholePose camera(poses.at(i), sharedCal);\n+240 projection_matrices.push_back(camera.cameraProjectionMatrix());\n+241 }\n+242 return projection_matrices;\n+243}\n+244\n+252template \n+_\b2_\b5_\b3_\bC_\ba_\bl_\b3_\b__\bS_\b2 _\bc_\br_\be_\ba_\bt_\be_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn(const CALIBRATION& cal) {\n+254 const auto& K = cal.K();\n+255 return _\bC_\ba_\bl_\b3_\b__\bS_\b2(K(0, 0), K(1, 1), K(0, 1), K(0, 2), K(1, 2));\n+256}\n+257\n+260template \n+_\b2_\b6_\b1MEASUREMENT _\bu_\bn_\bd_\bi_\bs_\bt_\bo_\br_\bt_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bn_\ba_\bl(\n+262 const CALIBRATION& cal, const MEASUREMENT& measurement,\n+263 boost::optional pinholeCal = boost::none) {\n+264 if (!pinholeCal) {\n+265 pinholeCal = _\bc_\br_\be_\ba_\bt_\be_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn(cal);\n+266 }\n+267 return pinholeCal->uncalibrate(cal.calibrate(measurement));\n+268}\n+269\n+281template \n+_\b2_\b8_\b2Point2Vector _\bu_\bn_\bd_\bi_\bs_\bt_\bo_\br_\bt_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(const CALIBRATION& cal,\n+283 const Point2Vector& measurements) {\n+284 _\bC_\ba_\bl_\b3_\b__\bS_\b2 pinholeCalibration = _\bc_\br_\be_\ba_\bt_\be_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn(cal);\n+285 Point2Vector undistortedMeasurements;\n+286 // Calibrate with cal and uncalibrate with pinhole version of cal so that\n+287 // measurements are undistorted.\n+288 std::transform(measurements.begin(), measurements.end(),\n+289 std::back_inserter(undistortedMeasurements),\n+290 [&cal, &pinholeCalibration](const _\bP_\bo_\bi_\bn_\bt_\b2& measurement) {\n+291 return undistortMeasurementInternal(\n+292 cal, measurement, pinholeCalibration);\n+293 });\n+294 return undistortedMeasurements;\n+295}\n+296\n+298template <>\n+_\b2_\b9_\b9inline Point2Vector _\bu_\bn_\bd_\bi_\bs_\bt_\bo_\br_\bt_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(const _\bC_\ba_\bl_\b3_\b__\bS_\b2& cal,\n+300 const Point2Vector& measurements) {\n+301 return measurements;\n+302}\n+303\n+315template \n+_\b3_\b1_\b6typename CAMERA::MeasurementVector _\bu_\bn_\bd_\bi_\bs_\bt_\bo_\br_\bt_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(\n+317 const _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>& cameras,\n+318 const typename CAMERA::MeasurementVector& measurements) {\n+319 const size_t nrMeasurements = measurements.size();\n+320 assert(nrMeasurements == cameras.size());\n+321 typename CAMERA::MeasurementVector undistortedMeasurements(nrMeasurements);\n+322 for (size_t ii = 0; ii < nrMeasurements; ++ii) {\n+323 // Calibrate with cal and uncalibrate with pinhole version of cal so that\n+324 // measurements are undistorted.\n+325 undistortedMeasurements[ii] =\n+326 undistortMeasurementInternal(\n+327 cameras[ii].calibration(), measurements[ii]);\n+328 }\n+329 return undistortedMeasurements;\n+330}\n+331\n+333template >\n+_\b3_\b3_\b4inline PinholeCamera::MeasurementVector _\bu_\bn_\bd_\bi_\bs_\bt_\bo_\br_\bt_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(\n+335 const _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt<_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b>>& cameras,\n+336 const PinholeCamera::MeasurementVector& measurements) {\n+337 return measurements;\n+338}\n+339\n+341template \n+_\b3_\b4_\b2inline SphericalCamera::MeasurementVector _\bu_\bn_\bd_\bi_\bs_\bt_\bo_\br_\bt_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(\n+343 const _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b>& cameras,\n+344 const SphericalCamera::MeasurementVector& measurements) {\n+345 return measurements;\n+346}\n+347\n+356template \n+_\b3_\b5_\b7inline Point3Vector _\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+358 const CALIBRATION& cal, const Point2Vector& measurements) {\n+359 Point3Vector calibratedMeasurements;\n+360 // Calibrate with cal and uncalibrate with pinhole version of cal so that\n+361 // measurements are undistorted.\n+362 std::transform(measurements.begin(), measurements.end(),\n+363 std::back_inserter(calibratedMeasurements),\n+364 [&cal](const _\bP_\bo_\bi_\bn_\bt_\b2& measurement) {\n+365 Point3 p;\n+366 p << cal.calibrate(measurement), 1.0;\n+367 return p;\n+368 });\n+369 return calibratedMeasurements;\n+370}\n+371\n+380template \n+_\b3_\b8_\b1inline Point3Vector _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(\n+382 const _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>& cameras,\n+383 const typename CAMERA::MeasurementVector& measurements) {\n+384 const size_t nrMeasurements = measurements.size();\n+385 assert(nrMeasurements == cameras.size());\n+386 Point3Vector calibratedMeasurements(nrMeasurements);\n+387 for (size_t ii = 0; ii < nrMeasurements; ++ii) {\n+388 calibratedMeasurements[ii]\n+389 << cameras[ii].calibration().calibrate(measurements[ii]),\n+390 1.0;\n+391 }\n+392 return calibratedMeasurements;\n+393}\n+394\n+396template \n+_\b3_\b9_\b7inline Point3Vector _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(\n+398 const _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b>& cameras,\n+399 const SphericalCamera::MeasurementVector& measurements) {\n+400 Point3Vector calibratedMeasurements(measurements.size());\n+401 for (size_t ii = 0; ii < measurements.size(); ++ii) {\n+402 calibratedMeasurements[ii] << measurements[ii].point3();\n+403 }\n+404 return calibratedMeasurements;\n+405}\n+406\n+420template \n+_\b4_\b2_\b1_\bP_\bo_\bi_\bn_\bt_\b3 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bP_\bo_\bi_\bn_\bt_\b3(const std::vector& poses,\n+422 boost::shared_ptr sharedCal,\n+423 const Point2Vector& measurements,\n+424 double rank_tol = 1e-9, bool _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be = false,\n+425 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model = nullptr,\n+426 const bool useLOST = false) {\n+427 assert(poses.size() == measurements.size());\n+428 if (poses.size() < 2) throw(_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bU_\bn_\bd_\be_\br_\bc_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn());\n+429\n+430 // Triangulate linearly\n+431 _\bP_\bo_\bi_\bn_\bt_\b3 point;\n+432 if (useLOST) {\n+433 // Reduce input noise model to an isotropic noise model using the mean of\n+434 // the diagonal.\n+435 const double measurementSigma = model ? model->sigmas().mean() : 1e-4;\n+436 SharedIsotropic measurementNoise =\n+437 _\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(2, measurementSigma);\n+438 // calibrate the measurements to obtain homogenous coordinates in image\n+439 // plane.\n+440 auto calibratedMeasurements =\n+441 calibrateMeasurementsShared(*sharedCal, measurements);\n+442\n+443 point = _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bL_\bO_\bS_\bT(poses, calibratedMeasurements, measurementNoise);\n+444 } else {\n+445 // construct projection matrices from poses & calibration\n+446 auto projection_matrices = projectionMatricesFromPoses(poses, sharedCal);\n+447\n+448 // Undistort the measurements, leaving only the pinhole elements in effect.\n+449 auto undistortedMeasurements =\n+450 undistortMeasurements(*sharedCal, measurements);\n+451\n+452 point =\n+453 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bD_\bL_\bT(projection_matrices, undistortedMeasurements, rank_tol);\n+454 }\n+455\n+456 // Then refine using non-linear optimization\n+457 if (_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be)\n+458 point = triangulateNonlinear //\n+459 (poses, sharedCal, measurements, point, model);\n+460\n+461#ifdef GTSAM_THROW_CHEIRALITY_EXCEPTION\n+462 // verify that the triangulated point lies in front of all cameras\n+463 for (const _\bP_\bo_\bs_\be_\b3& pose : poses) {\n+464 const _\bP_\bo_\bi_\bn_\bt_\b3& p_local = pose.transformTo(point);\n+465 if (p_local.z() <= 0) throw(_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn());\n+466 }\n+467#endif\n+468\n+469 return point;\n+470}\n+471\n+486template \n+_\b4_\b8_\b7_\bP_\bo_\bi_\bn_\bt_\b3 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bP_\bo_\bi_\bn_\bt_\b3(const _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>& cameras,\n+488 const typename CAMERA::MeasurementVector& measurements,\n+489 double rank_tol = 1e-9, bool _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be = false,\n+490 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model = nullptr,\n+491 const bool useLOST = false) {\n+492 size_t m = cameras.size();\n+493 assert(measurements.size() == m);\n+494\n+495 if (m < 2) throw(_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bU_\bn_\bd_\be_\br_\bc_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn());\n+496\n+497 // Triangulate linearly\n+498 _\bP_\bo_\bi_\bn_\bt_\b3 point;\n+499 if (useLOST) {\n+500 // Reduce input noise model to an isotropic noise model using the mean of\n+501 // the diagonal.\n+502 const double measurementSigma = model ? model->sigmas().mean() : 1e-4;\n+503 SharedIsotropic measurementNoise =\n+504 _\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(2, measurementSigma);\n+505\n+506 // construct poses from cameras.\n+507 std::vector poses;\n+508 poses.reserve(cameras.size());\n+509 for (const auto& camera : cameras) poses.push_back(camera.pose());\n+510\n+511 // calibrate the measurements to obtain homogenous coordinates in image\n+512 // plane.\n+513 auto calibratedMeasurements =\n+514 calibrateMeasurements(cameras, measurements);\n+515\n+516 point = _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bL_\bO_\bS_\bT(poses, calibratedMeasurements, measurementNoise);\n+517 } else {\n+518 // construct projection matrices from poses & calibration\n+519 auto projection_matrices = projectionMatricesFromCameras(cameras);\n+520\n+521 // Undistort the measurements, leaving only the pinhole elements in effect.\n+522 auto undistortedMeasurements =\n+523 undistortMeasurements(cameras, measurements);\n+524\n+525 point =\n+526 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bD_\bL_\bT(projection_matrices, undistortedMeasurements, rank_tol);\n+527 }\n+528\n+529 // Then refine using non-linear optimization\n+530 if (_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be) {\n+531 point = triangulateNonlinear(cameras, measurements, point, model);\n+532 }\n+533\n+534#ifdef GTSAM_THROW_CHEIRALITY_EXCEPTION\n+535 // verify that the triangulated point lies in front of all cameras\n+536 for (const CAMERA& camera : cameras) {\n+537 const _\bP_\bo_\bi_\bn_\bt_\b3& p_local = camera.pose().transformTo(point);\n+538 if (p_local.z() <= 0) throw(_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn());\n+539 }\n+540#endif\n+541\n+542 return point;\n+543}\n+544\n+546template \n+_\b5_\b4_\b7_\bP_\bo_\bi_\bn_\bt_\b3 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bP_\bo_\bi_\bn_\bt_\b3(const _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt<_\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>>&\n+cameras,\n+548 const Point2Vector& measurements,\n+549 double rank_tol = 1e-9, bool _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be = false,\n+550 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model = nullptr,\n+551 const bool useLOST = false) {\n+552 return triangulatePoint3> //\n+553 (cameras, measurements, rank_tol, _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be, model, useLOST);\n+554}\n+555\n+_\b5_\b5_\b6struct GTSAM_EXPORT _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs {\n+557\n+_\b5_\b5_\b8 double _\br_\ba_\bn_\bk_\bT_\bo_\bl_\be_\br_\ba_\bn_\bc_\be;\n+_\b5_\b6_\b0 bool _\be_\bn_\ba_\bb_\bl_\be_\bE_\bP_\bI;\n+561\n+_\b5_\b6_\b6 double _\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+567\n+_\b5_\b7_\b3 double _\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+574\n+_\b5_\b7_\b5 _\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+576\n+_\b5_\b8_\b6 _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs(const double _rankTolerance = 1.0,\n+587 const bool _enableEPI = false, double _landmarkDistanceThreshold = -1,\n+588 double _dynamicOutlierRejectionThreshold = -1,\n+589 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& _noiseModel = nullptr) :\n+590 rankTolerance(_rankTolerance), enableEPI(_enableEPI), //\n+591 landmarkDistanceThreshold(_landmarkDistanceThreshold), //\n+592 dynamicOutlierRejectionThreshold(_dynamicOutlierRejectionThreshold),\n+593 noiseModel(_noiseModel){\n+594 }\n+595\n+596 // stream to output\n+597 friend std::ostream &operator<<(std::ostream &os,\n+598 const _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs& p) {\n+599 os << \"rankTolerance = \" << p._\br_\ba_\bn_\bk_\bT_\bo_\bl_\be_\br_\ba_\bn_\bc_\be << std::endl;\n+600 os << \"enableEPI = \" << p._\be_\bn_\ba_\bb_\bl_\be_\bE_\bP_\bI << std::endl;\n+601 os << \"landmarkDistanceThreshold = \" << p._\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+602 << std::endl;\n+603 os << \"dynamicOutlierRejectionThreshold = \"\n+604 << p._\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 << std::endl;\n+605 os << \"noise model\" << std::endl;\n+606 return os;\n+607 }\n+608\n+609private:\n+610\n+_\b6_\b1_\b2 friend class boost::serialization::access;\n+613 template\n+614 void serialize(ARCHIVE & ar, const unsigned int version) {\n+615 ar & BOOST_SERIALIZATION_NVP(rankTolerance);\n+616 ar & BOOST_SERIALIZATION_NVP(enableEPI);\n+617 ar & BOOST_SERIALIZATION_NVP(landmarkDistanceThreshold);\n+618 ar & BOOST_SERIALIZATION_NVP(dynamicOutlierRejectionThreshold);\n+619 }\n+620};\n+621\n+_\b6_\b2_\b6class _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt : public boost::optional {\n+627 public:\n+628 enum Status { VALID, DEGENERATE, BEHIND_CAMERA, OUTLIER, FAR_POINT };\n+629 Status status;\n+630\n+631 private:\n+632 _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt(Status s) : status(s) {}\n+633\n+634 public:\n+_\b6_\b3_\b8 _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt() {}\n+639\n+_\b6_\b4_\b3 _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt(const _\bP_\bo_\bi_\bn_\bt_\b3& p) : status(VALID) { reset(p); }\n+644 static _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt Degenerate() {\n+645 return _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt(DEGENERATE);\n+646 }\n+647 static _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt Outlier() { return _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt(OUTLIER);\n+}\n+648 static _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt FarPoint() {\n+649 return _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt(FAR_POINT);\n+650 }\n+651 static _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt BehindCamera() {\n+652 return _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt(BEHIND_CAMERA);\n+653 }\n+654 bool valid() const { return status == VALID; }\n+655 bool degenerate() const { return status == DEGENERATE; }\n+656 bool outlier() const { return status == OUTLIER; }\n+657 bool farPoint() const { return status == FAR_POINT; }\n+658 bool behindCamera() const { return status == BEHIND_CAMERA; }\n+659 // stream to output\n+660 friend std::ostream& operator<<(std::ostream& os,\n+661 const _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt& result) {\n+662 if (result)\n+663 os << \"point = \" << *result << std::endl;\n+664 else\n+665 os << \"no point, status = \" << result.status << std::endl;\n+666 return os;\n+667 }\n+668\n+669 private:\n+_\b6_\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+672 template \n+673 void serialize(ARCHIVE& ar, const unsigned int version) {\n+674 ar& BOOST_SERIALIZATION_NVP(status);\n+675 }\n+676};\n+677\n+679template\n+_\b6_\b8_\b0_\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_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>& cameras,\n+681 const typename CAMERA::MeasurementVector& measured,\n+682 const _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs& params) {\n+683\n+684 size_t m = cameras.size();\n+685\n+686 // if we have a single pose the corresponding factor is uninformative\n+687 if (m < 2)\n+688 return TriangulationResult::Degenerate();\n+689 else\n+690 // We triangulate the 3D position of the landmark\n+691 try {\n+692 _\bP_\bo_\bi_\bn_\bt_\b3 point =\n+693 triangulatePoint3(cameras, measured, params._\br_\ba_\bn_\bk_\bT_\bo_\bl_\be_\br_\ba_\bn_\bc_\be,\n+694 params._\be_\bn_\ba_\bb_\bl_\be_\bE_\bP_\bI, params._\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl);\n+695\n+696 // Check landmark distance and re-projection errors to avoid outliers\n+697 size_t i = 0;\n+698 double maxReprojError = 0.0;\n+699 for(const CAMERA& camera: cameras) {\n+700 const _\bP_\bo_\bs_\be_\b3& pose = camera.pose();\n+701 if (params._\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 > 0\n+702 && _\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be_\b3(pose._\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn(), point)\n+703 > params._\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+704 return TriangulationResult::FarPoint();\n+705#ifdef GTSAM_THROW_CHEIRALITY_EXCEPTION\n+706 // verify that the triangulated point lies in front of all cameras\n+707 // Only needed if this was not yet handled by exception\n+708 const _\bP_\bo_\bi_\bn_\bt_\b3& p_local = pose._\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bo(point);\n+709 if (p_local.z() <= 0)\n+710 return TriangulationResult::BehindCamera();\n+711#endif\n+712 // Check reprojection error\n+713 if (params._\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 > 0) {\n+714 const typename CAMERA::Measurement& zi = measured.at(i);\n+715 _\bP_\bo_\bi_\bn_\bt_\b2 reprojectionError = camera.reprojectionError(point, zi);\n+716 maxReprojError = std::max(maxReprojError, reprojectionError.norm());\n+717 }\n+718 i += 1;\n+719 }\n+720 // Flag as degenerate if average reprojection error is too large\n+721 if (params._\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 > 0\n+722 && maxReprojError > params._\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+723 return TriangulationResult::Outlier();\n+724\n+725 // all good!\n+726 return _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt(point);\n+727 } catch (_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bU_\bn_\bd_\be_\br_\bc_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn&) {\n+728 // This exception is thrown if\n+729 // 1) There is a single pose for triangulation - this should not happen\n+because we checked the number of poses before\n+730 // 2) The rank of the matrix used for triangulation is < 3: rotation-only,\n+parallel cameras (or motion towards the landmark)\n+731 return TriangulationResult::Degenerate();\n+732 } catch (_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn&) {\n+733 // point is behind one of the cameras: can be the case of close-to-parallel\n+cameras or may depend on outliers\n+734 return TriangulationResult::BehindCamera();\n+735 }\n+736}\n+737\n+738// Vector of Cameras - used by the Python/MATLAB wrapper\n+739using CameraSetCal3Bundler = CameraSet>;\n+740using CameraSetCal3_S2 = CameraSet>;\n+741using CameraSetCal3DS2 = CameraSet>;\n+742using CameraSetCal3Fisheye = CameraSet>;\n+743using CameraSetCal3Unified = CameraSet>;\n+744using CameraSetSpherical = CameraSet;\n+745} // \\namespace gtsam\n+746\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_\bm_\be_\br_\ba_\bS_\be_\bt_\b._\bh\n+Base class to create smart factors on poses or cameras.\n+_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b._\bh\n+Calibration used by Bundler.\n+_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b._\bh\n+Calibration of a fisheye camera.\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_\bs_\be_\b2_\b._\bh\n+2D Pose\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_\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+_\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:_\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+Point2Vector &measurements)\n+Convert pixel measurements in image to homogeneous measurements in the image\n+plane using shared camer...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:357\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bL_\bO_\bS_\bT\n+Point3 triangulateLOST(const std::vector< Pose3 > &poses, const Point3Vector\n+&calibratedMeasurements, const SharedIsotropic &measurementNoise)\n+Triangulation using the LOST (Linear Optimal Sine Triangulation) algorithm\n+proposed in https://arxiv....\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.cpp:92\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bu_\bn_\bd_\bi_\bs_\bt_\bo_\br_\bt_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+Point2Vector undistortMeasurements(const CALIBRATION &cal, const Point2Vector\n+&measurements)\n+Remove distortion for measurements so as if the measurements came from a\n+pinhole camera.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:282\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn\n+Cal3_S2 createPinholeCalibration(const CALIBRATION &cal)\n+Create a pinhole calibration from a different Cal3 object, removing distortion.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:253\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bu_\bn_\bd_\bi_\bs_\bt_\bo_\br_\bt_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bn_\ba_\bl\n+MEASUREMENT undistortMeasurementInternal(const CALIBRATION &cal, const\n+MEASUREMENT &measurement, boost::optional< Cal3_S2 > pinholeCal=boost::none)\n+Internal undistortMeasurement to be used by undistortMeasurement and\n+undistortMeasurements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:261\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_\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_\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:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n+Point3 triangulateNonlinear(const std::vector< Pose3 > &poses, boost::\n+shared_ptr< CALIBRATION > sharedCal, const Point2Vector &measurements, const\n+Point3 &initialEstimate, const SharedNoiseModel &model=nullptr)\n+Given an initial estimate , refine a point using measurements in several\n+cameras.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:187\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:_\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_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bP_\bo_\bi_\bn_\bt_\b3\n+Point3 triangulatePoint3(const std::vector< Pose3 > &poses, boost::shared_ptr<\n+CALIBRATION > sharedCal, const Point2Vector &measurements, double rank_tol=1e-\n+9, bool optimize=false, const SharedNoiseModel &model=nullptr, const bool\n+useLOST=false)\n+Function to triangulate 3D landmark point from an arbitrary number of poses (at\n+least 2) using the DL...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:421\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bG_\br_\ba_\bp_\bh\n+std::pair< NonlinearFactorGraph, Values > triangulationGraph(const std::vector<\n+Pose3 > &poses, boost::shared_ptr< CALIBRATION > sharedCal, const Point2Vector\n+&measurements, Key landmarkKey, const Point3 &initialEstimate, const\n+SharedNoiseModel &model=noiseModel::Unit::Create(2))\n+Create a factor graph with projection factors from poses and one calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:122\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_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+Point3Vector calibrateMeasurements(const CameraSet< CAMERA > &cameras, const\n+typename CAMERA::MeasurementVector &measurements)\n+Convert pixel measurements in image to homogeneous measurements in the image\n+plane using camera intri...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:381\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bD_\bL_\bT\n+Point3 triangulateDLT(const std::vector< Matrix34, Eigen::aligned_allocator<\n+Matrix34 > > &projection_matrices, const Point2Vector &measurements, double\n+rank_tol)\n+DLT triangulation: See Hartley and Zisserman, 2nd Ed., page 312.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.cpp:127\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bH_\bo_\bm_\bo_\bg_\be_\bn_\be_\bo_\bu_\bs_\bD_\bL_\bT\n+Vector4 triangulateHomogeneousDLT(const std::vector< Matrix34, Eigen::\n+aligned_allocator< Matrix34 > > &projection_matrices, const Point2Vector\n+&measurements, double rank_tol)\n+DLT triangulation: See Hartley and Zisserman, 2nd Ed., page 312.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.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:_\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_\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_\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:_\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_\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:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bo\n+Point3 transformTo(const Point3 &point, OptionalJacobian< 3, 6 > Hself=boost::\n+none, OptionalJacobian< 3, 3 > Hpoint=boost::none) const\n+takes point in world coordinates and transforms it to Pose coordinates\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:371\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:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bU_\bn_\bd_\be_\br_\bc_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+Exception thrown by triangulateDLT when SVD returns rank < 3.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+Exception thrown by triangulateDLT when landmark is behind one or more of the\n+cameras.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:47\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:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n+TriangulationParameters(const double _rankTolerance=1.0, const bool\n+_enableEPI=false, double _landmarkDistanceThreshold=-1, double\n+_dynamicOutlierRejectionThreshold=-1, const SharedNoiseModel\n+&_noiseModel=nullptr)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:586\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:_\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:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+SharedNoiseModel noiseModel\n+used in the nonlinear triangulation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:575\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:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt\n+TriangulationResult()\n+Default constructor, only for serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:638\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_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt\n+TriangulationResult(const Point3 &p)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:643\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_\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 triangulation.h:671\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:_\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_\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_\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:_\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+_\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 * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b._\bh\n+ * _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\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/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/SO3.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,89 +94,53 @@\n \n \n \n \n \n
    \n \n-
    SO3.cpp File Reference
    \n+Classes |\n+Namespaces
    \n+
    Rot2.h File Reference
    \n \n
    \n \n-

    3*3 matrix representation of SO(3) \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-\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+

    2D rotation

    \n+
    Date
    Dec 9, 2009
    \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+John Lambert \n+
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,41 +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-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+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-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+2D rotation\n+ Date\n+ Dec 9, 2009\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+ John Lambert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bO_\b3_\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/a00365.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00365.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,5 @@\n var a00365 = [\n- [\"compose\", \"a00365.html#a72fc8b10f24d82aa8a4c99f99403fe5e\", null],\n- [\"Dcompose\", \"a00365.html#a7c7e26b6d07ec0f16363c196247b294d\", null]\n+ [\"gtsam::Rot2::ChartAtOrigin\", \"a03216.html\", null],\n+ [\"gtsam::traits< Rot2 >\", \"a03220.html\", null],\n+ [\"gtsam::traits< const Rot2 >\", \"a03224.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00368.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00368.html", "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/geometry/Pose2.h File Reference\n \n \n \n \n \n \n \n@@ -95,50 +95,74 @@\n \n \n \n \n
    \n \n-
    BearingRange.h File Reference
    \n+Namespaces |\n+Typedefs |\n+Functions
    \n+
    Pose2.h File Reference
    \n \n
    \n \n-

    Bearing-Range product. \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-\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::Pose2
     A 2D pose (Point2,Rot2) More...
     
    struct  gtsam::traits< BearingRange< A1, A2 > >
    struct  gtsam::Pose2::ChartAtOrigin
     
    struct  gtsam::HasBearing< A1, A2, RT >
    struct  gtsam::traits< Pose2 >
     
    struct  gtsam::HasRange< A1, A2, RT >
    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+Functions

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

    Detailed Description

    \n-

    Bearing-Range product.

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

    2D Pose

    \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,38 +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\n-BearingRange.h File Reference\n-Bearing-Range product. _\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-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:_\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:_\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+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:_\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+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:_\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 _\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+ 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-Bearing-Range product.\n- Date\n- July, 2015\n+2D Pose\n Author\n- Frank Dellaert\n+ : Frank Dellaert\n+ : Richard Roberts\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+ * _\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/a00368.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00368.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,6 +1,8 @@\n var a00368 = [\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+ [\"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 >\", \"a00368.html#a4b78f4db0e05f3ca838ee4da6187710e\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00368_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00368_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/BearingRange.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,228 +98,337 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    BearingRange.h
    \n+
    Pose2.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+
    19// \\callgraph
    \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-
    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+
    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+
    28
    \n+
    29namespace gtsam {
    \n+
    30
    \n+
    \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+
    49public:
    \n+
    50
    \n+
    53
    \n+
    \n+\n+
    56 r_(traits<Rot2>::Identity()), t_(traits<Point2>::Identity()) {
    \n+
    57 }
    \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-
    \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+
    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-
    90 if (H1) *H1 << HB1, HR1;
    \n-
    91 if (H2) *H2 << HB2, HR2;
    \n-
    92 return BearingRange(b, r);
    \n+
    \n+
    91 Pose2(const Vector& v) : Pose2() {
    \n+
    92 *this = Expmap(v);
    \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+
    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-
    \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-
    Special class for optional Jacobian arguments.
    \n-
    Concept check for values that can be used in unit tests.
    \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+
    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+
    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+
    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-
    A helper that implements the traits interface for GTSAM manifolds.
    Definition Manifold.h:95
    \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-
    A helper that implements the traits interface for GTSAM types.
    Definition Testable.h:151
    \n+
    Template to create a binary predicate.
    Definition Testable.h:111
    \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+
    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,268 +1,472 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-BearingRange.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 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, 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+19// \\callgraph\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-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+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+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+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+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+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 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+_\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-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+_\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-_\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+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-_\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-_\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-_\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+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+_\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:317\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:_\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_\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:_\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:_\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_\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:_\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:_\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- * _\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\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/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/Cal3.cpp 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@@ -94,42 +94,99 @@\n
    \n \n \n \n \n
    \n \n-
    Cal3.cpp File Reference
    \n+
    Point3.h File Reference
    \n
    \n
    \n \n-

    Common code for all calibration models. \n+

    3D Point \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+\n

    \n Functions

    \n-std::ostream & gtsam::operator<< (std::ostream &os, const Cal3 &cal)
     
    \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-

    Common code for all calibration models.

    \n-
    Author
    Frank Dellaert
    \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,23 +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 | _\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+_\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 N\bNa\bam\bme\bes\bsp\bpa\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-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+ 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-Common code for all calibration models.\n+3D Point\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- * _\bC_\ba_\bl_\b3_\b._\bc_\bp_\bp\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/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/Cal3Fisheye.cpp 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,42 +93,27 @@\n
    No Matches
    \n \n \n \n \n \n
    \n- \n-
    Cal3Fisheye.cpp File Reference
    \n+
    Rot3Q.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-Functions

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

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

    \n

    Detailed Description

    \n-
    Date
    Apr 8, 2020
    \n-
    Author
    ghaggin
    \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,24 +1,15 @@\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-N\bNa\bam\bme\bes\bsp\bpa\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+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- Date\n- Apr 8, 2020\n+Rotation (internal: quaternion representation*)\n Author\n- ghaggin\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_\bF_\bi_\bs_\bh_\be_\by_\be_\b._\bc_\bp_\bp\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/a00377.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00377.html", "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/Cal3_S2Stereo.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,51 +94,42 @@\n \n \n \n \n \n
    \n \n-
    StereoCamera.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    Cal3_S2Stereo.cpp File Reference
    \n \n
    \n \n-

    A Stereo Camera based on two Simple Cameras. \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-\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+\n+\n+\n

    \n+Functions

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

    Detailed Description

    \n-

    A Stereo Camera based on two Simple Cameras.

    \n-

    A Rectified Stereo Camera.

    \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,33 +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-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+_\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+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-A Stereo Camera based on two Simple Cameras.\n-A Rectified Stereo Camera.\n+The most common 5DOF 3D->2D calibration + Stereo baseline.\n Author\n Chris Beall\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+ * _\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/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/Rot3.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,84 +94,41 @@\n \n \n \n \n \n
    \n \n-
    Rot3.h File Reference
    \n+
    Cal3DS2.cpp 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

    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+std::ostream & gtsam::operator<< (std::ostream &os, const Cal3DS2 &cal)
     
    \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+
    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,56 +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 | _\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+_\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-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+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-3D rotation represented as a rotation matrix or quaternion\n+ Date\n+ Feb 28, 2010\n Author\n- Alireza Fathi\n- Christian Potthast\n- Frank Dellaert\n- Richard Roberts\n- Luca Carlone\n+ ydjian\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_\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/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/PinholeSet.h 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@@ -94,48 +94,42 @@\n \n \n \n \n \n
    \n \n-
    PinholeSet.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    Cal3_S2.cpp File Reference
    \n \n
    \n \n-

    A CameraSet of either CalibratedCamera, PinholePose, or PinholeCamera. \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::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 Cal3_S2 &cal)
     
    \n

    Detailed Description

    \n-

    A CameraSet of either CalibratedCamera, PinholePose, or PinholeCamera.

    \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,30 +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-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+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_\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-A CameraSet of either CalibratedCamera, PinholePose, or PinholeCamera.\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- * _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt_\b._\bh\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/a00389_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00389_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/Unit3.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SOn-inl.h Source File\n \n \n \n \n \n \n \n@@ -98,245 +98,162 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    Unit3.h
    \n+
    SOn-inl.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-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 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+
    12#pragma once
    \n+
    13
    \n+
    21#include <gtsam/base/Matrix.h>
    \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+
    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+
    \n+
    29typename SO<N>::MatrixNN SO<N>::Hat(const TangentVector& xi) {
    \n+
    30 return SOn::Hat(xi);
    \n+
    31}
    \n+
    \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-
    \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 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-
    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-
    \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 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-
    serialization for Vectors
    \n-
    typedef and functions to augment Eigen's VectorXd
    \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-
    typedef and functions to augment Eigen's MatrixXd
    \n-
    3D Point
    \n-
    2D Point
    \n+
    33// Implementation for N>=5 just uses dynamic version
    \n+
    34template <int N>
    \n+
    \n+
    35typename SO<N>::TangentVector SO<N>::Vee(const MatrixNN& X) {
    \n+
    36 return SOn::Vee(X);
    \n+
    37}
    \n+
    \n+
    38
    \n+
    39template <int N>
    \n+
    \n+\n+
    41 if (H) throw std::runtime_error("SO<N>::Retract jacobian not implemented.");
    \n+
    42 const Matrix X = Hat(xi / 2.0);
    \n+
    43 size_t n = AmbientDim(xi.size());
    \n+
    44 const auto I = Eigen::MatrixXd::Identity(n, n);
    \n+
    45 // https://pdfs.semanticscholar.org/6165/0347b2ccac34b5f423081d1ce4dbc4d09475.pdf
    \n+
    46 return SO((I + X) * (I - X).inverse());
    \n+
    47}
    \n+
    \n+
    48
    \n+
    49template <int N>
    \n+
    \n+
    50typename SO<N>::TangentVector SO<N>::ChartAtOrigin::Local(const SO& R,
    \n+
    51 ChartJacobian H) {
    \n+
    52 if (H) throw std::runtime_error("SO<N>::Local jacobian not implemented.");
    \n+
    53 const size_t n = R.rows();
    \n+
    54 const auto I = Eigen::MatrixXd::Identity(n, n);
    \n+
    55 const Matrix X = (I - R.matrix_) * (I + R.matrix_).inverse();
    \n+
    56 return -2 * Vee(X);
    \n+
    57}
    \n+
    \n+
    58
    \n+
    59template <int N>
    \n+
    60typename SO<N>::MatrixDD SO<N>::AdjointMap() const {
    \n+
    61 if (N==2) return I_1x1; // SO(2) case
    \n+
    62 throw std::runtime_error(
    \n+
    63 "SO<N>::AdjointMap only implemented for SO2, SO3 and SO4.");
    \n+
    64}
    \n+
    65
    \n+
    66template <int N>
    \n+
    \n+
    67SO<N> SO<N>::Expmap(const TangentVector& omega, ChartJacobian H) {
    \n+
    68 throw std::runtime_error("SO<N>::Expmap only implemented for SO3 and SO4.");
    \n+
    69}
    \n+
    \n+
    70
    \n+
    71template <int N>
    \n+
    \n+
    72typename SO<N>::MatrixDD SO<N>::ExpmapDerivative(const TangentVector& omega) {
    \n+
    73 throw std::runtime_error("SO<N>::ExpmapDerivative only implemented for SO3.");
    \n+
    74}
    \n+
    \n+
    75
    \n+
    76template <int N>
    \n+
    \n+
    77typename SO<N>::TangentVector SO<N>::Logmap(const SO& R, ChartJacobian H) {
    \n+
    78 throw std::runtime_error("SO<N>::Logmap only implemented for SO3.");
    \n+
    79}
    \n+
    \n+
    80
    \n+
    81template <int N>
    \n+
    \n+
    82typename SO<N>::MatrixDD SO<N>::LogmapDerivative(const TangentVector& omega) {
    \n+
    83 throw std::runtime_error("O<N>::LogmapDerivative only implemented for SO3.");
    \n+
    84}
    \n+
    \n+
    85
    \n+
    86// Default fixed size version (but specialized elsewehere for N=2,3,4)
    \n+
    87template <int N>
    \n+
    \n+
    88typename SO<N>::VectorN2 SO<N>::vec(
    \n+
    89 OptionalJacobian<internal::NSquaredSO(N), dimension> H) const {
    \n+
    90 // Vectorize
    \n+
    91 VectorN2 X = Eigen::Map<const VectorN2>(matrix_.data());
    \n+
    92
    \n+
    93 // If requested, calculate H as (I \\oplus Q) * P,
    \n+
    94 // where Q is the N*N rotation matrix, and P is calculated below.
    \n+
    95 if (H) {
    \n+
    96 // Calculate P matrix of vectorized generators
    \n+
    97 // TODO(duy): Should we refactor this as the jacobian of Hat?
    \n+
    98 Matrix P = SO<N>::VectorizedGenerators();
    \n+
    99 for (size_t i = 0; i < N; i++) {
    \n+
    100 H->block(i * N, 0, N, dimension) =
    \n+
    101 matrix_ * P.block(i * N, 0, N, dimension);
    \n+
    102 }
    \n+
    103 }
    \n+
    104 return X;
    \n+
    105}
    \n+
    \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
    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-
    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+
    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+
    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+
    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+
    SO()
    Construct SO<N> identity for N >= 2.
    Definition SOn.h:79
    \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": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,285 +1,194 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Unit3.h\n+SOn-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 * Atlanta, Georgia 30332-0415\n-4 * All Rights Reserved\n-5 * 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 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+12#pragma once\n+13\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\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+23#include \n+24\n+25namespace _\bg_\bt_\bs_\ba_\bm {\n+26\n+27// Implementation for N>=5 just uses dynamic version\n+28template \n+_\b2_\b9typename SO::MatrixNN _\bS_\bO_\b<_\bN_\b>_\b:_\b:_\bH_\ba_\bt(const TangentVector& xi) {\n+30 return _\bS_\bO_\bn_\b:_\b:_\bH_\ba_\bt(xi);\n+31}\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-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-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-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-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-_\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-_\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+33// Implementation for N>=5 just uses dynamic version\n+34template \n+_\b3_\b5typename SO::TangentVector _\bS_\bO_\b<_\bN_\b>_\b:_\b:_\bV_\be_\be(const MatrixNN& X) {\n+36 return _\bS_\bO_\bn_\b:_\b:_\bV_\be_\be(X);\n+37}\n+38\n+39template \n+_\b4_\b0_\bS_\bO_\b<_\bN_\b> _\bS_\bO_\b<_\bN_\b>_\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 TangentVector& xi, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H)\n+{\n+41 if (H) throw std::runtime_error(\"SO::Retract jacobian not implemented.\");\n+42 const Matrix X = _\bH_\ba_\bt(xi / 2.0);\n+43 size_t n = AmbientDim(xi.size());\n+44 const auto I = Eigen::MatrixXd::Identity(n, n);\n+45 // https://pdfs.semanticscholar.org/6165/\n+0347b2ccac34b5f423081d1ce4dbc4d09475.pdf\n+46 return _\bS_\bO((I + X) * (I - X)._\bi_\bn_\bv_\be_\br_\bs_\be());\n+47}\n+48\n+49template \n+_\b5_\b0typename SO::TangentVector _\bS_\bO_\b<_\bN_\b>_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn_\b:_\b:_\bL_\bo_\bc_\ba_\bl(const _\bS_\bO& R,\n+51 _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H) {\n+52 if (H) throw std::runtime_error(\"SO::Local jacobian not implemented.\");\n+53 const size_t n = R.rows();\n+54 const auto I = Eigen::MatrixXd::Identity(n, n);\n+55 const Matrix X = (I - R.matrix_) * (I + R.matrix_).inverse();\n+56 return -2 * _\bV_\be_\be(X);\n+57}\n+58\n+59template \n+60typename SO::MatrixDD _\bS_\bO_\b<_\bN_\b>_\b:_\b:_\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp() const {\n+61 if (N==2) return I_1x1; // SO(2) case\n+62 throw std::runtime_error(\n+63 \"SO::AdjointMap only implemented for SO2, SO3 and SO4.\");\n+64}\n+65\n+66template \n+_\b6_\b7_\bS_\bO_\b<_\bN_\b> _\bS_\bO_\b<_\bN_\b>_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp(const TangentVector& omega, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H) {\n+68 throw std::runtime_error(\"SO::Expmap only implemented for SO3 and SO4.\");\n+69}\n+70\n+71template \n+_\b7_\b2typename SO::MatrixDD _\bS_\bO_\b<_\bN_\b>_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const TangentVector& omega)\n+{\n+73 throw std::runtime_error(\"SO::ExpmapDerivative only implemented for\n+SO3.\");\n+74}\n+75\n+76template \n+_\b7_\b7typename SO::TangentVector _\bS_\bO_\b<_\bN_\b>_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp(const _\bS_\bO& R, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H) {\n+78 throw std::runtime_error(\"SO::Logmap only implemented for SO3.\");\n+79}\n+80\n+81template \n+_\b8_\b2typename SO::MatrixDD _\bS_\bO_\b<_\bN_\b>_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const TangentVector& omega)\n+{\n+83 throw std::runtime_error(\"O::LogmapDerivative only implemented for\n+SO3.\");\n+84}\n+85\n+86// Default fixed size version (but specialized elsewehere for N=2,3,4)\n+87template \n+_\b8_\b8typename SO::VectorN2 _\bS_\bO_\b<_\bN_\b>_\b:_\b:_\bv_\be_\bc(\n+89 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H) const {\n+90 // Vectorize\n+91 VectorN2 X = Eigen::Map(_\bm_\ba_\bt_\br_\bi_\bx_\b_.data());\n+92\n+93 // If requested, calculate H as (I \\oplus Q) * P,\n+94 // where Q is the N*N rotation matrix, and P is calculated below.\n+95 if (H) {\n+96 // Calculate P matrix of vectorized generators\n+97 // TODO(duy): Should we refactor this as the jacobian of Hat?\n+98 Matrix P = _\bS_\bO_\b<_\bN_\b>_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bG_\be_\bn_\be_\br_\ba_\bt_\bo_\br_\bs();\n+99 for (size_t i = 0; i < N; i++) {\n+100 H->block(i * N, 0, N, dimension) =\n+101 _\bm_\ba_\bt_\br_\bi_\bx_\b_ * P.block(i * N, 0, N, dimension);\n+102 }\n+103 }\n+104 return X;\n+105}\n+106\n+107template \n+108void _\bS_\bO_\b<_\bN_\b>_\b:_\b:_\bp_\br_\bi_\bn_\bt(const std::string& s) const {\n+109 std::cout << s << _\bm_\ba_\bt_\br_\bi_\bx_\b_ << std::endl;\n+110}\n+111\n+112} // namespace gtsam\n _\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n typedef and functions to augment Eigen's MatrixXd\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\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:_\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_\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:_\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_\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:_\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()\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:_\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 * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * U\bUn\bni\bit\bt3\b3.\b.h\bh\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/a00398.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00398.html", "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/a00398.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00398.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,8 +1,9 @@\n var a00398 = [\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 >\", \"a00398.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 >\", \"a00398.html#aefb606eb24889c0f418acf1515a2c723\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00398_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00398_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-
    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+
    \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+
    Bearing-Range product.
    \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-
    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 _\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+_\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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/a00401_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00401_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
    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"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00404.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00404.html", "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/SO4.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,54 +94,48 @@\n
    \n \n \n \n \n
    \n \n-
    Cal3DS2.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    SO4.cpp File Reference
    \n \n
    \n \n-

    Calibration of a camera with radial distortion, calculations in base class Cal3DS2_Base. \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-\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+\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

    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+

    4*4 matrix representation of SO(4)

    \n+
    Author
    Frank Dellaert
    \n
    \n-Varun Agrawal
    \n+Luca Carlone
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,40 +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-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+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+SO4.cpp File Reference\n+4*4 matrix representation of SO(4) _\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 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 *\b**\b**\b**\b**\b* D\bDe\bet\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+4*4 matrix representation of SO(4)\n Author\n- ydjian\n- Varun Agrawal\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_\b3_\bD_\bS_\b2_\b._\bh\n+ * _\bS_\bO_\b4_\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/a00404.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00404.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var a00404 = [\n- [\"gtsam::traits< Cal3DS2 >\", \"a02984.html\", null],\n- [\"gtsam::traits< const Cal3DS2 >\", \"a02988.html\", null]\n+ [\"stiefel\", \"a00404.html#a3e57e4771f13855a495ec2c6454c9121\", null],\n+ [\"topLeft\", \"a00404.html#a8d21728e3da4cf1a96e1b6f87a97da47\", 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/Rot2.h 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@@ -95,52 +95,51 @@\n \n \n \n \n
    \n \n-
    Rot2.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    Cal3.h File Reference
    \n \n
    \n \n-

    2D rotation \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

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

    2D rotation

    \n-
    Date
    Dec 9, 2009
    \n-
    Author
    Frank Dellaert
    \n-
    \n-John Lambert
    \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,35 +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-Rot2.h File Reference\n-2D rotation _\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:_\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+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-2D rotation\n- Date\n- Dec 9, 2009\n+Common code for all Calibration models.\n Author\n- Frank Dellaert\n- John Lambert\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_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00407.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00407.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,3 @@\n var a00407 = [\n- [\"gtsam::Rot2::ChartAtOrigin\", \"a03216.html\", null],\n- [\"gtsam::traits< Rot2 >\", \"a03220.html\", null],\n- [\"gtsam::traits< const Rot2 >\", \"a03224.html\", null]\n+ [\"calibrateJacobians\", \"a00407.html#a9ac814fcc4484bce32e4616d69afb225\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00407_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00407_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/Rot2.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@@ -98,230 +98,177 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    Rot2.h
    \n+
    Cal3.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#include <gtsam/base/Lie.h>
    \n-
    24#include <boost/optional.hpp>
    \n+
    22#pragma once
    \n+
    23
    \n+\n
    25
    \n-
    26#include <random>
    \n+
    26namespace gtsam {
    \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-
    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+
    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-
    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-
    94 static Rot2 Random(std::mt19937 & rng);
    \n-
    95
    \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+
    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+
    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 static Vector1 Logmap(const Rot2& r, ChartJacobian H = boost::none);
    \n+
    129 virtual void print(const std::string& s = "") const;
    \n
    130
    \n-
    132 Matrix1 AdjointMap() const { return I_1x1; }
    \n+
    132 bool equals(const Cal3& K, double tol = 10e-9) const;
    \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+
    137
    \n+
    139 inline double fx() const { return fx_; }
    \n+
    140
    \n+
    142 inline double fy() const { return fy_; }
    \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+
    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-
    159
    \n-
    163 Point2 rotate(const Point2& p, OptionalJacobian<2, 1> H1 = boost::none,
    \n-
    164 OptionalJacobian<2, 2> H2 = boost::none) const;
    \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 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+
    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-
    \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+
    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-
    \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+
    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-
    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+
    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-
    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+
    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
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,277 +1,224 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Rot2.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/_\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+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-26#include \n+26namespace _\bg_\bt_\bs_\ba_\bm {\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-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+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-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-94 static _\bR_\bo_\bt_\b2 Random(std::mt19937 & rng);\n-95\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+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+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 static Vector1 Logmap(const _\bR_\bo_\bt_\b2& r, ChartJacobian H = boost::none);\n+129 virtual void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const;\n 130\n-_\b1_\b3_\b2 Matrix1 _\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp() const { return I_1x1; }\n+132 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bC_\ba_\bl_\b3& K, double tol = 10e-9) const;\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+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-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+_\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-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+_\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 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+_\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 _\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_\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-_\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+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:_\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:_\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:_\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\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 * _\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_\b._\bh\n * Generated on Tue Jan 9 2024 05:51: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/Cal3_S2.cpp 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@@ -96,40 +96,37 @@\n \n \n \n
    \n \n-
    Cal3_S2.cpp File Reference
    \n+
    StereoPoint2.cpp File Reference
    \n
    \n
    \n-\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_S2 &cal)
     
    \n+ostream & gtsam::operator<< (ostream &os, const StereoPoint2 &p)
     
    \n

    Detailed Description

    \n-

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

    \n-
    Author
    Frank Dellaert
    \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,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_S2.cpp File Reference\n-The most common 5DOF 3D->2D calibration. _\bM_\bo_\br_\be_\b._\b._\b.\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-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+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-The most common 5DOF 3D->2D calibration.\n+ Date\n+ Jan 26, 2010\n Author\n- Frank Dellaert\n+ 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._\bc_\bp_\bp\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/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/Cal3DS2_Base.cpp 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@@ -94,41 +94,52 @@\n \n \n \n \n \n
    \n \n-
    Cal3DS2_Base.cpp File Reference
    \n+Classes |\n+Namespaces
    \n+
    SphericalCamera.h 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-std::ostream & gtsam::operator<< (std::ostream &os, const Cal3DS2_Base &cal)
     
    \n

    Detailed Description

    \n-
    Date
    Feb 28, 2010
    \n-
    Author
    ydjian
    \n-
    \n-Varun Agrawal
    \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,24 +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-Cal3DS2_Base.cpp File Reference\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 N\bNa\bam\bme\bes\bsp\bpa\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+Calibrated camera with spherical projection.\n Date\n- Feb 28, 2010\n+ Aug 26, 2021\n Author\n- ydjian\n- Varun Agrawal\n+ Luca Carlone\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+ * _\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/a00416.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00416.html", "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/Cal3_S2.h File Reference\n \n \n \n \n \n \n \n@@ -94,36 +94,48 @@\n \n \n \n \n \n
    \n \n-
    CalibratedCamera.cpp File Reference
    \n+
    Cal3_S2.h File Reference
    \n
    \n
    \n \n-

    Calibrated camera for which only pose is unknown. \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

    Detailed Description

    \n-

    Calibrated camera for which only pose is unknown.

    \n-
    Date
    Aug 17, 2009
    \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,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-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\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 *\b**\b**\b**\b**\b* D\bDe\bet\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+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_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\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/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/Line3.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,57 +94,41 @@\n \n \n \n \n \n
    \n \n-
    Line3.h File Reference
    \n+
    Cal3DS2_Base.cpp File Reference
    \n
    \n
    \n-\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+\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 Cal3DS2_Base &cal)
     
    \n

    Detailed Description

    \n-

    4 dimensional manifold of 3D lines

    \n-
    Author
    Akshay Krishnan
    \n+
    Date
    Feb 28, 2010
    \n+
    Author
    ydjian
    \n
    \n-Frank Dellaert
    \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 | _\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+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 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_\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-4 dimensional manifold of 3D lines\n+ Date\n+ Feb 28, 2010\n Author\n- Akshay Krishnan\n- Frank Dellaert\n+ ydjian\n+ Varun Agrawal\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_\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/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/Similarity3.cpp 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,44 +94,36 @@\n \n \n \n \n \n
    \n \n-
    Similarity3.cpp File Reference
    \n+Namespaces
    \n+
    SimpleCamera.cpp File Reference
    \n \n
    \n \n-

    Implementation of Similarity3 transform. \n+

    A simple camera class with a Cal3_S2 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-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 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,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 | _\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+_\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-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 simple camera class with a Cal3_S2 calibration.\n+ Date\n+ June 30, 2012\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+ * _\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/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/Similarity2.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,51 +94,41 @@\n \n \n \n \n \n
    \n \n-
    Similarity2.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    Pose3.cpp File Reference
    \n \n
    \n \n-

    Implementation of Similarity2 transform. \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-Classes

    class  gtsam::Similarity2
     2D similarity transform More...
     
    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+Functions

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

    Detailed Description

    \n-

    Implementation of Similarity2 transform.

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

    3D Pose

    \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\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- 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:_\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+_\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+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-Implementation of Similarity2 transform.\n- Author\n- John Lambert, Varun Agrawal\n+3D Pose\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+ * _\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/a00437_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00437_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/SO3.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3DS2_Base.h Source File\n \n \n \n \n \n \n \n@@ -98,211 +98,151 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    SO3.h
    \n+
    Cal3DS2_Base.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-
    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-
    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+
    20#pragma once
    \n+
    21
    \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+
    44 double k1_ = 0.0f, k2_ = 0.0f;
    \n+
    45 double p1_ = 0.0f, p2_ = 0.0f;
    \n+
    46 double tol_ = 1e-5;
    \n+
    47
    \n+
    48 public:
    \n+
    49 enum { dimension = 9 };
    \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+
    52 using shared_ptr = boost::shared_ptr<Cal3DS2_Base>;
    \n+
    53
    \n+
    56
    \n+
    58 Cal3DS2_Base() = default;
    \n+
    59
    \n+
    60 Cal3DS2_Base(double fx, double fy, double s, double u0, double v0, double k1,
    \n+
    61 double k2, double p1 = 0.0, double p2 = 0.0, double tol = 1e-5)
    \n+
    62 : Cal3(fx, fy, s, u0, v0),
    \n+
    63 k1_(k1),
    \n+
    64 k2_(k2),
    \n+
    65 p1_(p1),
    \n+
    66 p2_(p2),
    \n+
    67 tol_(tol) {}
    \n+
    68
    \n+
    69 ~Cal3DS2_Base() override {}
    \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-
    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+
    74
    \n+
    75 Cal3DS2_Base(const Vector9& v)
    \n+
    76 : Cal3(v(0), v(1), v(2), v(3), v(4)),
    \n+
    77 k1_(v(5)),
    \n+
    78 k2_(v(6)),
    \n+
    79 p1_(v(7)),
    \n+
    80 p2_(v(8)) {}
    \n+
    81
    \n+
    85
    \n+
    87 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,
    \n+
    88 const Cal3DS2_Base& cal);
    \n+
    89
    \n+
    91 void print(const std::string& s = "") const override;
    \n+
    92
    \n+
    94 bool equals(const Cal3DS2_Base& K, double tol = 1e-8) const;
    \n+
    95
    \n+
    99
    \n+
    101 inline double k1() const { return k1_; }
    \n+
    102
    \n+
    104 inline double k2() const { return k2_; }
    \n+
    105
    \n+
    107 inline double p1() const { return p1_; }
    \n+
    108
    \n+
    110 inline double p2() const { return p2_; }
    \n+
    111
    \n+
    113 Vector4 k() const { return Vector4(k1_, k2_, p1_, p2_); }
    \n+
    114
    \n+
    116 Vector9 vector() const;
    \n+
    117
    \n+
    125 Point2 uncalibrate(const Point2& p, OptionalJacobian<2, 9> Dcal = boost::none,
    \n+
    126 OptionalJacobian<2, 2> Dp = boost::none) const;
    \n+
    127
    \n+
    129 Point2 calibrate(const Point2& p, OptionalJacobian<2, 9> Dcal = boost::none,
    \n+
    130 OptionalJacobian<2, 2> Dp = boost::none) const;
    \n+
    131
    \n+
    133 Matrix2 D2d_intrinsic(const Point2& p) const;
    \n+
    134
    \n+
    136 Matrix29 D2d_calibration(const Point2& p) const;
    \n+
    137
    \n+
    139 size_t dim() const override { return Dim(); }
    \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+
    142 inline static size_t Dim() { return dimension; }
    \n+
    143
    \n+
    147
    \n+
    \n+
    149 virtual boost::shared_ptr<Cal3DS2_Base> clone() const {
    \n+
    150 return boost::shared_ptr<Cal3DS2_Base>(new Cal3DS2_Base(*this));
    \n+
    151 }
    \n+
    \n+
    152
    \n+
    154
    \n+
    155 private:
    \n+
    158
    \n+
    160 friend class boost::serialization::access;
    \n+
    161 template <class Archive>
    \n+
    162 void serialize(Archive& ar, const unsigned int /*version*/) {
    \n+
    163 ar& boost::serialization::make_nvp(
    \n+
    164 "Cal3DS2_Base", boost::serialization::base_object<Cal3>(*this));
    \n+
    165 ar& BOOST_SERIALIZATION_NVP(k1_);
    \n+
    166 ar& BOOST_SERIALIZATION_NVP(k2_);
    \n+
    167 ar& BOOST_SERIALIZATION_NVP(p1_);
    \n+
    168 ar& BOOST_SERIALIZATION_NVP(p2_);
    \n+
    169 ar& BOOST_SERIALIZATION_NVP(tol_);
    \n+
    170 }
    \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+
    173};
    \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+
    174}
    \n+
    Common code for all Calibration models.
    \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-
    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+
    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-
    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+
    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+
    double p2() const
    Second tangential distortion coefficient.
    Definition Cal3DS2_Base.h:110
    \n+
    static size_t Dim()
    return DOF, dimensionality of tangent space
    Definition Cal3DS2_Base.h:142
    \n+
    virtual boost::shared_ptr< Cal3DS2_Base > clone() const
    Definition Cal3DS2_Base.h:149
    \n+
    double k2() const
    Second distortion coefficient.
    Definition Cal3DS2_Base.h:104
    \n+
    double k1() const
    First distortion coefficient.
    Definition Cal3DS2_Base.h:101
    \n+
    size_t dim() const override
    return DOF, dimensionality of tangent space
    Definition Cal3DS2_Base.h:139
    \n+
    double p1() const
    First tangential distortion coefficient.
    Definition Cal3DS2_Base.h:107
    \n+
    Vector4 k() const
    return distortion parameter vector
    Definition Cal3DS2_Base.h:113
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,266 +1,184 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\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+Cal3DS2_Base.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/_\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-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+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#include \n+25\n+26namespace _\bg_\bt_\bs_\ba_\bm {\n+27\n+_\b4_\b2class GTSAM_EXPORT _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be : public _\bC_\ba_\bl_\b3 {\n+43 protected:\n+_\b4_\b4 double k1_ = 0.0f, k2_ = 0.0f;\n+_\b4_\b5 double p1_ = 0.0f, p2_ = 0.0f;\n+_\b4_\b6 double tol_ = 1e-5;\n+47\n+48 public:\n+49 enum { dimension = 9 };\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+52 using shared_ptr = boost::shared_ptr;\n+53\n+56\n+_\b5_\b8 _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be() = default;\n+59\n+60 _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be(double fx, double fy, double s, double u0, double v0, double\n+k1,\n+61 double k2, double p1 = 0.0, double p2 = 0.0, double tol = 1e-5)\n+62 : _\bC_\ba_\bl_\b3(fx, fy, s, u0, v0),\n+63 k1_(k1),\n+64 k2_(k2),\n+65 p1_(p1),\n+66 p2_(p2),\n+67 tol_(tol) {}\n+68\n+69 _\b~_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be() override {}\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-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+74\n+75 Cal3DS2_Base(const Vector9& v)\n+76 : Cal3(v(0), v(1), v(2), v(3), v(4)),\n+77 k1_(v(5)),\n+78 k2_(v(6)),\n+79 p1_(v(7)),\n+80 p2_(v(8)) {}\n+81\n+85\n+87 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,\n+88 const Cal3DS2_Base& cal);\n+89\n+91 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const override;\n+92\n+94 bool equals(const Cal3DS2_Base& K, double tol = 1e-8) const;\n+95\n+99\n+_\b1_\b0_\b1 inline double _\bk_\b1() const { return k1_; }\n+102\n+_\b1_\b0_\b4 inline double _\bk_\b2() const { return k2_; }\n+105\n+_\b1_\b0_\b7 inline double _\bp_\b1() const { return p1_; }\n+108\n+_\b1_\b1_\b0 inline double _\bp_\b2() const { return p2_; }\n+111\n+_\b1_\b1_\b3 Vector4 _\bk() const { return Vector4(k1_, k2_, p1_, p2_); }\n+114\n+116 Vector9 vector() const;\n+117\n+125 _\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+126 _\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+127\n+129 _\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+130 _\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+131\n+133 Matrix2 D2d_intrinsic(const _\bP_\bo_\bi_\bn_\bt_\b2& p) const;\n+134\n+136 Matrix29 D2d_calibration(const _\bP_\bo_\bi_\bn_\bt_\b2& p) const;\n+137\n+_\b1_\b3_\b9 size_t _\bd_\bi_\bm() const override { return Dim(); }\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+_\b1_\b4_\b2 inline static size_t _\bD_\bi_\bm() { return dimension; }\n+143\n+147\n+_\b1_\b4_\b9 virtual boost::shared_ptr _\bc_\bl_\bo_\bn_\be() const {\n+150 return boost::shared_ptr(new _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be(*this));\n+151 }\n+152\n+154\n+155 private:\n+158\n+_\b1_\b6_\b0 friend class boost::serialization::access;\n+161 template \n+162 void serialize(Archive& ar, const unsigned int /*version*/) {\n+163 ar& boost::serialization::make_nvp(\n+164 \"Cal3DS2_Base\", boost::serialization::base_object(*this));\n+165 ar& BOOST_SERIALIZATION_NVP(k1_);\n+166 ar& BOOST_SERIALIZATION_NVP(k2_);\n+167 ar& BOOST_SERIALIZATION_NVP(p1_);\n+168 ar& BOOST_SERIALIZATION_NVP(p2_);\n+169 ar& BOOST_SERIALIZATION_NVP(tol_);\n+170 }\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-_\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-_\bS_\bO_\bn_\b._\bh\n-N*N matrix representation of SO(N).\n+173};\n+174}\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:_\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_\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:_\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:_\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:_\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_\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_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be\n+Cal3DS2_Base()=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_\b:_\b:_\bp_\b2\n+double p2() const\n+Second tangential distortion coefficient.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3DS2_Base.h:110\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be_\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 Cal3DS2_Base.h:142\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+virtual boost::shared_ptr< Cal3DS2_Base > clone() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3DS2_Base.h:149\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\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 Cal3DS2_Base.h:104\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\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 Cal3DS2_Base.h:101\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be_\b:_\b:_\bd_\bi_\bm\n+size_t dim() const override\n+return DOF, dimensionality of tangent space\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3DS2_Base.h:139\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be_\b:_\b:_\bp_\b1\n+double p1() const\n+First tangential distortion coefficient.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3DS2_Base.h:107\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\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 Cal3DS2_Base.h:113\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bO_\b3_\b._\bh\n+ * C\bCa\bal\bl3\b3D\bDS\bS2\b2_\b_B\bBa\bas\bse\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/a00443.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00443.html", "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/Point2.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,35 +94,63 @@\n
    \n \n \n \n \n
    \n \n-
    Cyclic.cpp File Reference
    \n+Namespaces |\n+Functions
    \n+
    Point2.cpp File Reference
    \n \n
    \n \n-

    Cyclic group implementation. \n+

    2D Point \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+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-

    Cyclic group implementation.

    \n+

    2D Point

    \n
    Author
    Frank Dellaert
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +1,48 @@\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+_\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-Cyclic group implementation.\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_\by_\bc_\bl_\bi_\bc_\b._\bc_\bp_\bp\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/a00446.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00446.html", "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/Cal3Fisheye.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,56 +94,41 @@\n \n \n \n \n \n
    \n \n-
    CalibratedCamera.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    Cal3Fisheye.cpp File Reference
    \n \n
    \n-\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-Classes

    class  gtsam::CheiralityException
     
    class  gtsam::PinholeBase
     A pinhole camera class that has a Pose3, functions as base class for all pinhole cameras. More...
     
    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+\n+\n+\n

    \n+Functions

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

    Detailed Description

    \n-

    Calibrated camera for which only pose is unknown.

    \n-
    Date
    Aug 17, 2009
    \n-
    Author
    Frank Dellaert
    \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,39 +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-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_\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:_\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- 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+_\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-Calibrated camera for which only pose is unknown.\n Date\n- Aug 17, 2009\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- * _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\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/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/Point2.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,92 +94,57 @@\n \n \n \n \n \n
    \n \n-
    Point2.h File Reference
    \n+Typedefs
    \n+
    SimpleCamera.h File Reference
    \n \n
    \n \n-

    2D Point \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-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+\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.
     
    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-

    2D Point

    \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,70 +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 | _\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+_\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-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+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-2D Point\n+A simple camera class with a Cal3_S2 calibration.\n+ Date\n+ Aug 16, 2009\n Author\n Frank Dellaert\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+ * _\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/a00449.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00449.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,9 +1,3 @@\n var a00449 = [\n- [\"gtsam::Range< Point2, Point2 >\", \"a03148.html\", null],\n- [\"Point2\", \"a00449.html#a6ede8384dee0353a0ce5fb54ea50c21d\", null],\n- [\"circleCircleIntersection\", \"a00449.html#a93d4e38a582b6f32fc4f301df10721d5\", null],\n- [\"distance2\", \"a00449.html#afd1282dfb080cb393ae60188b4582cb2\", null],\n- [\"means\", \"a00449.html#a9e357cda5287fae1438f86bc4df27a80\", null],\n- [\"norm2\", \"a00449.html#afee4e6aa4aba9b6a6b421ddd75b52dfc\", null],\n- [\"operator*\", \"a00449.html#a63d86e99c211c6daeac2b7b4dd9d928e\", null]\n+ [\"PinholeCameraCal3_S2\", \"a00449.html#a3a2e8c622e65623a6853c84073bdb4f2\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00449_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00449_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/SimpleCamera.h Source File\n \n \n \n \n \n \n \n@@ -98,116 +98,141 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    Point2.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-
    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-
    \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-
    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+
    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+
    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+
    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+
    Calibration of a camera with radial distortion, calculations in base class Cal3DS2_Base.
    \n+
    Bearing-Range product.
    \n+
    Calibration used by Bundler.
    \n+
    Calibration of a fisheye camera.
    \n+
    Base class for all pinhole cameras.
    \n+
    The most common 5DOF 3D->2D calibration.
    \n+
    Unified Calibration Model, see Mei07icra for details.
    \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-
    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+
    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,140 +1,160 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Point2.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-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-_\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-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+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+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+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+_\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+_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh\n+Bearing-Range product.\n+_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b._\bh\n+Calibration used by Bundler.\n+_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b._\bh\n+Calibration of a fisheye camera.\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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_\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:_\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+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- * _\bP_\bo_\bi_\bn_\bt_\b2_\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/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/Pose3.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,41 +94,38 @@\n \n \n \n \n \n
    \n \n-
    Pose3.cpp File Reference
    \n+Namespaces
    \n+
    SOn.cpp File Reference
    \n \n
    \n \n-

    3D Pose \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-std::ostream & gtsam::operator<< (std::ostream &os, const Pose3 &pose)
     
    \n

    Detailed Description

    \n-

    3D Pose

    \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,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 | _\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+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-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+Definitions of dynamic specializations of SO(n)\n+ Author\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- * _\bP_\bo_\bs_\be_\b3_\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/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/Similarity3.h 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@@ -97,58 +97,54 @@\n \n \n
    \n \n-
    Similarity3.h File Reference
    \n+
    Line3.h File Reference
    \n
    \n
    \n \n-

    Implementation of Similarity3 transform. \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 \n-\n-\n-\n+\n \n

    \n Classes

    class  gtsam::Similarity3
     3D similarity transform More...
    class  gtsam::Line3
     A 3D line (R,a,b) : (Rot3,Scalar,Scalar) More...
     
    struct  gtsam::Similarity3::ChartAtOrigin
     Chart at the origin. More...
    struct  gtsam::traits< Line3 >
     
    struct  gtsam::traits< Similarity3 >
     
    struct  gtsam::traits< const Similarity3 >
    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

    \n Functions

    \n-template<>
    Matrix gtsam::wedge< Similarity3 > (const Vector &xi)
     
    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-

    Implementation of Similarity3 transform.

    \n-
    Author
    Paul Drews
    \n+

    4 dimensional manifold of 3D lines

    \n+
    Author
    Akshay Krishnan
    \n
    \n-John Lambert
    \n+Frank Dellaert
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,37 +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 | _\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+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:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3\n-\u00a0 3D similarity transform _\bM_\bo_\br_\be_\b._\b._\b.\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:_\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+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 _\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+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-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+_\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-Implementation of Similarity3 transform.\n+4 dimensional manifold of 3D lines\n Author\n- Paul Drews\n- John Lambert\n+ Akshay Krishnan\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+ * _\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/a00458.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00458.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,6 +1,5 @@\n var a00458 = [\n- [\"gtsam::Similarity3\", \"a03264.html\", \"a03264\"],\n- [\"gtsam::Similarity3::ChartAtOrigin\", \"a03268.html\", null],\n- [\"gtsam::traits< Similarity3 >\", \"a03272.html\", null],\n- [\"gtsam::traits< const Similarity3 >\", \"a03276.html\", null]\n+ [\"gtsam::traits< Line3 >\", \"a03084.html\", null],\n+ [\"gtsam::traits< const Line3 >\", \"a03088.html\", null],\n+ [\"transformTo\", \"a00458.html#aae9294b064e306ac7993dea546c0d8fb\", 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/Similarity3.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Line3.h Source File\n \n \n \n \n \n \n \n@@ -98,181 +98,130 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    Similarity3.h
    \n+
    Line3.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/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-
    27
    \n-
    28namespace gtsam {
    \n-
    29
    \n-
    30// Forward declarations
    \n-
    31class Pose3;
    \n-
    32
    \n-
    \n-
    36class GTSAM_EXPORT Similarity3 : public LieGroup<Similarity3, 7> {
    \n-
    39 typedef Rot3 Rotation;
    \n-
    40 typedef Point3 Translation;
    \n-
    42
    \n-
    43 private:
    \n-
    44 Rot3 R_;
    \n-
    45 Point3 t_;
    \n-
    46 double s_;
    \n-
    47
    \n-
    48 public:
    \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+
    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+
    36 OptionalJacobian<4, 4> Dline = boost::none);
    \n+
    37
    \n+
    38
    \n+
    \n+
    44class GTSAM_EXPORT Line3 {
    \n+
    45 private:
    \n+
    46 Rot3 R_; // Rotation of line about x and y in world frame
    \n+
    47 double a_, b_; // Intersection of line with the world x-y plane rotated by R_
    \n+
    48 // Also the closest point on line to origin
    \n+
    49 public:
    \n+
    50 enum { dimension = 4 };
    \n
    51
    \n-\n-
    54
    \n-
    56 Similarity3(double s);
    \n-
    57
    \n-
    59 Similarity3(const Rot3& R, const Point3& t, double s);
    \n-
    60
    \n-
    62 Similarity3(const Matrix3& R, const Vector3& t, double s);
    \n-
    63
    \n-
    65 Similarity3(const Matrix4& T);
    \n-
    66
    \n-
    70
    \n-
    72 bool equals(const Similarity3& sim, double tol) const;
    \n-
    73
    \n-
    75 bool operator==(const Similarity3& other) const;
    \n-
    76
    \n-
    78 void print(const std::string& s) const;
    \n-
    79
    \n-
    80 friend std::ostream& operator<<(std::ostream& os, const Similarity3& p);
    \n-
    81
    \n-
    85
    \n-
    87 static Similarity3 Identity();
    \n-
    88
    \n-
    90 Similarity3 operator*(const Similarity3& S) const;
    \n-
    91
    \n-
    93 Similarity3 inverse() const;
    \n-
    94
    \n-
    98
    \n-
    100 Point3 transformFrom(const Point3& p, //
    \n-
    101 OptionalJacobian<3, 7> H1 = boost::none, //
    \n-
    102 OptionalJacobian<3, 3> H2 = boost::none) const;
    \n-
    103
    \n-
    115 Pose3 transformFrom(const Pose3& T) const;
    \n-
    116
    \n-
    118 Point3 operator*(const Point3& p) const;
    \n+
    \n+\n+
    54 a_(0), b_(0) {}
    \n+
    \n+
    55
    \n+
    \n+
    57 Line3(const Rot3 &R, const double a, const double b) :
    \n+
    58 R_(R), a_(a), b_(b) {}
    \n+
    \n+
    59
    \n+
    71 Line3 retract(const Vector4 &v,
    \n+
    72 OptionalJacobian<4, 4> Dp = boost::none,
    \n+
    73 OptionalJacobian<4, 4> Dv = boost::none) const;
    \n+
    74
    \n+
    84 Vector4 localCoordinates(const Line3 &q,
    \n+
    85 OptionalJacobian<4, 4> Dp = boost::none,
    \n+
    86 OptionalJacobian<4, 4> Dq = boost::none) const;
    \n+
    87
    \n+
    92 void print(const std::string &s = "") const;
    \n+
    93
    \n+
    100 bool equals(const Line3 &l2, double tol = 10e-9) const;
    \n+
    101
    \n+
    108 Unit3 project(OptionalJacobian<2, 4> Dline = boost::none) const;
    \n+
    109
    \n+
    118 Point3 point(double distance = 0) const;
    \n
    119
    \n-
    123 static Similarity3 Align(const Point3Pairs& abPointPairs);
    \n-
    124
    \n-
    135 static Similarity3 Align(const std::vector<Pose3Pair>& abPosePairs);
    \n-
    136
    \n+
    \n+
    123 inline Rot3 R() const {
    \n+
    124 return R_;
    \n+
    125 }
    \n+
    \n+
    126
    \n+
    \n+
    130 inline double a() const {
    \n+
    131 return a_;
    \n+
    132 }
    \n+
    \n+
    133
    \n+
    \n+
    137 inline double b() const {
    \n+
    138 return b_;
    \n+
    139 }
    \n+
    \n
    140
    \n-
    144 static Vector7 Logmap(const Similarity3& s, //
    \n-
    145 OptionalJacobian<7, 7> Hm = boost::none);
    \n-
    146
    \n-
    149 static Similarity3 Expmap(const Vector7& v, //
    \n-
    150 OptionalJacobian<7, 7> Hm = boost::none);
    \n-
    151
    \n-
    \n-\n-
    154 static Similarity3 Retract(const Vector7& v,
    \n-
    155 ChartJacobian H = boost::none) {
    \n-
    156 return Similarity3::Expmap(v, H);
    \n-
    157 }
    \n-
    158 static Vector7 Local(const Similarity3& other,
    \n-
    159 ChartJacobian H = boost::none) {
    \n-
    160 return Similarity3::Logmap(other, H);
    \n-
    161 }
    \n-
    162 };
    \n-
    \n-
    163
    \n-
    164 using LieGroup<Similarity3, 7>::inverse;
    \n-
    165
    \n-
    172 static Matrix4 wedge(const Vector7& xi);
    \n-
    173
    \n-
    175 Matrix7 AdjointMap() const;
    \n-
    176
    \n-
    180
    \n-
    182 Matrix4 matrix() const;
    \n-
    183
    \n-
    185 Rot3 rotation() const { return R_; }
    \n-
    186
    \n-
    188 Point3 translation() const { return t_; }
    \n-
    189
    \n-
    191 double scale() const { return s_; }
    \n-
    192
    \n-
    194 inline static size_t Dim() { return 7; }
    \n-
    195
    \n-
    197 inline size_t dim() const { return 7; }
    \n-
    198
    \n-
    202
    \n-
    203 private:
    \n-
    205 static Matrix3 GetV(Vector3 w, double lambda);
    \n-
    206
    \n-
    208};
    \n-
    \n-
    209
    \n-
    210template <>
    \n-
    211inline Matrix wedge<Similarity3>(const Vector& xi) {
    \n-
    212 return Similarity3::wedge(xi);
    \n-
    213}
    \n-
    214
    \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 Lie types.
    \n-
    Base class and basic functions for Manifold types.
    \n-
    3D Pose
    \n-
    3D Point
    \n-
    3D rotation represented as a rotation matrix or quaternion
    \n+
    149 friend Line3 transformTo(const Pose3 &wTc, const Line3 &wL,
    \n+\n+\n+
    152};
    \n+
    \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
    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+
    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-
    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+
    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 line (R,a,b) : (Rot3,Scalar,Scalar)
    Definition Line3.h:44
    \n+
    Rot3 R() const
    Return the rotation of the line.
    Definition Line3.h:123
    \n+
    Line3()
    Default constructor is the Z axis.
    Definition Line3.h:53
    \n+
    Line3(const Rot3 &R, const double a, const double b)
    Constructor for general line from (R, a, b)
    Definition Line3.h:57
    \n+
    double b() const
    Return the y-coordinate of the intersection of the line with the xy plane.
    Definition Line3.h:137
    \n+
    double a() const
    Return the x-coordinate of the intersection of the line with the xy plane.
    Definition Line3.h:130
    \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-
    3D similarity transform
    Definition Similarity3.h:36
    \n-
    static size_t Dim()
    Dimensionality of tangent space = 7 DOF - used to autodetect sizes.
    Definition Similarity3.h:194
    \n-
    Point3 translation() const
    Return a GTSAM translation.
    Definition Similarity3.h:188
    \n-
    Rot3 rotation() const
    Return a GTSAM rotation.
    Definition Similarity3.h:185
    \n-
    size_t dim() const
    Dimensionality of tangent space = 7 DOF.
    Definition Similarity3.h:197
    \n-
    static Matrix4 wedge(const Vector7 &xi)
    wedge for Similarity3:
    Definition Similarity3.cpp:198
    \n-
    double scale() const
    Return the scale.
    Definition Similarity3.h:191
    \n-
    Chart at the origin.
    Definition Similarity3.h:153
    \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,233 +1,163 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Similarity3.h\n+Line3.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/_\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 \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/_\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/_\bR_\bo_\bt_\b3_\b._\bh>\n-27\n-28namespace _\bg_\bt_\bs_\ba_\bm {\n-29\n-30// Forward declarations\n-31class Pose3;\n-32\n-_\b3_\b6class GTSAM_EXPORT _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3 : public _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {\n-39 typedef _\bR_\bo_\bt_\b3 _\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn;\n-40 typedef _\bP_\bo_\bi_\bn_\bt_\b3 Translation;\n-42\n-43 private:\n-44 _\bR_\bo_\bt_\b3 R_;\n-45 _\bP_\bo_\bi_\bn_\bt_\b3 t_;\n-46 double s_;\n-47\n-48 public:\n+8\n+15// \\callgraph\n+16\n+17#pragma once\n+18\n+19#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b3_\b._\bh>\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\n+22namespace _\bg_\bt_\bs_\ba_\bm {\n+23\n+24class Line3;\n+25\n+34GTSAM_EXPORT Line3 _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bo(const Pose3 &wTc, const Line3 &wL,\n+35 OptionalJacobian<4, 6> Dpose = boost::none,\n+36 OptionalJacobian<4, 4> Dline = boost::none);\n+37\n+38\n+_\b4_\b4class GTSAM_EXPORT _\bL_\bi_\bn_\be_\b3 {\n+45 private:\n+46 _\bR_\bo_\bt_\b3 R_; // Rotation of line about x and y in world frame\n+47 double a_, b_; // Intersection of line with the world x-y plane rotated by\n+R_\n+48 // Also the closest point on line to origin\n+49 public:\n+50 enum { dimension = 4 };\n 51\n-53 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3();\n-54\n-56 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3(double s);\n-57\n-59 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3(const _\bR_\bo_\bt_\b3& R, const _\bP_\bo_\bi_\bn_\bt_\b3& t, double s);\n-60\n-62 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3(const Matrix3& R, const Vector3& t, double s);\n-63\n-65 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3(const Matrix4& T);\n-66\n-70\n-72 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3& sim, double tol) const;\n-73\n-75 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3& other) const;\n-76\n-78 void _\bp_\br_\bi_\bn_\bt(const std::string& s) const;\n-79\n-80 friend std::ostream& operator<<(std::ostream& os, const _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3& p);\n-81\n-85\n-87 static _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3 Identity();\n-88\n-90 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3& S) const;\n-91\n-93 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3 inverse() const;\n-94\n-98\n-100 _\bP_\bo_\bi_\bn_\bt_\b3 transformFrom(const _\bP_\bo_\bi_\bn_\bt_\b3& p, //\n-101 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b7_\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-115 _\bP_\bo_\bs_\be_\b3 transformFrom(const _\bP_\bo_\bs_\be_\b3& T) const;\n-116\n-118 _\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+_\b5_\b3 _\bL_\bi_\bn_\be_\b3() :\n+54 a_(0), b_(0) {}\n+55\n+_\b5_\b7 _\bL_\bi_\bn_\be_\b3(const _\bR_\bo_\bt_\b3 &R, const double a, const double b) :\n+58 R_(R), a_(a), b_(b) {}\n+59\n+71 _\bL_\bi_\bn_\be_\b3 retract(const Vector4 &v,\n+72 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b4_\b,_\b _\b4_\b> Dp = boost::none,\n+73 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b4_\b,_\b _\b4_\b> Dv = boost::none) const;\n+74\n+84 Vector4 localCoordinates(const _\bL_\bi_\bn_\be_\b3 &q,\n+85 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b4_\b,_\b _\b4_\b> Dp = boost::none,\n+86 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b4_\b,_\b _\b4_\b> Dq = boost::none) const;\n+87\n+92 void _\bp_\br_\bi_\bn_\bt(const std::string &s = \"\") const;\n+93\n+100 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bL_\bi_\bn_\be_\b3 &l2, double tol = 10e-9) const;\n+101\n+108 _\bU_\bn_\bi_\bt_\b3 _\bp_\br_\bo_\bj_\be_\bc_\bt(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b4_\b> Dline = boost::none) const;\n+109\n+118 _\bP_\bo_\bi_\bn_\bt_\b3 point(double distance = 0) const;\n 119\n-123 static _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3 Align(const Point3Pairs& abPointPairs);\n-124\n-135 static _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3 Align(const std::vector& abPosePairs);\n-136\n+_\b1_\b2_\b3 inline _\bR_\bo_\bt_\b3 _\bR() const {\n+124 return R_;\n+125 }\n+126\n+_\b1_\b3_\b0 inline double _\ba() const {\n+131 return a_;\n+132 }\n+133\n+_\b1_\b3_\b7 inline double _\bb() const {\n+138 return b_;\n+139 }\n 140\n-144 static Vector7 Logmap(const _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3& s, //\n-145 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b7_\b,_\b _\b7_\b> Hm = boost::none);\n-146\n-149 static _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3 Expmap(const Vector7& v, //\n-150 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b7_\b,_\b _\b7_\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_\b3 Retract(const Vector7& v,\n-155 ChartJacobian H = boost::none) {\n-156 return Similarity3::Expmap(v, H);\n-157 }\n-158 static Vector7 Local(const _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3& other,\n-159 ChartJacobian H = boost::none) {\n-160 return Similarity3::Logmap(other, H);\n-161 }\n-162 };\n-163\n-164 using _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp<_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3, 7>::inverse;\n-165\n-172 static Matrix4 _\bw_\be_\bd_\bg_\be(const Vector7& xi);\n-173\n-175 Matrix7 AdjointMap() const;\n-176\n-180\n-182 Matrix4 matrix() const;\n-183\n-_\b1_\b8_\b5 _\bR_\bo_\bt_\b3 _\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn() const { return R_; }\n-186\n-_\b1_\b8_\b8 _\bP_\bo_\bi_\bn_\bt_\b3 _\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn() const { return t_; }\n-189\n-_\b1_\b9_\b1 double _\bs_\bc_\ba_\bl_\be() const { return s_; }\n-192\n-_\b1_\b9_\b4 inline static size_t _\bD_\bi_\bm() { return 7; }\n-195\n-_\b1_\b9_\b7 inline size_t _\bd_\bi_\bm() const { return 7; }\n-198\n-202\n-203 private:\n-205 static Matrix3 GetV(Vector3 w, double lambda);\n-206\n-208};\n-209\n-210template <>\n-211inline Matrix wedge(const Vector& xi) {\n-212 return _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3_\b:_\b:_\bw_\be_\bd_\bg_\be(xi);\n-213}\n-214\n-215template <>\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-_\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-_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n-3D Point\n+149 friend _\bL_\bi_\bn_\be_\b3 _\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,\n+150 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b4_\b,_\b _\b6_\b> Dpose,\n+151 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b4_\b,_\b _\b4_\b> Dline);\n+152};\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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_\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:_\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:_\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_\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:_\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:_\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:_\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:_\bL_\bi_\bn_\be_\b3\n+A 3D line (R,a,b) : (Rot3,Scalar,Scalar)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Line3.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\b3_\b:_\b:_\bR\n+Rot3 R() const\n+Return the rotation of the line.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Line3.h:123\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\b3_\b:_\b:_\bL_\bi_\bn_\be_\b3\n+Line3()\n+Default constructor is the Z axis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Line3.h:53\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\b3_\b:_\b:_\bL_\bi_\bn_\be_\b3\n+Line3(const Rot3 &R, const double a, const double b)\n+Constructor for general line from (R, a, b)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Line3.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\b3_\b:_\b:_\bb\n+double b() const\n+Return the y-coordinate of the intersection of the line with the xy plane.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Line3.h:137\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\b3_\b:_\b:_\ba\n+double a() const\n+Return the x-coordinate of the intersection of the line with the xy plane.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Line3.h:130\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:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3\n-3D similarity transform\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity3.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3_\b:_\b:_\bD_\bi_\bm\n-static size_t Dim()\n-Dimensionality of tangent space = 7 DOF - used to autodetect sizes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity3.h:194\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn\n-Point3 translation() const\n-Return a GTSAM translation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity3.h:188\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3_\b:_\b:_\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n-Rot3 rotation() const\n-Return a GTSAM rotation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity3.h:185\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3_\b:_\b:_\bd_\bi_\bm\n-size_t dim() const\n-Dimensionality of tangent space = 7 DOF.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity3.h:197\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3_\b:_\b:_\bw_\be_\bd_\bg_\be\n-static Matrix4 wedge(const Vector7 &xi)\n-wedge for Similarity3:\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity3.cpp:198\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3_\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 Similarity3.h:191\n-_\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-Chart at the origin.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity3.h:153\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_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3_\b._\bh\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/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/triangulation.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,193 +94,41 @@\n \n \n \n \n \n
    \n \n-
    triangulation.h File Reference
    \n+
    Cal3Unified.cpp File Reference
    \n
    \n
    \n-\n-

    Functions for triangulation. \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::TriangulationUnderconstrainedException
     Exception thrown by triangulateDLT when SVD returns rank < 3. More...
     
    class  gtsam::TriangulationCheiralityException
     Exception thrown by triangulateDLT when landmark is behind one or more of the cameras. More...
     
    struct  gtsam::TriangulationParameters
     
    class  gtsam::TriangulationResult
     TriangulationResult is an optional point, along with the reasons why it is invalid. 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::CameraSetCal3Bundler = CameraSet< PinholeCamera< Cal3Bundler > >
     
    \n-using gtsam::CameraSetCal3_S2 = CameraSet< PinholeCamera< Cal3_S2 > >
     
    \n-using gtsam::CameraSetCal3DS2 = CameraSet< PinholeCamera< Cal3DS2 > >
     
    \n-using gtsam::CameraSetCal3Fisheye = CameraSet< PinholeCamera< Cal3Fisheye > >
     
    \n-using gtsam::CameraSetCal3Unified = CameraSet< PinholeCamera< Cal3Unified > >
     
    \n-using gtsam::CameraSetSpherical = CameraSet< SphericalCamera >
     
    \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\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

    Vector4 gtsam::triangulateHomogeneousDLT (const std::vector< Matrix34, Eigen::aligned_allocator< Matrix34 > > &projection_matrices, const Point2Vector &measurements, double rank_tol=1e-9)
     DLT triangulation: See Hartley and Zisserman, 2nd Ed., page 312.
     
    Vector4 gtsam::triangulateHomogeneousDLT (const std::vector< Matrix34, Eigen::aligned_allocator< Matrix34 > > &projection_matrices, const std::vector< Unit3 > &measurements, double rank_tol=1e-9)
     Same math as Hartley and Zisserman, 2nd Ed., page 312, but with unit-norm bearing vectors (contrarily to pinhole projection, the z entry is not assumed to be 1 as in Hartley and Zisserman)
     
    Point3 gtsam::triangulateDLT (const std::vector< Matrix34, Eigen::aligned_allocator< Matrix34 > > &projection_matrices, const Point2Vector &measurements, double rank_tol=1e-9)
     DLT triangulation: See Hartley and Zisserman, 2nd Ed., page 312.
     
    \n-Point3 gtsam::triangulateDLT (const std::vector< Matrix34, Eigen::aligned_allocator< Matrix34 > > &projection_matrices, const std::vector< Unit3 > &measurements, double rank_tol=1e-9)
     overload of previous function to work with Unit3 (projected to canonical camera)
     
    Point3 gtsam::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.org/pdf/2205.12197.pdf by Sebastien Henry and John Christian.
     
    template<class CALIBRATION >
    std::pair< NonlinearFactorGraph, Valuesgtsam::triangulationGraph (const std::vector< Pose3 > &poses, boost::shared_ptr< CALIBRATION > sharedCal, const Point2Vector &measurements, Key landmarkKey, const Point3 &initialEstimate, const SharedNoiseModel &model=noiseModel::Unit::Create(2))
     Create a factor graph with projection factors from poses and one calibration.
     
    template<class CAMERA >
    std::pair< NonlinearFactorGraph, Valuesgtsam::triangulationGraph (const CameraSet< CAMERA > &cameras, const typename CAMERA::MeasurementVector &measurements, Key landmarkKey, const Point3 &initialEstimate, const SharedNoiseModel &model=nullptr)
     Create a factor graph with projection factors from pinhole cameras (each camera has a pose and calibration)
     
    Point3 gtsam::optimize (const NonlinearFactorGraph &graph, const Values &values, Key landmarkKey)
     Optimize for triangulation.
     
    template<class CALIBRATION >
    Point3 gtsam::triangulateNonlinear (const std::vector< Pose3 > &poses, boost::shared_ptr< CALIBRATION > sharedCal, const Point2Vector &measurements, const Point3 &initialEstimate, const SharedNoiseModel &model=nullptr)
     Given an initial estimate , refine a point using measurements in several cameras.
     
    template<class CAMERA >
    Point3 gtsam::triangulateNonlinear (const CameraSet< CAMERA > &cameras, const typename CAMERA::MeasurementVector &measurements, const Point3 &initialEstimate, const SharedNoiseModel &model=nullptr)
     Given an initial estimate , refine a point using measurements in several cameras.
     
    \n-template<class CAMERA >
    std::vector< Matrix34, Eigen::aligned_allocator< Matrix34 > > gtsam::projectionMatricesFromCameras (const CameraSet< CAMERA > &cameras)
     
    \n-template<class CALIBRATION >
    std::vector< Matrix34, Eigen::aligned_allocator< Matrix34 > > gtsam::projectionMatricesFromPoses (const std::vector< Pose3 > &poses, boost::shared_ptr< CALIBRATION > sharedCal)
     
    template<class CALIBRATION >
    Cal3_S2 gtsam::createPinholeCalibration (const CALIBRATION &cal)
     Create a pinhole calibration from a different Cal3 object, removing distortion.
     
    \n-template<class CALIBRATION , class MEASUREMENT >
    MEASUREMENT gtsam::undistortMeasurementInternal (const CALIBRATION &cal, const MEASUREMENT &measurement, boost::optional< Cal3_S2 > pinholeCal=boost::none)
     Internal undistortMeasurement to be used by undistortMeasurement and undistortMeasurements.
     
    template<class CALIBRATION >
    Point2Vector gtsam::undistortMeasurements (const CALIBRATION &cal, const Point2Vector &measurements)
     Remove distortion for measurements so as if the measurements came from a pinhole camera.
     
    \n-template<>
    Point2Vector gtsam::undistortMeasurements (const Cal3_S2 &cal, const Point2Vector &measurements)
     Specialization for Cal3_S2 as it doesn't need to be undistorted.
     
    template<class CAMERA >
    CAMERA::MeasurementVector gtsam::undistortMeasurements (const CameraSet< CAMERA > &cameras, const typename CAMERA::MeasurementVector &measurements)
     Remove distortion for measurements so as if the measurements came from a pinhole camera.
     
    \n-template<class CAMERA = PinholeCamera<Cal3_S2>>
    PinholeCamera< Cal3_S2 >::MeasurementVector gtsam::undistortMeasurements (const CameraSet< PinholeCamera< Cal3_S2 > > &cameras, const PinholeCamera< Cal3_S2 >::MeasurementVector &measurements)
     Specialize for Cal3_S2 to do nothing.
     
    \n-template<class CAMERA = SphericalCamera>
    SphericalCamera::MeasurementVector gtsam::undistortMeasurements (const CameraSet< SphericalCamera > &cameras, const SphericalCamera::MeasurementVector &measurements)
     Specialize for SphericalCamera to do nothing.
     
    template<class CALIBRATION >
    Point3Vector gtsam::calibrateMeasurementsShared (const CALIBRATION &cal, const Point2Vector &measurements)
     Convert pixel measurements in image to homogeneous measurements in the image plane using shared camera intrinsics.
     
    template<class CAMERA >
    Point3Vector gtsam::calibrateMeasurements (const CameraSet< CAMERA > &cameras, const typename CAMERA::MeasurementVector &measurements)
     Convert pixel measurements in image to homogeneous measurements in the image plane using camera intrinsics of each measurement.
     
    \n-template<class CAMERA = SphericalCamera>
    Point3Vector gtsam::calibrateMeasurements (const CameraSet< SphericalCamera > &cameras, const SphericalCamera::MeasurementVector &measurements)
     Specialize for SphericalCamera to do nothing.
     
    template<class CALIBRATION >
    Point3 gtsam::triangulatePoint3 (const std::vector< Pose3 > &poses, boost::shared_ptr< CALIBRATION > sharedCal, const Point2Vector &measurements, double rank_tol=1e-9, bool optimize=false, const SharedNoiseModel &model=nullptr, const bool useLOST=false)
     Function to triangulate 3D landmark point from an arbitrary number of poses (at least 2) using the DLT.
     
    template<class CAMERA >
    Point3 gtsam::triangulatePoint3 (const CameraSet< CAMERA > &cameras, const typename CAMERA::MeasurementVector &measurements, double rank_tol=1e-9, bool optimize=false, const SharedNoiseModel &model=nullptr, const bool useLOST=false)
     Function to triangulate 3D landmark point from an arbitrary number of poses (at least 2) using the DLT.
     
    \n-template<class CALIBRATION >
    Point3 gtsam::triangulatePoint3 (const CameraSet< PinholeCamera< CALIBRATION > > &cameras, const Point2Vector &measurements, double rank_tol=1e-9, bool optimize=false, const SharedNoiseModel &model=nullptr, const bool useLOST=false)
     Pinhole-specific version.
     
    \n-template<class CAMERA >
    TriangulationResult gtsam::triangulateSafe (const CameraSet< CAMERA > &cameras, const typename CAMERA::MeasurementVector &measured, const TriangulationParameters &params)
     triangulateSafe: extensive checking of the outcome
     
    \n+std::ostream & gtsam::operator<< (std::ostream &os, const Cal3Unified &cal)
     
    \n

    Detailed Description

    \n-

    Functions for triangulation.

    \n-
    Date
    July 31, 2013
    \n-
    Author
    Chris Beall
    \n-
    \n-Akshay Krishnan
    \n-
    Date
    July 31, 2013
    \n-
    Author
    Chris Beall
    \n-
    \n-Luca Carlone
    \n+
    Date
    Mar 8, 2014
    \n+
    Author
    Jing Dong
    \n
    \n-Akshay Krishnan
    \n+Varun Agrawal
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,295 +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-triangulation.h File Reference\n-Functions for triangulation. _\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_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bU_\bn_\bd_\be_\br_\bc_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n-\u00a0 Exception thrown by triangulateDLT when SVD returns rank < 3. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n-\u00a0 Exception thrown by triangulateDLT when landmark is behind one or more\n- of the cameras. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\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-\u00a0\n- class \u00a0 _\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-\u00a0 _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt is an optional point, along with the reasons why\n- it is invalid. _\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+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-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCa\bam\bme\ber\bra\baS\bSe\bet\btC\bCa\bal\bl3\b3B\bBu\bun\bnd\bdl\ble\ber\br = _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br > >\n-\u00a0\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCa\bam\bme\ber\bra\baS\bSe\bet\btC\bCa\bal\bl3\b3_\b_S\bS2\b2 = _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bC_\ba_\bl_\b3_\b__\bS_\b2 > >\n-\u00a0\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCa\bam\bme\ber\bra\baS\bSe\bet\btC\bCa\bal\bl3\b3D\bDS\bS2\b2 = _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bC_\ba_\bl_\b3_\bD_\bS_\b2 > >\n-\u00a0\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCa\bam\bme\ber\bra\baS\bSe\bet\btC\bCa\bal\bl3\b3F\bFi\bis\bsh\bhe\bey\bye\be = _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be > >\n-\u00a0\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCa\bam\bme\ber\bra\baS\bSe\bet\btC\bCa\bal\bl3\b3U\bUn\bni\bif\bfi\bie\bed\bd = _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd > >\n-\u00a0\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCa\bam\bme\ber\bra\baS\bSe\bet\btS\bSp\bph\bhe\ber\bri\bic\bca\bal\bl = _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba >\n-\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- Vector4\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bH_\bo_\bm_\bo_\bg_\be_\bn_\be_\bo_\bu_\bs_\bD_\bL_\bT (const\n- std::vector< Matrix34, Eigen::\n- aligned_allocator< Matrix34 > >\n- &projection_matrices, const\n- Point2Vector &measurements, double\n- rank_tol=1e-9)\n-\u00a0 DLT triangulation: See Hartley and\n- Zisserman, 2nd Ed., page 312.\n-\u00a0\n- Vector4\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bH_\bo_\bm_\bo_\bg_\be_\bn_\be_\bo_\bu_\bs_\bD_\bL_\bT (const\n- std::vector< Matrix34, Eigen::\n- aligned_allocator< Matrix34 > >\n- &projection_matrices, const std::\n- vector< _\bU_\bn_\bi_\bt_\b3 > &measurements, double\n- rank_tol=1e-9)\n- Same math as Hartley and Zisserman, 2nd\n- Ed., page 312, but with unit-norm\n-\u00a0 bearing vectors (contrarily to pinhole\n- projection, the z entry is not assumed\n- to be 1 as in Hartley and Zisserman)\n-\u00a0\n- _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bD_\bL_\bT (const std::\n- vector< Matrix34, Eigen::\n- aligned_allocator< Matrix34 > >\n- &projection_matrices, const\n- Point2Vector &measurements, double\n- rank_tol=1e-9)\n-\u00a0 DLT triangulation: See Hartley and\n- Zisserman, 2nd Ed., page 312.\n-\u00a0\n- _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\btr\bri\bia\ban\bng\bgu\bul\bla\bat\bte\beD\bDL\bLT\bT (const std::\n- vector< Matrix34, Eigen::\n- aligned_allocator< Matrix34 > >\n- &projection_matrices, const std::\n- vector< _\bU_\bn_\bi_\bt_\b3 > &measurements, double\n- rank_tol=1e-9)\n- overload of previous function to work\n-\u00a0 with _\bU_\bn_\bi_\bt_\b3 (projected to canonical\n- camera)\n-\u00a0\n- _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bL_\bO_\bS_\bT (const std::\n- vector< _\bP_\bo_\bs_\be_\b3 > &poses, const\n- Point3Vector &calibratedMeasurements,\n- const SharedIsotropic\n- &measurementNoise)\n- Triangulation using the LOST (Linear\n- Optimal Sine Triangulation) algorithm\n-\u00a0 proposed in _\bh_\bt_\bt_\bp_\bs_\b:_\b/_\b/_\ba_\br_\bx_\bi_\bv_\b._\bo_\br_\bg_\b/_\bp_\bd_\bf_\b/\n- _\b2_\b2_\b0_\b5_\b._\b1_\b2_\b1_\b9_\b7_\b._\bp_\bd_\bf by Sebastien Henry and\n- John Christian.\n-\u00a0\n-template\n-std::pair< _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh, _\bV_\ba_\bl_\bu_\be_\bs _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bG_\br_\ba_\bp_\bh (const std::\n- >\u00a0 vector< _\bP_\bo_\bs_\be_\b3 > &poses, boost::\n- shared_ptr< CALIBRATION > sharedCal,\n- const Point2Vector &measurements, _\bK_\be_\by\n- landmarkKey, const _\bP_\bo_\bi_\bn_\bt_\b3\n- &initialEstimate, const\n- _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model=_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:\n- _\bU_\bn_\bi_\bt_\b:_\b:_\bC_\br_\be_\ba_\bt_\be(2))\n-\u00a0 Create a factor graph with projection\n- factors from poses and one calibration.\n-\u00a0\n-template\n-std::pair< _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh, _\bV_\ba_\bl_\bu_\be_\bs _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bG_\br_\ba_\bp_\bh (const\n- >\u00a0 _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< CAMERA > &cameras, const\n- typename CAMERA::MeasurementVector\n- &measurements, _\bK_\be_\by landmarkKey, const\n- _\bP_\bo_\bi_\bn_\bt_\b3 &initialEstimate, const\n- _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model=nullptr)\n- Create a factor graph with projection\n-\u00a0 factors from pinhole cameras (each\n- camera has a pose and calibration)\n-\u00a0\n- _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be (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- _\bV_\ba_\bl_\bu_\be_\bs &values, _\bK_\be_\by landmarkKey)\n-\u00a0 Optimize for triangulation.\n-\u00a0\n-template\n- _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br (const\n- std::vector< _\bP_\bo_\bs_\be_\b3 > &poses, boost::\n- shared_ptr< CALIBRATION > sharedCal,\n- const Point2Vector &measurements, const\n- _\bP_\bo_\bi_\bn_\bt_\b3 &initialEstimate, const\n- _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model=nullptr)\n- Given an initial estimate , refine a\n-\u00a0 point using measurements in several\n- cameras.\n-\u00a0\n-template\n- _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br (const\n- _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< CAMERA > &cameras, const\n- typename CAMERA::MeasurementVector\n- &measurements, const _\bP_\bo_\bi_\bn_\bt_\b3\n- &initialEstimate, const\n- _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model=nullptr)\n- Given an initial estimate , refine a\n-\u00a0 point using measurements in several\n- cameras.\n-\u00a0\n-template\n- std::vector< Matrix34, Eigen:: g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bro\boj\bje\bec\bct\bti\bio\bon\bnM\bMa\bat\btr\bri\bic\bce\bes\bsF\bFr\bro\bom\bmC\bCa\bam\bme\ber\bra\bas\bs\n- aligned_allocator< Matrix34 > >\u00a0 (const _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< CAMERA > &cameras)\n-\u00a0\n-template\n- std::vector< Matrix34, Eigen:: g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bro\boj\bje\bec\bct\bti\bio\bon\bnM\bMa\bat\btr\bri\bic\bce\bes\bsF\bFr\bro\bom\bmP\bPo\bos\bse\bes\bs\n- aligned_allocator< Matrix34 > >\u00a0 (const std::vector< _\bP_\bo_\bs_\be_\b3 > &poses,\n- boost::shared_ptr< CALIBRATION >\n- sharedCal)\n-\u00a0\n-template\n- _\bC_\ba_\bl_\b3_\b__\bS_\b2\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn (const\n- CALIBRATION &cal)\n- Create a pinhole calibration from a\n-\u00a0 different _\bC_\ba_\bl_\b3 object, removing\n- distortion.\n-\u00a0\n-template\n- MEASUREMENT\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:u\bun\bnd\bdi\bis\bst\bto\bor\brt\btM\bMe\bea\bas\bsu\bur\bre\bem\bme\ben\bnt\btI\bIn\bnt\bte\ber\brn\bna\bal\bl\n- (const CALIBRATION &cal, const\n- MEASUREMENT &measurement, boost::\n- optional< _\bC_\ba_\bl_\b3_\b__\bS_\b2 > pinholeCal=boost::\n- none)\n- Internal undistortMeasurement to be\n-\u00a0 used by undistortMeasurement and\n- undistortMeasurements.\n-\u00a0\n-template\n- Point2Vector\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bu_\bn_\bd_\bi_\bs_\bt_\bo_\br_\bt_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs (const\n- CALIBRATION &cal, const Point2Vector\n- &measurements)\n- Remove distortion for measurements so\n-\u00a0 as if the measurements came from a\n- pinhole camera.\n-\u00a0\n- template<>\n- Point2Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:u\bun\bnd\bdi\bis\bst\bto\bor\brt\btM\bMe\bea\bas\bsu\bur\bre\bem\bme\ben\bnt\bts\bs (const\n- _\bC_\ba_\bl_\b3_\b__\bS_\b2 &cal, const Point2Vector\n- &measurements)\n-\u00a0 Specialization for _\bC_\ba_\bl_\b3_\b__\bS_\b2 as it\n- doesn't need to be undistorted.\n-\u00a0\n-template\n- CAMERA::MeasurementVector\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bu_\bn_\bd_\bi_\bs_\bt_\bo_\br_\bt_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs (const\n- _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< CAMERA > &cameras, const\n- typename CAMERA::MeasurementVector\n- &measurements)\n- Remove distortion for measurements so\n-\u00a0 as if the measurements came from a\n- pinhole camera.\n-\u00a0\n-template>\n- _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bC_\ba_\bl_\b3_\b__\bS_\b2 >:: g\bgt\bts\bsa\bam\bm:\b::\b:u\bun\bnd\bdi\bis\bst\bto\bor\brt\btM\bMe\bea\bas\bsu\bur\bre\bem\bme\ben\bnt\bts\bs (const\n- MeasurementVector\u00a0 _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bC_\ba_\bl_\b3_\b__\bS_\b2 > >\n- &cameras, const _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bC_\ba_\bl_\b3_\b__\bS_\b2\n- >::MeasurementVector &measurements)\n-\u00a0 Specialize for _\bC_\ba_\bl_\b3_\b__\bS_\b2 to do nothing.\n-\u00a0\n-template\n- SphericalCamera::MeasurementVector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:u\bun\bnd\bdi\bis\bst\bto\bor\brt\btM\bMe\bea\bas\bsu\bur\bre\bem\bme\ben\bnt\bts\bs (const\n- _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba > &cameras,\n- const SphericalCamera::\n- MeasurementVector &measurements)\n-\u00a0 Specialize for _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba to do\n- nothing.\n-\u00a0\n-template\n- Point3Vector\u00a0 _\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- (const CALIBRATION &cal, const\n- Point2Vector &measurements)\n- Convert pixel measurements in image to\n-\u00a0 homogeneous measurements in the image\n- plane using shared camera intrinsics.\n-\u00a0\n-template\n- Point3Vector\u00a0 _\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 (const\n- _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< CAMERA > &cameras, const\n- typename CAMERA::MeasurementVector\n- &measurements)\n- Convert pixel measurements in image to\n-\u00a0 homogeneous measurements in the image\n- plane using camera intrinsics of each\n- measurement.\n-\u00a0\n-template\n- Point3Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bca\bal\bli\bib\bbr\bra\bat\bte\beM\bMe\bea\bas\bsu\bur\bre\bem\bme\ben\bnt\bts\bs (const\n- _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba > &cameras,\n- const SphericalCamera::\n- MeasurementVector &measurements)\n-\u00a0 Specialize for _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba to do\n- nothing.\n-\u00a0\n-template\n- _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bP_\bo_\bi_\bn_\bt_\b3 (const std::\n- vector< _\bP_\bo_\bs_\be_\b3 > &poses, boost::\n- shared_ptr< CALIBRATION > sharedCal,\n- const Point2Vector &measurements,\n- double rank_tol=1e-9, bool\n- _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be=false, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n- &model=nullptr, const bool\n- useLOST=false)\n- Function to triangulate 3D landmark\n-\u00a0 point from an arbitrary number of poses\n- (at least 2) using the DLT.\n-\u00a0\n-template\n- _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bP_\bo_\bi_\bn_\bt_\b3 (const\n- _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< CAMERA > &cameras, const\n- typename CAMERA::MeasurementVector\n- &measurements, double rank_tol=1e-9,\n- bool _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be=false, const\n- _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model=nullptr, const\n- bool useLOST=false)\n- Function to triangulate 3D landmark\n-\u00a0 point from an arbitrary number of poses\n- (at least 2) using the DLT.\n-\u00a0\n-template\n- _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\btr\bri\bia\ban\bng\bgu\bul\bla\bat\bte\beP\bPo\boi\bin\bnt\bt3\b3 (const\n- _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< CALIBRATION >\n- > &cameras, const Point2Vector\n- &measurements, double rank_tol=1e-9,\n- bool _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be=false, const\n- _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model=nullptr, const\n- bool useLOST=false)\n-\u00a0 Pinhole-specific version.\n-\u00a0\n-template\n- _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\btr\bri\bia\ban\bng\bgu\bul\bla\bat\bte\beS\bSa\baf\bfe\be (const\n- _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt< CAMERA > &cameras, const\n- typename CAMERA::MeasurementVector\n- &measured, const\n- _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶ms)\n-\u00a0 triangulateSafe: extensive checking of\n- the outcome\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-Functions for triangulation.\n- Date\n- July 31, 2013\n- Author\n- Chris Beall\n- Akshay Krishnan\n Date\n- July 31, 2013\n+ Mar 8, 2014\n Author\n- Chris Beall\n- Luca Carlone\n- Akshay Krishnan\n+ Jing Dong\n+ Varun Agrawal\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\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/a00464_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00464_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/SOn.h Source File\n \n \n \n \n \n \n \n@@ -98,178 +98,400 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    OrientedPlane3.h
    \n+
    SOn.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-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 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#pragma once
    \n
    20
    \n-
    21#pragma once
    \n-
    22
    \n-
    23#include <gtsam/geometry/Unit3.h>
    \n-\n-
    25#include <string>
    \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-
    27namespace gtsam {
    \n+
    27#include <boost/serialization/nvp.hpp>
    \n
    28
    \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-
    45
    \n-
    48
    \n-
    \n-\n-
    51 n_(), d_(0.0) {
    \n-
    52 }
    \n-
    \n-
    53
    \n-
    \n-
    55 OrientedPlane3(const Unit3& n, double d) :
    \n-
    56 n_(n), d_(d) {
    \n-
    57 }
    \n-
    \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+
    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 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+\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 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+
    73 public:
    \n+
    76
    \n+
    78 template <int N_ = N, typename = IsFixed<N_>>
    \n+
    79 SO() : matrix_(MatrixNN::Identity()) {}
    \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+
    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+
    90 template <typename Derived>
    \n+
    91 explicit SO(const Eigen::MatrixBase<Derived>& R) : matrix_(R.eval()) {}
    \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+
    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-
    \n-
    110 inline size_t dim() const {
    \n-
    111 return 3;
    \n-
    112 }
    \n-
    \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-
    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-
    \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+
    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-
    147
    \n-
    148} // namespace gtsam
    \n
    149
    \n-
    3D Pose
    \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+
    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+
    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+
    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/*
    \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+
    make_shared trampoline function to ensure proper alignment
    \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+
    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
    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::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-
    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+
    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-
    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+
    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": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,201 +1,507 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-OrientedPlane3.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 * Atlanta, Georgia 30332-0415\n-4 * All Rights Reserved\n-5 * 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 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#pragma once\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+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-27namespace _\bg_\bt_\bs_\ba_\bm {\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-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-_\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+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+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-_\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+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-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+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\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+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+90 template \n+_\b9_\b1 explicit _\bS_\bO(const Eigen::MatrixBase& R) : _\bm_\ba_\bt_\br_\bi_\bx_\b_(R.eval()) {}\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+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-_\b1_\b1_\b0 inline size_t _\bd_\bi_\bm() const {\n-111 return 3;\n-112 }\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-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-_\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+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-_\bP_\bo_\bs_\be_\b3_\b._\bh\n-3D Pose\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+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+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+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/*\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_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd_\b._\bh\n+make_shared trampoline function to ensure proper alignment\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+_\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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_\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:_\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:_\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:_\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:_\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 * _\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+ * _\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/a00467.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00467.html", "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/geometry/Cal3Unified.h File Reference\n \n \n \n \n \n \n \n@@ -96,52 +96,49 @@\n
    \n
    \n \n
    \n \n-
    PinholePose.h File Reference
    \n+
    Cal3Unified.h File Reference
    \n
    \n
    \n \n-

    Pinhole camera with known calibration. \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 \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...
    class  gtsam::Cal3Unified
     Calibration of a omni-directional camera with mirror + lens radial distortion. More...
     
    class  gtsam::PinholePose< CALIBRATION >
     A pinhole camera class that has a Pose3 and a fixed Calibration. More...
    struct  gtsam::traits< Cal3Unified >
     
    struct  gtsam::traits< PinholePose< CALIBRATION > >
     
    struct  gtsam::traits< const PinholePose< CALIBRATION > >
    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-

    Pinhole camera with known calibration.

    \n-
    Author
    Yong-Dian Jian
    \n+

    Unified Calibration Model, see Mei07icra for details.

    \n+
    Date
    Mar 8, 2014
    \n+
    Author
    Jing Dong
    \n
    \n-Frank Dellaert
    \n-
    Date
    Feb 20, 2015
    \n+Varun Agrawal
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,37 +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-PinholePose.h File Reference\n-Pinhole camera with known calibration. _\bM_\bo_\br_\be_\b._\b._\b.\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:_\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+ 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- 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+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 _\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:_\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 *\b**\b**\b**\b**\b* D\bDe\bet\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- Author\n- Yong-Dian Jian\n- Frank Dellaert\n+Unified Calibration Model, see Mei07icra for details.\n Date\n- Feb 20, 2015\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- * _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b._\bh\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/a00467.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00467.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var a00467 = [\n- [\"gtsam::traits< PinholePose< CALIBRATION > >\", \"a03128.html\", null],\n- [\"gtsam::traits< const PinholePose< CALIBRATION > >\", \"a03132.html\", 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/a00467_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00467_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/PinholePose.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Unified.h Source File\n \n \n \n \n \n \n \n@@ -98,503 +98,127 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    PinholePose.h
    \n+
    Cal3Unified.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 <boost/make_shared.hpp>
    \n+
    24#pragma once
    \n
    25
    \n-
    26namespace gtsam {
    \n+
    26#include <gtsam/geometry/Cal3DS2_Base.h>
    \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-
    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+
    28namespace gtsam {
    \n+
    29
    \n+
    \n+
    45class GTSAM_EXPORT Cal3Unified : public Cal3DS2_Base {
    \n+
    46 using This = Cal3Unified;
    \n+
    47 using Base = Cal3DS2_Base;
    \n+
    48
    \n+
    49 private:
    \n+
    50 double xi_ = 0.0f;
    \n+
    51
    \n+
    52 public:
    \n+
    53 enum { dimension = 10 };
    \n+
    54
    \n+
    56 using shared_ptr = boost::shared_ptr<Cal3Unified>;
    \n+
    57
    \n+
    60
    \n+
    62 Cal3Unified() = default;
    \n+
    63
    \n+
    64 Cal3Unified(double fx, double fy, double s, double u0, double v0, double k1,
    \n+
    65 double k2, double p1 = 0.0, double p2 = 0.0, double xi = 0.0)
    \n+
    66 : Base(fx, fy, s, u0, v0, k1, k2, p1, p2), xi_(xi) {}
    \n+
    67
    \n+
    68 ~Cal3Unified() override {}
    \n+
    69
    \n
    73
    \n-
    75 virtual const CALIBRATION& calibration() const = 0;
    \n+
    74 Cal3Unified(const Vector10& v)
    \n+
    75 : Base(v(0), v(1), v(2), v(3), v(4), v(5), v(6), v(7), v(8)), xi_(v(9)) {}
    \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+
    82 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,
    \n+
    83 const Cal3Unified& cal);
    \n+
    84
    \n+
    86 void print(const std::string& s = "") const override;
    \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+
    89 bool equals(const Cal3Unified& K, double tol = 10e-9) const;
    \n+
    90
    \n+
    94
    \n+
    96 inline double xi() const { return xi_; }
    \n+
    97
    \n+
    99 Vector10 vector() const;
    \n+
    100
    \n+
    108 Point2 uncalibrate(const Point2& p,
    \n+
    109 OptionalJacobian<2, 10> Dcal = boost::none,
    \n+
    110 OptionalJacobian<2, 2> Dp = boost::none) const;
    \n+
    111
    \n+
    113 Point2 calibrate(const Point2& p, OptionalJacobian<2, 10> Dcal = boost::none,
    \n+
    114 OptionalJacobian<2, 2> Dp = boost::none) const;
    \n+
    115
    \n+
    117 Point2 spaceToNPlane(const Point2& p) const;
    \n+
    118
    \n+
    120 Point2 nPlaneToSpace(const Point2& p) const;
    \n+
    121
    \n+
    125
    \n+
    127 Cal3Unified retract(const Vector& d) const;
    \n+
    128
    \n+
    130 Vector localCoordinates(const Cal3Unified& T2) const;
    \n+
    131
    \n+
    133 size_t dim() const override { return Dim(); }
    \n+
    134
    \n+
    136 inline static size_t Dim() { return dimension; }
    \n
    137
    \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+
    139
    \n+
    140 private:
    \n+
    142 friend class boost::serialization::access;
    \n+
    143 template <class Archive>
    \n+
    144 void serialize(Archive& ar, const unsigned int /*version*/) {
    \n+
    145 ar& boost::serialization::make_nvp(
    \n+
    146 "Cal3Unified", boost::serialization::base_object<Cal3DS2_Base>(*this));
    \n+
    147 ar& BOOST_SERIALIZATION_NVP(xi_);
    \n+
    148 }
    \n+
    149};
    \n+
    \n+
    150
    \n+
    151template <>
    \n+
    152struct traits<Cal3Unified> : public internal::Manifold<Cal3Unified> {};
    \n+
    153
    \n+
    154template <>
    \n+
    155struct traits<const Cal3Unified> : public internal::Manifold<Cal3Unified> {};
    \n+
    156}
    \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-
    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+
    Calibration of a camera with radial distortion.
    Definition Cal3DS2_Base.h:42
    \n+
    Calibration of a omni-directional camera with mirror + lens radial distortion.
    Definition Cal3Unified.h:45
    \n+
    size_t dim() const override
    Return dimensions of calibration manifold object.
    Definition Cal3Unified.h:133
    \n+
    Cal3Unified()=default
    Default Constructor with only unit focal length.
    \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", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,662 +1,151 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-PinholePose.h\n+Cal3Unified.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+24#pragma once\n 25\n-26namespace _\bg_\bt_\bs_\ba_\bm {\n+26#include \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-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+28namespace _\bg_\bt_\bs_\ba_\bm {\n+29\n+_\b4_\b5class GTSAM_EXPORT _\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd : public _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be {\n+46 using _\bT_\bh_\bi_\bs = _\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd;\n+47 using _\bB_\ba_\bs_\be = _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be;\n+48\n+49 private:\n+50 double xi_ = 0.0f;\n+51\n+52 public:\n+53 enum { dimension = 10 };\n+54\n+56 using shared_ptr = boost::shared_ptr;\n+57\n+60\n+_\b6_\b2 _\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd() = default;\n+63\n+64 _\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd(double fx, double fy, double s, double u0, double v0, double k1,\n+65 double k2, double p1 = 0.0, double p2 = 0.0, double xi = 0.0)\n+66 : _\bB_\ba_\bs_\be(fx, fy, s, u0, v0, k1, k2, p1, p2), xi_(xi) {}\n+67\n+68 _\b~_\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd() override {}\n+69\n 73\n-_\b7_\b5 virtual const CALIBRATION& _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn() const = 0;\n+74 Cal3Unified(const Vector10& v)\n+75 : Base(v(0), v(1), v(2), v(3), v(4), v(5), v(6), v(7), v(8)), xi_(v(9)) {}\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+82 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,\n+83 const Cal3Unified& cal);\n+84\n+86 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const override;\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+89 bool equals(const Cal3Unified& K, double tol = 10e-9) const;\n+90\n+94\n+_\b9_\b6 inline double _\bx_\bi() const { return xi_; }\n+97\n+99 Vector10 vector() const;\n+100\n+108 _\bP_\bo_\bi_\bn_\bt_\b2 uncalibrate(const _\bP_\bo_\bi_\bn_\bt_\b2& p,\n+109 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b1_\b0_\b> Dcal = boost::none,\n+110 _\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+111\n+113 _\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 _\b1_\b0_\b> Dcal = 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+114 _\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+115\n+117 _\bP_\bo_\bi_\bn_\bt_\b2 spaceToNPlane(const _\bP_\bo_\bi_\bn_\bt_\b2& p) const;\n+118\n+120 _\bP_\bo_\bi_\bn_\bt_\b2 nPlaneToSpace(const _\bP_\bo_\bi_\bn_\bt_\b2& p) const;\n+121\n+125\n+127 _\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd retract(const Vector& d) const;\n+128\n+130 Vector localCoordinates(const _\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd& T2) const;\n+131\n+_\b1_\b3_\b3 size_t _\bd_\bi_\bm() const override { return Dim(); }\n+134\n+_\b1_\b3_\b6 inline static size_t _\bD_\bi_\bm() { return dimension; }\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-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+139\n+140 private:\n+_\b1_\b4_\b2 friend class boost::serialization::access;\n+143 template \n+144 void serialize(Archive& ar, const unsigned int /*version*/) {\n+145 ar& boost::serialization::make_nvp(\n+146 \"Cal3Unified\", boost::serialization::base_object(*this));\n+147 ar& BOOST_SERIALIZATION_NVP(xi_);\n+148 }\n+149};\n+150\n+151template <>\n+_\b1_\b5_\b2struct _\bt_\br_\ba_\bi_\bt_\bs<_\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {};\n+153\n+154template <>\n+_\b1_\b5_\b5struct _\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+156}\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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+_\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_\b:_\b:_\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd\n+Calibration of a omni-directional camera with mirror + lens radial distortion.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Unified.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd_\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 Cal3Unified.h:133\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd_\b:_\b:_\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd\n+Cal3Unified()=default\n+Default Constructor with only unit focal length.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd_\b:_\b:_\bx_\bi\n+double xi() const\n+mirror parameter\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Unified.h:96\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd_\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+Return dimensions of calibration manifold object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Unified.h:136\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+ * _\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/a00473.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00473.html", "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/Point2.h File Reference\n \n \n \n \n \n \n \n@@ -94,36 +94,92 @@\n \n \n \n \n \n
    \n \n-
    SimpleCamera.cpp File Reference
    \n+Classes |\n+Namespaces |\n+Typedefs |\n+Functions
    \n+
    Point2.h File Reference
    \n \n
    \n \n-

    A simple camera class with a Cal3_S2 calibration. \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-

    A simple camera class with a Cal3_S2 calibration.

    \n-
    Date
    June 30, 2012
    \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-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 | _\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-A simple camera class with a Cal3_S2 calibration.\n- Date\n- June 30, 2012\n+2D Point\n Author\n Frank Dellaert\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+ * _\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/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/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/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/HybridGaussianFactorGraph.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@@ -95,59 +95,48 @@\n \n \n \n \n
    \n \n-
    HybridGaussianFactorGraph.cpp File Reference
    \n+
    HybridBayesNet.cpp File Reference
    \n
    \n
    \n \n-

    Hybrid factor graph that uses type erasure. \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-Typedefs

    \n-using gtsam::OrphanWrapper = BayesTreeOrphanWrapper< HybridBayesTree::Clique >
     
    \n \n-\n-\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.
     
    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-

    Hybrid factor graph that uses type erasure.

    \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
    Mar 11, 2022
    \n+
    Date
    January 2022
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,43 +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-HybridGaussianFactorGraph.cpp File Reference\n-Hybrid factor graph that uses type erasure. _\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+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-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+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-Hybrid factor graph that uses type erasure.\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- Mar 11, 2022\n+ January 2022\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_\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/a00485.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00485.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a00485 = [\n- [\"EliminateHybrid\", \"a00485.html#gacbc9f97e48e6aa3abb5f789af8c3bfe5\", null],\n- [\"HybridOrdering\", \"a00485.html#a584e4e05d52a617c1d313e1f53c8ce58\", null]\n+ [\"prunerFunc\", \"a00485.html#ae6415c63d70d1b582a0162652b16b868\", null]\n ];\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/HybridJunctionTree.h 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@@ -94,41 +94,32 @@\n \n \n \n \n \n
    \n \n-
    HybridJunctionTree.h File Reference
    \n+
    HybridEliminationTree.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::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
    \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-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+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 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_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\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._\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.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/HybridBayesNet.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,49 +94,53 @@\n \n \n \n \n \n
    \n \n-
    HybridBayesNet.cpp File Reference
    \n+Classes |\n+Namespaces
    \n+
    HybridGaussianISAM.h File Reference
    \n \n
    \n \n-

    A Bayes net of Gaussian Conditionals indexed by discrete keys. \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

    \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+
    Date
    March 31, 2022
    \n
    Author
    Fan Jiang
    \n
    \n-Varun Agrawal
    \n+Frank Dellaert \n+
    \n+Varun Agrawal
    \n+
    Date
    March 31, 2022
    \n+
    Author
    Fan Jiang
    \n
    \n-Shangjie Xue
    \n+Frank Dellaert \n
    \n-Frank Dellaert
    \n-
    Date
    January 2022
    \n+Richard Roberts \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,32 +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-HybridBayesNet.cpp File Reference\n-A Bayes net of Gaussian Conditionals indexed by 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+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-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+ Date\n+ March 31, 2022\n Author\n Fan Jiang\n- Varun Agrawal\n- Shangjie Xue\n Frank Dellaert\n+ Varun Agrawal\n Date\n- January 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_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\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/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,3 @@\n var a00491 = [\n- [\"prunerFunc\", \"a00491.html#ae6415c63d70d1b582a0162652b16b868\", null]\n+ [\"gtsam::traits< HybridGaussianISAM >\", \"a03472.html\", 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/GaussianMixture.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,54 +94,48 @@\n \n \n \n \n \n
    \n \n-
    HybridBayesTree.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    GaussianMixture.cpp File Reference
    \n \n
    \n \n-

    Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree. \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-\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+Functions

    \n+std::set< DiscreteKeygtsam::DiscreteKeysAsSet (const DiscreteKeys &discreteKeys)
     Return the DiscreteKey vector as a set.
     
    \n

    Detailed Description

    \n-

    Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.

    \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+
    \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,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\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+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-Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.\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+ Frank Dellaert\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_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\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/a00494.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00494.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,3 @@\n var a00494 = [\n- [\"gtsam::HybridBayesTree\", \"a03424.html\", \"a03424\"],\n- [\"gtsam::traits< HybridBayesTree >\", \"a03428.html\", null],\n- [\"gtsam::BayesTreeOrphanWrapper< HybridBayesTreeClique >\", \"a03432.html\", \"a03432\"]\n+ [\"DiscreteKeysAsSet\", \"a00494.html#ad92a1966f54e02a7c2ce061c1228c7b3\", null]\n ];\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/HybridValues.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,42 +95,53 @@\n \n \n \n \n
    \n \n-
    HybridValues.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 \n

    \n Classes

    class  gtsam::HybridValues
     HybridValues represents a collection of DiscreteValues and VectorValues. More...
     
    struct  gtsam::traits< HybridValues >
    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
    Jul 28, 2022
    \n-
    Author
    Shangjie Xue
    \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,28 +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-HybridValues.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_\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+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- Jul 28, 2022\n+Factor graph with utilities for hybrid factors.\n Author\n- Shangjie Xue\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_\bV_\ba_\bl_\bu_\be_\bs_\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/a00497.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00497.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a00497 = [\n- [\"gtsam::HybridValues\", \"a03504.html\", \"a03504\"],\n- [\"gtsam::traits< HybridValues >\", \"a03508.html\", null]\n+ [\"gtsam::HybridFactorGraph\", \"a03456.html\", \"a03456\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00497_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00497_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/HybridFactorGraph.h Source File\n \n \n \n \n \n \n \n@@ -98,270 +98,92 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    HybridValues.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-\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+
    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-
    \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-
    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-
    141
    \n-
    \n-\n-
    145 discrete_.insert(values);
    \n-
    146 return *this;
    \n-
    147 }
    \n-
    \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-
    194
    \n-
    \n-\n-
    200 continuous_.update(values.continuous());
    \n-
    201 discrete_.update(values.discrete());
    \n-
    202 return *this;
    \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-
    \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-
    specialized key for discrete variables
    \n-
    An assignment from labels to a discrete value index (size_t)
    \n-\n-
    Factor Graph Values.
    \n-
    A non-templated config holding any types of Manifold-group elements.
    \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+
    48 public:
    \n+
    51
    \n+
    53 HybridFactorGraph() = default;
    \n+
    54
    \n+
    60 template <class DERIVEDFACTOR>
    \n+\n+
    62
    \n+
    66
    \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};
    \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
    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-
    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-
    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-
    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+\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 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,392 +1,116 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-HybridValues.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/_\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+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-_\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-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-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-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-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-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-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-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh\n-specialized key for discrete variables\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-_\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+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+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+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+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+_\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:_\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:_\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:_\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:_\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:_\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:_\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_\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/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/HybridJunctionTree.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,32 +94,46 @@\n \n \n \n \n \n
    \n \n-
    HybridJunctionTree.cpp File Reference
    \n+
    HybridNonlinearFactorGraph.h File Reference
    \n
    \n
    \n+\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

    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,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-HybridJunctionTree.cpp File Reference\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 *\b**\b**\b**\b**\b* D\bDe\bet\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._\bh\n * Generated on Tue Jan 9 2024 05:51: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/HybridNonlinearISAM.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@@ -95,40 +95,55 @@\n \n \n \n \n
    \n \n-
    HybridNonlinearISAM.h File Reference
    \n+Namespaces |\n+Functions
    \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 Classes

    class  gtsam::HybridNonlinearISAM
     Wrapper class to manage ISAM in a nonlinear context. More...
    struct  gtsam::EliminationTraits< HybridGaussianFactorGraph >
     
    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+\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

    Detailed Description

    \n-
    Date
    Sep 12, 2022
    \n-
    Author
    Varun Agrawal
    \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,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-HybridNonlinearISAM.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_\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+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+ 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+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+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\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+Linearized Hybrid factor graph that uses type erasure.\n Author\n- Varun Agrawal\n+ Fan Jiang, Varun Agrawal, Frank Dellaert\n+ Date\n+ Mar 11, 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_\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/a00503.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00503.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,5 @@\n var a00503 = [\n- [\"gtsam::HybridNonlinearISAM\", \"a03496.html\", \"a03496\"]\n+ [\"gtsam::EliminationTraits< HybridGaussianFactorGraph >\", \"a03460.html\", \"a03460\"],\n+ [\"EliminateHybrid\", \"a00503.html#gacbc9f97e48e6aa3abb5f789af8c3bfe5\", null],\n+ [\"HybridOrdering\", \"a00503.html#a584e4e05d52a617c1d313e1f53c8ce58\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00503_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00503_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/HybridGaussianFactorGraph.h Source File\n \n \n \n \n \n \n \n@@ -98,139 +98,192 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    HybridNonlinearISAM.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-\n-\n-
    22
    \n-
    23namespace gtsam {
    \n-
    \n-
    27class GTSAM_EXPORT HybridNonlinearISAM {
    \n-
    28 protected:
    \n-\n+
    19#pragma once
    \n+
    20
    \n+\n+\n+\n+\n+\n+\n+\n+\n+
    29
    \n+
    30namespace gtsam {
    \n
    31
    \n-\n-
    34
    \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-
    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 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+
    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-
    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+
    121
    \n+\n
    124
    \n-
    126 void reorder_relinearize();
    \n-
    127
    \n-
    129};
    \n-
    130
    \n-
    131} // namespace gtsam
    \n-
    \n-
    \n-\n-
    Nonlinear hybrid factor graph that uses type erasure.
    \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+
    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+
    Variable ordering for the elimination algorithm.
    \n+
    Factor Graph Base Class.
    \n+
    Variable elimination algorithms for factor graphs.
    \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-
    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+
    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
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,191 +1,287 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-HybridNonlinearISAM.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/_\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+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-_\b3_\b3 _\bV_\ba_\bl_\bu_\be_\bs _\bl_\bi_\bn_\bP_\bo_\bi_\bn_\bt_\b_;\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-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-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 _\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_\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+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+*/\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-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+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-126 void reorder_relinearize();\n-127\n-129};\n-130\n-131} // namespace gtsam\n-_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM_\b._\bh\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+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+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+_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n+Variable ordering for the elimination algorithm.\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+_\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:_\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:_\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+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_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\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/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/HybridNonlinearISAM.cpp 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@@ -94,32 +94,41 @@\n \n \n \n \n \n
    \n \n-
    HybridNonlinearISAM.cpp 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+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
    Sep 12, 2022
    \n-
    Author
    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,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-HybridNonlinearISAM.cpp File Reference\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 N\bNa\bam\bme\bes\bsp\bpa\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- 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_\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/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/HybridConditional.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,15 +95,15 @@\n \n \n \n \n
    \n \n-
    HybridConditional.cpp File Reference
    \n+
    HybridJunctionTree.cpp File Reference
    \n
    \n
    \n \n \n \n \n@@ -113,13 +113,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,20 +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-HybridConditional.cpp File Reference\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 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._\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/a00512.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00512.html", "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/HybridSmoother.h File Reference\n \n \n \n \n \n \n \n@@ -94,36 +94,44 @@\n \n \n \n \n \n
    \n \n-
    HybridBayesTree.cpp File Reference
    \n+
    HybridSmoother.h File Reference
    \n
    \n
    \n \n-

    Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree. \n+

    An incremental smoother for hybrid factor graphs. \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+Classes

    class  gtsam::HybridSmoother
     
    \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+

    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,22 +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-HybridBayesTree.cpp File Reference\n-Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree. _\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+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 N\bNa\bam\bme\bes\bsp\bpa\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+An incremental smoother for hybrid factor graphs.\n Author\n- Fan Jiang, Varun Agrawal\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_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bc_\bp_\bp\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/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/HybridValues.h File Reference\n \n \n \n \n \n \n \n@@ -94,32 +94,43 @@\n \n \n \n \n \n
    \n \n-
    HybridEliminationTree.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-HybridEliminationTree.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_\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_\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/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/HybridFactorGraph.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,54 +94,40 @@\n \n \n \n \n \n
    \n \n-
    HybridFactorGraph.h File Reference
    \n+Namespaces
    \n+
    GaussianMixtureFactor.cpp File Reference
    \n \n
    \n \n-

    Factor graph with utilities for hybrid factors. \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-

    \n-Classes

    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-

    Factor graph with utilities for hybrid factors.

    \n-
    Author
    Varun Agrawal
    \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
    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,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\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_\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+_\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-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 Gaussian factors 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._\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/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/HybridFactorGraph.cpp 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@@ -94,38 +94,41 @@\n \n \n \n \n \n
    \n \n-
    HybridFactorGraph.cpp File Reference
    \n+
    HybridEliminationTree.h File Reference
    \n
    \n
    \n \n-

    Factor graph with utilities for hybrid factors. \n-More...

    \n+

    Go to the source code of this file.

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

    \n+Classes

    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-

    Factor graph with utilities for hybrid factors.

    \n-
    Author
    Varun Agrawal
    \n-
    \n-Frank Dellaert
    \n-
    Date
    January, 2023
    \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,23 +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-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+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:_\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-Factor graph with utilities for hybrid factors.\n- Author\n- Varun Agrawal\n- Frank Dellaert\n Date\n- January, 2023\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_\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._\bh\n * Generated on Tue Jan 9 2024 05:51: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/HybridBayesNet.h 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@@ -96,50 +96,52 @@\n \n \n \n
    \n \n-
    HybridBayesNet.h File Reference
    \n+
    HybridBayesTree.h 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+\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...
    class  gtsam::HybridBayesTreeClique
     A clique in a HybridBayesTree which is a HybridConditional internally. More...
     
    struct  gtsam::traits< HybridBayesNet >
     traits 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-

    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
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,34 +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-HybridBayesNet.h File Reference\n-A Bayes net of Gaussian Conditionals indexed by discrete keys. _\bM_\bo_\br_\be_\b._\b._\b.\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_\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+ 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-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+ 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-A Bayes net of Gaussian Conditionals indexed by discrete keys.\n+Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.\n+ Date\n+ Mar 11, 2022\n Author\n- Varun Agrawal\n Fan Jiang\n- Frank Dellaert\n- Date\n- December 2021\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._\bh\n * Generated on Tue Jan 9 2024 05:51: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.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00524.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,5 @@\n var a00524 = [\n- [\"gtsam::traits< HybridBayesNet >\", \"a03412.html\", null]\n+ [\"gtsam::HybridBayesTree\", \"a03424.html\", \"a03424\"],\n+ [\"gtsam::traits< HybridBayesTree >\", \"a03428.html\", null],\n+ [\"gtsam::BayesTreeOrphanWrapper< HybridBayesTreeClique >\", \"a03432.html\", \"a03432\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00524_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00524_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/HybridBayesNet.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridBayesTree.h Source File\n \n \n \n \n \n \n \n@@ -98,161 +98,164 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    HybridBayesNet.h
    \n+
    HybridBayesTree.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-
    18#pragma once
    \n-
    19
    \n-\n-\n-\n-\n-\n-\n-
    26
    \n-
    27namespace gtsam {
    \n+
    2
    \n+
    3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
    \n+
    4 * Atlanta, Georgia 30332-0415
    \n+
    5 * All Rights Reserved
    \n+
    6 * Authors: Frank Dellaert, 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-
    \n-
    35class GTSAM_EXPORT HybridBayesNet : public BayesNet<HybridConditional> {
    \n-
    36 public:
    \n-\n-
    38 using This = HybridBayesNet;
    \n-\n-
    40 using shared_ptr = boost::shared_ptr<HybridBayesNet>;
    \n-
    41 using sharedConditional = boost::shared_ptr<ConditionalType>;
    \n-
    42
    \n-
    45
    \n-
    47 HybridBayesNet() = default;
    \n-
    48
    \n-
    52
    \n-
    54 void print(const std::string &s = "", const KeyFormatter &formatter =
    \n-
    55 DefaultKeyFormatter) const override;
    \n-
    56
    \n-
    58 bool equals(const This &fg, double tol = 1e-9) const;
    \n-
    59
    \n-
    63
    \n-
    \n-
    69 void push_back(boost::shared_ptr<HybridConditional> conditional) {
    \n-
    70 factors_.push_back(conditional);
    \n-
    71 }
    \n-
    \n-
    72
    \n-
    81 template <class Conditional>
    \n-
    \n-
    82 void emplace_back(Conditional *conditional) {
    \n-
    83 factors_.push_back(boost::make_shared<HybridConditional>(
    \n-
    84 boost::shared_ptr<Conditional>(conditional)));
    \n-
    85 }
    \n-
    \n-
    86
    \n-
    \n-
    99 void push_back(HybridConditional &&conditional) {
    \n-
    100 factors_.push_back(
    \n-
    101 boost::make_shared<HybridConditional>(std::move(conditional)));
    \n-
    102 }
    \n-
    \n-
    103
    \n-
    111 GaussianBayesNet choose(const DiscreteValues &assignment) const;
    \n-
    112
    \n-
    114 double evaluate(const HybridValues &values) const;
    \n+
    29#include <string>
    \n+
    30
    \n+
    31namespace gtsam {
    \n+
    32
    \n+
    33// Forward declarations
    \n+
    34class HybridConditional;
    \n+
    35class VectorValues;
    \n+
    36
    \n+
    37/* ************************************************************************* */
    \n+
    \n+
    44class GTSAM_EXPORT HybridBayesTreeClique
    \n+
    45 : public BayesTreeCliqueBase<HybridBayesTreeClique,
    \n+
    46 HybridGaussianFactorGraph> {
    \n+
    47 public:
    \n+\n+\n+
    50 Base;
    \n+
    51 typedef boost::shared_ptr<This> shared_ptr;
    \n+
    52 typedef boost::weak_ptr<This> weak_ptr;
    \n+\n+
    54 HybridBayesTreeClique(const boost::shared_ptr<HybridConditional>& conditional)
    \n+
    55 : Base(conditional) {}
    \n+
    57 HybridBayesTreeClique(const HybridBayesTreeClique& clique) : Base(clique) {}
    \n+
    58
    \n+
    59 virtual ~HybridBayesTreeClique() {}
    \n+
    60};
    \n+
    \n+
    61
    \n+
    62/* ************************************************************************* */
    \n+
    \n+
    64class GTSAM_EXPORT HybridBayesTree : public BayesTree<HybridBayesTreeClique> {
    \n+
    65 private:
    \n+\n+
    67
    \n+
    68 public:
    \n+
    69 typedef HybridBayesTree This;
    \n+
    70 typedef boost::shared_ptr<This> shared_ptr;
    \n+
    71
    \n+
    74
    \n+
    75 HybridBayesTree() = default;
    \n+
    76
    \n+
    78 bool equals(const This& other, double tol = 1e-9) const;
    \n+
    79
    \n+
    87 GaussianBayesTree choose(const DiscreteValues& assignment) const;
    \n+
    88
    \n+
    96 HybridValues optimize() const;
    \n+
    97
    \n+
    105 VectorValues optimize(const DiscreteValues& assignment) const;
    \n+
    106
    \n+
    112 void prune(const size_t maxNumberLeaves);
    \n+
    113
    \n
    115
    \n-
    \n-
    117 double operator()(const HybridValues &values) const {
    \n-
    118 return evaluate(values);
    \n-
    119 }
    \n-
    \n-
    120
    \n-
    128 HybridValues optimize() const;
    \n-
    129
    \n-
    137 VectorValues optimize(const DiscreteValues &assignment) const;
    \n-
    138
    \n-
    144 DecisionTreeFactor::shared_ptr discreteConditionals() const;
    \n-
    145
    \n-
    158 HybridValues sample(const HybridValues &given, std::mt19937_64 *rng) const;
    \n-
    159
    \n-
    170 HybridValues sample(std::mt19937_64 *rng) const;
    \n-
    171
    \n-
    178 HybridValues sample(const HybridValues &given) const;
    \n-
    179
    \n-
    185 HybridValues sample() const;
    \n-
    186
    \n-
    188 HybridBayesNet prune(size_t maxNrLeaves);
    \n-
    189
    \n-
    197 AlgebraicDecisionTree<Key> logProbability(
    \n-
    198 const VectorValues &continuousValues) const;
    \n-
    199
    \n-
    200 using BayesNet::logProbability; // expose HybridValues version
    \n-
    201
    \n-\n-
    213 const VectorValues &continuousValues) const;
    \n-
    214
    \n-
    219 HybridGaussianFactorGraph toFactorGraph(
    \n-
    220 const VectorValues &measurements) const;
    \n-
    222
    \n-
    223 private:
    \n-
    229 void updateDiscreteConditionals(const DecisionTreeFactor &prunedDecisionTree);
    \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_BASE_OBJECT_NVP(Base);
    \n-
    236 }
    \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+
    116 private:
    \n+
    118 friend class boost::serialization::access;
    \n+
    119 template <class ARCHIVE>
    \n+
    120 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
    \n+
    121 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
    \n+
    122 }
    \n+
    123};
    \n+
    \n+
    124
    \n+
    126template <>
    \n+
    127struct traits<HybridBayesTree> : public Testable<HybridBayesTree> {};
    \n+
    128
    \n+
    139template <>
    \n+
    \n+\n+
    141 public:
    \n+\n+
    143 typedef HybridConditional Base;
    \n+
    144
    \n+
    145 boost::shared_ptr<CliqueType> clique;
    \n+
    146
    \n+
    \n+
    152 BayesTreeOrphanWrapper(const boost::shared_ptr<CliqueType>& clique)
    \n+
    153 : clique(clique) {
    \n+
    154 // Store parent keys in our base type factor so that eliminating those
    \n+
    155 // parent keys will pull this subtree into the elimination.
    \n+
    156 this->keys_.assign(clique->conditional()->beginParents(),
    \n+
    157 clique->conditional()->endParents());
    \n+
    158 this->discreteKeys_.assign(clique->conditional()->discreteKeys().begin(),
    \n+
    159 clique->conditional()->discreteKeys().end());
    \n+
    160 }
    \n+
    \n+
    161
    \n+
    \n+
    163 void print(
    \n+
    164 const std::string& s = "",
    \n+
    165 const KeyFormatter& formatter = DefaultKeyFormatter) const override {
    \n+
    166 clique->print(s + "stored clique", formatter);
    \n+
    167 }
    \n+
    \n+
    168};
    \n+
    \n+
    169
    \n+
    170} // namespace gtsam
    \n+
    Linearized Hybrid factor graph that uses type erasure.
    \n+
    A Bayes net of Gaussian Conditionals indexed by discrete keys.
    \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-
    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-
    A discrete probabilistic factor.
    Definition DecisionTreeFactor.h:45
    \n
    A map from keys to values.
    Definition DiscreteValues.h:34
    \n-
    A hybrid Bayes net is a collection of HybridConditionals, which can have discrete conditionals,...
    Definition HybridBayesNet.h:35
    \n-
    void push_back(boost::shared_ptr< HybridConditional > conditional)
    Add a hybrid conditional using a shared_ptr.
    Definition HybridBayesNet.h:69
    \n-
    void emplace_back(Conditional *conditional)
    Preferred: add a conditional directly using a pointer.
    Definition HybridBayesNet.h:82
    \n-
    void push_back(HybridConditional &&conditional)
    Add a conditional using a shared_ptr, using implicit conversion to a HybridConditional.
    Definition HybridBayesNet.h:99
    \n-
    HybridBayesNet()=default
    Construct empty Bayes net.
    \n-
    double operator()(const HybridValues &values) const
    Evaluate hybrid probability density for given HybridValues, sugar.
    Definition HybridBayesNet.h:117
    \n+
    A clique in a HybridBayesTree which is a HybridConditional internally.
    Definition HybridBayesTree.h:46
    \n+
    HybridBayesTreeClique(const boost::shared_ptr< HybridConditional > &conditional)
    Copy constructor.
    Definition HybridBayesTree.h:54
    \n+
    A Bayes tree representing a Hybrid density.
    Definition HybridBayesTree.h:64
    \n+
    HybridBayesTree()=default
    Default constructor, creates an empty Bayes tree.
    \n+
    BayesTreeOrphanWrapper(const boost::shared_ptr< CliqueType > &clique)
    Construct a new Bayes Tree Orphan Wrapper object.
    Definition HybridBayesTree.h:152
    \n+
    void print(const std::string &s="", const KeyFormatter &formatter=DefaultKeyFormatter) const override
    print utility
    Definition HybridBayesTree.h:163
    \n
    Hybrid Conditional Density.
    Definition HybridConditional.h:62
    \n-
    Definition HybridGaussianFactorGraph.h:102
    \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-
    Definition Conditional.h:64
    \n-
    GaussianBayesNet is a Bayes net made from linear-Gaussian conditionals.
    Definition GaussianBayesNet.h:36
    \n+
    Bayes tree.
    Definition BayesTree.h:67
    \n+
    Definition BayesTree.h:276
    \n+
    This is the base class for BayesTree cliques.
    Definition BayesTreeCliqueBase.h:50
    \n+
    A Bayes tree representing a Gaussian density.
    Definition GaussianBayesTree.h:52
    \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,203 +1,208 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-HybridBayesNet.h\n+HybridBayesTree.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, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n+6 * Authors: Frank Dellaert, 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-18#pragma once\n-19\n-20#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-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/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n-23#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-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/_\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-26\n-27namespace _\bg_\bt_\bs_\ba_\bm {\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_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\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/_\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#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/_\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 28\n-_\b3_\b5class GTSAM_EXPORT _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt : public _\bB_\ba_\by_\be_\bs_\bN_\be_\bt {\n-36 public:\n-37 using _\bB_\ba_\bs_\be = _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b<_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b>;\n-38 using _\bT_\bh_\bi_\bs = _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt;\n-39 using _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be = _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl;\n-40 using shared_ptr = boost::shared_ptr;\n-41 using sharedConditional = boost::shared_ptr;\n-42\n-45\n-_\b4_\b7 _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt() = default;\n-48\n-52\n-54 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-55 DefaultKeyFormatter) const override;\n-56\n-58 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs &fg, double tol = 1e-9) const;\n-59\n-63\n-_\b6_\b9 void _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(boost::shared_ptr conditional) {\n-70 factors_.push_back(conditional);\n-71 }\n-72\n-81 template \n-_\b8_\b2 void _\be_\bm_\bp_\bl_\ba_\bc_\be_\b__\bb_\ba_\bc_\bk(_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl *conditional) {\n-83 factors_.push_back(boost::make_shared(\n-84 boost::shared_ptr(conditional)));\n-85 }\n-86\n-_\b9_\b9 void _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl &&conditional) {\n-100 factors_.push_back(\n-101 boost::make_shared(std::move(conditional)));\n-102 }\n-103\n-111 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt choose(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs &assignment) const;\n-112\n-114 double evaluate(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs &values) const;\n+29#include \n+30\n+31namespace _\bg_\bt_\bs_\ba_\bm {\n+32\n+33// Forward declarations\n+34class HybridConditional;\n+35class _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs;\n+36\n+37/* *************************************************************************\n+*/\n+_\b4_\b4class GTSAM_EXPORT _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be\n+45 : public _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be {\n+47 public:\n+48 typedef _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be _\bT_\bh_\bi_\bs;\n+49 typedef _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b<_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\b,\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>\n+50 _\bB_\ba_\bs_\be;\n+51 typedef boost::shared_ptr shared_ptr;\n+52 typedef boost::weak_ptr weak_ptr;\n+53 _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be() {}\n+_\b5_\b4 _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be(const boost::shared_ptr&\n+conditional)\n+55 : _\bB_\ba_\bs_\be(conditional) {}\n+57 _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be(const _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be& clique) : Base(clique) {}\n+58\n+59 virtual ~HybridBayesTreeClique() {}\n+60};\n+61\n+62/* *************************************************************************\n+*/\n+_\b6_\b4class GTSAM_EXPORT _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be : public _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+{\n+65 private:\n+66 typedef _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\b> _\bB_\ba_\bs_\be;\n+67\n+68 public:\n+69 typedef _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n+70 typedef boost::shared_ptr shared_ptr;\n+71\n+74\n+_\b7_\b5 _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be() = default;\n+76\n+78 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs& other, double tol = 1e-9) const;\n+79\n+87 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be choose(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& assignment) const;\n+88\n+96 _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be() const;\n+97\n+105 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& assignment) const;\n+106\n+112 void prune(const size_t maxNumberLeaves);\n+113\n 115\n-_\b1_\b1_\b7 double _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs &values) const {\n-118 return evaluate(values);\n-119 }\n-120\n-128 _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be() const;\n-129\n-137 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs &assignment) const;\n-138\n-144 DecisionTreeFactor::shared_ptr discreteConditionals() const;\n-145\n-158 _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs sample(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs &given, std::mt19937_64 *rng) const;\n-159\n-170 _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs sample(std::mt19937_64 *rng) const;\n-171\n-178 _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs sample(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs &given) const;\n-179\n-185 _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs sample() const;\n-186\n-188 _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt prune(size_t maxNrLeaves);\n-189\n-197 _\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> logProbability(\n-198 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &continuousValues) const;\n-199\n-200 using BayesNet::logProbability; // expose HybridValues version\n-201\n-212 _\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> evaluate(\n-213 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &continuousValues) const;\n-214\n-219 _\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 toFactorGraph(\n-220 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &measurements) const;\n-222\n-223 private:\n-229 void updateDiscreteConditionals(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br\n-&prunedDecisionTree);\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_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-236 }\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_\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+116 private:\n+_\b1_\b1_\b8 friend class boost::serialization::access;\n+119 template \n+120 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n+121 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+122 }\n+123};\n+124\n+126template <>\n+_\b1_\b2_\b7struct _\bt_\br_\ba_\bi_\bt_\bs<_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+128\n+139template <>\n+_\b1_\b4_\b0class _\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_\bC_\bl_\bi_\bq_\bu_\be> : public\n+_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl {\n+141 public:\n+142 typedef _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be _\bC_\bl_\bi_\bq_\bu_\be_\bT_\by_\bp_\be;\n+143 typedef _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bB_\ba_\bs_\be;\n+144\n+145 boost::shared_ptr clique;\n+146\n+_\b1_\b5_\b2 _\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+153 : clique(clique) {\n+154 // Store parent keys in our base type factor so that eliminating those\n+155 // parent keys will pull this subtree into the elimination.\n+156 this->keys_.assign(clique->conditional()->beginParents(),\n+157 clique->conditional()->endParents());\n+158 this->discreteKeys_.assign(clique->conditional()->discreteKeys().begin(),\n+159 clique->conditional()->discreteKeys().end());\n+160 }\n+161\n+_\b1_\b6_\b3 void _\bp_\br_\bi_\bn_\bt(\n+164 const std::string& s = \"\",\n+165 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override {\n+166 clique->print(s + \"stored clique\", formatter);\n+167 }\n+168};\n+169\n+170} // namespace gtsam\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_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n+A Bayes net of Gaussian Conditionals indexed by discrete keys.\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 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:_\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_\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_\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_\bN_\be_\bt_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n-void push_back(boost::shared_ptr< HybridConditional > conditional)\n-Add a hybrid conditional using a shared_ptr.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridBayesNet.h:69\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\be_\bm_\bp_\bl_\ba_\bc_\be_\b__\bb_\ba_\bc_\bk\n-void emplace_back(Conditional *conditional)\n-Preferred: add a conditional directly using a pointer.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridBayesNet.h:82\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n-void push_back(HybridConditional &&conditional)\n-Add a conditional using a shared_ptr, using implicit conversion to a\n-HybridConditional.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridBayesNet.h:99\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-HybridBayesNet()=default\n-Construct empty Bayes net.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-double operator()(const HybridValues &values) const\n-Evaluate hybrid probability density for given HybridValues, sugar.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridBayesNet.h:117\n+_\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+A clique in a HybridBayesTree which is a HybridConditional internally.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridBayesTree.h:46\n+_\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_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be\n+HybridBayesTreeClique(const boost::shared_ptr< HybridConditional >\n+&conditional)\n+Copy constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridBayesTree.h:54\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_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+HybridBayesTree()=default\n+Default constructor, creates an empty Bayes tree.\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 _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\b _\b>_\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 HybridBayesTree.h:152\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 _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\b _\b>_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&formatter=DefaultKeyFormatter) const override\n+print utility\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridBayesTree.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\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_\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_\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:_\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:_\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:_\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_\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_\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\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_\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 * _\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._\bh\n * Generated on Tue Jan 9 2024 05:51: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/MixtureFactor.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,47 +94,36 @@\n \n \n \n \n \n
    \n \n-
    MixtureFactor.h File Reference
    \n+
    HybridBayesTree.cpp File Reference
    \n
    \n
    \n \n-

    Nonlinear Mixture factor of continuous and discrete. \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-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

    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-
    \n-Varun Agrawal
    \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,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-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\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-Nonlinear Mixture factor of continuous and discrete.\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- Varun Agrawal\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- * _\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\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/a00530.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00530.html", "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/HybridNonlinearISAM.h File Reference\n \n \n \n \n \n \n \n@@ -94,36 +94,41 @@\n \n \n \n \n \n
    \n \n-
    HybridSmoother.cpp File Reference
    \n+
    HybridNonlinearISAM.h File Reference
    \n
    \n
    \n \n-

    An incremental smoother for hybrid factor graphs. \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-

    An incremental smoother for hybrid factor graphs.

    \n+
    Date
    Sep 12, 2022
    \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,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-HybridSmoother.cpp File Reference\n-An incremental smoother for hybrid factor graphs. _\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-An incremental smoother for hybrid factor graphs.\n+ Date\n+ Sep 12, 2022\n Author\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_\bS_\bm_\bo_\bo_\bt_\bh_\be_\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/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/GaussianMixtureFactor.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@@ -95,39 +95,31 @@\n \n \n \n \n
    \n \n-
    GaussianMixtureFactor.cpp File Reference
    \n+
    HybridNonlinearISAM.cpp File Reference
    \n
    \n
    \n-\n-

    A set of Gaussian factors indexed by a set of discrete keys. \n-More...

    \n \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,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-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+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-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._\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/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/HybridGaussianISAM.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,51 +96,41 @@\n \n \n \n
    \n \n-
    HybridGaussianISAM.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::HybridGaussianISAM
    class  gtsam::HybridConditional
     Hybrid Conditional Density. More...
     
    struct  gtsam::traits< HybridGaussianISAM >
     traits More...
    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
    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-
    \n-Richard Roberts
    \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,35 +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-HybridGaussianISAM.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_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM\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_\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+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- March 31, 2022\n+ Mar 11, 2022\n Author\n Fan Jiang\n- Frank Dellaert\n- Varun Agrawal\n- Date\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_\bI_\bS_\bA_\bM_\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/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::traits< HybridGaussianISAM >\", \"a03472.html\", null]\n+ [\"gtsam::traits< HybridConditional >\", \"a03440.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/HybridGaussianISAM.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,91 +98,206 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    HybridGaussianISAM.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
    6 * Authors: Frank Dellaert, 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-\n-\n-\n-
    26
    \n-
    27namespace gtsam {
    \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-
    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+
    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+
    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+
    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+
    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+
    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
    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 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+
    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+
    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+
    bool exists(Key j) const
    Check whether a variable with key j exists.
    Definition VectorValues.h:133
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,99 +1,275 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-HybridGaussianISAM.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 6 * Authors: Frank Dellaert, 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/_\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-_\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-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+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+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+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+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+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-_\bI_\bS_\bA_\bM_\b._\bh\n-Incremental update functionality (iSAM) for BayesTree.\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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:_\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:_\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\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+ * _\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/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/HybridSmoother.h 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@@ -96,42 +96,50 @@\n \n \n \n
    \n \n-
    HybridSmoother.h File Reference
    \n+
    HybridBayesNet.h File Reference
    \n
    \n
    \n \n-

    An incremental smoother for hybrid factor graphs. \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

    \n Classes

    class  gtsam::HybridSmoother
    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-

    An incremental smoother for hybrid factor graphs.

    \n-
    Author
    Varun Agrawal
    \n-
    Date
    October 2022
    \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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,26 +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-HybridSmoother.h File Reference\n-An incremental smoother for hybrid factor graphs. _\bM_\bo_\br_\be_\b._\b._\b.\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_\bS_\bm_\bo_\bo_\bt_\bh_\be_\br\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-An incremental smoother for hybrid factor graphs.\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- October 2022\n+ December 2021\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+ * _\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/a00539.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00539.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00539 = [\n- [\"gtsam::HybridSmoother\", \"a03500.html\", \"a03500\"]\n+ [\"gtsam::traits< HybridBayesNet >\", \"a03412.html\", 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/HybridSmoother.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridBayesNet.h Source File\n \n \n \n \n \n \n \n@@ -98,73 +98,161 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    HybridSmoother.h
    \n+
    HybridBayesNet.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-\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+
    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+
    26
    \n+
    27namespace gtsam {
    \n+
    28
    \n+
    \n+
    35class GTSAM_EXPORT HybridBayesNet : public BayesNet<HybridConditional> {
    \n+
    36 public:
    \n+\n+
    38 using This = HybridBayesNet;
    \n+\n+
    40 using shared_ptr = boost::shared_ptr<HybridBayesNet>;
    \n+
    41 using sharedConditional = boost::shared_ptr<ConditionalType>;
    \n+
    42
    \n+
    45
    \n+
    47 HybridBayesNet() = default;
    \n+
    48
    \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+
    54 void print(const std::string &s = "", const KeyFormatter &formatter =
    \n+
    55 DefaultKeyFormatter) const override;
    \n+
    56
    \n+
    58 bool equals(const This &fg, double tol = 1e-9) const;
    \n+
    59
    \n+
    63
    \n+
    \n+
    69 void push_back(boost::shared_ptr<HybridConditional> conditional) {
    \n+
    70 factors_.push_back(conditional);
    \n+
    71 }
    \n+
    \n+
    72
    \n+
    81 template <class Conditional>
    \n+
    \n+
    82 void emplace_back(Conditional *conditional) {
    \n+
    83 factors_.push_back(boost::make_shared<HybridConditional>(
    \n+
    84 boost::shared_ptr<Conditional>(conditional)));
    \n+
    85 }
    \n+
    \n+
    86
    \n+
    \n+
    99 void push_back(HybridConditional &&conditional) {
    \n+
    100 factors_.push_back(
    \n+
    101 boost::make_shared<HybridConditional>(std::move(conditional)));
    \n+
    102 }
    \n+
    \n+
    103
    \n+
    111 GaussianBayesNet choose(const DiscreteValues &assignment) const;
    \n+
    112
    \n+
    114 double evaluate(const HybridValues &values) const;
    \n+
    115
    \n+
    \n+
    117 double operator()(const HybridValues &values) const {
    \n+
    118 return evaluate(values);
    \n+
    119 }
    \n+
    \n+
    120
    \n+
    128 HybridValues optimize() const;
    \n+
    129
    \n+
    137 VectorValues optimize(const DiscreteValues &assignment) const;
    \n+
    138
    \n+
    144 DecisionTreeFactor::shared_ptr discreteConditionals() const;
    \n+
    145
    \n+
    158 HybridValues sample(const HybridValues &given, std::mt19937_64 *rng) const;
    \n+
    159
    \n+
    170 HybridValues sample(std::mt19937_64 *rng) const;
    \n+
    171
    \n+
    178 HybridValues sample(const HybridValues &given) const;
    \n+
    179
    \n+
    185 HybridValues sample() const;
    \n+
    186
    \n+
    188 HybridBayesNet prune(size_t maxNrLeaves);
    \n+
    189
    \n+
    197 AlgebraicDecisionTree<Key> logProbability(
    \n+
    198 const VectorValues &continuousValues) const;
    \n+
    199
    \n+
    200 using BayesNet::logProbability; // expose HybridValues version
    \n+
    201
    \n+\n+
    213 const VectorValues &continuousValues) const;
    \n+
    214
    \n+
    219 HybridGaussianFactorGraph toFactorGraph(
    \n+
    220 const VectorValues &measurements) const;
    \n+
    222
    \n+
    223 private:
    \n+
    229 void updateDiscreteConditionals(const DecisionTreeFactor &prunedDecisionTree);
    \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_BASE_OBJECT_NVP(Base);
    \n+
    236 }
    \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
    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+
    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+
    A map from keys to values.
    Definition DiscreteValues.h:34
    \n
    A hybrid Bayes net is a collection of HybridConditionals, which can have discrete conditionals,...
    Definition HybridBayesNet.h:35
    \n+
    void push_back(boost::shared_ptr< HybridConditional > conditional)
    Add a hybrid conditional using a shared_ptr.
    Definition HybridBayesNet.h:69
    \n+
    void emplace_back(Conditional *conditional)
    Preferred: add a conditional directly using a pointer.
    Definition HybridBayesNet.h:82
    \n+
    void push_back(HybridConditional &&conditional)
    Add a conditional using a shared_ptr, using implicit conversion to a HybridConditional.
    Definition HybridBayesNet.h:99
    \n+
    HybridBayesNet()=default
    Construct empty Bayes net.
    \n+
    double operator()(const HybridValues &values) const
    Evaluate hybrid probability density for given HybridValues, sugar.
    Definition HybridBayesNet.h:117
    \n+
    Hybrid Conditional Density.
    Definition HybridConditional.h:62
    \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+
    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+
    Definition Conditional.h:64
    \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": "@@ -1,88 +1,203 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-HybridSmoother.h\n+HybridBayesNet.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#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+8\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_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\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/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n+23#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+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/_\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+26\n+27namespace _\bg_\bt_\bs_\ba_\bm {\n+28\n+_\b3_\b5class GTSAM_EXPORT _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt : public _\bB_\ba_\by_\be_\bs_\bN_\be_\bt {\n+36 public:\n+37 using _\bB_\ba_\bs_\be = _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b<_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b>;\n+38 using _\bT_\bh_\bi_\bs = _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt;\n+39 using _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be = _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl;\n+40 using shared_ptr = boost::shared_ptr;\n+41 using sharedConditional = boost::shared_ptr;\n+42\n+45\n+_\b4_\b7 _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt() = default;\n+48\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+54 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+55 DefaultKeyFormatter) const override;\n+56\n+58 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs &fg, double tol = 1e-9) const;\n+59\n+63\n+_\b6_\b9 void _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(boost::shared_ptr conditional) {\n+70 factors_.push_back(conditional);\n+71 }\n+72\n+81 template \n+_\b8_\b2 void _\be_\bm_\bp_\bl_\ba_\bc_\be_\b__\bb_\ba_\bc_\bk(_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl *conditional) {\n+83 factors_.push_back(boost::make_shared(\n+84 boost::shared_ptr(conditional)));\n+85 }\n+86\n+_\b9_\b9 void _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl &&conditional) {\n+100 factors_.push_back(\n+101 boost::make_shared(std::move(conditional)));\n+102 }\n+103\n+111 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt choose(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs &assignment) const;\n+112\n+114 double evaluate(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs &values) const;\n+115\n+_\b1_\b1_\b7 double _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs &values) const {\n+118 return evaluate(values);\n+119 }\n+120\n+128 _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be() const;\n+129\n+137 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs &assignment) const;\n+138\n+144 DecisionTreeFactor::shared_ptr discreteConditionals() const;\n+145\n+158 _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs sample(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs &given, std::mt19937_64 *rng) const;\n+159\n+170 _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs sample(std::mt19937_64 *rng) const;\n+171\n+178 _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs sample(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs &given) const;\n+179\n+185 _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs sample() const;\n+186\n+188 _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt prune(size_t maxNrLeaves);\n+189\n+197 _\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> logProbability(\n+198 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &continuousValues) const;\n+199\n+200 using BayesNet::logProbability; // expose HybridValues version\n+201\n+212 _\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> evaluate(\n+213 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &continuousValues) const;\n+214\n+219 _\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 toFactorGraph(\n+220 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &measurements) const;\n+222\n+223 private:\n+229 void updateDiscreteConditionals(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br\n+&prunedDecisionTree);\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_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+236 }\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_\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 Global functions in a separate testing 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:_\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_\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_\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_\bN_\be_\bt_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n+void push_back(boost::shared_ptr< HybridConditional > conditional)\n+Add a hybrid conditional using a shared_ptr.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridBayesNet.h:69\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\be_\bm_\bp_\bl_\ba_\bc_\be_\b__\bb_\ba_\bc_\bk\n+void emplace_back(Conditional *conditional)\n+Preferred: add a conditional directly using a pointer.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridBayesNet.h:82\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n+void push_back(HybridConditional &&conditional)\n+Add a conditional using a shared_ptr, using implicit conversion to a\n+HybridConditional.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridBayesNet.h:99\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+HybridBayesNet()=default\n+Construct empty Bayes net.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+double operator()(const HybridValues &values) const\n+Evaluate hybrid probability density for given HybridValues, sugar.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridBayesNet.h:117\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_\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:_\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:_\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:_\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:_\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 * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bS_\bm_\bo_\bo_\bt_\bh_\be_\br_\b._\bh\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/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/HybridEliminationTree.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,41 +94,60 @@\n \n \n \n \n \n
    \n \n-
    HybridEliminationTree.h File Reference
    \n+Namespaces |\n+Typedefs |\n+Functions
    \n+
    HybridGaussianFactorGraph.cpp File Reference
    \n \n
    \n \n-

    Go to the source code of this file.

    \n+

    Hybrid factor graph that uses type erasure. \n+More...

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

    \n-Classes

    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+\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-
    Date
    Mar 11, 2022
    \n-
    Author
    Fan Jiang
    \n+

    Hybrid factor graph that uses type erasure.

    \n+
    Author
    Fan Jiang
    \n+
    \n+Varun Agrawal
    \n+
    \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,25 +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-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:_\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+_\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- Date\n- Mar 11, 2022\n+Hybrid factor graph that uses type erasure.\n Author\n Fan Jiang\n+ Varun Agrawal\n+ Frank Dellaert\n+ Date\n+ Mar 11, 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._\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/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/HybridGaussianFactorGraph.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,56 +94,36 @@\n \n \n \n \n \n
    \n \n-
    HybridGaussianFactorGraph.h File Reference
    \n+Namespaces
    \n+
    HybridSmoother.cpp File Reference
    \n \n
    \n \n-

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

    struct  gtsam::EliminationTraits< HybridGaussianFactorGraph >
     
    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-\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

    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+

    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,41 +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-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-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- 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+_\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-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-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\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+An incremental smoother for hybrid factor graphs.\n Author\n- Fan Jiang, Varun Agrawal, Frank Dellaert\n+ Varun Agrawal\n Date\n- Mar 11, 2022\n+ October 2022\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+ * _\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/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/GaussianMixture.cpp 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@@ -94,48 +94,64 @@\n \n \n \n \n \n
    \n \n-
    GaussianMixture.cpp File Reference
    \n+
    HybridFactor.h File Reference
    \n
    \n
    \n \n-

    A hybrid conditional in the Conditional Linear Gaussian scheme. \n-More...

    \n+

    Go to the source code of this file.

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

    \n+Classes

    class  gtsam::HybridFactor
     Base class for truly hybrid probabilistic factors. More...
     
    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+\n+\n

    \n Functions

    \n-std::set< DiscreteKeygtsam::DiscreteKeysAsSet (const DiscreteKeys &discreteKeys)
     Return the DiscreteKey vector as a set.
     
    \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-

    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+
    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,29 +1,42 @@\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 | _\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_\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_\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-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+ _\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-A hybrid conditional in the Conditional Linear Gaussian scheme.\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_\b._\bc_\bp_\bp\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/a00551.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00551.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,4 @@\n var a00551 = [\n- [\"DiscreteKeysAsSet\", \"a00551.html#ad92a1966f54e02a7c2ce061c1228c7b3\", null]\n+ [\"gtsam::traits< HybridFactor >\", \"a03452.html\", null],\n+ [\"GaussianFactorGraphTree\", \"a00551.html#a8b4a8e0d32b81b0fa2fa15c437b89e7c\", null]\n ];\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/HybridNonlinearFactorGraph.h 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@@ -95,45 +95,56 @@\n \n \n \n \n
    \n \n-
    HybridNonlinearFactorGraph.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    GaussianMixture.h File Reference
    \n \n
    \n \n-

    Nonlinear hybrid factor graph that uses type erasure. \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 \n

    \n Classes

    class  gtsam::HybridNonlinearFactorGraph
    class  gtsam::GaussianMixture
     A conditional of gaussian mixtures indexed by discrete variables, as part of a Bayes Network. More...
     
    struct  gtsam::traits< HybridNonlinearFactorGraph >
    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-

    Nonlinear hybrid factor graph that uses type erasure.

    \n-
    Author
    Varun Agrawal
    \n-
    Date
    May 28, 2022
    \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,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-HybridNonlinearFactorGraph.h File Reference\n-Nonlinear 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 | _\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:_\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+ 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 _\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+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+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-Nonlinear hybrid factor graph that uses type erasure.\n+A hybrid conditional in the Conditional Linear Gaussian scheme.\n Author\n+ Fan Jiang\n Varun Agrawal\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_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\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_\b._\bh\n * Generated on Tue Jan 9 2024 05:51: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,4 +1,4 @@\n var a00554 = [\n- [\"gtsam::HybridNonlinearFactorGraph\", \"a03488.html\", \"a03488\"],\n- [\"gtsam::traits< HybridNonlinearFactorGraph >\", \"a03492.html\", null]\n+ [\"gtsam::traits< GaussianMixture >\", \"a03396.html\", null],\n+ [\"DiscreteKeysAsSet\", \"a00554.html#ad92a1966f54e02a7c2ce061c1228c7b3\", null]\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/HybridNonlinearFactorGraph.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/GaussianMixture.h Source File\n \n \n \n \n \n \n \n@@ -98,91 +98,182 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    HybridNonlinearFactorGraph.h
    \n+
    GaussianMixture.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 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+
    20#pragma once
    \n+
    21
    \n+
    22#include <gtsam/discrete/DecisionTree-inl.h>
    \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+
    54 : public HybridFactor,
    \n+
    55 public Conditional<HybridFactor, GaussianMixture> {
    \n+
    56 public:
    \n+
    57 using This = GaussianMixture;
    \n+
    58 using shared_ptr = boost::shared_ptr<GaussianMixture>;
    \n+\n+\n+
    61
    \n+\n+
    64
    \n+
    65 private:
    \n+
    66 Conditionals conditionals_;
    \n+
    67 double logConstant_;
    \n+
    68
    \n+
    72 GaussianFactorGraphTree asGaussianFactorGraphTree() const;
    \n+
    73
    \n+\n+\n+
    83 prunerFunc(const DecisionTreeFactor &decisionTree);
    \n+
    84
    \n+
    85 public:
    \n+
    88
    \n+
    90 GaussianMixture() = default;
    \n+
    91
    \n+
    103 GaussianMixture(const KeyVector &continuousFrontals,
    \n+
    104 const KeyVector &continuousParents,
    \n+
    105 const DiscreteKeys &discreteParents,
    \n+
    106 const Conditionals &conditionals);
    \n+
    107
    \n+
    116 GaussianMixture(KeyVector &&continuousFrontals, KeyVector &&continuousParents,
    \n+
    117 DiscreteKeys &&discreteParents,
    \n+
    118 std::vector<GaussianConditional::shared_ptr> &&conditionals);
    \n+
    119
    \n+\n+
    129 const KeyVector &continuousFrontals, const KeyVector &continuousParents,
    \n+
    130 const DiscreteKeys &discreteParents,
    \n+
    131 const std::vector<GaussianConditional::shared_ptr> &conditionals);
    \n+
    132
    \n+
    136
    \n+
    138 bool equals(const HybridFactor &lf, double tol = 1e-9) const override;
    \n+
    139
    \n+
    141 void print(
    \n+
    142 const std::string &s = "GaussianMixture\\n",
    \n+
    143 const KeyFormatter &formatter = DefaultKeyFormatter) const override;
    \n+
    144
    \n+
    148
    \n+\n+
    151 const DiscreteValues &discreteValues) const;
    \n+
    152
    \n+
    154 size_t nrComponents() const;
    \n+
    155
    \n+
    157 KeyVector continuousParents() const;
    \n+
    158
    \n+
    161 double logNormalizationConstant() const override { return logConstant_; }
    \n+
    162
    \n+
    167 boost::shared_ptr<GaussianMixtureFactor> likelihood(
    \n+
    168 const VectorValues &given) const;
    \n+
    169
    \n+
    171 const Conditionals &conditionals() const;
    \n+
    172
    \n+
    180 AlgebraicDecisionTree<Key> logProbability(
    \n+
    181 const VectorValues &continuousValues) const;
    \n+
    182
    \n+
    208 double error(const HybridValues &values) const override;
    \n+
    209
    \n+
    217 AlgebraicDecisionTree<Key> error(const VectorValues &continuousValues) const;
    \n+
    218
    \n+
    225 double logProbability(const HybridValues &values) const override;
    \n+
    226
    \n+
    228 double evaluate(const HybridValues &values) const override;
    \n+
    229
    \n+
    \n+
    231 double operator()(const HybridValues &values) const {
    \n+
    232 return evaluate(values);
    \n+
    233 }
    \n+
    \n+
    234
    \n+
    242 void prune(const DecisionTreeFactor &decisionTree);
    \n+
    243
    \n+\n+
    253
    \n+
    254 private:
    \n+
    256 bool allFrontalsGiven(const VectorValues &given) const;
    \n+
    257
    \n+
    259 friend class boost::serialization::access;
    \n+
    260 template <class Archive>
    \n+
    261 void serialize(Archive &ar, const unsigned int /*version*/) {
    \n+
    262 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseFactor);
    \n+
    263 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseConditional);
    \n+
    264 ar &BOOST_SERIALIZATION_NVP(conditionals_);
    \n+
    265 }
    \n+
    266};
    \n+
    \n+
    267
    \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
    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+
    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-
    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+
    An algebraic decision tree fixes the range of a DecisionTree to double.
    Definition AlgebraicDecisionTree.h:38
    \n+
    An assignment from labels to value index (size_t).
    Definition Assignment.h:37
    \n+\n+
    A discrete probabilistic factor.
    Definition DecisionTreeFactor.h:45
    \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+
    A conditional of gaussian mixtures indexed by discrete variables, as part of a Bayes Network.
    Definition GaussianMixture.h:55
    \n+
    double logNormalizationConstant() const override
    The log normalization constant is max of the the individual log-normalization constants.
    Definition GaussianMixture.h:161
    \n+
    double operator()(const HybridValues &values) const
    Evaluate probability density, sugar.
    Definition GaussianMixture.h:231
    \n+
    GaussianMixture()=default
    Default constructor, mainly 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+
    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+
    the error.
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,109 +1,236 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-HybridNonlinearFactorGraph.h\n+GaussianMixture.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-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+20#pragma once\n+21\n+22#include \n+23#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+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_\bF_\ba_\bc_\bt_\bo_\br_\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/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+27#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+28#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+29#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+30\n+31namespace _\bg_\bt_\bs_\ba_\bm {\n+32\n+33class _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs;\n+34\n+_\b5_\b3class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be\n+54 : public _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br,\n+55 public _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl {\n+56 public:\n+57 using _\bT_\bh_\bi_\bs = _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be;\n+58 using shared_ptr = boost::shared_ptr;\n+59 using _\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br = _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br;\n+60 using _\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl = _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b,_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\b>;\n+61\n+_\b6_\b3 using _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bs = _\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_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br_\b>;\n+64\n+65 private:\n+66 _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bs conditionals_;\n+67 double logConstant_;\n+68\n+72 _\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+73\n+81 std::function<_\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+82 const _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b<_\bK_\be_\by_\b> &, 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 &)>\n+83 _\bp_\br_\bu_\bn_\be_\br_\bF_\bu_\bn_\bc(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br &decisionTree);\n+84\n+85 public:\n+88\n+_\b9_\b0 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be() = default;\n+91\n+103 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &continuousFrontals,\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 const _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bs &conditionals);\n+107\n+116 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be(_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &&continuousFrontals, _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+&&continuousParents,\n+117 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &&discreteParents,\n+118 std::vector &&conditionals);\n+119\n+128 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be(\n+129 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &continuousFrontals, const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &continuousParents,\n+130 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &discreteParents,\n+131 const std::vector &conditionals);\n+132\n+136\n+138 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+139\n+141 void _\bp_\br_\bi_\bn_\bt(\n+142 const std::string &s = \"GaussianMixture\\n\",\n+143 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &formatter = DefaultKeyFormatter) const override;\n+144\n+148\n+150 _\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 operator()(\n+151 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs &discreteValues) const;\n+152\n+154 size_t nrComponents() const;\n+155\n+157 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br continuousParents() const;\n+158\n+_\b1_\b6_\b1 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 override { return logConstant_; }\n+162\n+167 boost::shared_ptr likelihood(\n+168 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &given) const;\n+169\n+171 const Conditionals &conditionals() const;\n+172\n+180 _\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> logProbability(\n+181 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &continuousValues) const;\n+182\n+208 double error(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs &values) const override;\n+209\n+217 _\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+218\n+225 double logProbability(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs &values) const override;\n+226\n+228 double evaluate(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs &values) const override;\n+229\n+_\b2_\b3_\b1 double _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs &values) const {\n+232 return evaluate(values);\n+233 }\n+234\n+242 void prune(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br &decisionTree);\n+243\n+251 _\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+253\n+254 private:\n+256 bool allFrontalsGiven(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &given) const;\n+257\n+_\b2_\b5_\b9 friend class boost::serialization::access;\n+260 template \n+261 void serialize(Archive &ar, const unsigned int /*version*/) {\n+262 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br);\n+263 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl);\n+264 ar &BOOST_SERIALIZATION_NVP(conditionals_);\n+265 }\n+266};\n+267\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+_\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs_\bA_\bs_\bS_\be_\bt\n+std::set< DiscreteKey > DiscreteKeysAsSet(const DiscreteKeys &discreteKeys)\n+Return the DiscreteKey vector as a set.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianMixture.cpp:221\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_\bu_\bn_\be_\br_\bF_\bu_\bn_\bc\n+std::function< double(const Assignment< Key > &, double)> prunerFunc(const\n+DecisionTreeFactor &prunedDecisionTree, const HybridConditional &conditional)\n+Helper function to get the pruner functional.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridBayesNet.cpp:66\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_\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+_\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_\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 _\bK_\be_\by_\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_\b _\b>\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_\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\n+A conditional of gaussian mixtures indexed by discrete variables, as part of a\n+Bayes Network.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianMixture.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\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+double logNormalizationConstant() const override\n+The log normalization constant is max of the the individual log-normalization\n+constants.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianMixture.h:161\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+double operator()(const HybridValues &values) const\n+Evaluate probability density, sugar.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianMixture.h:231\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be\n+GaussianMixture()=default\n+Default constructor, mainly 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:_\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\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+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+_\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_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\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_\b._\bh\n * Generated on Tue Jan 9 2024 05:51: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/HybridFactor.h 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@@ -94,64 +94,36 @@\n \n \n \n \n \n
    \n \n-
    HybridFactor.h File Reference
    \n+Namespaces
    \n+
    HybridNonlinearFactorGraph.cpp File Reference
    \n \n
    \n \n-

    Go to the source code of this file.

    \n+

    Nonlinear hybrid factor graph that uses type erasure. \n+More...

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

    \n-Classes

    class  gtsam::HybridFactor
     Base class for truly hybrid probabilistic factors. More...
     
    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+

    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,42 +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-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_\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_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n-\u00a0\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 N\bNa\bam\bme\bes\bsp\bpa\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+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_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\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/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/HybridConditional.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@@ -96,41 +96,49 @@\n \n \n \n
    \n \n-
    HybridConditional.h File Reference
    \n+
    GaussianMixtureFactor.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

    \n Classes

    class  gtsam::HybridConditional
     Hybrid Conditional Density. More...
    class  gtsam::GaussianMixtureFactor
     Implementation of a discrete conditional mixture factor. More...
     
    struct  gtsam::traits< HybridConditional >
    struct  gtsam::traits< GaussianMixtureFactor >
     
    \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+

    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
    \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-HybridConditional.h File Reference\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_\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:_\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 _\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 _\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 *\b**\b**\b**\b**\b* D\bDe\bet\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 set of GaussianFactors, indexed by a set of discrete keys.\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- * _\bH_\by_\bb_\br_\bi_\bd_\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_\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/a00560.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00560.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00560 = [\n- [\"gtsam::traits< HybridConditional >\", \"a03440.html\", null]\n+ [\"gtsam::traits< GaussianMixtureFactor >\", \"a03404.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/HybridConditional.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,206 +98,149 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    HybridConditional.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-
    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-
    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-
    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-
    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-
    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-
    A hybrid conditional in the Conditional Linear Gaussian scheme.
    \n-
    Linearized Hybrid factor graph that uses type erasure.
    \n-\n-\n-
    Base class for conditional densities.
    \n-
    Conditional Gaussian Base class.
    \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+
    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+
    Linear Factor Graph where all factors are Gaussians.
    \n+
    A factor with a quadratic error function - a Gaussian.
    \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+
    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-
    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+
    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-
    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-
    bool exists(Key j) const
    Check whether a variable with key j exists.
    Definition VectorValues.h:133
    \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,275 +1,191 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-HybridConditional.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-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-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-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-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-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-_\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_\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+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+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-_\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+_\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_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+A factor with a quadratic error function - a Gaussian.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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:_\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:_\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:_\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+_\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_\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_\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/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/GaussianMixtureFactor.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,51 +94,45 @@\n \n \n \n \n \n
    \n \n-
    GaussianMixtureFactor.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    HybridFactor.cpp 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-Classes

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

    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,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-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:_\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+_\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-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_\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/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/HybridNonlinearFactorGraph.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@@ -95,35 +95,37 @@\n \n \n \n \n
    \n \n-
    HybridNonlinearFactorGraph.cpp File Reference
    \n+
    HybridFactorGraph.cpp File Reference
    \n
    \n
    \n \n-

    Nonlinear hybrid factor graph that uses type erasure. \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

    Detailed Description

    \n-

    Nonlinear hybrid factor graph that uses type erasure.

    \n-
    Author
    Varun Agrawal
    \n-
    Date
    May 28, 2022
    \n+

    Factor graph with utilities for hybrid factors.

    \n+
    Author
    Varun Agrawal
    \n+
    \n+Frank Dellaert
    \n+
    Date
    January, 2023
    \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-HybridNonlinearFactorGraph.cpp File Reference\n-Nonlinear hybrid factor graph that uses type erasure. _\bM_\bo_\br_\be_\b._\b._\b.\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 *\b**\b**\b**\b**\b* D\bDe\bet\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+Factor graph with utilities for hybrid factors.\n Author\n Varun Agrawal\n+ Frank Dellaert\n Date\n- May 28, 2022\n+ January, 2023\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_\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/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/graph.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@@ -95,83 +95,54 @@\n \n \n \n \n
    \n \n-
    graph.h File Reference
    \n+Namespaces
    \n+
    ClusterTree.h File Reference
    \n \n
    \n \n-

    Graph algorithm using boost library. \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+\n \n

    \n Classes

    class  gtsam::SDGraph< KEY >
     SDGraph is undirected graph with variable keys and double edge weights. 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...
     
    class  gtsam::SGraph< KEY >
    struct  gtsam::ClusterTree< GRAPH >::Cluster
     A Cluster is just a collection of factors. More...
     
    class  gtsam::PredecessorMap< KEY >
     Map from variable key to parent key. 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-\n-\n-\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+

    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,75 +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 | _\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+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:_\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:_\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-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bG_\br_\ba_\bp_\bh_\b<_\b _\bK_\bE_\bY_\b _\b>\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:_\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+ 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-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- Author\n- : Kai Ni\n+Collects factorgraph fragments defined on variable clusters, arranged in a\n+tree.\n Date\n- Jan 11, 2010\n+ Oct 8, 2013\n+ Author\n+ Kai Ni\n+ Richard Roberts\n+ Frank Dellaert\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+ * _\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/a00572.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00572.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,11 +1,5 @@\n var a00572 = [\n- [\"gtsam::SDGraph< KEY >\", \"a03616.html\", null],\n- [\"gtsam::SGraph< KEY >\", \"a03620.html\", null],\n- [\"gtsam::PredecessorMap< KEY >\", \"a03624.html\", \"a03624\"],\n- [\"composePoses\", \"a00572.html#a62b34d6038ccdfa84d8a5bb0c15328b1\", null],\n- [\"findMinimumSpanningTree\", \"a00572.html#a7771a103b41708e88763ff67059ff01d\", null],\n- [\"predecessorMap2Graph\", \"a00572.html#ae67d0d86c4e55b175859967a70b36983\", null],\n- [\"predecessorMap2Keys\", \"a00572.html#a18a265afdea057ea54be10262396be12\", null],\n- [\"split\", \"a00572.html#a3453247aec1d8b4642947ffd4bca426b\", null],\n- [\"toBoostGraph\", \"a00572.html#a6c0319a6ebcc83d4a5cf9ff51729bb80\", null]\n+ [\"gtsam::ClusterTree< GRAPH >\", \"a03564.html\", \"a03564\"],\n+ [\"gtsam::ClusterTree< GRAPH >::Cluster\", \"a03568.html\", \"a03568\"],\n+ [\"gtsam::EliminatableClusterTree< BAYESTREE, GRAPH >\", \"a03528.html\", \"a03528\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00572_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00572_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/ClusterTree.h Source File\n \n \n \n \n \n \n \n@@ -98,115 +98,273 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    graph.h
    \n+
    ClusterTree.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 <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-
    32 // type definitions :
    \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+
    31 typedef typename GRAPH::FactorType FactorType;
    \n+
    32 typedef boost::shared_ptr<FactorType> sharedFactor;
    \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+
    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 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-
    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-
    71
    \n-
    78 template<class G, class F, class KEY> SDGraph<KEY> toBoostGraph(const G& graph);
    \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+
    \n+
    75
    \n+
    76 size_t nrChildren() const {
    \n+
    77 return children.size();
    \n+
    78 }
    \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+
    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-
    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+
    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-
    99 template<class G, class KEY, class FACTOR2>
    \n-
    100 PredecessorMap<KEY> findMinimumSpanningTree(const G& g) ;
    \n+
    97 std::vector<size_t> nrFrontalsOfChildren() const;
    \n+
    98
    \n+
    100 void merge(const boost::shared_ptr<Cluster>& cluster);
    \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+
    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-
    112#include <gtsam/inference/graph-inl.h>
    \n-
    A non-templated config holding any types of Manifold-group elements.
    \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+
    Concept check for values that can be used in unit tests.
    \n+
    A thin wrapper around std::vector that uses a custom allocator.
    \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-
    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+
    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+
    Definition Ordering.h:34
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,142 +1,384 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-graph.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, Georgia Tech Research Corporation,\n-4 * Atlanta, Georgia 30332-0415\n-5 * All Rights Reserved\n-6 * Authors: Frank Dellaert, 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\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 // type definitions :\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_\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-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+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 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-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-71\n-78 template SDGraph _\bt_\bo_\bB_\bo_\bo_\bs_\bt_\bG_\br_\ba_\bp_\bh(const G&\n-graph);\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+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-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+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-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+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-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+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-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+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-112#include \n-_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-A non-templated config holding any types of Manifold-group elements.\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+_\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+_\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:_\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:_\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+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- * _\bg_\br_\ba_\bp_\bh_\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/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/BayesTree.h 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@@ -95,52 +95,83 @@\n \n \n \n \n
    \n \n-
    BayesTree.h File Reference
    \n+Namespaces |\n+Macros |\n+Functions
    \n+
    graph.h File Reference
    \n \n
    \n \n-

    Bayes Tree is a tree of cliques of a Bayes Chain. \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-\n-\n-\n-\n+\n+\n \n

    \n Classes

    struct  gtsam::BayesTreeCliqueStats
     clique statistics More...
    class  gtsam::SDGraph< KEY >
     SDGraph is undirected graph with variable keys and double edge weights. More...
     
    struct  gtsam::BayesTreeCliqueData
     store all the sizes
    \n- More...
    class  gtsam::SGraph< KEY >
     
    class  gtsam::BayesTree< CLIQUE >
     Bayes tree. More...
     
    class  gtsam::BayesTreeOrphanWrapper< CLIQUE, typename >
    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+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-

    Bayes Tree is a tree of cliques of a Bayes Chain.

    \n-
    Author
    Frank Dellaert
    \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,34 +1,75 @@\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+_\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-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:_\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-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+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:_\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+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+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-Bayes Tree is a tree of cliques of a Bayes Chain.\n+Graph algorithm using boost library.\n Author\n- Frank Dellaert\n+ : Kai Ni\n+ Date\n+ Jan 11, 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._\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/a00575.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00575.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,11 @@\n var a00575 = [\n- [\"gtsam::BayesTreeCliqueStats\", \"a03532.html\", null],\n- [\"gtsam::BayesTreeCliqueData\", \"a03536.html\", null],\n- [\"gtsam::BayesTreeOrphanWrapper< CLIQUE, typename >\", \"a03544.html\", \"a03544\"]\n+ [\"gtsam::SDGraph< KEY >\", \"a03616.html\", null],\n+ [\"gtsam::SGraph< KEY >\", \"a03620.html\", null],\n+ [\"gtsam::PredecessorMap< KEY >\", \"a03624.html\", \"a03624\"],\n+ [\"composePoses\", \"a00575.html#a62b34d6038ccdfa84d8a5bb0c15328b1\", null],\n+ [\"findMinimumSpanningTree\", \"a00575.html#a7771a103b41708e88763ff67059ff01d\", null],\n+ [\"predecessorMap2Graph\", \"a00575.html#ae67d0d86c4e55b175859967a70b36983\", null],\n+ [\"predecessorMap2Keys\", \"a00575.html#a18a265afdea057ea54be10262396be12\", null],\n+ [\"split\", \"a00575.html#a3453247aec1d8b4642947ffd4bca426b\", null],\n+ [\"toBoostGraph\", \"a00575.html#a6c0319a6ebcc83d4a5cf9ff51729bb80\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00575_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00575_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/graph.h Source File\n \n \n \n \n \n \n \n@@ -98,295 +98,115 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    BayesTree.h
    \n+
    graph.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/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+
    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+
    32 // type definitions :
    \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
    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+
    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
    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+
    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-\n-
    90
    \n-\n-
    93
    \n-\n-
    96
    \n-
    97 protected:
    \n-
    98
    \n-\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-\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-
    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+
    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
    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+
    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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,451 +1,142 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-BayesTree.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-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-*/\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+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 // type definitions :\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 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+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 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+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-_\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+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-_\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-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+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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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-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-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_\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\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\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/a00578_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00578_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/ISAM-inst.h Source File\n \n \n \n \n \n \n \n@@ -98,143 +98,100 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    Conditional-inst.h
    \n+
    ISAM-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
    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+
    18#pragma once
    \n+
    19
    \n+\n+\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+
    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/* ************************************************************************* */
    \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+
    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 FACTOR, class DERIVEDCONDITIONAL>
    \n+
    61template<class BAYESTREE>
    \n
    \n-\n-
    63 const {
    \n-
    64 throw std::runtime_error(
    \n-
    65 "Conditional::logNormalizationConstant is not implemented");
    \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-
    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+
    67
    \n+
    68}
    \n+\n+
    Incremental update functionality (iSAM) for BayesTree.
    \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+
    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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,167 +1,113 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Conditional-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 6 * Authors: Frank Dellaert, 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+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 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+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/* *************************************************************************\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+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_\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+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-*/\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+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\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:_\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\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+ * _\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/a00584.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00584.html", "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/JunctionTree-inst.h File Reference\n \n \n \n \n \n \n \n@@ -94,34 +94,50 @@\n
    \n
    \n \n \n \n
    \n \n-
    Ordering.cpp File Reference
    \n+
    JunctionTree-inst.h File Reference
    \n
    \n
    \n+\n+

    The junction tree, template bodies. \n+More...

    \n+\n+

    Go to the source code of this file.

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

    \n+Classes

    struct  gtsam::ConstructorTraversalData< BAYESTREE, GRAPH, ETREE_NODE >
     
    class  gtsam::ConstructorTraversalData< BAYESTREE, GRAPH, ETREE_NODE >::SymbolicFactors
     
    \n \n \n \n \n

    \n Namespaces

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

    Detailed Description

    \n-
    Author
    Richard Roberts
    \n+

    The junction tree, template bodies.

    \n+
    Date
    Feb 4, 2010
    \n+
    Author
    Kai Ni
    \n+
    \n+Frank Dellaert
    \n
    \n-Andrew Melim
    \n-
    Date
    Sep 2, 2010
    \n+Richard Roberts
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,21 +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-Ordering.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+JunctionTree-inst.h File Reference\n+The junction tree, template bodies. _\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_\br_\bu_\bc_\bt_\bo_\br_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\bD_\ba_\bt_\ba_\b<_\b _\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b,_\b _\bG_\bR_\bA_\bP_\bH_\b,_\b _\bE_\bT_\bR_\bE_\bE_\b__\bN_\bO_\bD_\bE_\b _\b>\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt_\bo_\br_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\bD_\ba_\bt_\ba_\b<_\b _\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b,_\b _\bG_\bR_\bA_\bP_\bH_\b,_\b _\bE_\bT_\bR_\bE_\bE_\b__\bN_\bO_\bD_\bE_\b _\b>_\b:_\b:\n+ _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\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 *\b**\b**\b**\b**\b* D\bDe\bet\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, template bodies.\n+ Date\n+ Feb 4, 2010\n Author\n+ Kai Ni\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- * _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bc_\bp_\bp\n+ * _\bJ_\bu_\bn_\bc_\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/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/Conditional.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@@ -96,41 +96,51 @@\n \n \n \n
    \n \n-
    Conditional.h File Reference
    \n+
    BayesTree.h File Reference
    \n
    \n
    \n \n-

    Base class for conditional densities. \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::Conditional< FACTOR, DERIVEDCONDITIONAL >
    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

    Detailed Description

    \n-

    Base class for conditional densities.

    \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,24 +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-Conditional.h File Reference\n-Base class for conditional densities. _\bM_\bo_\br_\be_\b._\b._\b.\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:_\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:_\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 *\b**\b**\b**\b**\b* D\bDe\bet\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+Bayes Tree is a tree of cliques of a Bayes Chain.\n Author\n Frank Dellaert\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+ * _\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/a00587.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00587.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,5 @@\n var a00587 = [\n- [\"gtsam::Conditional< FACTOR, DERIVEDCONDITIONAL >\", \"a03572.html\", \"a03572\"]\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/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/Conditional.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,185 +98,295 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    Conditional.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
    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+
    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-
    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+
    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-
    100 bool equals(const This& c, double tol = 1e-9) const;
    \n+\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+\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+
    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-
    204
    \n-
    205 private:
    \n-
    206
    \n+
    207 template<class CONTAINER>
    \n+
    208 Key findParentClique(const CONTAINER& parents) const;
    \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+
    211 void clear();
    \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+\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+
    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
    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-
    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+
    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,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Conditional.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@@ -15,271 +15,437 @@\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-26\n-27 class _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs; // forward declaration.\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-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+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+*/\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-100 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& c, double tol = 1e-9) const;\n+_\b1_\b0_\b0 _\bN_\bo_\bd_\be_\bs _\bn_\bo_\bd_\be_\bs_\b_;\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+_\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+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-204\n-205 private:\n-206\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-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+211 void _\bc_\bl_\be_\ba_\br();\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+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-_\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+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 Global functions in a separate testing 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:_\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+_\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+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 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+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- * _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\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/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/VariableSlots.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/VariableIndex.h File Reference\n \n \n \n \n \n \n \n@@ -96,46 +96,42 @@\n \n \n \n
    \n \n-
    VariableSlots.h File Reference
    \n+
    VariableIndex.h 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+\n+\n \n

    \n Classes

    class  gtsam::VariableSlots
     A combined factor is assembled as one block of rows for each component factor. More...
    class  gtsam::VariableIndex
     The VariableIndex class computes and stores the block column structure of a factor graph. More...
     
    struct  gtsam::traits< VariableSlots >
     traits More...
    struct  gtsam::traits< VariableIndex >
     traits More...
     
    \n \n \n \n \n

    \n Namespaces

    namespace  gtsam
     Global functions in a separate testing namespace.
     
    \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+
    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,33 +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-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+VariableIndex.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:_\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+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n+\u00a0 The _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx class computes and stores the block column structure\n+ of a 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 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs_\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_\bI_\bn_\bd_\be_\bx_\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-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+ March 26, 2013\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+ * _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\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/a00590.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00590.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var a00590 = [\n- [\"gtsam::VariableSlots\", \"a03708.html\", \"a03708\"],\n- [\"gtsam::traits< VariableSlots >\", \"a03712.html\", null]\n+ [\"gtsam::VariableIndex\", \"a03700.html\", \"a03700\"],\n+ [\"gtsam::traits< VariableIndex >\", \"a03704.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00590_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00590_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/VariableSlots.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/VariableIndex.h Source File\n \n \n \n \n \n \n \n@@ -98,126 +98,199 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    VariableSlots.h
    \n+
    VariableIndex.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/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+
    18#pragma once
    \n+
    19
    \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 <iostream>
    \n-
    30#include <string>
    \n+
    29#include <cassert>
    \n+
    30#include <stdexcept>
    \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+
    \n+
    43class GTSAM_EXPORT VariableIndex {
    \n+
    44 public:
    \n+
    45 typedef boost::shared_ptr<VariableIndex> shared_ptr;
    \n+
    46 typedef FactorIndices::iterator Factor_iterator;
    \n+
    47 typedef FactorIndices::const_iterator Factor_const_iterator;
    \n+
    48
    \n+
    49 protected:
    \n+\n+
    51 KeyMap index_;
    \n+
    52 size_t nFactors_; // Number of factors in the original factor graph.
    \n+
    53 size_t nEntries_; // Sum of involved variable counts of each factor.
    \n+
    54
    \n+
    55 public:
    \n+
    56 typedef KeyMap::const_iterator const_iterator;
    \n+
    57 typedef KeyMap::const_iterator iterator;
    \n+
    58 typedef KeyMap::value_type value_type;
    \n+
    59
    \n+
    62
    \n+
    64 VariableIndex() : nFactors_(0), nEntries_(0) {}
    \n+
    65
    \n+
    70 template <class FG>
    \n+
    \n+
    71 explicit VariableIndex(const FG& factorGraph) : nFactors_(0), nEntries_(0) {
    \n+
    72 augment(factorGraph);
    \n+
    73 }
    \n+
    \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+
    78
    \n+
    80 size_t size() const { return index_.size(); }
    \n+
    81
    \n+
    83 size_t nFactors() const { return nFactors_; }
    \n+
    84
    \n+
    86 size_t nEntries() const { return nEntries_; }
    \n+
    87
    \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-
    Concept check for values that can be used in unit tests.
    \n-
    Timing utilities.
    \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+
    89 const FactorIndices& operator[](Key variable) const {
    \n+
    90 KeyMap::const_iterator item = index_.find(variable);
    \n+
    91 if(item == index_.end())
    \n+
    92 throw std::invalid_argument("Requested non-existent variable from VariableIndex");
    \n+
    93 else
    \n+
    94 return item->second;
    \n+
    95 }
    \n+
    \n+
    96
    \n+
    \n+
    98 bool empty(Key variable) const {
    \n+
    99 return (*this)[variable].empty();
    \n+
    100 }
    \n+
    \n+
    101
    \n+
    105
    \n+
    107 bool equals(const VariableIndex& other, double tol=0.0) const;
    \n+
    108
    \n+
    110 void print(const std::string& str = "VariableIndex: ",
    \n+
    111 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
    \n+
    112
    \n+
    117 void outputMetisFormat(std::ostream& os) const;
    \n+
    118
    \n+
    119
    \n+
    123
    \n+
    128 template<class FG>
    \n+
    129 void augment(const FG& factors, boost::optional<const FactorIndices&> newFactorIndices = boost::none);
    \n+
    130
    \n+
    136 void augmentExistingFactor(const FactorIndex factorIndex, const KeySet & newKeys);
    \n+
    137
    \n+
    148 template<typename ITERATOR, class FG>
    \n+
    149 void remove(ITERATOR firstFactor, ITERATOR lastFactor, const FG& factors);
    \n+
    150
    \n+
    152 template<typename ITERATOR>
    \n+
    153 void removeUnusedVariables(ITERATOR firstKey, ITERATOR lastKey);
    \n+
    154
    \n+
    156 const_iterator begin() const { return index_.begin(); }
    \n+
    157
    \n+
    159 const_iterator end() const { return index_.end(); }
    \n+
    160
    \n+
    162 const_iterator find(Key key) const { return index_.find(key); }
    \n+
    163
    \n+
    164protected:
    \n+
    165 Factor_iterator factorsBegin(Key variable) { return internalAt(variable).begin(); }
    \n+
    166 Factor_iterator factorsEnd(Key variable) { return internalAt(variable).end(); }
    \n+
    167
    \n+
    168 Factor_const_iterator factorsBegin(Key variable) const { return internalAt(variable).begin(); }
    \n+
    169 Factor_const_iterator factorsEnd(Key variable) const { return internalAt(variable).end(); }
    \n+
    170
    \n+
    \n+
    172 const FactorIndices& internalAt(Key variable) const {
    \n+
    173 const KeyMap::const_iterator item = index_.find(variable);
    \n+
    174 assert(item != index_.end());
    \n+
    175 return item->second;
    \n+
    176 }
    \n+
    \n+
    177
    \n+
    \n+\n+
    180 const KeyMap::iterator item = index_.find(variable);
    \n+
    181 assert(item != index_.end());
    \n+
    182 return item->second;
    \n+
    183 }
    \n+
    \n+
    184
    \n+
    185private:
    \n+
    187 friend class boost::serialization::access;
    \n+
    188 template<class ARCHIVE>
    \n+
    189 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
    \n+
    190 ar & BOOST_SERIALIZATION_NVP(index_);
    \n+
    191 ar & BOOST_SERIALIZATION_NVP(nFactors_);
    \n+
    192 ar & BOOST_SERIALIZATION_NVP(nEntries_);
    \n+
    193 }
    \n+
    194
    \n+
    196};
    \n+
    \n+
    197
    \n+
    199template<>
    \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::map that uses boost's fast_pool_allocator.
    \n+
    A thin wrapper around std::vector that uses a custom allocator.
    \n+\n+
    The base class for all factors.
    \n+\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
    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-
    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+
    The VariableIndex class computes and stores the block column structure of a factor graph.
    Definition VariableIndex.h:43
    \n+
    const FactorIndices & internalAt(Key variable) const
    Internal version of 'at' that asserts existence.
    Definition VariableIndex.h:172
    \n+
    size_t nEntries() const
    The number of nonzero blocks, i.e. the number of variable-factor entries.
    Definition VariableIndex.h:86
    \n+
    const_iterator begin() const
    Iterator to the first variable entry.
    Definition VariableIndex.h:156
    \n+
    const_iterator find(Key key) const
    Find the iterator for the requested variable entry.
    Definition VariableIndex.h:162
    \n+
    const FactorIndices & operator[](Key variable) const
    Access a list of factors by variable.
    Definition VariableIndex.h:89
    \n+
    VariableIndex(const FG &factorGraph)
    Create a VariableIndex that computes and stores the block column structure of a factor graph.
    Definition VariableIndex.h:71
    \n+
    bool empty(Key variable) const
    Return true if no factors associated with a variable.
    Definition VariableIndex.h:98
    \n+
    size_t size() const
    The number of variable entries. This is equal to the number of unique variable Keys.
    Definition VariableIndex.h:80
    \n+
    FactorIndices & internalAt(Key variable)
    Internal version of 'at' that asserts existence.
    Definition VariableIndex.h:179
    \n+
    const_iterator end() const
    Iterator to the first variable entry.
    Definition VariableIndex.h:159
    \n+
    VariableIndex()
    Default constructor, creates an empty VariableIndex.
    Definition VariableIndex.h:64
    \n+
    size_t nFactors() const
    The number of factors in the original factor graph.
    Definition VariableIndex.h:83
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,149 +1,255 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-VariableSlots.h\n+VariableIndex.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+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/_\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+24#include \n+25\n+26#include \n+27#include \n 28\n-29#include \n-30#include \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+_\b4_\b3class GTSAM_EXPORT _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx {\n+44 public:\n+45 typedef boost::shared_ptr shared_ptr;\n+46 typedef FactorIndices::iterator Factor_iterator;\n+47 typedef FactorIndices::const_iterator Factor_const_iterator;\n+48\n+49 protected:\n+50 typedef _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b> _\bK_\be_\by_\bM_\ba_\bp;\n+51 _\bK_\be_\by_\bM_\ba_\bp index_;\n+52 size_t nFactors_; // Number of factors in the original factor graph.\n+53 size_t nEntries_; // Sum of involved variable counts of each factor.\n+54\n+55 public:\n+56 typedef KeyMap::const_iterator const_iterator;\n+57 typedef KeyMap::const_iterator iterator;\n+58 typedef KeyMap::value_type value_type;\n+59\n+62\n+_\b6_\b4 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx() : nFactors_(0), nEntries_(0) {}\n+65\n+70 template \n+_\b7_\b1 explicit _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx(const FG& factorGraph) : nFactors_(0), nEntries_(0) {\n+72 augment(factorGraph);\n+73 }\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+78\n+_\b8_\b0 size_t _\bs_\bi_\bz_\be() const { return index_.size(); }\n+81\n+_\b8_\b3 size_t _\bn_\bF_\ba_\bc_\bt_\bo_\br_\bs() const { return nFactors_; }\n+84\n+_\b8_\b6 size_t _\bn_\bE_\bn_\bt_\br_\bi_\be_\bs() const { return nEntries_; }\n+87\n+_\b8_\b9 const _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](_\bK_\be_\by variable) const {\n+90 KeyMap::const_iterator item = index_.find(variable);\n+91 if(item == index_.end())\n+92 throw std::invalid_argument(\"Requested non-existent variable from\n+VariableIndex\");\n+93 else\n+94 return item->second;\n+95 }\n+96\n+_\b9_\b8 bool _\be_\bm_\bp_\bt_\by(_\bK_\be_\by variable) const {\n+99 return (*this)[variable].empty();\n+100 }\n+101\n+105\n+107 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx& other, double tol=0.0) const;\n+108\n+110 void _\bp_\br_\bi_\bn_\bt(const std::string& str = \"VariableIndex: \",\n+111 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const;\n+112\n+117 void outputMetisFormat(std::ostream& os) const;\n+118\n+119\n+123\n+128 template\n+129 void augment(const FG& factors, boost::optional\n+newFactorIndices = boost::none);\n+130\n+136 void augmentExistingFactor(const _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\be_\bx factorIndex, const _\bK_\be_\by_\bS_\be_\bt &\n+newKeys);\n+137\n+148 template\n+149 void remove(ITERATOR firstFactor, ITERATOR lastFactor, const FG& factors);\n+150\n+152 template\n+153 void removeUnusedVariables(ITERATOR firstKey, ITERATOR lastKey);\n+154\n+_\b1_\b5_\b6 const_iterator _\bb_\be_\bg_\bi_\bn() const { return index_.begin(); }\n+157\n+_\b1_\b5_\b9 const_iterator _\be_\bn_\bd() const { return index_.end(); }\n+160\n+_\b1_\b6_\b2 const_iterator _\bf_\bi_\bn_\bd(_\bK_\be_\by key) const { return index_.find(key); }\n+163\n+164protected:\n+165 Factor_iterator factorsBegin(_\bK_\be_\by variable) { return internalAt\n+(variable).begin(); }\n+166 Factor_iterator factorsEnd(Key variable) { return internalAt(variable).end\n+(); }\n+167\n+168 Factor_const_iterator factorsBegin(Key variable) const { return internalAt\n+(variable).begin(); }\n+169 Factor_const_iterator factorsEnd(Key variable) const { return internalAt\n+(variable).end(); }\n+170\n+_\b1_\b7_\b2 const _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs& _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\bA_\bt(_\bK_\be_\by variable) const {\n+173 const KeyMap::const_iterator item = index_.find(variable);\n+174 assert(item != index_.end());\n+175 return item->second;\n+176 }\n+177\n+_\b1_\b7_\b9 _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs& _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\bA_\bt(_\bK_\be_\by variable) {\n+180 const KeyMap::iterator item = index_.find(variable);\n+181 assert(item != index_.end());\n+182 return item->second;\n+183 }\n+184\n+185private:\n+_\b1_\b8_\b7 friend class boost::serialization::access;\n+188 template\n+189 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+190 ar & BOOST_SERIALIZATION_NVP(index_);\n+191 ar & BOOST_SERIALIZATION_NVP(nFactors_);\n+192 ar & BOOST_SERIALIZATION_NVP(nEntries_);\n+193 }\n+194\n+196};\n+197\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_\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-_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n-Timing utilities.\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+_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b-_\bi_\bn_\bl_\b._\bh\n+_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+The base class for all factors.\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:_\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:_\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:_\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:_\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:_\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:_\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:_\bn_\bE_\bn_\bt_\br_\bi_\be_\bs\n+size_t nEntries() const\n+The number of nonzero blocks, i.e. the number of variable-factor entries.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bb_\be_\bg_\bi_\bn\n+const_iterator begin() const\n+Iterator to the first variable entry.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bf_\bi_\bn_\bd\n+const_iterator find(Key key) const\n+Find the iterator for the requested variable entry.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:162\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n+const FactorIndices & operator[](Key variable) const\n+Access a list of factors by variable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:89\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n+VariableIndex(const FG &factorGraph)\n+Create a VariableIndex that 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:71\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:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bs_\bi_\bz_\be\n+size_t size() const\n+The number of variable entries. This is equal to the number of unique variable\n+Keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:80\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+FactorIndices & internalAt(Key variable)\n+Internal version of 'at' that asserts existence.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:179\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\be_\bn_\bd\n+const_iterator end() const\n+Iterator to the first variable entry.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:159\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n+VariableIndex()\n+Default constructor, creates an empty VariableIndex.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bs\n+size_t nFactors() const\n+The number of factors in the original factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:83\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+ * _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\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/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/FactorGraph-inst.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,45 +94,87 @@\n \n \n \n \n \n
    \n \n-
    FactorGraph-inst.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    inference-inst.h File Reference
    \n \n
    \n \n-

    Factor Graph Base Class. \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-

    Factor Graph Base Class.

    \n-
    Author
    Carlos Nieto
    \n-
    \n-Frank Dellaert
    \n-
    \n-Alireza Fathi
    \n-
    \n-Michael Kaess
    \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-
    \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,25 +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-FactorGraph-inst.h File Reference\n-Factor Graph Base Class. _\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+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 N\bNa\bam\bme\bes\bsp\bpa\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-Factor Graph Base Class.\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- Carlos Nieto\n Frank Dellaert\n- Alireza Fathi\n- Michael Kaess\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- * _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\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 * Generated on Tue Jan 9 2024 05:51: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_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/FactorGraph-inst.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,243 +98,109 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    FactorGraph-inst.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+
    8* See LICENSE for the license information
    \n
    9
    \n-
    10 * -------------------------------------------------------------------------- */
    \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-
    \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-
    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-
    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-
    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-
    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-
    184
    \n-
    185} // namespace gtsam
    \n-
    Factor Graph Base Class.
    \n+
    20#pragma once
    \n+
    21
    \n+
    22#include <boost/shared_ptr.hpp>
    \n+
    23#include <utility>
    \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+\n+
    A thin wrapper around std::vector that uses a custom allocator.
    \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-
    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+
    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,305 +1,127 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-FactorGraph-inst.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+8* See LICENSE for the license information\n 9\n-10 * -------------------------------------------------------------------------\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-*/\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-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+20#pragma once\n+21\n+22#include \n+23#include \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+*/\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 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-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-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-*/\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+90\n+91 }\n+92}\n+_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\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+_\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_\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:_\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- * _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\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 * Generated on Tue Jan 9 2024 05:51: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_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00596_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-
    22#include <gtsam/base/Vector.h>
    \n-
    23#include <gtsam/inference/Key.h>
    \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
    30
    \n@@ -171,17 +171,17 @@\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-
    typedef and functions to augment Eigen's VectorXd
    \n-
    A thin wrapper around std::vector that uses a custom allocator.
    \n-\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
    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", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -71,18 +71,18 @@\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-_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-typedef and functions to augment Eigen's VectorXd\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:_\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"}]}, {"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/MetisIndex.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,41 +94,34 @@\n \n \n \n \n \n
    \n \n-
    MetisIndex.h File Reference
    \n+
    VariableIndex-inl.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::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-
    Author
    Andrew Melim
    \n-
    Date
    Oct. 10, 2014
    \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,26 +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-MetisIndex.h File Reference\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:_\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 Author\n- Andrew Melim\n+ Richard Roberts\n Date\n- Oct. 10, 2014\n+ March 26, 2013\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+ * _\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/a00599_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00599_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/VariableIndex-inl.h Source File\n \n \n \n \n \n \n \n@@ -98,113 +98,125 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    MetisIndex.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
    6 * Authors: Frank Dellaert, 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+
    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-
    23#include <gtsam/base/timing.h>
    \n+\n+
    21#include <gtsam/base/timing.h>
    \n+
    22
    \n+
    23namespace gtsam {
    \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+
    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+
    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 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-
    Timing utilities.
    \n-
    Typedefs for easier changing of types.
    \n-\n-
    Factor Graph Base Class.
    \n-\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< FactorIndex > FactorIndices
    Define collection types:
    Definition Factor.h:34
    \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+
    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,117 +1,141 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-MetisIndex.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 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n-9 * -------------------------------------------------------------------------\n+9\n+10 * -------------------------------------------------------------------------\n - */\n-10\n-17#pragma once\n-18\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/_\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+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// 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-89 }\n-90 size_t nValues() const {\n-91 return nKeys_;\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+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 _\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+93}\n+94\n+95}\n _\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n Timing utilities.\n-_\bt_\by_\bp_\be_\bs_\b._\bh\n-Typedefs for easier changing of types.\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-_\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx_\b-_\bi_\bn_\bl_\b._\bh\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:_\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:_\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:_\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- * _\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-_\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/a00605_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00605_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/EliminationTree-inst.h Source File\n \n \n \n \n \n \n \n@@ -98,483 +98,363 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    EliminateableFactorGraph-inst.h
    \n+
    EliminationTree-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#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+
    18#pragma once
    \n+
    19
    \n+
    20#include <boost/make_shared.hpp>
    \n+
    21#include <stack>
    \n+
    22
    \n+
    23#include <gtsam/base/timing.h>
    \n+\n+\n+\n+\n+\n+
    29
    \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+
    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 /* ************************************************************************* */
    \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+
    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 /* ************************************************************************* */
    \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+
    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 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+
    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 FACTORGRAPH>
    \n-
    \n-
    171 std::pair<boost::shared_ptr<typename EliminateableFactorGraph<FACTORGRAPH>::BayesNetType>, boost::shared_ptr<FACTORGRAPH> >
    \n+
    170 template<class BAYESNET, class GRAPH>
    \n+\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+
    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-
    Variable elimination algorithms for factor graphs.
    \n-
    Exceptions that may be thrown by inference algorithms.
    \n+
    Timing utilities.
    \n+\n+\n+
    Contains generic inference algorithms that convert between templated graphical models,...
    \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
    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+
    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+
    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-
    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,609 +1,449 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-EliminateableFactorGraph-inst.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-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+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_\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+31\n+32 /* *************************************************************************\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+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-60\n-61 /* *************************************************************************\n+59\n+60 /* *************************************************************************\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+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-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+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 /\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-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+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-_\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+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-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+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-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+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-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+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-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+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+_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\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+Contains generic inference algorithms that convert between templated graphical\n+models,...\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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+_\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:_\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 > > 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+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:_\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\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+ * _\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/a00608_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00608_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/EliminationTree.h Source File\n \n \n \n \n \n \n \n@@ -98,338 +98,160 @@\n
    No Matches
    \n
    \n
    \n
    \n
    \n \n
    \n-
    graph-inl.h
    \n+
    EliminationTree.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-
    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 KEY>
    \n-
    \n-
    50std::list<KEY> predecessorMap2Keys(const PredecessorMap<KEY>& p_map) {
    \n-
    51
    \n-
    52 typedef typename SGraph<KEY>::Vertex 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-
    \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-
    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-
    111
    \n-
    112 return g;
    \n-
    113}
    \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-
    114
    \n-
    115/* ************************************************************************* */
    \n-
    116template<class G, class V, class KEY>
    \n-
    117boost::tuple<G, V, std::map<KEY,V> >
    \n-
    \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+
    109
    \n+
    112 EliminationTree(const This& other) { *this = other; }
    \n+
    113
    \n+
    116 This& operator=(const This& other);
    \n+
    117
    \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+
    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+
    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 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+
    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-
    156private:
    \n-
    157 boost::shared_ptr<Values> config_;
    \n+
    157 void swap(This& other);
    \n
    158
    \n-
    159public:
    \n-
    160
    \n-
    161 compose_key_visitor(boost::shared_ptr<Values> config_in) {config_ = config_in;}
    \n+
    159 protected:
    \n+\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+
    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-
    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+
    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 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,377 +1,237 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-graph-inl.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-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-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-51\n-52 typedef typename SGraph::Vertex 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+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-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+_\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 // 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-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+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 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+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+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 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+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-156private:\n-157 boost::shared_ptr config_;\n+157 void _\bs_\bw_\ba_\bp(_\bT_\bh_\bi_\bs& other);\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+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 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+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:_\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_\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_\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 * _\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+ * _\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/a00611.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00611.html", "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/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/MetisIndex-inl.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@@ -94,34 +94,49 @@\n \n \n \n \n \n
    \n \n-
    MetisIndex-inl.h File Reference
    \n+
    JunctionTree.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-
    Author
    Andrew Melim
    \n-
    Date
    Oct. 10, 2014
    \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,21 +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-MetisIndex-inl.h File Reference\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 _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\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- Author\n- Andrew Melim\n+The junction tree.\n Date\n- Oct. 10, 2014\n+ Feb 4, 2010\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- * _\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx_\b-_\bi_\bn_\bl_\b._\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/a00614_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00614_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-inl.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,104 +98,79 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    MetisIndex-inl.h
    \n+
    JunctionTree.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 <map>
    \n-
    21#include <vector>
    \n+
    21#pragma once
    \n
    22
    \n-
    23namespace gtsam {
    \n+\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+
    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-
    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+\n+
    55 typedef boost::shared_ptr<This> shared_ptr;
    \n+\n+
    57
    \n+
    58 protected:
    \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-
    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+
    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-
    void augment(const FACTORGRAPH &factors)
    Augment the variable index with new factors.
    Definition MetisIndex-inl.h:27
    \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,105 +1,94 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-MetisIndex-inl.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#pragma once\n-19\n-20#include \n-21#include \n+21#pragma once\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/_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b._\bh>\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+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-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 // Number of keys referenced in this factor graph\n-69 nKeys_ = keySet.size();\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+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-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+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:_\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:_\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- * _\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx_\b-_\bi_\bn_\bl_\b._\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/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/JunctionTree-inst.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,50 +94,32 @@\n \n \n \n \n \n
    \n \n-
    JunctionTree-inst.h File Reference
    \n+
    VariableSlots.cpp File Reference
    \n
    \n
    \n-\n-

    The junction tree, template bodies. \n-More...

    \n-\n-

    Go to the source code of this file.

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

    \n-Classes

    struct  gtsam::ConstructorTraversalData< BAYESTREE, GRAPH, ETREE_NODE >
     
    class  gtsam::ConstructorTraversalData< BAYESTREE, GRAPH, ETREE_NODE >::SymbolicFactors
     
    \n \n \n \n \n

    \n Namespaces

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

    Detailed Description

    \n-

    The junction tree, template bodies.

    \n-
    Date
    Feb 4, 2010
    \n-
    Author
    Kai Ni
    \n-
    \n-Frank Dellaert
    \n-
    \n-Richard Roberts
    \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,31 +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-JunctionTree-inst.h File Reference\n-The junction tree, template bodies. _\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_\br_\bu_\bc_\bt_\bo_\br_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\bD_\ba_\bt_\ba_\b<_\b _\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b,_\b _\bG_\bR_\bA_\bP_\bH_\b,_\b _\bE_\bT_\bR_\bE_\bE_\b__\bN_\bO_\bD_\bE_\b _\b>\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt_\bo_\br_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\bD_\ba_\bt_\ba_\b<_\b _\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b,_\b _\bG_\bR_\bA_\bP_\bH_\b,_\b _\bE_\bT_\bR_\bE_\bE_\b__\bN_\bO_\bD_\bE_\b _\b>_\b:_\b:\n- _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bs\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-The junction tree, template bodies.\n- Date\n- Feb 4, 2010\n Author\n- Kai Ni\n- Frank Dellaert\n Richard Roberts\n+ Date\n+ Oct 5, 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-_\bi_\bn_\bs_\bt_\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/a00623_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00623_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-
    Factor Graph Base Class.
    \n-
    Base class for cliques of a BayesTree.
    \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"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00626.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00626.html", "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/BayesTree.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,87 +94,41 @@\n \n \n \n \n \n
    \n \n-
    inference-inst.h File Reference
    \n+Namespaces
    \n+
    BayesTree.cpp 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+

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

    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-

    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 \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,45 +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-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+_\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 N\bNa\bam\bme\bes\bsp\bpa\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+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-*\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- * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b-_\bi_\bn_\bs_\bt_\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/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/VariableSlots.cpp 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,32 +94,51 @@\n \n \n \n \n \n
    \n \n-
    VariableSlots.cpp 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
    Richard Roberts
    \n-
    Date
    Oct 5, 2010
    \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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +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-VariableSlots.cpp 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 Richard Roberts\n+ Andrew Melim\n+ Frank Dellaert\n Date\n- Oct 5, 2010\n+ Sep 2, 2010\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+ * _\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/a00632_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00632_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/EliminateableFactorGraph-inst.h Source File\n \n \n \n \n \n \n \n@@ -98,79 +98,483 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    JunctionTree.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-
    21#pragma once
    \n-
    22
    \n-\n+
    19#pragma once
    \n+
    20
    \n+\n+\n+
    23#include <boost/tuple/tuple.hpp>
    \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-
    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+
    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
    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-
    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+
    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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,94 +1,609 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\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+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-21#pragma once\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+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 // 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-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+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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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\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+ * 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/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/ClusterTree.h 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@@ -94,55 +94,45 @@\n \n \n \n \n \n
    \n \n-
    ClusterTree.h File Reference
    \n+
    FactorGraph-inst.h File Reference
    \n
    \n
    \n \n-

    Collects factorgraph fragments defined on variable clusters, arranged in a tree. \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-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+

    Factor Graph Base Class.

    \n+
    Author
    Carlos Nieto
    \n+
    \n+Frank Dellaert
    \n+
    \n+Alireza Fathi
    \n
    \n-Richard Roberts
    \n+Michael Kaess \n
    \n-Frank Dellaert
    \n+Richard Roberts
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,41 +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-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+_\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-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 N\bNa\bam\bme\bes\bsp\bpa\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+Factor Graph Base Class.\n Author\n- Kai Ni\n- Richard Roberts\n+ Carlos Nieto\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- * _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b._\bh\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/a00635_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00635_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.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@@ -98,273 +98,243 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    ClusterTree.h
    \n+
    FactorGraph-inst.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-
    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-
    \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+
    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+
    \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+
    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+
    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 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+
    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-
    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-
    Concept check for values that can be used in unit tests.
    \n-
    A thin wrapper around std::vector that uses a custom allocator.
    \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+
    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+
    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+
    184
    \n+
    185} // namespace gtsam
    \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+
    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-
    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+
    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,384 +1,305 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ClusterTree.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-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-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-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+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+*/\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\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+61 return true;\n+62}\n+63\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-_\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+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-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-_\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-_\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+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+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+*/\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:_\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:_\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+_\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 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+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 * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b._\bh\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/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/Factor.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@@ -95,56 +95,58 @@\n
    \n \n \n \n
    \n \n-
    Factor.h File Reference
    \n+Namespaces
    \n+
    FactorGraph.h File Reference
    \n \n
    \n \n-

    The base class for all factors. \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

    \n Classes

    class  gtsam::Factor
    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-\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+

    Factor Graph Base Class.

    \n+
    Author
    Carlos Nieto
    \n+
    \n+Christian Potthast
    \n
    \n-Frank Dellaert
    \n+Michael Kaess \n
    \n Richard Roberts
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,32 +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 | _\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+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:_\bF_\ba_\bc_\bt_\bo_\br\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-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+Factor Graph Base Class.\n Author\n- Kai Ni\n- Frank Dellaert\n+ Carlos Nieto\n+ Christian Potthast\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_\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/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,6 @@\n var a00641 = [\n- [\"gtsam::Factor\", \"a03592.html\", \"a03592\"],\n- [\"FactorIndices\", \"a00641.html#a99e63c90a8ac740d99716e73fe97e054\", null]\n+ [\"gtsam::CRefCallPushBack< C >\", \"a03596.html\", null],\n+ [\"gtsam::RefCallPushBack< C >\", \"a03600.html\", null],\n+ [\"gtsam::CRefCallAddCopy< C >\", \"a03604.html\", null],\n+ [\"gtsam::FactorGraph< FACTOR >\", \"a03524.html\", \"a03524\"]\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/Factor.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,183 +98,431 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    Factor.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-
    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+
    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 class HybridValues; // forward declaration of a Value type for error.
    \n-
    38
    \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-
    67 class GTSAM_EXPORT Factor
    \n-
    68 {
    \n+\n+
    68 C& obj;
    \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+
    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-
    131 Key front() const { return keys_.front(); }
    \n+
    130
    \n+\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+
    \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+
    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-
    175 bool equals(const This& other, double tol = 1e-9) const;
    \n-
    176
    \n-
    180
    \n-
    182 KeyVector& keys() { return keys_; }
    \n+
    177
    \n+
    182 void reserve(size_t size) { factors_.reserve(size); }
    \n
    183
    \n-
    185 iterator begin() { return keys_.begin(); }
    \n-
    186
    \n-
    188 iterator end() { return keys_.end(); }
    \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
    \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+
    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-
    208} // \\namespace gtsam
    \n-
    A thin wrapper around std::vector that uses a custom allocator.
    \n-
    Typedefs for easier changing of types.
    \n-\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+
    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+
    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+
    Graphviz formatter.
    \n+
    Factor Graph Base Class.
    \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+\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+
    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
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,260 +1,591 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Factor.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-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+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 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+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 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+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-_\b1_\b3_\b1 _\bK_\be_\by _\bf_\br_\bo_\bn_\bt() const { return keys_.front(); }\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 _\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+_\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+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-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+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-_\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+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\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+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-208} // \\namespace gtsam\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+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+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+_\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_\by_\bp_\be_\bs_\b._\bh\n-Typedefs for easier changing of types.\n+_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b._\bh\n+Graphviz formatter.\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 _\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\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:_\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\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+_\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-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+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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:157\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 * _\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+ * _\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/a00644.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00644.html", "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/DotWriter.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,46 +94,36 @@\n \n \n \n \n \n
    \n \n-
    BayesNet.h File Reference
    \n+
    DotWriter.cpp File Reference
    \n
    \n
    \n \n-

    Bayes network. \n+

    Graphviz formatting for factor graphs. \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-
    \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,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-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+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 *\b**\b**\b**\b**\b* D\bDe\bet\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+Graphviz formatting for factor graphs.\n Author\n Frank Dellaert\n- Richard Roberts\n+ Date\n+ December, 2021\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+ * _\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/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-inst.h 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,37 +94,48 @@\n \n \n \n \n \n
    \n \n-
    ISAM-inst.h File Reference
    \n+
    EliminateableFactorGraph.h File Reference
    \n
    \n
    \n \n-

    Incremental update functionality (iSAM) for BayesTree. \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

    Detailed Description

    \n-

    Incremental update functionality (iSAM) for BayesTree.

    \n-
    Author
    Michael Kaess
    \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,21 +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-ISAM-inst.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\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 *\b**\b**\b**\b**\b* D\bDe\bet\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+Variable elimination algorithms for factor graphs.\n Author\n- Michael Kaess\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- * _\bI_\bS_\bA_\bM_\b-_\bi_\bn_\bs_\bt_\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/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-inst.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@@ -98,100 +98,250 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    ISAM-inst.h
    \n+
    EliminateableFactorGraph.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-
    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+
    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-
    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-
    Incremental update functionality (iSAM) for BayesTree.
    \n-\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+
    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
    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+
    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-
    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,113 +1,347 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ISAM-inst.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 -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, 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-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+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-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-_\bI_\bS_\bA_\bM_\b._\bh\n-Incremental update functionality (iSAM) for BayesTree.\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+_\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+_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n+Variable ordering for the elimination algorithm.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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 > > 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_\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 * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bI_\bS_\bA_\bM_\b-_\bi_\bn_\bs_\bt_\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/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/EliminationTree.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,43 +96,43 @@\n \n \n \n
    \n \n-
    EliminationTree.h File Reference
    \n+
    inferenceExceptions.h File Reference
    \n
    \n
    \n \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

    \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
    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-
    Author
    Frank Dellaert
    \n-
    \n-Richard Roberts
    \n-
    Date
    Oct 13, 2010
    \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,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-EliminationTree.h File Reference\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- 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+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+Exceptions that may be thrown by inference algorithms.\n Author\n- Frank Dellaert\n Richard Roberts\n Date\n- Oct 13, 2010\n+ Apr 25, 2013\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+ * _\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/a00653.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00653.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a00653 = [\n- [\"gtsam::EliminationTree< BAYESNET, GRAPH >\", \"a03584.html\", \"a03584\"],\n- [\"gtsam::EliminationTree< BAYESNET, GRAPH >::Node\", \"a03588.html\", \"a03588\"]\n+ [\"gtsam::InconsistentEliminationRequested\", \"a03636.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00653_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00653_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/inferenceExceptions.h Source File\n \n \n \n \n \n \n \n@@ -98,160 +98,59 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    EliminationTree.h
    \n+
    inferenceExceptions.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+\n+
    21#include <boost/lexical_cast.hpp>
    \n+
    22#include <exception>
    \n+
    23
    \n+
    24namespace gtsam {
    \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-
    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-
    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-
    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-
    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+
    \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
    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-
    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+
    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,237 +1,54 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-EliminationTree.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 -\n 2\n-3* GTSAM Copyright 2010, Georgia Tech Research Corporation,\n-4* 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+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-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-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-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-_\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+_\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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_\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:_\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- * _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\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/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/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/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/EliminationTree-inst.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@@ -94,36 +94,57 @@\n \n \n \n \n \n
    \n \n-
    EliminationTree-inst.h File Reference
    \n+Classes |\n+Namespaces |\n+Typedefs
    \n+
    Factor.h File Reference
    \n \n
    \n \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+Classes

    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-
    Author
    Frank Dellaert
    \n+

    The base class for all factors.

    \n+
    Author
    Kai Ni
    \n+
    \n+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,22 +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-EliminationTree-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\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:_\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+The base class for all factors.\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- * _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b-_\bi_\bn_\bs_\bt_\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/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/EliminationTree-inst.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,363 +98,183 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    EliminationTree-inst.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+
    3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
    \n+
    4 * Atlanta, Georgia 30332-0415
    \n+
    5 * All Rights Reserved
    \n+
    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-
    22
    \n-
    23#include <gtsam/base/timing.h>
    \n-\n-\n-\n-\n-\n-
    29
    \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-
    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+
    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 /* ************************************************************************* */
    \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+
    75 public:
    \n+
    77 typedef KeyVector::iterator iterator;
    \n+
    78
    \n+
    80 typedef KeyVector::const_iterator const_iterator;
    \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+
    82 protected:
    \n+
    83
    \n+\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+
    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-
    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+
    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-
    169 /* ************************************************************************* */
    \n-
    170 template<class BAYESNET, class GRAPH>
    \n-\n-
    \n-\n-
    173 {
    \n-
    174 // Start by duplicating the tree.
    \n-\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-
    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+
    182 KeyVector& keys() { return keys_; }
    \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-
    Contains generic inference algorithms that convert between templated graphical models,...
    \n-\n-
    Variable ordering for the elimination algorithm.
    \n-\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+
    A thin wrapper around std::vector that uses a custom allocator.
    \n+
    Typedefs for easier changing of types.
    \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-
    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-
    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+
    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,449 +1,260 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-EliminationTree-inst.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+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n+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_\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-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-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+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 /* *************************************************************************\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+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 // 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+82 protected:\n+83\n+_\b8_\b5 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br _\bk_\be_\by_\bs_\b_;\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+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-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+_\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-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+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-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+_\b1_\b8_\b2 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& _\bk_\be_\by_\bs() { return keys_; }\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-_\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-_\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-_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh\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+_\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_\by_\bp_\be_\bs_\b._\bh\n+Typedefs for easier changing of types.\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\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:_\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+_\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 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:_\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 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- * _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b-_\bi_\bn_\bs_\bt_\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/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/ISAM.h 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@@ -95,43 +95,96 @@\n \n \n \n \n
    \n \n-
    ISAM.h File Reference
    \n+Namespaces |\n+Typedefs |\n+Functions
    \n+
    Key.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+\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...
    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-

    Incremental update functionality (iSAM) for BayesTree.

    \n-
    Author
    Michael Kaess
    \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,26 +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-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 | _\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-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+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-Incremental update functionality (iSAM) for BayesTree.\n Author\n- Michael Kaess\n+ Richard Roberts\n+ Alex Cunningham\n+ Date\n+ Feb 20, 2012\n+ Author\n+ Richard Roberts\n+ Date\n+ Feb 20, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bI_\bS_\bA_\bM_\b._\bh\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/a00662.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00662.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,11 @@\n var a00662 = [\n- [\"gtsam::ISAM< BAYESTREE >\", \"a03640.html\", \"a03640\"]\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 ];\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/ISAM.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@@ -98,80 +98,148 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    ISAM.h
    \n+
    Key.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+
    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-
    40 private:
    \n-
    41 typedef typename Base::Eliminate Eliminate;
    \n-
    42 typedef typename Base::EliminationTraitsType EliminationTraitsType;
    \n-
    43
    \n-
    44 public:
    \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-
    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+
    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+
    127
    \n+
    128
    \n+
    129
    \n+
    130
    \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+
    A thin wrapper around std::set that uses boost's fast_pool_allocator.
    \n+
    A thin wrapper around std::vector that uses a custom allocator.
    \n+
    Typedefs for easier changing of types.
    \n+
    A thin wrapper around std::list that uses boost's fast_pool_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-
    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 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
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,90 +1,187 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ISAM.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-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+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+_\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-40 private:\n-41 typedef typename Base::Eliminate Eliminate;\n-42 typedef typename Base::EliminationTraitsType EliminationTraitsType;\n-43\n-44 public:\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-_\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+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+127\n+128\n+129\n+130\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+_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b._\bh\n+A thin wrapper around std::set 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_\by_\bp_\be_\bs_\b._\bh\n+Typedefs for easier changing of types.\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+_\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_\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\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bI_\bS_\bA_\bM_\b._\bh\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/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/LabeledSymbol.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@@ -95,68 +95,42 @@\n \n \n \n \n
    \n \n-
    LabeledSymbol.h File Reference
    \n+Namespaces
    \n+
    Conditional.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 \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...
    class  gtsam::Conditional< FACTOR, DERIVEDCONDITIONAL >
     
    \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+

    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,47 +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-LabeledSymbol.h File Reference\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 _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\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+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-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- : Alex Cunningham\n- Date\n- Jan 12, 2010\n+Base class for conditional densities.\n Author\n- : Alex Cunningham\n- : Frank Dellaert\n- : Richard Roberts\n+ Frank Dellaert\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+ * _\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/a00665.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00665.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,8 +1,3 @@\n var a00665 = [\n- [\"gtsam::LabeledSymbol\", \"a03668.html\", \"a03668\"],\n- [\"gtsam::traits< LabeledSymbol >\", \"a03672.html\", null],\n- [\"mrsymbol\", \"a00665.html#ae9a7dceb0a85c356062b55f6939b1419\", null],\n- [\"mrsymbolChr\", \"a00665.html#a37995b0d0610e5fb29c6bd0715151d67\", null],\n- [\"mrsymbolIndex\", \"a00665.html#a4adc1bb606fa4a14d5dbd246f95cecd3\", null],\n- [\"mrsymbolLabel\", \"a00665.html#a4e4c133c4fd0d9d73593f601be2248a6\", null]\n+ [\"gtsam::Conditional< FACTOR, DERIVEDCONDITIONAL >\", \"a03572.html\", \"a03572\"]\n ];\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/LabeledSymbol.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,146 +98,185 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    LabeledSymbol.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-
    20#pragma once
    \n-
    21
    \n-
    22#include <functional>
    \n-\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-
    \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-
    67 inline unsigned char label() const { return label_; }
    \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-
    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+
    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-
    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-
    112
    \n-
    113private:
    \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-
    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-
    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+
    \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-
    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-
    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+
    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-
    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+
    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,189 +1,285 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-LabeledSymbol.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-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+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-_\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_\b7 inline unsigned char _\bl_\ba_\bb_\be_\bl() const { return label_; }\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-_\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+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-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-112\n-113private:\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 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-_\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+_\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:_\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:_\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:_\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:_\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:_\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- * _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl_\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/a00668.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00668.html", "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-inl.h File Reference\n \n \n \n \n \n \n \n@@ -94,51 +94,34 @@\n \n \n \n \n \n
    \n \n-
    Ordering.h File Reference
    \n+
    MetisIndex-inl.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-

    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,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-Ordering.h File Reference\n-Variable ordering for the elimination algorithm. _\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-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- 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-_\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/a00668_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00668_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-inl.h Source File\n \n \n \n \n \n \n \n@@ -98,255 +98,104 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    Ordering.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
    7
    \n
    8 * See LICENSE for the license information
    \n
    9
    \n
    10 * -------------------------------------------------------------------------- */
    \n
    11
    \n-
    21#pragma once
    \n+
    18#pragma once
    \n+
    19
    \n+
    20#include <map>
    \n+
    21#include <vector>
    \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+
    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-
    32namespace gtsam {
    \n-
    33
    \n-
    \n-
    34class Ordering: public KeyVector {
    \n-
    35protected:
    \n-
    36 typedef KeyVector Base;
    \n-
    37
    \n-
    38public:
    \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-
    \n-\n-
    42 COLAMD, METIS, NATURAL, CUSTOM
    \n-
    43 };
    \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-
    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 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+
    83
    \n+
    84} // \\ gtsam
    \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+
    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,312 +1,105 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Ordering.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 7\n 8 * See LICENSE for the license information\n 9\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/_\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+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-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+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-_\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+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 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 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-_\bK_\be_\by_\b._\bh\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+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 // 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:_\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:_\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- * _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\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/a00671_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00671_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+
    Timing utilities.
    \n+\n+
    Bayes Tree is a tree of cliques of a Bayes Chain.
    \n+
    Variable ordering for the elimination algorithm.
    \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_\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+_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+Bayes Tree is a tree of cliques of a Bayes Chain.\n+_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n+Variable ordering for the elimination algorithm.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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/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/inferenceExceptions.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@@ -96,43 +96,42 @@\n
    \n
    \n \n
    \n \n-
    inferenceExceptions.h File Reference
    \n+
    BayesTreeCliqueBase.h File Reference
    \n
    \n
    \n \n-

    Exceptions that may be thrown by inference algorithms. \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 Classes

    class  gtsam::InconsistentEliminationRequested
     An inference algorithm was called with inconsistent arguments. More...
    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-

    Exceptions that may be thrown by inference algorithms.

    \n-
    Author
    Richard Roberts
    \n-
    Date
    Apr 25, 2013
    \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,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-inferenceExceptions.h File Reference\n-Exceptions that may be thrown by inference algorithms. _\bM_\bo_\br_\be_\b._\b._\b.\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-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:_\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-Exceptions that may be thrown by inference algorithms.\n+Base class for cliques of a BayesTree.\n Author\n- Richard Roberts\n- Date\n- Apr 25, 2013\n+ Richard Roberts and 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+ * _\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/a00674.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00674.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00674 = [\n- [\"gtsam::InconsistentEliminationRequested\", \"a03636.html\", null]\n+ [\"gtsam::BayesTreeCliqueBase< DERIVED, FACTORGRAPH >\", \"a03552.html\", \"a03552\"]\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/inferenceExceptions.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-
    inferenceExceptions.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,43 +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-\n-
    21#include <boost/lexical_cast.hpp>
    \n-
    22#include <exception>
    \n-
    23
    \n-
    24namespace 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-
    \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+
    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+
    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+
    A thin wrapper around std::vector that uses a custom allocator.
    \n+
    Typedefs for easier changing of types.
    \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-
    An inference algorithm was called with inconsistent arguments.
    Definition inferenceExceptions.h:29
    \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
    \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-inferenceExceptions.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,39 +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/_\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+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-_\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+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+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+_\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_\by_\bp_\be_\bs_\b._\bh\n+Typedefs for easier changing of types.\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:_\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_\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\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+ * _\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/a00677.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00677.html", "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/LabeledSymbol.h File Reference\n \n \n \n \n \n \n \n@@ -94,41 +94,69 @@\n \n \n \n \n \n
    \n \n-
    Symbol.cpp File Reference
    \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+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+\n

    \n Functions

    \n-GTSAM_EXPORT std::ostream & gtsam::operator<< (std::ostream &os, const Symbol &symbol)
     
    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
    June 9, 2012
    \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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +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-Symbol.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+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 N\bNa\bam\bme\bes\bsp\bpa\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+ _\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- June 9, 2012\n+ Jan 12, 2010\n+ Author\n+ : Alex Cunningham\n+ Date\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- * _\bS_\by_\bm_\bb_\bo_\bl_\b._\bc_\bp_\bp\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/a00680_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00680_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/graph-inl.h Source File\n \n \n \n \n \n \n \n@@ -98,226 +98,338 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    BayesTreeCliqueBase.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+
    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 <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+
    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 KEY>
    \n+
    \n+
    50std::list<KEY> predecessorMap2Keys(const PredecessorMap<KEY>& p_map) {
    \n+
    51
    \n+
    52 typedef typename SGraph<KEY>::Vertex 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+
    \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
    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+
    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-
    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+
    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-
    147 size_t nrChildren() const { return children.size(); }
    \n-
    148
    \n-
    150 const derived_ptr operator[](size_t i) const { return children[i]; }
    \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-
    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+
    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-
    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+
    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-\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+
    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 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+
    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}
    \n-
    A thin wrapper around std::vector that uses a custom allocator.
    \n-
    Typedefs for easier changing of types.
    \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+
    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-
    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+
    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,315 +1,377 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\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+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+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 <_\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-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+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+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+51\n+52 typedef typename SGraph::Vertex 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+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 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+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-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+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-_\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+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-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+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-_\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+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-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+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 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+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}\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_\by_\bp_\be_\bs_\b._\bh\n-Typedefs for easier changing of types.\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+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:_\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:_\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- * _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\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/a00683.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00683.html", "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.h 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@@ -96,42 +96,44 @@\n \n \n \n
    \n \n-
    VariableIndex.h File Reference
    \n+
    BayesNet.h 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-\n+\n+\n \n

    \n Classes

    class  gtsam::VariableIndex
     The VariableIndex class computes and stores the block column structure of a factor graph. More...
     
    struct  gtsam::traits< VariableIndex >
     traits More...
    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-
    Author
    Richard Roberts
    \n-
    Date
    March 26, 2013
    \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,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-VariableIndex.h File Reference\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:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n-\u00a0 The _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx class computes and stores the block column structure\n- of a 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 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\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+Bayes network.\n Author\n+ 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- * _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh\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/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/VariableIndex.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@@ -98,199 +98,115 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    VariableIndex.h
    \n+
    BayesNet.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/inference/Key.h>
    \n-
    22#include <gtsam/base/FastMap.h>
    \n-\n-
    24#include <gtsam/dllexport.h>
    \n+
    19#pragma once
    \n+
    20
    \n+\n+
    22
    \n+
    23#include <boost/shared_ptr.hpp>
    \n+
    24#include <string>
    \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-
    31
    \n-
    32namespace gtsam {
    \n-
    33
    \n-
    \n-
    43class GTSAM_EXPORT VariableIndex {
    \n-
    44 public:
    \n-
    45 typedef boost::shared_ptr<VariableIndex> shared_ptr;
    \n-
    46 typedef FactorIndices::iterator Factor_iterator;
    \n-
    47 typedef FactorIndices::const_iterator Factor_const_iterator;
    \n-
    48
    \n-
    49 protected:
    \n-\n-
    51 KeyMap index_;
    \n-
    52 size_t nFactors_; // Number of factors in the original factor graph.
    \n-
    53 size_t nEntries_; // Sum of involved variable counts of each factor.
    \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-
    55 public:
    \n-
    56 typedef KeyMap::const_iterator const_iterator;
    \n-
    57 typedef KeyMap::const_iterator iterator;
    \n-
    58 typedef KeyMap::value_type value_type;
    \n-
    59
    \n-
    62
    \n-
    64 VariableIndex() : nFactors_(0), nEntries_(0) {}
    \n-
    65
    \n-
    70 template <class FG>
    \n-
    \n-
    71 explicit VariableIndex(const FG& factorGraph) : nFactors_(0), nEntries_(0) {
    \n-
    72 augment(factorGraph);
    \n-
    73 }
    \n-
    \n-
    74
    \n-
    78
    \n-
    80 size_t size() const { return index_.size(); }
    \n-
    81
    \n-
    83 size_t nFactors() const { return nFactors_; }
    \n-
    84
    \n-
    86 size_t nEntries() const { return nEntries_; }
    \n-
    87
    \n-
    \n-
    89 const FactorIndices& operator[](Key variable) const {
    \n-
    90 KeyMap::const_iterator item = index_.find(variable);
    \n-
    91 if(item == index_.end())
    \n-
    92 throw std::invalid_argument("Requested non-existent variable from VariableIndex");
    \n-
    93 else
    \n-
    94 return item->second;
    \n-
    95 }
    \n-
    \n-
    96
    \n-
    \n-
    98 bool empty(Key variable) const {
    \n-
    99 return (*this)[variable].empty();
    \n-
    100 }
    \n+
    \n+
    60 BayesNet(std::initializer_list<sharedConditional> conditionals)
    \n+
    61 : Base(conditionals) {}
    \n
    \n+
    62
    \n+
    64
    \n+
    65 public:
    \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+
    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-
    105
    \n-
    107 bool equals(const VariableIndex& other, double tol=0.0) const;
    \n-
    108
    \n-
    110 void print(const std::string& str = "VariableIndex: ",
    \n-
    111 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
    \n-
    112
    \n-
    117 void outputMetisFormat(std::ostream& os) const;
    \n-
    118
    \n-
    119
    \n-
    123
    \n-
    128 template<class FG>
    \n-
    129 void augment(const FG& factors, boost::optional<const FactorIndices&> newFactorIndices = boost::none);
    \n-
    130
    \n-
    136 void augmentExistingFactor(const FactorIndex factorIndex, const KeySet & newKeys);
    \n-
    137
    \n-
    148 template<typename ITERATOR, class FG>
    \n-
    149 void remove(ITERATOR firstFactor, ITERATOR lastFactor, const FG& factors);
    \n-
    150
    \n-
    152 template<typename ITERATOR>
    \n-
    153 void removeUnusedVariables(ITERATOR firstKey, ITERATOR lastKey);
    \n-
    154
    \n-
    156 const_iterator begin() const { return index_.begin(); }
    \n-
    157
    \n-
    159 const_iterator end() const { return index_.end(); }
    \n-
    160
    \n-
    162 const_iterator find(Key key) const { return index_.find(key); }
    \n-
    163
    \n-
    164protected:
    \n-
    165 Factor_iterator factorsBegin(Key variable) { return internalAt(variable).begin(); }
    \n-
    166 Factor_iterator factorsEnd(Key variable) { return internalAt(variable).end(); }
    \n-
    167
    \n-
    168 Factor_const_iterator factorsBegin(Key variable) const { return internalAt(variable).begin(); }
    \n-
    169 Factor_const_iterator factorsEnd(Key variable) const { return internalAt(variable).end(); }
    \n-
    170
    \n-
    \n-
    172 const FactorIndices& internalAt(Key variable) const {
    \n-
    173 const KeyMap::const_iterator item = index_.find(variable);
    \n-
    174 assert(item != index_.end());
    \n-
    175 return item->second;
    \n-
    176 }
    \n-
    \n-
    177
    \n-
    \n-\n-
    180 const KeyMap::iterator item = index_.find(variable);
    \n-
    181 assert(item != index_.end());
    \n-
    182 return item->second;
    \n-
    183 }
    \n-
    \n-
    184
    \n-
    185private:
    \n-
    187 friend class boost::serialization::access;
    \n-
    188 template<class ARCHIVE>
    \n-
    189 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
    \n-
    190 ar & BOOST_SERIALIZATION_NVP(index_);
    \n-
    191 ar & BOOST_SERIALIZATION_NVP(nFactors_);
    \n-
    192 ar & BOOST_SERIALIZATION_NVP(nEntries_);
    \n-
    193 }
    \n-
    194
    \n-
    196};
    \n-
    \n-
    197
    \n-
    199template<>
    \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::map that uses boost's fast_pool_allocator.
    \n-
    A thin wrapper around std::vector that uses a custom allocator.
    \n-\n-
    The base class for all factors.
    \n-\n+
    103};
    \n+
    \n+
    104
    \n+
    105} // namespace gtsam
    \n+
    106
    \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-
    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-
    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-
    The VariableIndex class computes and stores the block column structure of a factor graph.
    Definition VariableIndex.h:43
    \n-
    const FactorIndices & internalAt(Key variable) const
    Internal version of 'at' that asserts existence.
    Definition VariableIndex.h:172
    \n-
    size_t nEntries() const
    The number of nonzero blocks, i.e. the number of variable-factor entries.
    Definition VariableIndex.h:86
    \n-
    const_iterator begin() const
    Iterator to the first variable entry.
    Definition VariableIndex.h:156
    \n-
    const_iterator find(Key key) const
    Find the iterator for the requested variable entry.
    Definition VariableIndex.h:162
    \n-
    const FactorIndices & operator[](Key variable) const
    Access a list of factors by variable.
    Definition VariableIndex.h:89
    \n-
    VariableIndex(const FG &factorGraph)
    Create a VariableIndex that computes and stores the block column structure of a factor graph.
    Definition VariableIndex.h:71
    \n-
    bool empty(Key variable) const
    Return true if no factors associated with a variable.
    Definition VariableIndex.h:98
    \n-
    size_t size() const
    The number of variable entries. This is equal to the number of unique variable Keys.
    Definition VariableIndex.h:80
    \n-
    FactorIndices & internalAt(Key variable)
    Internal version of 'at' that asserts existence.
    Definition VariableIndex.h:179
    \n-
    const_iterator end() const
    Iterator to the first variable entry.
    Definition VariableIndex.h:159
    \n-
    VariableIndex()
    Default constructor, creates an empty VariableIndex.
    Definition VariableIndex.h:64
    \n-
    size_t nFactors() const
    The number of factors in the original factor graph.
    Definition VariableIndex.h:83
    \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,255 +1,141 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-VariableIndex.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-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/_\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 \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-26#include \n-27#include \n-28\n-29#include \n-30#include \n-31\n-32namespace _\bg_\bt_\bs_\ba_\bm {\n-33\n-_\b4_\b3class GTSAM_EXPORT _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx {\n-44 public:\n-45 typedef boost::shared_ptr shared_ptr;\n-46 typedef FactorIndices::iterator Factor_iterator;\n-47 typedef FactorIndices::const_iterator Factor_const_iterator;\n-48\n-49 protected:\n-50 typedef _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b> _\bK_\be_\by_\bM_\ba_\bp;\n-51 _\bK_\be_\by_\bM_\ba_\bp index_;\n-52 size_t nFactors_; // Number of factors in the original factor graph.\n-53 size_t nEntries_; // Sum of involved variable counts of each factor.\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-55 public:\n-56 typedef KeyMap::const_iterator const_iterator;\n-57 typedef KeyMap::const_iterator iterator;\n-58 typedef KeyMap::value_type value_type;\n-59\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-_\b6_\b4 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx() : nFactors_(0), nEntries_(0) {}\n-65\n-70 template \n-_\b7_\b1 explicit _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx(const FG& factorGraph) : nFactors_(0), nEntries_(0) {\n-72 augment(factorGraph);\n-73 }\n-74\n-78\n-_\b8_\b0 size_t _\bs_\bi_\bz_\be() const { return index_.size(); }\n-81\n-_\b8_\b3 size_t _\bn_\bF_\ba_\bc_\bt_\bo_\br_\bs() const { return nFactors_; }\n-84\n-_\b8_\b6 size_t _\bn_\bE_\bn_\bt_\br_\bi_\be_\bs() const { return nEntries_; }\n-87\n-_\b8_\b9 const _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](_\bK_\be_\by variable) const {\n-90 KeyMap::const_iterator item = index_.find(variable);\n-91 if(item == index_.end())\n-92 throw std::invalid_argument(\"Requested non-existent variable from\n-VariableIndex\");\n-93 else\n-94 return item->second;\n-95 }\n-96\n-_\b9_\b8 bool _\be_\bm_\bp_\bt_\by(_\bK_\be_\by variable) const {\n-99 return (*this)[variable].empty();\n-100 }\n+64\n+65 public:\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+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-105\n-107 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx& other, double tol=0.0) const;\n-108\n-110 void _\bp_\br_\bi_\bn_\bt(const std::string& str = \"VariableIndex: \",\n-111 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const;\n-112\n-117 void outputMetisFormat(std::ostream& os) const;\n-118\n-119\n-123\n-128 template\n-129 void augment(const FG& factors, boost::optional\n-newFactorIndices = boost::none);\n-130\n-136 void augmentExistingFactor(const _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\be_\bx factorIndex, const _\bK_\be_\by_\bS_\be_\bt &\n-newKeys);\n-137\n-148 template\n-149 void remove(ITERATOR firstFactor, ITERATOR lastFactor, const FG& factors);\n-150\n-152 template\n-153 void removeUnusedVariables(ITERATOR firstKey, ITERATOR lastKey);\n-154\n-_\b1_\b5_\b6 const_iterator _\bb_\be_\bg_\bi_\bn() const { return index_.begin(); }\n-157\n-_\b1_\b5_\b9 const_iterator _\be_\bn_\bd() const { return index_.end(); }\n-160\n-_\b1_\b6_\b2 const_iterator _\bf_\bi_\bn_\bd(_\bK_\be_\by key) const { return index_.find(key); }\n-163\n-164protected:\n-165 Factor_iterator factorsBegin(_\bK_\be_\by variable) { return internalAt\n-(variable).begin(); }\n-166 Factor_iterator factorsEnd(Key variable) { return internalAt(variable).end\n-(); }\n-167\n-168 Factor_const_iterator factorsBegin(Key variable) const { return internalAt\n-(variable).begin(); }\n-169 Factor_const_iterator factorsEnd(Key variable) const { return internalAt\n-(variable).end(); }\n-170\n-_\b1_\b7_\b2 const _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs& _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\bA_\bt(_\bK_\be_\by variable) const {\n-173 const KeyMap::const_iterator item = index_.find(variable);\n-174 assert(item != index_.end());\n-175 return item->second;\n-176 }\n-177\n-_\b1_\b7_\b9 _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs& _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\bA_\bt(_\bK_\be_\by variable) {\n-180 const KeyMap::iterator item = index_.find(variable);\n-181 assert(item != index_.end());\n-182 return item->second;\n-183 }\n-184\n-185private:\n-_\b1_\b8_\b7 friend class boost::serialization::access;\n-188 template\n-189 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-190 ar & BOOST_SERIALIZATION_NVP(index_);\n-191 ar & BOOST_SERIALIZATION_NVP(nFactors_);\n-192 ar & BOOST_SERIALIZATION_NVP(nEntries_);\n-193 }\n-194\n-196};\n-197\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_\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-_\bK_\be_\by_\b._\bh\n-_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-The base class for all factors.\n-_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b-_\bi_\bn_\bl_\b._\bh\n+103};\n+104\n+105} // namespace gtsam\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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-_\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:_\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:_\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_\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:_\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:_\bn_\bE_\bn_\bt_\br_\bi_\be_\bs\n-size_t nEntries() const\n-The number of nonzero blocks, i.e. the number of variable-factor entries.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-const_iterator begin() const\n-Iterator to the first variable entry.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bf_\bi_\bn_\bd\n-const_iterator find(Key key) const\n-Find the iterator for the requested variable entry.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:162\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-const FactorIndices & operator[](Key variable) const\n-Access a list of factors by variable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:89\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n-VariableIndex(const FG &factorGraph)\n-Create a VariableIndex that 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:71\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:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bs_\bi_\bz_\be\n-size_t size() const\n-The number of variable entries. This is equal to the number of unique variable\n-Keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:80\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-FactorIndices & internalAt(Key variable)\n-Internal version of 'at' that asserts existence.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:179\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\be_\bn_\bd\n-const_iterator end() const\n-Iterator to the first variable entry.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:159\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n-VariableIndex()\n-Default constructor, creates an empty VariableIndex.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bs\n-size_t nFactors() const\n-The number of factors in the original factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:83\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 * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh\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/a00695.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00695.html", "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/VariableSlots.h File Reference\n \n \n \n \n \n \n \n@@ -96,48 +96,46 @@\n \n \n \n
    \n \n-
    ClusterTree-inst.h File Reference
    \n+
    VariableSlots.h File Reference
    \n
    \n
    \n \n-

    Collects factorgraph fragments defined on variable clusters, arranged in a tree. \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 Classes

    struct  gtsam::EliminationData< CLUSTERTREE >
    class  gtsam::VariableSlots
     A combined factor is assembled as one block of rows for each component factor. More...
     
    class  gtsam::EliminationData< CLUSTERTREE >::EliminationPostOrderVisitor
    struct  gtsam::traits< VariableSlots >
     traits 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+

    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,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-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+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-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+ 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:_\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+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 *\b**\b**\b**\b**\b* D\bDe\bet\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+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- Frank Dellaert\n+ Date\n+ Oct 4, 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-_\bi_\bn_\bs_\bt_\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/a00695.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00695.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var a00695 = [\n- [\"gtsam::EliminationData< CLUSTERTREE >\", \"a03556.html\", \"a03556\"],\n- [\"gtsam::EliminationData< CLUSTERTREE >::EliminationPostOrderVisitor\", \"a03560.html\", null]\n+ [\"gtsam::VariableSlots\", \"a03708.html\", \"a03708\"],\n+ [\"gtsam::traits< VariableSlots >\", \"a03712.html\", null]\n ];\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/ClusterTree-inst.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,357 +98,126 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    ClusterTree-inst.h
    \n+
    VariableSlots.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-
    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+
    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-
    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+
    32namespace gtsam {
    \n+
    33
    \n+
    \n+
    52class VariableSlots : public FastMap<Key, FastVector<size_t> > {
    \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+
    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
    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-\n-
    Timing utilities.
    \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-
    Variable ordering for the elimination algorithm.
    \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+
    Timing utilities.
    \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+
    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-
    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+
    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,439 +1,149 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ClusterTree-inst.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-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-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+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-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+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-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+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 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_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b-_\bi_\bn_\bs_\bt_\b._\bh\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 _\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n Timing utilities.\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-_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n-Variable ordering for the elimination algorithm.\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+_\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:_\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:_\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- * _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b-_\bi_\bn_\bs_\bt_\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/a00698.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00698.html", "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/ISAM.h File Reference\n \n \n \n \n \n \n \n@@ -94,41 +94,44 @@\n \n \n \n \n \n
    \n \n-
    BayesTree.cpp File Reference
    \n+
    ISAM.h File Reference
    \n
    \n
    \n \n-

    Bayes Tree is a tree of cliques of a Bayes Chain. \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+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-

    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+

    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-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+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-Bayes Tree is a tree of cliques of a Bayes Chain.\n+Incremental update functionality (iSAM) for BayesTree.\n Author\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- * _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bc_\bp_\bp\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/a00701.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00701.html", "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/ClusterTree-inst.h File Reference\n \n \n \n \n \n \n \n@@ -94,51 +94,50 @@\n \n \n \n \n \n
    \n \n-
    BayesTree-inst.h File Reference
    \n+Classes |\n+Namespaces
    \n+
    ClusterTree-inst.h File Reference
    \n \n
    \n \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 More...

    \n \n

    Go to the source code of this file.

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

    \n+Classes

    struct  gtsam::EliminationData< CLUSTERTREE >
     
    class  gtsam::EliminationData< CLUSTERTREE >::EliminationPostOrderVisitor
     
    \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-
    \n-Michael Kaess
    \n+

    Collects factorgraph fragments defined on variable clusters, arranged in a tree.

    \n+
    Date
    Oct 8, 2013
    \n+
    Author
    Kai Ni
    \n
    \n-Viorela Ila
    \n+Richard Roberts \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,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-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+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_\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+\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+Collects factorgraph fragments defined on variable clusters, arranged in a\n+tree.\n+ Date\n+ Oct 8, 2013\n Author\n- Frank Dellaert\n- Michael Kaess\n- Viorela Ila\n+ Kai Ni\n Richard Roberts\n+ Frank Dellaert\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+ * _\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/a00701_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00701_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/ClusterTree-inst.h Source File\n \n \n \n \n \n \n \n@@ -98,680 +98,357 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    BayesTree-inst.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-
    21#pragma once
    \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-
    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+\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+
    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 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+
    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 /* ************************************************************************* */
    \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+
    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-
    \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-
    \n-
    \n-
    \n-
    \n-
    \n-
    \n-
    \n-
    \n-
    \n-
    \n-
    \n-
    \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-
    Timing utilities.
    \n-
    Bayes Tree is a tree of cliques of a Bayes Chain.
    \n-
    Variable ordering for the elimination algorithm.
    \n+
    Collects factorgraph fragments defined on variable clusters, arranged in a tree.
    \n+
    Bayes Tree is a tree of cliques of a Bayes Chain.
    \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
    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+
    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-
    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-
    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+
    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,757 +1,439 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-BayesTree-inst.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-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-28#include \n-29#include \n-30\n-31namespace _\bg_\bt_\bs_\ba_\bm {\n-32\n-33 /* *************************************************************************\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-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+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-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+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-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+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-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+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\n-92 /* *************************************************************************\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-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+_\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 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+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 /\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+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-_\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+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 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n Bayes Tree is a tree of cliques of a Bayes Chain.\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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:_\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\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+_\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.\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+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\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+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-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+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- * _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b-_\bi_\bn_\bs_\bt_\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/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/GaussianBayesTree-inl.h 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,51 +94,55 @@\n
    \n
    \n
    \n
    \n \n
    \n \n-
    GaussianBayesTree-inl.h File Reference
    \n+
    ConjugateGradientSolver.h File Reference
    \n
    \n
    \n \n-

    Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree. \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-\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+template<class S , class V >
    gtsam::preconditionedConjugateGradient (const S &system, const V &initial, const ConjugateGradientParameters &parameters)
     
    \n

    Detailed Description

    \n-

    Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.

    \n-

    GaussianBayesTree

    Author
    Frank Dellaert
    \n+

    Implementation of Conjugate Gradient solver for a linear system.

    \n+
    Author
    Yong-Dian Jian
    \n
    \n-Richard Roberts
    \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,32 +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-GaussianBayesTree-inl.h 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+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- 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+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-Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.\n-GaussianBayesTree\n+Implementation of Conjugate Gradient solver for a linear system.\n Author\n- Frank Dellaert\n- Richard Roberts\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- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b-_\bi_\bn_\bl_\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 * Generated on Tue Jan 9 2024 05:51: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/a00704_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-inl.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@@ -98,15 +98,15 @@\n
    No Matches
    \n
    \n
    \n
    \n
    \n \n
    \n-
    GaussianBayesTree-inl.h
    \n+
    ConjugateGradientSolver.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,57 +114,173 @@\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/linear/GaussianBayesTree.h> // Only to help Eclipse
    \n+\n
    23
    \n-
    24#include <stdarg.h>
    \n+
    24namespace gtsam {
    \n
    25
    \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+
    \n+\n+
    30
    \n+
    31public:
    \n+\n+
    33 typedef boost::shared_ptr<ConjugateGradientParameters> shared_ptr;
    \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+\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/* ************************************************************************* */
    \n-
    56} // \\namespace internal
    \n-
    57} // \\namespace gtsam
    \n-
    Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.
    \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 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+
    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-
    The Factor::error simply extracts the.
    \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-GaussianBayesTree-inl.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,58 +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 <_\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+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-24#include \n+24namespace _\bg_\bt_\bs_\ba_\bm {\n 25\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+_\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 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+_\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/* *************************************************************************\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+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 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+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-_\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:_\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 * _\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+ * _\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/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/VectorValues.cpp 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,50 +94,38 @@\n \n \n \n \n \n
    \n \n-
    VectorValues.cpp File Reference
    \n+Namespaces
    \n+
    SubgraphSolver.cpp File Reference
    \n \n
    \n \n-

    Implementations for VectorValues. \n+

    Subgraph Solver from IROS 2010. \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-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+

    Subgraph Solver from IROS 2010.

    \n+
    Date
    2010
    \n+
    Author
    Frank Dellaert
    \n
    \n-Alex Cunningham
    \n+Yong Dian Jian
    \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 | _\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+_\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-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+Subgraph Solver from IROS 2010.\n+ Date\n+ 2010\n Author\n- Richard Roberts\n- Alex Cunningham\n+ Frank Dellaert\n+ Yong Dian Jian\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+ * _\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/a00713.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00713.html", "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/IterativeSolver.h File Reference\n \n \n \n \n \n \n \n@@ -96,40 +96,52 @@\n \n \n \n
    \n \n-
    GaussianEliminationTree.h 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

    \n Classes

    class  gtsam::GaussianEliminationTree
    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,25 +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-GaussianEliminationTree.h File Reference\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:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\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._\bh\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/a00713.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00713.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,6 @@\n var a00713 = [\n- [\"gtsam::GaussianEliminationTree\", \"a03776.html\", \"a03776\"]\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 ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00713_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00713_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/GaussianEliminationTree.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/IterativeSolver.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-
    GaussianEliminationTree.h
    \n+
    IterativeSolver.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,182 @@\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 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+\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+
    30#include <map>
    \n+
    31
    \n+
    32namespace gtsam {
    \n+
    33
    \n+
    34// Forward declarations
    \n+
    35struct KeyInfoEntry;
    \n+
    36class KeyInfo;
    \n+
    37class GaussianFactorGraph;
    \n+
    38class Values;
    \n+
    39class VectorValues;
    \n+
    40
    \n+
    \n+\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+
    46public:
    \n+
    47
    \n+
    48 typedef boost::shared_ptr<IterativeOptimizationParameters> shared_ptr;
    \n+
    49 enum Verbosity {
    \n+
    50 SILENT = 0, COMPLEXITY, ERROR
    \n+
    51 } verbosity_;
    \n+
    52
    \n+
    53public:
    \n+
    54
    \n+
    55 IterativeOptimizationParameters(Verbosity v = SILENT) :
    \n+
    56 verbosity_(v) {
    \n+
    57 }
    \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+
    60 }
    \n+
    61
    \n+
    62 /* utility */
    \n+
    63 inline Verbosity verbosity() const {
    \n+
    64 return verbosity_;
    \n+
    65 }
    \n+
    66 GTSAM_EXPORT std::string getVerbosity() const;
    \n+
    67 GTSAM_EXPORT void setVerbosity(const std::string &s);
    \n+
    68
    \n+
    69 /* matlab interface */
    \n+
    70 GTSAM_EXPORT void print() const;
    \n+
    71
    \n+
    72 /* virtual print function */
    \n+
    73 GTSAM_EXPORT virtual void print(std::ostream &os) const;
    \n+
    74
    \n+
    75 /* for serialization */
    \n+
    76 friend std::ostream& operator<<(std::ostream &os,
    \n+\n+
    78
    \n+
    79 GTSAM_EXPORT static Verbosity verbosityTranslator(const std::string &s);
    \n+
    80 GTSAM_EXPORT static std::string verbosityTranslator(Verbosity v);
    \n+
    81};
    \n+
    \n+
    82
    \n+
    \n+\n+
    87public:
    \n+
    88 typedef boost::shared_ptr<IterativeSolver> shared_ptr;
    \n+\n+
    90 }
    \n+
    91 virtual ~IterativeSolver() {
    \n+
    92 }
    \n+
    93
    \n+
    94 /* interface to the nonlinear optimizer, without metadata, damping and initial estimate */
    \n+
    95 GTSAM_EXPORT VectorValues optimize(const GaussianFactorGraph &gfg,
    \n+
    96 boost::optional<const KeyInfo&> = boost::none,
    \n+
    97 boost::optional<const std::map<Key, Vector>&> lambda = boost::none);
    \n+
    98
    \n+
    99 /* interface to the nonlinear optimizer, without initial estimate */
    \n+
    100 GTSAM_EXPORT VectorValues optimize(const GaussianFactorGraph &gfg, const KeyInfo &keyInfo,
    \n+
    101 const std::map<Key, Vector> &lambda);
    \n+
    102
    \n+
    103 /* interface to the nonlinear optimizer that the subclasses have to implement */
    \n+
    104 virtual VectorValues optimize(const GaussianFactorGraph &gfg,
    \n+
    105 const KeyInfo &keyInfo, const std::map<Key, Vector> &lambda,
    \n+
    106 const VectorValues &initial) = 0;
    \n+
    107
    \n+
    108};
    \n+
    \n+
    109
    \n+
    \n+
    114struct GTSAM_EXPORT KeyInfoEntry {
    \n+
    115 size_t index, dim, start;
    \n+
    116 KeyInfoEntry() {
    \n+
    117 }
    \n+
    118 KeyInfoEntry(size_t idx, size_t d, Key start) :
    \n+
    119 index(idx), dim(d), start(start) {
    \n+
    120 }
    \n+
    121};
    \n+
    \n+
    122
    \n+
    \n+
    126class GTSAM_EXPORT KeyInfo: public std::map<Key, KeyInfoEntry> {
    \n+
    127
    \n+
    128public:
    \n+
    129
    \n+
    130 typedef std::map<Key, KeyInfoEntry> Base;
    \n+
    131
    \n+
    132protected:
    \n+
    133
    \n+
    134 Ordering ordering_;
    \n+
    135 size_t numCols_;
    \n+
    136
    \n+
    137 void initialize(const GaussianFactorGraph &fg);
    \n+
    138
    \n+
    139public:
    \n+
    140
    \n+
    \n+\n+
    143 numCols_(0) {
    \n+
    144 }
    \n+
    \n+
    145
    \n+
    147 KeyInfo(const GaussianFactorGraph &fg);
    \n+
    148
    \n+
    150 KeyInfo(const GaussianFactorGraph &fg, const Ordering &ordering);
    \n+
    151
    \n+
    \n+
    153 inline size_t numCols() const {
    \n+
    154 return numCols_;
    \n+
    155 }
    \n+
    \n+
    156
    \n+
    \n+
    158 inline const Ordering & ordering() const {
    \n+
    159 return ordering_;
    \n+
    160 }
    \n+
    \n+
    161
    \n+
    163 std::vector<size_t> colSpec() const;
    \n+
    164
    \n+
    166 VectorValues x0() const;
    \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
    Global functions in a separate testing namespace.
    Definition chartTesting.h:28
    \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+
    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-
    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+
    parameters for iterative linear solvers
    Definition IterativeSolver.h:44
    \n+
    Base class for Iterative Solvers like SubgraphSolver.
    Definition IterativeSolver.h:86
    \n+
    Handy data structure for iterative solvers key to (index, dimension, start)
    Definition IterativeSolver.h:114
    \n+
    Handy data structure for iterative solvers.
    Definition IterativeSolver.h:126
    \n+
    const Ordering & ordering() const
    Return the ordering.
    Definition IterativeSolver.h:158
    \n+
    size_t numCols() const
    Return the total number of columns (scalar variables = sum of dimensions)
    Definition IterativeSolver.h:153
    \n+
    KeyInfo()
    Default Constructor.
    Definition IterativeSolver.h:142
    \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+
    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-GaussianEliminationTree.h\n+IterativeSolver.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,204 @@\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-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-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+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\n+24#include \n+25#include \n+26#include \n+27\n+28#include \n+29#include \n+30#include \n+31\n+32namespace _\bg_\bt_\bs_\ba_\bm {\n+33\n+34// Forward declarations\n+35struct KeyInfoEntry;\n+36class KeyInfo;\n+37class GaussianFactorGraph;\n+38class _\bV_\ba_\bl_\bu_\be_\bs;\n+39class _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs;\n+40\n+_\b4_\b4class _\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 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+46public:\n+47\n+48 typedef boost::shared_ptr shared_ptr;\n+49 enum Verbosity {\n+50 SILENT = 0, COMPLEXITY, ERROR\n+51 } verbosity_;\n+52\n+53public:\n+54\n+55 _\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(Verbosity v = SILENT) :\n+56 verbosity_(v) {\n+57 }\n 58\n-59 friend class ::EliminationTreeTester;\n-60\n-61 };\n-62\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+59 virtual _\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+60 }\n+61\n+62 /* utility */\n+63 inline Verbosity verbosity() const {\n+64 return verbosity_;\n+65 }\n+66 GTSAM_EXPORT std::string getVerbosity() const;\n+67 GTSAM_EXPORT void setVerbosity(const std::string &s);\n+68\n+69 /* matlab interface */\n+70 GTSAM_EXPORT void print() const;\n+71\n+72 /* virtual print function */\n+73 GTSAM_EXPORT virtual void _\bp_\br_\bi_\bn_\bt(std::ostream &os) const;\n+74\n+75 /* for serialization */\n+76 friend std::ostream& operator<<(std::ostream &os,\n+77 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 &p);\n+78\n+79 GTSAM_EXPORT static Verbosity verbosityTranslator(const std::string &s);\n+80 GTSAM_EXPORT static std::string verbosityTranslator(Verbosity v);\n+81};\n+82\n+_\b8_\b6class _\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br {\n+87public:\n+88 typedef boost::shared_ptr shared_ptr;\n+89 _\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br() {\n+90 }\n+91 virtual _\b~_\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br() {\n+92 }\n+93\n+94 /* interface to the nonlinear optimizer, without metadata, damping and\n+initial estimate */\n+95 GTSAM_EXPORT _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs optimize(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg,\n+96 boost::optional = boost::none,\n+97 boost::optional&> lambda = boost::none);\n+98\n+99 /* interface to the nonlinear optimizer, without initial estimate */\n+100 GTSAM_EXPORT _\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, const\n+_\bK_\be_\by_\bI_\bn_\bf_\bo &keyInfo,\n+101 const std::map &lambda);\n+102\n+103 /* interface to the nonlinear optimizer that the subclasses have to\n+implement */\n+104 virtual _\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+105 const _\bK_\be_\by_\bI_\bn_\bf_\bo &keyInfo, const std::map &lambda,\n+106 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &initial) = 0;\n+107\n+108};\n+109\n+_\b1_\b1_\b4struct GTSAM_EXPORT _\bK_\be_\by_\bI_\bn_\bf_\bo_\bE_\bn_\bt_\br_\by {\n+115 size_t index, dim, start;\n+116 _\bK_\be_\by_\bI_\bn_\bf_\bo_\bE_\bn_\bt_\br_\by() {\n+117 }\n+118 _\bK_\be_\by_\bI_\bn_\bf_\bo_\bE_\bn_\bt_\br_\by(size_t idx, size_t d, _\bK_\be_\by start) :\n+119 index(idx), dim(d), start(start) {\n+120 }\n+121};\n+122\n+_\b1_\b2_\b6class GTSAM_EXPORT _\bK_\be_\by_\bI_\bn_\bf_\bo: public std::map {\n+127\n+128public:\n+129\n+130 typedef std::map Base;\n+131\n+132protected:\n+133\n+134 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg ordering_;\n+135 size_t numCols_;\n+136\n+137 void initialize(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &fg);\n+138\n+139public:\n+140\n+_\b1_\b4_\b2 _\bK_\be_\by_\bI_\bn_\bf_\bo() :\n+143 numCols_(0) {\n+144 }\n+145\n+147 _\bK_\be_\by_\bI_\bn_\bf_\bo(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &fg);\n+148\n+150 _\bK_\be_\by_\bI_\bn_\bf_\bo(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &fg, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &ordering);\n+151\n+_\b1_\b5_\b3 inline size_t _\bn_\bu_\bm_\bC_\bo_\bl_\bs() const {\n+154 return numCols_;\n+155 }\n+156\n+_\b1_\b5_\b8 inline const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg & _\bo_\br_\bd_\be_\br_\bi_\bn_\bg() const {\n+159 return ordering_;\n+160 }\n+161\n+163 std::vector colSpec() const;\n+164\n+166 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs x0() const;\n+167\n+169 Vector x0vector() const;\n+170\n+171};\n+172\n+173} // \\ namespace gtsam\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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_\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:_\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_\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:_\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_\bE_\bn_\bt_\br_\by\n+Handy data structure for iterative solvers key to (index, dimension, start)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn IterativeSolver.h:114\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:_\bK_\be_\by_\bI_\bn_\bf_\bo_\b:_\b:_\bo_\br_\bd_\be_\br_\bi_\bn_\bg\n+const Ordering & ordering() const\n+Return the ordering.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn IterativeSolver.h:158\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bI_\bn_\bf_\bo_\b:_\b:_\bn_\bu_\bm_\bC_\bo_\bl_\bs\n+size_t numCols() const\n+Return the total number of columns (scalar variables = sum of dimensions)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn IterativeSolver.h:153\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bI_\bn_\bf_\bo_\b:_\b:_\bK_\be_\by_\bI_\bn_\bf_\bo\n+KeyInfo()\n+Default Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn IterativeSolver.h:142\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+_\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_\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_\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/GaussianConditional.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-
    GaussianConditional.cpp File Reference
    \n+
    GaussianConditional-inl.h File Reference
    \n
    \n
    \n \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

    Conditional Gaussian Base class.

    \n-
    Author
    Christian Potthast, Frank Dellaert
    \n+
    Author
    Christian Potthast
    \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-GaussianConditional.cpp File Reference\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 Conditional Gaussian Base class.\n Author\n- Christian Potthast, Frank Dellaert\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_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\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/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/JacobianFactor.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,53 +94,47 @@\n \n \n \n \n \n
    \n \n-
    JacobianFactor.cpp File Reference
    \n+Classes |\n+Namespaces
    \n+
    BinaryJacobianFactor.h File Reference
    \n \n
    \n+\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-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+

    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,38 +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 | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-JacobianFactor.cpp File Reference\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-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+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- Christian Potthast\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._\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/a00719.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00719.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,4 @@\n var a00719 = [\n- [\"EliminateQR\", \"a00719.html#ab56c4bfa363f8c23c48eb078e9c84a9c\", null]\n+ [\"gtsam::BinaryJacobianFactor< M, N1, N2 >\", \"a03720.html\", \"a03720\"],\n+ [\"gtsam::traits< BinaryJacobianFactor< M, N1, N2 > >\", \"a03724.html\", null]\n ];\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/iterative-inl.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,51 +95,52 @@\n \n \n \n \n
    \n \n-
    iterative-inl.h File Reference
    \n+Namespaces
    \n+
    linearExceptions.h File Reference
    \n \n
    \n \n-

    Iterative methods, template implementation. \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 Classes

    struct  gtsam::CGState< S, V, E >
    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::InvalidMatrixBlock
     An exception indicating that a matrix block passed into a JacobianFactor has a different dimensionality than the factor. More...
     
    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-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+

    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,34 +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-iterative-inl.h File Reference\n-Iterative methods, template 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\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-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+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+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 \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-Iterative methods, template implementation.\n+Exceptions that may be thrown by linear solver components.\n Author\n- Frank Dellaert\n+ Richard Roberts\n Date\n- Dec 28, 2009\n+ Aug 17, 2012\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+ * _\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/a00722.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00722.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,6 @@\n var a00722 = [\n- [\"gtsam::CGState< S, V, E >\", \"a03820.html\", \"a03820\"],\n- [\"conjugateGradients\", \"a00722.html#a6516ea957c3a22ddf429cefef1fe9486\", 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/a00722_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00722_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/iterative-inl.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,179 +98,109 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    iterative-inl.h
    \n+
    linearExceptions.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 <boost/shared_ptr.hpp>
    \n+
    18#pragma once
    \n+
    19
    \n+\n+
    21#include <gtsam/base/types.h>
    \n+
    22
    \n+
    23namespace gtsam {
    \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-
    \n-
    30 struct CGState {
    \n-
    31
    \n-\n-
    33 const Parameters &parameters_;
    \n-
    34
    \n-
    35 int k;
    \n-
    36 bool steepest;
    \n-
    37 V g, d;
    \n-
    38 double gamma, threshold;
    \n-
    39 E Ad;
    \n-
    40
    \n-
    41 /* ************************************************************************* */
    \n-
    42 // Constructor
    \n-
    43 CGState(const S& Ab, const V& x, const Parameters &parameters, bool steep):
    \n-
    44 parameters_(parameters),k(0),steepest(steep) {
    \n-
    45
    \n-
    46 // Start with g0 = A'*(A*x0-b), d0 = - g0
    \n-
    47 // i.e., first step is in direction of negative gradient
    \n-
    48 g = Ab.gradient(x);
    \n-
    49 d = g; // instead of negating gradient, alpha will be negated
    \n-
    50
    \n-
    51 // init gamma and calculate threshold
    \n-
    52 gamma = dot(g,g);
    \n-
    53 threshold = std::max(parameters_.epsilon_abs(), parameters_.epsilon() * parameters_.epsilon() * gamma);
    \n-
    54
    \n-
    55 // Allocate and calculate A*d for first iteration
    \n-
    56 if (gamma > parameters_.epsilon_abs()) Ad = Ab * d;
    \n-
    57 }
    \n-
    58
    \n-
    59 /* ************************************************************************* */
    \n-
    60 // print
    \n-
    61 void print(const V& x) {
    \n-
    62 std::cout << "iteration = " << k << std::endl;
    \n-
    63 gtsam::print(x,"x");
    \n-
    64 gtsam::print(g, "g");
    \n-
    65 std::cout << "dotg = " << gamma << std::endl;
    \n-
    66 gtsam::print(d, "d");
    \n-
    67 gtsam::print(Ad, "Ad");
    \n-
    68 }
    \n-
    69
    \n-
    70 /* ************************************************************************* */
    \n-
    71 // step the solution
    \n-
    72 double takeOptimalStep(V& x) {
    \n-
    73 // TODO: can we use gamma instead of dot(d,g) ????? Answer not trivial
    \n-
    74 double alpha = -dot(d, g) / dot(Ad, Ad); // calculate optimal step-size
    \n-
    75 x += alpha * d; // do step in new search direction, x += alpha*d
    \n-
    76 return alpha;
    \n-
    77 }
    \n-
    78
    \n-
    79 /* ************************************************************************* */
    \n-
    80 // take a step, return true if converged
    \n-
    81 bool step(const S& Ab, V& x) {
    \n-
    82
    \n-
    83 if ((++k) >= ((int)parameters_.maxIterations())) return true;
    \n-
    84
    \n-
    85 //---------------------------------->
    \n-
    86 double alpha = takeOptimalStep(x);
    \n-
    87
    \n-
    88 // update gradient (or re-calculate at reset time)
    \n-
    89 if (k % parameters_.reset() == 0) g = Ab.gradient(x);
    \n-
    90 // axpy(alpha, Ab ^ Ad, g); // g += alpha*(Ab^Ad)
    \n-
    91 else Ab.transposeMultiplyAdd(alpha, Ad, g);
    \n-
    92
    \n-
    93 // check for convergence
    \n-
    94 double new_gamma = dot(g, g);
    \n-
    95
    \n-
    96 if (parameters_.verbosity() != ConjugateGradientParameters::SILENT)
    \n-
    97 std::cout << "iteration " << k << ": alpha = " << alpha
    \n-
    98 << ", dotg = " << new_gamma
    \n-
    99 << std::endl;
    \n-
    100
    \n-
    101 if (new_gamma < threshold) return true;
    \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 // calculate new search direction
    \n-
    104 if (steepest) d = g;
    \n-
    105 else {
    \n-
    106 double beta = new_gamma / gamma;
    \n-
    107 // d = g + d*beta;
    \n-
    108 d *= beta;
    \n-
    109 d += 1.0 * g;
    \n-
    110 }
    \n-
    111
    \n-
    112 gamma = new_gamma;
    \n-
    113
    \n-
    114 // In-place recalculation Ad <- A*d to avoid re-allocating Ad
    \n-
    115 Ab.multiplyInPlace(d, Ad);
    \n-
    116 return false;
    \n-
    117 }
    \n-
    118
    \n-
    119 }; // CGState Class
    \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-
    122 // conjugate gradient method.
    \n-
    123 // S: linear system, V: step vector, E: errors
    \n-
    124 template<class S, class V, class E>
    \n-
    \n-
    125 V conjugateGradients(const S& Ab, V x, const ConjugateGradientParameters &parameters, bool steepest) {
    \n-
    126
    \n-
    127 CGState<S, V, E> state(Ab, x, parameters, steepest);
    \n+
    \n+\n+
    125 public:
    \n+\n+\n
    128
    \n-
    129 if (parameters.verbosity() != ConjugateGradientParameters::SILENT)
    \n-
    130 std::cout << "CG: epsilon = " << parameters.epsilon()
    \n-
    131 << ", maxIterations = " << parameters.maxIterations()
    \n-
    132 << ", ||g0||^2 = " << state.gamma
    \n-
    133 << ", threshold = " << state.threshold
    \n-
    134 << std::endl;
    \n-
    135
    \n-
    136 if ( state.gamma < state.threshold ) {
    \n-
    137 if (parameters.verbosity() != ConjugateGradientParameters::SILENT)
    \n-
    138 std::cout << "||g0||^2 < threshold, exiting immediately !" << std::endl;
    \n-
    139
    \n-
    140 return x;
    \n-
    141 }
    \n-
    142
    \n-
    143 // loop maxIterations times
    \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+
    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+
    Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.
    \n+
    Typedefs for easier changing of types.
    \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-
    double threshold
    gamma (squared L2 norm of g) and convergence threshold
    Definition iterative-inl.h:38
    \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+
    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,206 +1,134 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-iterative-inl.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, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, 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/_\bi_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\b._\bh>\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+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-25namespace _\bg_\bt_\bs_\ba_\bm {\n-26\n-27 /* *************************************************************************\n-*/\n-28 // state for CG method\n-29 template\n-_\b3_\b0 struct _\bC_\bG_\bS_\bt_\ba_\bt_\be {\n-31\n-32 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 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs;\n-33 const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters_;\n-34\n-_\b3_\b5 int _\bk;\n-_\b3_\b6 bool _\bs_\bt_\be_\be_\bp_\be_\bs_\bt;\n-_\b3_\b7 V g, _\bd;\n-_\b3_\b8 double gamma, _\bt_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd;\n-39 E Ad;\n-40\n-41 /* *************************************************************************\n-*/\n-42 // Constructor\n-43 _\bC_\bG_\bS_\bt_\ba_\bt_\be(const S& Ab, const V& x, const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters, bool steep):\n-44 parameters_(parameters),_\bk(0),_\bs_\bt_\be_\be_\bp_\be_\bs_\bt(steep) {\n-45\n-46 // Start with g0 = A'*(A*x0-b), d0 = - g0\n-47 // i.e., first step is in direction of negative gradient\n-48 g = Ab.gradient(x);\n-49 _\bd = g; // instead of negating gradient, alpha will be negated\n-50\n-51 // init gamma and calculate threshold\n-52 gamma = _\bd_\bo_\bt(g,g);\n-53 _\bt_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd = std::max(parameters_.epsilon_abs(), parameters_.epsilon() *\n-parameters_.epsilon() * gamma);\n-54\n-55 // Allocate and calculate A*d for first iteration\n-56 if (gamma > parameters_.epsilon_abs()) Ad = Ab * _\bd;\n-57 }\n-58\n-59 /* *************************************************************************\n-*/\n-60 // print\n-61 void print(const V& x) {\n-62 std::cout << \"iteration = \" << _\bk << std::endl;\n-63 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt(x,\"x\");\n-64 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt(g, \"g\");\n-65 std::cout << \"dotg = \" << gamma << std::endl;\n-66 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt(_\bd, \"d\");\n-67 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt(Ad, \"Ad\");\n-68 }\n-69\n-70 /* *************************************************************************\n-*/\n-71 // step the solution\n-72 double takeOptimalStep(V& x) {\n-73 // TODO: can we use gamma instead of dot(d,g) ????? Answer not trivial\n-74 double alpha = -_\bd_\bo_\bt(_\bd, g) / _\bd_\bo_\bt(Ad, Ad); // calculate optimal step-size\n-75 x += alpha * _\bd; // do step in new search direction, x += alpha*d\n-76 return alpha;\n-77 }\n-78\n-79 /* *************************************************************************\n-*/\n-80 // take a step, return true if converged\n-81 bool step(const S& Ab, V& x) {\n-82\n-83 if ((++_\bk) >= ((int)parameters_.maxIterations())) return true;\n-84\n-85 //---------------------------------->\n-86 double alpha = takeOptimalStep(x);\n-87\n-88 // update gradient (or re-calculate at reset time)\n-89 if (_\bk % parameters_.reset() == 0) g = Ab.gradient(x);\n-90 // axpy(alpha, Ab ^ Ad, g); // g += alpha*(Ab^Ad)\n-91 else Ab.transposeMultiplyAdd(alpha, Ad, g);\n-92\n-93 // check for convergence\n-94 double new_gamma = _\bd_\bo_\bt(g, g);\n-95\n-96 if (parameters_.verbosity() != ConjugateGradientParameters::SILENT)\n-97 std::cout << \"iteration \" << _\bk << \": alpha = \" << alpha\n-98 << \", dotg = \" << new_gamma\n-99 << std::endl;\n-100\n-101 if (new_gamma < _\bt_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd) return true;\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 // calculate new search direction\n-104 if (_\bs_\bt_\be_\be_\bp_\be_\bs_\bt) _\bd = g;\n-105 else {\n-106 double beta = new_gamma / gamma;\n-107 // d = g + d*beta;\n-108 _\bd *= beta;\n-109 _\bd += 1.0 * g;\n-110 }\n-111\n-112 gamma = new_gamma;\n-113\n-114 // In-place recalculation Ad <- A*d to avoid re-allocating Ad\n-115 Ab.multiplyInPlace(_\bd, Ad);\n-116 return false;\n-117 }\n-118\n-119 }; // CGState Class\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-122 // conjugate gradient method.\n-123 // S: linear system, V: step vector, E: errors\n-124 template\n-_\b1_\b2_\b5 V _\bc_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bs(const S& Ab, V 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, bool steepest) {\n-126\n-127 _\bC_\bG_\bS_\bt_\ba_\bt_\be_\b<_\bS_\b,_\b _\bV_\b,_\b _\bE_\b> state(Ab, x, parameters, steepest);\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 if (parameters.verbosity() != ConjugateGradientParameters::SILENT)\n-130 std::cout << \"CG: epsilon = \" << parameters.epsilon()\n-131 << \", maxIterations = \" << parameters.maxIterations()\n-132 << \", ||g0||^2 = \" << state.gamma\n-133 << \", threshold = \" << state._\bt_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd\n-134 << std::endl;\n-135\n-136 if ( state.gamma < state._\bt_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd ) {\n-137 if (parameters.verbosity() != ConjugateGradientParameters::SILENT)\n-138 std::cout << \"||g0||^2 < threshold, exiting immediately !\" << std::endl;\n-139\n-140 return x;\n-141 }\n-142\n-143 // loop maxIterations times\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+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_\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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_\bG_\bS_\bt_\ba_\bt_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative-inl.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bG_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bs_\bt_\be_\be_\bp_\be_\bs_\bt\n-bool steepest\n-flag to indicate we are doing steepest descent\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative-inl.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bG_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bt_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd\n-double threshold\n-gamma (squared L2 norm of g) and convergence threshold\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative-inl.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bG_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bk\n-int k\n-iteration\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative-inl.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bG_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bd\n-V d\n-gradient g and search direction d for CG\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative-inl.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:_\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- * _\bi_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\b-_\bi_\bn_\bl_\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/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/RegularJacobianFactor.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@@ -95,44 +95,63 @@\n \n \n \n \n
    \n \n-
    RegularJacobianFactor.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    GaussianFactorGraph.h File Reference
    \n \n
    \n \n-

    JacobianFactor class with fixed sized blcoks. \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 Classes

    class  gtsam::RegularJacobianFactor< D >
     JacobianFactor with constant sized blocks Provides raw memory access versions of linear operator. 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< 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+Functions

    bool gtsam::hasConstraints (const GaussianFactorGraph &factors)
     Evaluates whether linear factors have any constrained noise models.
     
    \n

    Detailed Description

    \n-

    JacobianFactor class with fixed sized blcoks.

    \n-
    Author
    Sungtae An
    \n-
    Date
    Nov 11, 2014
    \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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +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-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+_\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 _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\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+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+ 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+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-_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br class with fixed sized blcoks.\n+Linear Factor Graph where all factors are Gaussians.\n Author\n- Sungtae An\n- Date\n- Nov 11, 2014\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- * _\bR_\be_\bg_\bu_\bl_\ba_\br_\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/a00725.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00725.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,6 @@\n var a00725 = [\n- [\"gtsam::RegularJacobianFactor< D >\", \"a04016.html\", \"a04016\"]\n+ [\"gtsam::EliminationTraits< GaussianFactorGraph >\", \"a03788.html\", \"a03788\"],\n+ [\"gtsam::GaussianFactorGraph\", \"a03792.html\", \"a03792\"],\n+ [\"gtsam::traits< GaussianFactorGraph >\", \"a03796.html\", null],\n+ [\"hasConstraints\", \"a00725.html#a35c269c3243cab16a7475239a9c91021\", 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/RegularJacobianFactor.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@@ -98,215 +98,338 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    RegularJacobianFactor.h
    \n+
    GaussianFactorGraph.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+
    22#pragma once
    \n
    23
    \n-
    24namespace gtsam {
    \n-
    25
    \n-
    31template<size_t D>
    \n-
    \n-\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-
    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+
    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-\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+
    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-
    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+\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-
    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+
    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-\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+
    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-
    125 }
    \n-
    \n-
    126
    \n-
    \n-
    128 VectorValues gradientAtZero() const override {
    \n-\n-
    130 }
    \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 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-
    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-\n-
    Factor Graph Values.
    \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+
    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+
    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+
    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+
    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+
    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+
    vector of errors
    \n+
    A factor with a quadratic error function - a Gaussian.
    \n+\n+
    Factor Graph Values.
    \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
    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+
    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+\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-
    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+
    is the normalization constant.
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,269 +1,493 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-RegularJacobianFactor.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, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, 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/_\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+22#pragma once\n 23\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+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-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+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-_\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+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-_\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+_\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+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+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 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+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+_\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-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+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 _\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+_\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+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+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+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+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+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+_\bE_\br_\br_\bo_\br_\bs_\b._\bh\n+vector of errors\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 _\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+_\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_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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:_\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_\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- * _\bR_\be_\bg_\bu_\bl_\ba_\br_\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/a00728_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00728_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/Errors.h Source File\n \n \n \n \n \n \n \n@@ -98,212 +98,95 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    Preconditioner.h
    \n+
    Errors.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+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 typedef boost::shared_ptr<PreconditionerParameters> shared_ptr;
    \n+
    26#include <string>
    \n
    27
    \n-
    28 enum Kernel { /* Preconditioner Kernel */
    \n-
    29 GTSAM = 0,
    \n-
    30 CHOLMOD /* experimental */
    \n-
    31 } kernel_ ;
    \n+
    28namespace gtsam {
    \n+
    29
    \n+
    30// Forward declarations
    \n+
    31class VectorValues;
    \n
    32
    \n-
    33 enum Verbosity {
    \n-
    34 SILENT = 0,
    \n-
    35 COMPLEXITY = 1,
    \n-
    36 ERROR = 2
    \n-
    37 } verbosity_ ;
    \n+\n+
    35
    \n+
    37GTSAM_EXPORT Errors createErrors(const VectorValues& V);
    \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+
    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-
    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+
    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+
    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-
    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-
    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+
    73} // namespace gtsam
    \n+
    Concept check for values that can be used in unit tests.
    \n+
    A thin wrapper around std::list that uses boost's fast_pool_allocator.
    \n+
    typedef and functions to augment Eigen's VectorXd
    \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+
    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+
    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,232 +1,115 @@\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+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+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 typedef boost::shared_ptr shared_ptr;\n+26#include \n 27\n-28 enum Kernel { /* Preconditioner Kernel */\n-29 GTSAM = 0,\n-30 CHOLMOD /* experimental */\n-31 } kernel_ ;\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-33 enum Verbosity {\n-34 SILENT = 0,\n-35 COMPLEXITY = 1,\n-36 ERROR = 2\n-37 } verbosity_ ;\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 _\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+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-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+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+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 /*\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-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+73} // 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_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh\n+A thin wrapper around std::list that uses boost's fast_pool_allocator.\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:_\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+_\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:_\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 * _\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+ * _\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/a00737_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00737_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-inl.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.h Source File\n \n \n \n \n \n \n \n@@ -98,60 +98,354 @@\n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    GaussianConditional-inl.h
    \n+
    LossFunctions.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+
    1
    \n+
    2/* ----------------------------------------------------------------------------
    \n+
    3
    \n+
    4 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
    \n+
    5 * Atlanta, Georgia 30332-0415
    \n+
    6 * All Rights Reserved
    \n+
    7 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
    \n+
    8
    \n+
    9 * See LICENSE for the license information
    \n+
    10
    \n+
    11 * -------------------------------------------------------------------------- */
    \n+
    12
    \n
    20#pragma once
    \n
    21
    \n-
    22namespace gtsam {
    \n-
    23
    \n-
    24 /* ************************************************************************* */
    \n-
    25 template<typename TERMS>
    \n-
    \n-\n-
    27 size_t nrFrontals, const Vector& d, const SharedDiagonal& sigmas) :
    \n-
    28 BaseFactor(terms, d, sigmas), BaseConditional(nrFrontals) {}
    \n-
    \n-
    29
    \n-
    30 /* ************************************************************************* */
    \n-
    31 template<typename KEYS>
    \n-
    \n-\n-
    33 const KEYS& keys, size_t nrFrontals, const VerticalBlockMatrix& augmentedMatrix, const SharedDiagonal& sigmas) :
    \n-
    34 BaseFactor(keys, augmentedMatrix, sigmas), BaseConditional(nrFrontals) {}
    \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+
    31#include <boost/serialization/singleton.hpp>
    \n+
    32
    \n+
    33namespace gtsam {
    \n+
    34namespace noiseModel {
    \n+
    35// clang-format off
    \n+
    54// clang-format on
    \n+
    55namespace mEstimator {
    \n+
    56
    \n+
    \n+
    63class GTSAM_EXPORT Base {
    \n+
    64 public:
    \n+
    67 enum ReweightScheme { Scalar, Block };
    \n+
    68 typedef boost::shared_ptr<Base> shared_ptr;
    \n+
    69
    \n+
    70 protected:
    \n+\n+
    73
    \n+
    74 public:
    \n+
    75 Base(const ReweightScheme reweight = Block) : reweight_(reweight) {}
    \n+
    76 virtual ~Base() {}
    \n+
    77
    \n+
    79 ReweightScheme reweightScheme() const { return reweight_; }
    \n+
    80
    \n+
    94 virtual double loss(double distance) const { return 0; }
    \n+
    95
    \n+
    106 virtual double weight(double distance) const = 0;
    \n+
    107
    \n+
    108 virtual void print(const std::string &s) const = 0;
    \n+
    109 virtual bool equals(const Base &expected, double tol = 1e-8) const = 0;
    \n+
    110
    \n+
    111 double sqrtWeight(double distance) const { return std::sqrt(weight(distance)); }
    \n+
    112
    \n+
    115 Vector weight(const Vector &error) const;
    \n+
    116
    \n+
    118 Vector sqrtWeight(const Vector &error) const;
    \n+
    119
    \n+
    122 void reweight(Vector &error) const;
    \n+
    123 void reweight(std::vector<Matrix> &A, Vector &error) const;
    \n+
    124 void reweight(Matrix &A, Vector &error) const;
    \n+
    125 void reweight(Matrix &A1, Matrix &A2, Vector &error) const;
    \n+
    126 void reweight(Matrix &A1, Matrix &A2, Matrix &A3, Vector &error) const;
    \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_NVP(reweight_);
    \n+
    134 }
    \n+
    135};
    \n
    \n-
    35
    \n-
    36} // gtsam
    \n+
    136
    \n+
    \n+
    146class GTSAM_EXPORT Null : public Base {
    \n+
    147 public:
    \n+
    148 typedef boost::shared_ptr<Null> shared_ptr;
    \n+
    149
    \n+
    150 Null(const ReweightScheme reweight = Block) : Base(reweight) {}
    \n+
    151 ~Null() override {}
    \n+
    152 double weight(double /*error*/) const override { return 1.0; }
    \n+
    153 double loss(double distance) const override { return 0.5 * distance * distance; }
    \n+
    154 void print(const std::string &s) const override;
    \n+
    155 bool equals(const Base & /*expected*/, double /*tol*/) const override { return true; }
    \n+
    156 static shared_ptr Create();
    \n+
    157
    \n+
    158 private:
    \n+
    160 friend class boost::serialization::access;
    \n+
    161 template <class ARCHIVE>
    \n+
    162 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
    \n+
    163 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
    \n+
    164 }
    \n+
    165};
    \n+
    \n+
    166
    \n+
    \n+
    175class GTSAM_EXPORT Fair : public Base {
    \n+
    176 protected:
    \n+
    177 double c_;
    \n+
    178
    \n+
    179 public:
    \n+
    180 typedef boost::shared_ptr<Fair> shared_ptr;
    \n+
    181
    \n+
    182 Fair(double c = 1.3998, const ReweightScheme reweight = Block);
    \n+
    183 double weight(double distance) const override;
    \n+
    184 double loss(double distance) const override;
    \n+
    185 void print(const std::string &s) const override;
    \n+
    186 bool equals(const Base &expected, double tol = 1e-8) const override;
    \n+
    187 static shared_ptr Create(double c, const ReweightScheme reweight = Block);
    \n+
    188 double modelParameter() const { return c_; }
    \n+
    189
    \n+
    190 private:
    \n+
    192 friend class boost::serialization::access;
    \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(c_);
    \n+
    197 }
    \n+
    198};
    \n+
    \n+
    199
    \n+
    \n+
    208class GTSAM_EXPORT Huber : public Base {
    \n+
    209 protected:
    \n+
    210 double k_;
    \n+
    211
    \n+
    212 public:
    \n+
    213 typedef boost::shared_ptr<Huber> shared_ptr;
    \n+
    214
    \n+
    215 Huber(double k = 1.345, const ReweightScheme reweight = Block);
    \n+
    216 double weight(double distance) const override;
    \n+
    217 double loss(double distance) const override;
    \n+
    218 void print(const std::string &s) const override;
    \n+
    219 bool equals(const Base &expected, double tol = 1e-8) const override;
    \n+
    220 static shared_ptr Create(double k, const ReweightScheme reweight = Block);
    \n+
    221 double modelParameter() const { return k_; }
    \n+
    222
    \n+
    223 private:
    \n+
    225 friend class boost::serialization::access;
    \n+
    226 template <class ARCHIVE>
    \n+
    227 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
    \n+
    228 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
    \n+
    229 ar &BOOST_SERIALIZATION_NVP(k_);
    \n+
    230 }
    \n+
    231};
    \n+
    \n+
    232
    \n+
    \n+
    246class GTSAM_EXPORT Cauchy : public Base {
    \n+
    247 protected:
    \n+
    248 double k_, ksquared_;
    \n+
    249
    \n+
    250 public:
    \n+
    251 typedef boost::shared_ptr<Cauchy> shared_ptr;
    \n+
    252
    \n+
    253 Cauchy(double k = 0.1, const ReweightScheme reweight = Block);
    \n+
    254 double weight(double distance) const override;
    \n+
    255 double loss(double distance) const override;
    \n+
    256 void print(const std::string &s) const override;
    \n+
    257 bool equals(const Base &expected, double tol = 1e-8) const override;
    \n+
    258 static shared_ptr Create(double k, const ReweightScheme reweight = Block);
    \n+
    259 double modelParameter() const { return k_; }
    \n+
    260
    \n+
    261 private:
    \n+
    263 friend class boost::serialization::access;
    \n+
    264 template <class ARCHIVE>
    \n+
    265 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
    \n+
    266 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
    \n+
    267 ar &BOOST_SERIALIZATION_NVP(k_);
    \n+
    268 ar &BOOST_SERIALIZATION_NVP(ksquared_);
    \n+
    269 }
    \n+
    270};
    \n+
    \n+
    271
    \n+
    \n+
    280class GTSAM_EXPORT Tukey : public Base {
    \n+
    281 protected:
    \n+
    282 double c_, csquared_;
    \n+
    283
    \n+
    284 public:
    \n+
    285 typedef boost::shared_ptr<Tukey> shared_ptr;
    \n+
    286
    \n+
    287 Tukey(double c = 4.6851, const ReweightScheme reweight = Block);
    \n+
    288 double weight(double distance) const override;
    \n+
    289 double loss(double distance) const override;
    \n+
    290 void print(const std::string &s) const override;
    \n+
    291 bool equals(const Base &expected, double tol = 1e-8) const override;
    \n+
    292 static shared_ptr Create(double k, const ReweightScheme reweight = Block);
    \n+
    293 double modelParameter() const { return c_; }
    \n+
    294
    \n+
    295 private:
    \n+
    297 friend class boost::serialization::access;
    \n+
    298 template <class ARCHIVE>
    \n+
    299 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
    \n+
    300 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
    \n+
    301 ar &BOOST_SERIALIZATION_NVP(c_);
    \n+
    302 }
    \n+
    303};
    \n+
    \n+
    304
    \n+
    \n+
    313class GTSAM_EXPORT Welsch : public Base {
    \n+
    314 protected:
    \n+
    315 double c_, csquared_;
    \n+
    316
    \n+
    317 public:
    \n+
    318 typedef boost::shared_ptr<Welsch> shared_ptr;
    \n+
    319
    \n+
    320 Welsch(double c = 2.9846, const ReweightScheme reweight = Block);
    \n+
    321 double weight(double distance) const override;
    \n+
    322 double loss(double distance) const override;
    \n+
    323 void print(const std::string &s) const override;
    \n+
    324 bool equals(const Base &expected, double tol = 1e-8) const override;
    \n+
    325 static shared_ptr Create(double k, const ReweightScheme reweight = Block);
    \n+
    326 double modelParameter() const { return c_; }
    \n+
    327
    \n+
    328 private:
    \n+
    330 friend class boost::serialization::access;
    \n+
    331 template <class ARCHIVE>
    \n+
    332 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
    \n+
    333 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
    \n+
    334 ar &BOOST_SERIALIZATION_NVP(c_);
    \n+
    335 ar &BOOST_SERIALIZATION_NVP(csquared_);
    \n+
    336 }
    \n+
    337};
    \n+
    \n+
    338
    \n+
    \n+
    349class GTSAM_EXPORT GemanMcClure : public Base {
    \n+
    350 public:
    \n+
    351 typedef boost::shared_ptr<GemanMcClure> shared_ptr;
    \n+
    352
    \n+
    353 GemanMcClure(double c = 1.0, const ReweightScheme reweight = Block);
    \n+
    354 ~GemanMcClure() override {}
    \n+
    355 double weight(double distance) const override;
    \n+
    356 double loss(double distance) const override;
    \n+
    357 void print(const std::string &s) const override;
    \n+
    358 bool equals(const Base &expected, double tol = 1e-8) const override;
    \n+
    359 static shared_ptr Create(double k, const ReweightScheme reweight = Block);
    \n+
    360 double modelParameter() const { return c_; }
    \n+
    361
    \n+
    362 protected:
    \n+
    363 double c_;
    \n+
    364
    \n+
    365 private:
    \n+
    367 friend class boost::serialization::access;
    \n+
    368 template <class ARCHIVE>
    \n+
    369 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
    \n+
    370 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
    \n+
    371 ar &BOOST_SERIALIZATION_NVP(c_);
    \n+
    372 }
    \n+
    373};
    \n+
    \n+
    374
    \n+
    \n+
    387class GTSAM_EXPORT DCS : public Base {
    \n+
    388 public:
    \n+
    389 typedef boost::shared_ptr<DCS> shared_ptr;
    \n+
    390
    \n+
    391 DCS(double c = 1.0, const ReweightScheme reweight = Block);
    \n+
    392 ~DCS() override {}
    \n+
    393 double weight(double distance) const override;
    \n+
    394 double loss(double distance) const override;
    \n+
    395 void print(const std::string &s) const override;
    \n+
    396 bool equals(const Base &expected, double tol = 1e-8) const override;
    \n+
    397 static shared_ptr Create(double k, const ReweightScheme reweight = Block);
    \n+
    398 double modelParameter() const { return c_; }
    \n+
    399
    \n+
    400 protected:
    \n+
    401 double c_;
    \n+
    402
    \n+
    403 private:
    \n+
    405 friend class boost::serialization::access;
    \n+
    406 template <class ARCHIVE>
    \n+
    407 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
    \n+
    408 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
    \n+
    409 ar &BOOST_SERIALIZATION_NVP(c_);
    \n+
    410 }
    \n+
    411};
    \n+
    \n+
    412
    \n+
    \n+
    426class GTSAM_EXPORT L2WithDeadZone : public Base {
    \n+
    427 protected:
    \n+
    428 double k_;
    \n+
    429
    \n+
    430 public:
    \n+
    431 typedef boost::shared_ptr<L2WithDeadZone> shared_ptr;
    \n+
    432
    \n+
    433 L2WithDeadZone(double k = 1.0, const ReweightScheme reweight = Block);
    \n+
    434 double weight(double distance) const override;
    \n+
    435 double loss(double distance) const override;
    \n+
    436 void print(const std::string &s) const override;
    \n+
    437 bool equals(const Base &expected, double tol = 1e-8) const override;
    \n+
    438 static shared_ptr Create(double k, const ReweightScheme reweight = Block);
    \n+
    439 double modelParameter() const { return k_; }
    \n+
    440
    \n+
    441 private:
    \n+
    443 friend class boost::serialization::access;
    \n+
    444 template <class ARCHIVE>
    \n+
    445 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
    \n+
    446 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
    \n+
    447 ar &BOOST_SERIALIZATION_NVP(k_);
    \n+
    448 }
    \n+
    449};
    \n+
    \n+
    450
    \n+
    451} // namespace mEstimator
    \n+
    452} // namespace noiseModel
    \n+
    453} // namespace gtsam
    \n+
    Concept check for values that can be used in unit tests.
    \n+
    typedef and functions to augment Eigen's MatrixXd
    \n
    Global functions in a separate testing namespace.
    Definition chartTesting.h:28
    \n-
    This class stores a dense matrix and allows it to be accessed as a collection of vertical blocks.
    Definition VerticalBlockMatrix.h:43
    \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-
    A Gaussian factor in the squared-error form.
    Definition JacobianFactor.h:91
    \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+
    virtual double weight(double distance) const =0
    This method is responsible for returning the weight function for a given amount of error.
    \n+
    ReweightScheme
    the rows can be weighted independently according to the error or uniformly with the norm of the right...
    Definition LossFunctions.h:67
    \n+
    "Null" robust loss function, equivalent to a Gaussian pdf noise model, or plain least-squares (non-ro...
    Definition LossFunctions.h:146
    \n+
    double weight(double) const override
    This method is responsible for returning the weight function for a given amount of error.
    Definition LossFunctions.h:152
    \n+
    double loss(double distance) const override
    This method is responsible for returning the total penalty for a given amount of error.
    Definition LossFunctions.h:153
    \n+
    Implementation of the "Fair" robust error model (Zhang97ivc)
    Definition LossFunctions.h:175
    \n+
    The "Huber" robust error model (Zhang97ivc).
    Definition LossFunctions.h:208
    \n+
    Implementation of the "Cauchy" robust error model (Lee2013IROS).
    Definition LossFunctions.h:246
    \n+
    Implementation of the "Tukey" robust error model (Zhang97ivc).
    Definition LossFunctions.h:280
    \n+
    Implementation of the "Welsch" robust error model (Zhang97ivc).
    Definition LossFunctions.h:313
    \n+
    Implementation of the "Geman-McClure" robust error model (Zhang97ivc).
    Definition LossFunctions.h:349
    \n+
    DCS implements the Dynamic Covariance Scaling robust error model from the paper Robust Map Optimizati...
    Definition LossFunctions.h:387
    \n+
    L2WithDeadZone implements a standard L2 penalty, but with a dead zone of width 2*k,...
    Definition LossFunctions.h:426
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,64 +1,385 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GaussianConditional-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+LossFunctions.h\n+1\n+2/* ---------------------------------------------------------------------------\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+3\n+4 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+5 * Atlanta, Georgia 30332-0415\n+6 * All Rights Reserved\n+7 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n+8\n+9 * See LICENSE for the license information\n+10\n+11 * -------------------------------------------------------------------------\n - */\n-11\n-18// \\callgraph\n-19\n+12\n 20#pragma once\n 21\n-22namespace _\bg_\bt_\bs_\ba_\bm {\n-23\n-24 /* *************************************************************************\n-*/\n-25 template\n-_\b2_\b6 _\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(const TERMS& terms,\n-27 size_t nrFrontals, const Vector& d, const SharedDiagonal& sigmas) :\n-28 _\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br(terms, d, sigmas), _\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(nrFrontals) {}\n-29\n-30 /* *************************************************************************\n-*/\n-31 template\n-_\b3_\b2 _\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-33 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, const SharedDiagonal& sigmas) :\n-34 _\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br(keys, augmentedMatrix, sigmas), _\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(nrFrontals) {}\n-35\n-36} // gtsam\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#include \n+28#include \n+29#include \n+30#include \n+31#include \n+32\n+33namespace _\bg_\bt_\bs_\ba_\bm {\n+34namespace noiseModel {\n+35// clang-format off\n+54// clang-format on\n+55namespace mEstimator {\n+56\n+_\b6_\b3class GTSAM_EXPORT _\bB_\ba_\bs_\be {\n+64 public:\n+_\b6_\b7 enum _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be { Scalar, Block };\n+68 typedef boost::shared_ptr shared_ptr;\n+69\n+70 protected:\n+_\b7_\b2 _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be _\br_\be_\bw_\be_\bi_\bg_\bh_\bt_\b_;\n+73\n+74 public:\n+75 _\bB_\ba_\bs_\be(const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block) : reweight_(reweight) {}\n+76 virtual _\b~_\bB_\ba_\bs_\be() {}\n+77\n+_\b7_\b9 _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be _\br_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be() const { return reweight_; }\n+80\n+_\b9_\b4 virtual double _\bl_\bo_\bs_\bs(double distance) const { return 0; }\n+95\n+_\b1_\b0_\b6 virtual double _\bw_\be_\bi_\bg_\bh_\bt(double distance) const = 0;\n+107\n+108 virtual void _\bp_\br_\bi_\bn_\bt(const std::string &s) const = 0;\n+109 virtual bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be &expected, double tol = 1e-8) const = 0;\n+110\n+111 double sqrtWeight(double distance) const { return std::sqrt(weight\n+(distance)); }\n+112\n+115 Vector weight(const Vector &error) const;\n+116\n+118 Vector sqrtWeight(const Vector &error) const;\n+119\n+122 void reweight(Vector &error) const;\n+123 void reweight(std::vector &A, Vector &error) const;\n+124 void reweight(Matrix &A, Vector &error) const;\n+125 void reweight(Matrix &A1, Matrix &A2, Vector &error) const;\n+126 void reweight(Matrix &A1, Matrix &A2, Matrix &A3, Vector &error) const;\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_NVP(reweight_);\n+134 }\n+135};\n+136\n+_\b1_\b4_\b6class GTSAM_EXPORT _\bN_\bu_\bl_\bl : public _\bB_\ba_\bs_\be {\n+147 public:\n+148 typedef boost::shared_ptr shared_ptr;\n+149\n+150 _\bN_\bu_\bl_\bl(const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block) : _\bB_\ba_\bs_\be(reweight) {}\n+151 _\b~_\bN_\bu_\bl_\bl() override {}\n+_\b1_\b5_\b2 double _\bw_\be_\bi_\bg_\bh_\bt(double /*error*/) const override { return 1.0; }\n+_\b1_\b5_\b3 double _\bl_\bo_\bs_\bs(double distance) const override { return 0.5 * distance *\n+distance; }\n+154 void _\bp_\br_\bi_\bn_\bt(const std::string &s) const override;\n+155 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be & /*expected*/, double /*tol*/) const override\n+{ return true; }\n+156 static shared_ptr Create();\n+157\n+158 private:\n+_\b1_\b6_\b0 friend class boost::serialization::access;\n+161 template \n+162 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n+163 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+164 }\n+165};\n+166\n+_\b1_\b7_\b5class GTSAM_EXPORT _\bF_\ba_\bi_\br : public _\bB_\ba_\bs_\be {\n+176 protected:\n+177 double c_;\n+178\n+179 public:\n+180 typedef boost::shared_ptr shared_ptr;\n+181\n+182 _\bF_\ba_\bi_\br(double c = 1.3998, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n+183 double weight(double distance) const override;\n+184 double loss(double distance) const override;\n+185 void _\bp_\br_\bi_\bn_\bt(const std::string &s) const override;\n+186 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be &expected, double tol = 1e-8) const override;\n+187 static shared_ptr Create(double c, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n+188 double modelParameter() const { return c_; }\n+189\n+190 private:\n+_\b1_\b9_\b2 friend class boost::serialization::access;\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(c_);\n+197 }\n+198};\n+199\n+_\b2_\b0_\b8class GTSAM_EXPORT _\bH_\bu_\bb_\be_\br : public _\bB_\ba_\bs_\be {\n+209 protected:\n+210 double k_;\n+211\n+212 public:\n+213 typedef boost::shared_ptr shared_ptr;\n+214\n+215 _\bH_\bu_\bb_\be_\br(double k = 1.345, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n+216 double weight(double distance) const override;\n+217 double loss(double distance) const override;\n+218 void _\bp_\br_\bi_\bn_\bt(const std::string &s) const override;\n+219 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be &expected, double tol = 1e-8) const override;\n+220 static shared_ptr Create(double k, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n+221 double modelParameter() const { return k_; }\n+222\n+223 private:\n+_\b2_\b2_\b5 friend class boost::serialization::access;\n+226 template \n+227 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n+228 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+229 ar &BOOST_SERIALIZATION_NVP(k_);\n+230 }\n+231};\n+232\n+_\b2_\b4_\b6class GTSAM_EXPORT _\bC_\ba_\bu_\bc_\bh_\by : public _\bB_\ba_\bs_\be {\n+247 protected:\n+248 double k_, ksquared_;\n+249\n+250 public:\n+251 typedef boost::shared_ptr shared_ptr;\n+252\n+253 _\bC_\ba_\bu_\bc_\bh_\by(double k = 0.1, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n+254 double weight(double distance) const override;\n+255 double loss(double distance) const override;\n+256 void _\bp_\br_\bi_\bn_\bt(const std::string &s) const override;\n+257 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be &expected, double tol = 1e-8) const override;\n+258 static shared_ptr Create(double k, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n+259 double modelParameter() const { return k_; }\n+260\n+261 private:\n+_\b2_\b6_\b3 friend class boost::serialization::access;\n+264 template \n+265 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n+266 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+267 ar &BOOST_SERIALIZATION_NVP(k_);\n+268 ar &BOOST_SERIALIZATION_NVP(ksquared_);\n+269 }\n+270};\n+271\n+_\b2_\b8_\b0class GTSAM_EXPORT _\bT_\bu_\bk_\be_\by : public _\bB_\ba_\bs_\be {\n+281 protected:\n+282 double c_, csquared_;\n+283\n+284 public:\n+285 typedef boost::shared_ptr shared_ptr;\n+286\n+287 _\bT_\bu_\bk_\be_\by(double c = 4.6851, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n+288 double weight(double distance) const override;\n+289 double loss(double distance) const override;\n+290 void _\bp_\br_\bi_\bn_\bt(const std::string &s) const override;\n+291 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be &expected, double tol = 1e-8) const override;\n+292 static shared_ptr Create(double k, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n+293 double modelParameter() const { return c_; }\n+294\n+295 private:\n+_\b2_\b9_\b7 friend class boost::serialization::access;\n+298 template \n+299 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n+300 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+301 ar &BOOST_SERIALIZATION_NVP(c_);\n+302 }\n+303};\n+304\n+_\b3_\b1_\b3class GTSAM_EXPORT _\bW_\be_\bl_\bs_\bc_\bh : public _\bB_\ba_\bs_\be {\n+314 protected:\n+315 double c_, csquared_;\n+316\n+317 public:\n+318 typedef boost::shared_ptr shared_ptr;\n+319\n+320 _\bW_\be_\bl_\bs_\bc_\bh(double c = 2.9846, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n+321 double weight(double distance) const override;\n+322 double loss(double distance) const override;\n+323 void _\bp_\br_\bi_\bn_\bt(const std::string &s) const override;\n+324 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be &expected, double tol = 1e-8) const override;\n+325 static shared_ptr Create(double k, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n+326 double modelParameter() const { return c_; }\n+327\n+328 private:\n+_\b3_\b3_\b0 friend class boost::serialization::access;\n+331 template \n+332 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n+333 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+334 ar &BOOST_SERIALIZATION_NVP(c_);\n+335 ar &BOOST_SERIALIZATION_NVP(csquared_);\n+336 }\n+337};\n+338\n+_\b3_\b4_\b9class GTSAM_EXPORT _\bG_\be_\bm_\ba_\bn_\bM_\bc_\bC_\bl_\bu_\br_\be : public _\bB_\ba_\bs_\be {\n+350 public:\n+351 typedef boost::shared_ptr shared_ptr;\n+352\n+353 _\bG_\be_\bm_\ba_\bn_\bM_\bc_\bC_\bl_\bu_\br_\be(double c = 1.0, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n+354 _\b~_\bG_\be_\bm_\ba_\bn_\bM_\bc_\bC_\bl_\bu_\br_\be() override {}\n+355 double weight(double distance) const override;\n+356 double loss(double distance) const override;\n+357 void _\bp_\br_\bi_\bn_\bt(const std::string &s) const override;\n+358 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be &expected, double tol = 1e-8) const override;\n+359 static shared_ptr Create(double k, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n+360 double modelParameter() const { return c_; }\n+361\n+362 protected:\n+363 double c_;\n+364\n+365 private:\n+_\b3_\b6_\b7 friend class boost::serialization::access;\n+368 template \n+369 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n+370 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+371 ar &BOOST_SERIALIZATION_NVP(c_);\n+372 }\n+373};\n+374\n+_\b3_\b8_\b7class GTSAM_EXPORT _\bD_\bC_\bS : public _\bB_\ba_\bs_\be {\n+388 public:\n+389 typedef boost::shared_ptr shared_ptr;\n+390\n+391 _\bD_\bC_\bS(double c = 1.0, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n+392 _\b~_\bD_\bC_\bS() override {}\n+393 double weight(double distance) const override;\n+394 double loss(double distance) const override;\n+395 void _\bp_\br_\bi_\bn_\bt(const std::string &s) const override;\n+396 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be &expected, double tol = 1e-8) const override;\n+397 static shared_ptr Create(double k, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n+398 double modelParameter() const { return c_; }\n+399\n+400 protected:\n+401 double c_;\n+402\n+403 private:\n+_\b4_\b0_\b5 friend class boost::serialization::access;\n+406 template \n+407 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n+408 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+409 ar &BOOST_SERIALIZATION_NVP(c_);\n+410 }\n+411};\n+412\n+_\b4_\b2_\b6class GTSAM_EXPORT _\bL_\b2_\bW_\bi_\bt_\bh_\bD_\be_\ba_\bd_\bZ_\bo_\bn_\be : public _\bB_\ba_\bs_\be {\n+427 protected:\n+428 double k_;\n+429\n+430 public:\n+431 typedef boost::shared_ptr shared_ptr;\n+432\n+433 _\bL_\b2_\bW_\bi_\bt_\bh_\bD_\be_\ba_\bd_\bZ_\bo_\bn_\be(double k = 1.0, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n+434 double weight(double distance) const override;\n+435 double loss(double distance) const override;\n+436 void _\bp_\br_\bi_\bn_\bt(const std::string &s) const override;\n+437 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be &expected, double tol = 1e-8) const override;\n+438 static shared_ptr Create(double k, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n+439 double modelParameter() const { return k_; }\n+440\n+441 private:\n+_\b4_\b4_\b3 friend class boost::serialization::access;\n+444 template \n+445 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n+446 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+447 ar &BOOST_SERIALIZATION_NVP(k_);\n+448 }\n+449};\n+450\n+451} // namespace mEstimator\n+452} // namespace noiseModel\n+453} // 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+_\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:_\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:_\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:_\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:_\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_\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:_\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:_\bm_\bE_\bs_\bt_\bi_\bm_\ba_\bt_\bo_\br_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bl_\bo_\bs_\bs\n+virtual double loss(double distance) const\n+This method is responsible for returning the total penalty for a given amount\n+of error.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:94\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_\b:_\b:_\br_\be_\bw_\be_\bi_\bg_\bh_\bt_\b_\n+ReweightScheme reweight_\n+Strategy for reweighting.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:72\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_\b:_\b:_\br_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be\n+ReweightScheme reweightScheme() const\n+Returns the reweight scheme, as explained in ReweightScheme.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:79\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_\b:_\b:_\bw_\be_\bi_\bg_\bh_\bt\n+virtual double weight(double distance) const =0\n+This method is responsible for returning the weight function for a given amount\n+of error.\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_\b:_\b:_\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be\n+ReweightScheme\n+the rows can be weighted independently according to the error or uniformly with\n+the norm of the right...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:67\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:_\bN_\bu_\bl_\bl\n+\"Null\" robust loss function, equivalent to a Gaussian pdf noise model, or plain\n+least-squares (non-ro...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:146\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:_\bN_\bu_\bl_\bl_\b:_\b:_\bw_\be_\bi_\bg_\bh_\bt\n+double weight(double) const override\n+This method is responsible for returning the weight function for a given amount\n+of error.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:152\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:_\bN_\bu_\bl_\bl_\b:_\b:_\bl_\bo_\bs_\bs\n+double loss(double distance) const override\n+This method is responsible for returning the total penalty for a given amount\n+of error.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:153\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:_\bF_\ba_\bi_\br\n+Implementation of the \"Fair\" robust error model (Zhang97ivc)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:175\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:_\bH_\bu_\bb_\be_\br\n+The \"Huber\" robust error model (Zhang97ivc).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:208\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:_\bC_\ba_\bu_\bc_\bh_\by\n+Implementation of the \"Cauchy\" robust error model (Lee2013IROS).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:246\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:_\bT_\bu_\bk_\be_\by\n+Implementation of the \"Tukey\" robust error model (Zhang97ivc).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:280\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:_\bW_\be_\bl_\bs_\bc_\bh\n+Implementation of the \"Welsch\" robust error model (Zhang97ivc).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:313\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:_\bG_\be_\bm_\ba_\bn_\bM_\bc_\bC_\bl_\bu_\br_\be\n+Implementation of the \"Geman-McClure\" robust error model (Zhang97ivc).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:349\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:_\bD_\bC_\bS\n+DCS implements the Dynamic Covariance Scaling robust error model from the paper\n+Robust Map Optimizati...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:387\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:_\bL_\b2_\bW_\bi_\bt_\bh_\bD_\be_\ba_\bd_\bZ_\bo_\bn_\be\n+L2WithDeadZone implements a standard L2 penalty, but with a dead zone of width\n+2*k,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:426\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+ * L\bLo\bos\bss\bsF\bFu\bun\bnc\bct\bti\bio\bon\bns\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/a00740.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00740.html", "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/GaussianEliminationTree.h File Reference\n \n \n \n \n \n \n \n@@ -94,52 +94,42 @@\n
    \n \n \n \n \n
    \n \n-
    NoiseModel.cpp File Reference
    \n+Classes |\n+Namespaces
    \n+
    GaussianEliminationTree.h File Reference
    \n \n
    \n+\n+

    Go to the source code of this file.

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

    \n+Classes

    class  gtsam::GaussianEliminationTree
     
    \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+
    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,35 +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 | _\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+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 N\bNa\bam\bme\bes\bsp\bpa\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+ 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._\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._\bh\n * Generated on Tue Jan 9 2024 05:51: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/GaussianBayesNet.cpp 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,35 +94,52 @@\n \n \n \n \n \n
    \n \n-
    GaussianBayesNet.cpp File Reference
    \n+Namespaces |\n+Functions
    \n+
    SubgraphBuilder.cpp File Reference
    \n \n
    \n-\n-

    Chordal Bayes Net, the result of eliminating a factor graph. \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+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-

    Chordal Bayes Net, the result of eliminating a factor graph.

    \n-
    Author
    Frank Dellaert, Varun Agrawal
    \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,20 +1,42 @@\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+_\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+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-Chordal Bayes Net, the result of eliminating a factor graph.\n+ Date\n+ Dec 31, 2009\n Author\n- Frank Dellaert, Varun Agrawal\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_\bN_\be_\bt_\b._\bc_\bp_\bp\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.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/linearExceptions.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,51 +96,48 @@\n \n \n \n
    \n \n-
    linearExceptions.h File Reference
    \n+
    Scatter.h File Reference
    \n
    \n
    \n \n-

    Exceptions that may be thrown by linear solver components. \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-\n+\n+\n \n

    \n Classes

    class  gtsam::IndeterminantLinearSystemException
     Thrown when a linear system is ill-posed. More...
    struct  gtsam::SlotEntry
     One SlotEntry stores the slot index for a variable, as well its dim. 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::InvalidMatrixBlock
     An exception indicating that a matrix block passed into a JacobianFactor has a different dimensionality than the factor. More...
     
    class  gtsam::InvalidDenseElimination
    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-

    Exceptions that may be thrown by linear solver components.

    \n-
    Author
    Richard Roberts
    \n-
    Date
    Aug 17, 2012
    \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,37 +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-linearExceptions.h File Reference\n-Exceptions that may be thrown by linear solver components. _\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:_\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+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:_\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+ 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-Exceptions that may be thrown by linear solver components.\n+Maps global variable indices to slot indices.\n Author\n Richard Roberts\n+ Frank Dellaert\n Date\n- Aug 17, 2012\n+ June 2015\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+ * _\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/a00749.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00749.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,6 +1,4 @@\n var a00749 = [\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::SlotEntry\", \"a04024.html\", null],\n+ [\"gtsam::Scatter\", \"a04028.html\", \"a04028\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00749_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00749_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/Scatter.h Source File\n \n \n \n \n \n \n \n@@ -98,109 +98,84 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    linearExceptions.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#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-
    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-
    Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.
    \n-
    Typedefs for easier changing of types.
    \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+
    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 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-
    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+
    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,134 +1,97 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-linearExceptions.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#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-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_\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+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+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 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:_\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_\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- * _\bl_\bi_\bn_\be_\ba_\br_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\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/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/HessianFactor.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@@ -95,57 +95,44 @@\n \n \n \n \n
    \n \n-
    HessianFactor.h File Reference
    \n+Namespaces
    \n+
    GaussianDensity.h File Reference
    \n \n
    \n \n-

    Contains the HessianFactor class, a general quadratic factor. \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+\n \n

    \n Classes

    class  gtsam::HessianFactor
     A Gaussian factor using the canonical parameters (information form) More...
     
    struct  gtsam::traits< HessianFactor >
     traits 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-\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-

    Contains the HessianFactor class, a general quadratic factor.

    \n-
    Author
    Richard Roberts
    \n-
    Date
    Dec 8, 2010
    \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,44 +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-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\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:_\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+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-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-Contains the HessianFactor class, a general quadratic factor.\n+A Gaussian Density.\n Author\n- Richard Roberts\n+ Frank Dellaert\n Date\n- Dec 8, 2010\n+ Jan 21, 2012\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+ * _\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/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/HessianFactor.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,283 +98,92 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    HessianFactor.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-\n-\n-\n+
    19// \\callgraph
    \n+
    20#pragma once
    \n+
    21
    \n+\n+
    23
    \n+
    24namespace gtsam {
    \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+
    \n+
    32 class GTSAM_EXPORT GaussianDensity : public GaussianConditional {
    \n+
    33
    \n+
    34 public:
    \n+
    35
    \n+
    36 typedef boost::shared_ptr<GaussianDensity> shared_ptr;
    \n
    37
    \n-
    \n-
    101 class GTSAM_EXPORT HessianFactor : public GaussianFactor {
    \n-
    102 protected:
    \n-
    103
    \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-
    180
    \n-
    \n-
    182 explicit HessianFactor(const GaussianFactorGraph& factors)
    \n-
    183 : HessianFactor(factors, Scatter(factors)) {}
    \n-
    \n-
    184
    \n-
    186 ~HessianFactor() override {}
    \n-
    187
    \n-
    \n-\n-
    190 return boost::make_shared<HessianFactor>(*this); }
    \n-
    \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-
    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-
    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-
    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-
    290
    \n-
    294 Matrix information() const override;
    \n-
    295
    \n-
    297 void hessianDiagonalAdd(VectorValues& d) const override;
    \n-
    298
    \n-
    300 using Base::hessianDiagonal;
    \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-
    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-
    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-
    416
    \n-
    417} // \\ namespace gtsam
    \n-
    418
    \n-
    419
    \n-\n-
    A thin wrapper around std::vector that uses a custom allocator.
    \n-
    Access to matrices via blocks of pre-defined sizes.
    \n-
    Maps global variable indices to slot indices.
    \n-
    A factor with a quadratic error function - a Gaussian.
    \n-
    Contains the HessianFactor class, a general quadratic factor.
    \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+
    \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+
    57
    \n+
    59 void print(const std::string& = "GaussianDensity",
    \n+
    60 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
    \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
    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+
    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-
    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+
    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,413 +1,110 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-HessianFactor.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/_\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+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-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+_\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+36 typedef boost::shared_ptr shared_ptr;\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-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-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-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-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-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-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-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-290\n-294 Matrix information() const override;\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-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-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-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-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-_\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-_\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-_\bS_\bc_\ba_\bt_\bt_\be_\br_\b._\bh\n-Maps global variable indices to slot indices.\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-_\bi_\bn_\bl_\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_\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+_\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+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+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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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-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+_\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- * _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\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/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/NoiseModel.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,101 +94,34 @@\n \n \n \n \n \n
    \n \n-
    NoiseModel.h File Reference
    \n+Namespaces
    \n+
    Scatter.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-\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 >
     
    \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+
    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,83 +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 | _\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:_\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-\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-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 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- * _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\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/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/PowerMethod.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Preconditioner.h Source File\n \n \n \n \n \n \n \n@@ -98,137 +98,212 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    PowerMethod.h
    \n+
    Preconditioner.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-
    6 * Authors: Frank Dellaert, 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-
    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+
    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 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+
    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+
    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-
    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+
    121};
    \n
    \n-
    144
    \n-
    146 double eigenvalue() const { return ritzValue_; }
    \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-
    149 Vector eigenvector() const { return ritzVector_; }
    \n-
    150};
    \n-
    \n-
    151
    \n-
    152} // namespace gtsam
    \n-
    typedef and functions to augment Eigen's VectorXd
    \n-
    typedef and functions to augment Eigen's MatrixXd
    \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
    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+
    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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,158 +1,232 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\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-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/_\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-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+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 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+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+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-_\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+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-_\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+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-_\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:_\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:_\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\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b._\bh\n+ * P\bPr\bre\bec\bco\bon\bnd\bdi\bit\bti\bio\bon\bne\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/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/JacobianFactor.h 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@@ -94,55 +94,72 @@\n
    \n
    \n \n \n \n
    \n \n-
    JacobianFactor.h File Reference
    \n+
    Errors.cpp File Reference
    \n
    \n
    \n \n-

    Go to the source code of this file.

    \n+

    Factor Graph Values. \n+More...

    \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::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+\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< 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+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-
    \n-Christian Potthast
    \n+

    Factor Graph Values.

    \n+

    Errors

    Author
    Carlos Nieto
    \n
    \n-Frank Dellaert
    \n-
    Date
    Dec 8, 2010
    \n+Christian Potthast
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,39 +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 | _\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:_\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-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+_\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 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+_\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+ Carlos Nieto\n Christian Potthast\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+ * _\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/a00761.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00761.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,9 @@\n var a00761 = [\n- [\"gtsam::JacobianFactor\", \"a03844.html\", \"a03844\"],\n- [\"gtsam::traits< JacobianFactor >\", \"a03848.html\", null],\n- [\"EliminateQR\", \"a00761.html#ab56c4bfa363f8c23c48eb078e9c84a9c\", null]\n+ [\"axpy\", \"a00761.html#a5644e12e89afaac433f5d61c3d8e9003\", null],\n+ [\"createErrors\", \"a00761.html#aa84fa88db91d429bec261c655fc54bd6\", null],\n+ [\"dot\", \"a00761.html#a106ec458ddb425604809da93346af55d\", null],\n+ [\"operator+\", \"a00761.html#a552de56fca49d1b4942dd9b8e8357b0a\", null],\n+ [\"operator-\", \"a00761.html#aa91c0485819ec2bfd249a922c81e3eb4\", null],\n+ [\"operator-\", \"a00761.html#af2dc48a6a2e9abf4d0636578847a6b5a\", null],\n+ [\"print\", \"a00761.html#a6abcac97e441f1454790ff53caa1b229\", null]\n ];\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.h 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@@ -96,48 +96,44 @@\n \n \n \n
    \n \n-
    Scatter.h File Reference
    \n+
    RegularHessianFactor.h File Reference
    \n
    \n
    \n \n-

    Maps global variable indices to slot indices. \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-\n+\n \n

    \n Classes

    struct  gtsam::SlotEntry
     One SlotEntry stores the slot index for a variable, as well its dim. More...
    class  gtsam::RegularHessianFactor< D >
     
    class  gtsam::Scatter
     Scatter is an intermediate data structure used when building a HessianFactor incrementally, to get the keys in the right order. More...
    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-

    Maps global variable indices to slot indices.

    \n-
    Author
    Richard Roberts
    \n-
    \n-Frank Dellaert
    \n-
    Date
    June 2015
    \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,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\n-Scatter.h File Reference\n-Maps global variable indices to slot indices. _\bM_\bo_\br_\be_\b._\b._\b.\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-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+ 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- 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+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-Maps global variable indices to slot indices.\n+HessianFactor class with constant sized blocks.\n Author\n- Richard Roberts\n- Frank Dellaert\n+ Sungtae An\n Date\n- June 2015\n+ March 2014\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bS_\bc_\ba_\bt_\bt_\be_\br_\b._\bh\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/a00764.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00764.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var a00764 = [\n- [\"gtsam::SlotEntry\", \"a04024.html\", null],\n- [\"gtsam::Scatter\", \"a04028.html\", \"a04028\"]\n+ [\"gtsam::RegularHessianFactor< D >\", \"a04008.html\", \"a04008\"],\n+ [\"gtsam::traits< RegularHessianFactor< D > >\", \"a04012.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00764_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00764_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/RegularHessianFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,84 +98,274 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    Scatter.h
    \n+
    RegularHessianFactor.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/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+
    19#pragma once
    \n+
    20
    \n+\n+\n+
    23#include <vector>
    \n+
    24
    \n+
    25namespace gtsam {
    \n+
    26
    \n+
    27template<size_t D>
    \n+
    \n+\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+
    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+
    43 }
    \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-
    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 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+
    \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+
    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+
    Contains the HessianFactor class, a general quadratic factor.
    \n+
    JacobianFactor class with fixed sized blcoks.
    \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-
    Definition Ordering.h:34
    \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
    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+
    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-
    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+
    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,97 +1,356 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Scatter.h\n+RegularHessianFactor.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/_\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+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+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+29\n+30public:\n+31\n+32 typedef Eigen::Matrix VectorD;\n+33 typedef Eigen::Matrix MatrixD;\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+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-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 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+_\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+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+_\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+_\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:_\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:_\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:_\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:_\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:_\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:_\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:_\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- * _\bS_\bc_\ba_\bt_\bt_\be_\br_\b._\bh\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/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/SparseEigen.h 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-
    SparseEigen.h File Reference
    \n+Namespaces
    \n+
    GaussianEliminationTree.cpp File Reference
    \n \n
    \n-\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 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-

    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+
    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,38 +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 | _\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+_\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-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-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+ Mar 29, 2013\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_\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/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/GaussianBayesTree.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,52 +94,32 @@\n \n \n \n \n \n
    \n \n-
    GaussianBayesTree.h File Reference
    \n+
    SubgraphPreconditioner.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-\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...
     
    \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-
    \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,33 +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-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- 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-\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-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._\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/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/GaussianFactor.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@@ -95,46 +95,100 @@\n \n \n \n \n
    \n \n-
    GaussianFactor.h File Reference
    \n+Namespaces |\n+Typedefs |\n+Functions
    \n+
    NoiseModel.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+\n+\n+\n+\n+\n+\n+\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::GaussianFactor
     An abstract virtual base class for JacobianFactor and HessianFactor. 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< GaussianFactor >
     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+Functions

    \n+boost::optional< Vector > gtsam::noiseModel::checkIfDiagonal (const Matrix &M)
     
    \n

    Detailed Description

    \n-

    A factor with a quadratic error function - a Gaussian.

    \n-

    GaussianFactor

    Author
    Richard Roberts, Christian Potthast
    \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,30 +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\n-GaussianFactor.h File Reference\n-A factor with a quadratic error function - a Gaussian. _\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:_\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+ 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 _\bG_\ba_\bu_\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+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-A factor with a quadratic error function - a Gaussian.\n-GaussianFactor\n+ Date\n+ Jan 13, 2010\n Author\n- Richard Roberts, 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_\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/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,15 @@\n var a00788 = [\n- [\"gtsam::GaussianFactor\", \"a03780.html\", \"a03780\"],\n- [\"gtsam::traits< GaussianFactor >\", \"a03784.html\", 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\", \"a00788.html#ab6e5a4884342656e0837ef07008ec03f\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00788_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00788_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/NoiseModel.h Source File\n \n \n \n \n \n \n \n@@ -98,170 +98,631 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    GaussianFactor.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
    6 * Authors: Frank Dellaert, 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-
    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+
    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-
    \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+
    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-\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+
    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-
    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+
    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 DenseIndex getDim(const_iterator variable) const = 0;
    \n+
    82 virtual Vector sigmas() const;
    \n
    83
    \n-
    91 virtual Matrix augmentedJacobian() const = 0;
    \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-
    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+
    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 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-
    127 virtual std::map<Key,Matrix> hessianBlockDiagonal() const = 0;
    \n-
    128
    \n-\n-
    131
    \n-\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-
    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+
    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} // \\ namespace gtsam
    \n-
    Concept check for values that can be used in unit tests.
    \n-
    typedef and functions to augment Eigen's MatrixXd
    \n-
    The base class for all factors.
    \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+
    Concept check for values that can be used in unit tests.
    \n+
    typedef and functions to augment Eigen's MatrixXd
    \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+
    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-
    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-
    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+
    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,255 +1,805 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GaussianFactor.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 6 * Authors: Frank Dellaert, 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/_\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+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-_\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+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-_\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+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-_\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+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-_\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+82 virtual Vector sigmas() const;\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+_\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-_\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+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 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+_\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-_\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+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_\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+_\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} // \\ namespace gtsam\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 _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n Concept check for values that can be used in unit tests.\n _\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n typedef and functions to augment Eigen's MatrixXd\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:_\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:_\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:_\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:_\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+_\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 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+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- * _\bG_\ba_\bu_\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/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/Errors.cpp 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@@ -96,70 +96,50 @@\n \n \n \n
    \n \n-
    Errors.cpp File Reference
    \n+
    NoiseModel.cpp File Reference
    \n
    \n
    \n-\n-

    Factor Graph Values. \n-More...

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

    Factor Graph Values.

    \n-

    Errors

    Author
    Carlos Nieto
    \n+
    Date
    Jan 13, 2010
    \n+
    Author
    Richard Roberts
    \n
    \n-Christian Potthast
    \n+Frank Dellaert
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,47 +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-Errors.cpp File Reference\n-Factor Graph _\bV_\ba_\bl_\bu_\be_\bs. _\bM_\bo_\br_\be_\b._\b._\b.\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-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+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-_\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+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-Factor Graph _\bV_\ba_\bl_\bu_\be_\bs.\n-Errors\n+ Date\n+ Jan 13, 2010\n Author\n- Carlos Nieto\n- Christian Potthast\n+ Richard Roberts\n+ Frank Dellaert\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+ * _\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/a00794.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00794.html", "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/Sampler.h File Reference\n \n \n \n \n \n \n \n@@ -96,47 +96,44 @@\n \n \n \n
    \n \n-
    SubgraphSolver.h File Reference
    \n+
    Sampler.h File Reference
    \n
    \n
    \n \n-

    Subgraph Solver from IROS 2010. \n+

    sampling from a NoiseModel \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::SubgraphSolverParameters
     
    class  gtsam::SubgraphSolver
     This class implements the linear SPCG solver presented in Dellaert et al in IROS'10. More...
    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-

    Subgraph Solver from IROS 2010.

    \n-
    Date
    2010
    \n+

    sampling from a NoiseModel

    \n
    Author
    Frank Dellaert
    \n
    \n-Yong Dian Jian
    \n+Alex Cunningham \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,31 +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-SubgraphSolver.h File Reference\n-Subgraph Solver from IROS 2010. _\bM_\bo_\br_\be_\b._\b._\b.\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-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+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-Subgraph Solver from IROS 2010.\n- Date\n- 2010\n+sampling from a NoiseModel\n Author\n Frank Dellaert\n- Yong Dian Jian\n+ Alex Cunningham\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_\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/a00794.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00794.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a00794 = [\n- [\"gtsam::SubgraphSolverParameters\", \"a04056.html\", null],\n- [\"gtsam::SubgraphSolver\", \"a04060.html\", \"a04060\"]\n+ [\"gtsam::Sampler\", \"a04020.html\", \"a04020\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00794_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00794_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/SubgraphSolver.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@@ -98,114 +98,79 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    SubgraphSolver.h
    \n+
    Sampler.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+
    19#pragma once
    \n+
    20
    \n+\n+
    22
    \n+
    23#include <random>
    \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-
    \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+
    25namespace gtsam {
    \n+
    26
    \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+
    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-
    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+
    88} // namespace gtsam
    \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+
    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,139 +1,80 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SubgraphSolver.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 6 * Authors: Frank Dellaert, 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/_\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-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+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+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+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-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+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:_\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:_\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- * _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br_\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/a00797.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00797.html", "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/iterative.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,54 +94,62 @@\n \n \n \n \n \n
    \n \n-
    IterativeSolver.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    iterative.cpp File Reference
    \n \n
    \n \n-

    Some support classes for iterative solvers. \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-\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+\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-

    Some support classes for iterative solvers.

    \n-
    Date
    2010
    \n-
    Author
    Yong-Dian Jian
    \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,37 +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-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 | _\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-Some support classes for iterative solvers.\n- Date\n- 2010\n+Iterative methods, implementation.\n Author\n- Yong-Dian Jian\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_\bS_\bo_\bl_\bv_\be_\br_\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/a00797.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00797.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,6 +1,7 @@\n var a00797 = [\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+ [\"conjugateGradientDescent\", \"a00797.html#aa84114ad1593684ad739088a2898afdb\", null],\n+ [\"conjugateGradientDescent\", \"a00797.html#af55440f741d8b2f706101f7a79ba7111\", null],\n+ [\"conjugateGradientDescent\", \"a00797.html#ad2b587fde5d35a27d6c88feb4432e785\", null],\n+ [\"steepestDescent\", \"a00797.html#a81b7af7638d28555c3f404318cc67b22\", null],\n+ [\"steepestDescent\", \"a00797.html#aed4b2ca704ddd6530ea70122f883ac88\", null]\n ];\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/Sampler.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,37 +94,45 @@\n \n \n \n \n \n
    \n \n-
    Sampler.cpp File Reference
    \n+
    PowerMethod.h File Reference
    \n
    \n
    \n \n-

    sampling from a diagonal NoiseModel \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-

    sampling from a diagonal NoiseModel

    \n-
    Author
    Frank Dellaert
    \n-
    \n-Alex Cunningham
    \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,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-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\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-sampling from a diagonal NoiseModel\n+Power method for fast eigenvalue and eigenvector computation.\n+ Date\n+ Sept 2020\n Author\n- Frank Dellaert\n- Alex Cunningham\n+ Jing Wu\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+ * _\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/a00803.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00803.html", "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/GaussianFactor.h File Reference\n \n \n \n \n \n \n \n@@ -96,45 +96,45 @@\n \n \n \n
    \n \n-
    BinaryJacobianFactor.h File Reference
    \n+
    GaussianFactor.h File Reference
    \n
    \n
    \n \n-

    A binary JacobianFactor specialization that uses fixed matrix math for speed. \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+\n \n

    \n Classes

    struct  gtsam::BinaryJacobianFactor< M, N1, N2 >
     A binary JacobianFactor specialization that uses fixed matrix math for speed. More...
    class  gtsam::GaussianFactor
     An abstract virtual base class for JacobianFactor and HessianFactor. More...
     
    struct  gtsam::traits< BinaryJacobianFactor< M, N1, N2 > >
    struct  gtsam::traits< GaussianFactor >
     traits More...
     
    \n \n \n \n \n

    \n Namespaces

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

    Detailed Description

    \n-

    A binary JacobianFactor specialization that uses fixed matrix math for speed.

    \n-
    Date
    June 2015
    \n-
    Author
    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,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-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+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-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+ 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 _\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+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 *\b**\b**\b**\b**\b* D\bDe\bet\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+A factor with a quadratic error function - a Gaussian.\n+GaussianFactor\n Author\n- Frank Dellaert\n+ Richard Roberts, Christian Potthast\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+ * _\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/a00803.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00803.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var a00803 = [\n- [\"gtsam::BinaryJacobianFactor< M, N1, N2 >\", \"a03720.html\", \"a03720\"],\n- [\"gtsam::traits< BinaryJacobianFactor< M, N1, N2 > >\", \"a03724.html\", null]\n+ [\"gtsam::GaussianFactor\", \"a03780.html\", \"a03780\"],\n+ [\"gtsam::traits< GaussianFactor >\", \"a03784.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00803_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00803_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/BinaryJacobianFactor.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@@ -98,132 +98,170 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    BinaryJacobianFactor.h
    \n+
    GaussianFactor.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/base/timing.h>
    \n+\n+
    24#include <gtsam/base/Matrix.h>
    \n+
    25#include <gtsam/base/Testable.h>
    \n
    26
    \n
    27namespace gtsam {
    \n
    28
    \n-
    32template<int M, int N1, int N2>
    \n-
    \n-\n-
    34
    \n-
    \n-
    36 BinaryJacobianFactor(Key key1, const Eigen::Matrix<double, M, N1>& A1,
    \n-
    37 Key key2, const Eigen::Matrix<double, M, N2>& A2,
    \n-
    38 const Eigen::Matrix<double, M, 1>& b, //
    \n-
    39 const SharedDiagonal& model = SharedDiagonal()) :
    \n-
    40 JacobianFactor(key1, A1, key2, A2, b, model) {
    \n-
    41 }
    \n-
    \n-
    42
    \n-
    43 inline Key key1() const {
    \n-
    44 return keys_[0];
    \n-
    45 }
    \n-
    46 inline Key key2() const {
    \n-
    47 return keys_[1];
    \n-
    48 }
    \n-
    49
    \n-
    50 // Fixed-size matrix update
    \n-
    \n-
    51 void updateHessian(const KeyVector& infoKeys,
    \n-
    52 SymmetricBlockMatrix* info) const override {
    \n-
    53 gttic(updateHessian_BinaryJacobianFactor);
    \n-
    54 // Whiten the factor if it has a noise model
    \n-
    55 const SharedDiagonal& model = get_model();
    \n-
    56 if (model && !model->isUnit()) {
    \n-
    57 if (model->isConstrained())
    \n-
    58 throw std::invalid_argument(
    \n-
    59 "BinaryJacobianFactor::updateHessian: cannot update information with "
    \n-
    60 "constrained noise model");
    \n-
    61 BinaryJacobianFactor whitenedFactor(key1(), model->Whiten(getA(begin())),
    \n-
    62 key2(), model->Whiten(getA(end())), model->whiten(getb()));
    \n-
    63 whitenedFactor.updateHessian(infoKeys, info);
    \n-
    64 } else {
    \n-
    65 // First build an array of slots
    \n-
    66 DenseIndex slot1 = Slot(infoKeys, key1());
    \n-
    67 DenseIndex slot2 = Slot(infoKeys, key2());
    \n-
    68 DenseIndex slotB = info->nBlocks() - 1;
    \n-
    69
    \n-
    70 const Matrix& Ab = Ab_.matrix();
    \n-
    71 Eigen::Block<const Matrix, M, N1> A1(Ab, 0, 0);
    \n-
    72 Eigen::Block<const Matrix, M, N2> A2(Ab, 0, N1);
    \n-
    73 Eigen::Block<const Matrix, M, 1> b(Ab, 0, N1 + N2);
    \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+
    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-
    75 // We perform I += A'*A to the upper triangle
    \n-
    76 info->diagonalBlock(slot1).rankUpdate(A1.transpose());
    \n-
    77 info->updateOffDiagonalBlock(slot1, slot2, A1.transpose() * A2);
    \n-
    78 info->updateOffDiagonalBlock(slot1, slotB, A1.transpose() * b);
    \n-
    79 info->diagonalBlock(slot2).rankUpdate(A2.transpose());
    \n-
    80 info->updateOffDiagonalBlock(slot2, slotB, A2.transpose() * b);
    \n-
    81 info->updateDiagonalBlock(slotB, b.transpose() * b);
    \n-
    82 }
    \n-
    83 }
    \n-
    \n-
    84};
    \n-
    \n-
    85
    \n-
    86template<int M, int N1, int N2>
    \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-
    Timing utilities.
    \n-
    Access to matrices via blocks of pre-defined sizes.
    \n-\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+
    Concept check for values that can be used in unit tests.
    \n+
    typedef and functions to augment Eigen's MatrixXd
    \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
    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-
    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-
    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 Matrix & matrix() const
    Access to full matrix (including any portions excluded by rowStart(), rowEnd(), and firstBlock())
    Definition VerticalBlockMatrix.h:188
    \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-
    const_iterator end() const
    Iterator at end of involved variable keys.
    Definition Factor.h:146
    \n-
    A binary JacobianFactor specialization that uses fixed matrix math for speed.
    Definition BinaryJacobianFactor.h:33
    \n-
    BinaryJacobianFactor(Key key1, const Eigen::Matrix< double, M, N1 > &A1, Key key2, const Eigen::Matrix< double, M, N2 > &A2, const Eigen::Matrix< double, M, 1 > &b, const SharedDiagonal &model=SharedDiagonal())
    Constructor.
    Definition BinaryJacobianFactor.h:36
    \n-
    void updateHessian(const KeyVector &infoKeys, SymmetricBlockMatrix *info) const override
    Update an information matrix by adding the information corresponding to this factor (used internally ...
    Definition BinaryJacobianFactor.h:51
    \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-
    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+
    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,99 +1,128 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-BinaryJacobianFactor.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+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/_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-24#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-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\bi_\bm_\bi_\bn_\bg_\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/_\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-32template\n-_\b3_\b3struct _\bB_\bi_\bn_\ba_\br_\by_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br: _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br {\n-34\n-_\b3_\b6 _\bB_\bi_\bn_\ba_\br_\by_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by key1, const Eigen::Matrix& A1,\n-37 _\bK_\be_\by key2, const Eigen::Matrix& A2,\n-38 const Eigen::Matrix& b, //\n-39 const SharedDiagonal& model = SharedDiagonal()) :\n-40 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(key1, A1, key2, A2, b, model) {\n-41 }\n-42\n-43 inline _\bK_\be_\by key1() const {\n-44 return _\bk_\be_\by_\bs_\b_[0];\n-45 }\n-46 inline _\bK_\be_\by key2() const {\n-47 return _\bk_\be_\by_\bs_\b_[1];\n-48 }\n-49\n-50 // Fixed-size matrix update\n-_\b5_\b1 void _\bu_\bp_\bd_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& infoKeys,\n-52 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx* info) const override {\n-53 gttic(updateHessian_BinaryJacobianFactor);\n-54 // Whiten the factor if it has a noise model\n-55 const SharedDiagonal& model = _\bg_\be_\bt_\b__\bm_\bo_\bd_\be_\bl();\n-56 if (model && !model->isUnit()) {\n-57 if (model->isConstrained())\n-58 throw std::invalid_argument(\n-59 \"BinaryJacobianFactor::updateHessian: cannot update information with \"\n-60 \"constrained noise model\");\n-61 _\bB_\bi_\bn_\ba_\br_\by_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br whitenedFactor(key1(), model->Whiten(_\bg_\be_\bt_\bA(_\bb_\be_\bg_\bi_\bn())),\n-62 key2(), model->Whiten(_\bg_\be_\bt_\bA(_\be_\bn_\bd())), model->whiten(_\bg_\be_\bt_\bb()));\n-63 whitenedFactor._\bu_\bp_\bd_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn(infoKeys, info);\n-64 } else {\n-65 // First build an array of slots\n-66 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx slot1 = Slot(infoKeys, key1());\n-67 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx slot2 = Slot(infoKeys, key2());\n-68 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx slotB = info->_\bn_\bB_\bl_\bo_\bc_\bk_\bs() - 1;\n-69\n-70 const Matrix& Ab = Ab_._\bm_\ba_\bt_\br_\bi_\bx();\n-71 Eigen::Block A1(Ab, 0, 0);\n-72 Eigen::Block A2(Ab, 0, N1);\n-73 Eigen::Block b(Ab, 0, N1 + N2);\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+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-75 // We perform I += A'*A to the upper triangle\n-76 info->_\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(slot1).rankUpdate(A1.transpose());\n-77 info->_\bu_\bp_\bd_\ba_\bt_\be_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(slot1, slot2, A1.transpose() * A2);\n-78 info->_\bu_\bp_\bd_\ba_\bt_\be_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(slot1, slotB, A1.transpose() * b);\n-79 info->_\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(slot2).rankUpdate(A2.transpose());\n-80 info->_\bu_\bp_\bd_\ba_\bt_\be_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(slot2, slotB, A2.transpose() * b);\n-81 info->_\bu_\bp_\bd_\ba_\bt_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(slotB, b.transpose() * b);\n-82 }\n-83 }\n-84};\n-85\n-86template\n-_\b8_\b7struct _\bt_\br_\ba_\bi_\bt_\bs<_\bB_\bi_\bn_\ba_\br_\by_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br > : _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be<\n-88 BinaryJacobianFactor > {\n-89};\n-90\n-91} //namespace gtsam\n-_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n-Timing utilities.\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-_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\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+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n+_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+typedef and functions to augment Eigen's MatrixXd\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@@ -101,86 +130,126 @@\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:_\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:_\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:_\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_\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:_\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:_\bB_\bi_\bn_\ba_\br_\by_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-A binary JacobianFactor specialization that uses fixed matrix math for speed.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BinaryJacobianFactor.h:33\n-_\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:_\bB_\bi_\bn_\ba_\br_\by_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-BinaryJacobianFactor(Key key1, const Eigen::Matrix< double, M, N1 > &A1, Key\n-key2, const Eigen::Matrix< double, M, N2 > &A2, const Eigen::Matrix< double, M,\n-1 > &b, const SharedDiagonal &model=SharedDiagonal())\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BinaryJacobianFactor.h:36\n-_\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:_\bu_\bp_\bd_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn\n-void updateHessian(const KeyVector &infoKeys, SymmetricBlockMatrix *info) const\n-override\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BinaryJacobianFactor.h:51\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_\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:_\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:_\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\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+ * _\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/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/GaussianDensity.cpp 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@@ -94,36 +94,54 @@\n \n \n \n \n \n
    \n \n-
    GaussianDensity.cpp File Reference
    \n+Classes |\n+Namespaces |\n+Functions
    \n+
    linearAlgorithms-inst.h File Reference
    \n \n
    \n \n-

    A Gaussian Density. \n+

    Templated algorithms that are used in multiple places in linear. \n More...

    \n+\n+

    Go to the source code of this file.

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

    \n+Classes

    struct  gtsam::internal::linearAlgorithms::OptimizeData
     
    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+Functions

    \n+template<class BAYESTREE >
    VectorValues gtsam::internal::linearAlgorithms::optimizeBayesTree (const BAYESTREE &bayesTree)
     
    \n

    Detailed Description

    \n-

    A Gaussian Density.

    \n-
    Author
    Frank Dellaert
    \n-
    Date
    Jan 21, 2012
    \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,22 +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-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+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:_\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+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+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-A Gaussian Density.\n+Templated algorithms that are used in multiple places in linear.\n Author\n- Frank Dellaert\n- Date\n- Jan 21, 2012\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_\bD_\be_\bn_\bs_\bi_\bt_\by_\b._\bc_\bp_\bp\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/a00809.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00809.html", "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/linear/GaussianBayesNet.h File Reference\n \n \n \n \n \n \n \n@@ -94,39 +94,47 @@\n \n \n \n \n \n
    \n \n-
    KalmanFilter.cpp File Reference
    \n+
    GaussianBayesNet.h File Reference
    \n
    \n
    \n \n-

    Simple linear Kalman filter. \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-

    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+

    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,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\n-KalmanFilter.cpp 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\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-Simple linear Kalman filter.\n-Implemented using factor graphs, i.e., does Cholesky-based SRIF, really.\n- Date\n- Sep 3, 2011\n+Chordal Bayes Net, the result of eliminating a factor graph.\n+GaussianBayesNet\n Author\n- Stephen Williams\n Frank Dellaert\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+ * _\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/a00815.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00815.html", "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/GaussianJunctionTree.h File Reference\n \n \n \n \n \n \n \n@@ -95,54 +95,42 @@\n \n \n \n \n
    \n \n-
    ConjugateGradientSolver.h File Reference
    \n+Namespaces
    \n+
    GaussianJunctionTree.h File Reference
    \n \n
    \n \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 \n

    \n Classes

    class  gtsam::ConjugateGradientParameters
     parameters for the conjugate gradient method More...
    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-\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+
    Date
    Mar 29, 2013
    \n+
    Author
    Frank Dellaert
    \n
    \n-Sungtae An
    \n-
    Date
    Nov 6, 2014
    \n+Richard Roberts
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,33 +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-ConjugateGradientSolver.h File Reference\n-Implementation of Conjugate Gradient solver for a linear system. _\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+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:_\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+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-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- Author\n- Yong-Dian Jian\n- Sungtae An\n Date\n- Nov 6, 2014\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- * _\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_\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/a00815_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00815_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/ConjugateGradientSolver.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,189 +98,66 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    ConjugateGradientSolver.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
    6 * Authors: Frank Dellaert, 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-
    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-
    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 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-
    162
    \n-
    163
    \n-
    164}
    \n-
    Some support classes for iterative solvers.
    \n+
    19#pragma once
    \n+
    20
    \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+
    53 GaussianJunctionTree(const GaussianEliminationTree& eliminationTree);
    \n+
    54 };
    \n+
    \n+
    55
    \n+
    56}
    \n+
    The junction tree.
    \n+
    Linear Factor Graph where all factors are Gaussians.
    \n+
    Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.
    \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+
    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,216 +1,77 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ConjugateGradientSolver.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 6 * Authors: Frank Dellaert, 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-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-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 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-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+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+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+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_\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_\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:_\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:_\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- * _\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_\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/a00818.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00818.html", "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/SubgraphSolver.h File Reference\n \n \n \n \n \n \n \n@@ -94,36 +94,49 @@\n \n \n \n \n \n
    \n \n-
    linearExceptions.cpp File Reference
    \n+
    SubgraphSolver.h File Reference
    \n
    \n
    \n \n-

    Exceptions that may be thrown by linear solver components. \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-

    Exceptions that may be thrown by linear solver components.

    \n-
    Author
    Richard Roberts
    \n-
    Date
    Aug 17, 2012
    \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,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-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+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 N\bNa\bam\bme\bes\bsp\bpa\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- Author\n- Richard Roberts\n+Subgraph Solver from IROS 2010.\n Date\n- Aug 17, 2012\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- * _\bl_\bi_\bn_\be_\ba_\br_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bc_\bp_\bp\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/a00821.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00821.html", "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/linear/VectorValues.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,54 +94,50 @@\n \n \n \n \n \n
    \n \n-
    linearAlgorithms-inst.h File Reference
    \n+
    VectorValues.cpp File Reference
    \n
    \n
    \n \n-

    Templated algorithms that are used in multiple places in linear. \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::internal::linearAlgorithms::OptimizeData
     
    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

    \n-template<class BAYESTREE >
    VectorValues gtsam::internal::linearAlgorithms::optimizeBayesTree (const BAYESTREE &bayesTree)
     
    \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-

    Templated algorithms that are used in multiple places in linear.

    \n-
    Author
    Richard Roberts
    \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,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-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\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-\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-\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-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+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-Templated algorithms that are used in multiple places in linear.\n+Implementations for _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs.\n Author\n Richard Roberts\n+ Alex Cunningham\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+ * _\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/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/GaussianJunctionTree.cpp 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@@ -94,34 +94,51 @@\n \n \n \n \n \n
    \n \n-
    GaussianJunctionTree.cpp File Reference
    \n+Namespaces |\n+Functions
    \n+
    GaussianBayesTree-inl.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 Namespaces

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

    Detailed Description

    \n-
    Date
    Mar 29, 2013
    \n-
    Author
    Frank Dellaert
    \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,21 +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-GaussianJunctionTree.cpp File Reference\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+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+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\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+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_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bc_\bp_\bp\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/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/VectorValues.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@@ -94,47 +94,44 @@\n \n \n \n \n \n
    \n \n-
    VectorValues.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    GaussianBayesTree.cpp File Reference
    \n \n
    \n \n-

    Factor Graph Values. \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-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+Functions

    \n+LogDeterminantData & gtsam::internal::logDeterminant (const GaussianBayesTreeClique::shared_ptr &clique, LogDeterminantData &parentSum)
     
    \n

    Detailed Description

    \n-

    Factor Graph Values.

    \n-
    Author
    Richard Roberts
    \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,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-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 | _\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 N\bNa\bam\bme\bes\bsp\bpa\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+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\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+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- * _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\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/a00833.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00833.html", "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/JacobianFactor.h File Reference\n \n \n \n \n \n \n \n@@ -95,46 +95,54 @@\n \n \n \n \n
    \n \n-
    GaussianConditional.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    JacobianFactor.h File Reference
    \n \n
    \n \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 Classes

    class  gtsam::GaussianConditional
     A GaussianConditional functions as the node in a Bayes network. More...
    class  gtsam::JacobianFactor
     A Gaussian factor in the squared-error form. More...
     
    struct  gtsam::traits< GaussianConditional >
     traits More...
    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-

    Conditional Gaussian Base class.

    \n-
    Author
    Christian Potthast
    \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,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-GaussianConditional.h 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 | _\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:_\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+ 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-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+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-Conditional Gaussian Base class.\n Author\n+ Richard Roberts\n Christian Potthast\n+ Frank Dellaert\n+ Date\n+ Dec 8, 2010\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+ * _\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/a00833.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00833.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,5 @@\n var a00833 = [\n- [\"gtsam::traits< GaussianConditional >\", \"a03768.html\", null]\n+ [\"gtsam::JacobianFactor\", \"a03844.html\", \"a03844\"],\n+ [\"gtsam::traits< JacobianFactor >\", \"a03848.html\", null],\n+ [\"EliminateQR\", \"a00833.html#ab56c4bfa363f8c23c48eb078e9c84a9c\", null]\n ];\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/GaussianConditional.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,224 +98,360 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    GaussianConditional.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// \\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-
    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+
    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-
    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+
    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-
    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+\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+
    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 constABlock S(const_iterator it) const { return BaseFactor::getA(it); }
    \n+
    224 using Base::hessianDiagonal;
    \n
    225
    \n-
    227 const constBVector d() const { return BaseFactor::getb(); }
    \n+
    227 void hessianDiagonalAdd(VectorValues& d) const override;
    \n
    228
    \n-
    240 inline double determinant() const { return exp(logDeterminant()); }
    \n-
    241
    \n-
    253 double logDeterminant() const;
    \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-
    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+
    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-
    297template<>
    \n-
    298struct traits<GaussianConditional> : public Testable<GaussianConditional> {};
    \n-
    299
    \n-
    300} // \\ namespace gtsam
    \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-\n-
    303
    \n-
    Base class for conditional densities.
    \n-
    Conditional Gaussian Base class.
    \n-\n-
    Factor Graph Values.
    \n-
    Included from all GTSAM files.
    \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+\n+
    A factor with a quadratic error function - a Gaussian.
    \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
    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-
    HybridValues represents a collection of DiscreteValues and VectorValues.
    Definition HybridValues.h:38
    \n-
    Definition Conditional.h:64
    \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-
    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+
    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,298 +1,502 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GaussianConditional.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// \\callgraph\n-19\n-20#pragma once\n-21\n-22#include \n-23\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/_\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-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+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-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+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-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+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+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+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-_\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+224 using Base::hessianDiagonal;\n 225\n-_\b2_\b2_\b7 const constBVector _\bd() const { return BaseFactor::getb(); }\n+227 void hessianDiagonalAdd(_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& d) const override;\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+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-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+_\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-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+_\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-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-_\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-_\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+_\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+_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\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_\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:_\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:_\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:_\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:_\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:_\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- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\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/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/GaussianFactorGraph.cpp 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@@ -94,55 +94,39 @@\n \n \n \n \n \n
    \n \n-
    GaussianFactorGraph.cpp File Reference
    \n+Namespaces
    \n+
    KalmanFilter.cpp File Reference
    \n \n
    \n \n-

    Linear Factor Graph where all factors are Gaussians. \n+

    Simple linear Kalman filter. \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::SparseTriplets = std::vector< std::tuple< int, int, double > >
     
    \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-Richard Roberts
    \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,30 +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 | _\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+_\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 N\bNa\bam\bme\bes\bsp\bpa\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-\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+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- Kai Ni\n- Christian Potthast\n- Richard Roberts\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_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bc_\bp_\bp\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/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/GaussianFactor.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@@ -95,34 +95,35 @@\n \n \n \n \n
    \n \n-
    GaussianFactor.cpp File Reference
    \n+
    linearExceptions.cpp File Reference
    \n
    \n
    \n \n-

    A factor with a quadratic error function - a Gaussian. \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

    Detailed Description

    \n-

    A factor with a quadratic error function - a Gaussian.

    \n-

    GaussianFactor

    Author
    Fan Jiang
    \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,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-GaussianFactor.cpp File Reference\n-A factor with a quadratic error function - a Gaussian. _\bM_\bo_\br_\be_\b._\b._\b.\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 *\b**\b**\b**\b**\b* D\bDe\bet\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+Exceptions that may be thrown by linear solver components.\n Author\n- Fan Jiang\n+ Richard Roberts\n+ Date\n+ Aug 17, 2012\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+ * _\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/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/SubgraphBuilder.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@@ -98,216 +98,144 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    SubgraphBuilder.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-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+
    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/**************************************************************************/
    \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+
    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 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-
    A thin wrapper around std::map that uses boost's fast_pool_allocator.
    \n-
    Typedefs for easier changing of types.
    \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+
    Exceptions that may be thrown by linear solver components.
    \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+
    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,230 +1,183 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SubgraphBuilder.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-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-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+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+*/\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/**************************************************************************/\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+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 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-_\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_\by_\bp_\be_\bs_\b._\bh\n-Typedefs for easier changing of types.\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+_\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:_\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:_\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 * _\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+ * 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/a00848.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00848.html", "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/linear/HessianFactor.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,47 +94,49 @@\n \n \n \n \n \n
    \n \n-
    GaussianBayesNet.h File Reference
    \n+Namespaces |\n+Typedefs |\n+Functions
    \n+
    HessianFactor.cpp 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+\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-

    Chordal Bayes Net, the result of eliminating a factor graph.

    \n-

    GaussianBayesNet

    Author
    Frank Dellaert
    \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,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-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+_\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-Chordal Bayes Net, the result of eliminating a factor graph.\n-GaussianBayesNet\n Author\n- Frank Dellaert\n+ Richard Roberts\n+ Date\n+ Dec 8, 2010\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+ * _\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/a00848.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00848.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,4 @@\n var a00848 = [\n- [\"gtsam::traits< GaussianBayesNet >\", \"a03744.html\", null]\n+ [\"EliminateCholesky\", \"a00848.html#ga37760d3ca31c6d8d60a3a2a17babc3a4\", null],\n+ [\"EliminatePreferCholesky\", \"a00848.html#gadbb147d2a9039f67ad3b8b5515d2e5cc\", null]\n ];\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/iterative.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@@ -94,62 +94,34 @@\n \n \n \n \n \n
    \n \n-
    iterative.cpp File Reference
    \n+Namespaces
    \n+
    GaussianJunctionTree.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+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-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_\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/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/Errors.h 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@@ -96,85 +96,55 @@\n \n \n \n
    \n \n-
    Errors.h File Reference
    \n+
    SubgraphBuilder.h 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+\n+\n+\n+\n+\n \n

    \n Classes

    struct  gtsam::traits< Errors >
     traits More...
    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-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 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+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,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 | _\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+_\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-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+ 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-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-\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+ _\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._\bh\n * Generated on Tue Jan 9 2024 05:51: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.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00857.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,11 +1,8 @@\n var a00857 = [\n- [\"gtsam::traits< Errors >\", \"a03736.html\", null],\n- [\"Errors\", \"a00857.html#a74eb09e3192f06bae9de746aa981624a\", null],\n- [\"axpy\", \"a00857.html#a5644e12e89afaac433f5d61c3d8e9003\", null],\n- [\"createErrors\", \"a00857.html#aa84fa88db91d429bec261c655fc54bd6\", null],\n- [\"dot\", \"a00857.html#a106ec458ddb425604809da93346af55d\", null],\n- [\"operator+\", \"a00857.html#a552de56fca49d1b4942dd9b8e8357b0a\", null],\n- [\"operator-\", \"a00857.html#aa91c0485819ec2bfd249a922c81e3eb4\", null],\n- [\"operator-\", \"a00857.html#af2dc48a6a2e9abf4d0636578847a6b5a\", null],\n- [\"print\", \"a00857.html#a6abcac97e441f1454790ff53caa1b229\", null]\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\", \"a00857.html#a0ec82adc6e13261cf4a012b65b301256\", null],\n+ [\"splitFactorGraph\", \"a00857.html#a2c7eca9f27b43b52756c1afd85478dd8\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00857_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00857_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/Errors.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/SubgraphBuilder.h Source File\n \n \n \n \n \n \n \n@@ -98,95 +98,216 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    Errors.h
    \n+
    SubgraphBuilder.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-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// \\callgraph
    \n+
    18#pragma once
    \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+
    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-
    28namespace gtsam {
    \n+
    28#include <vector>
    \n
    29
    \n-
    30// Forward declarations
    \n-
    31class VectorValues;
    \n-
    32
    \n-\n+
    30namespace boost {
    \n+
    31namespace serialization {
    \n+
    32class access;
    \n+
    33} /* namespace serialization */
    \n+
    34} /* namespace boost */
    \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+
    36namespace gtsam {
    \n+
    37
    \n+
    38// Forward declarations
    \n+
    39class GaussianFactorGraph;
    \n+
    40struct PreconditionerParameters;
    \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-
    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-
    typedef and functions to augment Eigen's VectorXd
    \n-
    Concept check for values that can be used in unit tests.
    \n-
    A thin wrapper around std::list that uses boost's fast_pool_allocator.
    \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+
    A thin wrapper around std::map that uses boost's fast_pool_allocator.
    \n+
    Typedefs for easier changing of types.
    \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-
    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-
    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+
    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
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,115 +1,230 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Errors.h\n+SubgraphBuilder.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// \\callgraph\n+18#pragma once\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+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 <_\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-28namespace _\bg_\bt_\bs_\ba_\bm {\n+28#include \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+30namespace boost {\n+31namespace serialization {\n+32class access;\n+33} /* namespace serialization */\n+34} /* namespace boost */\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+36namespace _\bg_\bt_\bs_\ba_\bm {\n+37\n+38// Forward declarations\n+39class GaussianFactorGraph;\n+40struct PreconditionerParameters;\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-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-_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-typedef and functions to augment Eigen's VectorXd\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_\bL_\bi_\bs_\bt_\b._\bh\n-A thin wrapper around std::list that uses boost's fast_pool_allocator.\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+_\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_\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:_\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:_\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:_\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\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._\bh\n * Generated on Tue Jan 9 2024 05:51: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/a00860.html", "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/SubgraphPreconditioner.h File Reference\n \n \n \n \n \n \n \n@@ -96,44 +96,41 @@\n \n \n \n
    \n \n-
    Sampler.h File Reference
    \n+
    SubgraphPreconditioner.h File Reference
    \n
    \n
    \n \n-

    sampling from a NoiseModel \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::Sampler
     Sampling structure that keeps internal random number generators for diagonal distributions specified by NoiseModel. More...
    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-

    sampling from a NoiseModel

    \n-
    Author
    Frank Dellaert
    \n-
    \n-Alex Cunningham
    \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,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-Sampler.h File Reference\n-sampling from a NoiseModel _\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:_\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+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-sampling from a NoiseModel\n+ Date\n+ Dec 31, 2009\n Author\n- Frank Dellaert\n- Alex Cunningham\n+ Frank Dellaert, Yong-Dian Jian\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bS_\ba_\bm_\bp_\bl_\be_\br_\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._\bh\n * Generated on Tue Jan 9 2024 05:51: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.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00860.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,4 @@\n var a00860 = [\n- [\"gtsam::Sampler\", \"a04020.html\", \"a04020\"]\n+ [\"gtsam::SubgraphPreconditionerParameters\", \"a04048.html\", null],\n+ [\"gtsam::SubgraphPreconditioner\", \"a04052.html\", \"a04052\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00860_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00860_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/SubgraphPreconditioner.h Source File\n \n \n \n \n \n \n \n@@ -98,79 +98,158 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    Sampler.h
    \n+
    SubgraphPreconditioner.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-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-\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-
    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-
    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+
    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+
    28
    \n+
    29#include <boost/shared_ptr.hpp>
    \n+
    30
    \n+
    31#include <map>
    \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+
    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 Vector sigmas() const { return model_->sigmas(); }
    \n+
    68 public:
    \n
    69
    \n-
    70 const noiseModel::Diagonal::shared_ptr& model() const { return model_; }
    \n+\n
    71
    \n-
    75
    \n-
    77 Vector sample() const;
    \n-
    78
    \n-
    80 static Vector sampleDiagonal(const Vector& sigmas, std::mt19937_64* rng);
    \n+\n+\n+
    80
    \n+
    81 ~SubgraphPreconditioner() override {}
    \n
    82
    \n-
    83 protected:
    \n-
    85 Vector sampleDiagonal(const Vector& sigmas) const;
    \n-
    86};
    \n-
    \n-
    87
    \n-
    88} // namespace gtsam
    \n-\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+
    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+
    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+
    Some support classes for iterative solvers.
    \n+
    Linear Factor Graph where all factors are Gaussians.
    \n+
    vector of errors
    \n+
    Chordal Bayes Net, the result of eliminating a factor graph.
    \n+\n+
    Factor Graph Values.
    \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+
    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+
    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,80 +1,189 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Sampler.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-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-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-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+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+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+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 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 Vector sigmas() const { return model_->sigmas(); }\n+68 public:\n 69\n-70 const noiseModel::Diagonal::shared_ptr& model() const { return model_; }\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-75\n-77 Vector sample() const;\n-78\n-80 static Vector sampleDiagonal(const Vector& sigmas, std::mt19937_64* rng);\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-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+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+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+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+_\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_\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_\br_\br_\bo_\br_\bs_\b._\bh\n+vector of errors\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+_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\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:_\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:_\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:_\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- * _\bS_\ba_\bm_\bp_\bl_\be_\br_\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._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00863.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00863.html", "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/SparseEigen.h File Reference\n \n \n \n \n \n \n \n@@ -94,54 +94,62 @@\n \n \n \n \n \n
    \n \n-
    KalmanFilter.h File Reference
    \n+Typedefs |\n+Functions
    \n+
    SparseEigen.h File Reference
    \n \n
    \n \n-

    Simple linear Kalman filter. \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-Classes

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

    \n-Macros

    \n-#define KALMANFILTER_DEFAULT_FACTORIZATION   QR
     

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

    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+

    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,32 +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 | _\bM_\ba_\bc_\br_\bo_\bs\n-KalmanFilter.h File Reference\n-Simple linear Kalman filter. _\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:_\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+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-Simple linear Kalman filter.\n-Implemented using factor graphs, i.e., does Cholesky-based SRIF, really.\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- Sep 3, 2011\n+ Aug 2019\n Author\n- Stephen Williams\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- * _\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\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/a00863.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00863.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,4 @@\n var a00863 = [\n- [\"gtsam::KalmanFilter\", \"a03852.html\", \"a03852\"]\n+ [\"SparseEigen\", \"a00863.html#a52b9b28b076a8ae17d6d3d72ee1229c3\", null],\n+ [\"sparseJacobianEigen\", \"a00863.html#aa9013a9053629f0c00b97726d9d8e19e\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00863_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00863_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/SparseEigen.h Source File\n \n \n \n \n \n \n \n@@ -98,135 +98,79 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    KalmanFilter.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-
    20#pragma once
    \n-
    21
    \n-\n-\n-\n+
    24#pragma once
    \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+\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-
    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-
    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-\n-
    A Gaussian Density.
    \n-
    Linear Factor Graph where all factors are Gaussians.
    \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+
    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+
    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-
    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+
    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-
    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+
    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,167 +1,89 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-KalmanFilter.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-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+24#pragma once\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+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-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-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-_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by_\b._\bh\n-A Gaussian Density.\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 _\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_\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+_\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:_\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:_\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:_\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- * _\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\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/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/GaussianISAM.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@@ -96,43 +96,45 @@\n \n \n \n
    \n \n-
    GaussianISAM.h File Reference
    \n+
    GaussianConditional.h File Reference
    \n
    \n
    \n \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 Classes

    class  gtsam::GaussianISAM
    class  gtsam::GaussianConditional
     A GaussianConditional functions as the node in a Bayes network. More...
     
    struct  gtsam::traits< GaussianISAM >
     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

    Detailed Description

    \n-
    Date
    July 29, 2013
    \n-
    Author
    Frank Dellaert
    \n-
    \n-Richard Roberts
    \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,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-GaussianISAM.h File Reference\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- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM\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-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_\bI_\bS_\bA_\bM_\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 *\b**\b**\b**\b**\b* D\bDe\bet\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+Conditional Gaussian Base class.\n Author\n- Frank Dellaert\n- Richard Roberts\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_\bI_\bS_\bA_\bM_\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/a00866.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00866.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a00866 = [\n- [\"gtsam::GaussianISAM\", \"a03800.html\", \"a03800\"],\n- [\"gtsam::traits< GaussianISAM >\", \"a03804.html\", null]\n+ [\"gtsam::traits< GaussianConditional >\", \"a03768.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00866_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00866_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/GaussianISAM.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,70 +98,224 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    GaussianISAM.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-
    19#pragma once
    \n-
    20
    \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-\n-
    31 typedef GaussianISAM This;
    \n-
    32 typedef boost::shared_ptr<This> shared_ptr;
    \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-
    36
    \n-\n-
    39
    \n-
    41 GaussianISAM(const GaussianBayesTree& bayesTree);
    \n-
    42
    \n-
    44
    \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+
    \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+
    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+
    Conditional Gaussian Base class.
    \n+\n+
    Factor Graph Values.
    \n+
    Included from all GTSAM files.
    \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-
    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+
    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
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,75 +1,298 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GaussianISAM.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-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/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bI_\bS_\bA_\bM_\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-_\b2_\b7 class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM : public _\bI_\bS_\bA_\bM\n-28 {\n-29 public:\n-30 typedef _\bI_\bS_\bA_\bM_\b<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b> _\bB_\ba_\bs_\be;\n-31 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM _\bT_\bh_\bi_\bs;\n-32 typedef boost::shared_ptr shared_ptr;\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-36\n-38 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM();\n-39\n-41 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be& bayesTree);\n-42\n-44\n-45 };\n-46\n-48 template <>\n-_\b4_\b9 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-50\n-51}\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n-_\bI_\bS_\bA_\bM_\b._\bh\n-Incremental update functionality (iSAM) for 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+_\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+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+_\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+_\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_\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\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:_\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:_\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_\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:_\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\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM_\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/a00869.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00869.html", "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/VectorValues.h File Reference\n \n \n \n \n \n \n \n@@ -94,38 +94,47 @@\n \n \n \n \n \n
    \n \n-
    SubgraphSolver.cpp File Reference
    \n+
    VectorValues.h File Reference
    \n
    \n
    \n \n-

    Subgraph Solver from IROS 2010. \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

    Detailed Description

    \n-

    Subgraph Solver from IROS 2010.

    \n-
    Date
    2010
    \n-
    Author
    Frank Dellaert
    \n-
    \n-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,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-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\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 *\b**\b**\b**\b**\b* D\bDe\bet\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+Factor Graph _\bV_\ba_\bl_\bu_\be_\bs.\n Author\n- Frank Dellaert\n- 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_\bS_\bo_\bl_\bv_\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/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/HessianFactor-inl.h 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,38 +94,52 @@\n \n \n \n \n \n
    \n \n-
    HessianFactor-inl.h File Reference
    \n+Classes |\n+Namespaces |\n+Functions
    \n+
    iterative-inl.h File Reference
    \n \n
    \n \n-

    Contains the HessianFactor class, a general quadratic factor. \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-

    Contains the HessianFactor class, a general quadratic factor.

    \n-
    Author
    Richard Roberts
    \n-
    Date
    Dec 8, 2010
    \n+

    Iterative methods, template 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,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-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 | _\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-Contains the HessianFactor class, a general quadratic factor.\n+Iterative methods, template implementation.\n Author\n- Richard Roberts\n+ Frank Dellaert\n Date\n- Dec 8, 2010\n+ Dec 28, 2009\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_\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/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/HessianFactor-inl.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/iterative-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-
    HessianFactor-inl.h
    \n+
    iterative-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,49 +114,163 @@\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+\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+
    \n+
    30 struct CGState {
    \n+
    31
    \n+\n+
    33 const Parameters &parameters_;
    \n+
    34
    \n+
    35 int k;
    \n+
    36 bool steepest;
    \n+
    37 V g, d;
    \n+
    38 double gamma, threshold;
    \n+
    39 E Ad;
    \n
    40
    \n-
    41}
    \n+
    41 /* ************************************************************************* */
    \n+
    42 // Constructor
    \n+
    43 CGState(const S& Ab, const V& x, const Parameters &parameters, bool steep):
    \n+
    44 parameters_(parameters),k(0),steepest(steep) {
    \n+
    45
    \n+
    46 // Start with g0 = A'*(A*x0-b), d0 = - g0
    \n+
    47 // i.e., first step is in direction of negative gradient
    \n+
    48 g = Ab.gradient(x);
    \n+
    49 d = g; // instead of negating gradient, alpha will be negated
    \n+
    50
    \n+
    51 // init gamma and calculate threshold
    \n+
    52 gamma = dot(g,g);
    \n+
    53 threshold = std::max(parameters_.epsilon_abs(), parameters_.epsilon() * parameters_.epsilon() * gamma);
    \n+
    54
    \n+
    55 // Allocate and calculate A*d for first iteration
    \n+
    56 if (gamma > parameters_.epsilon_abs()) Ad = Ab * d;
    \n+
    57 }
    \n+
    58
    \n+
    59 /* ************************************************************************* */
    \n+
    60 // print
    \n+
    61 void print(const V& x) {
    \n+
    62 std::cout << "iteration = " << k << std::endl;
    \n+
    63 gtsam::print(x,"x");
    \n+
    64 gtsam::print(g, "g");
    \n+
    65 std::cout << "dotg = " << gamma << std::endl;
    \n+
    66 gtsam::print(d, "d");
    \n+
    67 gtsam::print(Ad, "Ad");
    \n+
    68 }
    \n+
    69
    \n+
    70 /* ************************************************************************* */
    \n+
    71 // step the solution
    \n+
    72 double takeOptimalStep(V& x) {
    \n+
    73 // TODO: can we use gamma instead of dot(d,g) ????? Answer not trivial
    \n+
    74 double alpha = -dot(d, g) / dot(Ad, Ad); // calculate optimal step-size
    \n+
    75 x += alpha * d; // do step in new search direction, x += alpha*d
    \n+
    76 return alpha;
    \n+
    77 }
    \n+
    78
    \n+
    79 /* ************************************************************************* */
    \n+
    80 // take a step, return true if converged
    \n+
    81 bool step(const S& Ab, V& x) {
    \n+
    82
    \n+
    83 if ((++k) >= ((int)parameters_.maxIterations())) return true;
    \n+
    84
    \n+
    85 //---------------------------------->
    \n+
    86 double alpha = takeOptimalStep(x);
    \n+
    87
    \n+
    88 // update gradient (or re-calculate at reset time)
    \n+
    89 if (k % parameters_.reset() == 0) g = Ab.gradient(x);
    \n+
    90 // axpy(alpha, Ab ^ Ad, g); // g += alpha*(Ab^Ad)
    \n+
    91 else Ab.transposeMultiplyAdd(alpha, Ad, g);
    \n+
    92
    \n+
    93 // check for convergence
    \n+
    94 double new_gamma = dot(g, g);
    \n+
    95
    \n+
    96 if (parameters_.verbosity() != ConjugateGradientParameters::SILENT)
    \n+
    97 std::cout << "iteration " << k << ": alpha = " << alpha
    \n+
    98 << ", dotg = " << new_gamma
    \n+
    99 << std::endl;
    \n+
    100
    \n+
    101 if (new_gamma < threshold) return true;
    \n+
    102
    \n+
    103 // calculate new search direction
    \n+
    104 if (steepest) d = g;
    \n+
    105 else {
    \n+
    106 double beta = new_gamma / gamma;
    \n+
    107 // d = g + d*beta;
    \n+
    108 d *= beta;
    \n+
    109 d += 1.0 * g;
    \n+
    110 }
    \n+
    111
    \n+
    112 gamma = new_gamma;
    \n+
    113
    \n+
    114 // In-place recalculation Ad <- A*d to avoid re-allocating Ad
    \n+
    115 Ab.multiplyInPlace(d, Ad);
    \n+
    116 return false;
    \n+
    117 }
    \n+
    118
    \n+
    119 }; // CGState Class
    \n+
    \n+
    120
    \n+
    121 /* ************************************************************************* */
    \n+
    122 // conjugate gradient method.
    \n+
    123 // S: linear system, V: step vector, E: errors
    \n+
    124 template<class S, class V, class E>
    \n+
    \n+
    125 V conjugateGradients(const S& Ab, V x, const ConjugateGradientParameters &parameters, bool steepest) {
    \n+
    126
    \n+
    127 CGState<S, V, E> state(Ab, x, parameters, steepest);
    \n+
    128
    \n+
    129 if (parameters.verbosity() != ConjugateGradientParameters::SILENT)
    \n+
    130 std::cout << "CG: epsilon = " << parameters.epsilon()
    \n+
    131 << ", maxIterations = " << parameters.maxIterations()
    \n+
    132 << ", ||g0||^2 = " << state.gamma
    \n+
    133 << ", threshold = " << state.threshold
    \n+
    134 << std::endl;
    \n+
    135
    \n+
    136 if ( state.gamma < state.threshold ) {
    \n+
    137 if (parameters.verbosity() != ConjugateGradientParameters::SILENT)
    \n+
    138 std::cout << "||g0||^2 < threshold, exiting immediately !" << std::endl;
    \n+
    139
    \n+
    140 return x;
    \n+
    141 }
    \n+
    142
    \n+
    143 // loop maxIterations times
    \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
    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+
    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+
    double threshold
    gamma (squared L2 norm of g) and convergence threshold
    Definition iterative-inl.h:38
    \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": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-HessianFactor-inl.h\n+iterative-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,65 +16,191 @@\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+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bi_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\b._\bh>\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+27 /* *************************************************************************\n+*/\n+28 // state for CG method\n+29 template\n+_\b3_\b0 struct _\bC_\bG_\bS_\bt_\ba_\bt_\be {\n+31\n+32 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 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs;\n+33 const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters_;\n+34\n+_\b3_\b5 int _\bk;\n+_\b3_\b6 bool _\bs_\bt_\be_\be_\bp_\be_\bs_\bt;\n+_\b3_\b7 V g, _\bd;\n+_\b3_\b8 double gamma, _\bt_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd;\n+39 E Ad;\n 40\n-41}\n+41 /* *************************************************************************\n+*/\n+42 // Constructor\n+43 _\bC_\bG_\bS_\bt_\ba_\bt_\be(const S& Ab, const V& x, const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters, bool steep):\n+44 parameters_(parameters),_\bk(0),_\bs_\bt_\be_\be_\bp_\be_\bs_\bt(steep) {\n+45\n+46 // Start with g0 = A'*(A*x0-b), d0 = - g0\n+47 // i.e., first step is in direction of negative gradient\n+48 g = Ab.gradient(x);\n+49 _\bd = g; // instead of negating gradient, alpha will be negated\n+50\n+51 // init gamma and calculate threshold\n+52 gamma = _\bd_\bo_\bt(g,g);\n+53 _\bt_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd = std::max(parameters_.epsilon_abs(), parameters_.epsilon() *\n+parameters_.epsilon() * gamma);\n+54\n+55 // Allocate and calculate A*d for first iteration\n+56 if (gamma > parameters_.epsilon_abs()) Ad = Ab * _\bd;\n+57 }\n+58\n+59 /* *************************************************************************\n+*/\n+60 // print\n+61 void print(const V& x) {\n+62 std::cout << \"iteration = \" << _\bk << std::endl;\n+63 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt(x,\"x\");\n+64 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt(g, \"g\");\n+65 std::cout << \"dotg = \" << gamma << std::endl;\n+66 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt(_\bd, \"d\");\n+67 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt(Ad, \"Ad\");\n+68 }\n+69\n+70 /* *************************************************************************\n+*/\n+71 // step the solution\n+72 double takeOptimalStep(V& x) {\n+73 // TODO: can we use gamma instead of dot(d,g) ????? Answer not trivial\n+74 double alpha = -_\bd_\bo_\bt(_\bd, g) / _\bd_\bo_\bt(Ad, Ad); // calculate optimal step-size\n+75 x += alpha * _\bd; // do step in new search direction, x += alpha*d\n+76 return alpha;\n+77 }\n+78\n+79 /* *************************************************************************\n+*/\n+80 // take a step, return true if converged\n+81 bool step(const S& Ab, V& x) {\n+82\n+83 if ((++_\bk) >= ((int)parameters_.maxIterations())) return true;\n+84\n+85 //---------------------------------->\n+86 double alpha = takeOptimalStep(x);\n+87\n+88 // update gradient (or re-calculate at reset time)\n+89 if (_\bk % parameters_.reset() == 0) g = Ab.gradient(x);\n+90 // axpy(alpha, Ab ^ Ad, g); // g += alpha*(Ab^Ad)\n+91 else Ab.transposeMultiplyAdd(alpha, Ad, g);\n+92\n+93 // check for convergence\n+94 double new_gamma = _\bd_\bo_\bt(g, g);\n+95\n+96 if (parameters_.verbosity() != ConjugateGradientParameters::SILENT)\n+97 std::cout << \"iteration \" << _\bk << \": alpha = \" << alpha\n+98 << \", dotg = \" << new_gamma\n+99 << std::endl;\n+100\n+101 if (new_gamma < _\bt_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd) return true;\n+102\n+103 // calculate new search direction\n+104 if (_\bs_\bt_\be_\be_\bp_\be_\bs_\bt) _\bd = g;\n+105 else {\n+106 double beta = new_gamma / gamma;\n+107 // d = g + d*beta;\n+108 _\bd *= beta;\n+109 _\bd += 1.0 * g;\n+110 }\n+111\n+112 gamma = new_gamma;\n+113\n+114 // In-place recalculation Ad <- A*d to avoid re-allocating Ad\n+115 Ab.multiplyInPlace(_\bd, Ad);\n+116 return false;\n+117 }\n+118\n+119 }; // CGState Class\n+120\n+121 /\n+* ************************************************************************* */\n+122 // conjugate gradient method.\n+123 // S: linear system, V: step vector, E: errors\n+124 template\n+_\b1_\b2_\b5 V _\bc_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bs(const S& Ab, V 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, bool steepest) {\n+126\n+127 _\bC_\bG_\bS_\bt_\ba_\bt_\be_\b<_\bS_\b,_\b _\bV_\b,_\b _\bE_\b> state(Ab, x, parameters, steepest);\n+128\n+129 if (parameters.verbosity() != ConjugateGradientParameters::SILENT)\n+130 std::cout << \"CG: epsilon = \" << parameters.epsilon()\n+131 << \", maxIterations = \" << parameters.maxIterations()\n+132 << \", ||g0||^2 = \" << state.gamma\n+133 << \", threshold = \" << state._\bt_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd\n+134 << std::endl;\n+135\n+136 if ( state.gamma < state._\bt_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd ) {\n+137 if (parameters.verbosity() != ConjugateGradientParameters::SILENT)\n+138 std::cout << \"||g0||^2 < threshold, exiting immediately !\" << std::endl;\n+139\n+140 return x;\n+141 }\n+142\n+143 // loop maxIterations times\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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:_\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_\bG_\bS_\bt_\ba_\bt_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative-inl.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bG_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bs_\bt_\be_\be_\bp_\be_\bs_\bt\n+bool steepest\n+flag to indicate we are doing steepest descent\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative-inl.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bG_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bt_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd\n+double threshold\n+gamma (squared L2 norm of g) and convergence threshold\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative-inl.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bG_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bk\n+int k\n+iteration\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative-inl.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bG_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bd\n+V d\n+gradient g and search direction d for CG\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative-inl.h:37\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_\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/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/SubgraphBuilder.cpp 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@@ -95,51 +95,54 @@\n \n \n \n \n
    \n \n-
    SubgraphBuilder.cpp File Reference
    \n+
    GaussianFactorGraph.cpp File Reference
    \n
    \n
    \n+\n+

    Linear Factor Graph where all factors are Gaussians. \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::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 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.
     
    bool gtsam::hasConstraints (const GaussianFactorGraph &factors)
     Evaluates whether linear factors have any constrained noise models.
     
    \n

    Detailed Description

    \n-
    Date
    Dec 31, 2009
    \n-
    Author
    Frank Dellaert, Yong-Dian Jian
    \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,42 +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-SubgraphBuilder.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\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- 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+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- _\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+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- Date\n- Dec 31, 2009\n+Linear Factor Graph where all factors are Gaussians.\n Author\n- Frank Dellaert, Yong-Dian Jian\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- * _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\b._\bc_\bp_\bp\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/a00875.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00875.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a00875 = [\n- [\"buildFactorSubgraph\", \"a00875.html#a0ec82adc6e13261cf4a012b65b301256\", null],\n- [\"splitFactorGraph\", \"a00875.html#a2c7eca9f27b43b52756c1afd85478dd8\", null]\n+ [\"hasConstraints\", \"a00875.html#a35c269c3243cab16a7475239a9c91021\", null]\n ];\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/GaussianJunctionTree.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/JacobianFactor.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,43 +94,53 @@\n \n \n \n \n \n
    \n \n-
    GaussianJunctionTree.h File Reference
    \n+Namespaces |\n+Typedefs |\n+Functions
    \n+
    JacobianFactor.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::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+\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-
    Date
    Mar 29, 2013
    \n-
    Author
    Frank Dellaert
    \n+
    Author
    Richard Roberts
    \n+
    \n+Christian Potthast
    \n
    \n-Richard Roberts
    \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,27 +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-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 | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+JacobianFactor.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: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- Date\n- Mar 29, 2013\n Author\n- Frank Dellaert\n Richard Roberts\n+ Christian Potthast\n+ Frank Dellaert\n+ Date\n+ Dec 8, 2010\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+ * _\bJ_\ba_\bc_\bo_\bb_\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/a00881.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00881.html", "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/Sampler.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,76 +94,37 @@\n \n \n \n \n \n
    \n \n-
    iterative.h File Reference
    \n+Namespaces
    \n+
    Sampler.cpp File Reference
    \n \n
    \n \n-

    Iterative methods, implementation. \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-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-\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.
     
    \n

    Detailed Description

    \n-

    Iterative methods, implementation.

    \n-
    Author
    Frank Dellaert
    \n-
    Date
    Dec 28, 2009
    \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,68 +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-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\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-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-Iterative methods, implementation.\n+sampling from a diagonal NoiseModel\n Author\n Frank Dellaert\n- Date\n- Dec 28, 2009\n+ Alex Cunningham\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+ * _\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/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/GaussianEliminationTree.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,34 +94,58 @@\n \n \n \n \n \n
    \n \n-
    GaussianEliminationTree.cpp File Reference
    \n+Classes |\n+Namespaces |\n+Functions
    \n+
    HessianFactor.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+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-
    Date
    Mar 29, 2013
    \n-
    Author
    Frank Dellaert
    \n-
    \n-Richard Roberts
    \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-GaussianEliminationTree.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+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- Date\n- Mar 29, 2013\n+Contains the HessianFactor class, a general quadratic factor.\n Author\n- Frank Dellaert\n Richard Roberts\n+ Date\n+ Dec 8, 2010\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+ * _\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/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/RegularHessianFactor.h 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@@ -94,46 +94,36 @@\n \n \n \n \n \n
    \n \n-
    RegularHessianFactor.h File Reference
    \n+
    GaussianDensity.cpp File Reference
    \n
    \n
    \n \n-

    HessianFactor class with constant sized blocks. \n+

    A Gaussian Density. \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-

    HessianFactor class with constant sized blocks.

    \n-
    Author
    Sungtae An
    \n-
    Date
    March 2014
    \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,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-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+_\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 N\bNa\bam\bme\bes\bsp\bpa\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+A Gaussian Density.\n Author\n- Sungtae An\n+ Frank Dellaert\n Date\n- March 2014\n+ Jan 21, 2012\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+ * _\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/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/SubgraphPreconditioner.h 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@@ -96,41 +96,43 @@\n \n \n \n
    \n \n-
    SubgraphPreconditioner.h File Reference
    \n+
    RegularJacobianFactor.h 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+\n+\n \n

    \n Classes

    struct  gtsam::SubgraphPreconditionerParameters
     
    class  gtsam::SubgraphPreconditioner
     Subgraph conditioner class, as explained in the RSS 2010 submission. More...
    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-
    Date
    Dec 31, 2009
    \n-
    Author
    Frank Dellaert, Yong-Dian Jian
    \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,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-SubgraphPreconditioner.h File Reference\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-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+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- Date\n- Dec 31, 2009\n+_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br class with fixed sized blcoks.\n Author\n- Frank Dellaert, Yong-Dian Jian\n+ Sungtae An\n+ Date\n+ Nov 11, 2014\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+ * _\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/a00896.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00896.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a00896 = [\n- [\"gtsam::SubgraphPreconditionerParameters\", \"a04048.html\", null],\n- [\"gtsam::SubgraphPreconditioner\", \"a04052.html\", \"a04052\"]\n+ [\"gtsam::RegularJacobianFactor< D >\", \"a04016.html\", \"a04016\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00896_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00896_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/RegularJacobianFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,158 +98,215 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    SubgraphPreconditioner.h
    \n+
    RegularJacobianFactor.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-
    28
    \n-
    29#include <boost/shared_ptr.hpp>
    \n-
    30
    \n-
    31#include <map>
    \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-
    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+
    19#pragma once
    \n+
    20
    \n+\n+\n+
    23
    \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+\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-
    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+
    \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+
    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-
    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-
    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-
    Some support classes for iterative solvers.
    \n-
    Factor Graph Values.
    \n-\n-
    Chordal Bayes Net, the result of eliminating a factor graph.
    \n-
    vector of errors
    \n-
    Linear Factor Graph where all factors are Gaussians.
    \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+
    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+\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-\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+
    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-
    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,269 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SubgraphPreconditioner.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-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-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-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 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+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+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 _\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+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-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-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+_\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+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-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-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-_\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+_\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-_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\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-_\bE_\br_\br_\bo_\br_\bs_\b._\bh\n-vector of errors\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:_\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-_\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+ * _\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/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/GaussianFactorGraph.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,64 +94,38 @@\n \n \n \n \n \n
    \n \n-
    GaussianFactorGraph.h File Reference
    \n+Namespaces
    \n+
    HessianFactor-inl.h File Reference
    \n \n
    \n \n-

    Linear Factor Graph where all factors are Gaussians. \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-Classes

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

    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,39 +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-GaussianFactorGraph.h File Reference\n-Linear Factor Graph where all factors are Gaussians. _\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-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- 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-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+Contains the HessianFactor class, a general quadratic factor.\n Author\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- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\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/a00899_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00899_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/HessianFactor-inl.h Source File\n \n \n \n \n \n \n \n@@ -98,338 +98,65 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    GaussianFactorGraph.h
    \n+
    HessianFactor-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-
    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+
    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 // 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+
    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-
    \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-
    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-
    \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-
    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-
    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-
    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-
    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-
    Variable elimination algorithms for factor graphs.
    \n-
    Factor Graph Base Class.
    \n-
    Contains the HessianFactor class, a general quadratic factor.
    \n-\n-
    A factor with a quadratic error function - a Gaussian.
    \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+
    40
    \n+
    41}
    \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-
    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-
    A GaussianConditional functions as the node in a Bayes network.
    Definition GaussianConditional.h:43
    \n-
    Definition GaussianEliminationTree.h:29
    \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-
    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+
    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,493 +1,80 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GaussianFactorGraph.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, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, 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/_\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 /* *************************************************************************\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+19#pragma once\n+20\n+21namespace _\bg_\bt_\bs_\ba_\bm {\n+22\n+23 /* *************************************************************************\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-_\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-_\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-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-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-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-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-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-_\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-_\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-_\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-_\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+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:_\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:_\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:_\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:_\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_\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- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\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/a00905.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00905.html", "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/ManifoldPreintegration.h File Reference\n \n \n \n \n \n \n \n@@ -96,24 +96,24 @@\n \n \n \n
    \n \n-
    PreintegrationParams.h File Reference
    \n+
    ManifoldPreintegration.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

    struct  gtsam::PreintegrationParams
     Parameters for pre-integration: Usage: Create just a single Params and pass a shared pointer to the constructor. More...
    class  gtsam::ManifoldPreintegration
     IMU pre-integration on NavSatet manifold. More...
     
    \n \n \n \n \n@@ -125,21 +125,19 @@\n
    \n Richard Roberts
    \n
    \n Vadim Indelman
    \n
    \n David Jensen
    \n
    \n-Frank Dellaert
    \n-
    \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-PreintegrationParams.h File Reference\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-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:_\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 *\b**\b**\b**\b**\b* D\bDe\bet\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 * _\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+ * _\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/a00905.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00905.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00905 = [\n- [\"gtsam::PreintegrationParams\", \"a04220.html\", \"a04220\"]\n+ [\"gtsam::ManifoldPreintegration\", \"a04192.html\", \"a04192\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00905_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00905_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/PreintegrationParams.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ManifoldPreintegration.h Source File\n \n \n \n \n \n \n \n@@ -98,120 +98,124 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    PreintegrationParams.h
    \n+
    ManifoldPreintegration.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-\n-
    20#include <boost/make_shared.hpp>
    \n-
    21
    \n-
    22namespace gtsam {
    \n+
    22#pragma once
    \n
    23
    \n-
    \n-\n-\n-\n-\n-
    32 Vector3 n_gravity;
    \n-
    33
    \n-
    \n-\n-\n-
    37 accelerometerCovariance(I_3x3),
    \n-
    38 integrationCovariance(I_3x3),
    \n-
    39 use2ndOrderCoriolis(false),
    \n-
    40 n_gravity(0, 0, -1) {}
    \n-
    \n-
    41
    \n-
    \n-
    44 PreintegrationParams(const Vector3& n_gravity)
    \n-\n-
    46 accelerometerCovariance(I_3x3),
    \n-
    47 integrationCovariance(I_3x3),
    \n-
    48 use2ndOrderCoriolis(false),
    \n-
    49 n_gravity(n_gravity) {}
    \n-
    \n-
    50
    \n-
    51 // Default Params for a Z-down navigation frame, such as NED: gravity points along positive Z-axis
    \n-
    52 static boost::shared_ptr<PreintegrationParams> MakeSharedD(double g = 9.81) {
    \n-
    53 return boost::shared_ptr<PreintegrationParams>(new PreintegrationParams(Vector3(0, 0, g)));
    \n-
    54 }
    \n-
    55
    \n-
    56 // Default Params for a Z-up navigation frame, such as ENU: gravity points along negative Z-axis
    \n-
    57 static boost::shared_ptr<PreintegrationParams> MakeSharedU(double g = 9.81) {
    \n-
    58 return boost::shared_ptr<PreintegrationParams>(new PreintegrationParams(Vector3(0, 0, -g)));
    \n-
    59 }
    \n-
    60
    \n-
    61 void print(const std::string& s="") const override;
    \n-
    62 bool equals(const PreintegratedRotationParams& other, double tol) const override;
    \n-
    63
    \n-
    64 void setAccelerometerCovariance(const Matrix3& cov) { accelerometerCovariance = cov; }
    \n-
    65 void setIntegrationCovariance(const Matrix3& cov) { integrationCovariance = cov; }
    \n-
    66 void setUse2ndOrderCoriolis(bool flag) { use2ndOrderCoriolis = flag; }
    \n-
    67
    \n-
    68 const Matrix3& getAccelerometerCovariance() const { return accelerometerCovariance; }
    \n-
    69 const Matrix3& getIntegrationCovariance() const { return integrationCovariance; }
    \n-
    70 const Vector3& getGravity() const { return n_gravity; }
    \n-
    71 bool getUse2ndOrderCoriolis() const { return use2ndOrderCoriolis; }
    \n-
    72
    \n-
    73protected:
    \n-
    74
    \n-
    76 friend class boost::serialization::access;
    \n-
    77 template<class ARCHIVE>
    \n-
    78 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
    \n-
    79 namespace bs = ::boost::serialization;
    \n-
    80 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(PreintegratedRotationParams);
    \n-
    81 ar & BOOST_SERIALIZATION_NVP(accelerometerCovariance);
    \n-
    82 ar & BOOST_SERIALIZATION_NVP(integrationCovariance);
    \n-
    83 ar & BOOST_SERIALIZATION_NVP(use2ndOrderCoriolis);
    \n-
    84 ar & BOOST_SERIALIZATION_NVP(n_gravity);
    \n-
    85 }
    \n+\n+\n+
    26
    \n+
    27namespace gtsam {
    \n+
    28
    \n+
    \n+
    33class GTSAM_EXPORT ManifoldPreintegration : public PreintegrationBase {
    \n+
    34 protected:
    \n+
    35
    \n+\n+\n+\n+\n+\n+\n+
    47
    \n+
    \n+\n+
    50 resetIntegration();
    \n+
    51 }
    \n+
    \n+
    52
    \n+
    53public:
    \n+
    56
    \n+
    62 ManifoldPreintegration(const boost::shared_ptr<Params>& p,
    \n+\n+
    64
    \n+
    66
    \n+
    70 void resetIntegration() override;
    \n+
    71
    \n+
    73
    \n+
    76 NavState deltaXij() const override { return deltaXij_; }
    \n+
    77 Rot3 deltaRij() const override { return deltaXij_.attitude(); }
    \n+
    78 Vector3 deltaPij() const override { return deltaXij_.position(); }
    \n+
    79 Vector3 deltaVij() const override { return deltaXij_.velocity(); }
    \n+
    80
    \n+
    81 Matrix3 delRdelBiasOmega() const { return delRdelBiasOmega_; }
    \n+
    82 Matrix3 delPdelBiasAcc() const { return delPdelBiasAcc_; }
    \n+
    83 Matrix3 delPdelBiasOmega() const { return delPdelBiasOmega_; }
    \n+
    84 Matrix3 delVdelBiasAcc() const { return delVdelBiasAcc_; }
    \n+
    85 Matrix3 delVdelBiasOmega() const { return delVdelBiasOmega_; }
    \n
    86
    \n-
    87#ifdef GTSAM_USE_QUATERNIONS
    \n-
    88 // Align if we are using Quaternions
    \n-
    89public:
    \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+
    89 bool equals(const ManifoldPreintegration& other, double tol) const;
    \n+
    91
    \n+
    94
    \n+
    99 void update(const Vector3& measuredAcc, const Vector3& measuredOmega, const double dt,
    \n+
    100 Matrix9* A, Matrix93* B, Matrix93* C) override;
    \n+
    101
    \n+
    105 Vector9 biasCorrectedDelta(const imuBias::ConstantBias& bias_i,
    \n+
    106 OptionalJacobian<9, 6> H = boost::none) const override;
    \n+
    107
    \n+
    \n+
    109 virtual boost::shared_ptr<ManifoldPreintegration> clone() const {
    \n+
    110 return boost::shared_ptr<ManifoldPreintegration>();
    \n+
    111 }
    \n+
    \n+
    112
    \n+
    114
    \n+
    115private:
    \n+
    117 friend class boost::serialization::access;
    \n+
    118 template<class ARCHIVE>
    \n+
    119 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
    \n+
    120 namespace bs = ::boost::serialization;
    \n+
    121 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(PreintegrationBase);
    \n+
    122 ar & BOOST_SERIALIZATION_NVP(deltaXij_);
    \n+
    123 ar & BOOST_SERIALIZATION_NVP(delRdelBiasOmega_);
    \n+
    124 ar & BOOST_SERIALIZATION_NVP(delPdelBiasAcc_);
    \n+
    125 ar & BOOST_SERIALIZATION_NVP(delPdelBiasOmega_);
    \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
    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-
    Vector3 n_gravity
    Gravity vector in nav frame.
    Definition PreintegrationParams.h:32
    \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+
    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+
    NavState deltaXij_
    Pre-integrated navigation state, from frame i to frame j Note: relative position does not take into a...
    Definition ManifoldPreintegration.h:41
    \n+
    Matrix3 delPdelBiasOmega_
    Jacobian of preintegrated position w.r.t. angular rate bias.
    Definition ManifoldPreintegration.h:44
    \n+
    virtual boost::shared_ptr< ManifoldPreintegration > clone() const
    Dummy clone for MATLAB.
    Definition ManifoldPreintegration.h:109
    \n+
    Matrix3 delVdelBiasOmega_
    Jacobian of preintegrated velocity w.r.t. angular rate bias.
    Definition ManifoldPreintegration.h:46
    \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", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-utf-8\n+us-ascii\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,151 +1,148 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-PreintegrationParams.h\n+ManifoldPreintegration.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 <_\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-20#include \n-21\n-22namespace _\bg_\bt_\bs_\ba_\bm {\n+22#pragma once\n 23\n-_\b2_\b6struct GTSAM_EXPORT _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs: _\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-_\b2_\b9 Matrix3 _\ba_\bc_\bc_\be_\bl_\be_\br_\bo_\bm_\be_\bt_\be_\br_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be;\n-_\b3_\b0 Matrix3 _\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be;\n-_\b3_\b1 bool _\bu_\bs_\be_\b2_\bn_\bd_\bO_\br_\bd_\be_\br_\bC_\bo_\br_\bi_\bo_\bl_\bi_\bs;\n-_\b3_\b2 Vector3 _\bn_\b__\bg_\br_\ba_\bv_\bi_\bt_\by;\n-33\n-_\b3_\b5 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs()\n-36 : _\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-37 accelerometerCovariance(I_3x3),\n-38 integrationCovariance(I_3x3),\n-39 use2ndOrderCoriolis(false),\n-40 n_gravity(0, 0, -1) {}\n-41\n-_\b4_\b4 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs(const Vector3& n_gravity)\n-45 : _\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-46 accelerometerCovariance(I_3x3),\n-47 integrationCovariance(I_3x3),\n-48 use2ndOrderCoriolis(false),\n-49 n_gravity(n_gravity) {}\n-50\n-51 // Default Params for a Z-down navigation frame, such as NED: gravity points\n-along positive Z-axis\n-52 static boost::shared_ptr MakeSharedD(double g = 9.81)\n-{\n-53 return boost::shared_ptr(new _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n-(Vector3(0, 0, g)));\n-54 }\n-55\n-56 // Default Params for a Z-up navigation frame, such as ENU: gravity points\n-along negative Z-axis\n-57 static boost::shared_ptr MakeSharedU(double g = 9.81)\n-{\n-58 return boost::shared_ptr(new PreintegrationParams\n-(Vector3(0, 0, -g)));\n-59 }\n-60\n-61 void _\bp_\br_\bi_\bn_\bt(const std::string& s=\"\") const override;\n-62 bool equals(const PreintegratedRotationParams& other, double tol) const\n-override;\n-63\n-64 void setAccelerometerCovariance(const Matrix3& cov)\n-{ accelerometerCovariance = cov; }\n-65 void setIntegrationCovariance(const Matrix3& cov) { integrationCovariance =\n-cov; }\n-66 void setUse2ndOrderCoriolis(bool flag) { use2ndOrderCoriolis = flag; }\n-67\n-68 const Matrix3& getAccelerometerCovariance() const { return\n-accelerometerCovariance; }\n-69 const Matrix3& getIntegrationCovariance() const { return\n-integrationCovariance; }\n-70 const Vector3& getGravity() const { return n_gravity; }\n-71 bool getUse2ndOrderCoriolis() const { return use2ndOrderCoriolis; }\n-72\n-73protected:\n-74\n-_\b7_\b6 friend class boost::serialization::access;\n-77 template\n-78 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-79 namespace bs = ::boost::serialization;\n-80 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_\bP_\ba_\br_\ba_\bm_\bs);\n-81 ar & BOOST_SERIALIZATION_NVP(accelerometerCovariance);\n-82 ar & BOOST_SERIALIZATION_NVP(integrationCovariance);\n-83 ar & BOOST_SERIALIZATION_NVP(use2ndOrderCoriolis);\n-84 ar & BOOST_SERIALIZATION_NVP(n_gravity);\n-85 }\n+24#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+25#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_\bB_\ba_\bs_\be_\b._\bh>\n+26\n+27namespace _\bg_\bt_\bs_\ba_\bm {\n+28\n+_\b3_\b3class GTSAM_EXPORT _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn : public _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be {\n+34 protected:\n+35\n+_\b4_\b1 _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be _\bd_\be_\bl_\bt_\ba_\bX_\bi_\bj_\b_;\n+_\b4_\b2 Matrix3 _\bd_\be_\bl_\bR_\bd_\be_\bl_\bB_\bi_\ba_\bs_\bO_\bm_\be_\bg_\ba_\b_;\n+_\b4_\b3 Matrix3 _\bd_\be_\bl_\bP_\bd_\be_\bl_\bB_\bi_\ba_\bs_\bA_\bc_\bc_\b_;\n+_\b4_\b4 Matrix3 _\bd_\be_\bl_\bP_\bd_\be_\bl_\bB_\bi_\ba_\bs_\bO_\bm_\be_\bg_\ba_\b_;\n+_\b4_\b5 Matrix3 _\bd_\be_\bl_\bV_\bd_\be_\bl_\bB_\bi_\ba_\bs_\bA_\bc_\bc_\b_;\n+_\b4_\b6 Matrix3 _\bd_\be_\bl_\bV_\bd_\be_\bl_\bB_\bi_\ba_\bs_\bO_\bm_\be_\bg_\ba_\b_;\n+47\n+_\b4_\b9 _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn() {\n+50 resetIntegration();\n+51 }\n+52\n+53public:\n+56\n+62 _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn(const boost::shared_ptr& p,\n+63 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+64\n+66\n+70 void resetIntegration() override;\n+71\n+73\n+76 _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be deltaXij() const override { return deltaXij_; }\n+77 Rot3 deltaRij() const override { return deltaXij_.attitude(); }\n+78 Vector3 deltaPij() const override { return deltaXij_.position(); }\n+79 Vector3 deltaVij() const override { return deltaXij_.velocity(); }\n+80\n+81 Matrix3 delRdelBiasOmega() const { return delRdelBiasOmega_; }\n+82 Matrix3 delPdelBiasAcc() const { return delPdelBiasAcc_; }\n+83 Matrix3 delPdelBiasOmega() const { return delPdelBiasOmega_; }\n+84 Matrix3 delVdelBiasAcc() const { return delVdelBiasAcc_; }\n+85 Matrix3 delVdelBiasOmega() const { return delVdelBiasOmega_; }\n 86\n-87#ifdef GTSAM_USE_QUATERNIONS\n-88 // Align if we are using Quaternions\n-89public:\n-90 _\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-91#endif\n-92};\n-93\n-94} // 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_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+89 bool equals(const ManifoldPreintegration& other, double tol) const;\n+91\n+94\n+99 void update(const Vector3& measuredAcc, const Vector3& measuredOmega, const\n+double dt,\n+100 Matrix9* A, Matrix93* B, Matrix93* C) override;\n+101\n+105 Vector9 biasCorrectedDelta(const imuBias::ConstantBias& bias_i,\n+106 OptionalJacobian<9, 6> H = boost::none) const override;\n+107\n+_\b1_\b0_\b9 virtual boost::shared_ptr _\bc_\bl_\bo_\bn_\be() const {\n+110 return boost::shared_ptr();\n+111 }\n+112\n+114\n+115private:\n+_\b1_\b1_\b7 friend class boost::serialization::access;\n+118 template\n+119 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+120 namespace bs = ::boost::serialization;\n+121 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be);\n+122 ar & BOOST_SERIALIZATION_NVP(deltaXij_);\n+123 ar & BOOST_SERIALIZATION_NVP(delRdelBiasOmega_);\n+124 ar & BOOST_SERIALIZATION_NVP(delPdelBiasAcc_);\n+125 ar & BOOST_SERIALIZATION_NVP(delPdelBiasOmega_);\n+126 ar & BOOST_SERIALIZATION_NVP(delVdelBiasAcc_);\n+127 ar & BOOST_SERIALIZATION_NVP(delVdelBiasOmega_);\n+128 }\n+129};\n+130\n+131}\n+_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b._\bh\n+_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh\n+Navigation state composing of attitude, position, and velocity.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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_\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_\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:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\ba_\bc_\bc_\be_\bl_\be_\br_\bo_\bm_\be_\bt_\be_\br_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be\n-Matrix3 accelerometerCovariance\n-Continuous-time \"Covariance\" of accelerometer The units for stddev are \u00cf\u0083 = m/\n-s\u00c2\u00b2/\u00e2\u0088\u009aHz.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationParams.h:29\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_\b:_\b:_\bu_\bs_\be_\b2_\bn_\bd_\bO_\br_\bd_\be_\br_\bC_\bo_\br_\bi_\bo_\bl_\bi_\bs\n-bool use2ndOrderCoriolis\n-Whether to use second order Coriolis integration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationParams.h:31\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_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n-PreintegrationParams()\n-Default constructor for serialization only.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationParams.h:35\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_\b:_\b:_\bn_\b__\bg_\br_\ba_\bv_\bi_\bt_\by\n-Vector3 n_gravity\n-Gravity vector in nav frame.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationParams.h:32\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_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n-PreintegrationParams(const Vector3 &n_gravity)\n-The Params constructor insists on getting the navigation frame gravity vector\n-For convenience,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationParams.h:44\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_\b:_\b:_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be\n-Matrix3 integrationCovariance\n-continuous-time \"Covariance\" describing integration uncertainty\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationParams.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\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:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\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+ManifoldPreintegration()\n+Default constructor for serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ManifoldPreintegration.h:49\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_\b:_\b:_\bd_\be_\bl_\bV_\bd_\be_\bl_\bB_\bi_\ba_\bs_\bA_\bc_\bc_\b_\n+Matrix3 delVdelBiasAcc_\n+Jacobian of preintegrated velocity w.r.t. acceleration bias.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ManifoldPreintegration.h:45\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_\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 ManifoldPreintegration.h:42\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_\b:_\b:_\bd_\be_\bl_\bP_\bd_\be_\bl_\bB_\bi_\ba_\bs_\bA_\bc_\bc_\b_\n+Matrix3 delPdelBiasAcc_\n+Jacobian of preintegrated position w.r.t. acceleration bias.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ManifoldPreintegration.h:43\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_\b:_\b:_\bd_\be_\bl_\bt_\ba_\bX_\bi_\bj_\b_\n+NavState deltaXij_\n+Pre-integrated navigation state, from frame i to frame j Note: relative\n+position does not take into a...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ManifoldPreintegration.h:41\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_\b:_\b:_\bd_\be_\bl_\bP_\bd_\be_\bl_\bB_\bi_\ba_\bs_\bO_\bm_\be_\bg_\ba_\b_\n+Matrix3 delPdelBiasOmega_\n+Jacobian of preintegrated position w.r.t. angular rate bias.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ManifoldPreintegration.h:44\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_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+virtual boost::shared_ptr< ManifoldPreintegration > clone() const\n+Dummy clone for MATLAB.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ManifoldPreintegration.h:109\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_\b:_\b:_\bd_\be_\bl_\bV_\bd_\be_\bl_\bB_\bi_\ba_\bs_\bO_\bm_\be_\bg_\ba_\b_\n+Matrix3 delVdelBiasOmega_\n+Jacobian of preintegrated velocity w.r.t. angular rate bias.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ManifoldPreintegration.h:46\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\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+ * _\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/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/PreintegratedRotation.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,53 +96,43 @@\n \n \n \n
    \n \n-
    PreintegratedRotation.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 Namespaces

    namespace  gtsam
     Global functions in a separate testing namespace.
     
    \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::PreintegratedRotation
     PreintegratedRotation is the base class for all PreintegratedMeasurements classes (in AHRSFactor, ImuFactor, and CombinedImuFactor). More...
    class  gtsam::ScenarioRunner
     
    struct  gtsam::traits< PreintegratedRotation >
    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,36 +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-PreintegratedRotation.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-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:_\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:_\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:_\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- * _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\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/a00908.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00908.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,4 @@\n var a00908 = [\n- [\"gtsam::PreintegratedRotationParams\", \"a04204.html\", \"a04204\"],\n- [\"gtsam::PreintegratedRotation\", \"a04208.html\", \"a04208\"],\n- [\"gtsam::traits< PreintegratedRotation >\", \"a04212.html\", null]\n+ [\"gtsam::ScenarioRunner\", \"a04236.html\", \"a04236\"],\n+ [\"gtsam::CombinedScenarioRunner\", \"a04240.html\", \"a04240\"]\n ];\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/PreintegratedRotation.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,203 +98,177 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    PreintegratedRotation.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-\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 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+
    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-
    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-
    \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+
    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+
    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
    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
    Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
    Definition Rot3.h:58
    \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+
    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
    \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,207 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-PreintegratedRotation.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#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 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+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-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+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-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-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+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+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+_\bI_\bm_\bu_\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._\bh\n+_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b._\bh\n+Simple class to test navigation scenarios.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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_\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:_\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\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+ * _\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/a00911.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00911.html", "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/AttitudeFactor.h File Reference\n \n \n \n \n \n \n \n@@ -94,51 +94,57 @@\n \n \n \n \n \n
    \n \n-
    ImuFactor.cpp File Reference
    \n+Classes |\n+Namespaces
    \n+
    AttitudeFactor.h 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-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 Attitude factor.

    \n+
    Author
    Frank Dellaert
    \n+
    Date
    January 28, 2014
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +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 | _\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+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+\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-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 Attitude factor.\n Author\n- Luca Carlone\n- Stephen Williams\n- Richard Roberts\n- Vadim Indelman\n- David Jensen\n Frank Dellaert\n+ Date\n+ January 28, 2014\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+ * _\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/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/AHRSFactor.cpp 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@@ -94,36 +94,55 @@\n \n \n \n \n \n
    \n \n-
    AHRSFactor.cpp File Reference
    \n+
    PreintegratedRotation.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::PreintegratedRotationParams
     Parameters for pre-integration: Usage: Create just a single Params and pass a shared pointer to the constructor. More...
     
    class  gtsam::PreintegratedRotation
     PreintegratedRotation is the base class for all PreintegratedMeasurements classes (in AHRSFactor, ImuFactor, and CombinedImuFactor). 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-
    Author
    Krunal Chande
    \n+
    Author
    Luca Carlone
    \n+
    \n+Stephen Williams
    \n+
    \n+Richard Roberts
    \n+
    \n+Vadim Indelman
    \n
    \n-Luca Carlone
    \n+David Jensen \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,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-AHRSFactor.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\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+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:_\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+\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- * _\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_\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/a00923.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00923.html", "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/navigation/PreintegrationParams.h File Reference\n \n \n \n \n \n \n \n@@ -94,87 +94,52 @@\n \n \n \n \n \n
    \n \n-
    CombinedImuFactor.cpp File Reference
    \n+Classes |\n+Namespaces
    \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-\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
    Luca Carlone
    \n
    \n Stephen Williams
    \n
    \n Richard Roberts
    \n
    \n Vadim Indelman
    \n
    \n David Jensen
    \n
    \n-Frank Dellaert
    \n+Frank Dellaert\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,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 | _\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\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-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 Luca Carlone\n Stephen Williams\n Richard Roberts\n Vadim Indelman\n David Jensen\n Frank Dellaert\n- Varun Agrawal\n+ Frank Dellaert\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+ * _\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/a00926.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00926.html", "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/ImuFactor.h File Reference\n \n \n \n \n \n \n \n@@ -96,42 +96,60 @@\n \n \n \n
    \n \n-
    ConstantVelocityFactor.h File Reference
    \n+
    ImuFactor.h File Reference
    \n
    \n
    \n \n-

    Maintain a constant velocity motion model between two NavStates. \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::ConstantVelocityFactor
     Binary factor for applying a constant velocity model to a moving body represented as a NavState. More...
    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-

    Maintain a constant velocity motion model between two NavStates.

    \n-
    Author
    Asa Hammond
    \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,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-ConstantVelocityFactor.h File Reference\n-Maintain a constant velocity motion model between two NavStates. _\bM_\bo_\br_\be_\b._\b._\b.\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:_\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:_\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-Maintain a constant velocity motion model between two NavStates.\n Author\n- Asa Hammond\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- * _\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+ * _\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/a00926.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00926.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,5 @@\n var a00926 = [\n- [\"gtsam::ConstantVelocityFactor\", \"a04128.html\", \"a04128\"]\n+ [\"gtsam::traits< PreintegratedImuMeasurements >\", \"a04160.html\", null],\n+ [\"gtsam::traits< ImuFactor >\", \"a04164.html\", null],\n+ [\"gtsam::traits< ImuFactor2 >\", \"a04168.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00926_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00926_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/ImuFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,87 +98,298 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    ConstantVelocityFactor.h
    \n+
    ImuFactor.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-
    24
    \n-
    \n-
    29class ConstantVelocityFactor : public NoiseModelFactorN<NavState, NavState> {
    \n-
    30 double dt_;
    \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-
    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+
    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+
    \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+
    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+
    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
    Global functions in a separate testing namespace.
    Definition chartTesting.h:28
    \n-
    noiseModel::Base::shared_ptr SharedNoiseModel
    Aliases.
    Definition NoiseModel.h:724
    \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-
    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+
    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+
    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-
    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
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,116 +1,361 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ConstantVelocityFactor.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-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+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-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-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+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+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+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+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+_\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+_\bT_\ba_\bn_\bg_\be_\bn_\bt_\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:_\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_\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:_\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:_\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:_\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_\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 * _\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+ * _\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/a00932.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00932.html", "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/AHRSFactor.h File Reference\n \n \n \n \n \n \n \n@@ -96,48 +96,45 @@\n \n \n \n
    \n \n-
    Scenario.h File Reference
    \n+
    AHRSFactor.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 Classes

    class  gtsam::Scenario
     Simple trajectory simulator. More...
     
    class  gtsam::ConstantTwistScenario
     Scenario with constant twist 3D trajectory. More...
    class  gtsam::PreintegratedAhrsMeasurements
     PreintegratedAHRSMeasurements accumulates (integrates) the Gyroscope measurements (rotation rates) and the corresponding covariance matrix. More...
     
    class  gtsam::AcceleratingScenario
     Accelerating from an arbitrary initial state, with optional rotation. More...
    class  gtsam::AHRSFactor
     
    \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
    Krunal Chande
    \n+
    \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,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-Scenario.h File Reference\n-Simple class to test navigation scenarios. _\bM_\bo_\br_\be_\b._\b._\b.\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:_\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+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 N\bNa\bam\bme\bes\bsp\bpa\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+ Krunal Chande\n+ Luca Carlone\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- * _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\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/a00932.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00932.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,4 @@\n var a00932 = [\n- [\"gtsam::Scenario\", \"a04224.html\", \"a04224\"],\n- [\"gtsam::ConstantTwistScenario\", \"a04228.html\", \"a04228\"],\n- [\"gtsam::AcceleratingScenario\", \"a04232.html\", \"a04232\"]\n+ [\"gtsam::PreintegratedAhrsMeasurements\", \"a04072.html\", \"a04072\"],\n+ [\"gtsam::AHRSFactor\", \"a04076.html\", \"a04076\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00932_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00932_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/AHRSFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,152 +98,217 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    Scenario.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-
    18#pragma once
    \n-\n-\n+
    20#pragma once
    \n
    21
    \n-
    22namespace gtsam {
    \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-
    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+
    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
    \n-
    66
    \n+
    57
    \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+\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-
    \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+
    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+
    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 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
    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+
    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-
    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+
    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
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,213 +1,267 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Scenario.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-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+20#pragma once\n 21\n-22namespace _\bg_\bt_\bs_\ba_\bm {\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-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-}\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+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-_\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-_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh\n-Navigation state composing of attitude, position, and velocity.\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+_\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+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 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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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_\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\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\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/a00935.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00935.html", "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/AHRSFactor.cpp File Reference\n \n \n \n \n \n \n \n@@ -95,40 +95,35 @@\n \n \n \n \n
    \n \n-
    ManifoldPreintegration.cpp File Reference
    \n+
    AHRSFactor.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-
    Author
    Luca Carlone
    \n+
    Author
    Krunal Chande
    \n
    \n-Stephen Williams
    \n-
    \n-Richard Roberts
    \n-
    \n-Vadim Indelman
    \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,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-ManifoldPreintegration.cpp File Reference\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._\bc_\bp_\bp\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/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/CombinedImuFactor.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@@ -95,70 +95,63 @@\n \n \n \n \n
    \n \n-
    CombinedImuFactor.h File Reference
    \n+Namespaces
    \n+
    PreintegrationBase.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 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
     PreintegratedCombinedMeasurements integrates the IMU measurements (rotation rates and accelerations) and the corresponding covariance matrix. More...
     
    class  gtsam::CombinedImuFactor
     CombinedImuFactor is a 6-ways factor involving previous state (pose and velocity of the vehicle, as well as bias at previous time step), and current state (pose, velocity, bias at current time step). More...
     
    struct  gtsam::traits< PreintegrationCombinedParams >
     
    struct  gtsam::traits< PreintegratedCombinedMeasurements >
     
    struct  gtsam::traits< CombinedImuFactor >
    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-\n-\n-\n

    \n-Typedefs

    \n-typedef ManifoldPreintegration gtsam::PreintegrationType
     
    \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+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,50 +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 | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n-CombinedImuFactor.h File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\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-struct \u00a0 _\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\n-\u00a0 _\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: Usage: Create just a single Params\n- and 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:_\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- _\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 integrates the IMU measurements\n-\u00a0 (rotation rates and accelerations) and the corresponding covariance\n- matrix. _\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_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br\n- _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br is a 6-ways factor involving previous state (pose\n-\u00a0 and velocity of the vehicle, as well as bias at previous time step),\n- and current state (pose, velocity, bias at current time step). _\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_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs_\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_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\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 _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\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-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-typedef _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPr\bre\bei\bin\bnt\bte\beg\bgr\bra\bat\bti\bio\bon\bnT\bTy\byp\bpe\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 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- * _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\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/a00938.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00938.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,6 +1,3 @@\n var a00938 = [\n- [\"gtsam::PreintegrationCombinedParams\", \"a04104.html\", \"a04104\"],\n- [\"gtsam::traits< PreintegrationCombinedParams >\", \"a04116.html\", null],\n- [\"gtsam::traits< PreintegratedCombinedMeasurements >\", \"a04120.html\", null],\n- [\"gtsam::traits< CombinedImuFactor >\", \"a04124.html\", null]\n+ [\"gtsam::PreintegrationBase\", \"a04216.html\", \"a04216\"]\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/CombinedImuFactor.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,319 +98,175 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    CombinedImuFactor.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-
    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-
    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-
    Convenience functions for serializing data structures via boost.serialization.
    \n-
    typedef and functions to augment Eigen's MatrixXd
    \n-\n-\n-
    Non-linear factor base classes.
    \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+
    \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+
    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+\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-
    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+
    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-
    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+
    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-
    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,219 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-CombinedImuFactor.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-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+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+_\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+_\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-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-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+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-_\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-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\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+_\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+_\bI_\bm_\bu_\bB_\bi_\ba_\bs_\b._\bh\n+_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh\n+Navigation state composing of attitude, position, and velocity.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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:_\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_\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+ * _\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/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/ImuBias.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,220 +98,167 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    ImuBias.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-
    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+
    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-
    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-
    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+
    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+
    51 public:
    \n+
    52 ~MagPoseFactor() override {}
    \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-
    \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+
    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-
    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-
    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-
    Special class for optional Jacobian arguments.
    \n-
    #define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
    This marks a GTSAM object to require alignment.
    Definition types.h:308
    \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
    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-
    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+
    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,245 +1,216 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\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+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/_\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+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-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_\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+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+51 public:\n+_\b5_\b2 _\b~_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br() override {}\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-_\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+_\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+_\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-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-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-_\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_\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+_\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+_\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:_\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:_\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- * _\bI_\bm_\bu_\bB_\bi_\ba_\bs_\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/a00947_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00947_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/CombinedImuFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,167 +98,319 @@\n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    MagPoseFactor.h
    \n+
    CombinedImuFactor.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-
    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+
    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 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-
    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+
    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-
    \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+
    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+
    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+
    Convenience functions for serializing data structures via boost.serialization.
    \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+\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-
    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+
    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-
    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,389 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-MagPoseFactor.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-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+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 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-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+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-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+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+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-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+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-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+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+_\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_\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_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\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 _\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+_\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 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+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-_\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_\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/a00956.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00956.html", "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/TangentPreintegration.h File Reference\n \n \n \n \n \n \n \n@@ -94,43 +94,42 @@\n \n \n \n \n \n
    \n \n-
    ImuBias.cpp File Reference
    \n+Classes |\n+Namespaces
    \n+
    TangentPreintegration.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::TangentPreintegration
     Integrate on the 9D tangent space of the NavState manifold. More...
     
    \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
    Frank Dellaert
    \n+
    \n+Adam Bry
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +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 | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-ImuBias.cpp File Reference\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 N\bNa\bam\bme\bes\bsp\bpa\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+ Frank Dellaert\n+ Adam Bry\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+ * _\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/a00956.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00956.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00956 = [\n- [\"operator<<\", \"a00956.html#ae7a6582902c6daf9f20f2f7e466c60d8\", null]\n+ [\"gtsam::TangentPreintegration\", \"a04244.html\", \"a04244\"]\n ];\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/NavState.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,55 +94,41 @@\n \n \n \n \n \n
    \n \n-
    NavState.h File Reference
    \n+Namespaces
    \n+
    ManifoldPreintegration.cpp File Reference
    \n \n
    \n-\n-

    Navigation state composing of attitude, position, and velocity. \n-More...

    \n-\n-

    Go to the source code of this file.

    \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...
     
    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-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-
    Author
    Frank Dellaert
    \n-
    Date
    July 2015
    \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,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 | _\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-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\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-\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-\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-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 Author\n+ Luca Carlone\n+ Stephen Williams\n+ Richard Roberts\n+ Vadim Indelman\n+ David Jensen\n Frank Dellaert\n- Date\n- July 2015\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+ * _\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/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/TangentPreintegration.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/AttitudeFactor.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,64 +94,36 @@\n \n \n \n \n \n
    \n \n-
    TangentPreintegration.cpp File Reference
    \n+Namespaces
    \n+
    AttitudeFactor.cpp File Reference
    \n \n
    \n+\n+

    Implementation file for Attitude 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-\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-
    Author
    Frank Dellaert
    \n-
    \n-Adam Bry
    \n+

    Implementation file for Attitude factor.

    \n+
    Author
    Frank Dellaert
    \n+
    Date
    January 28, 2014
    \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 | _\bM_\ba_\bc_\br_\bo_\bs\n-TangentPreintegration.cpp File Reference\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+AttitudeFactor.cpp File Reference\n+Implementation file for Attitude 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-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 *\b**\b**\b**\b**\b* D\bDe\bet\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 Attitude factor.\n Author\n Frank Dellaert\n- Adam Bry\n+ Date\n+ January 28, 2014\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+ * _\bA_\bt_\bt_\bi_\bt_\bu_\bd_\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/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/PreintegratedRotation.cpp 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@@ -94,41 +94,50 @@\n \n \n \n \n \n
    \n \n-
    PreintegratedRotation.cpp 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+Classes

    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+

    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,23 +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-PreintegratedRotation.cpp File Reference\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+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\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+\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 * _\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+ * _\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/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/GPSFactor.cpp 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@@ -95,35 +95,35 @@\n \n \n \n \n
    \n \n-
    GPSFactor.cpp File Reference
    \n+
    BarometricFactor.cpp File Reference
    \n
    \n
    \n \n-

    Implementation file for GPS factor. \n+

    Implementation file for Barometric factor. \n More...

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

    \n Namespaces

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

    Detailed Description

    \n-

    Implementation file for GPS factor.

    \n-
    Author
    Frank Dellaert
    \n-
    Date
    January 28, 2014
    \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,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-GPSFactor.cpp File Reference\n-Implementation file for GPS factor. _\bM_\bo_\br_\be_\b._\b._\b.\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 GPS factor.\n+Implementation file for Barometric factor.\n Author\n- Frank Dellaert\n+ Peter Milani\n Date\n- January 28, 2014\n+ December 16, 2021\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._\bc_\bp_\bp\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/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/TangentPreintegration.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/GPSFactor.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+
    GPSFactor.cpp File Reference
    \n
    \n
    \n \n-

    Go to the source code of this file.

    \n+

    Implementation file for GPS 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 GPS factor.

    \n+
    Author
    Frank Dellaert
    \n+
    Date
    January 28, 2014
    \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+GPSFactor.cpp File Reference\n+Implementation file for GPS 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 GPS factor.\n Author\n Frank Dellaert\n- Adam Bry\n+ Date\n+ January 28, 2014\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+ * _\bG_\bP_\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/a00980.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00980.html", "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/TangentPreintegration.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,54 +94,64 @@\n \n \n \n \n \n
    \n \n-
    MagFactor.h File Reference
    \n+Namespaces |\n+Macros
    \n+
    TangentPreintegration.cpp 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-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...
     
    \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-

    Factors involving magnetometers.

    \n-
    Author
    Frank Dellaert
    \n-
    Date
    January 29, 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,45 +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-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:_\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-\u00a0\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+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 *\b**\b**\b**\b**\b* D\bDe\bet\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 Frank Dellaert\n- Date\n- January 29, 2014\n+ Adam Bry\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+ * _\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/a00983.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00983.html", "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/BarometricFactor.h File Reference\n \n \n \n \n \n \n \n@@ -96,62 +96,43 @@\n \n \n \n
    \n \n-
    PreintegrationBase.h File Reference
    \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 \n

    \n Classes

    class  gtsam::PreintegrationBase
     PreintegrationBase is the base class for PreintegratedMeasurements (in ImuFactor) and CombinedPreintegratedMeasurements (in CombinedImuFactor). More...
    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-
    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+

    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,37 +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-PreintegrationBase.h File Reference\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:_\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:_\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 *\b**\b**\b**\b**\b* D\bDe\bet\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- Varun Agrawal\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- * _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b._\bh\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/a00983_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00983_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/BarometricFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,175 +98,126 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    PreintegrationBase.h
    \n+
    BarometricFactor.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+
    19
    \n+\n+\n+\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+
    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-
    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-
    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-\n-
    Navigation state composing of attitude, position, and velocity.
    \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+
    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-
    OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
    Definition OptionalJacobian.h:41
    \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-
    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+
    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,219 +1,157 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-PreintegrationBase.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-22#pragma once\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-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+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_\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-_\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-_\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-_\bI_\bm_\bu_\bB_\bi_\ba_\bs_\b._\bh\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+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:_\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_\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:_\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_\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 * _\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+ * _\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/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/ImuFactor.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@@ -95,61 +95,54 @@\n \n \n \n \n
    \n \n-
    ImuFactor.h File Reference
    \n+Namespaces |\n+Typedefs
    \n+
    NavState.h File Reference
    \n \n
    \n \n+

    Navigation state composing of attitude, position, and velocity. \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::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...
    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::traits< PreintegratedImuMeasurements >
     
    struct  gtsam::traits< ImuFactor >
     
    struct  gtsam::traits< ImuFactor2 >
    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+Typedefs

    \n+typedef Vector3 gtsam::Velocity3
     Velocity is currently typedef'd to Vector3.
     
    \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+

    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,45 +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-ImuFactor.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+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- 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:_\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- 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+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 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 Author\n- Luca Carlone\n- Stephen Williams\n- Richard Roberts\n- Vadim Indelman\n- David Jensen\n Frank Dellaert\n+ Date\n+ July 2015\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+ * _\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/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,5 @@\n var a00986 = [\n- [\"gtsam::traits< PreintegratedImuMeasurements >\", \"a04160.html\", null],\n- [\"gtsam::traits< ImuFactor >\", \"a04164.html\", null],\n- [\"gtsam::traits< ImuFactor2 >\", \"a04168.html\", null]\n+ [\"gtsam::NavState\", \"a04196.html\", \"a04196\"],\n+ [\"gtsam::traits< NavState >\", \"a04200.html\", null],\n+ [\"Velocity3\", \"a00986.html#ad6ba0a40d5dd8936f4ca53f7bb3ef53b\", null]\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/ImuFactor.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@@ -98,298 +98,217 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    ImuFactor.h
    \n+
    NavState.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/* GTSAM includes */
    \n-\n-\n-\n-
    28#include <gtsam/base/debug.h>
    \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-
    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+
    \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+
    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-
    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-
    \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+
    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-
    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+
    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-
    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+
    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-\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+
    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
    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+
    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+
    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-
    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+
    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-
    A convenient base class for creating your own NoiseModelFactor with n variables.
    Definition NonlinearFactor.h:400
    \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,361 +1,253 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ImuFactor.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-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+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-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+_\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+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-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-_\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+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+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-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+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-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+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-_\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+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:_\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:_\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:_\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:_\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:_\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_\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_\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 * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\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/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/BarometricFactor.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@@ -95,35 +95,40 @@\n \n \n \n \n
    \n \n-
    BarometricFactor.cpp File Reference
    \n+
    PreintegratedRotation.cpp File Reference
    \n
    \n
    \n-\n-

    Implementation file for Barometric factor. \n-More...

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

    \n Namespaces

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

    Detailed Description

    \n-

    Implementation 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,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-BarometricFactor.cpp File Reference\n-Implementation file for Barometric factor. _\bM_\bo_\br_\be_\b._\b._\b.\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 *\b**\b**\b**\b**\b* D\bDe\bet\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+ 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._\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/ManifoldPreintegration.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,48 +96,52 @@\n \n \n \n
    \n \n-
    ManifoldPreintegration.h File Reference
    \n+
    MagFactor.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::ManifoldPreintegration
     IMU pre-integration on NavSatet manifold. More...
    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...
     
    \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+

    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,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-ManifoldPreintegration.h File Reference\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:_\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+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 \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+ 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_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\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/a00992.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00992.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,6 @@\n var a00992 = [\n- [\"gtsam::ManifoldPreintegration\", \"a04192.html\", \"a04192\"]\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/a00992_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00992_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/ManifoldPreintegration.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,124 +98,241 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    ManifoldPreintegration.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-
    22#pragma once
    \n-
    23
    \n-\n-\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-
    27namespace gtsam {
    \n-
    28
    \n
    \n-
    33class GTSAM_EXPORT ManifoldPreintegration : public PreintegrationBase {
    \n-
    34 protected:
    \n-
    35
    \n-\n-\n-\n-\n-\n-\n-
    47
    \n-
    \n-\n-
    50 resetIntegration();
    \n-
    51 }
    \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-
    52
    \n-
    53public:
    \n
    56
    \n-
    62 ManifoldPreintegration(const boost::shared_ptr<Params>& p,
    \n-\n-
    64
    \n-
    66
    \n-
    70 void resetIntegration() override;
    \n-
    71
    \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-
    76 NavState deltaXij() const override { return deltaXij_; }
    \n-
    77 Rot3 deltaRij() const override { return deltaXij_.attitude(); }
    \n-
    78 Vector3 deltaPij() const override { return deltaXij_.position(); }
    \n-
    79 Vector3 deltaVij() const override { return deltaXij_.velocity(); }
    \n-
    80
    \n-
    81 Matrix3 delRdelBiasOmega() const { return delRdelBiasOmega_; }
    \n-
    82 Matrix3 delPdelBiasAcc() const { return delPdelBiasAcc_; }
    \n-
    83 Matrix3 delPdelBiasOmega() const { return delPdelBiasOmega_; }
    \n-
    84 Matrix3 delVdelBiasAcc() const { return delVdelBiasAcc_; }
    \n-
    85 Matrix3 delVdelBiasOmega() const { return delVdelBiasOmega_; }
    \n-
    86
    \n-
    89 bool equals(const ManifoldPreintegration& other, double tol) const;
    \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-
    94
    \n-
    99 void update(const Vector3& measuredAcc, const Vector3& measuredOmega, const double dt,
    \n-
    100 Matrix9* A, Matrix93* B, Matrix93* C) override;
    \n-
    101
    \n-
    105 Vector9 biasCorrectedDelta(const imuBias::ConstantBias& bias_i,
    \n-
    106 OptionalJacobian<9, 6> H = boost::none) const override;
    \n-
    107
    \n-
    \n-
    109 virtual boost::shared_ptr<ManifoldPreintegration> clone() const {
    \n-
    110 return boost::shared_ptr<ManifoldPreintegration>();
    \n-
    111 }
    \n-
    \n-
    112
    \n-
    114
    \n-
    115private:
    \n-
    117 friend class boost::serialization::access;
    \n-
    118 template<class ARCHIVE>
    \n-
    119 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
    \n-
    120 namespace bs = ::boost::serialization;
    \n-
    121 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(PreintegrationBase);
    \n-
    122 ar & BOOST_SERIALIZATION_NVP(deltaXij_);
    \n-
    123 ar & BOOST_SERIALIZATION_NVP(delRdelBiasOmega_);
    \n-
    124 ar & BOOST_SERIALIZATION_NVP(delPdelBiasAcc_);
    \n-
    125 ar & BOOST_SERIALIZATION_NVP(delPdelBiasOmega_);
    \n-
    126 ar & BOOST_SERIALIZATION_NVP(delVdelBiasAcc_);
    \n-
    127 ar & BOOST_SERIALIZATION_NVP(delVdelBiasOmega_);
    \n-
    128 }
    \n-
    129};
    \n-
    \n-
    130
    \n-
    131}
    \n-
    Navigation state composing of attitude, position, and velocity.
    \n-\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+
    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+
    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-
    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-
    NavState deltaXij_
    Pre-integrated navigation state, from frame i to frame j Note: relative position does not take into a...
    Definition ManifoldPreintegration.h:41
    \n-
    Matrix3 delPdelBiasOmega_
    Jacobian of preintegrated position w.r.t. angular rate bias.
    Definition ManifoldPreintegration.h:44
    \n-
    virtual boost::shared_ptr< ManifoldPreintegration > clone() const
    Dummy clone for MATLAB.
    Definition ManifoldPreintegration.h:109
    \n-
    Matrix3 delVdelBiasOmega_
    Jacobian of preintegrated velocity w.r.t. angular rate bias.
    Definition ManifoldPreintegration.h:46
    \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+
    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
    \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,148 +1,297 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ManifoldPreintegration.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-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/_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh>\n-25#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_\bB_\ba_\bs_\be_\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 <_\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-27namespace _\bg_\bt_\bs_\ba_\bm {\n-28\n-_\b3_\b3class GTSAM_EXPORT _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn : public _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be {\n-34 protected:\n-35\n-_\b4_\b1 _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be _\bd_\be_\bl_\bt_\ba_\bX_\bi_\bj_\b_;\n-_\b4_\b2 Matrix3 _\bd_\be_\bl_\bR_\bd_\be_\bl_\bB_\bi_\ba_\bs_\bO_\bm_\be_\bg_\ba_\b_;\n-_\b4_\b3 Matrix3 _\bd_\be_\bl_\bP_\bd_\be_\bl_\bB_\bi_\ba_\bs_\bA_\bc_\bc_\b_;\n-_\b4_\b4 Matrix3 _\bd_\be_\bl_\bP_\bd_\be_\bl_\bB_\bi_\ba_\bs_\bO_\bm_\be_\bg_\ba_\b_;\n-_\b4_\b5 Matrix3 _\bd_\be_\bl_\bV_\bd_\be_\bl_\bB_\bi_\ba_\bs_\bA_\bc_\bc_\b_;\n-_\b4_\b6 Matrix3 _\bd_\be_\bl_\bV_\bd_\be_\bl_\bB_\bi_\ba_\bs_\bO_\bm_\be_\bg_\ba_\b_;\n-47\n-_\b4_\b9 _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn() {\n-50 resetIntegration();\n-51 }\n-52\n-53public:\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-62 _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn(const boost::shared_ptr& p,\n-63 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-64\n-66\n-70 void resetIntegration() override;\n-71\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-76 _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be deltaXij() const override { return deltaXij_; }\n-77 Rot3 deltaRij() const override { return deltaXij_.attitude(); }\n-78 Vector3 deltaPij() const override { return deltaXij_.position(); }\n-79 Vector3 deltaVij() const override { return deltaXij_.velocity(); }\n-80\n-81 Matrix3 delRdelBiasOmega() const { return delRdelBiasOmega_; }\n-82 Matrix3 delPdelBiasAcc() const { return delPdelBiasAcc_; }\n-83 Matrix3 delPdelBiasOmega() const { return delPdelBiasOmega_; }\n-84 Matrix3 delVdelBiasAcc() const { return delVdelBiasAcc_; }\n-85 Matrix3 delVdelBiasOmega() const { return delVdelBiasOmega_; }\n-86\n-89 bool equals(const ManifoldPreintegration& other, double tol) const;\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-94\n-99 void update(const Vector3& measuredAcc, const Vector3& measuredOmega, const\n-double dt,\n-100 Matrix9* A, Matrix93* B, Matrix93* C) override;\n-101\n-105 Vector9 biasCorrectedDelta(const imuBias::ConstantBias& bias_i,\n-106 OptionalJacobian<9, 6> H = boost::none) const override;\n-107\n-_\b1_\b0_\b9 virtual boost::shared_ptr _\bc_\bl_\bo_\bn_\be() const {\n-110 return boost::shared_ptr();\n-111 }\n-112\n-114\n-115private:\n-_\b1_\b1_\b7 friend class boost::serialization::access;\n-118 template\n-119 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-120 namespace bs = ::boost::serialization;\n-121 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be);\n-122 ar & BOOST_SERIALIZATION_NVP(deltaXij_);\n-123 ar & BOOST_SERIALIZATION_NVP(delRdelBiasOmega_);\n-124 ar & BOOST_SERIALIZATION_NVP(delPdelBiasAcc_);\n-125 ar & BOOST_SERIALIZATION_NVP(delPdelBiasOmega_);\n-126 ar & BOOST_SERIALIZATION_NVP(delVdelBiasAcc_);\n-127 ar & BOOST_SERIALIZATION_NVP(delVdelBiasOmega_);\n-128 }\n-129};\n-130\n-131}\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_\bB_\ba_\bs_\be_\b._\bh\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+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:_\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:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\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-ManifoldPreintegration()\n-Default constructor for serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ManifoldPreintegration.h:49\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_\b:_\b:_\bd_\be_\bl_\bV_\bd_\be_\bl_\bB_\bi_\ba_\bs_\bA_\bc_\bc_\b_\n-Matrix3 delVdelBiasAcc_\n-Jacobian of preintegrated velocity w.r.t. acceleration bias.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ManifoldPreintegration.h:45\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_\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 ManifoldPreintegration.h:42\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_\b:_\b:_\bd_\be_\bl_\bP_\bd_\be_\bl_\bB_\bi_\ba_\bs_\bA_\bc_\bc_\b_\n-Matrix3 delPdelBiasAcc_\n-Jacobian of preintegrated position w.r.t. acceleration bias.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ManifoldPreintegration.h:43\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_\b:_\b:_\bd_\be_\bl_\bt_\ba_\bX_\bi_\bj_\b_\n-NavState deltaXij_\n-Pre-integrated navigation state, from frame i to frame j Note: relative\n-position does not take into a...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ManifoldPreintegration.h:41\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_\b:_\b:_\bd_\be_\bl_\bP_\bd_\be_\bl_\bB_\bi_\ba_\bs_\bO_\bm_\be_\bg_\ba_\b_\n-Matrix3 delPdelBiasOmega_\n-Jacobian of preintegrated position w.r.t. angular rate bias.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ManifoldPreintegration.h:44\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_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-virtual boost::shared_ptr< ManifoldPreintegration > clone() const\n-Dummy clone for MATLAB.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ManifoldPreintegration.h:109\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_\b:_\b:_\bd_\be_\bl_\bV_\bd_\be_\bl_\bB_\bi_\ba_\bs_\bO_\bm_\be_\bg_\ba_\b_\n-Matrix3 delVdelBiasOmega_\n-Jacobian of preintegrated velocity w.r.t. angular rate bias.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ManifoldPreintegration.h:46\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_\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\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+ * _\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_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00995_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
    18#pragma once
    \n
    19
    \n-\n-\n-\n+\n+\n+\n
    23
    \n
    24namespace gtsam {
    \n
    25
    \n
    \n
    35class GTSAM_EXPORT GPSFactor: public NoiseModelFactorN<Pose3> {
    \n
    36
    \n
    37private:
    \n@@ -240,17 +240,17 @@\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+
    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
    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"}, {"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/BarometricFactor.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@@ -96,43 +96,42 @@\n \n \n \n
    \n \n-
    BarometricFactor.h File Reference
    \n+
    ConstantVelocityFactor.h File Reference
    \n
    \n
    \n \n-

    Header file for Barometric factor. \n+

    Maintain a constant velocity motion model between two NavStates. \n More...

    \n \n

    Go to the source code of this file.

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

    \n Classes

    class  gtsam::BarometricFactor
     Prior on height in a cartesian frame. 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-

    Header file for Barometric factor.

    \n-
    Author
    Peter Milani
    \n-
    Date
    December 16, 2021
    \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,27 +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-BarometricFactor.h File Reference\n-Header file for Barometric factor. _\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:_\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+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-Header file for Barometric factor.\n+Maintain a constant velocity motion model between two NavStates.\n Author\n- Peter Milani\n- Date\n- December 16, 2021\n+ Asa Hammond\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+ * _\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/a00998_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00998_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/BarometricFactor.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,15 +98,15 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    BarometricFactor.h
    \n+
    ConstantVelocityFactor.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,110 +114,71 @@\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-
    34class GTSAM_EXPORT BarometricFactor : public NoiseModelFactorN<Pose3, double> {
    \n-
    35 private:
    \n-\n-
    37
    \n-
    38 double nT_;
    \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-
    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+
    \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-
    \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+
    63 if (H1) {
    \n+
    64 *H1 = error_H_predicted * predicted_H_x1;
    \n+
    65 }
    \n+
    66 return error;
    \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-
    109
    \n-
    110} // namespace gtsam
    \n-
    3D Pose
    \n-
    Navigation state composing of attitude, position, and velocity.
    \n-
    Non-linear factor base classes.
    \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-
    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+
    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
    \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-BarometricFactor.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@@ -16,142 +16,101 @@\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-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+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-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+_\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-_\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+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-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-109\n-110} // namespace gtsam\n-_\bP_\bo_\bs_\be_\b3_\b._\bh\n-3D Pose\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_\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:_\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 * _\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+ * _\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/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/NonlinearOptimizerParams.cpp 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@@ -94,42 +94,45 @@\n \n \n \n \n \n
    \n \n-
    NonlinearOptimizerParams.cpp File Reference
    \n+
    ExpressionFactorGraph.h File Reference
    \n
    \n
    \n \n-

    Parameters for nonlinear optimization. \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+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

    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+

    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,25 +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-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\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 N\bNa\bam\bme\bes\bsp\bpa\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 nonlinear optimization.\n- Date\n- Jul 24, 2012\n+Factor graph that supports adding ExpressionFactors directly.\n Author\n- Yong-Dian Jian\n- Richard Roberts\n Frank Dellaert\n- Andrew Melim\n+ Date\n+ December 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_\bP_\ba_\br_\ba_\bm_\bs_\b._\bc_\bp_\bp\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/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/Values.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,67 +95,61 @@\n \n \n \n \n
    \n \n-
    Values.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    FunctorizedFactor.h File Reference
    \n \n
    \n \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 \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::FunctorizedFactor< R, T >
     Factor which evaluates provided unary functor and uses the result to compute error with respect to the provided measurement. More...
     
    class  gtsam::ValuesKeyAlreadyExists
    struct  gtsam::traits< FunctorizedFactor< R, T > >
     traits More...
     
    class  gtsam::ValuesKeyDoesNotExist
    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...
     
    class  gtsam::ValuesIncorrectType
     
    class  gtsam::DynamicValuesMismatched
     
    class  gtsam::NoMatchFoundForFixed
     
    struct  gtsam::traits< Values >
     traits 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-

    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+
    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,55 +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-Values.h File Reference\n-A non-templated config holding any types of Manifold-group elements. _\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:_\bV_\ba_\bl_\bu_\be_\bC_\bl_\bo_\bn_\be_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\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- 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+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:_\bN_\bo_\bM_\ba_\bt_\bc_\bh_\bF_\bo_\bu_\bn_\bd_\bF_\bo_\br_\bF_\bi_\bx_\be_\bd\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 _\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 _\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-A non-templated config holding any types of Manifold-group elements.\n+ Date\n+ May 31, 2020\n Author\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+ Varun Agrawal\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+ * _\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/a01004.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01004.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,13 +1,8 @@\n var a01004 = [\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+ [\"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\", \"a01004.html#a9d2a0b16c9f78f20fc78fa39c7426242\", null],\n+ [\"MakeFunctorizedFactor2\", \"a01004.html#a313f0e290f370cff0b7e25024d1b8c6d\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01004_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01004_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.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,513 +98,250 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    Values.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-
    25#pragma once
    \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-\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-
    \n-
    65 class GTSAM_EXPORT Values {
    \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 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+
    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-
    84 public:
    \n-
    85
    \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+
    \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-
    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+
    \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-
    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+
    \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-
    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+
    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-
    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+
    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-
    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-
    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+
    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
    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-
    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+
    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
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,668 +1,306 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Values.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-25#pragma once\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-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_\b5 class GTSAM_EXPORT _\bV_\ba_\bl_\bu_\be_\bs {\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 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+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-84 public:\n-85\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+_\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-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+_\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-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+_\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_\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+_\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-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+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-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+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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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-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:_\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:_\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:_\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_\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\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bV_\ba_\bl_\bu_\be_\bs_\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/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/factorTesting.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@@ -94,109 +94,41 @@\n \n \n \n \n \n
    \n \n-
    factorTesting.h File Reference
    \n+Classes |\n+Namespaces
    \n+
    NonlinearISAM.h File Reference
    \n \n
    \n \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+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-\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-

    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+
    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,60 +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 | _\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\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 N\bNa\bam\bme\bes\bsp\bpa\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-Evaluate derivatives of a nonlinear factor numerically.\n Date\n- September 18, 2014\n+ Jan 19, 2010\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+ Viorela Ila and Richard Roberts\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_\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/a01010.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01010.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a01010 = [\n- [\"EXPECT_CORRECT_FACTOR_JACOBIANS\", \"a01010.html#a8ec37fe83eda47404b8588e1f012df21\", null],\n- [\"linearizeNumerically\", \"a01010.html#a9753b4e62378151d30bf8af5e2fc1602\", null]\n+ [\"gtsam::NonlinearISAM\", \"a04548.html\", \"a04548\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01010_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01010_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/NonlinearISAM.h Source File\n \n \n \n \n \n \n \n@@ -98,136 +98,118 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    factorTesting.h
    \n+
    NonlinearISAM.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-
    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-
    116
    \n-
    117} // namespace gtsam
    \n-
    Some functions to compute numerical derivatives.
    \n-
    Non-linear factor base classes.
    \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+
    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
    \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-
    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+
    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 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-
    Vector whitenedError(const Values &c) const
    Vector of errors, whitened This is the raw error, i.e., i.e.
    Definition NonlinearFactor.cpp:109
    \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-
    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,166 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-factorTesting.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-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-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-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+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+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+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:_\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:_\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:_\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:_\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:_\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_\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_\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.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/ExtendedKalmanFilter.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@@ -95,45 +95,78 @@\n \n \n \n \n
    \n \n-
    ExtendedKalmanFilter.h File Reference
    \n+Namespaces |\n+Macros
    \n+
    NonlinearFactor.h File Reference
    \n \n
    \n \n-

    Class to perform generic Kalman Filtering using nonlinear factor graphs. \n+

    Non-linear factor base classes. \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::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-

    Class to perform generic Kalman Filtering using nonlinear factor graphs.

    \n-
    Author
    Stephen Williams
    \n+

    Non-linear factor base classes.

    \n+
    Author
    Frank Dellaert
    \n+
    \n+Richard Roberts
    \n
    \n-Chris Beall
    \n+Gerry Chen
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,53 @@\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 | _\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 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:_\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-Class to perform generic Kalman Filtering using nonlinear factor graphs.\n+Non-linear factor base classes.\n Author\n- Stephen Williams\n- Chris Beall\n+ Frank Dellaert\n+ Richard Roberts\n+ Gerry Chen\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+ * _\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/a01013.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01013.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,6 @@\n var a01013 = [\n- [\"gtsam::ExtendedKalmanFilter< VALUE >\", \"a04332.html\", \"a04332\"]\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 ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01013_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01013_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/NonlinearFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,110 +98,469 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    ExtendedKalmanFilter.h
    \n+
    NonlinearFactor.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+
    20// \\callgraph
    \n
    21
    \n-\n-\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+
    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 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-
    50 public:
    \n-
    51 typedef boost::shared_ptr<ExtendedKalmanFilter<VALUE> > shared_ptr;
    \n-
    52 typedef VALUE T;
    \n+
    50public:
    \n+
    51
    \n+
    52 typedef boost::shared_ptr<This> shared_ptr;
    \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+
    56
    \n+\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+
    63 template<typename CONTAINER>
    \n+
    \n+
    64 NonlinearFactor(const CONTAINER& keys) :
    \n+
    65 Base(keys) {}
    \n+
    \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-
    Factor Graph consisting of non-linear factors.
    \n-
    Class to perform generic Kalman Filtering using nonlinear factor graphs.
    \n-
    Non-linear factor base classes.
    \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+
    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+
    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-
    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+
    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,141 +1,574 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ExtendedKalmanFilter.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-19// \\callgraph\n-20#pragma once\n+20// \\callgraph\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-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+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+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-50 public:\n-51 typedef boost::shared_ptr > shared_ptr;\n-52 typedef VALUE T;\n+50public:\n+51\n+52 typedef boost::shared_ptr shared_ptr;\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+56\n+_\b5_\b8 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br() {}\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+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-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_\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-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Non-linear factor base classes.\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+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+_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExtendedKalmanFilter.h:78\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 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- * _\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b._\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/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/NonlinearOptimizer.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,54 +96,57 @@\n \n \n \n
    \n \n-
    NonlinearOptimizer.h File Reference
    \n+Typedefs
    \n+
    ISAM2Params.h File Reference
    \n \n
    \n \n-

    Base class and parameters for nonlinear optimization algorithms. \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::NonlinearOptimizer
     This is the abstract interface for classes that can optimize for the maximum-likelihood estimate of a NonlinearFactorGraph. 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+\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

    typedef FastMap< char, Vector > gtsam::ISAM2ThresholdMap
     Parameters for the ISAM2 algorithm.
     
    \n+typedef ISAM2ThresholdMap::value_type gtsam::ISAM2ThresholdMapValue
     
    \n

    Detailed Description

    \n-

    Base class and parameters for nonlinear optimization algorithms.

    \n-
    Author
    Richard Roberts
    \n-
    Date
    Sep 7, 2009
    \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,41 +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-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+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:_\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_\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-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 _\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-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 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-Base class and parameters for nonlinear optimization algorithms.\n+Parameters for iSAM 2.\n Author\n- Richard Roberts\n- Date\n- Sep 7, 2009\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_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\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/a01019.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01019.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var a01019 = [\n- [\"gtsam::NonlinearOptimizer\", \"a04552.html\", \"a04552\"],\n- [\"checkConvergence\", \"a01019.html#a3382482454c164c6f5817dcbe6f932b3\", null]\n+ [\"gtsam::ISAM2Params\", \"a04416.html\", \"a04416\"],\n+ [\"ISAM2ThresholdMap\", \"a01019.html#ga238e84a1d4a91f43465b12592a8bf8e4\", null]\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/NonlinearOptimizer.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,111 +98,307 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    NonlinearOptimizer.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-
    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-
    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-
    118 const NonlinearFactorGraph &graph() const { return graph_; }
    \n-
    119
    \n-
    121
    \n-
    124
    \n-
    126 virtual ~NonlinearOptimizer();
    \n+
    18// \\callgraph
    \n+
    19
    \n+
    20#pragma once
    \n+
    21
    \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+
    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-
    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-
    Factor Graph consisting of non-linear factors.
    \n-
    Parameters for nonlinear optimization.
    \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+
    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-
    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+
    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
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,151 +1,405 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-NonlinearOptimizer.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-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-_\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-_\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+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+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+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-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_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph consisting of non-linear factors.\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+_\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+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:_\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:_\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\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+ * _\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/a01022.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01022.html", "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/DoglegOptimizerImpl.h File Reference\n \n \n \n \n \n \n \n@@ -94,39 +94,46 @@\n \n \n \n \n \n
    \n \n-
    NonlinearFactorGraph.cpp File Reference
    \n+
    DoglegOptimizerImpl.h File Reference
    \n
    \n
    \n \n-

    Factor Graph Consisting of non-linear factors. \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+Classes

    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

    Detailed Description

    \n-

    Factor Graph Consisting of non-linear factors.

    \n-
    Author
    Frank Dellaert
    \n-
    \n-Carlos Nieto
    \n-
    \n-Christian Potthast
    \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,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-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+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+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 *\b**\b**\b**\b**\b* D\bDe\bet\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+Nonlinear factor graph optimizer using Powell's Dogleg algorithm (detail\n+implementation)\n Author\n- Frank Dellaert\n- Carlos Nieto\n- Christian Potthast\n+ 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_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bc_\bp_\bp\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/a01025.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01025.html", "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/nonlinear/GaussNewtonOptimizer.h File Reference\n \n \n \n \n \n \n \n@@ -95,58 +95,43 @@\n \n \n \n \n
    \n \n-
    ISAM2Params.h File Reference
    \n+Namespaces
    \n+
    GaussNewtonOptimizer.h File Reference
    \n \n
    \n \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 \n

    \n Classes

    struct  gtsam::ISAM2GaussNewtonParams
     Parameters for ISAM2 using Gauss-Newton optimization. More...
     
    struct  gtsam::ISAM2DoglegParams
     Parameters for ISAM2 using Dogleg optimization. More...
    class  gtsam::GaussNewtonParams
     Parameters for Gauss-Newton optimization, inherits from NonlinearOptimizationParams. More...
     
    struct  gtsam::ISAM2Params
    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-\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

    Detailed Description

    \n-

    Parameters for iSAM 2.

    \n-
    Author
    Michael Kaess, Richard Roberts, Frank Dellaert
    \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,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 | _\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+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\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:_\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:_\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-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+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-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-Parameters for iSAM 2.\n Author\n- Michael Kaess, Richard Roberts, Frank Dellaert\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- * _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\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/a01025.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01025.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var a01025 = [\n- [\"gtsam::ISAM2Params\", \"a04416.html\", \"a04416\"],\n- [\"ISAM2ThresholdMap\", \"a01025.html#ga238e84a1d4a91f43465b12592a8bf8e4\", null]\n+ [\"gtsam::GaussNewtonParams\", \"a04352.html\", null],\n+ [\"gtsam::GaussNewtonOptimizer\", \"a04356.html\", \"a04356\"]\n ];\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/ISAM2Params.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,307 +98,91 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    ISAM2Params.h
    \n+
    GaussNewtonOptimizer.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 <boost/variant.hpp>
    \n-
    25#include <string>
    \n+
    19#pragma once
    \n+
    20
    \n+\n+
    22
    \n+
    23namespace gtsam {
    \n+
    24
    \n+
    25class GaussNewtonOptimizer;
    \n
    26
    \n-
    27namespace gtsam {
    \n-
    28
    \n-
    \n-
    35struct GTSAM_EXPORT ISAM2GaussNewtonParams {
    \n-
    36 double
    \n-\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-
    \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+
    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 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-
    \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-
    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+
    93};
    \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+
    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-
    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+
    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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,405 +1,111 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ISAM2Params.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, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, 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+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 GaussNewtonOptimizer;\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+_\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-_\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+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 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-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-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+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:_\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:_\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\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+ * _\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.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/CustomFactor.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@@ -97,50 +97,55 @@\n \n \n
    \n \n-
    CustomFactor.h File Reference
    \n+
    NonlinearOptimizerParams.h File Reference
    \n
    \n
    \n \n-

    Class to enable arbitrary factors with runtime swappable error function. \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 Classes

    class  gtsam::CustomFactor
    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-\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+typedef NonlinearOptimizerParams gtsam::SuccessiveLinearizationParams
     
    \n

    Detailed Description

    \n-

    Class to enable arbitrary factors with runtime swappable error function.

    \n-
    Author
    Fan Jiang
    \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,31 +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-CustomFactor.h File Reference\n-Class to enable arbitrary factors with runtime swappable error function.\n-_\bM_\bo_\br_\be_\b._\b._\b.\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:_\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br\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-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+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-Class to enable arbitrary factors with runtime swappable error function.\n+Parameters for nonlinear optimization.\n Author\n- Fan Jiang\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- * _\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br_\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/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,3 @@\n var a01031 = [\n- [\"gtsam::CustomFactor\", \"a04248.html\", \"a04248\"]\n+ [\"gtsam::NonlinearOptimizerParams\", \"a04556.html\", \"a04556\"]\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/CustomFactor.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,116 +98,196 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    CustomFactor.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-
    18#pragma once
    \n-
    19
    \n-\n-
    21
    \n-
    22namespace gtsam {
    \n+
    22#pragma once
    \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-
    51 using Base = NoiseModelFactor;
    \n-
    52 using This = CustomFactor;
    \n+\n+\n+
    26#include <boost/optional.hpp>
    \n+
    27#include <string>
    \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+
    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-
    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-
    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+
    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 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+
    Linear Factor Graph where all factors are Gaussians.
    \n+
    Subgraph Solver from IROS 2010.
    \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-
    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-
    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+
    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,157 +1,233 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-CustomFactor.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-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+22#pragma once\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-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+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-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-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+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 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+_\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_\bS_\bo_\bl_\bv_\be_\br_\b._\bh\n+Subgraph Solver from IROS 2010.\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:_\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-&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_\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- * _\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br_\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/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/DoglegOptimizer.cpp 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@@ -94,39 +94,47 @@\n \n \n \n \n \n
    \n \n-
    DoglegOptimizer.cpp File Reference
    \n+Classes |\n+Namespaces
    \n+
    LinearContainerFactor.h File Reference
    \n \n
    \n+\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+Classes

    class  gtsam::LinearContainerFactor
     Dummy version of a generic linear factor to be injected into a nonlinear factor graph. More...
     
    struct  gtsam::traits< LinearContainerFactor >
     
    \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+

    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,23 +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\n-DoglegOptimizer.cpp File Reference\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+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\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+\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 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+Wrap Jacobian and Hessian linear factors to allow simple injection into a\n+nonlinear graph.\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._\bh\n * Generated on Tue Jan 9 2024 05:51: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.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01040.html", "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/DoglegOptimizer.h File Reference\n \n \n \n \n \n \n \n@@ -95,53 +95,43 @@\n \n \n \n \n
    \n \n-
    ISAM2Clique.h File Reference
    \n+Namespaces
    \n+
    DoglegOptimizer.h File Reference
    \n \n
    \n \n-

    Specialized iSAM2 Clique. \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::ISAM2Clique
     Specialized Clique structure for ISAM2, incorporating caching and gradient contribution TODO: more documentation. 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-\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+
    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,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-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+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:_\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+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-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- Michael Kaess, Richard Roberts\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- * _\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_\b._\bh\n * Generated on Tue Jan 9 2024 05:51: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.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01040.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var a01040 = [\n- [\"gtsam::ISAM2Clique\", \"a04404.html\", \"a04404\"],\n- [\"optimizeWildfire\", \"a01040.html#a2b0857edd76f8d63eeee0ce9944e28d4\", null]\n+ [\"gtsam::DoglegParams\", \"a04256.html\", \"a04256\"],\n+ [\"gtsam::DoglegOptimizer\", \"a04260.html\", \"a04260\"]\n ];\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/ISAM2Clique.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,166 +98,127 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    ISAM2Clique.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-
    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+
    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 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+
    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+
    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-
    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-
    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+
    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+
    112 GaussianFactorGraph::shared_ptr iterate() override;
    \n+
    113
    \n+
    115 const DoglegParams& params() const { return params_; }
    \n+
    116
    \n+
    118 double getDelta() const;
    \n+
    119
    \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-
    134 void fastBackSubstitute(VectorValues* delta) const;
    \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-
    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-
    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+
    130}
    \n+
    Base class and parameters for nonlinear optimization algorithms.
    \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+
    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+
    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,205 +1,158 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ISAM2Clique.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-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+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 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+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+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-_\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-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+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+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+116\n+118 double getDelta() const;\n+119\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-134 void fastBackSubstitute(_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs* delta) const;\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-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_\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+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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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+_\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 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+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:_\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- * _\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_\b._\bh\n * Generated on Tue Jan 9 2024 05:51: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/a01046.html", "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/ISAM2UpdateParams.h File Reference\n \n \n \n \n \n \n \n@@ -94,36 +94,44 @@\n \n \n \n \n \n
    \n \n-
    NonlinearConjugateGradientOptimizer.cpp File Reference
    \n+
    ISAM2UpdateParams.h File Reference
    \n
    \n
    \n \n-

    Simple non-linear optimizer that solves using non-preconditioned CG. \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+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...
     
    \n \n \n \n \n

    \n Namespaces

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

    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,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-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+_\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+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\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+\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 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+Class that stores extra params for ISAM2::update()\n Author\n- Yong-Dian Jian\n- Date\n- Jun 11, 2012\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- * _\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+ * _\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/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/NonlinearOptimizer.cpp 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@@ -94,47 +94,50 @@\n \n \n \n \n \n
    \n \n-
    NonlinearOptimizer.cpp File Reference
    \n+Classes |\n+Namespaces
    \n+
    GncOptimizer.h File Reference
    \n \n
    \n \n-

    Convergence functions not dependent on graph types. \n+

    The GncOptimizer class. \n More...

    \n+\n+

    Go to the source code of this file.

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

    \n+Classes

    class  gtsam::GncOptimizer< GncParameters >
     
    \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+

    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,35 +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-NonlinearOptimizer.cpp File Reference\n-Convergence functions not dependent on graph 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+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:_\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-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+The GncOptimizer class.\n Author\n+ Jingnan Shi\n+ Luca Carlone\n Frank Dellaert\n- Date\n- Jul 17, 2010\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- * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bc_\bp_\bp\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/a01049.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01049.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a01049 = [\n- [\"checkConvergence\", \"a01049.html#a3382482454c164c6f5817dcbe6f932b3\", null]\n+ [\"gtsam::GncOptimizer< GncParameters >\", \"a04360.html\", \"a04360\"]\n ];\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/ISAM2Params.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,35 +94,45 @@\n \n \n \n \n \n
    \n \n-
    ISAM2Params.cpp File Reference
    \n+
    GraphvizFormatting.h File Reference
    \n
    \n
    \n \n-

    Parameters for iSAM 2. \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-

    Parameters for iSAM 2.

    \n-
    Author
    Michael Kaess, Richard Roberts, Frank Dellaert
    \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,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-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+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-Parameters for iSAM 2.\n+Graphviz formatter for NonlinearFactorGraph.\n Author\n- Michael Kaess, Richard Roberts, Frank Dellaert\n+ Frank Dellaert\n+ Date\n+ December, 2021\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+ * _\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/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/Expression.h 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,90 +94,36 @@\n \n \n \n \n \n
    \n \n-
    Expression.h File Reference
    \n+Namespaces
    \n+
    NonlinearConjugateGradientOptimizer.cpp File Reference
    \n \n
    \n \n-

    Expressions for Block Automatic Differentiation. \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-\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-
    \n-Paul Furgale
    \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,89 +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-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+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-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+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- Paul Furgale\n+ Yong-Dian Jian\n+ Date\n+ Jun 11, 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+ * _\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/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/LinearContainerFactor.cpp 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@@ -94,32 +94,46 @@\n \n \n \n \n \n
    \n \n-
    LinearContainerFactor.cpp File Reference
    \n+
    ExtendedKalmanFilter.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+Classes

    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-
    Date
    Jul 6, 2012
    \n-
    Author
    Alex Cunningham
    \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,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-LinearContainerFactor.cpp File Reference\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+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\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+\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+Class to perform generic Kalman Filtering using nonlinear factor graphs.\n Author\n- Alex Cunningham\n+ Stephen Williams\n+ Chris Beall\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+ * _\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/a01061.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01061.html", "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/nonlinear/Marginals.h File Reference\n \n \n \n \n \n \n \n@@ -96,42 +96,46 @@\n \n \n \n
    \n \n-
    ISAM2UpdateParams.h File Reference
    \n+
    Marginals.h File Reference
    \n
    \n
    \n \n-

    Class that stores extra params for ISAM2::update() \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 \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::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

    Detailed Description

    \n-

    Class that stores extra params for ISAM2::update()

    \n-
    Author
    Michael Kaess, Richard Roberts, Frank Dellaert, Jose Luis Blanco
    \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,27 +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-ISAM2UpdateParams.h File Reference\n-Class that stores extra params for ISAM2::update() _\bM_\bo_\br_\be_\b._\b._\b.\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-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:_\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 *\b**\b**\b**\b**\b* D\bDe\bet\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+A class for computing marginals in a NonlinearFactorGraph.\n Author\n- Michael Kaess, Richard Roberts, Frank Dellaert, Jose Luis Blanco\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- * _\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\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/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/ISAM2UpdateParams.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,75 +98,188 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    ISAM2UpdateParams.h
    \n+
    Marginals.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+
    2
    \n+
    3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
    \n+
    4 * Atlanta, Georgia 30332-0415
    \n+
    5 * All Rights Reserved
    \n+
    6 * Authors: Frank Dellaert, 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-\n-
    33 ISAM2UpdateParams() = default;
    \n-
    34
    \n-\n-
    37
    \n-
    40 boost::optional<FastMap<Key, int>> constrainedKeys{boost::none};
    \n+
    32class GTSAM_EXPORT Marginals {
    \n+
    33
    \n+
    34public:
    \n+
    35
    \n+
    \n+\n+
    38 CHOLESKY,
    \n+
    39 QR
    \n+
    40 };
    \n+
    \n
    41
    \n-
    44 boost::optional<FastList<Key>> noRelinKeys{boost::none};
    \n-
    45
    \n-
    49 boost::optional<FastList<Key>> extraReelimKeys{boost::none};
    \n+
    42protected:
    \n+
    43
    \n+\n+
    45 Values values_;
    \n+
    46 Factorization factorization_;
    \n+
    47 GaussianBayesTree bayesTree_;
    \n+
    48
    \n+
    49public:
    \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+
    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+
    A non-templated config holding any types of Manifold-group elements.
    \n+
    Factor Graph consisting of non-linear factors.
    \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+
    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,102 +1,260 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ISAM2UpdateParams.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 * 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, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n+6 * Authors: Frank Dellaert, 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/_\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-_\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+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-_\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+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_\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+_\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+_\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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- * _\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\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/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/GraphvizFormatting.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@@ -95,44 +95,89 @@\n \n \n \n \n
    \n \n-
    GraphvizFormatting.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    Expression.h File Reference
    \n \n
    \n \n-

    Graphviz formatter for NonlinearFactorGraph. \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 Classes

    struct  gtsam::GraphvizFormatting
     Formatting options and functions for saving a NonlinearFactorGraph instance in GraphViz format. More...
    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-

    Graphviz formatter for NonlinearFactorGraph.

    \n-
    Author
    Frank Dellaert
    \n-
    Date
    December, 2021
    \n+

    Expressions for Block Automatic Differentiation.

    \n+
    Date
    September 18, 2014
    \n+
    Author
    Frank Dellaert
    \n+
    \n+Paul Furgale
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +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\n-GraphvizFormatting.h File Reference\n-Graphviz formatter for NonlinearFactorGraph. _\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-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:_\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 N\bNa\bam\bme\bes\bsp\bpa\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-Graphviz formatter for NonlinearFactorGraph.\n+Expressions for Block Automatic Differentiation.\n+ Date\n+ September 18, 2014\n Author\n Frank Dellaert\n- Date\n- December, 2021\n+ Paul Furgale\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+ * _\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/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,14 @@\n var a01064 = [\n- [\"gtsam::GraphvizFormatting\", \"a04368.html\", \"a04368\"]\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\", \"a01064.html#a51881c20dd5ecdd129cb993ea8374846\", null],\n+ [\"linearExpression\", \"a01064.html#a794029fe8dfc03f67a8cb64ad05d47c9\", null],\n+ [\"operator*\", \"a01064.html#a3db519caa1b7e43412c9a7e13acf8329\", null],\n+ [\"operator*\", \"a01064.html#a405f3793afc2cc3173c3fbdecadb162a\", null],\n+ [\"operator+\", \"a01064.html#a589e3ff8cd71e5a17ee1dcfae8b2df26\", null],\n+ [\"operator-\", \"a01064.html#a9512eb02324210895442f2bf8268902d\", 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/GraphvizFormatting.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,86 +98,310 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    GraphvizFormatting.h
    \n+
    Expression.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-
    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+
    20#pragma once
    \n+
    21
    \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// 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-
    \n-\n-
    47 : paperHorizontalAxis(Y),
    \n-
    48 paperVerticalAxis(X),
    \n-
    49 scale(1),
    \n-
    50 mergeSimilarFactors(false) {}
    \n-
    \n+
    47template<typename T>
    \n+
    \n+\n+
    49
    \n+
    50public:
    \n
    51
    \n-
    52 // Find bounds
    \n-
    53 Vector2 findBounds(const Values& values, const KeySet& keys) const;
    \n+\n
    54
    \n-
    56 boost::optional<Vector2> extractPosition(const Value& value) const;
    \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+
    55protected:
    \n+
    56
    \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+
    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+
    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+
    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+
    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+
    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+\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+
    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+
    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+
    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+
    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+
    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-\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+
    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+
    : 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
    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,110 +1,404 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GraphvizFormatting.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-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-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+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#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// 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-_\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+47template\n+_\b4_\b8class _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn {\n+49\n+50public:\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+_\b5_\b3 typedef _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b> _\bt_\by_\bp_\be;\n 54\n-56 boost::optional extractPosition(const _\bV_\ba_\bl_\bu_\be& value) const;\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+55protected:\n+56\n+57 // Paul's trick shared pointer, polymorphic root of entire expression tree\n+58 boost::shared_ptr > root_;\n+59\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+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+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+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+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+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+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+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+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+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+_\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:_\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:_\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_\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:_\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 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 _\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- * _\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg_\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/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/GaussNewtonOptimizer.h 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,44 +94,32 @@\n \n \n \n \n \n
    \n \n-
    GaussNewtonOptimizer.h File Reference
    \n+
    LinearContainerFactor.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-Classes

    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-
    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,29 +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-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-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+_\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 *\b**\b**\b**\b**\b* D\bDe\bet\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- * _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\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._\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/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/Marginals.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,48 +94,109 @@\n \n \n \n \n \n
    \n \n-
    Marginals.h File Reference
    \n+Namespaces |\n+Macros |\n+Functions
    \n+
    factorTesting.h File Reference
    \n \n
    \n \n-

    A class for computing marginals in a NonlinearFactorGraph. \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-\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_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-

    A class for computing marginals in a NonlinearFactorGraph.

    \n-
    Author
    Richard Roberts
    \n-
    Date
    May 14, 2012
    \n-
    \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 \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,33 +1,60 @@\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+_\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-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__\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-A class for computing marginals in a NonlinearFactorGraph.\n- Author\n- Richard Roberts\n+Evaluate derivatives of a nonlinear factor numerically.\n Date\n- May 14, 2012\n+ September 18, 2014\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 * _\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+ * _\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/a01070.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01070.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var a01070 = [\n- [\"gtsam::Marginals\", \"a04452.html\", \"a04452\"],\n- [\"gtsam::JointMarginal\", \"a04456.html\", \"a04456\"]\n+ [\"EXPECT_CORRECT_FACTOR_JACOBIANS\", \"a01070.html#a8ec37fe83eda47404b8588e1f012df21\", null],\n+ [\"linearizeNumerically\", \"a01070.html#a9753b4e62378151d30bf8af5e2fc1602\", null]\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/Marginals.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,188 +98,136 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    Marginals.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-
    24
    \n-
    25namespace gtsam {
    \n+
    20#pragma once
    \n+
    21
    \n+\n+\n+
    24#include <string>
    \n+
    25#include <vector>
    \n
    26
    \n-
    27class JointMarginal;
    \n+
    27namespace gtsam {
    \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-
    41
    \n-
    42protected:
    \n-
    43
    \n-\n-
    45 Values values_;
    \n-
    46 Factorization factorization_;
    \n-
    47 GaussianBayesTree bayesTree_;
    \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-
    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+
    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+
    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-
    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-
    A non-templated config holding any types of Manifold-group elements.
    \n-
    Factor Graph consisting of non-linear factors.
    \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-
    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+
    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-
    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+
    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-
    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+
    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
    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+
    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,260 +1,170 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Marginals.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/_\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+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-27class JointMarginal;\n+27namespace _\bg_\bt_\bs_\ba_\bm {\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+_\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-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+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+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-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-_\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+_\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:_\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:_\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:_\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:_\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:_\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_\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:_\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:_\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- * _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs_\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/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/GraphvizFormatting.cpp 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@@ -94,36 +94,45 @@\n \n \n \n \n \n
    \n \n-
    GraphvizFormatting.cpp File Reference
    \n+
    nonlinearExceptions.h File Reference
    \n
    \n
    \n \n-

    Graphviz formatter for NonlinearFactorGraph. \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+Classes

    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-

    Graphviz formatter for NonlinearFactorGraph.

    \n-
    Author
    Frank Dellaert
    \n-
    Date
    December, 2021
    \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,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-GraphvizFormatting.cpp File Reference\n-Graphviz formatter for NonlinearFactorGraph. _\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+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:_\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-Graphviz formatter for NonlinearFactorGraph.\n+Exceptions that may be thrown by nonlinear optimization components.\n Author\n- Frank Dellaert\n+ Richard Roberts\n Date\n- December, 2021\n+ Aug 17, 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._\bc_\bp_\bp\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/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/DoglegOptimizer.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,44 +94,42 @@\n \n \n \n \n \n
    \n \n-
    DoglegOptimizer.h File Reference
    \n+
    NonlinearOptimizerParams.cpp File Reference
    \n
    \n
    \n \n-

    Go to the source code of this file.

    \n+

    Parameters for nonlinear optimization. \n+More...

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

    \n-Classes

    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-
    Author
    Richard Roberts
    \n-
    Date
    Feb 26, 2012
    \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,28 +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-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:_\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+_\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+Parameters for nonlinear optimization.\n+ Date\n+ Jul 24, 2012\n Author\n+ Yong-Dian Jian\n Richard Roberts\n- Date\n- Feb 26, 2012\n+ Frank Dellaert\n+ Andrew Melim\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_\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/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/ISAM2.cpp 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,35 +94,56 @@\n \n \n \n \n \n
    \n \n-
    ISAM2.cpp File Reference
    \n+Classes |\n+Namespaces |\n+Functions
    \n+
    NonlinearOptimizer.h File Reference
    \n \n
    \n \n-

    Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization. \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+\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+

    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,22 +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\n-ISAM2.cpp File Reference\n-Incremental update functionality (ISAM2) for BayesTree, with fluid\n-relinearization. _\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+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+Base class and parameters for nonlinear optimization algorithms.\n Author\n- Michael Kaess, Richard Roberts, Frank Dellaert\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- * _\bI_\bS_\bA_\bM_\b2_\b._\bc_\bp_\bp\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/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/LevenbergMarquardtOptimizer.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@@ -98,131 +98,371 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    LevenbergMarquardtOptimizer.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#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+
    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-
    57 LevenbergMarquardtOptimizer(const NonlinearFactorGraph& graph, const Values& initialValues,
    \n-\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-
    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+
    \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 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+
    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-
    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+
    \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-
    118 bool tryLambda(const GaussianFactorGraph& linear, const VectorValues& sqrtHessianDiagonal);
    \n-
    119
    \n-
    121
    \n-
    122protected:
    \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-
    \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+
    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+
    \n+
    149
    \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+
    \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+
    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+
    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+
    Concept check for values that can be used in unit tests.
    \n+
    #define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)
    This marks a GTSAM object to require alignment.
    Definition types.h:317
    \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-
    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-
    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+
    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+
    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,157 +1,480 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\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+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#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+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-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+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-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-79\n-81 double lambda() const;\n-82\n-84 int getInnerIterations() const;\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 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+_\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-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+_\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-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-121\n-122protected:\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-_\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-_\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+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+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+_\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+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+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+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+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+_\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__\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+_\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:_\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-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:_\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:_\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+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 * _\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+ * 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/a01088.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01088.html", "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/ISAM2.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,55 +94,35 @@\n \n \n \n \n \n
    \n \n-
    WhiteNoiseFactor.h File Reference
    \n+Namespaces
    \n+
    ISAM2.cpp File Reference
    \n \n
    \n \n-

    Binary white noise factor. \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::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-

    Binary white noise factor.

    \n-
    Author
    Chris Beall
    \n-
    \n-Frank Dellaert
    \n-
    Date
    September 2011
    \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,33 +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 | _\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+_\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 N\bNa\bam\bme\bes\bsp\bpa\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-Binary white noise factor.\n+Incremental update functionality (ISAM2) for BayesTree, with fluid\n+relinearization.\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_\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/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/LevenbergMarquardtOptimizer.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearISAM.cpp File Reference\n \n \n \n \n \n \n \n@@ -95,39 +95,31 @@\n \n \n \n \n
    \n \n-
    LevenbergMarquardtOptimizer.cpp File Reference
    \n+
    NonlinearISAM.cpp File Reference
    \n
    \n
    \n-\n-

    A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme. \n-More...

    \n \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+
    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,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\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+NonlinearISAM.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 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+ Jan 19, 2010\n+ Author\n+ Viorela Ila and Richard Roberts\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+ * _\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/a01094.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01094.html", "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/ISAM2Result.h File Reference\n \n \n \n \n \n \n \n@@ -96,48 +96,48 @@\n \n \n \n
    \n \n-
    NonlinearFactorGraph.h File Reference
    \n+
    ISAM2Result.h File Reference
    \n
    \n
    \n \n-

    Factor Graph consisting of non-linear factors. \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+\n \n

    \n Classes

    class  gtsam::NonlinearFactorGraph
    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::traits< NonlinearFactorGraph >
     traits 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-

    Factor Graph consisting of non-linear factors.

    \n-
    Author
    Frank Dellaert
    \n-
    \n-Carlos Nieto
    \n-
    \n-Christian Potthast
    \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,29 +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-NonlinearFactorGraph.h File Reference\n-Factor Graph consisting of non-linear factors. _\bM_\bo_\br_\be_\b._\b._\b.\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- 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+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:_\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:_\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-Factor Graph consisting of non-linear factors.\n+Class that stores detailed iSAM2 result.\n Author\n- Frank Dellaert\n- Carlos Nieto\n- Christian Potthast\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_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\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/a01094.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01094.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var a01094 = [\n- [\"gtsam::NonlinearFactorGraph\", \"a04540.html\", \"a04540\"],\n- [\"gtsam::traits< NonlinearFactorGraph >\", \"a04544.html\", null]\n+ [\"gtsam::ISAM2Result::DetailedResults\", \"a04424.html\", \"a04424\"],\n+ [\"gtsam::ISAM2Result::DetailedResults::VariableStatus\", \"a04428.html\", \"a04428\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01094_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01094_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/ISAM2Result.h Source File\n \n \n \n \n \n \n \n@@ -98,245 +98,161 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    NonlinearFactorGraph.h
    \n+
    ISAM2Result.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-
    23
    \n-\n-\n-\n-\n-\n+
    22#include <string>
    \n+
    23#include <vector>
    \n+
    24
    \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 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-
    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+
    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+\n+
    85
    \n+\n+
    89
    \n+
    91 size_t cliques;
    \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+\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-
    158
    \n-
    161 Values updateCholesky(const Values& values,
    \n-
    162 const Dampen& dampen = nullptr) const;
    \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-
    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+
    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
    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-
    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-
    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+
    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,314 +1,248 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-NonlinearFactorGraph.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-20// \\callgraph\n+18// \\callgraph\n+19\n+20#pragma once\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+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#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 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-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+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+_\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+_\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-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+_\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-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-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+_\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-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+_\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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_\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_\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 * _\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+ * _\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/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/Values-inl.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,474 +98,247 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    Values-inl.h
    \n+
    NonlinearConjugateGradientOptimizer.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+
    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-
    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+
    \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 _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+
    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 // 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-
    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+
    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-
    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+
    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-
    196 ConstFiltered(const Filtered<ValueType>& rhs) :
    \n-
    197 begin_(rhs.beginConst()),
    \n-
    198 end_(rhs.endConst()) {}
    \n+
    195 alpha = lineSearch(system, currentValues, direction);
    \n+
    196
    \n+
    197 prevValues = currentValues;
    \n+
    198 prevError = currentError;
    \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+
    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-
    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+
    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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,525 +1,298 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Values-inl.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-25#pragma once\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-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+_\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 _\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+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 // 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-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+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-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+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-196 ConstFiltered(const Filtered& rhs) :\n-197 begin_(rhs.beginConst()),\n-198 end_(rhs.endConst()) {}\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 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+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:_\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:_\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\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_\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/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/nonlinearExceptions.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,45 +94,47 @@\n \n \n \n \n \n
    \n \n-
    nonlinearExceptions.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    NonlinearOptimizer.cpp File Reference
    \n \n
    \n \n-

    Exceptions that may be thrown by nonlinear optimization components. \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-Classes

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

    Exceptions that may be thrown by nonlinear optimization components.

    \n-
    Author
    Richard Roberts
    \n-
    Date
    Aug 17, 2012
    \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,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-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:_\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+_\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-Exceptions that may be thrown by nonlinear optimization components.\n+Convergence functions not dependent on graph types.\n Author\n- Richard Roberts\n+ Frank Dellaert\n Date\n- Aug 17, 2012\n+ Jul 17, 2010\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+ * _\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/a01100.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01100.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a01100 = [\n- [\"gtsam::MarginalizeNonleafException\", \"a04492.html\", null]\n+ [\"checkConvergence\", \"a01100.html#a3382482454c164c6f5817dcbe6f932b3\", null]\n ];\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/ISAM2Clique.cpp 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,45 +94,40 @@\n \n \n \n \n \n
    \n \n-
    ISAM2Clique.cpp File Reference
    \n+Namespaces
    \n+
    LevenbergMarquardtParams.cpp File Reference
    \n \n
    \n \n-

    Specialized iSAM2 Clique. \n+

    Parameters for Levenberg-Marquardt trust-region 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-\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, Frank Dellaert
    \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,28 +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 | _\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+_\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-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+Parameters for 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_\bC_\bl_\bi_\bq_\bu_\be_\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._\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/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/Expression-inl.h 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@@ -95,59 +95,48 @@\n \n \n \n \n
    \n \n-
    Expression-inl.h File Reference
    \n+Namespaces
    \n+
    LevenbergMarquardtOptimizer.h File Reference
    \n \n
    \n \n-

    Internals for Expression.h, not for general consumption. \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 Classes

    struct  gtsam::internal::apply_compose< T >
     
    struct  gtsam::internal::apply_compose< double >
    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-\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+

    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,42 +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-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+_\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-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+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-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+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-_\bi_\bn_\bl_\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 * Generated on Tue Jan 9 2024 05:51: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.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01106.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,6 +1,3 @@\n var a01106 = [\n- [\"gtsam::internal::apply_compose< T >\", \"a04272.html\", null],\n- [\"gtsam::internal::apply_compose< double >\", \"a04276.html\", null],\n- [\"createUnknowns\", \"a01106.html#a51881c20dd5ecdd129cb993ea8374846\", null],\n- [\"operator*\", \"a01106.html#a3db519caa1b7e43412c9a7e13acf8329\", null]\n+ [\"gtsam::LevenbergMarquardtOptimizer\", \"a04436.html\", \"a04436\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01106_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01106_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/Expression-inl.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@@ -98,419 +98,131 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    Expression-inl.h
    \n+
    LevenbergMarquardtOptimizer.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// 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-
    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+
    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-
    43template<typename T>
    \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-
    75
    \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+
    43public:
    \n+
    44 typedef boost::shared_ptr<LevenbergMarquardtOptimizer> shared_ptr;
    \n+
    45
    \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+
    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-
    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 // 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 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-\n-
    194 return result;
    \n-
    195}
    \n-
    196
    \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 // 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-\n-
    227 T value(this->traceExecution(values, trace, traceStorage));
    \n-
    228 trace.startReverseAD1(jacobians);
    \n-
    229
    \n-
    230 return value;
    \n-
    231}
    \n-
    \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-
    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+
    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+
    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-
    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-
    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-
    : 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-
    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-
    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+
    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+
    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,408 +1,157 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Expression-inl.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-20#pragma once\n-21\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-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+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-43template\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-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+43public:\n+44 typedef boost::shared_ptr shared_ptr;\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+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+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+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-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-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-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-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-_\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 // 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-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-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-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+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+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+_\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:_\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:_\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:_\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:_\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_\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:_\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:_\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:_\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+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 * _\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+ * _\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/a01112_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01112_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/NonlinearFactorGraph.h Source File\n \n \n \n \n \n \n \n@@ -98,213 +98,245 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    GncParams.h
    \n+
    NonlinearFactorGraph.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-
    \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+
    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 public:
    \n+
    58
    \n+\n+\n+
    61 typedef boost::shared_ptr<This> shared_ptr;
    \n+
    62
    \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+\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-
    \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+
    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-
    \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+
    105
    \n+
    107 double error(const Values& values) const;
    \n+
    108
    \n+
    110 double probPrime(const Values& values) const;
    \n
    111
    \n-
    \n-
    113 void setVerbosityGNC(const Verbosity value) {
    \n-
    114 verbosity = value;
    \n-
    115 }
    \n-
    \n+
    115 boost::shared_ptr<SymbolicFactorGraph> symbolic() const;
    \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-
    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+
    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+
    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-
    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+
    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+
    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+
    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,265 +1,314 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GncParams.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-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-*/\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+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 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 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+_\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+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-_\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+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-_\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+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-_\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+115 boost::shared_ptr symbolic() const;\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-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+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+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:_\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+_\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:_\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_\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 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+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- * 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_\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/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/ISAM2Result.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@@ -96,48 +96,52 @@\n \n \n \n
    \n \n-
    ISAM2Result.h File Reference
    \n+
    ISAM2-impl.h File Reference
    \n
    \n
    \n \n-

    Class that stores detailed iSAM2 result. \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+\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::ISAM2BayesTree
     
    struct  gtsam::ISAM2Result::DetailedResults
     A struct holding detailed results, which must be enabled with ISAM2Params::enableDetailedResults. More...
    class  gtsam::ISAM2JunctionTree
     
    struct  gtsam::ISAM2Result::DetailedResults::VariableStatus
     The status of a single variable, this struct is stored in DetailedResults::variableStatus. More...
    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

    Detailed Description

    \n-

    Class that stores detailed iSAM2 result.

    \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,36 +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-ISAM2Result.h File Reference\n-Class that stores detailed iSAM2 result. _\bM_\bo_\br_\be_\b._\b._\b.\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-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+ 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 *\b**\b**\b**\b**\b* D\bDe\bet\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+Incremental update functionality (ISAM2) for BayesTree, with fluid\n+relinearization.\n Author\n Michael Kaess, Richard Roberts, Frank Dellaert\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+ * _\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/a01115.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01115.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,8 @@\n var a01115 = [\n- [\"gtsam::ISAM2Result::DetailedResults\", \"a04424.html\", \"a04424\"],\n- [\"gtsam::ISAM2Result::DetailedResults::VariableStatus\", \"a04428.html\", \"a04428\"]\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/a01115_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01115_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/ISAM2-impl.h Source File\n \n \n \n \n \n \n \n@@ -98,161 +98,566 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    ISAM2Result.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// \\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-\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-
    Factor Graph consisting of non-linear factors.
    \n-
    Nonlinear factor graph optimizer using Powell's Dogleg algorithm (detail implementation)
    \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+
    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+
    The junction tree, template bodies.
    \n+\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
    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-
    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+
    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,248 +1,689 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ISAM2Result.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// \\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-_\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-_\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+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+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+_\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+_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\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 _\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+_\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:_\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_\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:_\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 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_\bR_\be_\bs_\bu_\bl_\bt_\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/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/NonlinearISAM.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@@ -95,40 +95,59 @@\n \n \n \n \n
    \n \n-
    NonlinearISAM.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    Expression-inl.h 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 \n

    \n Classes

    class  gtsam::NonlinearISAM
     Wrapper class to manage ISAM in a nonlinear context. More...
    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-
    Date
    Jan 19, 2010
    \n-
    Author
    Viorela Ila and Richard Roberts
    \n+

    Internals for Expression.h, not for general consumption.

    \n+
    Date
    September 18, 2014
    \n+
    Author
    Frank Dellaert
    \n+
    \n+Paul Furgale
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +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-NonlinearISAM.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+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:_\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+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 N\bNa\bam\bme\bes\bsp\bpa\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- Jan 19, 2010\n+ September 18, 2014\n Author\n- Viorela Ila and Richard Roberts\n+ Frank Dellaert\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_\bI_\bS_\bA_\bM_\b._\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/a01118.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01118.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,6 @@\n var a01118 = [\n- [\"gtsam::NonlinearISAM\", \"a04548.html\", \"a04548\"]\n+ [\"gtsam::internal::apply_compose< T >\", \"a04272.html\", null],\n+ [\"gtsam::internal::apply_compose< double >\", \"a04276.html\", null],\n+ [\"createUnknowns\", \"a01118.html#a51881c20dd5ecdd129cb993ea8374846\", null],\n+ [\"operator*\", \"a01118.html#a3db519caa1b7e43412c9a7e13acf8329\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01118_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01118_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/NonlinearISAM.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,118 +98,419 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    NonlinearISAM.h
    \n+
    Expression-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-
    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+
    20#pragma once
    \n+
    21
    \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+
    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-\n-
    38
    \n-\n-
    41 int reorderCounter_;
    \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-\n-
    45
    \n-
    46public:
    \n+
    43template<typename T>
    \n+
    \n+\n+
    45 root_(new internal::LeafExpression<T>(key)) {
    \n+
    46}
    \n+
    \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+
    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-
    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+
    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+
    75
    \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-
    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+
    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 // 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 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+\n+
    194 return result;
    \n+
    195}
    \n+
    196
    \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 // 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+\n+
    227 T value(this->traceExecution(values, trace, traceStorage));
    \n+
    228 trace.startReverseAD1(jacobians);
    \n+
    229
    \n+
    230 return value;
    \n+
    231}
    \n+
    \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+
    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-\n-
    Factor Graph consisting of non-linear factors.
    \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+
    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-
    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 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+
    : 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+
    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+
    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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,166 +1,408 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-NonlinearISAM.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 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_\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+20#pragma once\n+21\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+29#include \n+30\n+31#include \n+32#include \n+33#include \n+34#include \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+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-_\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+43template\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-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+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-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+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+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-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-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+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+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+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+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+_\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 // 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+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+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+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:_\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:_\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:_\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:_\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:_\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:_\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_\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:_\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:_\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 * _\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+ * _\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/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/LevenbergMarquardtParams.h 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,49 +94,39 @@\n
    \n
    \n \n \n \n
    \n \n-
    LevenbergMarquardtParams.h File Reference
    \n+Namespaces |\n+Typedefs
    \n+
    DoglegOptimizer.cpp 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+\n+\n+\n

    \n+Typedefs

    \n+typedef internal::DoglegState gtsam::State
     
    \n

    Detailed Description

    \n-

    Parameters for 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,29 +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-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+_\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-Parameters for 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_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\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/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/DoglegOptimizerImpl.h 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@@ -94,46 +94,39 @@\n \n \n \n \n \n
    \n \n-
    DoglegOptimizerImpl.h File Reference
    \n+
    ExtendedKalmanFilter-inl.h File Reference
    \n
    \n
    \n \n-

    Nonlinear factor graph optimizer using Powell's Dogleg algorithm (detail implementation) \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

    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

    Detailed Description

    \n-

    Nonlinear factor graph optimizer using Powell's Dogleg algorithm (detail implementation)

    \n-
    Author
    Richard Roberts
    \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,30 +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-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+_\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 _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\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-\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 factor graph optimizer using Powell's Dogleg algorithm (detail\n-implementation)\n+Class to perform generic Kalman Filtering using nonlinear factor graphs.\n Author\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- * _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\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 * Generated on Tue Jan 9 2024 05:51: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/a01124_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/ExtendedKalmanFilter-inl.h Source File\n \n \n \n \n \n \n \n@@ -98,203 +98,164 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    DoglegOptimizerImpl.h
    \n+
    ExtendedKalmanFilter-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-
    17#pragma once
    \n-
    18
    \n-
    19#include <iomanip>
    \n+
    19#pragma once
    \n
    20
    \n-\n-\n-
    23
    \n-
    24namespace gtsam {
    \n+\n+\n+\n+\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-
    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-
    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+
    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+
    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+
    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+
    Linear Factor Graph where all factors are Gaussians.
    \n+
    Chordal Bayes Net, the result of eliminating a factor graph.
    \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-
    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+
    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 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,232 +1,205 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DoglegOptimizerImpl.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 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+19#pragma once\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+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-_\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+26namespace _\bg_\bt_\bs_\ba_\bm {\n+27\n+28 /* *************************************************************************\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-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+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+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+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+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_\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_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n+Chordal Bayes Net, the result of eliminating a factor graph.\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:_\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:_\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:_\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 * _\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+ * _\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/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/NonlinearOptimizerParams.h 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@@ -97,55 +97,50 @@\n \n \n
    \n \n-
    NonlinearOptimizerParams.h File Reference
    \n+
    CustomFactor.h 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

    \n Classes

    class  gtsam::NonlinearOptimizerParams
     The common parameters for Nonlinear optimizers. More...
    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 Typedefs

    \n-typedef NonlinearOptimizerParams gtsam::SuccessiveLinearizationParams
     
    \n+using gtsam::JacobianVector = std::vector< Matrix >
     
    \n+using gtsam::CustomErrorFunction = std::function< Vector(const CustomFactor &, const Values &, const JacobianVector *)>
     
    \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,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-NonlinearOptimizerParams.h File Reference\n-Parameters for nonlinear optimization. _\bM_\bo_\br_\be_\b._\b._\b.\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:_\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+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 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+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-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._\bh\n * Generated on Tue Jan 9 2024 05:51: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,3 +1,3 @@\n var a01127 = [\n- [\"gtsam::NonlinearOptimizerParams\", \"a04556.html\", \"a04556\"]\n+ [\"gtsam::CustomFactor\", \"a04248.html\", \"a04248\"]\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/NonlinearOptimizerParams.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@@ -98,196 +98,116 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    NonlinearOptimizerParams.h
    \n+
    CustomFactor.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+
    19
    \n+\n+
    21
    \n+
    22namespace gtsam {
    \n
    23
    \n-\n-\n-
    26#include <boost/optional.hpp>
    \n-
    27#include <string>
    \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-
    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+
    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+
    51 using Base = NoiseModelFactor;
    \n+
    52 using This = CustomFactor;
    \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 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+
    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+
    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
    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+
    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+
    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,233 +1,157 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-NonlinearOptimizerParams.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 6 * Authors: Frank Dellaert, 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\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-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+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+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-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 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+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+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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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+&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_\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._\bh\n * Generated on Tue Jan 9 2024 05:51: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/Marginals.cpp 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@@ -95,31 +95,31 @@\n \n \n \n \n
    \n \n-
    Marginals.cpp File Reference
    \n+
    GaussNewtonOptimizer.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
    Author
    Richard Roberts
    \n-
    Date
    May 14, 2012
    \n+
    Date
    Feb 26, 2012
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +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-Marginals.cpp File Reference\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 *\b**\b**\b**\b**\b* D\bDe\bet\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- May 14, 2012\n+ Feb 26, 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+ * _\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/a01139.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01139.html", "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/LevenbergMarquardtOptimizer.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,54 +94,40 @@\n \n \n \n \n \n
    \n \n-
    ISAM2-impl.h File Reference
    \n+
    LevenbergMarquardtOptimizer.cpp File Reference
    \n
    \n
    \n \n-

    Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization. \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-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...
     
    \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+

    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,39 +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-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:_\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+_\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 *\b**\b**\b**\b**\b* D\bDe\bet\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+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_\b-_\bi_\bm_\bp_\bl_\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/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/ISAM2.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,47 +94,35 @@\n \n \n \n \n \n
    \n \n-
    ISAM2.h File Reference
    \n+
    CustomFactor.cpp File Reference
    \n
    \n
    \n \n-

    Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization. \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-\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

    Detailed Description

    \n-

    Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization.

    \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,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-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\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 *\b**\b**\b**\b**\b* D\bDe\bet\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 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_\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/a01148_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01148_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/ExpressionFactorGraph.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@@ -98,67 +98,402 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    ExpressionFactorGraph.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-
    21#include <gtsam/nonlinear/ExpressionFactor.h>
    \n-\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-
    24namespace gtsam {
    \n+
    24#include <boost/bind/bind.hpp>
    \n
    25
    \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+
    26#include <limits>
    \n+
    27#include <iostream>
    \n+
    28#include <cmath>
    \n+
    29
    \n+
    30namespace gtsam {
    \n+
    31
    \n+
    44template<class VALUE>
    \n+
    \n+\n+
    46
    \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+
    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-
    48
    \n-
    50};
    \n+
    76
    \n+
    77 ~NonlinearEquality() override {
    \n+
    78 }
    \n+
    79
    \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-
    51
    \n-
    52}
    \n-
    Factor Graph consisting of non-linear factors.
    \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+
    \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+
    \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+
    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+
    348
    \n+
    349template <typename VALUE>
    \n+
    \n+
    350struct traits<NonlinearEquality2<VALUE>> : Testable<NonlinearEquality2<VALUE>> {
    \n+
    351};
    \n+
    \n+
    352
    \n+
    353}// namespace gtsam
    \n+
    Concept check for values that can be used in unit tests.
    \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+
    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-
    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+
    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+
    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,76 +1,494 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\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+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 \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+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-24namespace _\bg_\bt_\bs_\ba_\bm {\n+24#include \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-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+26#include \n+27#include \n+28#include \n+29\n+30namespace _\bg_\bt_\bs_\ba_\bm {\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+49\n+50private:\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+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+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+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+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+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+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+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+_\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__\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+_\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:_\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:_\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_\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 * _\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+ * 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/a01151.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01151.html", "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/ISAM2Clique.h File Reference\n \n \n \n \n \n \n \n@@ -94,35 +94,54 @@\n
    \n
    \n \n \n \n
    \n \n-
    CustomFactor.cpp File Reference
    \n+Classes |\n+Namespaces |\n+Functions
    \n+
    ISAM2Clique.h File Reference
    \n \n
    \n \n-

    Class to enable arbitrary factors with runtime swappable error function. \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-

    Class to enable arbitrary factors with runtime swappable error function.

    \n-
    Author
    Fan Jiang
    \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,21 +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-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 | _\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-Class to enable arbitrary factors with runtime swappable error function.\n+Specialized iSAM2 Clique.\n Author\n- Fan Jiang\n+ Michael Kaess, Richard Roberts\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+ * _\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/a01157.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01157.html", "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.h File Reference\n \n \n \n \n \n \n \n@@ -95,61 +95,48 @@\n \n \n \n \n
    \n \n-
    FunctorizedFactor.h File Reference
    \n+Namespaces
    \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-\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...
    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-\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,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-FunctorizedFactor.h 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:_\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+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-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._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01157.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01157.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,8 +1,3 @@\n var a01157 = [\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\", \"a01157.html#a9d2a0b16c9f78f20fc78fa39c7426242\", null],\n- [\"MakeFunctorizedFactor2\", \"a01157.html#a313f0e290f370cff0b7e25024d1b8c6d\", null]\n+ [\"gtsam::LevenbergMarquardtParams\", \"a04440.html\", \"a04440\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01157_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01157_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/FunctorizedFactor.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@@ -98,250 +98,188 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    FunctorizedFactor.h
    \n+
    LevenbergMarquardtParams.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+
    21#pragma once
    \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+\n+\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+
    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-
    \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+
    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+
    \n+
    155
    \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-
    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-
    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+
    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,306 +1,247 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-FunctorizedFactor.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-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+21#pragma once\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-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+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+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-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+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+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+_\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:_\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 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:_\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 * _\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._\bh\n * Generated on Tue Jan 9 2024 05:51: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/ExtendedKalmanFilter-inl.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@@ -94,39 +94,47 @@\n \n \n \n \n \n
    \n \n-
    ExtendedKalmanFilter-inl.h File Reference
    \n+
    ISAM2.h File Reference
    \n
    \n
    \n \n-

    Class to perform generic Kalman Filtering using nonlinear factor graphs. \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+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

    Detailed Description

    \n-

    Class to perform generic Kalman Filtering using nonlinear factor graphs.

    \n-
    Author
    Stephen Williams
    \n-
    \n-Chris Beall
    \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,23 +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-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+_\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 N\bNa\bam\bme\bes\bsp\bpa\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 to perform generic Kalman Filtering using nonlinear factor graphs.\n+Incremental update functionality (ISAM2) for BayesTree, with fluid\n+relinearization.\n Author\n- Stephen Williams\n- Chris Beall\n+ Michael Kaess, Richard Roberts, Frank Dellaert\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+ * _\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/a01163_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01163_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/ISAM2.h Source File\n \n \n \n \n \n \n \n@@ -98,164 +98,254 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    ExtendedKalmanFilter-inl.h
    \n+
    ISAM2.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+
    19// \\callgraph
    \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+
    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 /* ************************************************************************* */
    \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-
    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+
    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-
    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+\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-
    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+
    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+
    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 extra params for ISAM2::update()
    \n+
    Class that stores detailed iSAM2 result.
    \n+
    Factor Graph consisting of non-linear factors.
    \n+
    Specialized iSAM2 Clique.
    \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-
    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 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-
    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+
    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-
    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+
    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,205 +1,373 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ExtendedKalmanFilter-inl.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-19#pragma once\n+19// \\callgraph\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-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+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 /* *************************************************************************\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-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+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-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-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+_\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-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-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Non-linear factor base classes.\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+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_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n+Class that stores extra params for ISAM2::update()\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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_\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:_\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:_\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_\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:_\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_\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- * _\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+ * _\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/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/GncOptimizer.h 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@@ -94,50 +94,39 @@\n \n \n \n \n \n
    \n \n-
    GncOptimizer.h File Reference
    \n+
    NonlinearFactorGraph.cpp File Reference
    \n
    \n
    \n \n-

    The GncOptimizer class. \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-Classes

    class  gtsam::GncOptimizer< GncParameters >
     
    \n \n \n \n \n

    \n Namespaces

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

    Detailed Description

    \n-

    The GncOptimizer class.

    \n-
    Author
    Jingnan Shi
    \n+

    Factor Graph Consisting of non-linear factors.

    \n+
    Author
    Frank Dellaert
    \n
    \n-Luca Carlone
    \n+Carlos Nieto \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+Christian Potthast
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,33 +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-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:_\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+_\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 N\bNa\bam\bme\bes\bsp\bpa\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 GncOptimizer class.\n+Factor Graph Consisting of non-linear factors.\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+ Carlos Nieto\n+ Christian Potthast\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_\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/a01169.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01169.html", "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/expressionTesting.h File Reference\n \n \n \n \n \n \n \n@@ -94,79 +94,107 @@\n \n \n \n \n \n
    \n \n-
    NonlinearFactor.h File Reference
    \n+Macros |\n+Functions
    \n+
    expressionTesting.h File Reference
    \n \n
    \n \n-

    Non-linear factor base classes. \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-\n-\n-\n-\n-\n-\n-\n-\n-

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

    Non-linear factor base classes.

    \n+

    Test harness methods for expressions.

    \n+
    Date
    September 18, 2014
    \n
    Author
    Frank Dellaert
    \n
    \n-Richard Roberts
    \n-
    \n-Gerry Chen
    \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,53 +1,58 @@\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+_\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-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+#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-Non-linear factor base classes.\n+Test harness methods for expressions.\n+ Date\n+ September 18, 2014\n Author\n Frank Dellaert\n- Richard Roberts\n- Gerry Chen\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- * _\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_\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/a01169.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01169.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,6 +1,3 @@\n var a01169 = [\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+ [\"EXPECT_CORRECT_EXPRESSION_JACOBIANS\", \"a01169.html#a701d0cd12b81a725f7f9cd2432fe9e2a\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01169_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01169_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/expressionTesting.h Source File\n \n \n \n \n \n \n \n@@ -98,469 +98,66 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    NonlinearFactor.h
    \n+
    expressionTesting.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-
    32
    \n-
    33namespace gtsam {
    \n-
    34
    \n-
    35/* ************************************************************************* */
    \n-
    36
    \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+
    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-
    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-
    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+
    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-
    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+
    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-
    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,574 +1,74 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-NonlinearFactor.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-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-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-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-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-_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\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+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:_\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 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:_\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_\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- * _\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_\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/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/LinearContainerFactor.h 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,47 +94,45 @@\n \n \n \n \n \n
    \n \n-
    LinearContainerFactor.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    ISAM2Clique.cpp File Reference
    \n \n
    \n \n-

    Wrap Jacobian and Hessian linear factors to allow simple injection into a nonlinear graph. \n+

    Specialized iSAM2 Clique. \n More...

    \n-\n-

    Go to the source code of this file.

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

    Wrap Jacobian and Hessian linear factors to allow simple injection into a nonlinear graph.

    \n-
    Date
    Jul 6, 2012
    \n-
    Author
    Alex Cunningham
    \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,32 +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-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:_\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-\u00a0\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-Wrap Jacobian and Hessian linear factors to allow simple injection into a\n-nonlinear graph.\n- Date\n- Jul 6, 2012\n+Specialized iSAM2 Clique.\n Author\n- Alex Cunningham\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_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\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/a01172.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01172.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a01172 = [\n- [\"gtsam::LinearContainerFactor\", \"a04444.html\", \"a04444\"],\n- [\"gtsam::traits< LinearContainerFactor >\", \"a04448.html\", null]\n+ [\"optimizeWildfire\", \"a01172.html#a2b0857edd76f8d63eeee0ce9944e28d4\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01190.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01190.html", "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/DsfTrackGenerator.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,45 +94,95 @@\n \n \n \n \n \n
    \n \n-
    TranslationFactor.h File Reference
    \n+Namespaces |\n+Typedefs |\n+Functions
    \n+
    DsfTrackGenerator.cpp File Reference
    \n \n
    \n \n-

    Binary factor for a relative translation direction measurement. \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-Classes

    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 DSFMap< IndexPairgtsam::gtsfm::DSFMapIndexPair
     
    \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-

    Binary factor for a relative translation direction measurement.

    \n-
    Author
    Frank Dellaert
    \n-
    Date
    March 2020
    \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,28 +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-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:_\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+_\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 _\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+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\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+Identifies connected components in the keypoint matches graph.\n Date\n- March 2020\n+ October 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 * _\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+ * _\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/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/SfmData.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,67 +94,44 @@\n \n \n \n \n \n
    \n \n-
    SfmData.cpp File Reference
    \n+Classes |\n+Namespaces
    \n+
    BinaryMeasurement.h File Reference
    \n \n
    \n \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 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+Classes

    class  gtsam::BinaryMeasurement< 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-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n

    \n-Functions

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

    Data structure for dealing with Structure from Motion data.

    \n-
    Date
    January 2022
    \n-
    Author
    Frank dellaert
    \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,55 +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-SfmData.cpp File Reference\n-Data structure for dealing with Structure from Motion data. _\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+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 N\bNa\bam\bme\bes\bsp\bpa\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- _\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-Data structure for dealing with Structure from Motion data.\n- Date\n- January 2022\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\n+ Akshay Krishnan\n+ Date\n+ July 2020\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bf_\bm\n- * _\bS_\bf_\bm_\bD_\ba_\bt_\ba_\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/a01193.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01193.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,10 +1,3 @@\n var a01193 = [\n- [\"gtsam2openGL\", \"a01193.html#ad632ed56581bf174eef379bbe272a06a\", null],\n- [\"gtsam2openGL\", \"a01193.html#aaff07ef70e6161c4d1d2bd7546ff91e6\", null],\n- [\"initialCamerasAndPointsEstimate\", \"a01193.html#aba34ed4a103d9057536ee5cac27cfdef\", null],\n- [\"initialCamerasEstimate\", \"a01193.html#ad8b55993353cbab0fde06b872783fe92\", null],\n- [\"openGL2gtsam\", \"a01193.html#ade6eca65dc0168a65f641961ca97924c\", null],\n- [\"readBal\", \"a01193.html#a710ec0322f4a2c0883841b58516b7a6a\", null],\n- [\"writeBAL\", \"a01193.html#a43c2c2ead4fddd79d9c3f9a5bfa764ae\", null],\n- [\"writeBALfromValues\", \"a01193.html#a4a2433812cf34ee359e3ec99f4f5bcc4\", null]\n+ [\"gtsam::BinaryMeasurement< T >\", \"a04688.html\", \"a04688\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01196_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01196_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
    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+
    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@@ -165,18 +165,18 @@\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-
    N*N matrix representation of SO(N).
    \n-
    3D rotation represented as a rotation matrix or quaternion
    \n-
    2D rotation
    \n-
    Non-linear factor base classes.
    \n+
    3D rotation represented as a rotation matrix or quaternion
    \n+
    2D rotation
    \n+
    N*N matrix representation of SO(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
    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", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -65,20 +65,20 @@\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-_\bS_\bO_\bn_\b._\bh\n-N*N matrix representation of SO(N).\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+_\bS_\bO_\bn_\b._\bh\n+N*N matrix representation of SO(N).\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"}]}, {"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/MFAS.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,50 +96,107 @@\n \n \n \n
    \n \n-
    MFAS.h File Reference
    \n+Typedefs |\n+Functions
    \n+
    DsfTrackGenerator.h File Reference
    \n \n
    \n \n-

    MFAS class to solve Minimum Feedback Arc Set graph problem. \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 Classes

    class  gtsam::MFAS
     The MFAS class to solve a Minimum feedback arc set (MFAS) problem. More...
    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 Typedefs

    \n-typedef std::map< std::pair< Key, Key >, double > gtsam::KeyPairDoubleMap
     
    \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-

    MFAS class to solve Minimum Feedback Arc Set graph problem.

    \n-
    Author
    Akshay Krishnan
    \n-
    Date
    September 2020
    \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,31 +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-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 | _\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-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+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-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+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-MFAS class to solve Minimum Feedback Arc Set graph problem.\n- Author\n- Akshay Krishnan\n+Identifies connected components in the keypoint matches graph.\n Date\n- September 2020\n+ July 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 * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bf_\bm\n- * _\bM_\bF_\bA_\bS_\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_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01199_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/DsfTrackGenerator.h Source File\n \n \n \n \n \n \n \n@@ -98,82 +98,87 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    MFAS.h
    \n+
    DsfTrackGenerator.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-
    21#include <gtsam/geometry/Unit3.h>
    \n-
    22#include <gtsam/inference/Key.h>
    \n-\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 <memory>
    \n-
    26#include <unordered_map>
    \n+
    25#include <Eigen/Core>
    \n+
    26#include <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+
    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+
    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-
    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+
    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,84 +1,88 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-MFAS.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-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 \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+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+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+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+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:_\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:_\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- * _\bM_\bF_\bA_\bS_\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/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/SfmTrack.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/SfmTrack.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,64 +94,36 @@\n \n \n \n \n \n
    \n \n-
    SfmTrack.h File Reference
    \n+Namespaces
    \n+
    SfmTrack.cpp File Reference
    \n \n
    \n \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-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-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

    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,42 +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-SfmTrack.h File Reference\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+SfmTrack.cpp 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-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\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 Author\n Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bf_\bm\n- * _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b._\bh\n+ * _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\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/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/SfmTrack.cpp 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@@ -94,36 +94,45 @@\n \n \n \n \n \n
    \n \n-
    SfmTrack.cpp File Reference
    \n+
    TranslationFactor.h File Reference
    \n
    \n
    \n \n-

    A simple data structure for a track in Structure from Motion. \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+Classes

    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

    Detailed Description

    \n-

    A simple data structure for a track in Structure from Motion.

    \n-
    Date
    January 2022
    \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,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-SfmTrack.cpp File Reference\n-A simple data structure for a track in Structure from Motion. _\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:_\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 *\b**\b**\b**\b**\b* D\bDe\bet\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+Binary factor for a relative translation direction measurement.\n Author\n Frank Dellaert\n+ Date\n+ March 2020\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bf_\bm\n- * _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b._\bc_\bp_\bp\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/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/DsfTrackGenerator.cpp 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@@ -94,95 +94,84 @@\n \n \n \n \n \n
    \n \n-
    DsfTrackGenerator.cpp File Reference
    \n+
    SfmData.h 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+

    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 DSFMap< IndexPairgtsam::gtsfm::DSFMapIndexPair
     
    \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+\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.
     
    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-

    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,66 @@\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+_\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 N\bNa\bam\bme\bes\bsp\bpa\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+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-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+_\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-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._\bh\n * Generated on Tue Jan 9 2024 05:51: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.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01208.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,12 @@\n var a01208 = [\n- [\"tracksFromPairwiseMatches\", \"a01208.html#ac50218675ff25e1e9202d335ecfa6b3a\", null]\n+ [\"gtsam::traits< SfmData >\", \"a04708.html\", null],\n+ [\"SfmCamera\", \"a01208.html#acab0207730cf78822bdf274b50739d31\", null],\n+ [\"gtsam2openGL\", \"a01208.html#ad632ed56581bf174eef379bbe272a06a\", null],\n+ [\"gtsam2openGL\", \"a01208.html#aaff07ef70e6161c4d1d2bd7546ff91e6\", null],\n+ [\"initialCamerasAndPointsEstimate\", \"a01208.html#aba34ed4a103d9057536ee5cac27cfdef\", null],\n+ [\"initialCamerasEstimate\", \"a01208.html#ad8b55993353cbab0fde06b872783fe92\", null],\n+ [\"openGL2gtsam\", \"a01208.html#ade6eca65dc0168a65f641961ca97924c\", null],\n+ [\"readBal\", \"a01208.html#a710ec0322f4a2c0883841b58516b7a6a\", null],\n+ [\"writeBAL\", \"a01208.html#a43c2c2ead4fddd79d9c3f9a5bfa764ae\", null],\n+ [\"writeBALfromValues\", \"a01208.html#a4a2433812cf34ee359e3ec99f4f5bcc4\", null]\n ];\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/BinaryMeasurement.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,43 +95,63 @@\n \n \n \n \n
    \n \n-
    BinaryMeasurement.h File Reference
    \n+Namespaces |\n+Typedefs
    \n+
    SfmTrack.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+

    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 Classes

    class  gtsam::BinaryMeasurement< T >
    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-

    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+

    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,34 +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-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+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:_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b<_\b _\bT_\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-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- Akshay Krishnan\n+A simple data structure for a track in Structure from Motion.\n Date\n- July 2020\n+ January 2022\n+ Author\n+ Frank Dellaert\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+ * _\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/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,7 @@\n var a01211 = [\n- [\"gtsam::BinaryMeasurement< T >\", \"a04688.html\", \"a04688\"]\n+ [\"gtsam::SfmTrack2d\", \"a04712.html\", \"a04712\"],\n+ [\"gtsam::SfmTrack\", \"a04716.html\", \"a04716\"],\n+ [\"gtsam::traits< SfmTrack >\", \"a04720.html\", null],\n+ [\"SfmMeasurement\", \"a01211.html#a9ad7940245bbbf4bf25d1dc4690b0108\", null],\n+ [\"SiftIndex\", \"a01211.html#a21a02e01a9608ce6cade24c1366b208c\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01211_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01211_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/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-
    BinaryMeasurement.h
    \n+
    SfmTrack.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-
    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-
    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+
    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+
    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-
    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+
    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-
    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+
    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,138 +1,248 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-BinaryMeasurement.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-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-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-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+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+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:_\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:_\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:_\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:_\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- * _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\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/a01217.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01217.html", "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/TranslationRecovery.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,84 +94,43 @@\n \n \n \n \n \n
    \n \n-
    SfmData.h File Reference
    \n+
    TranslationRecovery.cpp File Reference
    \n
    \n
    \n \n-

    Data structure for dealing with Structure from Motion data. \n+

    Source code for recovering translations when rotations are given. \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-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+\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+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-

    Data structure for dealing with Structure from Motion data.

    \n-
    Date
    January 2022
    \n-
    Author
    Frank dellaert
    \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,66 +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 | _\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-N\bNa\bam\bme\bes\bsp\bpa\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+_\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-_\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+ _\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+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 \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\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- Date\n- January 2022\n+Source code for recovering translations when rotations are given.\n Author\n- Frank dellaert\n+ Frank Dellaert, Akshay Krishnan\n+ Date\n+ March 2020\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bf_\bm\n- * _\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b._\bh\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/a01220.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01220.html", "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.h File Reference\n \n \n \n \n \n \n \n@@ -96,107 +96,60 @@\n \n \n \n
    \n \n-
    DsfTrackGenerator.h File Reference
    \n+Typedefs
    \n+
    ShonanAveraging.h 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+\n+\n+\n+\n+\n+\n+\n \n

    \n Classes

    struct  gtsam::gtsfm::Keypoints
    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 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+\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+using gtsam::ShonanAveragingParameters2 = ShonanAveragingParameters< 2 >
     
    \n+using gtsam::ShonanAveragingParameters3 = ShonanAveragingParameters< 3 >
     
    \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,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 | _\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+_\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 _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\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+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-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+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-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+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-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._\bh\n * Generated on Tue Jan 9 2024 05:51: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/a01220.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,6 @@\n var a01220 = [\n- [\"gtsam::gtsfm::Keypoints\", \"a04692.html\", \"a04692\"],\n- [\"tracksFromPairwiseMatches\", \"a01220.html#ac50218675ff25e1e9202d335ecfa6b3a\", null]\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/a01220_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01220_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/DsfTrackGenerator.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,87 +98,390 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    DsfTrackGenerator.h
    \n+
    ShonanAveraging.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-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#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+
    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
    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-
    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+
    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+
    accelerated power method for fast eigenvalue and eigenvector computation
    \n+
    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-
    Definition DsfTrackGenerator.h:41
    \n-
    boost::optional< gtsam::Vector > responses
    Optional confidences/responses for each detection, of shape N.
    Definition DsfTrackGenerator.h:50
    \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
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,88 +1,473 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DsfTrackGenerator.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, 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#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+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 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-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+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+_\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+_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b._\bh\n+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:_\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:_\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\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._\bh\n * Generated on Tue Jan 9 2024 05:51: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.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01223.html", "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/MFAS.h File Reference\n \n \n \n \n \n \n \n@@ -97,59 +97,49 @@\n \n \n
    \n \n-
    ShonanAveraging.h File Reference
    \n+
    MFAS.h File Reference
    \n
    \n
    \n \n-

    Shonan Averaging algorithm. \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-\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
    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-\n+\n+\n

    \n Typedefs

    \n-using gtsam::ShonanAveragingParameters2 = ShonanAveragingParameters< 2 >
     
    \n-using gtsam::ShonanAveragingParameters3 = ShonanAveragingParameters< 3 >
     
    \n+typedef std::map< std::pair< Key, Key >, double > gtsam::KeyPairDoubleMap
     
    \n

    Detailed Description

    \n-

    Shonan Averaging algorithm.

    \n-
    Date
    March 2019 - August 2020
    \n-
    Author
    Frank Dellaert, David Rosen, and Jing Wu
    \n+

    MFAS class to solve Minimum Feedback Arc Set graph problem.

    \n+
    Author
    Akshay Krishnan
    \n+
    Date
    September 2020
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,39 +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-ShonanAveraging.h File Reference\n-Shonan Averaging algorithm. _\bM_\bo_\br_\be_\b._\b._\b.\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-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+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-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\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+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-Shonan Averaging algorithm.\n- Date\n- March 2019 - August 2020\n+MFAS class to solve Minimum Feedback Arc Set graph problem.\n Author\n- Frank Dellaert, David Rosen, and Jing Wu\n+ Akshay Krishnan\n+ Date\n+ September 2020\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+ * _\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/a01223_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01223_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/MFAS.h Source File\n \n \n \n \n \n \n \n@@ -98,390 +98,82 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    ShonanAveraging.h
    \n+
    MFAS.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-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/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-
    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+
    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-\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+
    63 public:
    \n+
    \n+
    69 MFAS(const std::map<KeyPair, double> &edgeWeights)
    \n+
    70 : edgeWeights_(edgeWeights) {}
    \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 VectorXd
    \n-
    typedef and functions to augment Eigen's MatrixXd
    \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+
    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
    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+
    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,473 +1,84 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ShonanAveraging.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-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-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-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+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 _\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+63 public:\n+_\b6_\b9 _\bM_\bF_\bA_\bS(const std::map &edgeWeights)\n+70 : edgeWeights_(edgeWeights) {}\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-_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-typedef and functions to augment Eigen's VectorXd\n-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\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-_\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+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-_\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:_\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:_\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- * _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\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/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/TranslationRecovery.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/TranslationRecovery.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+
    TranslationRecovery.h File Reference
    \n \n
    \n \n-

    Source code for recovering translations when rotations are given. \n+

    Recovering translations in an epipolar graph when rotations are given. \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::TranslationRecovery
     
    \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+

    Recovering translations in an epipolar graph 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,26 @@\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+TranslationRecovery.h File Reference\n+Recovering translations in an epipolar graph when rotations are given. _\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_\bR_\be_\bc_\bo_\bv_\be_\br_\by\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+Recovering translations in an epipolar graph when rotations are given.\n Author\n Frank Dellaert, Akshay Krishnan\n Date\n March 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+ * _\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\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/a01229_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01229_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-
    21#include <gtsam/geometry/SOn.h>
    \n-\n-\n+
    21#include <gtsam/geometry/SOn.h>
    \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@@ -177,17 +177,17 @@\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+
    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< 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"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01238_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01238_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/KarcherMeanFactor.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,94 +98,218 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    KarcherMeanFactor.h
    \n+
    StereoFactor.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.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+\n+\n+
    23
    \n+
    24namespace gtsam {
    \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-
    66 ~KarcherMeanFactor() 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+
    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+
    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+\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
    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-
    const KeyVector & keys() const
    Access the factor's involved variable keys.
    Definition Factor.h:140
    \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+
    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 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+
    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,111 +1,317 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-KarcherMeanFactor.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-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/_\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-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 _\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-_\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+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+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 _\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+_\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:_\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:_\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:_\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:_\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:_\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:_\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+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 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- * K\bKa\bar\brc\bch\bhe\ber\brM\bMe\bea\ban\bnF\bFa\bac\bct\bto\bor\br.\b.h\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/a01241.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01241.html", "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/slam/BetweenFactor.h File Reference\n \n \n \n \n \n \n \n@@ -95,47 +95,55 @@\n \n \n \n \n
    \n \n-
    RegularImplicitSchurFactor.h File Reference
    \n+Namespaces |\n+Macros
    \n+
    BetweenFactor.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+\n \n-\n+\n+\n+\n+\n+\n \n

    \n Classes

    class  gtsam::RegularImplicitSchurFactor< CAMERA >
     RegularImplicitSchurFactor. More...
    class  gtsam::BetweenFactor< VALUE >
     A class for a measurement predicted by \"between(config[key1],config[key2])\". More...
     
    struct  gtsam::traits< BetweenFactor< VALUE > >
     traits More...
     
    struct  gtsam::traits< RegularImplicitSchurFactor< CAMERA > >
    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+Macros

    \n+#define BETWEENFACTOR_VISIBILITY   GTSAM_EXPORT
     
    \n

    Detailed Description

    \n-

    A subclass of GaussianFactor specialized to structureless SFM.

    \n-
    Author
    Frank Dellaert
    \n-
    \n-Luca Carlone
    \n+
    Author
    Frank Dellaert, Viorela Ila
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +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-RegularImplicitSchurFactor.h File Reference\n-A subclass of GaussianFactor specialized to structureless SFM. _\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:_\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+ 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 _\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+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+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-A subclass of GaussianFactor specialized to structureless SFM.\n Author\n- Frank Dellaert\n- Luca Carlone\n+ Frank Dellaert, Viorela Ila\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_\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/a01241.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01241.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,5 @@\n var a01241 = [\n- [\"gtsam::RegularImplicitSchurFactor< CAMERA >\", \"a04912.html\", \"a04912\"],\n- [\"gtsam::traits< RegularImplicitSchurFactor< CAMERA > >\", \"a04916.html\", null]\n+ [\"gtsam::traits< BetweenFactor< VALUE > >\", \"a04768.html\", null],\n+ [\"gtsam::BetweenConstraint< VALUE >\", \"a04772.html\", \"a04772\"],\n+ [\"gtsam::traits< BetweenConstraint< VALUE > >\", \"a04776.html\", null]\n ];\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/RegularImplicitSchurFactor.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,587 +98,215 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    RegularImplicitSchurFactor.h
    \n+
    BetweenFactor.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+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+
    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 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+
    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-
    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 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+
    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+
    122
    \n+
    126
    \n+
    \n+
    128 const VALUE& measured() const {
    \n+
    129 return measured_;
    \n+
    130 }
    \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+
    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-
    169
    \n-\n+
    170
    \n+
    171 private:
    \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+\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+
    Concept check for values that can be used in unit tests.
    \n+
    #define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)
    This marks a GTSAM object to require alignment.
    Definition types.h:317
    \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-
    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+
    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-
    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+
    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-
    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+
    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,729 +1,278 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-RegularImplicitSchurFactor.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-8#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#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+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+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 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+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 _\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 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+_\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+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-_\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+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 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+_\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+_\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__\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+_\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:_\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:_\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:_\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:_\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:_\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+_\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 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+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\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+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- * _\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_\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/a01247.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01247.html", "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.cpp 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@@ -95,170 +95,152 @@\n
    \n
    \n \n \n
    \n \n-
    dataset.cpp File Reference
    \n+
    dataset.h File Reference
    \n
    \n
    \n \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+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

    \n Typedefs

    \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+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 \n \n \n-\n-\n-\n-\n-\n \n \n \n \n \n \n \n \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\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.
     
    \n-template<typename T >
    map< size_t, T > gtsam::parseToMap (const string &filename, Parser< pair< size_t, T > > parse, size_t maxIndex)
     
    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\".
     
    \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)
     
    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.
     
    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

    utility functions for loading datasets

    \n
    Date
    Jan 22, 2010
    \n-
    Author
    Kai Ni
    \n+
    Author
    Ni Kai
    \n
    \n Luca Carlone
    \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,188 +1,164 @@\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-dataset.cpp File Reference\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 N\bNa\bam\bme\bes\bsp\bpa\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-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+ 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 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+ 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\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+ 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- 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+ 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 utility functions for loading datasets\n Date\n Jan 22, 2010\n Author\n- Kai Ni\n+ Ni Kai\n Luca Carlone\n- Frank Dellaert\n Varun Agrawal\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bd_\ba_\bt_\ba_\bs_\be_\bt_\b._\bc_\bp_\bp\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/a01247.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01247.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,13 +1,30 @@\n var a01247 = [\n+ [\"GraphAndValues\", \"a01247.html#abcc5d1ec05ddc954d5de28929acabbdf\", null],\n+ [\"IndexedPose\", \"a01247.html#a6ab764d13f9aaeafc2dc60763b05ec0e\", null],\n+ [\"KernelFunctionType\", \"a01247.html#a8be373f34edc0a9d28b1bfab5dd62ba0\", [\n+ [\"KernelFunctionTypeNONE\", \"a01247.html#a8be373f34edc0a9d28b1bfab5dd62ba0a406af886b3b4b113dfe666c8ad95e38b\", null],\n+ [\"KernelFunctionTypeHUBER\", \"a01247.html#a8be373f34edc0a9d28b1bfab5dd62ba0a37cef4c071c8c4f77f31fa617e91da53\", null],\n+ [\"KernelFunctionTypeTUKEY\", \"a01247.html#a8be373f34edc0a9d28b1bfab5dd62ba0aacc5d659fca66977c8fe6f341802fae9\", null]\n+ ]],\n+ [\"NoiseFormat\", \"a01247.html#a90552b70a2da9c74595cae4b05c2ce18\", [\n+ [\"NoiseFormatG2O\", \"a01247.html#a90552b70a2da9c74595cae4b05c2ce18ad0aaa5c51a45cb7c9151aae60a603209\", null],\n+ [\"NoiseFormatTORO\", \"a01247.html#a90552b70a2da9c74595cae4b05c2ce18a3790bc2c6f11cd7da84730b33173de5a\", null],\n+ [\"NoiseFormatGRAPH\", \"a01247.html#a90552b70a2da9c74595cae4b05c2ce18a1f8edeb25c58a249789556c686265a4c\", null],\n+ [\"NoiseFormatCOV\", \"a01247.html#a90552b70a2da9c74595cae4b05c2ce18a5450a16f3522214ccdfa23c461e7d05a\", null],\n+ [\"NoiseFormatAUTO\", \"a01247.html#a90552b70a2da9c74595cae4b05c2ce18a2f9067b8f5bd2d0dd38c49326a4c070e\", null]\n+ ]],\n [\"createRewrittenFileName\", \"a01247.html#adbe09e573771fd72b08069353d537725\", null],\n [\"findExampleDataFile\", \"a01247.html#aef971b2c69845e4fcce707306703c7b8\", null],\n [\"load2D\", \"a01247.html#a635ec096b94adc2b05f081cd07eb2c0f\", null],\n- [\"load2D\", \"a01247.html#a79f6cde1c018ea0f4ca3c7fc83123a14\", null],\n+ [\"load2D\", \"a01247.html#a6f8d49b13ccc0e007a5e7572286d5854\", null],\n [\"load3D\", \"a01247.html#ac96511703a91071d7b2033976f9739c3\", null],\n [\"parseEdge\", \"a01247.html#abc8bb9db0893652e8b5e7b47782ec990\", null],\n+ [\"parseFactors\", \"a01247.html#a8a2136a163e31faaefe2db498a9b9b43\", null],\n+ [\"parseMeasurements\", \"a01247.html#a6eb4817b97658f00e426b753c52361ed\", null],\n+ [\"parseVariables\", \"a01247.html#a683ab6a83b5b3e508e734a7089986838\", null],\n [\"parseVertexLandmark\", \"a01247.html#a961e0398bbfc2504c62fdaad70472418\", null],\n [\"parseVertexPose\", \"a01247.html#abfc0157e4790e3b03dc601d3e86c684d\", null],\n [\"readG2o\", \"a01247.html#a71d086efc70f4af31d3c3b00dde4f7c0\", null],\n [\"save2D\", \"a01247.html#acfe516bc2d9ca4cc4530dd3b8460ce3d\", null],\n [\"writeG2o\", \"a01247.html#a68bc584d72da3747666ac134a9490f92\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01250.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01250.html", "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/GeneralSFMFactor.h File Reference\n \n \n \n \n \n \n \n@@ -95,63 +95,51 @@\n \n \n \n \n
    \n \n-
    SmartFactorParams.h File Reference
    \n+Namespaces
    \n+
    GeneralSFMFactor.h File Reference
    \n \n
    \n \n-

    Collect common parameters for SmartProjection and SmartStereoProjection factors. \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 Classes

    struct  gtsam::SmartProjectionParams
    class  gtsam::GeneralSFMFactor< CAMERA, LANDMARK >
     Non-linear factor for a constraint derived from a 2D measurement. 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-\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-
    \n-Frank Dellaert
    \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,38 +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 | _\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+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:_\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:_\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:_\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-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+a general SFM factor with an unknown calibration\n+ Date\n+ Dec 15, 2010\n Author\n- Luca Carlone\n- Zsolt Kira\n- Frank Dellaert\n+ Kai Ni\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+ * _\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/a01250.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01250.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,14 +1,5 @@\n var a01250 = [\n- [\"gtsam::SmartProjectionParams\", \"a04932.html\", \"a04932\"],\n- [\"DegeneracyMode\", \"a01250.html#ac3d021280c8a8b84903a8ce81f73ea0f\", [\n- [\"IGNORE_DEGENERACY\", \"a01250.html#ac3d021280c8a8b84903a8ce81f73ea0fa7377887fa83ae502adf7f477205c0273\", null],\n- [\"ZERO_ON_DEGENERACY\", \"a01250.html#ac3d021280c8a8b84903a8ce81f73ea0fa88da97b27cb213cdf714af781ae76b99\", null],\n- [\"HANDLE_INFINITY\", \"a01250.html#ac3d021280c8a8b84903a8ce81f73ea0fa0836b9ba9572539be631139b0785a200\", null]\n- ]],\n- [\"LinearizationMode\", \"a01250.html#adf2020f3f6087064dde501c99794aac3\", [\n- [\"HESSIAN\", \"a01250.html#adf2020f3f6087064dde501c99794aac3a94d642727a23c8b5a1b59b8f74553e80\", null],\n- [\"IMPLICIT_SCHUR\", \"a01250.html#adf2020f3f6087064dde501c99794aac3a7a3f02bec869fc563591ecb84ea2eb7a\", null],\n- [\"JACOBIAN_Q\", \"a01250.html#adf2020f3f6087064dde501c99794aac3a672276bd72f64f6b462004c89c57297b\", null],\n- [\"JACOBIAN_SVD\", \"a01250.html#adf2020f3f6087064dde501c99794aac3aca6b517d49e41094c865c321ddff5b81\", null]\n- ]]\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/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/SmartFactorParams.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,157 +98,346 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    SmartFactorParams.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-
    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+
    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/*
    \n-
    40 * Parameters for the smart (stereo) projection factors
    \n-
    41 */
    \n-
    \n-\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+
    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+
    69
    \n+
    70protected:
    \n+
    71
    \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 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+
    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+
    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+
    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+
    Timing utilities.
    \n+
    Concept check for values that can be used in unit tests.
    \n+
    Access to matrices via blocks of pre-defined sizes.
    \n+
    Typedefs for easier changing of types.
    \n+
    Base class and basic functions for Manifold types.
    \n+
    typedef and functions to augment Eigen's MatrixXd
    \n+
    typedef and functions to augment Eigen's VectorXd
    \n+
    Base class for all pinhole cameras.
    \n+
    3D Point
    \n+
    3D Pose
    \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-
    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+
    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+
    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+
    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,188 +1,477 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SmartFactorParams.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-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+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/*\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-_\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+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+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+_\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 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+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+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+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+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_\bi_\bm_\bi_\bn_\bg_\b._\bh\n+Timing utilities.\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+_\bt_\by_\bp_\be_\bs_\b._\bh\n+Typedefs for easier changing of types.\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+_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+typedef and functions to augment Eigen's VectorXd\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_\bs_\be_\b3_\b._\bh\n+3D Pose\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:_\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+_\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:_\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:_\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 SmartFactorParams.h:122\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 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- * _\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bP_\ba_\br_\ba_\bm_\bs_\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/a01253_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01253_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-\n+\n
    28
    \n
    29namespace gtsam {
    \n
    51template <class CAMERA>
    \n
    \n \n
    53 private:
    \n \n@@ -391,15 +391,15 @@\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+
    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
    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"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01256.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01256.html", "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/EssentialMatrixConstraint.h File Reference\n \n \n \n \n \n \n \n@@ -96,38 +96,41 @@\n
    \n \n \n
    \n \n-
    AntiFactor.h File Reference
    \n+
    EssentialMatrixConstraint.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::AntiFactor
     A class for downdating an existing factor from a graph. More...
    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

    Detailed Description

    \n-
    Author
    Stephen Williams
    \n+
    Author
    Frank Dellaert
    \n+
    \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,23 +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-AntiFactor.h File Reference\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-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:_\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 *\b**\b**\b**\b**\b* D\bDe\bet\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- Stephen Williams\n+ Frank Dellaert\n+ Pablo Alcantarilla\n+ Date\n+ Jan 5, 2014\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+ * _\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/a01256_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01256_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/EssentialMatrixConstraint.h Source File\n \n \n \n \n \n \n \n@@ -98,134 +98,127 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    AntiFactor.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-
    16#pragma once
    \n-
    17
    \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+
    19#pragma once
    \n+
    20
    \n+\n+
    22#include <gtsam/geometry/EssentialMatrix.h>
    \n+
    23
    \n+
    24namespace gtsam {
    \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 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-
    50 AntiFactor(NonlinearFactor::shared_ptr factor) : Base(factor->keys()), factor_(factor) {}
    \n-
    51
    \n-
    52 ~AntiFactor() override {}
    \n-
    53
    \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-
    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+\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-
    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-
    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+
    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+
    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-
    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+
    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-
    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+
    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,173 +1,159 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-AntiFactor.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-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-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+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_\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 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 _\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-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+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_\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-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+_\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:_\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:_\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:_\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_\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-&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+_\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 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 AntiFactor.h:110\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- * _\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br_\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/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/SmartProjectionFactor.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,49 +96,38 @@\n \n \n \n
    \n \n-
    SmartProjectionFactor.h File Reference
    \n+
    AntiFactor.h File Reference
    \n
    \n
    \n \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::SmartProjectionFactor< CAMERA >
     SmartProjectionFactor: triangulates point and keeps an estimate of it around. More...
     
    struct  gtsam::traits< SmartProjectionFactor< CAMERA > >
     traits More...
    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-

    Smart factor on cameras (pose + calibration)

    \n-
    Author
    Luca Carlone
    \n-
    \n-Zsolt Kira
    \n-
    \n-Frank Dellaert
    \n+
    Author
    Stephen Williams
    \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\n-SmartProjectionFactor.h File Reference\n-Smart factor on cameras (pose + calibration) _\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:_\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+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-Smart factor on cameras (pose + calibration)\n Author\n- Luca Carlone\n- Zsolt Kira\n- Frank Dellaert\n+ Stephen Williams\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+ * _\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/a01262_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01262_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/AntiFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,539 +98,134 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    SmartProjectionFactor.h
    \n+
    AntiFactor.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+
    16#pragma once
    \n+
    17
    \n+
    18#include <ostream>
    \n+
    19
    \n+\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+
    \n+\n
    32
    \n-
    33namespace gtsam {
    \n+
    33 private:
    \n
    34
    \n-
    44template<class CAMERA>
    \n-
    \n-\n-
    46
    \n-
    47public:
    \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-
    49private:
    \n-\n-\n-
    52 typedef SmartProjectionFactor<CAMERA> SmartProjectionCameraFactor;
    \n+
    50 AntiFactor(NonlinearFactor::shared_ptr factor) : Base(factor->keys()), factor_(factor) {}
    \n+
    51
    \n+
    52 ~AntiFactor() override {}
    \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+
    \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-
    74 typedef CAMERA Camera;
    \n-\n-
    76
    \n-\n+
    80 double error(const Values& c) const override { return -factor_->error(c); }
    \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-
    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-
    Collect common parameters for SmartProjection and SmartStereoProjection factors.
    \n-
    Base class to create smart factors on poses or cameras.
    \n-
    utility functions for loading datasets
    \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+
    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
    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+
    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-
    virtual bool active(const Values &) const
    Checks whether a factor should be used based on a set of values.
    Definition NonlinearFactor.h:118
    \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-
    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+
    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,743 +1,173 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SmartProjectionFactor.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 -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, 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+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+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+_\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-33namespace _\bg_\bt_\bs_\ba_\bm {\n+33 private:\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-46\n-47public:\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-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+_\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-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+_\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-_\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+_\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_\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_\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-_\bd_\ba_\bt_\ba_\bs_\be_\bt_\b._\bh\n-utility functions for loading datasets\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+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:_\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:_\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_\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:_\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:_\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+_\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 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+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 &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+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 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 AntiFactor.h:110\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+ * _\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/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/SmartFactorBase.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/OrientedPlane3Factor.h Source File\n \n \n \n \n \n \n \n@@ -98,464 +98,113 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    SmartFactorBase.h
    \n+
    OrientedPlane3Factor.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/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-
    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+
    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+
    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+
    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-
    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-
    114 noiseModel_ = sharedIsotropic;
    \n-
    115 }
    \n-
    \n-
    116
    \n-
    \n-
    118 ~SmartFactorBase() override {
    \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+
    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+
    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-
    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+
    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-
    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
    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+
    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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,629 +1,139 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\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+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 7\n-8 * See LICENSE for the license information\n+8#pragma once\n 9\n-10 * -------------------------------------------------------------------------\n-- */\n-11\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-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-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+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+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+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-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-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_\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-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_\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_\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:_\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:_\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:_\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-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 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+_\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\n * _\bs_\bl_\ba_\bm\n- * _\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b._\bh\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 * Generated on Tue Jan 9 2024 05:51: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_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/EssentialMatrixFactor.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@@ -98,407 +98,111 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    EssentialMatrixFactor.h
    \n+
    KarcherMeanFactor-inl.h
    \n
    \n
    \n
    1/* ----------------------------------------------------------------------------
    \n
    2
    \n-
    3 * GTSAM Copyright 2010-2014, 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 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-
    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+
    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+
    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-
    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-\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+
    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
    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-
    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 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+
    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-
    • gtsam
    • slam
    • EssentialMatrixFactor.h
    • \n+
    • gtsam
    • slam
    • KarcherMeanFactor-inl.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,488 +1,117 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-EssentialMatrixFactor.h\n+KarcherMeanFactor-inl.h\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010-2014, 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 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#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_\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-_\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+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+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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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_\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:_\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 _\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:_\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 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 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 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 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 EssentialMatrixFactor.h:349\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 * _\bs_\bl_\ba_\bm\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+ * 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/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/BetweenFactor.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@@ -96,54 +96,54 @@\n \n \n \n
    \n \n-
    BetweenFactor.h File Reference
    \n+Typedefs
    \n+
    InitializePose3.h 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-\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...
    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-Macros

    \n-#define BETWEENFACTOR_VISIBILITY   GTSAM_EXPORT
     

    \n+Typedefs

    \n+typedef std::map< Key, std::vector< size_t > > gtsam::KeyVectorMap
     
    \n+typedef std::map< Key, Rot3gtsam::KeyRotMap
     
    \n

    Detailed Description

    \n-
    Author
    Frank Dellaert, Viorela Ila
    \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,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 | _\bM_\ba_\bc_\br_\bo_\bs\n-BetweenFactor.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+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:_\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+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-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+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- Frank Dellaert, Viorela Ila\n+ Luca Carlone\n+ Frank Dellaert\n+ Date\n+ August, 2014\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+ * _\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/a01274.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01274.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,3 @@\n var a01274 = [\n- [\"gtsam::traits< BetweenFactor< VALUE > >\", \"a04768.html\", null],\n- [\"gtsam::BetweenConstraint< VALUE >\", \"a04772.html\", \"a04772\"],\n- [\"gtsam::traits< BetweenConstraint< VALUE > >\", \"a04776.html\", null]\n+ [\"gtsam::InitializePose3\", \"a04856.html\", null]\n ];\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/BetweenFactor.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@@ -98,215 +98,97 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    BetweenFactor.h
    \n+
    InitializePose3.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-
    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+
    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-
    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-
    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+
    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-
    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-
    Concept check for values that can be used in unit tests.
    \n-
    #define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)
    This marks a GTSAM object to require alignment.
    Definition types.h:317
    \n-
    Non-linear factor base classes.
    \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-
    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-
    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+
    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,278 +1,106 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-BetweenFactor.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-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+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-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-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+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-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-_\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__\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-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Non-linear factor base classes.\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+_\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:_\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:_\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-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_\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- * _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\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/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/RotateFactor.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,170 +98,587 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    RotateFactor.h
    \n+
    RegularImplicitSchurFactor.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+Go to the documentation of this file.
    1
    \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-
    \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+\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-
    \n-\n+
    63public:
    \n+
    64
    \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+
    \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-
    \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+
    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-
    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+
    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-
    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+
    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-
    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+
    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,226 +1,729 @@\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-7\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-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-_\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+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-_\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+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-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+_\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 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+_\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:_\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_\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:_\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:_\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:_\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-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+_\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 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+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-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+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 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 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 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 RotateFactor.h:91\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- * R\bRo\bot\bta\bat\bte\beF\bFa\bac\bct\bto\bor\br.\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/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/GeneralSFMFactor.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,50 +96,51 @@\n \n \n \n
    \n \n-
    GeneralSFMFactor.h File Reference
    \n+
    ProjectionFactor.h File Reference
    \n
    \n
    \n \n-

    a general SFM factor with an unknown calibration \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-\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::GenericProjectionFactor< POSE, LANDMARK, CALIBRATION >
     Non-linear factor for a constraint derived from a 2D measurement. 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< 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-

    a general SFM factor with an unknown calibration

    \n-
    Date
    Dec 15, 2010
    \n-
    Author
    Kai Ni
    \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,36 +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-GeneralSFMFactor.h File Reference\n-a general SFM factor with an unknown calibration _\bM_\bo_\br_\be_\b._\b._\b.\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:_\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+ 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_\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 _\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-a general SFM factor with an unknown calibration\n- Date\n- Dec 15, 2010\n+Reprojection of a LANDMARK to a 2D point.\n Author\n- Kai Ni\n+ Chris Beall\n+ Richard Roberts\n+ Frank Dellaert\n+ Alex Cunningham\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+ * _\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/a01280.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01280.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,3 @@\n var a01280 = [\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< GenericProjectionFactor< POSE, LANDMARK, CALIBRATION > >\", \"a04900.html\", null]\n ];\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/GeneralSFMFactor.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,15 +98,15 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    GeneralSFMFactor.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@@ -114,330 +114,227 @@\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+\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-
    52namespace gtsam {
    \n+
    52 public:
    \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-\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+\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-
    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+
    \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-
    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-
    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-
    typedef and functions to augment Eigen's VectorXd
    \n-
    Concept check for values that can be used in unit tests.
    \n-
    Timing utilities.
    \n-
    Base class and basic functions for Manifold types.
    \n-
    Typedefs for easier changing of types.
    \n-
    Access to matrices via blocks of pre-defined sizes.
    \n-
    typedef and functions to augment Eigen's MatrixXd
    \n-
    Base class for all pinhole cameras.
    \n-
    3D Pose
    \n-
    3D Point
    \n-
    2D Point
    \n-\n-
    A binary JacobianFactor specialization that uses fixed matrix math for speed.
    \n-
    Non-linear factor base classes.
    \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+
    Base class for all pinhole cameras.
    \n+
    3D Point
    \n+
    3D Pose
    \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
    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+
    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 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+
    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,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GeneralSFMFactor.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@@ -16,280 +16,175 @@\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+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-52namespace _\bg_\bt_\bs_\ba_\bm {\n+52 public:\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-_\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+_\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-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+_\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-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-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-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-_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-typedef and functions to augment Eigen's VectorXd\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-_\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-_\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-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\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_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n Base class for all pinhole cameras.\n-_\bP_\bo_\bs_\be_\b3_\b._\bh\n-3D Pose\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-_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\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+_\bP_\bo_\bs_\be_\b3_\b._\bh\n+3D Pose\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@@ -313,25 +208,28 @@\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_\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@@ -339,139 +237,114 @@\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:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br\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 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+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 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 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+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 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+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 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 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- * _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\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/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/InitializePose.h File Reference\n \n \n \n \n \n \n \n@@ -94,53 +94,38 @@\n \n \n \n \n \n
    \n \n-
    ProjectionFactor.h File Reference
    \n+
    InitializePose.h File Reference
    \n
    \n
    \n \n-

    Reprojection of a LANDMARK to a 2D point. \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-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

    Detailed Description

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

    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,33 +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-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\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:_\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+common code between lago.* (2D) and InitializePose3.* (3D)\n Author\n- Chris Beall\n- Richard Roberts\n Frank Dellaert\n- Alex Cunningham\n+ Date\n+ August, 2020\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+ * _\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_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/InitializePose.h Source File\n \n \n \n \n \n \n \n@@ -98,243 +98,116 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    ProjectionFactor.h
    \n+
    InitializePose.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-
    28#include <boost/optional.hpp>
    \n+
    19#pragma once
    \n+
    20
    \n+\n+\n+\n+\n+\n+
    26
    \n+
    27namespace gtsam {
    \n+
    28namespace initialize {
    \n
    29
    \n-
    30namespace gtsam {
    \n+
    30static constexpr Key kAnchorKey = 99999999;
    \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+
    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+
    50 }
    \n+
    51 return poseGraph;
    \n+
    52}
    \n
    53
    \n-\n-
    56
    \n-\n-
    59
    \n-
    61 typedef boost::shared_ptr<This> shared_ptr;
    \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-
    \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-
    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-
    The most common 5DOF 3D->2D calibration.
    \n-
    Base class for all pinhole cameras.
    \n-
    3D Pose
    \n-
    3D Point
    \n-
    Non-linear factor base classes.
    \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
    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-
    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+
    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,350 +1,124 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ProjectionFactor.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, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, 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_\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+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-30namespace _\bg_\bt_\bs_\ba_\bm {\n+30static constexpr _\bK_\be_\by kAnchorKey = 99999999;\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+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+50 }\n+51 return poseGraph;\n+52}\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+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-_\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-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-_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bh\n-The most common 5DOF 3D->2D calibration.\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_\bs_\be_\b3_\b._\bh\n-3D Pose\n-_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n-3D Point\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+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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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- * _\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\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/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/ReferenceFrameFactor.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,153 +98,146 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    ReferenceFrameFactor.h
    \n+
    PoseRotationPrior.h
    \n
    \n
    \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+Go to the documentation of this file.
    1
    \n+
    10#pragma once
    \n
    11
    \n-
    12/*
    \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+\n+\n+
    14
    \n+
    15
    \n+
    16namespace gtsam {
    \n
    17
    \n-
    18#pragma once
    \n-
    19
    \n-\n+
    18template<class POSE>
    \n+
    \n+\n+
    20public:
    \n
    21
    \n-
    22namespace gtsam {
    \n-
    23
    \n-
    29template<class T, class P>
    \n-
    \n-\n-
    31 const T& trans, const P& global,
    \n-
    32 boost::optional<Matrix&> Dtrans,
    \n-
    33 boost::optional<Matrix&> Dglobal) {
    \n-
    34 return trans.transformFrom(global, Dtrans, Dglobal);
    \n-
    35}
    \n-
    \n-
    36
    \n-
    56template<class POINT, class TRANSFORM>
    \n-
    \n-
    57class ReferenceFrameFactor : public NoiseModelFactorN<POINT, TRANSFORM, POINT> {
    \n-
    58protected:
    \n-\n-
    61
    \n-
    62public:
    \n-\n-\n-
    65
    \n-
    66 typedef POINT Point;
    \n-
    67 typedef TRANSFORM Transform;
    \n-
    68
    \n-
    \n-
    72 ReferenceFrameFactor(Key globalKey, Key transKey, Key localKey, const noiseModel::Base::shared_ptr& model)
    \n-
    73 : Base(model,globalKey, transKey, localKey) {}
    \n-
    \n-
    74
    \n-
    \n-
    79 ReferenceFrameFactor(double mu, Key globalKey, Key transKey, Key localKey)
    \n-
    80 : Base(globalKey, transKey, localKey, Point().dim(), mu) {}
    \n-
    \n-
    81
    \n-
    \n-
    86 ReferenceFrameFactor(Key globalKey, Key transKey, Key localKey, double sigma = 1e-2)
    \n-
    87 : Base(noiseModel::Isotropic::Sigma(traits<POINT>::dimension, sigma),
    \n-
    88 globalKey, transKey, localKey) {}
    \n-
    \n-
    89
    \n-
    90 ~ReferenceFrameFactor() override{}
    \n-
    91
    \n-
    \n-
    92 NonlinearFactor::shared_ptr clone() const override {
    \n-
    93 return boost::static_pointer_cast<NonlinearFactor>(
    \n-
    94 NonlinearFactor::shared_ptr(new This(*this))); }
    \n-
    \n-
    95
    \n-
    \n-
    97 Vector evaluateError(const Point& global, const Transform& trans, const Point& local,
    \n-
    98 boost::optional<Matrix&> Dforeign = boost::none,
    \n-
    99 boost::optional<Matrix&> Dtrans = boost::none,
    \n-
    100 boost::optional<Matrix&> Dlocal = boost::none) const override {
    \n-
    101 Point newlocal = transform_point<Transform,Point>(trans, global, Dtrans, Dforeign);
    \n-
    102 if (Dlocal)
    \n-
    103 *Dlocal = -1* Matrix::Identity(traits<Point>::dimension, traits<Point>::dimension);
    \n-
    104 return traits<Point>::Local(local,newlocal);
    \n-
    105 }
    \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 // 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+
    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-
    \n-
    107 void print(const std::string& s="",
    \n-
    108 const gtsam::KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
    \n-
    109 std::cout << s << ": ReferenceFrameFactor("
    \n-
    110 << "Global: " << keyFormatter(this->key1()) << ","
    \n-
    111 << " Transform: " << keyFormatter(this->key2()) << ","
    \n-
    112 << " Local: " << keyFormatter(this->key3()) << ")\\n";
    \n-
    113 this->noiseModel_->print(" noise model");
    \n-
    114 }
    \n-
    \n-
    115
    \n-
    116 // access - convenience functions
    \n-
    117 Key global_key() const { return this->key1(); }
    \n-
    118 Key transform_key() const { return this->key2(); }
    \n-
    119 Key local_key() const { return this->key3(); }
    \n-
    120
    \n-
    121private:
    \n-\n-
    124 template<class ARCHIVE>
    \n-
    125 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
    \n-
    126 ar & boost::serialization::make_nvp("NonlinearFactor3",
    \n-
    127 boost::serialization::base_object<Base>(*this));
    \n-
    128 }
    \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+
    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-
    size_t dim() const override
    get the dimension of the factor (number of rows on linearization)
    Definition NonlinearFactor.h:218
    \n-
    const SharedNoiseModel & noiseModel() const
    access to the noise model
    Definition NonlinearFactor.h:223
    \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
    A convenient base class for creating your own NoiseModelFactor with n variables.
    Definition NonlinearFactor.h:400
    \n-
    A constraint between two landmarks in separate maps Templated on: Point : Type of landmark Transform ...
    Definition ReferenceFrameFactor.h:57
    \n-
    void print(const std::string &s="", const gtsam::KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
    Print.
    Definition ReferenceFrameFactor.h:107
    \n-
    ReferenceFrameFactor(Key globalKey, Key transKey, Key localKey, const noiseModel::Base::shared_ptr &model)
    General constructor with arbitrary noise model (constrained or otherwise)
    Definition ReferenceFrameFactor.h:72
    \n-
    Vector evaluateError(const Point &global, const Transform &trans, const Point &local, boost::optional< Matrix & > Dforeign=boost::none, boost::optional< Matrix & > Dtrans=boost::none, boost::optional< Matrix & > Dlocal=boost::none) const override
    Combined cost and derivative function using boost::optional.
    Definition ReferenceFrameFactor.h:97
    \n-
    NonlinearFactor::shared_ptr clone() const override
    Creates a shared_ptr clone of the factor - needs to be specialized to allow for subclasses.
    Definition ReferenceFrameFactor.h:92
    \n-
    ReferenceFrameFactor(Key globalKey, Key transKey, Key localKey, double sigma=1e-2)
    Simple soft constraint constructor for frame of reference, with equal weighting for each degree of fr...
    Definition ReferenceFrameFactor.h:86
    \n-
    ReferenceFrameFactor(double mu, Key globalKey, Key transKey, Key localKey)
    Construct a hard frame of reference reference constraint with equal mu values for each degree of free...
    Definition ReferenceFrameFactor.h:79
    \n-
    friend class boost::serialization::access
    Serialization function.
    Definition ReferenceFrameFactor.h:123
    \n-
    ReferenceFrameFactor()
    default constructor for serialization only
    Definition ReferenceFrameFactor.h:60
    \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,203 +1,186 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ReferenceFrameFactor.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+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+10#pragma once\n 11\n-12/*\n-13 * @file ReferenceFrameFactor.h\n-14 * @brief A constraint for combining graphs by common landmarks and a\n-transform node\n-15 * @author Alex Cunningham\n-16 */\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-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+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-22namespace _\bg_\bt_\bs_\ba_\bm {\n-23\n-29template\n-_\b3_\b0P _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\b__\bp_\bo_\bi_\bn_\bt(\n-31 const T& _\bt_\br_\ba_\bn_\bs, const P& global,\n-32 boost::optional Dtrans,\n-33 boost::optional Dglobal) {\n-34 return _\bt_\br_\ba_\bn_\bs.transformFrom(global, Dtrans, Dglobal);\n-35}\n-36\n-56template\n-_\b5_\b7class _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\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-58protected:\n-_\b6_\b0 _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br() {}\n-61\n-62public:\n-63 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bO_\bI_\bN_\bT_\b,_\b _\bT_\bR_\bA_\bN_\bS_\bF_\bO_\bR_\bM_\b,_\b _\bP_\bO_\bI_\bN_\bT_\b> Base;\n-64 typedef _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bP_\bO_\bI_\bN_\bT_\b,_\b _\bT_\bR_\bA_\bN_\bS_\bF_\bO_\bR_\bM_\b> This;\n-65\n-66 typedef POINT Point;\n-67 typedef TRANSFORM Transform;\n-68\n-_\b7_\b2 _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by globalKey, _\bK_\be_\by transKey, _\bK_\be_\by localKey, const\n-noiseModel::Base::shared_ptr& model)\n-73 : _\bB_\ba_\bs_\be(model,globalKey, transKey, localKey) {}\n-74\n-_\b7_\b9 _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br(double mu, _\bK_\be_\by globalKey, _\bK_\be_\by transKey, _\bK_\be_\by localKey)\n-80 : _\bB_\ba_\bs_\be(globalKey, transKey, localKey, Point()._\bd_\bi_\bm(), mu) {}\n-81\n-_\b8_\b6 _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by globalKey, _\bK_\be_\by transKey, _\bK_\be_\by localKey, double sigma\n-= 1e-2)\n-87 : _\bB_\ba_\bs_\be(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl::Isotropic::Sigma(_\bt_\br_\ba_\bi_\bt_\bs::dimension, sigma),\n-88 globalKey, transKey, localKey) {}\n-89\n-90 _\b~_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br() override{}\n-91\n-_\b9_\b2 NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-93 return boost::static_pointer_cast(\n-94 NonlinearFactor::shared_ptr(new This(*this))); }\n-95\n-_\b9_\b7 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const Point& global, const Transform& _\bt_\br_\ba_\bn_\bs, const\n-Point& local,\n-98 boost::optional Dforeign = boost::none,\n-99 boost::optional Dtrans = boost::none,\n-100 boost::optional Dlocal = boost::none) const override {\n-101 Point newlocal = transform_point(_\bt_\br_\ba_\bn_\bs, global, Dtrans,\n-Dforeign);\n-102 if (Dlocal)\n-103 *Dlocal = -1* Matrix::Identity(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bP_\bo_\bi_\bn_\bt_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bP_\bo_\bi_\bn_\bt_\b>_\b:_\b:\n-_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn);\n-104 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bP_\bo_\bi_\bn_\bt_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(local,newlocal);\n-105 }\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 // 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+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+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-_\b1_\b0_\b7 void _\bp_\br_\bi_\bn_\bt(const std::string& s=\"\",\n-108 const _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const\n-override {\n-109 std::cout << s << \": ReferenceFrameFactor(\"\n-110 << \"Global: \" << keyFormatter(this->key1()) << \",\"\n-111 << \" Transform: \" << keyFormatter(this->key2()) << \",\"\n-112 << \" Local: \" << keyFormatter(this->key3()) << \")\\n\";\n-113 this->noiseModel_->print(\" noise model\");\n-114 }\n-115\n-116 // access - convenience functions\n-117 _\bK_\be_\by global_key() const { return this->key1(); }\n-118 _\bK_\be_\by transform_key() const { return this->key2(); }\n-119 _\bK_\be_\by local_key() const { return this->key3(); }\n-120\n-121private:\n-_\b1_\b2_\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-124 template\n-125 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-126 ar & boost::serialization::make_nvp(\"NonlinearFactor3\",\n-127 boost::serialization::base_object(*this));\n-128 }\n-129};\n-130\n-132template\n-_\b1_\b3_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br > : public\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be > {};\n-134\n-135} // \\namespace gtsam\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_\bn_\bs_\bf_\bo_\br_\bm_\b__\bp_\bo_\bi_\bn_\bt\n-P transform_point(const T &trans, const P &global, boost::optional< Matrix & >\n-Dtrans, boost::optional< Matrix & > Dglobal)\n-Transform function that must be specialized specific domains.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ReferenceFrameFactor.h:30\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:_\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:_\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\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:_\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_\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:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br\n-A constraint between two landmarks in separate maps Templated on: Point : Type\n-of landmark Transform ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ReferenceFrameFactor.h:57\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const gtsam::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_\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 ReferenceFrameFactor.h:107\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br\n-ReferenceFrameFactor(Key globalKey, Key transKey, Key localKey, const\n-noiseModel::Base::shared_ptr &model)\n-General constructor with arbitrary noise model (constrained or otherwise)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ReferenceFrameFactor.h:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\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 Point &global, const Transform &trans, const Point\n-&local, boost::optional< Matrix & > Dforeign=boost::none, boost::optional<\n-Matrix & > Dtrans=boost::none, boost::optional< Matrix & > Dlocal=boost::none)\n-const override\n-Combined cost and derivative function using boost::optional.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ReferenceFrameFactor.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\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 ReferenceFrameFactor.h:92\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br\n-ReferenceFrameFactor(Key globalKey, Key transKey, Key localKey, double\n-sigma=1e-2)\n-Simple soft constraint constructor for frame of reference, with equal weighting\n-for each degree of fr...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ReferenceFrameFactor.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br\n-ReferenceFrameFactor(double mu, Key globalKey, Key transKey, Key localKey)\n-Construct a hard frame of reference reference constraint with equal mu values\n-for each degree of free...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ReferenceFrameFactor.h:79\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\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 ReferenceFrameFactor.h:123\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br\n-ReferenceFrameFactor()\n-default constructor for serialization only\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ReferenceFrameFactor.h:60\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- * R\bRe\bef\bfe\ber\bre\ben\bnc\bce\beF\bFr\bra\bam\bme\beF\bFa\bac\bct\bto\bor\br.\b.h\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/a01289.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01289.html", "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/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/InitializePose3.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@@ -95,55 +95,50 @@\n \n \n \n \n
    \n \n-
    InitializePose3.h File Reference
    \n+Namespaces
    \n+
    SmartProjectionPoseFactor.h File Reference
    \n \n
    \n \n-

    Initialize Pose3 in a factor graph. \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 Classes

    struct  gtsam::InitializePose3
    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-\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+

    Smart factor on poses, assuming camera calibration is fixed.

    \n
    Author
    Luca Carlone
    \n
    \n-Frank Dellaert
    \n-
    Date
    August, 2014
    \n+Chris Beall \n+
    \n+Zsolt Kira
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,32 +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\n-InitializePose3.h File Reference\n-Initialize Pose3 in 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+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:_\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bP_\bo_\bs_\be_\b3\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, 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+Smart factor on poses, assuming camera calibration is fixed.\n Author\n Luca Carlone\n- Frank Dellaert\n- Date\n- August, 2014\n+ Chris Beall\n+ Zsolt Kira\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_\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.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01292.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a01292 = [\n- [\"gtsam::InitializePose3\", \"a04856.html\", null]\n+ [\"gtsam::traits< SmartProjectionPoseFactor< CALIBRATION > >\", \"a04948.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/InitializePose3.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,97 +98,176 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    InitializePose3.h
    \n+
    SmartProjectionPoseFactor.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/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+
    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 boost::shared_ptr<CALIBRATION> K_;
    \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+
    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
    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+
    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-
    Definition InitializePose3.h:37
    \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,106 +1,236 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-InitializePose3.h\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 * 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+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+_\b5_\b4 boost::shared_ptr _\bK_\b_;\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+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:_\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:_\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:_\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:_\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 * _\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_\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/a01295.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01295.html", "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/SmartFactorBase.h File Reference\n \n \n \n \n \n \n \n@@ -95,57 +95,51 @@\n \n \n \n \n
    \n \n-
    FrobeniusFactor.h File Reference
    \n+Namespaces
    \n+
    SmartFactorBase.h File Reference
    \n \n
    \n \n-

    Various factors that minimize some Frobenius norm. \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-\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...
    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-\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-
    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+Chris Beall
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,44 +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-FrobeniusFactor.h File Reference\n-Various factors that minimize some Frobenius norm. _\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+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:_\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+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-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+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+ Chris Beall\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+ * _\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/a01295.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01295.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,6 +1,3 @@\n var a01295 = [\n- [\"gtsam::FrobeniusPrior< Rot >\", \"a04828.html\", \"a04828\"],\n- [\"gtsam::FrobeniusFactor< Rot >\", \"a04832.html\", \"a04832\"],\n- [\"gtsam::FrobeniusBetweenFactor< Rot >\", \"a04836.html\", \"a04836\"],\n- [\"ConvertNoiseModel\", \"a01295.html#aa43e7fd7c2b86873458a91ddafc506e4\", null]\n+ [\"gtsam::SmartFactorBase< CAMERA >\", \"a04928.html\", \"a04928\"]\n ];\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/FrobeniusFactor.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,181 +98,464 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    FrobeniusFactor.h
    \n+
    SmartFactorBase.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+
    22#pragma once
    \n+
    23
    \n+
    24#include <gtsam/slam/JacobianFactorQ.h>
    \n+
    25#include <gtsam/slam/JacobianFactorSVD.h>
    \n+\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+\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+
    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 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+
    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-
    \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-
    N*N matrix representation of SO(N).
    \n-
    3D rotation represented as a rotation matrix or quaternion
    \n-
    2D rotation
    \n-
    Non-linear factor base classes.
    \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+
    114 noiseModel_ = sharedIsotropic;
    \n+
    115 }
    \n+
    \n+
    116
    \n+
    \n+
    118 ~SmartFactorBase() override {
    \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
    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+
    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-
    bool equals(const This &other, double tol=1e-9) const
    check equality
    Definition Factor.cpp:42
    \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+
    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-
    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+
    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
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,149 +1,384 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-FrobeniusFactor.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-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+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-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+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+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 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+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-_\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-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-_\bS_\bO_\bn_\b._\bh\n-N*N matrix representation of SO(N).\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+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+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_\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:_\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:_\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 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@@ -152,75 +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:_\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_\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:_\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:_\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+_\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 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+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 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+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 * _\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+ * _\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/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/OrientedPlane3Factor.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,113 +98,94 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    OrientedPlane3Factor.h
    \n+
    KarcherMeanFactor.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+
    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 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-
    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+
    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+
    66 ~KarcherMeanFactor() override {}
    \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+
    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
    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+
    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
    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+
    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-
    • gtsam
    • slam
    • OrientedPlane3Factor.h
    • \n+
    • gtsam
    • slam
    • KarcherMeanFactor.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,139 +1,111 @@\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+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#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+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 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-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+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 _\b~_\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br() override {}\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+_\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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:_\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\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+ * 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/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/dataset.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@@ -96,151 +96,184 @@\n \n \n \n
    \n \n-
    dataset.h File Reference
    \n+
    lago.h File Reference
    \n
    \n
    \n \n-

    utility functions for loading datasets \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 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+\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+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-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\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+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-

    utility functions for loading datasets

    \n-
    Date
    Jan 22, 2010
    \n-
    Author
    Ni Kai
    \n+

    Initialize Pose2 in a factor graph using LAGO (Linear Approximation for Graph Optimization).

    \n+
    Author
    Luca Carlone
    \n
    \n-Luca Carlone
    \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-Varun Agrawal
    \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,164 +1,114 @@\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 | _\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+_\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 N\bNa\bam\bme\bes\bsp\bpa\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+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- 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+ 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-utility functions for loading datasets\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- Jan 22, 2010\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- Ni Kai\n Luca Carlone\n- Varun Agrawal\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- * _\bd_\ba_\bt_\ba_\bs_\be_\bt_\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/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/dataset.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,208 +98,75 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    dataset.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-
    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+
    35#pragma once
    \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-
    Concept check for values that can be used in unit tests.
    \n-
    Typedefs for easier changing of types.
    \n-
    Convenience functions for serializing data structures via boost.serialization.
    \n-
    Calibration used by Bundler.
    \n-
    Base class for all pinhole cameras.
    \n-
    3D Pose
    \n-
    2D Pose
    \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+\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+
    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-
    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+
    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,295 +1,77 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-dataset.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-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+35#pragma once\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_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\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-_\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-_\bP_\bo_\bs_\be_\b3_\b._\bh\n-3D Pose\n-_\bP_\bo_\bs_\be_\b2_\b._\bh\n-2D Pose\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+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+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-_\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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+_\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- * _\bd_\ba_\bt_\ba_\bs_\be_\bt_\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/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/KarcherMeanFactor-inl.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,111 +98,539 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    KarcherMeanFactor-inl.h
    \n+
    SmartProjectionFactor.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-
    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+
    20#pragma once
    \n+
    21
    \n+\n+\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+
    46
    \n+
    47public:
    \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+
    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+
    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+
    utility functions for loading datasets
    \n+
    Base class to create smart factors on poses or cameras.
    \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-
    const KeyVector & keys() const
    Access the factor's involved variable keys.
    Definition Factor.h:140
    \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-
    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+
    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,117 +1,743 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-KarcherMeanFactor-inl.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 -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, 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-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+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#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+46\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+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+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+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+_\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_\bB_\ba_\bs_\be_\b._\bh\n+Base class to create smart factors on poses or cameras.\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:_\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:_\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:_\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:_\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\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- * 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+ * _\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/a01310.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01310.html", "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/slam/PoseTranslationPrior.h File Reference\n \n \n \n \n \n \n \n@@ -96,47 +96,43 @@\n \n \n \n
    \n \n-
    StereoFactor.h File Reference
    \n+
    PoseTranslationPrior.h File Reference
    \n
    \n
    \n \n-

    A non-linear factor for stereo measurements. \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-\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::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-

    A non-linear factor for stereo measurements.

    \n-
    Author
    Alireza Fathi
    \n-
    \n-Chris Beall
    \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,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-StereoFactor.h File Reference\n-A non-linear factor for stereo measurements. _\bM_\bo_\br_\be_\b._\b._\b.\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:_\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:_\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-A non-linear factor for stereo measurements.\n+Implements a prior on the translation component of a pose.\n+ Date\n+ Jun 14, 2012\n Author\n- Alireza Fathi\n- Chris Beall\n+ Alex Cunningham\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+ * _\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/a01310.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01310.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a01310 = [\n- [\"gtsam::traits< GenericStereoFactor< T1, T2 > >\", \"a04964.html\", null]\n+ [\"gtsam::PoseTranslationPrior< POSE >\", \"a04892.html\", \"a04892\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01310_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01310_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/PoseTranslationPrior.h Source File\n \n \n \n \n \n \n \n@@ -98,218 +98,142 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    StereoFactor.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-
    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+\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-
    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+
    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+
    \n+
    51
    \n+
    52 ~PoseTranslationPrior() override {}
    \n+
    53
    \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-
    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 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
    \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+
    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-
    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
    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-
    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+
    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,226 +1,124 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-StereoFactor.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/_\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+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-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 _\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+_\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\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+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-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+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:_\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:_\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:_\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@@ -229,89 +127,56 @@\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_\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+_\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 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+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 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+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\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+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- * _\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\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/a01313_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01313_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/TriangulationFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,176 +98,245 @@\n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    SmartProjectionPoseFactor.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-
    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 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+
    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+
    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-\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+
    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+
    \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+
    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-
    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+
    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-
    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+
    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": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,125 +1,189 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\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+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-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-_\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+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+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 _\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+_\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+_\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:_\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@@ -128,109 +192,147 @@\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:_\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:_\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+_\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 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+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 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+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 * _\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+ * 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/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/JacobianFactorSVD.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/ReferenceFrameFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,99 +98,153 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    JacobianFactorSVD.h
    \n+
    ReferenceFrameFactor.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-
    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+
    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 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+
    21
    \n+
    22namespace gtsam {
    \n+
    23
    \n+
    29template<class T, class P>
    \n+
    \n+\n+
    31 const T& trans, const P& global,
    \n+
    32 boost::optional<Matrix&> Dtrans,
    \n+
    33 boost::optional<Matrix&> Dglobal) {
    \n+
    34 return trans.transformFrom(global, Dtrans, Dglobal);
    \n+
    35}
    \n+
    \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+
    56template<class POINT, class TRANSFORM>
    \n+
    \n+
    57class ReferenceFrameFactor : public NoiseModelFactorN<POINT, TRANSFORM, POINT> {
    \n+
    58protected:
    \n+\n+
    61
    \n+
    62public:
    \n+\n+\n+
    65
    \n+
    66 typedef POINT Point;
    \n+
    67 typedef TRANSFORM Transform;
    \n+
    68
    \n+
    \n+
    72 ReferenceFrameFactor(Key globalKey, Key transKey, Key localKey, const noiseModel::Base::shared_ptr& model)
    \n+
    73 : Base(model,globalKey, transKey, localKey) {}
    \n+
    \n+
    74
    \n+
    \n+
    79 ReferenceFrameFactor(double mu, Key globalKey, Key transKey, Key localKey)
    \n+
    80 : Base(globalKey, transKey, localKey, Point().dim(), mu) {}
    \n+
    \n+
    81
    \n+
    \n+
    86 ReferenceFrameFactor(Key globalKey, Key transKey, Key localKey, double sigma = 1e-2)
    \n+
    87 : Base(noiseModel::Isotropic::Sigma(traits<POINT>::dimension, sigma),
    \n+
    88 globalKey, transKey, localKey) {}
    \n+
    \n+
    89
    \n+
    90 ~ReferenceFrameFactor() override{}
    \n+
    91
    \n+
    \n+
    92 NonlinearFactor::shared_ptr clone() const override {
    \n+
    93 return boost::static_pointer_cast<NonlinearFactor>(
    \n+
    94 NonlinearFactor::shared_ptr(new This(*this))); }
    \n+
    \n+
    95
    \n+
    \n+
    97 Vector evaluateError(const Point& global, const Transform& trans, const Point& local,
    \n+
    98 boost::optional<Matrix&> Dforeign = boost::none,
    \n+
    99 boost::optional<Matrix&> Dtrans = boost::none,
    \n+
    100 boost::optional<Matrix&> Dlocal = boost::none) const override {
    \n+
    101 Point newlocal = transform_point<Transform,Point>(trans, global, Dtrans, Dforeign);
    \n+
    102 if (Dlocal)
    \n+
    103 *Dlocal = -1* Matrix::Identity(traits<Point>::dimension, traits<Point>::dimension);
    \n+
    104 return traits<Point>::Local(local,newlocal);
    \n+
    105 }
    \n+
    \n+
    106
    \n+
    \n+
    107 void print(const std::string& s="",
    \n+
    108 const gtsam::KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
    \n+
    109 std::cout << s << ": ReferenceFrameFactor("
    \n+
    110 << "Global: " << keyFormatter(this->key1()) << ","
    \n+
    111 << " Transform: " << keyFormatter(this->key2()) << ","
    \n+
    112 << " Local: " << keyFormatter(this->key3()) << ")\\n";
    \n+
    113 this->noiseModel_->print(" noise model");
    \n+
    114 }
    \n+
    \n+
    115
    \n+
    116 // access - convenience functions
    \n+
    117 Key global_key() const { return this->key1(); }
    \n+
    118 Key transform_key() const { return this->key2(); }
    \n+
    119 Key local_key() const { return this->key3(); }
    \n+
    120
    \n+
    121private:
    \n+\n+
    124 template<class ARCHIVE>
    \n+
    125 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
    \n+
    126 ar & boost::serialization::make_nvp("NonlinearFactor3",
    \n+
    127 boost::serialization::base_object<Base>(*this));
    \n+
    128 }
    \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
    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+
    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-
    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+
    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+
    size_t dim() const override
    get the dimension of the factor (number of rows on linearization)
    Definition NonlinearFactor.h:218
    \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 constraint between two landmarks in separate maps Templated on: Point : Type of landmark Transform ...
    Definition ReferenceFrameFactor.h:57
    \n+
    void print(const std::string &s="", const gtsam::KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
    Print.
    Definition ReferenceFrameFactor.h:107
    \n+
    ReferenceFrameFactor(Key globalKey, Key transKey, Key localKey, const noiseModel::Base::shared_ptr &model)
    General constructor with arbitrary noise model (constrained or otherwise)
    Definition ReferenceFrameFactor.h:72
    \n+
    Vector evaluateError(const Point &global, const Transform &trans, const Point &local, boost::optional< Matrix & > Dforeign=boost::none, boost::optional< Matrix & > Dtrans=boost::none, boost::optional< Matrix & > Dlocal=boost::none) const override
    Combined cost and derivative function using boost::optional.
    Definition ReferenceFrameFactor.h:97
    \n+
    NonlinearFactor::shared_ptr clone() const override
    Creates a shared_ptr clone of the factor - needs to be specialized to allow for subclasses.
    Definition ReferenceFrameFactor.h:92
    \n+
    ReferenceFrameFactor(Key globalKey, Key transKey, Key localKey, double sigma=1e-2)
    Simple soft constraint constructor for frame of reference, with equal weighting for each degree of fr...
    Definition ReferenceFrameFactor.h:86
    \n+
    ReferenceFrameFactor(double mu, Key globalKey, Key transKey, Key localKey)
    Construct a hard frame of reference reference constraint with equal mu values for each degree of free...
    Definition ReferenceFrameFactor.h:79
    \n+
    friend class boost::serialization::access
    Serialization function.
    Definition ReferenceFrameFactor.h:123
    \n+
    ReferenceFrameFactor()
    default constructor for serialization only
    Definition ReferenceFrameFactor.h:60
    \n
    \n
    \n \n
    \n
      \n-
    • gtsam
    • slam
    • JacobianFactorSVD.h
    • \n+
    • gtsam
    • slam
    • ReferenceFrameFactor.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,116 +1,203 @@\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+ReferenceFrameFactor.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-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+10 * -------------------------------------------------------------------------\n+- */\n+11\n+12/*\n+13 * @file ReferenceFrameFactor.h\n+14 * @brief A constraint for combining graphs by common landmarks and a\n+transform node\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\n+22namespace _\bg_\bt_\bs_\ba_\bm {\n+23\n+29template\n+_\b3_\b0P _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\b__\bp_\bo_\bi_\bn_\bt(\n+31 const T& _\bt_\br_\ba_\bn_\bs, const P& global,\n+32 boost::optional Dtrans,\n+33 boost::optional Dglobal) {\n+34 return _\bt_\br_\ba_\bn_\bs.transformFrom(global, Dtrans, Dglobal);\n+35}\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+56template\n+_\b5_\b7class _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\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+58protected:\n+_\b6_\b0 _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br() {}\n+61\n+62public:\n+63 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bO_\bI_\bN_\bT_\b,_\b _\bT_\bR_\bA_\bN_\bS_\bF_\bO_\bR_\bM_\b,_\b _\bP_\bO_\bI_\bN_\bT_\b> Base;\n+64 typedef _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bP_\bO_\bI_\bN_\bT_\b,_\b _\bT_\bR_\bA_\bN_\bS_\bF_\bO_\bR_\bM_\b> This;\n+65\n+66 typedef POINT Point;\n+67 typedef TRANSFORM Transform;\n+68\n+_\b7_\b2 _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by globalKey, _\bK_\be_\by transKey, _\bK_\be_\by localKey, const\n+noiseModel::Base::shared_ptr& model)\n+73 : _\bB_\ba_\bs_\be(model,globalKey, transKey, localKey) {}\n+74\n+_\b7_\b9 _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br(double mu, _\bK_\be_\by globalKey, _\bK_\be_\by transKey, _\bK_\be_\by localKey)\n+80 : _\bB_\ba_\bs_\be(globalKey, transKey, localKey, Point()._\bd_\bi_\bm(), mu) {}\n+81\n+_\b8_\b6 _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by globalKey, _\bK_\be_\by transKey, _\bK_\be_\by localKey, double sigma\n+= 1e-2)\n+87 : _\bB_\ba_\bs_\be(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl::Isotropic::Sigma(_\bt_\br_\ba_\bi_\bt_\bs::dimension, sigma),\n+88 globalKey, transKey, localKey) {}\n+89\n+90 _\b~_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br() override{}\n+91\n+_\b9_\b2 NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+93 return boost::static_pointer_cast(\n+94 NonlinearFactor::shared_ptr(new This(*this))); }\n+95\n+_\b9_\b7 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const Point& global, const Transform& _\bt_\br_\ba_\bn_\bs, const\n+Point& local,\n+98 boost::optional Dforeign = boost::none,\n+99 boost::optional Dtrans = boost::none,\n+100 boost::optional Dlocal = boost::none) const override {\n+101 Point newlocal = transform_point(_\bt_\br_\ba_\bn_\bs, global, Dtrans,\n+Dforeign);\n+102 if (Dlocal)\n+103 *Dlocal = -1* Matrix::Identity(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bP_\bo_\bi_\bn_\bt_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bP_\bo_\bi_\bn_\bt_\b>_\b:_\b:\n+_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn);\n+104 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bP_\bo_\bi_\bn_\bt_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(local,newlocal);\n+105 }\n+106\n+_\b1_\b0_\b7 void _\bp_\br_\bi_\bn_\bt(const std::string& s=\"\",\n+108 const _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const\n+override {\n+109 std::cout << s << \": ReferenceFrameFactor(\"\n+110 << \"Global: \" << keyFormatter(this->key1()) << \",\"\n+111 << \" Transform: \" << keyFormatter(this->key2()) << \",\"\n+112 << \" Local: \" << keyFormatter(this->key3()) << \")\\n\";\n+113 this->noiseModel_->print(\" noise model\");\n+114 }\n+115\n+116 // access - convenience functions\n+117 _\bK_\be_\by global_key() const { return this->key1(); }\n+118 _\bK_\be_\by transform_key() const { return this->key2(); }\n+119 _\bK_\be_\by local_key() const { return this->key3(); }\n+120\n+121private:\n+_\b1_\b2_\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+124 template\n+125 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+126 ar & boost::serialization::make_nvp(\"NonlinearFactor3\",\n+127 boost::serialization::base_object(*this));\n+128 }\n+129};\n+130\n+132template\n+_\b1_\b3_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br > : public\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be > {};\n+134\n+135} // \\namespace gtsam\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_\ba_\bn_\bs_\bf_\bo_\br_\bm_\b__\bp_\bo_\bi_\bn_\bt\n+P transform_point(const T &trans, const P &global, boost::optional< Matrix & >\n+Dtrans, boost::optional< Matrix & > Dglobal)\n+Transform function that must be specialized specific domains.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ReferenceFrameFactor.h:30\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:_\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_\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:_\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\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:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br\n+A constraint between two landmarks in separate maps Templated on: Point : Type\n+of landmark Transform ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ReferenceFrameFactor.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const gtsam::KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+Print.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ReferenceFrameFactor.h:107\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br\n+ReferenceFrameFactor(Key globalKey, Key transKey, Key localKey, const\n+noiseModel::Base::shared_ptr &model)\n+General constructor with arbitrary noise model (constrained or otherwise)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ReferenceFrameFactor.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\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 Point &global, const Transform &trans, const Point\n+&local, boost::optional< Matrix & > Dforeign=boost::none, boost::optional<\n+Matrix & > Dtrans=boost::none, boost::optional< Matrix & > Dlocal=boost::none)\n+const override\n+Combined cost and derivative function using boost::optional.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ReferenceFrameFactor.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\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 ReferenceFrameFactor.h:92\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br\n+ReferenceFrameFactor(Key globalKey, Key transKey, Key localKey, double\n+sigma=1e-2)\n+Simple soft constraint constructor for frame of reference, with equal weighting\n+for each degree of fr...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ReferenceFrameFactor.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br\n+ReferenceFrameFactor(double mu, Key globalKey, Key transKey, Key localKey)\n+Construct a hard frame of reference reference constraint with equal mu values\n+for each degree of free...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ReferenceFrameFactor.h:79\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\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 ReferenceFrameFactor.h:123\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bF_\br_\ba_\bm_\be_\bF_\ba_\bc_\bt_\bo_\br\n+ReferenceFrameFactor()\n+default constructor for serialization only\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ReferenceFrameFactor.h:60\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+ * R\bRe\bef\bfe\ber\bre\ben\bnc\bce\beF\bFr\bra\bam\bme\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/a01319_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01319_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/JacobianFactorQR.h Source File\n \n \n \n \n \n \n \n@@ -98,193 +98,95 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    BoundingConstraint.h
    \n+
    JacobianFactorQR.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+
    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-
    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-
    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-
    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-
    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-
    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+
    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+
    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+
    Linear Factor Graph where all factors are Gaussians.
    \n+
    JacobianFactor class with fixed sized blcoks.
    \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+
    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-
    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-
    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+
    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,232 +1,129 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\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+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-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+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-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-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-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_\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-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+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+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+_\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+_\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_\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:_\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_\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:_\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 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_\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 JacobianFactorQR.h:31\n+_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh\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+ * 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/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/TriangulationFactor.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,245 +98,119 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    TriangulationFactor.h
    \n+
    JacobianFactorQ.h
    \n
    \n
    \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 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-\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+\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-
    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-
    \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+\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-
    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+
    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-
    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+
    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-
    • gtsam
    • slam
    • TriangulationFactor.h
    • \n+
    • gtsam
    • slam
    • JacobianFactorQ.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,338 +1,141 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-TriangulationFactor.h\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+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/_\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+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-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-_\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+_\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:_\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_\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:_\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+_\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 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 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- * T\bTr\bri\bia\ban\bng\bgu\bul\bla\bat\bti\bio\bon\bnF\bFa\bac\bct\bto\bor\br.\b.h\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/a01325_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01325_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/EssentialMatrixFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,146 +98,407 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    PoseRotationPrior.h
    \n+
    EssentialMatrixFactor.h
    \n
    \n
    \n-Go to the documentation of this file.
    1
    \n-
    10#pragma once
    \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-\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+
    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+
    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-
    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 // access
    \n-
    61 const Rotation& measured() const { return measured_; }
    \n-
    62
    \n-
    63 // testable
    \n-
    64
    \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 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+
    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-
    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+\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-
    101
    \n-
    102} // \\namespace gtsam
    \n
    103
    \n-
    104
    \n-
    105
    \n-
    106
    \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
    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-
    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+
    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
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,115 +1,347 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\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-10#pragma once\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 * 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-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+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#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-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 // 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-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+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 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+_\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-104\n-105\n-106\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+_\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 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@@ -117,70 +349,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:_\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:_\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:_\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+_\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:_\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+_\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 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+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 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 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 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 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 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 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+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 EssentialMatrixFactor.h:349\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+ * 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/a01328.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01328.html", "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/FrobeniusFactor.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,38 +94,43 @@\n
    \n \n \n \n \n
    \n \n-
    InitializePose.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    FrobeniusFactor.cpp File Reference
    \n \n
    \n \n-

    common code between lago.* (2D) and InitializePose3.* (3D) \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 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-

    common code between lago.* (2D) and InitializePose3.* (3D)

    \n+

    Various factors that minimize some Frobenius norm.

    \n+
    Date
    March 2019
    \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,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-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+_\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+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-common code between lago.* (2D) and InitializePose3.* (3D)\n+Various factors that minimize some Frobenius norm.\n+ Date\n+ March 2019\n Author\n Frank Dellaert\n- Date\n- August, 2020\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+ * _\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/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/InitializePose3.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@@ -94,34 +94,64 @@\n \n \n \n \n \n
    \n \n-
    InitializePose3.cpp File Reference
    \n+Classes |\n+Namespaces |\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+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+

    Collect common parameters for SmartProjection and SmartStereoProjection factors.

    \n+
    Author
    Luca Carlone
    \n+
    \n+Zsolt Kira
    \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,21 +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\n-InitializePose3.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+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- 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._\bc_\bp_\bp\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/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/PoseTranslationPrior.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,142 +98,170 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    PoseTranslationPrior.h
    \n+
    RotateFactor.h
    \n
    \n
    \n-Go to the documentation of this file.
    1
    \n-
    10#pragma once
    \n-
    11
    \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-
    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+
    \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+
    \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-
    52 ~PoseTranslationPrior() override {}
    \n-
    53
    \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+
    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-
    \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+
    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 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+
    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 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+
    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-
    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+
    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-
    101
    \n-
    102} // \\namespace gtsam
    \n
    103
    \n-
    104
    \n-
    105
    \n-
    106
    \n-
    Non-linear factor base classes.
    \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+
    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-
    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+
    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,182 +1,226 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\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-10#pragma once\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+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#pragma once\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-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+_\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+_\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-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-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+_\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-_\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+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 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+_\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 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+_\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 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+_\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-104\n-105\n-106\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+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:_\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:_\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+_\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:_\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+_\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 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+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 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 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 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 RotateFactor.h:91\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+ * 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/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/EssentialMatrixConstraint.h 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@@ -95,42 +95,57 @@\n
    \n
    \n
    \n \n
    \n \n-
    EssentialMatrixConstraint.h File Reference
    \n+Namespaces |\n+Functions
    \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 \n

    \n Classes

    class  gtsam::EssentialMatrixConstraint
     Binary factor between two Pose3 variables induced by an EssentialMatrix measurement. More...
    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-
    Author
    Frank Dellaert
    \n-
    \n-Pablo Alcantarilla
    \n-
    Date
    Jan 5, 2014
    \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,27 +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-EssentialMatrixConstraint.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+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:_\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:_\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 Author\n Frank Dellaert\n- Pablo Alcantarilla\n- Date\n- Jan 5, 2014\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+ * _\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/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/EssentialMatrixConstraint.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@@ -98,127 +98,181 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    EssentialMatrixConstraint.h
    \n+
    FrobeniusFactor.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+
    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-\n-
    22#include <gtsam/geometry/EssentialMatrix.h>
    \n-
    23
    \n-
    24namespace gtsam {
    \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-
    \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+
    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+
    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+
    2D rotation
    \n+
    N*N matrix representation of SO(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+
    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-
    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+
    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-
    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+
    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,159 +1,226 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-EssentialMatrixConstraint.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-2014, 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/_\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+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-_\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+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+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+_\bR_\bo_\bt_\b2_\b._\bh\n+2D rotation\n+_\bS_\bO_\bn_\b._\bh\n+N*N matrix representation of SO(N).\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:_\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:_\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:_\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:_\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:_\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 EssentialMatrixConstraint.h:55\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 * _\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+ * _\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/a01340_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01340_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/BoundingConstraint.h Source File\n \n \n \n \n \n \n \n@@ -98,119 +98,193 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    JacobianFactorQ.h
    \n+
    BoundingConstraint.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-
    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+
    20#include <gtsam/base/Lie.h>
    \n+\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
    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+
    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// 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 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+
    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+
    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+
    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
    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+
    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+
    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,141 +1,232 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-JacobianFactorQ.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-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+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+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 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+_\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// 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 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+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_\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+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:_\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_\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:_\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 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- * J\bJa\bac\bco\bob\bbi\bia\ban\bnF\bFa\bac\bct\bto\bor\brQ\bQ.\b.h\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/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/SymbolicFactor-inst.h 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,76 +94,46 @@\n \n \n \n \n \n
    \n \n-
    SymbolicFactor-inst.h File Reference
    \n+Classes |\n+Namespaces
    \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-\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-
    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+
    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,41 +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-SymbolicFactor-inst.h 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-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+ Oct 29, 2009\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_\bF_\ba_\bc_\bt_\bo_\br_\b-_\bi_\bn_\bs_\bt_\b._\bh\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/a01343.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01343.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a01343 = [\n- [\"EliminateSymbolic\", \"a01343.html#ae394348e1a503834f713405afa9afad8\", null]\n+ [\"gtsam::traits< SymbolicBayesNet >\", \"a04976.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01343_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01343_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-inst.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@@ -98,99 +98,146 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    SymbolicFactor-inst.h
    \n+
    SymbolicBayesNet.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#include <gtsam/inference/Key.h>
    \n-
    24#include <gtsam/base/timing.h>
    \n+
    19#pragma once
    \n+
    20
    \n+\n+\n+\n+
    24#include <gtsam/base/types.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+
    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-
    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+\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+
    120} //\\ namespace gtsam
    \n+
    Typedefs for easier changing of types.
    \n+
    Factor Graph Base Class.
    \n+
    Bayes network.
    \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::uint64_t Key
    Integer nonlinear key type.
    Definition types.h:100
    \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+
    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-
    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+
    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,120 +1,186 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SymbolicFactor-inst.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 6 * Authors: Frank Dellaert, 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/_\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+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/_\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+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-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+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-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+_\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+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-_\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:_\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:_\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:_\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:_\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_\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_\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/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/SymbolicISAM.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,42 +94,34 @@\n \n \n \n \n \n
    \n \n-
    SymbolicISAM.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-Classes

    class  gtsam::SymbolicISAM
     
    \n \n \n \n \n

    \n Namespaces

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

    Detailed Description

    \n-
    Date
    July 29, 2013
    \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,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-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+_\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- July 29, 2013\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_\bI_\bS_\bA_\bM_\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/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/SymbolicJunctionTree.cpp 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@@ -95,33 +95,31 @@\n \n \n \n \n
    \n \n-
    SymbolicJunctionTree.cpp File Reference
    \n+
    SymbolicFactorGraph.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-
    \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,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-SymbolicJunctionTree.cpp File Reference\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 *\b**\b**\b**\b**\b* D\bDe\bet\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_\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/a01352.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01352.html", "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/SymbolicJunctionTree.h File Reference\n \n \n \n \n \n \n \n@@ -95,43 +95,50 @@\n \n \n \n \n
    \n \n-
    SymbolicConditional.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::SymbolicConditional
     SymbolicConditional is a conditional with keys but no probability data, produced by symbolic elimination of SymbolicFactor. More...
     
    struct  gtsam::traits< SymbolicConditional >
     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-
    Author
    Richard Roberts
    \n-
    Date
    Oct 17, 2010
    \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,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-SymbolicConditional.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_\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_\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_\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+ Mar 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._\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/a01352.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01352.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a01352 = [\n- [\"gtsam::SymbolicConditional\", \"a04996.html\", \"a04996\"],\n- [\"gtsam::traits< SymbolicConditional >\", \"a05000.html\", null]\n+ [\"SymbolicCluster\", \"a01352.html#ad78d0a5ba773ceac7ff253525032a15e\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01352_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01352_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/SymbolicJunctionTree.h Source File\n \n \n \n \n \n \n \n@@ -98,168 +98,68 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    SymbolicConditional.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
    6 * Authors: Frank Dellaert, 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+
    19#pragma once
    \n+
    20
    \n+\n+\n+\n
    24
    \n
    25namespace gtsam {
    \n
    26
    \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+
    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-
    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+
    65 SymbolicJunctionTree(const SymbolicEliminationTree& eliminationTree);
    \n+
    66 };
    \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-
    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-
    142
    \n-
    143} //\\ namespace gtsam
    \n-
    Concept check for values that can be used in unit tests.
    \n-
    Typedefs for easier changing of types.
    \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-
    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 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-
    boost::shared_ptr< This > shared_ptr
    Overriding the shared_ptr typedef.
    Definition SymbolicFactor.h:48
    \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,244 +1,79 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SymbolicConditional.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 6 * Authors: Frank Dellaert, 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+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_\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-_\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+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-_\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-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-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-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-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n-_\bt_\by_\bp_\be_\bs_\b._\bh\n-Typedefs for easier changing of types.\n-_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\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_\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_\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:_\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:_\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:_\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+_\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-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:_\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 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_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\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/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/SymbolicJunctionTree.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@@ -94,51 +94,39 @@\n \n \n \n \n \n
    \n \n-
    SymbolicJunctionTree.h File Reference
    \n+Functions
    \n+
    SymbolicFactor.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+\n+\n+\n

    \n-Typedefs

    \n-using gtsam::SymbolicCluster = SymbolicJunctionTree::Cluster
     typedef for wrapper:
     

    \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
    Mar 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,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 | _\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 | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\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-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+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- Mar 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_\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_\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.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01355.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a01355 = [\n- [\"SymbolicCluster\", \"a01355.html#ad78d0a5ba773ceac7ff253525032a15e\", null]\n+ [\"EliminateSymbolic\", \"a01355.html#a659f20993995258b1405737e375efd10\", null]\n ];\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/SymbolicBayesNet.cpp 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@@ -94,34 +94,44 @@\n \n \n \n \n \n
    \n \n-
    SymbolicBayesNet.cpp File Reference
    \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+Classes

    class  gtsam::SymbolicConditional
     SymbolicConditional is a conditional with keys but no probability data, produced by symbolic elimination of SymbolicFactor. More...
     
    struct  gtsam::traits< SymbolicConditional >
     traits More...
     
    \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-
    \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,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-SymbolicBayesNet.cpp 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_\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_\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 *\b**\b**\b**\b**\b* D\bDe\bet\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_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\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._\bh\n * Generated on Tue Jan 9 2024 05:51: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/SymbolicEliminationTree.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,45 +94,34 @@\n \n \n \n \n \n
    \n \n-
    SymbolicEliminationTree.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-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-
    Date
    Mar 29, 2013
    \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,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+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- Mar 29, 2013\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_\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_\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/a01364.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01364.html", "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.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,46 +94,34 @@\n \n \n \n \n \n
    \n \n-
    SymbolicBayesNet.h File Reference
    \n+
    SymbolicJunctionTree.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-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
    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,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-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+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\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._\bh\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/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/SymbolicFactorGraph.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,32 +94,45 @@\n \n \n \n \n \n
    \n \n-
    SymbolicFactorGraph.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-
    Date
    Oct 29, 2009
    \n-
    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,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-SymbolicFactorGraph.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- 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_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\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/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/SymbolicFactorGraph.h 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@@ -95,47 +95,50 @@\n \n \n \n \n
    \n \n-
    SymbolicFactorGraph.h File Reference
    \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-\n-\n+\n+\n \n

    \n Classes

    struct  gtsam::EliminationTraits< SymbolicFactorGraph >
    class  gtsam::SymbolicFactor
     SymbolicFactor represents a symbolic factor that specifies graph topology but is not associated with any numerical function. More...
     
    class  gtsam::SymbolicFactorGraph
     Symbolic Factor Graph. More...
     
    struct  gtsam::traits< SymbolicFactorGraph >
     traits 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
    Oct 29, 2009
    \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,31 +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-SymbolicFactorGraph.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+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-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+ 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- 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+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- 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_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\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/a01379.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01379.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,5 @@\n var a01379 = [\n- [\"gtsam::EliminationTraits< SymbolicFactorGraph >\", \"a05020.html\", \"a05020\"],\n- [\"gtsam::SymbolicFactorGraph\", \"a05024.html\", \"a05024\"],\n- [\"gtsam::traits< SymbolicFactorGraph >\", \"a05028.html\", null]\n+ [\"gtsam::SymbolicFactor\", \"a05012.html\", \"a05012\"],\n+ [\"gtsam::traits< SymbolicFactor >\", \"a05016.html\", null],\n+ [\"EliminateSymbolic\", \"a01379.html#a659f20993995258b1405737e375efd10\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01379_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01379_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/SymbolicFactorGraph.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@@ -98,204 +98,216 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    SymbolicFactorGraph.h
    \n+
    SymbolicFactor.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#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+
    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#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+
    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-
    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+
    \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+
    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-
    \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+
    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-
    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+
    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+
    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
    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-
    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+
    HybridValues represents a collection of DiscreteValues and VectorValues.
    Definition HybridValues.h:38
    \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-
    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+
    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,151 +1,168 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SymbolicFactorGraph.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-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+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#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+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-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 _\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+_\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+_\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-_\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+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+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-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-_\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+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+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+_\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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@@ -162,148 +179,97 @@\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:_\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:_\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+_\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 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+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-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+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_\bG_\br_\ba_\bp_\bh_\b._\bh\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/SymbolicFactor.cpp 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@@ -96,37 +96,74 @@\n \n \n \n
    \n \n-
    SymbolicFactor.cpp File Reference
    \n+
    SymbolicFactor-inst.h 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

    std::pair< boost::shared_ptr< SymbolicConditional >, boost::shared_ptr< SymbolicFactor > > gtsam::EliminateSymbolic (const SymbolicFactorGraph &factors, const Ordering &keys)
     Dense elimination function for symbolic factors.
     
    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
    Author
    Richard Roberts
    \n
    Date
    Oct 17, 2010
    \n-
    \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,27 +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 | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-SymbolicFactor.cpp File Reference\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 N\bNa\bam\bme\bes\bsp\bpa\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+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 Dense elimination function for symbolic\n- factors.\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 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._\bc_\bp_\bp\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/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- [\"EliminateSymbolic\", \"a01382.html#a659f20993995258b1405737e375efd10\", null]\n+ [\"EliminateSymbolic\", \"a01382.html#ae394348e1a503834f713405afa9afad8\", null]\n ];\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/SymbolicFactor.h 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@@ -95,50 +95,41 @@\n \n \n \n \n
    \n \n-
    SymbolicFactor.h File Reference
    \n+Namespaces
    \n+
    SymbolicISAM.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 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...
    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-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+
    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,36 +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-SymbolicFactor.h 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_\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+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- 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_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\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/a01385.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01385.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,3 @@\n var a01385 = [\n- [\"gtsam::SymbolicFactor\", \"a05012.html\", \"a05012\"],\n- [\"gtsam::traits< SymbolicFactor >\", \"a05016.html\", null],\n- [\"EliminateSymbolic\", \"a01385.html#a659f20993995258b1405737e375efd10\", null]\n+ [\"gtsam::SymbolicISAM\", \"a05032.html\", \"a05032\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01385_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01385_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/SymbolicISAM.h Source File\n \n \n \n \n \n \n \n@@ -98,216 +98,63 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    SymbolicFactor.h
    \n+
    SymbolicISAM.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/inference/Key.h>
    \n-
    22#include <gtsam/base/Testable.h>
    \n+
    19#pragma once
    \n+
    20
    \n+\n+\n
    23
    \n-
    24#include <boost/shared_ptr.hpp>
    \n-
    25#include <boost/make_shared.hpp>
    \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+
    24namespace gtsam {
    \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-
    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-
    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-
    \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-\n-
    The base class for all 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-
    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 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+
    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,275 +1,62 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SymbolicFactor.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 6 * Authors: Frank Dellaert, 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/_\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+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-24#include \n-25#include \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+24namespace _\bg_\bt_\bs_\ba_\bm {\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-_\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-_\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-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-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-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-_\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+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:_\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:_\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_\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 * _\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_\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/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/SymbolicISAM.cpp 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@@ -94,34 +94,48 @@\n \n \n \n \n \n
    \n \n-
    SymbolicISAM.cpp 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+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-
    Date
    July 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,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-SymbolicISAM.cpp File Reference\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 N\bNa\bam\bme\bes\bsp\bpa\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+ 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_\bI_\bS_\bA_\bM_\b._\bc_\bp_\bp\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/a01391_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01391_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
    19#pragma once
    \n
    20
    \n-\n-\n-\n-\n+\n+\n+\n+\n
    25
    \n
    26namespace gtsam {
    \n
    27
    \n
    28 // Forward declarations
    \n
    29 class SymbolicConditional;
    \n
    30
    \n
    31 /* ************************************************************************* */
    \n@@ -170,18 +170,18 @@\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+
    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
    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"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01400.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01400.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/global_includes.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/precompiled_header.h File Reference\n \n \n \n \n \n \n \n@@ -93,29 +93,30 @@\n
    No Matches
    \n \n \n \n \n \n
    \n-
    global_includes.h File Reference
    \n+
    precompiled_header.h File Reference
    \n
    \n
    \n \n-

    Included from all GTSAM files. \n+

    > \n More...

    \n \n

    Go to the source code of this file.

    \n

    Detailed Description

    \n-

    Included from all GTSAM files.

    \n-
    Author
    Richard Roberts
    \n+

    >

    \n+

    Include headers that will be included nearly everywhere

    Author
    Frank Dellaert
    \n+
    Date
    November 2018
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,16 +1,18 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\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+precompiled_header.h File Reference\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 *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Included from all GTSAM files.\n+>\n+Include headers that will be included nearly everywhere\n Author\n- Richard Roberts\n+ Frank Dellaert\n+ Date\n+ November 2018\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\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/a01400_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01400_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/global_includes.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/precompiled_header.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-
    global_includes.h
    \n+
    precompiled_header.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,22 +114,82 @@\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-
    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+
    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+
    26#include <gtsam/base/chartTesting.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+
    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+
    55#include <gtsam/base/VectorSpace.h>
    \n+\n+
    57
    \n+
    58
    \n+
    Group product of two Lie Groups.
    \n+
    Provides additional testing facilities for common data structures.
    \n+
    Convenience functions for serializing data structures via boost.serialization.
    \n+
    A faster implementation for DSF, which uses vector rather than btree.
    \n+
    Timing utilities.
    \n+
    A matrix with column blocks of pre-defined sizes.
    \n+
    Global debugging flags.
    \n+
    A thin wrapper around std::map that uses boost's fast_pool_allocator.
    \n+
    Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.
    \n+
    Base class and basic functions for Lie types.
    \n+
    Concept check for values that can be used in unit tests.
    \n+
    A thin wrapper around std::set that uses boost's fast_pool_allocator.
    \n+
    A thin wrapper around std::vector that uses a custom allocator.
    \n+
    Concept check class for variable types with Group properties.
    \n+
    Access to matrices via blocks of pre-defined sizes.
    \n+
    An easy way to control which allocator is used for Fast* collections.
    \n+
    Typedefs for easier changing of types.
    \n+
    Provides convenient mappings of common member functions for testing.
    \n+
    Base class and basic functions for Manifold types.
    \n+
    A thin wrapper around std::list that uses boost's fast_pool_allocator.
    \n+
    typedef and functions to augment Eigen's MatrixXd
    \n+
    The base class for any variable that can be optimized or used in a factor.
    \n+
    Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained Cholesky.
    \n+\n+
    typedef and functions to augment Eigen's VectorXd
    \n+
    Special class for optional Jacobian arguments.
    \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-global_includes.h\n+precompiled_header.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,17 +16,100 @@\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-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+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 <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n+26#include \n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\b._\bh>\n+28#include \n+29#include \n+30#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bd_\be_\bb_\bu_\bg_\b._\bh>\n+31#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bD_\bS_\bF_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+32#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+33#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh>\n+34#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh>\n+35#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b._\bh>\n+36#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+37#include \n+38#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bG_\br_\bo_\bu_\bp_\b._\bh>\n+39#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n+40#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bl_\bi_\be_\bP_\br_\bo_\bx_\bi_\be_\bs_\b._\bh>\n+41#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n+42#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n+43#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+44#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b._\bh>\n+45#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+46#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_\bT_\be_\bs_\bt_\bH_\be_\bl_\bp_\be_\br_\bs_\b._\bh>\n+47#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+48#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+49#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\bA_\bs_\bs_\be_\br_\bt_\bi_\bo_\bn_\bs_\b._\bh>\n+50#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+51#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh>\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+_\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+_\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+_\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_\bi_\bm_\bi_\bn_\bg_\b._\bh\n+Timing utilities.\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+_\bd_\be_\bb_\bu_\bg_\b._\bh\n+Global debugging flags.\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+_\bL_\bi_\be_\b._\bh\n+Base class and basic functions for Lie 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_\bs_\bt_\bS_\be_\bt_\b._\bh\n+A thin wrapper around std::set 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_\br_\bo_\bu_\bp_\b._\bh\n+Concept check class for variable types with Group properties.\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_\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_\by_\bp_\be_\bs_\b._\bh\n Typedefs for easier changing of types.\n+_\bl_\bi_\be_\bP_\br_\bo_\bx_\bi_\be_\bs_\b._\bh\n+Provides convenient mappings of common member functions for testing.\n+_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n+Base class and basic functions for Manifold types.\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+_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+typedef and functions to augment Eigen's MatrixXd\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+_\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\b._\bh\n+Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained\n+Cholesky.\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+_\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 * _\bg_\bt_\bs_\ba_\bm\n- * _\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\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  \n class  gtsam::VerticalBlockMatrix\n  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 \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/a02284.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02284.html", "unified_diff": "@@ -170,15 +170,15 @@\n

      \n Protected Attributes

      \n \n Map entries_\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/DSFMap.h
      • \n+
      • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/DSFMap.h
      • \n
      \n
    \n \n \n
    \n
      \n
    • gtsam
    • DSFMap
    • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02288.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02288.html", "unified_diff": "@@ -113,15 +113,15 @@\n std::map< KEY, Entry >::iterator parent_\n  \n \n size_t rank_\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/DSFMap.h
      • \n+
      • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/DSFMap.h
      • \n
      \n
    \n \n \n
    \n
      \n
    • gtsam
    • DSFMap
    • Entry
    • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02292.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02292.html", "unified_diff": "@@ -123,15 +123,15 @@\n size_t i () const\n  \n \n size_t j () 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/base/DSFMap.h
      • \n+
      • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/DSFMap.h
      • \n
      \n
    \n \n \n
    \n
      \n
    • gtsam
    • IndexPair
    • \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": "@@ -268,16 +268,16 @@\n \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.h
    • \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": "@@ -258,16 +258,16 @@\n \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.h
    • \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": "@@ -364,15 +364,15 @@\n \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.h
    • \n
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Chebyshev2.cpp
    • \n
    \n \n \n \n
    \n
      \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/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 3139 372e 6874 6d6c 223e f=\"a00197.html\">\n+0001f3d0: 663d 2261 3030 3235 372e 6874 6d6c 223e f=\"a00257.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,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
    • DiscreteJunctionTree
    • \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": "@@ -572,16 +572,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 \n \n \n
    \n
      \n
    • gtsam
    • Cal3_S2Stereo
    • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02960.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02960.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_S2Stereo.h
      • \n+
      • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3_S2Stereo.h
      • \n
      \n
    \n \n \n
    \n
      \n
    • gtsam
    • traits< Cal3_S2Stereo >
    • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02964.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02964.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_S2Stereo.h
      • \n+
      • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3_S2Stereo.h
      • \n
      \n
    \n \n \n
    \n
      \n
    • gtsam
    • traits< const 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,15 +397,15 @@\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.h
    • \n
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot2.cpp
    • \n
    \n \n \n \n
    \n
      \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,15 +381,15 @@\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.h
    • \n
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity2.cpp
    • \n
    \n \n \n \n
    \n
      \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/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/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
      \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": "@@ -223,15 +223,15 @@\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
    \n \n \n
    \n
      \n
    • gtsam
    • StereoPoint2
    • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03364.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03364.html", "unified_diff": "@@ -109,15 +109,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/triangulation.h
      • \n+
      • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/triangulation.h
      • \n
      \n
    \n \n \n
    \n
      \n
    • gtsam
    • TriangulationUnderconstrainedException
    • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03368.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03368.html", "unified_diff": "@@ -109,15 +109,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/triangulation.h
      • \n+
      • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/triangulation.h
      • \n
      \n
    \n \n \n
    \n
      \n
    • gtsam
    • TriangulationCheiralityException
    • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03372.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03372.html", "unified_diff": "@@ -226,15 +226,15 @@\n \n

      threshold to decide whether triangulation is result.degenerate

      \n

      (the rank is the number of singular values of the triangulation matrix which are larger than rankTolerance)

      \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/triangulation.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/triangulation.h
    • \n
    \n \n \n \n
    \n
      \n
    • gtsam
    • TriangulationParameters
    • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03376.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03376.html", "unified_diff": "@@ -185,15 +185,15 @@\n  Serialization function.
      \n  \n \n std::ostream & operator<< (std::ostream &os, const TriangulationResult &result)\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/triangulation.h
      • \n+
      • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/triangulation.h
      • \n
      \n
    \n \n \n
    \n
      \n
    • gtsam
    • TriangulationResult
    • \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": "@@ -206,15 +206,15 @@\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.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,15 +539,15 @@\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.h
    • \n
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Factor.cpp
    • \n
    \n \n \n \n
    \n
      \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/a03644.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03644.html", "unified_diff": "@@ -149,15 +149,15 @@\n \n \n \n \n

      \n Classes

      class  SymbolicFactors
       
      \n
      The documentation for this struct was generated from the following file:\n
    \n \n \n
    \n
    \n \n \n
    \n
      \n
    • gtsam
    • ConstructorTraversalData
    • SymbolicFactors
    • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03652.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03652.html", "unified_diff": "@@ -281,16 +281,16 @@\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
    • gtsam
    • JunctionTree
    • \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": "@@ -357,17 +357,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
    • VariableIndex
    • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03704.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03704.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const VariableIndex &m, const std::string &str="")\n  \n \n static bool Equals (const VariableIndex &m1, const VariableIndex &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/VariableIndex.h
      • \n+
      • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/VariableIndex.h
      • \n
      \n
    \n \n \n
    \n
      \n
    • gtsam
    • traits< 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/a03800.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03800.html", "unified_diff": "@@ -419,15 +419,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/linear/GaussianISAM.h
      • \n+
      • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianISAM.h
      • \n
      • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianISAM.cpp
      • \n
      \n
    \n \n \n
    \n
      \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03804.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03804.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const GaussianISAM &m, const std::string &str="")\n  \n \n static bool Equals (const GaussianISAM &m1, const GaussianISAM &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/GaussianISAM.h
      • \n+
      • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianISAM.h
      • \n
      \n
    \n \n \n
    \n
      \n
    • gtsam
    • traits< GaussianISAM >
    • \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,16 +208,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
    • AttitudeFactor
    • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04084.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04084.html", "unified_diff": "@@ -629,16 +629,16 @@\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
    • gtsam
    • Rot3AttitudeFactor
    • \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
    • gtsam
    • Pose3AttitudeFactor
    • \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": "@@ -613,15 +613,15 @@\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.cpp
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/GPSFactor.cpp
    • \n
    \n \n \n \n
    \n
      \n
    • gtsam
    • GPSFactor
    • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04136.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04136.html", "unified_diff": "@@ -552,15 +552,15 @@\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.cpp
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/GPSFactor.cpp
    • \n
    \n \n \n \n
    \n
      \n
    • gtsam
    • GPSFactor2
    • \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,15 +213,15 @@\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.h
    • \n
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2-impl.cpp
    • \n
    \n \n \n \n
    \n
      \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,15 +646,15 @@\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"}, {"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,15 +635,15 @@\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"}, {"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,16 +259,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
    • NonlinearISAM
    • \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,15 +244,15 @@\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.h
    • \n
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/MFAS.cpp
    • \n
    \n \n \n \n
    \n
      \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,16 +207,16 @@\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.cpp
      • \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
    • gtsam
    • SfmTrack
    • \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,15 +205,15 @@\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"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04732.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04732.html", "unified_diff": "@@ -832,15 +832,15 @@\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"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04736.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04736.html", "unified_diff": "@@ -317,15 +317,15 @@\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"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04740.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04740.html", "unified_diff": "@@ -317,15 +317,15 @@\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"}, {"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": "@@ -464,16 +464,16 @@\n \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
    • gtsam
    • ReferenceFrameFactor
    • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04908.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04908.html", "unified_diff": "@@ -128,15 +128,15 @@\n static void Print (const ReferenceFrameFactor< T1, T2 > &m, const std::string &str="")\n  \n \n static bool Equals (const ReferenceFrameFactor< T1, T2 > &m1, const ReferenceFrameFactor< 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 \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
    • gtsam
    • traits< SmartProjectionPoseFactor< CALIBRATION > >
    • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04952.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04952.html", "unified_diff": "@@ -461,15 +461,15 @@\n

      \n Public Attributes

      \n \n EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef CAMERA Camera\n  \n \"-\"/ Public Attributes inherited from gtsam::SmartFactorBase< CAMERA >\n \n-GTSAM_MAKE_ALIGNED_OPERATOR_NEW typedef boost::shared_ptr< This > shared_ptr\n+GTSAM_MAKE_ALIGNED_OPERATOR_NEW typedef boost::shared_ptr< This > shared_ptr\n  shorthand for a smart pointer to a factor.
      \n  \n \n \n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04960.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04960.html", "unified_diff": "@@ -757,15 +757,15 @@\n \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/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 
      \n \n \n \n

      \n Public Types

      \n typedef CameraSet< CAMERA > Cameras
      Print (const GenericStereoFactor< T1, T2 > &m, const std::string &str="")
       
      \n static bool Equals (const GenericStereoFactor< T1, T2 > &m1, const GenericStereoFactor< T1, T2 > &m2, double tol=1e-8)
       
      \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/a04996.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04996.html", "unified_diff": "@@ -630,15 +630,15 @@\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"}, {"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-
    The most common 5DOF 3D->2D calibration.
    \n-
    Base class for all pinhole cameras.
    \n-
    3D Pose
    \n-
    3D Point
    \n-
    2D Pose
    \n-
    2D Point
    \n-
    Factor Graph Values.
    \n-
    sampling from a NoiseModel
    \n-
    A non-templated config holding any types of Manifold-group elements.
    \n-
    Factor Graph consisting of non-linear factors.
    \n-
    Non-linear factor base classes.
    \n-
    Reprojection of a LANDMARK to a 2D point.
    \n+
    Base class for all pinhole cameras.
    \n+
    2D Pose
    \n+
    3D Point
    \n+
    3D Pose
    \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+
    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
    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-_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bh\n-The most common 5DOF 3D->2D calibration.\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_\bs_\be_\b3_\b._\bh\n-3D Pose\n-_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n-3D Point\n _\bP_\bo_\bs_\be_\b2_\b._\bh\n 2D Pose\n+_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n+3D Point\n+_\bP_\bo_\bs_\be_\b3_\b._\bh\n+3D 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_\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-_\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_\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-
    The most common 5DOF 3D->2D calibration.
    \n-
    Calibration used by Bundler.
    \n-
    Base class for all pinhole cameras.
    \n-
    2D Pose
    \n-
    4 dimensional manifold of 3D lines
    \n+
    P rotate(const T &r, const P &pt)
    rotation functions
    Definition lieProxies.h:47
    \n+
    Calibration used by Bundler.
    \n+
    Base class for all pinhole cameras.
    \n+
    2D Pose
    \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": "@@ -199,22 +199,22 @@\n 196}\n 197\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-_\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 _\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 _\bL_\bi_\bn_\be_\b3_\b._\bh\n 4 dimensional manifold of 3D lines\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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"}]}, {"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-
    Concept check for values that can be used in unit tests.
    \n-
    #define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)
    This marks a GTSAM object to require alignment.
    Definition types.h:317
    \n-
    Non-linear factor base classes.
    \n+
    Concept check for values that can be used in unit tests.
    \n+
    #define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)
    This marks a GTSAM object to require alignment.
    Definition types.h:317
    \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\", \"a01358.html\", null],\n- [\"SymbolicBayesNet.h\", \"a01364.html\", \"a01364\"],\n+ [\"SymbolicBayesNet.cpp\", \"a01376.html\", null],\n+ [\"SymbolicBayesNet.h\", \"a01343.html\", \"a01343\"],\n [\"SymbolicBayesTree.h\", \"a01391.html\", \"a01391\"],\n [\"SymbolicConditional.cpp\", \"a01373.html\", null],\n- [\"SymbolicConditional.h\", \"a01352.html\", \"a01352\"],\n- [\"SymbolicEliminationTree.cpp\", \"a01367.html\", null],\n- [\"SymbolicEliminationTree.h\", \"a01361.html\", \"a01361\"],\n- [\"SymbolicFactor-inst.h\", \"a01343.html\", \"a01343\"],\n- [\"SymbolicFactor.cpp\", \"a01382.html\", \"a01382\"],\n- [\"SymbolicFactor.h\", \"a01385.html\", \"a01385\"],\n- [\"SymbolicFactorGraph.cpp\", \"a01370.html\", null],\n- [\"SymbolicFactorGraph.h\", \"a01379.html\", \"a01379\"],\n- [\"SymbolicISAM.cpp\", \"a01388.html\", null],\n- [\"SymbolicISAM.h\", \"a01346.html\", \"a01346\"],\n- [\"SymbolicJunctionTree.cpp\", \"a01349.html\", null],\n- [\"SymbolicJunctionTree.h\", \"a01355.html\", \"a01355\"]\n+ [\"SymbolicConditional.h\", \"a01358.html\", \"a01358\"],\n+ [\"SymbolicEliminationTree.cpp\", \"a01346.html\", null],\n+ [\"SymbolicEliminationTree.h\", \"a01370.html\", \"a01370\"],\n+ [\"SymbolicFactor-inst.h\", \"a01382.html\", \"a01382\"],\n+ [\"SymbolicFactor.cpp\", \"a01355.html\", \"a01355\"],\n+ [\"SymbolicFactor.h\", \"a01379.html\", \"a01379\"],\n+ [\"SymbolicFactorGraph.cpp\", \"a01349.html\", null],\n+ [\"SymbolicFactorGraph.h\", \"a01388.html\", \"a01388\"],\n+ [\"SymbolicISAM.cpp\", \"a01361.html\", null],\n+ [\"SymbolicISAM.h\", \"a01385.html\", \"a01385\"],\n+ [\"SymbolicJunctionTree.cpp\", \"a01364.html\", null],\n+ [\"SymbolicJunctionTree.h\", \"a01352.html\", \"a01352\"]\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 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.
       
       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.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-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
       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\", \"a00671_source.html\", null],\n- [\"BayesNet.h\", \"a00644.html\", null],\n- [\"BayesTree-inst.h\", \"a00701.html\", null],\n- [\"BayesTree.cpp\", \"a00698.html\", null],\n- [\"BayesTree.h\", \"a00575.html\", \"a00575\"],\n+ [\"BayesNet-inst.h\", \"a00656_source.html\", null],\n+ [\"BayesNet.h\", \"a00683.html\", null],\n+ [\"BayesTree-inst.h\", \"a00671.html\", null],\n+ [\"BayesTree.cpp\", \"a00626.html\", null],\n+ [\"BayesTree.h\", \"a00587.html\", \"a00587\"],\n [\"BayesTreeCliqueBase-inst.h\", \"a00623.html\", null],\n- [\"BayesTreeCliqueBase.h\", \"a00680.html\", \"a00680\"],\n- [\"ClusterTree-inst.h\", \"a00695.html\", \"a00695\"],\n- [\"ClusterTree.h\", \"a00635.html\", \"a00635\"],\n- [\"Conditional-inst.h\", \"a00578_source.html\", null],\n- [\"Conditional.h\", \"a00587.html\", \"a00587\"],\n- [\"DotWriter.cpp\", \"a00692.html\", null],\n+ [\"BayesTreeCliqueBase.h\", \"a00674.html\", \"a00674\"],\n+ [\"ClusterTree-inst.h\", \"a00701.html\", \"a00701\"],\n+ [\"ClusterTree.h\", \"a00572.html\", \"a00572\"],\n+ [\"Conditional-inst.h\", \"a00650_source.html\", null],\n+ [\"Conditional.h\", \"a00665.html\", \"a00665\"],\n+ [\"DotWriter.cpp\", \"a00644.html\", null],\n [\"DotWriter.h\", \"a00596.html\", null],\n- [\"EliminateableFactorGraph-inst.h\", \"a00605_source.html\", null],\n- [\"EliminateableFactorGraph.h\", \"a00602.html\", \"a00602\"],\n- [\"EliminationTree-inst.h\", \"a00659.html\", null],\n- [\"EliminationTree.h\", \"a00653.html\", \"a00653\"],\n+ [\"EliminateableFactorGraph-inst.h\", \"a00632_source.html\", null],\n+ [\"EliminateableFactorGraph.h\", \"a00647.html\", \"a00647\"],\n+ [\"EliminationTree-inst.h\", \"a00605.html\", null],\n+ [\"EliminationTree.h\", \"a00608.html\", \"a00608\"],\n [\"Factor.cpp\", \"a00638.html\", null],\n- [\"Factor.h\", \"a00641.html\", \"a00641\"],\n- [\"FactorGraph-inst.h\", \"a00593.html\", null],\n- [\"FactorGraph.h\", \"a00611.html\", \"a00611\"],\n- [\"graph-inl.h\", \"a00608_source.html\", null],\n- [\"graph.h\", \"a00572.html\", \"a00572\"],\n- [\"inference-inst.h\", \"a00626.html\", \"a00626\"],\n- [\"inferenceExceptions.h\", \"a00674.html\", \"a00674\"],\n- [\"ISAM-inst.h\", \"a00647.html\", null],\n- [\"ISAM.h\", \"a00662.html\", \"a00662\"],\n- [\"JunctionTree-inst.h\", \"a00620.html\", \"a00620\"],\n- [\"JunctionTree.h\", \"a00632.html\", null],\n- [\"Key.h\", \"a00581.html\", \"a00581\"],\n- [\"LabeledSymbol.h\", \"a00665.html\", \"a00665\"],\n- [\"MetisIndex-inl.h\", \"a00614.html\", null],\n- [\"MetisIndex.h\", \"a00599.html\", \"a00599\"],\n- [\"Ordering.cpp\", \"a00584.html\", null],\n- [\"Ordering.h\", \"a00668.html\", \"a00668\"],\n- [\"Symbol.cpp\", \"a00677.html\", null],\n+ [\"Factor.h\", \"a00659.html\", \"a00659\"],\n+ [\"FactorGraph-inst.h\", \"a00635.html\", null],\n+ [\"FactorGraph.h\", \"a00641.html\", \"a00641\"],\n+ [\"graph-inl.h\", \"a00680_source.html\", null],\n+ [\"graph.h\", \"a00575.html\", \"a00575\"],\n+ [\"inference-inst.h\", \"a00593.html\", \"a00593\"],\n+ [\"inferenceExceptions.h\", \"a00653.html\", \"a00653\"],\n+ [\"ISAM-inst.h\", \"a00578.html\", null],\n+ [\"ISAM.h\", \"a00698.html\", \"a00698\"],\n+ [\"JunctionTree-inst.h\", \"a00584.html\", \"a00584\"],\n+ [\"JunctionTree.h\", \"a00614.html\", null],\n+ [\"Key.h\", \"a00662.html\", \"a00662\"],\n+ [\"LabeledSymbol.h\", \"a00677.html\", \"a00677\"],\n+ [\"MetisIndex-inl.h\", \"a00668.html\", null],\n+ [\"MetisIndex.h\", \"a00689.html\", \"a00689\"],\n+ [\"Ordering.cpp\", \"a00617.html\", null],\n+ [\"Ordering.h\", \"a00629.html\", \"a00629\"],\n+ [\"Symbol.cpp\", \"a00686.html\", null],\n [\"Symbol.h\", \"a08137.html\", \"a08137\"],\n- [\"VariableIndex-inl.h\", \"a00656.html\", null],\n- [\"VariableIndex.cpp\", \"a00650.html\", null],\n- [\"VariableIndex.h\", \"a00683.html\", \"a00683\"],\n- [\"VariableSlots.cpp\", \"a00629.html\", null],\n- [\"VariableSlots.h\", \"a00590.html\", \"a00590\"]\n+ [\"VariableIndex-inl.h\", \"a00599.html\", null],\n+ [\"VariableIndex.cpp\", \"a00611.html\", null],\n+ [\"VariableIndex.h\", \"a00590.html\", \"a00590\"],\n+ [\"VariableSlots.cpp\", \"a00620.html\", null],\n+ [\"VariableSlots.h\", \"a00695.html\", \"a00695\"]\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

      \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.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\", \"a00257.html\", null],\n- [\"AlgebraicDecisionTree.h\", \"a00227.html\", \"a00227\"],\n- [\"Assignment.h\", \"a00272.html\", null],\n- [\"DecisionTree-inl.h\", \"a00200_source.html\", null],\n- [\"DecisionTree.h\", \"a00221.html\", \"a00221\"],\n- [\"DecisionTreeFactor.cpp\", \"a00197.html\", null],\n- [\"DecisionTreeFactor.h\", \"a00251.html\", \"a00251\"],\n- [\"DiscreteBayesNet.cpp\", \"a00191.html\", null],\n- [\"DiscreteBayesNet.h\", \"a00233.html\", \"a00233\"],\n- [\"DiscreteBayesTree.cpp\", \"a00245.html\", null],\n- [\"DiscreteBayesTree.h\", \"a00212.html\", \"a00212\"],\n- [\"DiscreteConditional.cpp\", \"a00242.html\", null],\n- [\"DiscreteConditional.h\", \"a00215.html\", \"a00215\"],\n- [\"DiscreteDistribution.cpp\", \"a00179.html\", null],\n- [\"DiscreteDistribution.h\", \"a00185.html\", \"a00185\"],\n- [\"DiscreteEliminationTree.cpp\", \"a00218.html\", null],\n- [\"DiscreteEliminationTree.h\", \"a00260.html\", null],\n- [\"DiscreteFactor.cpp\", \"a00209.html\", \"a00209\"],\n- [\"DiscreteFactor.h\", \"a00263.html\", \"a00263\"],\n- [\"DiscreteFactorGraph.cpp\", \"a00182.html\", \"a00182\"],\n- [\"DiscreteFactorGraph.h\", \"a00230.html\", \"a00230\"],\n- [\"DiscreteJunctionTree.cpp\", \"a00224.html\", null],\n- [\"DiscreteJunctionTree.h\", \"a00203.html\", \"a00203\"],\n- [\"DiscreteKey.h\", \"a00239.html\", \"a00239\"],\n- [\"DiscreteLookupDAG.cpp\", \"a00188.html\", null],\n- [\"DiscreteLookupDAG.h\", \"a00248.html\", \"a00248\"],\n- [\"DiscreteMarginals.h\", \"a00269.html\", null],\n- [\"DiscreteValues.cpp\", \"a00206.html\", \"a00206\"],\n- [\"DiscreteValues.h\", \"a00194.html\", \"a00194\"],\n- [\"Signature.cpp\", \"a00254.html\", \"a00254\"],\n- [\"Signature.h\", \"a00236.html\", \"a00236\"]\n+ [\"AlgebraicDecisionTree.cpp\", \"a00206.html\", null],\n+ [\"AlgebraicDecisionTree.h\", \"a00242.html\", \"a00242\"],\n+ [\"Assignment.h\", \"a00221.html\", null],\n+ [\"DecisionTree-inl.h\", \"a00260_source.html\", null],\n+ [\"DecisionTree.h\", \"a00272.html\", \"a00272\"],\n+ [\"DecisionTreeFactor.cpp\", \"a00257.html\", null],\n+ [\"DecisionTreeFactor.h\", \"a00212.html\", \"a00212\"],\n+ [\"DiscreteBayesNet.cpp\", \"a00263.html\", null],\n+ [\"DiscreteBayesNet.h\", \"a00182.html\", \"a00182\"],\n+ [\"DiscreteBayesTree.cpp\", \"a00269.html\", null],\n+ [\"DiscreteBayesTree.h\", \"a00230.html\", \"a00230\"],\n+ [\"DiscreteConditional.cpp\", \"a00239.html\", null],\n+ [\"DiscreteConditional.h\", \"a00236.html\", \"a00236\"],\n+ [\"DiscreteDistribution.cpp\", \"a00203.html\", null],\n+ [\"DiscreteDistribution.h\", \"a00194.html\", \"a00194\"],\n+ [\"DiscreteEliminationTree.cpp\", \"a00227.html\", null],\n+ [\"DiscreteEliminationTree.h\", \"a00245.html\", null],\n+ [\"DiscreteFactor.cpp\", \"a00188.html\", \"a00188\"],\n+ [\"DiscreteFactor.h\", \"a00251.html\", \"a00251\"],\n+ [\"DiscreteFactorGraph.cpp\", \"a00191.html\", \"a00191\"],\n+ [\"DiscreteFactorGraph.h\", \"a00200.html\", \"a00200\"],\n+ [\"DiscreteJunctionTree.cpp\", \"a00197.html\", null],\n+ [\"DiscreteJunctionTree.h\", \"a00254.html\", \"a00254\"],\n+ [\"DiscreteKey.h\", \"a00185.html\", \"a00185\"],\n+ [\"DiscreteLookupDAG.cpp\", \"a00248.html\", null],\n+ [\"DiscreteLookupDAG.h\", \"a00266.html\", \"a00266\"],\n+ [\"DiscreteMarginals.h\", \"a00218.html\", null],\n+ [\"DiscreteValues.cpp\", \"a00233.html\", \"a00233\"],\n+ [\"DiscreteValues.h\", \"a00215.html\", \"a00215\"],\n+ [\"Signature.cpp\", \"a00209.html\", \"a00209\"],\n+ [\"Signature.h\", \"a00179.html\", \"a00179\"]\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 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
       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.
       
       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\", \"a01256.html\", null],\n+ [\"AntiFactor.h\", \"a01262.html\", null],\n [\"BearingFactor.h\", \"a08161_source.html\", null],\n [\"BearingRangeFactor.h\", \"a08167_source.html\", null],\n- [\"BetweenFactor.h\", \"a01274.html\", \"a01274\"],\n- [\"BoundingConstraint.h\", \"a01319.html\", \"a01319\"],\n- [\"dataset.cpp\", \"a01247.html\", \"a01247\"],\n- [\"dataset.h\", \"a01301.html\", \"a01301\"],\n- [\"EssentialMatrixConstraint.cpp\", \"a01259.html\", null],\n- [\"EssentialMatrixConstraint.h\", \"a01337.html\", null],\n- [\"EssentialMatrixFactor.h\", \"a01271_source.html\", null],\n+ [\"BetweenFactor.h\", \"a01241.html\", \"a01241\"],\n+ [\"BoundingConstraint.h\", \"a01340.html\", \"a01340\"],\n+ [\"dataset.cpp\", \"a01289.html\", \"a01289\"],\n+ [\"dataset.h\", \"a01247.html\", \"a01247\"],\n+ [\"EssentialMatrixConstraint.cpp\", \"a01265.html\", null],\n+ [\"EssentialMatrixConstraint.h\", \"a01256.html\", null],\n+ [\"EssentialMatrixFactor.h\", \"a01325_source.html\", null],\n [\"expressions.h\", \"a08149.html\", \"a08149\"],\n- [\"FrobeniusFactor.cpp\", \"a01235.html\", \"a01235\"],\n- [\"FrobeniusFactor.h\", \"a01295.html\", \"a01295\"],\n- [\"GeneralSFMFactor.h\", \"a01280.html\", \"a01280\"],\n- [\"InitializePose.h\", \"a01328.html\", null],\n- [\"InitializePose3.cpp\", \"a01331.html\", null],\n- [\"InitializePose3.h\", \"a01292.html\", \"a01292\"],\n- [\"JacobianFactorQ.h\", \"a01340_source.html\", null],\n- [\"JacobianFactorQR.h\", \"a01265_source.html\", null],\n- [\"JacobianFactorSVD.h\", \"a01316_source.html\", null],\n- [\"KarcherMeanFactor-inl.h\", \"a01307_source.html\", null],\n- [\"KarcherMeanFactor.h\", \"a01238_source.html\", null],\n- [\"lago.h\", \"a01289.html\", null],\n- [\"OrientedPlane3Factor.h\", \"a01298_source.html\", null],\n- [\"PoseRotationPrior.h\", \"a01325.html\", \"a01325\"],\n- [\"PoseTranslationPrior.h\", \"a01334.html\", \"a01334\"],\n+ [\"FrobeniusFactor.cpp\", \"a01328.html\", \"a01328\"],\n+ [\"FrobeniusFactor.h\", \"a01337.html\", \"a01337\"],\n+ [\"GeneralSFMFactor.h\", \"a01250.html\", \"a01250\"],\n+ [\"InitializePose.h\", \"a01283.html\", null],\n+ [\"InitializePose3.cpp\", \"a01304.html\", null],\n+ [\"InitializePose3.h\", \"a01274.html\", \"a01274\"],\n+ [\"JacobianFactorQ.h\", \"a01322_source.html\", null],\n+ [\"JacobianFactorQR.h\", \"a01319_source.html\", null],\n+ [\"JacobianFactorSVD.h\", \"a01244_source.html\", null],\n+ [\"KarcherMeanFactor-inl.h\", \"a01271_source.html\", null],\n+ [\"KarcherMeanFactor.h\", \"a01298_source.html\", null],\n+ [\"lago.h\", \"a01301.html\", null],\n+ [\"OrientedPlane3Factor.h\", \"a01268_source.html\", null],\n+ [\"PoseRotationPrior.h\", \"a01286.html\", \"a01286\"],\n+ [\"PoseTranslationPrior.h\", \"a01310.html\", \"a01310\"],\n [\"PriorFactor.h\", \"a08155.html\", null],\n- [\"ProjectionFactor.h\", \"a01283.html\", \"a01283\"],\n+ [\"ProjectionFactor.h\", \"a01280.html\", \"a01280\"],\n [\"RangeFactor.h\", \"a08173_source.html\", null],\n- [\"ReferenceFrameFactor.h\", \"a01286_source.html\", null],\n- [\"RegularImplicitSchurFactor.h\", \"a01241.html\", \"a01241\"],\n- [\"RotateFactor.h\", \"a01277_source.html\", null],\n- [\"SmartFactorBase.h\", \"a01268.html\", \"a01268\"],\n- [\"SmartFactorParams.h\", \"a01250.html\", \"a01250\"],\n- [\"SmartProjectionFactor.h\", \"a01262.html\", \"a01262\"],\n- [\"SmartProjectionPoseFactor.h\", \"a01313.html\", \"a01313\"],\n+ [\"ReferenceFrameFactor.h\", \"a01316_source.html\", null],\n+ [\"RegularImplicitSchurFactor.h\", \"a01277.html\", \"a01277\"],\n+ [\"RotateFactor.h\", \"a01334_source.html\", null],\n+ [\"SmartFactorBase.h\", \"a01295.html\", \"a01295\"],\n+ [\"SmartFactorParams.h\", \"a01331.html\", \"a01331\"],\n+ [\"SmartProjectionFactor.h\", \"a01307.html\", \"a01307\"],\n+ [\"SmartProjectionPoseFactor.h\", \"a01292.html\", \"a01292\"],\n [\"SmartProjectionRigFactor.h\", \"a01253.html\", \"a01253\"],\n- [\"StereoFactor.h\", \"a01310.html\", \"a01310\"],\n- [\"TriangulationFactor.h\", \"a01322_source.html\", null]\n+ [\"StereoFactor.h\", \"a01238.html\", \"a01238\"],\n+ [\"TriangulationFactor.h\", \"a01313_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\", \"a00551.html\", \"a00551\"],\n- [\"GaussianMixture.h\", \"a00482.html\", \"a00482\"],\n- [\"GaussianMixtureFactor.cpp\", \"a00533.html\", null],\n- [\"GaussianMixtureFactor.h\", \"a00563.html\", \"a00563\"],\n- [\"HybridBayesNet.cpp\", \"a00491.html\", \"a00491\"],\n- [\"HybridBayesNet.h\", \"a00524.html\", \"a00524\"],\n- [\"HybridBayesTree.cpp\", \"a00512.html\", null],\n- [\"HybridBayesTree.h\", \"a00494.html\", \"a00494\"],\n- [\"HybridConditional.cpp\", \"a00509.html\", null],\n- [\"HybridConditional.h\", \"a00560.html\", \"a00560\"],\n- [\"HybridEliminationTree.cpp\", \"a00515.html\", null],\n- [\"HybridEliminationTree.h\", \"a00542.html\", null],\n- [\"HybridFactor.cpp\", \"a00566.html\", null],\n- [\"HybridFactor.h\", \"a00557.html\", \"a00557\"],\n- [\"HybridFactorGraph.cpp\", \"a00521.html\", null],\n- [\"HybridFactorGraph.h\", \"a00518.html\", \"a00518\"],\n- [\"HybridGaussianFactorGraph.cpp\", \"a00485.html\", \"a00485\"],\n- [\"HybridGaussianFactorGraph.h\", \"a00548.html\", \"a00548\"],\n- [\"HybridGaussianISAM.h\", \"a00536.html\", \"a00536\"],\n- [\"HybridJunctionTree.cpp\", \"a00500.html\", null],\n- [\"HybridJunctionTree.h\", \"a00488.html\", null],\n- [\"HybridNonlinearFactorGraph.cpp\", \"a00569.html\", null],\n- [\"HybridNonlinearFactorGraph.h\", \"a00554.html\", \"a00554\"],\n- [\"HybridNonlinearISAM.cpp\", \"a00506.html\", null],\n- [\"HybridNonlinearISAM.h\", \"a00503.html\", \"a00503\"],\n- [\"HybridSmoother.cpp\", \"a00530.html\", null],\n- [\"HybridSmoother.h\", \"a00539.html\", \"a00539\"],\n- [\"HybridValues.h\", \"a00497.html\", \"a00497\"],\n- [\"MixtureFactor.h\", \"a00527.html\", \"a00527\"]\n+ [\"GaussianMixture.cpp\", \"a00494.html\", \"a00494\"],\n+ [\"GaussianMixture.h\", \"a00554.html\", \"a00554\"],\n+ [\"GaussianMixtureFactor.cpp\", \"a00518.html\", null],\n+ [\"GaussianMixtureFactor.h\", \"a00560.html\", \"a00560\"],\n+ [\"HybridBayesNet.cpp\", \"a00485.html\", \"a00485\"],\n+ [\"HybridBayesNet.h\", \"a00539.html\", \"a00539\"],\n+ [\"HybridBayesTree.cpp\", \"a00527.html\", null],\n+ [\"HybridBayesTree.h\", \"a00524.html\", \"a00524\"],\n+ [\"HybridConditional.cpp\", \"a00482.html\", null],\n+ [\"HybridConditional.h\", \"a00536.html\", \"a00536\"],\n+ [\"HybridEliminationTree.cpp\", \"a00488.html\", null],\n+ [\"HybridEliminationTree.h\", \"a00521.html\", null],\n+ [\"HybridFactor.cpp\", \"a00563.html\", null],\n+ [\"HybridFactor.h\", \"a00551.html\", \"a00551\"],\n+ [\"HybridFactorGraph.cpp\", \"a00569.html\", null],\n+ [\"HybridFactorGraph.h\", \"a00497.html\", \"a00497\"],\n+ [\"HybridGaussianFactorGraph.cpp\", \"a00542.html\", \"a00542\"],\n+ [\"HybridGaussianFactorGraph.h\", \"a00503.html\", \"a00503\"],\n+ [\"HybridGaussianISAM.h\", \"a00491.html\", \"a00491\"],\n+ [\"HybridJunctionTree.cpp\", \"a00509.html\", null],\n+ [\"HybridJunctionTree.h\", \"a00506.html\", null],\n+ [\"HybridNonlinearFactorGraph.cpp\", \"a00557.html\", null],\n+ [\"HybridNonlinearFactorGraph.h\", \"a00500.html\", \"a00500\"],\n+ [\"HybridNonlinearISAM.cpp\", \"a00533.html\", null],\n+ [\"HybridNonlinearISAM.h\", \"a00530.html\", \"a00530\"],\n+ [\"HybridSmoother.cpp\", \"a00548.html\", null],\n+ [\"HybridSmoother.h\", \"a00512.html\", \"a00512\"],\n+ [\"HybridValues.h\", \"a00515.html\", \"a00515\"],\n+ [\"MixtureFactor.h\", \"a00545.html\", \"a00545\"]\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 \n

      \n Files

       AHRSFactor.cpp
       AHRSFactor.cpp
       
       AHRSFactor.h
       AHRSFactor.h
       
       AttitudeFactor.cpp
       Implementation file for Attitude factor.
       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.cpp
       Implementation 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\", \"a00917.html\", null],\n- [\"AHRSFactor.h\", \"a00941.html\", \"a00941\"],\n- [\"AttitudeFactor.cpp\", \"a00914.html\", null],\n- [\"AttitudeFactor.h\", \"a00974.html\", \"a00974\"],\n- [\"BarometricFactor.cpp\", \"a00989.html\", null],\n- [\"BarometricFactor.h\", \"a00998.html\", null],\n- [\"CombinedImuFactor.cpp\", \"a00923.html\", null],\n- [\"CombinedImuFactor.h\", \"a00938.html\", \"a00938\"],\n- [\"ConstantVelocityFactor.h\", \"a00926.html\", \"a00926\"],\n+ [\"AHRSFactor.cpp\", \"a00935.html\", null],\n+ [\"AHRSFactor.h\", \"a00932.html\", \"a00932\"],\n+ [\"AttitudeFactor.cpp\", \"a00965.html\", null],\n+ [\"AttitudeFactor.h\", \"a00911.html\", \"a00911\"],\n+ [\"BarometricFactor.cpp\", \"a00971.html\", null],\n+ [\"BarometricFactor.h\", \"a00983.html\", null],\n+ [\"CombinedImuFactor.cpp\", \"a00950.html\", null],\n+ [\"CombinedImuFactor.h\", \"a00947.html\", \"a00947\"],\n+ [\"ConstantVelocityFactor.h\", \"a00998.html\", \"a00998\"],\n [\"expressions.h\", \"a08143.html\", null],\n- [\"GPSFactor.cpp\", \"a00971.html\", null],\n+ [\"GPSFactor.cpp\", \"a00977.html\", null],\n [\"GPSFactor.h\", \"a00995.html\", null],\n- [\"ImuBias.cpp\", \"a00956.html\", \"a00956\"],\n- [\"ImuBias.h\", \"a00944.html\", \"a00944\"],\n- [\"ImuFactor.cpp\", \"a00911.html\", null],\n- [\"ImuFactor.h\", \"a00986.html\", \"a00986\"],\n- [\"MagFactor.h\", \"a00980.html\", \"a00980\"],\n- [\"MagPoseFactor.h\", \"a00947_source.html\", null],\n- [\"ManifoldPreintegration.cpp\", \"a00935.html\", null],\n- [\"ManifoldPreintegration.h\", \"a00992.html\", \"a00992\"],\n- [\"NavState.h\", \"a00959.html\", \"a00959\"],\n- [\"PreintegratedRotation.cpp\", \"a00968.html\", null],\n- [\"PreintegratedRotation.h\", \"a00908.html\", \"a00908\"],\n- [\"PreintegrationBase.h\", \"a00983.html\", \"a00983\"],\n- [\"PreintegrationParams.h\", \"a00905.html\", \"a00905\"],\n- [\"Scenario.h\", \"a00932.html\", \"a00932\"],\n- [\"ScenarioRunner.h\", \"a00920.html\", \"a00920\"],\n- [\"TangentPreintegration.cpp\", \"a00965.html\", null],\n- [\"TangentPreintegration.h\", \"a00977.html\", \"a00977\"]\n+ [\"ImuBias.cpp\", \"a00929.html\", \"a00929\"],\n+ [\"ImuBias.h\", \"a00953.html\", \"a00953\"],\n+ [\"ImuFactor.cpp\", \"a00962.html\", null],\n+ [\"ImuFactor.h\", \"a00926.html\", \"a00926\"],\n+ [\"MagFactor.h\", \"a00992.html\", \"a00992\"],\n+ [\"MagPoseFactor.h\", \"a00944_source.html\", null],\n+ [\"ManifoldPreintegration.cpp\", \"a00959.html\", null],\n+ [\"ManifoldPreintegration.h\", \"a00905.html\", \"a00905\"],\n+ [\"NavState.h\", \"a00986.html\", \"a00986\"],\n+ [\"PreintegratedRotation.cpp\", \"a00989.html\", null],\n+ [\"PreintegratedRotation.h\", \"a00917.html\", \"a00917\"],\n+ [\"PreintegrationBase.h\", \"a00938.html\", \"a00938\"],\n+ [\"PreintegrationParams.h\", \"a00923.html\", \"a00923\"],\n+ [\"Scenario.h\", \"a00968.html\", \"a00968\"],\n+ [\"ScenarioRunner.h\", \"a00908.html\", \"a00908\"],\n+ [\"TangentPreintegration.cpp\", \"a00980.html\", null],\n+ [\"TangentPreintegration.h\", \"a00956.html\", \"a00956\"]\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 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.
       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.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
       
       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\", \"a00077_source.html\", null],\n- [\"cholesky.cpp\", \"a00023.html\", \"a00023\"],\n- [\"cholesky.h\", \"a00008.html\", \"a00008\"],\n+ [\"chartTesting.h\", \"a00035_source.html\", null],\n+ [\"cholesky.cpp\", \"a00125.html\", \"a00125\"],\n+ [\"cholesky.h\", \"a00140.html\", \"a00140\"],\n [\"concepts.h\", \"a08125_source.html\", null],\n- [\"ConcurrentMap.h\", \"a00128_source.html\", null],\n- [\"debug.cpp\", \"a00005.html\", null],\n- [\"debug.h\", \"a00131.html\", null],\n- [\"DSFMap.h\", \"a00029.html\", \"a00029\"],\n- [\"DSFVector.cpp\", \"a00122.html\", null],\n- [\"DSFVector.h\", \"a00089.html\", null],\n- [\"FastDefaultAllocator.h\", \"a00056.html\", \"a00056\"],\n- [\"FastList.h\", \"a00110.html\", null],\n- [\"FastMap.h\", \"a00071.html\", null],\n- [\"FastSet.h\", \"a00113.html\", null],\n- [\"FastVector.h\", \"a00101.html\", \"a00101\"],\n- [\"GenericValue.h\", \"a00143_source.html\", null],\n- [\"Group.h\", \"a00098.html\", \"a00098\"],\n- [\"Lie.h\", \"a00011.html\", \"a00011\"],\n- [\"lieProxies.h\", \"a00074.html\", \"a00074\"],\n- [\"make_shared.h\", \"a00047.html\", \"a00047\"],\n- [\"Manifold.h\", \"a00104.html\", \"a00104\"],\n+ [\"ConcurrentMap.h\", \"a00086_source.html\", null],\n+ [\"debug.cpp\", \"a00017.html\", null],\n+ [\"debug.h\", \"a00038.html\", null],\n+ [\"DSFMap.h\", \"a00050.html\", \"a00050\"],\n+ [\"DSFVector.cpp\", \"a00032.html\", null],\n+ [\"DSFVector.h\", \"a00011.html\", null],\n+ [\"FastDefaultAllocator.h\", \"a00092.html\", \"a00092\"],\n+ [\"FastList.h\", \"a00113.html\", null],\n+ [\"FastMap.h\", \"a00047.html\", null],\n+ [\"FastSet.h\", \"a00068.html\", null],\n+ [\"FastVector.h\", \"a00071.html\", \"a00071\"],\n+ [\"GenericValue.h\", \"a00128_source.html\", null],\n+ [\"Group.h\", \"a00077.html\", \"a00077\"],\n+ [\"Lie.h\", \"a00062.html\", \"a00062\"],\n+ [\"lieProxies.h\", \"a00104.html\", \"a00104\"],\n+ [\"make_shared.h\", \"a00026.html\", \"a00026\"],\n+ [\"Manifold.h\", \"a00107.html\", \"a00107\"],\n [\"Matrix.cpp\", \"a00080.html\", \"a00080\"],\n- [\"Matrix.h\", \"a00146.html\", \"a00146\"],\n- [\"MatrixSerialization.h\", \"a00026.html\", \"a00026\"],\n- [\"numericalDerivative.h\", \"a00032.html\", \"a00032\"],\n- [\"OptionalJacobian.h\", \"a00020.html\", \"a00020\"],\n- [\"ProductLieGroup.h\", \"a00095.html\", \"a00095\"],\n- [\"serialization.h\", \"a00134.html\", \"a00134\"],\n- [\"serializationTestHelpers.h\", \"a00050.html\", null],\n- [\"SymmetricBlockMatrix.cpp\", \"a00086.html\", null],\n- [\"SymmetricBlockMatrix.h\", \"a00137.html\", null],\n- [\"Testable.h\", \"a00083.html\", \"a00083\"],\n- [\"TestableAssertions.h\", \"a00014.html\", \"a00014\"],\n- [\"testLie.h\", \"a00038_source.html\", null],\n- [\"ThreadsafeException.h\", \"a00035.html\", \"a00035\"],\n- [\"timing.cpp\", \"a00017.html\", null],\n- [\"timing.h\", \"a00092.html\", \"a00092\"],\n+ [\"Matrix.h\", \"a00119.html\", \"a00119\"],\n+ [\"MatrixSerialization.h\", \"a00059.html\", \"a00059\"],\n+ [\"numericalDerivative.h\", \"a00023.html\", \"a00023\"],\n+ [\"OptionalJacobian.h\", \"a00149.html\", \"a00149\"],\n+ [\"ProductLieGroup.h\", \"a00002.html\", \"a00002\"],\n+ [\"serialization.h\", \"a00008.html\", \"a00008\"],\n+ [\"serializationTestHelpers.h\", \"a00143.html\", null],\n+ [\"SymmetricBlockMatrix.cpp\", \"a00083.html\", null],\n+ [\"SymmetricBlockMatrix.h\", \"a00089.html\", null],\n+ [\"Testable.h\", \"a00065.html\", \"a00065\"],\n+ [\"TestableAssertions.h\", \"a00005.html\", \"a00005\"],\n+ [\"testLie.h\", \"a00074_source.html\", null],\n+ [\"ThreadsafeException.h\", \"a00056.html\", \"a00056\"],\n+ [\"timing.cpp\", \"a00116.html\", null],\n+ [\"timing.h\", \"a00020.html\", \"a00020\"],\n [\"treeTraversal-inst.h\", \"a00044.html\", \"a00044\"],\n- [\"types.cpp\", \"a00068.html\", \"a00068\"],\n- [\"types.h\", \"a00119.html\", \"a00119\"],\n+ [\"types.cpp\", \"a00014.html\", \"a00014\"],\n+ [\"types.h\", \"a00098.html\", \"a00098\"],\n [\"utilities.h\", \"a08131_source.html\", null],\n- [\"Value.h\", \"a00041.html\", \"a00041\"],\n- [\"Vector.cpp\", \"a00125.html\", \"a00125\"],\n- [\"Vector.h\", \"a00065.html\", \"a00065\"],\n- [\"VectorSerialization.h\", \"a00002.html\", null],\n- [\"VectorSpace.h\", \"a00107_source.html\", null],\n- [\"VerticalBlockMatrix.cpp\", \"a00059.html\", null],\n- [\"VerticalBlockMatrix.h\", \"a00116.html\", null],\n- [\"WeightedSampler.h\", \"a00140.html\", \"a00140\"]\n+ [\"Value.h\", \"a00131.html\", \"a00131\"],\n+ [\"Vector.cpp\", \"a00053.html\", \"a00053\"],\n+ [\"Vector.h\", \"a00146.html\", \"a00146\"],\n+ [\"VectorSerialization.h\", \"a00101.html\", null],\n+ [\"VectorSpace.h\", \"a00122_source.html\", null],\n+ [\"VerticalBlockMatrix.cpp\", \"a00137.html\", null],\n+ [\"VerticalBlockMatrix.h\", \"a00029.html\", null],\n+ [\"WeightedSampler.h\", \"a00095.html\", \"a00095\"]\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,61 +99,61 @@\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 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.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
       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.
       
       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.
       
       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.
       TranslationRecovery.h
       Recovering translations in an epipolar graph when rotations are given.
       
      \n
      \n
    \n \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\", \"a01211.html\", \"a01211\"],\n- [\"DsfTrackGenerator.cpp\", \"a01208.html\", \"a01208\"],\n- [\"DsfTrackGenerator.h\", \"a01220.html\", \"a01220\"],\n+ [\"BinaryMeasurement.h\", \"a01193.html\", \"a01193\"],\n+ [\"DsfTrackGenerator.cpp\", \"a01190.html\", \"a01190\"],\n+ [\"DsfTrackGenerator.h\", \"a01199.html\", \"a01199\"],\n [\"MFAS.cpp\", \"a01184.html\", null],\n- [\"MFAS.h\", \"a01199.html\", null],\n- [\"SfmData.cpp\", \"a01193.html\", \"a01193\"],\n- [\"SfmData.h\", \"a01217.html\", \"a01217\"],\n- [\"SfmTrack.cpp\", \"a01205.html\", null],\n- [\"SfmTrack.h\", \"a01202.html\", \"a01202\"],\n+ [\"MFAS.h\", \"a01223.html\", null],\n+ [\"SfmData.cpp\", \"a01232.html\", \"a01232\"],\n+ [\"SfmData.h\", \"a01208.html\", \"a01208\"],\n+ [\"SfmTrack.cpp\", \"a01202.html\", null],\n+ [\"SfmTrack.h\", \"a01211.html\", \"a01211\"],\n [\"ShonanAveraging.cpp\", \"a01214.html\", null],\n- [\"ShonanAveraging.h\", \"a01223.html\", \"a01223\"],\n+ [\"ShonanAveraging.h\", \"a01220.html\", \"a01220\"],\n [\"ShonanFactor.h\", \"a01196.html\", \"a01196\"],\n [\"ShonanGaugeFactor.h\", \"a01229.html\", \"a01229\"],\n- [\"TranslationFactor.h\", \"a01190.html\", null],\n- [\"TranslationRecovery.cpp\", \"a01226.html\", null],\n- [\"TranslationRecovery.h\", \"a01187.html\", \"a01187\"]\n+ [\"TranslationFactor.h\", \"a01205.html\", null],\n+ [\"TranslationRecovery.cpp\", \"a01217.html\", null],\n+ [\"TranslationRecovery.h\", \"a01226.html\", \"a01226\"]\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,37 +99,37 @@\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.
       Chebyshev.h
       Chebyshev basis decompositions.
       
       Chebyshev2.cpp
       Chebyshev parameterizations on Chebyshev points of second kind.
       
       Chebyshev2.h
       Pseudo-spectral parameterization for Chebyshev polynomials of the 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.
       
      \n
      \n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/dir_7c6fd4d23c35234f8f1271a66248b63b.js", "source2": "./usr/share/doc/libgtsam-dev/html/dir_7c6fd4d23c35234f8f1271a66248b63b.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,11 +1,11 @@\n var dir_7c6fd4d23c35234f8f1271a66248b63b = [\n- [\"Basis.h\", \"a00173.html\", \"a00173\"],\n- [\"BasisFactors.h\", \"a00167.html\", \"a00167\"],\n- [\"Chebyshev.cpp\", \"a00170.html\", null],\n- [\"Chebyshev.h\", \"a00152.html\", \"a00152\"],\n+ [\"Basis.h\", \"a00158.html\", \"a00158\"],\n+ [\"BasisFactors.h\", \"a00152.html\", \"a00152\"],\n+ [\"Chebyshev.cpp\", \"a00176.html\", null],\n+ [\"Chebyshev.h\", \"a00161.html\", \"a00161\"],\n [\"Chebyshev2.cpp\", \"a00164.html\", null],\n- [\"Chebyshev2.h\", \"a00161.html\", \"a00161\"],\n- [\"FitBasis.h\", \"a00176.html\", \"a00176\"],\n- [\"Fourier.h\", \"a00158.html\", \"a00158\"],\n+ [\"Chebyshev2.h\", \"a00170.html\", \"a00170\"],\n+ [\"FitBasis.h\", \"a00173.html\", \"a00173\"],\n+ [\"Fourier.h\", \"a00167.html\", \"a00167\"],\n [\"ParameterMatrix.h\", \"a00155.html\", \"a00155\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/dir_88adea47575c2d5c40d4070390572b66.html", "source2": "./usr/share/doc/libgtsam-dev/html/dir_88adea47575c2d5c40d4070390572b66.html", "unified_diff": "@@ -99,176 +99,176 @@\n
    \n
    nonlinear 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 Files

     CustomFactor.cpp
     Class to enable arbitrary factors with runtime swappable error function.
     CustomFactor.cpp
     Class to enable arbitrary factors with runtime swappable error function.
     
     CustomFactor.h
     Class to enable arbitrary factors with runtime swappable error function.
     CustomFactor.h
     Class to enable arbitrary factors with runtime swappable error function.
     
     DoglegOptimizer.cpp
     DoglegOptimizer.cpp
     
     DoglegOptimizer.h
     DoglegOptimizer.h
     
     DoglegOptimizerImpl.h
     Nonlinear factor graph optimizer using Powell's Dogleg algorithm (detail implementation)
     DoglegOptimizerImpl.h
     Nonlinear factor graph optimizer using Powell's Dogleg algorithm (detail implementation)
     
     Expression-inl.h
     Internals for Expression.h, not for general consumption.
     Expression-inl.h
     Internals for Expression.h, not for general consumption.
     
     Expression.h
     Expressions for Block Automatic Differentiation.
     Expression.h
     Expressions for Block Automatic Differentiation.
     
     ExpressionFactor.h
     ExpressionFactor.h
     
     ExpressionFactorGraph.h
     Factor graph that supports adding ExpressionFactors directly.
     ExpressionFactorGraph.h
     Factor graph that supports adding ExpressionFactors directly.
     
     expressions.h
     Common expressions, both linear and non-linear.
     
     expressionTesting.h
     Test harness methods for expressions.
     expressionTesting.h
     Test harness methods for expressions.
     
     ExtendedKalmanFilter-inl.h
     Class to perform generic Kalman Filtering using nonlinear factor graphs.
     ExtendedKalmanFilter-inl.h
     Class to perform generic Kalman Filtering using nonlinear factor graphs.
     
     ExtendedKalmanFilter.h
     Class to perform generic Kalman Filtering using nonlinear factor graphs.
     ExtendedKalmanFilter.h
     Class to perform generic Kalman Filtering using nonlinear factor graphs.
     
     factorTesting.h
     Evaluate derivatives of a nonlinear factor numerically.
     factorTesting.h
     Evaluate derivatives of a nonlinear factor numerically.
     
     FunctorizedFactor.h
     FunctorizedFactor.h
     
     GaussNewtonOptimizer.cpp
     GaussNewtonOptimizer.cpp
     
     GaussNewtonOptimizer.h
     GaussNewtonOptimizer.h
     
     GncOptimizer.h
     The GncOptimizer class.
     GncOptimizer.h
     The GncOptimizer class.
     
     GncParams.h
     GncParams.h
     
     GraphvizFormatting.cpp
     Graphviz formatter for NonlinearFactorGraph.
     GraphvizFormatting.cpp
     Graphviz formatter for NonlinearFactorGraph.
     
     GraphvizFormatting.h
     Graphviz formatter for NonlinearFactorGraph.
     GraphvizFormatting.h
     Graphviz formatter for NonlinearFactorGraph.
     
     ISAM2-impl.cpp
     Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization.
     
     ISAM2-impl.h
     Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization.
     ISAM2-impl.h
     Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization.
     
     ISAM2.cpp
     Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization.
     ISAM2.cpp
     Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization.
     
     ISAM2.h
     Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization.
     ISAM2.h
     Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization.
     
     ISAM2Clique.cpp
     Specialized iSAM2 Clique.
     ISAM2Clique.cpp
     Specialized iSAM2 Clique.
     
     ISAM2Clique.h
     Specialized iSAM2 Clique.
     ISAM2Clique.h
     Specialized iSAM2 Clique.
     
     ISAM2Params.cpp
     Parameters for iSAM 2.
     ISAM2Params.cpp
     Parameters for iSAM 2.
     
     ISAM2Params.h
     Parameters for iSAM 2.
     ISAM2Params.h
     Parameters for iSAM 2.
     
     ISAM2Result.h
     Class that stores detailed iSAM2 result.
     ISAM2Result.h
     Class that stores detailed iSAM2 result.
     
     ISAM2UpdateParams.h
     Class that stores extra params for ISAM2::update()
     ISAM2UpdateParams.h
     Class that stores extra params for ISAM2::update()
     
     LevenbergMarquardtOptimizer.cpp
     A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.
     LevenbergMarquardtOptimizer.cpp
     A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.
     
     LevenbergMarquardtOptimizer.h
     A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.
     LevenbergMarquardtOptimizer.h
     A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.
     
     LevenbergMarquardtParams.cpp
     Parameters for Levenberg-Marquardt trust-region scheme.
     LevenbergMarquardtParams.cpp
     Parameters for Levenberg-Marquardt trust-region scheme.
     
     LevenbergMarquardtParams.h
     Parameters for Levenberg-Marquardt trust-region scheme.
     LevenbergMarquardtParams.h
     Parameters for Levenberg-Marquardt trust-region scheme.
     
     LinearContainerFactor.cpp
     LinearContainerFactor.cpp
     
     LinearContainerFactor.h
     Wrap Jacobian and Hessian linear factors to allow simple injection into a nonlinear graph.
     LinearContainerFactor.h
     Wrap Jacobian and Hessian linear factors to allow simple injection into a nonlinear graph.
     
     Marginals.cpp
     Marginals.cpp
     
     Marginals.h
     A class for computing marginals in a NonlinearFactorGraph.
     Marginals.h
     A class for computing marginals in a NonlinearFactorGraph.
     
     NonlinearConjugateGradientOptimizer.cpp
     Simple non-linear optimizer that solves using non-preconditioned CG.
     NonlinearConjugateGradientOptimizer.cpp
     Simple non-linear optimizer that solves using non-preconditioned CG.
     
     NonlinearConjugateGradientOptimizer.h
     Simple non-linear optimizer that solves using non-preconditioned CG.
     NonlinearConjugateGradientOptimizer.h
     Simple non-linear optimizer that solves using non-preconditioned CG.
     
     NonlinearEquality.h
     NonlinearEquality.h
     
     nonlinearExceptions.h
     Exceptions that may be thrown by nonlinear optimization components.
     nonlinearExceptions.h
     Exceptions that may be thrown by nonlinear optimization components.
     
     NonlinearFactor.cpp
     Nonlinear Factor base classes.
     
     NonlinearFactor.h
     Non-linear factor base classes.
     NonlinearFactor.h
     Non-linear factor base classes.
     
     NonlinearFactorGraph.cpp
     Factor Graph Consisting of non-linear factors.
     NonlinearFactorGraph.cpp
     Factor Graph Consisting of non-linear factors.
     
     NonlinearFactorGraph.h
     Factor Graph consisting of non-linear factors.
     NonlinearFactorGraph.h
     Factor Graph consisting of non-linear factors.
     
     NonlinearISAM.cpp
     NonlinearISAM.cpp
     
     NonlinearISAM.h
     NonlinearISAM.h
     
     NonlinearOptimizer.cpp
     Convergence functions not dependent on graph types.
     NonlinearOptimizer.cpp
     Convergence functions not dependent on graph types.
     
     NonlinearOptimizer.h
     Base class and parameters for nonlinear optimization algorithms.
     NonlinearOptimizer.h
     Base class and parameters for nonlinear optimization algorithms.
     
     NonlinearOptimizerParams.cpp
     Parameters for nonlinear optimization.
     NonlinearOptimizerParams.cpp
     Parameters for nonlinear optimization.
     
     NonlinearOptimizerParams.h
     Parameters for nonlinear optimization.
     NonlinearOptimizerParams.h
     Parameters for nonlinear optimization.
     
     PriorFactor.h
     
     Symbol.h
     Symbol.h was moved to inference directory, this header was retained for compatibility.
     
     utilities.h
     Contains generic global functions designed particularly for the matlab interface.
     
     Values-inl.h
     Values-inl.h
     
     Values.h
     A non-templated config holding any types of Manifold-group elements.
     Values.h
     A non-templated config holding any types of Manifold-group elements.
     
     WhiteNoiseFactor.h
     Binary white noise factor.
     WhiteNoiseFactor.h
     Binary white noise factor.
     
    \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\", \"a01151.html\", null],\n- [\"CustomFactor.h\", \"a01031.html\", \"a01031\"],\n- [\"DoglegOptimizer.cpp\", \"a01034.html\", null],\n- [\"DoglegOptimizer.h\", \"a01076.html\", \"a01076\"],\n- [\"DoglegOptimizerImpl.h\", \"a01124.html\", \"a01124\"],\n- [\"Expression-inl.h\", \"a01106.html\", \"a01106\"],\n- [\"Expression.h\", \"a01055.html\", \"a01055\"],\n- [\"ExpressionFactor.h\", \"a01016_source.html\", null],\n- [\"ExpressionFactorGraph.h\", \"a01148.html\", \"a01148\"],\n+ [\"CustomFactor.cpp\", \"a01142.html\", null],\n+ [\"CustomFactor.h\", \"a01127.html\", \"a01127\"],\n+ [\"DoglegOptimizer.cpp\", \"a01121.html\", null],\n+ [\"DoglegOptimizer.h\", \"a01040.html\", \"a01040\"],\n+ [\"DoglegOptimizerImpl.h\", \"a01022.html\", \"a01022\"],\n+ [\"Expression-inl.h\", \"a01118.html\", \"a01118\"],\n+ [\"Expression.h\", \"a01064.html\", \"a01064\"],\n+ [\"ExpressionFactor.h\", \"a01085_source.html\", null],\n+ [\"ExpressionFactorGraph.h\", \"a01001.html\", \"a01001\"],\n [\"expressions.h\", \"a08146.html\", null],\n- [\"expressionTesting.h\", \"a01154.html\", \"a01154\"],\n- [\"ExtendedKalmanFilter-inl.h\", \"a01163.html\", null],\n- [\"ExtendedKalmanFilter.h\", \"a01013.html\", \"a01013\"],\n- [\"factorTesting.h\", \"a01010.html\", \"a01010\"],\n- [\"FunctorizedFactor.h\", \"a01157.html\", \"a01157\"],\n- [\"GaussNewtonOptimizer.cpp\", \"a01133.html\", null],\n- [\"GaussNewtonOptimizer.h\", \"a01067.html\", \"a01067\"],\n- [\"GncOptimizer.h\", \"a01166.html\", \"a01166\"],\n- [\"GncParams.h\", \"a01112_source.html\", null],\n- [\"GraphvizFormatting.cpp\", \"a01073.html\", null],\n- [\"GraphvizFormatting.h\", \"a01064.html\", \"a01064\"],\n+ [\"expressionTesting.h\", \"a01169.html\", \"a01169\"],\n+ [\"ExtendedKalmanFilter-inl.h\", \"a01124.html\", null],\n+ [\"ExtendedKalmanFilter.h\", \"a01058.html\", \"a01058\"],\n+ [\"factorTesting.h\", \"a01070.html\", \"a01070\"],\n+ [\"FunctorizedFactor.h\", \"a01004.html\", \"a01004\"],\n+ [\"GaussNewtonOptimizer.cpp\", \"a01130.html\", null],\n+ [\"GaussNewtonOptimizer.h\", \"a01025.html\", \"a01025\"],\n+ [\"GncOptimizer.h\", \"a01049.html\", \"a01049\"],\n+ [\"GncParams.h\", \"a01145_source.html\", null],\n+ [\"GraphvizFormatting.cpp\", \"a01028.html\", null],\n+ [\"GraphvizFormatting.h\", \"a01052.html\", \"a01052\"],\n [\"ISAM2-impl.cpp\", \"a01043.html\", null],\n- [\"ISAM2-impl.h\", \"a01139.html\", \"a01139\"],\n- [\"ISAM2.cpp\", \"a01082.html\", null],\n- [\"ISAM2.h\", \"a01142.html\", \"a01142\"],\n- [\"ISAM2Clique.cpp\", \"a01103.html\", \"a01103\"],\n- [\"ISAM2Clique.h\", \"a01040.html\", \"a01040\"],\n- [\"ISAM2Params.cpp\", \"a01052.html\", null],\n- [\"ISAM2Params.h\", \"a01025.html\", \"a01025\"],\n- [\"ISAM2Result.h\", \"a01115.html\", \"a01115\"],\n- [\"ISAM2UpdateParams.h\", \"a01061.html\", null],\n- [\"LevenbergMarquardtOptimizer.cpp\", \"a01091.html\", null],\n- [\"LevenbergMarquardtOptimizer.h\", \"a01085.html\", \"a01085\"],\n- [\"LevenbergMarquardtParams.cpp\", \"a01079.html\", null],\n- [\"LevenbergMarquardtParams.h\", \"a01121.html\", \"a01121\"],\n- [\"LinearContainerFactor.cpp\", \"a01058.html\", null],\n- [\"LinearContainerFactor.h\", \"a01172.html\", \"a01172\"],\n- [\"Marginals.cpp\", \"a01130.html\", null],\n- [\"Marginals.h\", \"a01070.html\", \"a01070\"],\n- [\"NonlinearConjugateGradientOptimizer.cpp\", \"a01046.html\", null],\n- [\"NonlinearConjugateGradientOptimizer.h\", \"a01160.html\", \"a01160\"],\n- [\"NonlinearEquality.h\", \"a01109_source.html\", null],\n- [\"nonlinearExceptions.h\", \"a01100.html\", \"a01100\"],\n+ [\"ISAM2-impl.h\", \"a01115.html\", \"a01115\"],\n+ [\"ISAM2.cpp\", \"a01088.html\", null],\n+ [\"ISAM2.h\", \"a01163.html\", \"a01163\"],\n+ [\"ISAM2Clique.cpp\", \"a01172.html\", \"a01172\"],\n+ [\"ISAM2Clique.h\", \"a01151.html\", \"a01151\"],\n+ [\"ISAM2Params.cpp\", \"a01016.html\", null],\n+ [\"ISAM2Params.h\", \"a01019.html\", \"a01019\"],\n+ [\"ISAM2Result.h\", \"a01094.html\", \"a01094\"],\n+ [\"ISAM2UpdateParams.h\", \"a01046.html\", null],\n+ [\"LevenbergMarquardtOptimizer.cpp\", \"a01139.html\", null],\n+ [\"LevenbergMarquardtOptimizer.h\", \"a01106.html\", \"a01106\"],\n+ [\"LevenbergMarquardtParams.cpp\", \"a01103.html\", null],\n+ [\"LevenbergMarquardtParams.h\", \"a01157.html\", \"a01157\"],\n+ [\"LinearContainerFactor.cpp\", \"a01067.html\", null],\n+ [\"LinearContainerFactor.h\", \"a01034.html\", \"a01034\"],\n+ [\"Marginals.cpp\", \"a01109.html\", null],\n+ [\"Marginals.h\", \"a01061.html\", \"a01061\"],\n+ [\"NonlinearConjugateGradientOptimizer.cpp\", \"a01055.html\", null],\n+ [\"NonlinearConjugateGradientOptimizer.h\", \"a01097.html\", \"a01097\"],\n+ [\"NonlinearEquality.h\", \"a01148_source.html\", null],\n+ [\"nonlinearExceptions.h\", \"a01073.html\", \"a01073\"],\n [\"NonlinearFactor.cpp\", \"a01136.html\", null],\n- [\"NonlinearFactor.h\", \"a01169.html\", \"a01169\"],\n- [\"NonlinearFactorGraph.cpp\", \"a01022.html\", null],\n- [\"NonlinearFactorGraph.h\", \"a01094.html\", \"a01094\"],\n- [\"NonlinearISAM.cpp\", \"a01145.html\", null],\n- [\"NonlinearISAM.h\", \"a01118.html\", \"a01118\"],\n- [\"NonlinearOptimizer.cpp\", \"a01049.html\", \"a01049\"],\n- [\"NonlinearOptimizer.h\", \"a01019.html\", \"a01019\"],\n- [\"NonlinearOptimizerParams.cpp\", \"a01001.html\", null],\n- [\"NonlinearOptimizerParams.h\", \"a01127.html\", \"a01127\"],\n+ [\"NonlinearFactor.h\", \"a01013.html\", \"a01013\"],\n+ [\"NonlinearFactorGraph.cpp\", \"a01166.html\", null],\n+ [\"NonlinearFactorGraph.h\", \"a01112.html\", \"a01112\"],\n+ [\"NonlinearISAM.cpp\", \"a01091.html\", null],\n+ [\"NonlinearISAM.h\", \"a01010.html\", \"a01010\"],\n+ [\"NonlinearOptimizer.cpp\", \"a01100.html\", \"a01100\"],\n+ [\"NonlinearOptimizer.h\", \"a01082.html\", \"a01082\"],\n+ [\"NonlinearOptimizerParams.cpp\", \"a01076.html\", null],\n+ [\"NonlinearOptimizerParams.h\", \"a01031.html\", \"a01031\"],\n [\"PriorFactor.h\", \"a08152.html\", \"a08152\"],\n [\"Symbol.h\", \"a08140.html\", null],\n [\"utilities.h\", \"a08134.html\", \"a08134\"],\n- [\"Values-inl.h\", \"a01097_source.html\", null],\n- [\"Values.h\", \"a01004.html\", \"a01004\"],\n- [\"WhiteNoiseFactor.h\", \"a01088.html\", \"a01088\"]\n+ [\"Values-inl.h\", \"a01133_source.html\", null],\n+ [\"Values.h\", \"a01037.html\", \"a01037\"],\n+ [\"WhiteNoiseFactor.h\", \"a01007.html\", \"a01007\"]\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

      \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.cpp
       GaussianConditional-inl.h
       Conditional Gaussian Base class.
       
       GaussianConditional.h
       Conditional Gaussian Base class.
       GaussianConditional.cpp
       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
       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\", \"a00812.html\", \"a00812\"],\n- [\"BinaryJacobianFactor.h\", \"a00803.html\", \"a00803\"],\n- [\"ConjugateGradientSolver.h\", \"a00815.html\", \"a00815\"],\n- [\"Errors.cpp\", \"a00791.html\", \"a00791\"],\n- [\"Errors.h\", \"a00857.html\", \"a00857\"],\n- [\"GaussianBayesNet.cpp\", \"a00746.html\", null],\n- [\"GaussianBayesNet.h\", \"a00848.html\", \"a00848\"],\n- [\"GaussianBayesTree-inl.h\", \"a00704.html\", null],\n- [\"GaussianBayesTree.cpp\", \"a00734.html\", null],\n- [\"GaussianBayesTree.h\", \"a00773.html\", \"a00773\"],\n- [\"GaussianConditional-inl.h\", \"a00737.html\", null],\n- [\"GaussianConditional.cpp\", \"a00716.html\", null],\n- [\"GaussianConditional.h\", \"a00833.html\", \"a00833\"],\n- [\"GaussianDensity.cpp\", \"a00806.html\", null],\n- [\"GaussianDensity.h\", \"a00785.html\", null],\n- [\"GaussianEliminationTree.cpp\", \"a00887.html\", null],\n- [\"GaussianEliminationTree.h\", \"a00713.html\", \"a00713\"],\n- [\"GaussianFactor.cpp\", \"a00839.html\", null],\n- [\"GaussianFactor.h\", \"a00788.html\", \"a00788\"],\n- [\"GaussianFactorGraph.cpp\", \"a00836.html\", \"a00836\"],\n- [\"GaussianFactorGraph.h\", \"a00899.html\", \"a00899\"],\n- [\"GaussianISAM.h\", \"a00866.html\", \"a00866\"],\n- [\"GaussianJunctionTree.cpp\", \"a00827.html\", null],\n- [\"GaussianJunctionTree.h\", \"a00878.html\", null],\n- [\"HessianFactor-inl.h\", \"a00872.html\", null],\n- [\"HessianFactor.cpp\", \"a00707.html\", \"a00707\"],\n- [\"HessianFactor.h\", \"a00752.html\", \"a00752\"],\n- [\"iterative-inl.h\", \"a00722.html\", \"a00722\"],\n- [\"iterative.cpp\", \"a00851.html\", \"a00851\"],\n- [\"iterative.h\", \"a00881.html\", \"a00881\"],\n+ [\"AcceleratedPowerMethod.h\", \"a00776.html\", \"a00776\"],\n+ [\"BinaryJacobianFactor.h\", \"a00719.html\", \"a00719\"],\n+ [\"ConjugateGradientSolver.h\", \"a00704.html\", \"a00704\"],\n+ [\"Errors.cpp\", \"a00761.html\", \"a00761\"],\n+ [\"Errors.h\", \"a00728.html\", \"a00728\"],\n+ [\"GaussianBayesNet.cpp\", \"a00890.html\", null],\n+ [\"GaussianBayesNet.h\", \"a00809.html\", \"a00809\"],\n+ [\"GaussianBayesTree-inl.h\", \"a00827.html\", null],\n+ [\"GaussianBayesTree.cpp\", \"a00830.html\", null],\n+ [\"GaussianBayesTree.h\", \"a00782.html\", \"a00782\"],\n+ [\"GaussianConditional-inl.h\", \"a00716.html\", null],\n+ [\"GaussianConditional.cpp\", \"a00824.html\", null],\n+ [\"GaussianConditional.h\", \"a00866.html\", \"a00866\"],\n+ [\"GaussianDensity.cpp\", \"a00893.html\", null],\n+ [\"GaussianDensity.h\", \"a00752.html\", null],\n+ [\"GaussianEliminationTree.cpp\", \"a00767.html\", null],\n+ [\"GaussianEliminationTree.h\", \"a00740.html\", \"a00740\"],\n+ [\"GaussianFactor.cpp\", \"a00731.html\", null],\n+ [\"GaussianFactor.h\", \"a00803.html\", \"a00803\"],\n+ [\"GaussianFactorGraph.cpp\", \"a00875.html\", \"a00875\"],\n+ [\"GaussianFactorGraph.h\", \"a00725.html\", \"a00725\"],\n+ [\"GaussianISAM.h\", \"a00845.html\", \"a00845\"],\n+ [\"GaussianJunctionTree.cpp\", \"a00851.html\", null],\n+ [\"GaussianJunctionTree.h\", \"a00815.html\", null],\n+ [\"HessianFactor-inl.h\", \"a00899.html\", null],\n+ [\"HessianFactor.cpp\", \"a00848.html\", \"a00848\"],\n+ [\"HessianFactor.h\", \"a00887.html\", \"a00887\"],\n+ [\"iterative-inl.h\", \"a00872.html\", \"a00872\"],\n+ [\"iterative.cpp\", \"a00797.html\", \"a00797\"],\n+ [\"iterative.h\", \"a00770.html\", \"a00770\"],\n [\"IterativeSolver.cpp\", \"a00779.html\", null],\n- [\"IterativeSolver.h\", \"a00797.html\", \"a00797\"],\n- [\"JacobianFactor-inl.h\", \"a00824_source.html\", null],\n- [\"JacobianFactor.cpp\", \"a00719.html\", \"a00719\"],\n- [\"JacobianFactor.h\", \"a00761.html\", \"a00761\"],\n- [\"KalmanFilter.cpp\", \"a00809.html\", null],\n- [\"KalmanFilter.h\", \"a00863.html\", \"a00863\"],\n- [\"linearAlgorithms-inst.h\", \"a00821.html\", \"a00821\"],\n- [\"linearExceptions.cpp\", \"a00818.html\", null],\n- [\"linearExceptions.h\", \"a00749.html\", \"a00749\"],\n- [\"LossFunctions.h\", \"a00731_source.html\", null],\n- [\"NoiseModel.cpp\", \"a00740.html\", null],\n- [\"NoiseModel.h\", \"a00755.html\", \"a00755\"],\n- [\"PCGSolver.h\", \"a00890_source.html\", null],\n- [\"PowerMethod.h\", \"a00758.html\", \"a00758\"],\n- [\"Preconditioner.h\", \"a00728_source.html\", null],\n- [\"RegularHessianFactor.h\", \"a00893.html\", \"a00893\"],\n- [\"RegularJacobianFactor.h\", \"a00725.html\", \"a00725\"],\n- [\"Sampler.cpp\", \"a00800.html\", null],\n- [\"Sampler.h\", \"a00860.html\", \"a00860\"],\n- [\"Scatter.cpp\", \"a00854.html\", null],\n- [\"Scatter.h\", \"a00764.html\", \"a00764\"],\n- [\"SparseEigen.h\", \"a00767.html\", \"a00767\"],\n- [\"SubgraphBuilder.cpp\", \"a00875.html\", \"a00875\"],\n- [\"SubgraphBuilder.h\", \"a00842.html\", \"a00842\"],\n- [\"SubgraphPreconditioner.cpp\", \"a00743.html\", null],\n- [\"SubgraphPreconditioner.h\", \"a00896.html\", \"a00896\"],\n- [\"SubgraphSolver.cpp\", \"a00869.html\", null],\n- [\"SubgraphSolver.h\", \"a00794.html\", \"a00794\"],\n- [\"VectorValues.cpp\", \"a00710.html\", null],\n- [\"VectorValues.h\", \"a00830.html\", \"a00830\"]\n+ [\"IterativeSolver.h\", \"a00713.html\", \"a00713\"],\n+ [\"JacobianFactor-inl.h\", \"a00842_source.html\", null],\n+ [\"JacobianFactor.cpp\", \"a00878.html\", \"a00878\"],\n+ [\"JacobianFactor.h\", \"a00833.html\", \"a00833\"],\n+ [\"KalmanFilter.cpp\", \"a00836.html\", null],\n+ [\"KalmanFilter.h\", \"a00884.html\", \"a00884\"],\n+ [\"linearAlgorithms-inst.h\", \"a00806.html\", \"a00806\"],\n+ [\"linearExceptions.cpp\", \"a00839.html\", null],\n+ [\"linearExceptions.h\", \"a00722.html\", \"a00722\"],\n+ [\"LossFunctions.h\", \"a00737_source.html\", null],\n+ [\"NoiseModel.cpp\", \"a00791.html\", null],\n+ [\"NoiseModel.h\", \"a00788.html\", \"a00788\"],\n+ [\"PCGSolver.h\", \"a00734_source.html\", null],\n+ [\"PowerMethod.h\", \"a00800.html\", \"a00800\"],\n+ [\"Preconditioner.h\", \"a00758_source.html\", null],\n+ [\"RegularHessianFactor.h\", \"a00764.html\", \"a00764\"],\n+ [\"RegularJacobianFactor.h\", \"a00896.html\", \"a00896\"],\n+ [\"Sampler.cpp\", \"a00881.html\", null],\n+ [\"Sampler.h\", \"a00794.html\", \"a00794\"],\n+ [\"Scatter.cpp\", \"a00755.html\", null],\n+ [\"Scatter.h\", \"a00749.html\", \"a00749\"],\n+ [\"SparseEigen.h\", \"a00863.html\", \"a00863\"],\n+ [\"SubgraphBuilder.cpp\", \"a00746.html\", \"a00746\"],\n+ [\"SubgraphBuilder.h\", \"a00857.html\", \"a00857\"],\n+ [\"SubgraphPreconditioner.cpp\", \"a00773.html\", null],\n+ [\"SubgraphPreconditioner.h\", \"a00860.html\", \"a00860\"],\n+ [\"SubgraphSolver.cpp\", \"a00710.html\", null],\n+ [\"SubgraphSolver.h\", \"a00818.html\", \"a00818\"],\n+ [\"VectorValues.cpp\", \"a00821.html\", null],\n+ [\"VectorValues.h\", \"a00869.html\", \"a00869\"]\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.
       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.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.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.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)
       
       triangulation.h
       Functions for triangulation.
       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\", \"a00368.html\", \"a00368\"],\n- [\"Cal3.cpp\", \"a00371.html\", null],\n- [\"Cal3.h\", \"a00353.html\", \"a00353\"],\n- [\"Cal3_S2.cpp\", \"a00410.html\", null],\n- [\"Cal3_S2.h\", \"a00284.html\", \"a00284\"],\n- [\"Cal3_S2Stereo.cpp\", \"a00278.html\", null],\n- [\"Cal3_S2Stereo.h\", \"a00302.html\", \"a00302\"],\n- [\"Cal3Bundler.cpp\", \"a00323.html\", null],\n- [\"Cal3Bundler.h\", \"a00314.html\", \"a00314\"],\n- [\"Cal3DS2.cpp\", \"a00320.html\", null],\n- [\"Cal3DS2.h\", \"a00404.html\", \"a00404\"],\n- [\"Cal3DS2_Base.cpp\", \"a00413.html\", null],\n- [\"Cal3DS2_Base.h\", \"a00440_source.html\", null],\n- [\"Cal3Fisheye.cpp\", \"a00374.html\", null],\n- [\"Cal3Fisheye.h\", \"a00359.html\", \"a00359\"],\n- [\"Cal3Unified.cpp\", \"a00392.html\", null],\n- [\"Cal3Unified.h\", \"a00305.html\", \"a00305\"],\n- [\"CalibratedCamera.cpp\", \"a00416.html\", null],\n- [\"CalibratedCamera.h\", \"a00446.html\", \"a00446\"],\n- [\"CameraSet.h\", \"a00296.html\", \"a00296\"],\n+ [\"BearingRange.h\", \"a00302.html\", \"a00302\"],\n+ [\"Cal3.cpp\", \"a00275.html\", null],\n+ [\"Cal3.h\", \"a00407.html\", \"a00407\"],\n+ [\"Cal3_S2.cpp\", \"a00383.html\", null],\n+ [\"Cal3_S2.h\", \"a00416.html\", \"a00416\"],\n+ [\"Cal3_S2Stereo.cpp\", \"a00377.html\", null],\n+ [\"Cal3_S2Stereo.h\", \"a00296.html\", \"a00296\"],\n+ [\"Cal3Bundler.cpp\", \"a00338.html\", null],\n+ [\"Cal3Bundler.h\", \"a00317.html\", \"a00317\"],\n+ [\"Cal3DS2.cpp\", \"a00380.html\", null],\n+ [\"Cal3DS2.h\", \"a00284.html\", \"a00284\"],\n+ [\"Cal3DS2_Base.cpp\", \"a00422.html\", null],\n+ [\"Cal3DS2_Base.h\", \"a00437_source.html\", null],\n+ [\"Cal3Fisheye.cpp\", \"a00446.html\", null],\n+ [\"Cal3Fisheye.h\", \"a00326.html\", \"a00326\"],\n+ [\"Cal3Unified.cpp\", \"a00461.html\", null],\n+ [\"Cal3Unified.h\", \"a00467.html\", \"a00467\"],\n+ [\"CalibratedCamera.cpp\", \"a00314.html\", null],\n+ [\"CalibratedCamera.h\", \"a00290.html\", \"a00290\"],\n+ [\"CameraSet.h\", \"a00293.html\", \"a00293\"],\n [\"concepts.h\", \"a08128.html\", \"a08128\"],\n- [\"Cyclic.cpp\", \"a00443.html\", null],\n- [\"Cyclic.h\", \"a00317.html\", \"a00317\"],\n- [\"EssentialMatrix.h\", \"a00275_source.html\", null],\n- [\"Line3.h\", \"a00422.html\", \"a00422\"],\n- [\"OrientedPlane3.h\", \"a00464_source.html\", null],\n- [\"PinholeCamera.h\", \"a00335.html\", \"a00335\"],\n- [\"PinholePose.h\", \"a00467.html\", \"a00467\"],\n- [\"PinholeSet.h\", \"a00383.html\", \"a00383\"],\n- [\"Point2.cpp\", \"a00476.html\", \"a00476\"],\n- [\"Point2.h\", \"a00449.html\", \"a00449\"],\n- [\"Point3.cpp\", \"a00395.html\", \"a00395\"],\n- [\"Point3.h\", \"a00344.html\", \"a00344\"],\n- [\"Pose2.cpp\", \"a00326.html\", null],\n- [\"Pose2.h\", \"a00398.html\", \"a00398\"],\n- [\"Pose3.cpp\", \"a00455.html\", null],\n- [\"Pose3.h\", \"a00341.html\", \"a00341\"],\n- [\"Quaternion.h\", \"a00293.html\", \"a00293\"],\n+ [\"Cyclic.cpp\", \"a00335.html\", null],\n+ [\"Cyclic.h\", \"a00278.html\", \"a00278\"],\n+ [\"EssentialMatrix.h\", \"a00362_source.html\", null],\n+ [\"Line3.h\", \"a00458.html\", \"a00458\"],\n+ [\"OrientedPlane3.h\", \"a00311_source.html\", null],\n+ [\"PinholeCamera.h\", \"a00350.html\", \"a00350\"],\n+ [\"PinholePose.h\", \"a00320.html\", \"a00320\"],\n+ [\"PinholeSet.h\", \"a00299.html\", \"a00299\"],\n+ [\"Point2.cpp\", \"a00443.html\", \"a00443\"],\n+ [\"Point2.h\", \"a00473.html\", \"a00473\"],\n+ [\"Point3.cpp\", \"a00440.html\", \"a00440\"],\n+ [\"Point3.h\", \"a00371.html\", \"a00371\"],\n+ [\"Pose2.cpp\", \"a00329.html\", null],\n+ [\"Pose2.h\", \"a00368.html\", \"a00368\"],\n+ [\"Pose3.cpp\", \"a00431.html\", null],\n+ [\"Pose3.h\", \"a00398.html\", \"a00398\"],\n+ [\"Quaternion.h\", \"a00428.html\", \"a00428\"],\n [\"Rot2.cpp\", \"a00434.html\", null],\n- [\"Rot2.h\", \"a00407.html\", \"a00407\"],\n- [\"Rot3.cpp\", \"a00347.html\", \"a00347\"],\n- [\"Rot3.h\", \"a00380.html\", \"a00380\"],\n- [\"Rot3M.cpp\", \"a00470.html\", null],\n- [\"Rot3Q.cpp\", \"a00308.html\", null],\n+ [\"Rot2.h\", \"a00365.html\", \"a00365\"],\n+ [\"Rot3.cpp\", \"a00281.html\", \"a00281\"],\n+ [\"Rot3.h\", \"a00332.html\", \"a00332\"],\n+ [\"Rot3M.cpp\", \"a00305.html\", null],\n+ [\"Rot3Q.cpp\", \"a00374.html\", null],\n [\"Similarity2.cpp\", \"a00479.html\", null],\n- [\"Similarity2.h\", \"a00431.html\", \"a00431\"],\n- [\"Similarity3.cpp\", \"a00425.html\", null],\n- [\"Similarity3.h\", \"a00458.html\", \"a00458\"],\n- [\"SimpleCamera.cpp\", \"a00473.html\", null],\n- [\"SimpleCamera.h\", \"a00299.html\", \"a00299\"],\n- [\"SO3.cpp\", \"a00365.html\", \"a00365\"],\n- [\"SO3.h\", \"a00437.html\", \"a00437\"],\n- [\"SO4.cpp\", \"a00386.html\", \"a00386\"],\n- [\"SO4.h\", \"a00287.html\", \"a00287\"],\n- [\"SOn-inl.h\", \"a00281.html\", null],\n- [\"SOn.cpp\", \"a00338.html\", null],\n- [\"SOn.h\", \"a00311.html\", \"a00311\"],\n- [\"SphericalCamera.h\", \"a00329.html\", \"a00329\"],\n- [\"StereoCamera.h\", \"a00377.html\", \"a00377\"],\n- [\"StereoPoint2.cpp\", \"a00362.html\", null],\n+ [\"Similarity2.h\", \"a00347.html\", \"a00347\"],\n+ [\"Similarity3.cpp\", \"a00356.html\", null],\n+ [\"Similarity3.h\", \"a00452.html\", \"a00452\"],\n+ [\"SimpleCamera.cpp\", \"a00425.html\", null],\n+ [\"SimpleCamera.h\", \"a00449.html\", \"a00449\"],\n+ [\"SO3.cpp\", \"a00419.html\", \"a00419\"],\n+ [\"SO3.h\", \"a00323.html\", \"a00323\"],\n+ [\"SO4.cpp\", \"a00404.html\", \"a00404\"],\n+ [\"SO4.h\", \"a00344.html\", \"a00344\"],\n+ [\"SOn-inl.h\", \"a00389.html\", null],\n+ [\"SOn.cpp\", \"a00455.html\", null],\n+ [\"SOn.h\", \"a00464.html\", \"a00464\"],\n+ [\"SphericalCamera.h\", \"a00413.html\", \"a00413\"],\n+ [\"StereoCamera.h\", \"a00341.html\", \"a00341\"],\n+ [\"StereoPoint2.cpp\", \"a00410.html\", null],\n [\"StereoPoint2.h\", \"a00401.html\", \"a00401\"],\n- [\"triangulation.h\", \"a00461.html\", \"a00461\"],\n- [\"Unit3.h\", \"a00389_source.html\", null]\n+ [\"triangulation.h\", \"a00359.html\", \"a00359\"],\n+ [\"Unit3.h\", \"a00353_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,22 +128,22 @@\n  slam\n  \n  symbolic\n  \n \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
       >
       precompiled_header.h
       >
       
      \n
    \n \n \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\", \"a01400.html\", null],\n- [\"precompiled_header.cpp\", \"a01397.html\", null],\n- [\"precompiled_header.h\", \"a01403.html\", null]\n+ [\"global_includes.h\", \"a01394.html\", null],\n+ [\"precompiled_header.cpp\", \"a01406.html\", null],\n+ [\"precompiled_header.h\", \"a01400.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,475 +100,475 @@\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
      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
     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
     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
     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
     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
     Chebyshev.hChebyshev 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.hPseudo-spectral parameterization for Chebyshev polynomials of the second kind
     FitBasis.hFit a Basis using least-squares
     Fourier.hFourier decomposition, see e.g
     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
      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
     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
     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
      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
     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
     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
     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
     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*)
     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
     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)
     triangulation.hFunctions for triangulation
     Unit3.h
     triangulation.hFunctions for triangulation
     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
     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
     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
     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
     Symbol.h
     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
     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
      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
     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
     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
     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
     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
     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
     expressions.hCommon expressions for solving navigation problems
     GPSFactor.cppImplementation file for GPS factor
     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
     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
     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
     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
     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
     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
     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
     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
     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
     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
     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
     StereoFactor.hA non-linear factor for stereo measurements
     TriangulationFactor.h
      symbolic
     SymbolicBayesNet.cpp
     SymbolicBayesNet.h
     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>
     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
      \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- a00023.html\n- gtsam/base/cholesky.h\n- gtsam/base/timing.h\n+ a00125.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- a00008.html\n- gtsam/base/Matrix.h\n+ a00140.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- a00005.html\n- gtsam/base/debug.h\n+ a00017.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- a00131.html\n- gtsam/base/FastMap.h\n- gtsam/global_includes.h\n+ a00038.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- a00029.html\n+ a00050.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- a00122.html\n- gtsam/base/DSFVector.h\n+ a00032.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- a00089.html\n- gtsam/global_includes.h\n+ a00011.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- a00056.html\n+ a00092.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- a00110.html\n- gtsam/base/FastDefaultAllocator.h\n+ a00113.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- a00071.html\n- gtsam/base/FastDefaultAllocator.h\n+ a00047.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- a00113.html\n- gtsam/base/FastDefaultAllocator.h\n- gtsam/base/Testable.h\n+ a00068.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- a00101.html\n- gtsam/base/FastDefaultAllocator.h\n+ a00071.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- a00098.html\n- gtsam/base/Testable.h\n+ a00077.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- a00098.html\n+ a00077.html\n aac1ea136475ea605715c809f4b3f0156\n (T)\n \n \n \n Lie.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00011.html\n- gtsam/base/Manifold.h\n- gtsam/base/Group.h\n+ a00062.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- a00011.html\n+ a00062.html\n aeef5af7d583d275fbc0e6e5af8bf2afc\n (T)\n \n \n \n lieProxies.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00074.html\n- gtsam/global_includes.h\n+ a00104.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- a00047.html\n- gtsam/base/types.h\n+ a00026.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- a00104.html\n- gtsam/base/Matrix.h\n- gtsam/base/Testable.h\n- gtsam/base/OptionalJacobian.h\n+ a00107.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- a00104.html\n+ a00107.html\n a64b5e2e3c812d2cdea5ee294100f825f\n (T)\n \n \n \n Matrix.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n a00080.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/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- a00146.html\n- gtsam/base/OptionalJacobian.h\n- gtsam/base/Vector.h\n+ a00119.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- a00026.html\n- gtsam/base/Matrix.h\n+ a00059.html\n+ gtsam/base/Matrix.h\n \n \n numericalDerivative.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00032.html\n- gtsam/linear/VectorValues.h\n- gtsam/linear/JacobianFactor.h\n- gtsam/nonlinear/Values.h\n- gtsam/base/Lie.h\n+ a00023.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- a00020.html\n+ a00149.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- a00095.html\n- gtsam/base/Lie.h\n+ a00002.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- a00134.html\n+ a00008.html\n gtsam\n \n void\n serializeToStream\n a01428.html\n a007080ca4741cc3d3d6a209b0ae3fe61\n (const T &input, std::ostream &out_archive_stream)\n@@ -593,224 +593,224 @@\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- a00050.html\n- gtsam/base/serialization.h\n+ a00143.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- a00086.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- a00137.html\n- gtsam/base/FastVector.h\n- gtsam/base/Matrix.h\n- gtsam/base/types.h\n+ a00089.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- a00083.html\n+ a00065.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- a00083.html\n+ a00065.html\n abe0a238cdd07d484ff0be56ae945b182\n (T)\n \n \n \n TestableAssertions.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00014.html\n- gtsam/base/Testable.h\n- gtsam/global_includes.h\n+ a00005.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- a00035.html\n+ a00056.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- a00017.html\n- gtsam/base/debug.h\n- gtsam/base/timing.h\n+ a00116.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- a00092.html\n- gtsam/base/FastMap.h\n- gtsam/base/types.h\n+ a00020.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 a00044.html\n- gtsam/base/FastList.h\n- gtsam/base/FastVector.h\n- gtsam/inference/Key.h\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- a00068.html\n- gtsam/base/types.h\n+ a00014.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- a00119.html\n+ a00098.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- a00119.html\n+ a00098.html\n a30d3af2da1ea940197addce4f3c223c8\n (CONDITION, EXCEPTION)\n \n \n #define\n GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n- a00119.html\n+ a00098.html\n aa123dd61687e08ae328154a1890b7b86\n \n \n \n #define\n GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF\n- a00119.html\n+ a00098.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- a00041.html\n- gtsam/base/Vector.h\n+ a00131.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- a00125.html\n- gtsam/base/Vector.h\n+ a00053.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- a00065.html\n- gtsam/global_includes.h\n+ a00146.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- a00002.html\n- gtsam/base/Vector.h\n+ a00101.html\n+ gtsam/base/Vector.h\n \n \n VerticalBlockMatrix.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00059.html\n- gtsam/base/VerticalBlockMatrix.h\n- gtsam/base/SymmetricBlockMatrix.h\n+ a00137.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- a00116.html\n- gtsam/base/Matrix.h\n- gtsam/base/MatrixSerialization.h\n- gtsam/base/FastVector.h\n+ a00029.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- a00140.html\n+ a00095.html\n gtsam::WeightedSampler\n gtsam\n \n \n Basis.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/\n- a00173.html\n- gtsam/base/Matrix.h\n- gtsam/base/OptionalJacobian.h\n+ a00158.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@@ -818,2153 +818,2153 @@\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- a00167.html\n- gtsam/basis/Basis.h\n- gtsam/nonlinear/FunctorizedFactor.h\n+ a00152.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- a00170.html\n- gtsam/basis/Chebyshev.h\n+ a00176.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- a00152.html\n- gtsam/base/Manifold.h\n- gtsam/basis/Basis.h\n+ a00161.html\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 a00164.html\n- gtsam/basis/Chebyshev2.h\n+ gtsam/basis/Chebyshev2.h\n gtsam\n \n \n Chebyshev2.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/\n- a00161.html\n- gtsam/base/Manifold.h\n- gtsam/base/OptionalJacobian.h\n- gtsam/basis/Basis.h\n+ a00170.html\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- a00176.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+ a00173.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- a00158.html\n- gtsam/basis/Basis.h\n+ a00167.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 a00155.html\n- gtsam/base/Matrix.h\n- gtsam/base/Testable.h\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- a00257.html\n- AlgebraicDecisionTree.h\n- gtsam/base/types.h\n+ a00206.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- a00227.html\n- gtsam/base/Testable.h\n+ a00242.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- a00272.html\n+ a00221.html\n gtsam::Assignment\n gtsam\n \n \n DecisionTree.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00221.html\n- gtsam/base/Testable.h\n- gtsam/base/types.h\n- gtsam/discrete/Assignment.h\n+ a00272.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- a00197.html\n- gtsam/base/FastSet.h\n- gtsam/hybrid/HybridValues.h\n- gtsam/discrete/DecisionTreeFactor.h\n- gtsam/discrete/DiscreteConditional.h\n+ a00257.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- a00251.html\n- gtsam/discrete/AlgebraicDecisionTree.h\n- gtsam/discrete/DiscreteFactor.h\n- gtsam/discrete/DiscreteKey.h\n- gtsam/inference/Ordering.h\n+ a00212.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- a00191.html\n- gtsam/discrete/DiscreteBayesNet.h\n- gtsam/discrete/DiscreteConditional.h\n- gtsam/inference/FactorGraph-inst.h\n+ a00263.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- a00233.html\n- gtsam/discrete/DiscreteConditional.h\n- gtsam/discrete/DiscreteDistribution.h\n- gtsam/inference/BayesNet.h\n- gtsam/inference/FactorGraph.h\n+ a00182.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- a00245.html\n+ a00269.html\n gtsam/base/treeTraversal-inst.h\n- gtsam/inference/BayesTree-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- a00212.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+ a00230.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- a00242.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+ a00239.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- a00215.html\n- gtsam/discrete/DecisionTreeFactor.h\n- gtsam/discrete/Signature.h\n+ a00236.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- a00179.html\n- gtsam/discrete/DiscreteDistribution.h\n+ a00203.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- a00185.html\n- gtsam/discrete/DiscreteConditional.h\n+ a00194.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- a00218.html\n- gtsam/inference/EliminationTree-inst.h\n- gtsam/discrete/DiscreteEliminationTree.h\n+ a00227.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- a00260.html\n- gtsam/discrete/DiscreteBayesNet.h\n- gtsam/discrete/DiscreteFactorGraph.h\n- gtsam/inference/EliminationTree.h\n+ a00245.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- a00209.html\n- gtsam/base/Vector.h\n- gtsam/discrete/DiscreteFactor.h\n- gtsam/hybrid/HybridValues.h\n+ a00188.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- a00263.html\n- gtsam/discrete/DiscreteValues.h\n- gtsam/inference/Factor.h\n- gtsam/base/Testable.h\n+ a00251.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- a00182.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+ a00191.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+ a00200.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- a00224.html\n- gtsam/inference/JunctionTree-inst.h\n- gtsam/discrete/DiscreteJunctionTree.h\n- gtsam/discrete/DiscreteEliminationTree.h\n+ a00197.html\n+ gtsam/inference/JunctionTree-inst.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- a00203.html\n- gtsam/discrete/DiscreteFactorGraph.h\n- gtsam/discrete/DiscreteBayesTree.h\n- gtsam/inference/JunctionTree.h\n+ a00254.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- a00239.html\n- gtsam/global_includes.h\n- gtsam/inference/Key.h\n+ a00185.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- a00188.html\n- gtsam/discrete/DiscreteBayesNet.h\n- gtsam/discrete/DiscreteLookupDAG.h\n- gtsam/discrete/DiscreteValues.h\n+ a00248.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- a00248.html\n- gtsam/discrete/DiscreteDistribution.h\n- gtsam/inference/BayesNet.h\n- gtsam/inference/FactorGraph.h\n+ a00266.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- a00269.html\n- gtsam/discrete/DiscreteFactorGraph.h\n- gtsam/discrete/DiscreteBayesTree.h\n- gtsam/base/Vector.h\n+ a00218.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- a00206.html\n- gtsam/discrete/DiscreteValues.h\n+ a00233.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- a00194.html\n- gtsam/discrete/Assignment.h\n- gtsam/discrete/DiscreteKey.h\n- gtsam/inference/Key.h\n+ a00215.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- a00254.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- a00236.html\n- gtsam/discrete/DiscreteKey.h\n+ a00179.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- a00368.html\n- gtsam/base/Manifold.h\n- gtsam/base/Testable.h\n- gtsam/base/OptionalJacobian.h\n+ a00302.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- a00371.html\n- gtsam/geometry/Cal3.h\n+ a00275.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- a00353.html\n- gtsam/geometry/Point2.h\n+ a00407.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- a00410.html\n- gtsam/geometry/Cal3_S2.h\n+ a00383.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- a00284.html\n- gtsam/geometry/Cal3.h\n- gtsam/geometry/Point2.h\n+ a00416.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- a00278.html\n- gtsam/geometry/Cal3_S2Stereo.h\n+ a00377.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- a00302.html\n- gtsam/geometry/Cal3_S2.h\n+ a00296.html\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- a00323.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+ a00338.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- a00314.html\n- gtsam/geometry/Cal3.h\n- gtsam/geometry/Point2.h\n+ a00317.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- a00320.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+ a00380.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- a00404.html\n+ a00284.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- a00413.html\n- gtsam/base/Matrix.h\n- gtsam/base/Vector.h\n- gtsam/geometry/Point2.h\n- gtsam/geometry/Point3.h\n+ a00422.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- a00374.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+ a00446.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- a00359.html\n- gtsam/geometry/Cal3.h\n- gtsam/geometry/Point2.h\n+ a00326.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- a00392.html\n- gtsam/base/Matrix.h\n- gtsam/base/Vector.h\n- gtsam/geometry/Cal3Unified.h\n- gtsam/geometry/Point2.h\n+ a00461.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- a00305.html\n+ a00467.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- a00416.html\n- gtsam/geometry/Pose2.h\n- gtsam/geometry/CalibratedCamera.h\n+ a00314.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- a00446.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+ a00290.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- a00296.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+ a00293.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- a00443.html\n- gtsam/geometry/Cyclic.h\n+ a00335.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- a00317.html\n- gtsam/base/Group.h\n- gtsam/base/Testable.h\n+ a00278.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- a00422.html\n- gtsam/geometry/Rot3.h\n- gtsam/geometry/Pose3.h\n+ a00458.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- a00335.html\n- gtsam/geometry/PinholePose.h\n- gtsam/geometry/BearingRange.h\n+ a00350.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- a00467.html\n- gtsam/geometry/CalibratedCamera.h\n- gtsam/geometry/Point2.h\n+ a00320.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- a00383.html\n- gtsam/geometry/CameraSet.h\n- gtsam/geometry/triangulation.h\n+ a00299.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- a00476.html\n- gtsam/geometry/Point2.h\n+ a00443.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- a00449.html\n+ a00473.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- a00395.html\n- gtsam/geometry/Point3.h\n+ a00440.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- a00344.html\n- gtsam/base/Vector.h\n- gtsam/base/VectorSerialization.h\n+ a00371.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- a00326.html\n+ a00329.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- a00398.html\n- gtsam/geometry/BearingRange.h\n- gtsam/geometry/Point2.h\n- gtsam/geometry/Rot2.h\n- gtsam/base/Lie.h\n+ a00368.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- a00455.html\n- gtsam/geometry/Pose3.h\n- gtsam/geometry/Pose2.h\n+ a00431.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- a00341.html\n- gtsam/geometry/BearingRange.h\n- gtsam/geometry/Point3.h\n- gtsam/geometry/Rot3.h\n- gtsam/base/Lie.h\n+ a00398.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- a00293.html\n- gtsam/base/Lie.h\n- gtsam/geometry/SO3.h\n+ a00428.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 a00434.html\n- gtsam/geometry/Rot2.h\n+ gtsam/geometry/Rot2.h\n gtsam\n \n \n Rot2.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00407.html\n- gtsam/geometry/Point2.h\n- gtsam/base/Lie.h\n+ a00365.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- a00347.html\n- gtsam/geometry/Rot3.h\n- gtsam/geometry/SO3.h\n+ a00281.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- a00380.html\n- gtsam/geometry/Quaternion.h\n- gtsam/geometry/SO3.h\n+ a00332.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- a00470.html\n- gtsam/geometry/Rot3.h\n- gtsam/geometry/SO3.h\n+ a00305.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- a00308.html\n+ a00374.html\n \n \n Similarity2.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n a00479.html\n- gtsam/base/Manifold.h\n- gtsam/geometry/Pose2.h\n- gtsam/geometry/Rot3.h\n- gtsam/geometry/Similarity2.h\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- a00431.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+ a00347.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- a00425.html\n- gtsam/geometry/Similarity3.h\n- gtsam/geometry/Pose3.h\n- gtsam/base/Manifold.h\n+ a00356.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- a00458.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+ a00452.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- a00473.html\n- gtsam/geometry/SimpleCamera.h\n- gtsam/geometry/Cal3_S2.h\n+ a00425.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- a00299.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+ a00449.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- a00365.html\n- gtsam/geometry/SO3.h\n+ a00419.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- a00437.html\n- gtsam/geometry/SOn.h\n- gtsam/base/Lie.h\n- gtsam/base/Matrix.h\n+ a00323.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- a00386.html\n- gtsam/base/timing.h\n- gtsam/geometry/SO4.h\n+ a00404.html\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- a00287.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+ a00344.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- a00281.html\n- gtsam/base/Matrix.h\n+ a00389.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- a00338.html\n- gtsam/geometry/SOn.h\n+ a00455.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- a00311.html\n- gtsam/base/Lie.h\n- gtsam/base/Manifold.h\n- gtsam/base/make_shared.h\n- SOn-inl.h\n+ a00464.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- a00329.html\n- gtsam/base/Manifold.h\n- gtsam/base/ThreadsafeException.h\n- gtsam/geometry/BearingRange.h\n- gtsam/geometry/Pose3.h\n+ a00413.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- a00377.html\n- gtsam/geometry/Cal3_S2Stereo.h\n- gtsam/geometry/Pose3.h\n+ a00341.html\n+ gtsam/geometry/Cal3_S2Stereo.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- a00362.html\n+ a00410.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 a00401.html\n- gtsam/geometry/Point2.h\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- a00461.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+ a00359.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/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- a01400.html\n- gtsam/base/types.h\n+ a01394.html\n+ gtsam/base/types.h\n \n \n GaussianMixture.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00551.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+ a00494.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- a00482.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+ a00554.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- a00533.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+ a00518.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- a00563.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+ a00560.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- a00491.html\n- gtsam/discrete/DiscreteBayesNet.h\n- gtsam/discrete/DiscreteFactorGraph.h\n- gtsam/hybrid/HybridBayesNet.h\n- gtsam/hybrid/HybridValues.h\n+ a00485.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- a00524.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+ a00539.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- a00512.html\n+ a00527.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/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+ a00524.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- a00509.html\n- gtsam/hybrid/HybridConditional.h\n- gtsam/hybrid/HybridFactor.h\n- gtsam/hybrid/HybridValues.h\n- gtsam/inference/Key.h\n+ a00482.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- 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+ a00536.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+ a00488.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- a00542.html\n- gtsam/hybrid/HybridBayesNet.h\n- gtsam/hybrid/HybridGaussianFactorGraph.h\n- gtsam/inference/EliminationTree.h\n+ a00521.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- a00566.html\n- gtsam/hybrid/HybridFactor.h\n+ a00563.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- a00557.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+ a00551.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- a00521.html\n- gtsam/discrete/DecisionTreeFactor.h\n- gtsam/hybrid/HybridFactorGraph.h\n+ a00569.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- a00518.html\n- gtsam/hybrid/HybridFactor.h\n- gtsam/inference/FactorGraph.h\n+ a00497.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- a00485.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+ a00542.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- a00548.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+ a00503.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- a00536.html\n- gtsam/base/Testable.h\n- gtsam/hybrid/HybridBayesTree.h\n- gtsam/hybrid/HybridGaussianFactorGraph.h\n- gtsam/inference/ISAM.h\n+ a00491.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- a00500.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+ a00509.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\n \n \n HybridJunctionTree.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00488.html\n- gtsam/hybrid/HybridBayesTree.h\n- gtsam/hybrid/HybridGaussianFactorGraph.h\n- gtsam/inference/JunctionTree.h\n+ a00506.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- a00569.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+ a00557.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- a00554.html\n- gtsam/hybrid/HybridFactorGraph.h\n+ a00500.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- a00506.html\n- gtsam/hybrid/HybridGaussianFactorGraph.h\n- gtsam/hybrid/HybridNonlinearISAM.h\n- gtsam/inference/Ordering.h\n+ a00533.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- a00503.html\n- gtsam/hybrid/HybridGaussianISAM.h\n- gtsam/hybrid/HybridNonlinearFactorGraph.h\n+ a00530.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- a00530.html\n- gtsam/hybrid/HybridSmoother.h\n+ a00548.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- a00539.html\n- gtsam/discrete/DiscreteFactorGraph.h\n- gtsam/hybrid/HybridBayesNet.h\n- gtsam/hybrid/HybridGaussianFactorGraph.h\n+ a00512.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- a00497.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+ a00515.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- a00527.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+ a00545.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- a00644.html\n- gtsam/inference/FactorGraph.h\n+ a00683.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- a00701.html\n- gtsam/inference/Ordering.h\n- gtsam/inference/BayesTree.h\n+ a00671.html\n+ gtsam/inference/Ordering.h\n+ gtsam/inference/BayesTree.h\n gtsam/base/treeTraversal-inst.h\n- gtsam/base/timing.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- a00698.html\n- gtsam/inference/BayesTree.h\n+ a00626.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- a00575.html\n- gtsam/inference/Key.h\n- gtsam/base/FastList.h\n- gtsam/base/FastVector.h\n+ a00587.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 a00623.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- a00680.html\n- gtsam/inference/Key.h\n- gtsam/inference/Ordering.h\n- gtsam/base/types.h\n- gtsam/base/FastVector.h\n+ a00674.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- a00695.html\n- gtsam/inference/ClusterTree.h\n- gtsam/inference/BayesTree.h\n- gtsam/inference/Ordering.h\n- gtsam/base/timing.h\n+ a00701.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- a00635.html\n- gtsam/base/Testable.h\n- gtsam/base/FastVector.h\n- gtsam/inference/Ordering.h\n- gtsam/inference/ClusterTree-inst.h\n+ a00572.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- a00587.html\n- gtsam/inference/Key.h\n+ a00665.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- a00692.html\n+ a00644.html\n gtsam/inference/DotWriter.h\n- gtsam/base/Vector.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 a00596.html\n- gtsam/base/FastVector.h\n- gtsam/base/Vector.h\n- gtsam/inference/Key.h\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- a00602.html\n- gtsam/inference/Ordering.h\n- gtsam/inference/VariableIndex.h\n+ a00647.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- a00659.html\n- gtsam/base/timing.h\n+ a00605.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/EliminationTree.h\n+ gtsam/inference/VariableIndex.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- a00653.html\n- gtsam/base/Testable.h\n- gtsam/base/FastVector.h\n+ a00608.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 a00638.html\n- gtsam/inference/Factor.h\n+ gtsam/inference/Factor.h\n gtsam\n \n \n Factor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00641.html\n- gtsam/base/types.h\n- gtsam/base/FastVector.h\n- gtsam/inference/Key.h\n+ a00659.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- a00593.html\n- gtsam/inference/FactorGraph.h\n+ a00635.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- a00611.html\n+ a00641.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/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- a00572.html\n- gtsam/nonlinear/Values.h\n+ a00575.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- a00626.html\n+ a00593.html\n gtsam/base/treeTraversal-inst.h\n- gtsam/base/FastVector.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- a00674.html\n- gtsam/global_includes.h\n+ a00653.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- a00647.html\n- gtsam/inference/ISAM.h\n- gtsam/inference/VariableIndex.h\n+ a00578.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- a00662.html\n- gtsam/global_includes.h\n+ a00698.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- a00620.html\n- gtsam/inference/JunctionTree.h\n- gtsam/inference/ClusterTree-inst.h\n- gtsam/symbolic/SymbolicConditional.h\n- gtsam/symbolic/SymbolicFactor-inst.h\n+ a00584.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::ConstructorTraversalData\n gtsam::ConstructorTraversalData::SymbolicFactors\n gtsam\n \n \n JunctionTree.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00632.html\n- gtsam/inference/ClusterTree.h\n+ a00614.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- a00581.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+ 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 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- a00665.html\n+ a00677.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- a00614.html\n+ a00668.html\n gtsam\n \n \n MetisIndex.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00599.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+ a00689.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- a00584.html\n- gtsam/inference/Ordering.h\n+ a00617.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- a00668.html\n- gtsam/inference/Key.h\n- gtsam/inference/VariableIndex.h\n- gtsam/inference/MetisIndex.h\n- gtsam/base/FastSet.h\n+ a00629.html\n+ gtsam/inference/Key.h\n+ gtsam/inference/VariableIndex.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- a00677.html\n+ a00686.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- a00656.html\n- gtsam/inference/VariableIndex.h\n- gtsam/base/timing.h\n+ a00599.html\n+ gtsam/inference/VariableIndex.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- a00650.html\n- gtsam/inference/VariableIndex.h\n+ a00611.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- a00683.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+ a00590.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::VariableIndex\n gtsam::traits< VariableIndex >\n gtsam\n \n \n VariableSlots.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00629.html\n- gtsam/inference/VariableSlots.h\n+ a00620.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- a00590.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+ a00695.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- a00812.html\n- gtsam/linear/PowerMethod.h\n+ a00776.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- a00803.html\n- gtsam/linear/JacobianFactor.h\n- gtsam/base/SymmetricBlockMatrix.h\n- gtsam/base/timing.h\n+ a00719.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- a00815.html\n- gtsam/linear/IterativeSolver.h\n+ a00704.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- a00791.html\n- gtsam/linear/Errors.h\n- gtsam/linear/VectorValues.h\n+ a00761.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- a00857.html\n- gtsam/base/FastList.h\n- gtsam/base/Testable.h\n- gtsam/base/Vector.h\n+ a00728.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- a00746.html\n- gtsam/base/timing.h\n- gtsam/inference/FactorGraph-inst.h\n- gtsam/linear/GaussianBayesNet.h\n- gtsam/linear/GaussianFactorGraph.h\n+ a00890.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- a00848.html\n- gtsam/linear/GaussianConditional.h\n- gtsam/inference/BayesNet.h\n- gtsam/inference/FactorGraph.h\n- gtsam/global_includes.h\n+ a00809.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- a00704.html\n- gtsam/linear/GaussianBayesTree.h\n+ a00827.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- a00734.html\n+ a00830.html\n gtsam/base/treeTraversal-inst.h\n- gtsam/inference/BayesTree-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- a00773.html\n- gtsam/linear/GaussianBayesNet.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/inference/BayesTree.h\n- gtsam/inference/BayesTreeCliqueBase.h\n+ a00782.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- a00737.html\n+ a00716.html\n gtsam\n \n \n GaussianConditional.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00716.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+ a00824.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- a00833.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+ a00866.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- a00806.html\n- gtsam/linear/GaussianDensity.h\n+ a00893.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- a00785.html\n- gtsam/linear/GaussianConditional.h\n+ a00752.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- a00887.html\n- gtsam/inference/EliminationTree-inst.h\n- gtsam/linear/GaussianEliminationTree.h\n+ a00767.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- a00713.html\n- gtsam/linear/GaussianBayesNet.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/inference/EliminationTree.h\n+ a00740.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- a00839.html\n- gtsam/hybrid/HybridValues.h\n- gtsam/linear/GaussianFactor.h\n- gtsam/linear/VectorValues.h\n+ a00731.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- a00788.html\n- gtsam/inference/Factor.h\n- gtsam/base/Matrix.h\n- gtsam/base/Testable.h\n+ a00803.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- a00836.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+ a00875.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- a00899.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+ a00725.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- a00866.html\n- gtsam/linear/GaussianBayesTree.h\n- gtsam/inference/ISAM.h\n- gtsam/base/Testable.h\n+ a00845.html\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- a00827.html\n- gtsam/inference/JunctionTree-inst.h\n- gtsam/linear/GaussianJunctionTree.h\n- gtsam/linear/GaussianEliminationTree.h\n+ a00851.html\n+ gtsam/inference/JunctionTree-inst.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- a00878.html\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/GaussianBayesTree.h\n- gtsam/inference/JunctionTree.h\n+ a00815.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- a00872.html\n+ a00899.html\n gtsam\n \n \n HessianFactor.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00707.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+ a00848.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- a00752.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+ a00887.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- a00722.html\n- gtsam/linear/iterative.h\n- gtsam/linear/ConjugateGradientSolver.h\n+ a00872.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- a00851.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+ a00797.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- a00881.html\n- gtsam/base/Matrix.h\n- gtsam/linear/VectorValues.h\n- gtsam/linear/ConjugateGradientSolver.h\n- gtsam/linear/iterative-inl.h\n+ a00770.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 a00779.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- a00797.html\n- gtsam/inference/Ordering.h\n- gtsam/base/Vector.h\n+ a00713.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- a00719.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+ a00878.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- a00761.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+ a00833.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- a00809.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+ a00836.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- a00863.html\n- gtsam/linear/GaussianDensity.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/NoiseModel.h\n+ a00884.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- a00821.html\n- gtsam/linear/VectorValues.h\n- gtsam/linear/GaussianConditional.h\n+ a00806.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- a00818.html\n- gtsam/linear/linearExceptions.h\n+ a00839.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- a00749.html\n- gtsam/base/ThreadsafeException.h\n- gtsam/base/types.h\n+ a00722.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- a00740.html\n- gtsam/linear/NoiseModel.h\n- gtsam/base/timing.h\n+ a00791.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- a00755.html\n- gtsam/base/Testable.h\n- gtsam/base/Matrix.h\n+ a00788.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- a00758.html\n- gtsam/base/Matrix.h\n- gtsam/base/Vector.h\n+ a00800.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- a00893.html\n- gtsam/linear/HessianFactor.h\n- gtsam/linear/RegularJacobianFactor.h\n+ a00764.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- a00725.html\n- gtsam/linear/JacobianFactor.h\n- gtsam/linear/VectorValues.h\n+ a00896.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- a00800.html\n- gtsam/linear/Sampler.h\n+ a00881.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- a00860.html\n- gtsam/linear/NoiseModel.h\n+ a00794.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- a00854.html\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/Scatter.h\n- gtsam/inference/Ordering.h\n+ a00755.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- a00764.html\n- gtsam/inference/Key.h\n- gtsam/base/FastMap.h\n+ a00749.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- a00767.html\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/VectorValues.h\n+ a00863.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- a00875.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+ a00746.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\n \n \n SubgraphBuilder.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00842.html\n- gtsam/base/FastMap.h\n- gtsam/base/types.h\n+ a00857.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- a00743.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+ a00773.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- a00896.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+ a00860.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- a00869.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+ a00710.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- a00794.html\n- gtsam/linear/ConjugateGradientSolver.h\n- gtsam/linear/SubgraphBuilder.h\n+ a00818.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- a00710.html\n- gtsam/linear/VectorValues.h\n+ a00821.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- a00830.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+ a00869.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- a00917.html\n- gtsam/navigation/AHRSFactor.h\n+ a00935.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- a00941.html\n- gtsam/navigation/PreintegratedRotation.h\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/geometry/Pose3.h\n+ a00932.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- a00914.html\n- AttitudeFactor.h\n+ a00965.html\n+ AttitudeFactor.h\n gtsam\n \n \n AttitudeFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00974.html\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/geometry/Pose3.h\n+ a00911.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- a00989.html\n- BarometricFactor.h\n+ a00971.html\n+ BarometricFactor.h\n gtsam\n \n \n BarometricFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00998.html\n- gtsam/geometry/Pose3.h\n- gtsam/navigation/NavState.h\n- gtsam/nonlinear/NonlinearFactor.h\n+ a00983.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- a00923.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- a00938.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+ a00947.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- a00926.html\n- gtsam/navigation/NavState.h\n- gtsam/nonlinear/NonlinearFactor.h\n+ a00998.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- a00971.html\n+ a00977.html\n GPSFactor.h\n gtsam\n \n \n GPSFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n a00995.html\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/navigation/NavState.h\n- gtsam/geometry/Pose3.h\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- a00956.html\n- ImuBias.h\n- gtsam/geometry/Point3.h\n+ a00929.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- a00944.html\n- gtsam/base/OptionalJacobian.h\n+ a00953.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- a00911.html\n- gtsam/navigation/ImuFactor.h\n+ a00962.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- a00986.html\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/navigation/ManifoldPreintegration.h\n- gtsam/navigation/TangentPreintegration.h\n- gtsam/base/debug.h\n+ a00926.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- a00980.html\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/geometry/Rot2.h\n- gtsam/geometry/Rot3.h\n+ a00992.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- a00935.html\n- ManifoldPreintegration.h\n+ a00959.html\n+ ManifoldPreintegration.h\n gtsam\n \n \n ManifoldPreintegration.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00992.html\n- gtsam/navigation/NavState.h\n- gtsam/navigation/PreintegrationBase.h\n+ a00905.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- a00959.html\n- gtsam/geometry/Pose3.h\n- gtsam/base/Vector.h\n- gtsam/base/Manifold.h\n+ a00986.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- a00968.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- a00908.html\n- gtsam/geometry/Pose3.h\n- gtsam/base/Matrix.h\n+ a00917.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- a00983.html\n- gtsam/navigation/PreintegrationParams.h\n- gtsam/navigation/NavState.h\n- gtsam/navigation/ImuBias.h\n- gtsam/linear/NoiseModel.h\n+ a00938.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- a00905.html\n- gtsam/navigation/PreintegratedRotation.h\n+ a00923.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- a00932.html\n- gtsam/linear/NoiseModel.h\n- gtsam/navigation/NavState.h\n+ a00968.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- a00920.html\n- gtsam/linear/Sampler.h\n- gtsam/navigation/CombinedImuFactor.h\n- gtsam/navigation/ImuFactor.h\n- gtsam/navigation/Scenario.h\n+ a00908.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- a00965.html\n- TangentPreintegration.h\n- gtsam/base/numericalDerivative.h\n+ a00980.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- a00977.html\n- gtsam/navigation/PreintegrationBase.h\n+ a00956.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- a01151.html\n- gtsam/nonlinear/CustomFactor.h\n+ a01142.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- a01031.html\n- gtsam/nonlinear/NonlinearFactor.h\n+ a01127.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- a01034.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+ a01121.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- a01076.html\n- gtsam/nonlinear/NonlinearOptimizer.h\n+ a01040.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- a01124.html\n- gtsam/linear/VectorValues.h\n- gtsam/inference/Ordering.h\n+ a01022.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- a01106.html\n+ a01118.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- a01055.html\n+ a01064.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- a01148.html\n- gtsam/nonlinear/NonlinearFactorGraph.h\n+ a01001.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- a01154.html\n- gtsam/nonlinear/factorTesting.h\n- gtsam/base/Testable.h\n+ a01169.html\n+ gtsam/nonlinear/factorTesting.h\n+ gtsam/base/Testable.h\n gtsam\n \n #define\n EXPECT_CORRECT_EXPRESSION_JACOBIANS\n- a01154.html\n+ a01169.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- a01163.html\n- gtsam/nonlinear/ExtendedKalmanFilter.h\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/linear/GaussianBayesNet.h\n- gtsam/linear/GaussianFactorGraph.h\n+ a01124.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- a01013.html\n- gtsam/nonlinear/NonlinearFactorGraph.h\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/nonlinear/ExtendedKalmanFilter-inl.h\n+ a01058.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- a01010.html\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/base/numericalDerivative.h\n+ a01070.html\n+ gtsam/nonlinear/NonlinearFactor.h\n+ gtsam/base/numericalDerivative.h\n gtsam\n \n #define\n EXPECT_CORRECT_FACTOR_JACOBIANS\n- a01010.html\n+ a01070.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- a01157.html\n- gtsam/base/Testable.h\n- gtsam/nonlinear/NonlinearFactor.h\n+ a01004.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- a01133.html\n- gtsam/nonlinear/GaussNewtonOptimizer.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/VectorValues.h\n+ a01130.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- a01067.html\n- gtsam/nonlinear/NonlinearOptimizer.h\n+ a01025.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- a01166.html\n- gtsam/nonlinear/NonlinearFactorGraph.h\n+ a01049.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- a01073.html\n- gtsam/nonlinear/GraphvizFormatting.h\n- gtsam/nonlinear/Values.h\n- gtsam/geometry/Pose2.h\n- gtsam/geometry/Pose3.h\n+ a01028.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- a01064.html\n+ a01052.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 a01043.html\n- gtsam/base/debug.h\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- a01139.html\n- gtsam/nonlinear/ISAM2.h\n- gtsam/nonlinear/ISAM2Result.h\n- gtsam/base/debug.h\n- gtsam/inference/JunctionTree-inst.h\n+ a01115.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/inference/VariableIndex.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- a01082.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+ a01088.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- a01142.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+ 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 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- a01103.html\n+ a01172.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- a01040.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+ a01151.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- a01052.html\n- gtsam/nonlinear/ISAM2Params.h\n+ a01016.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- a01025.html\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/nonlinear/DoglegOptimizerImpl.h\n+ a01019.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- a01115.html\n- gtsam/linear/GaussianBayesTree.h\n- gtsam/nonlinear/DoglegOptimizerImpl.h\n- gtsam/nonlinear/ISAM2Params.h\n- gtsam/nonlinear/NonlinearFactorGraph.h\n+ a01094.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- a01061.html\n- gtsam/base/FastList.h\n- gtsam/inference/Key.h\n- gtsam/nonlinear/ISAM2Result.h\n+ a01046.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- a01091.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+ a01139.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- a01085.html\n- gtsam/nonlinear/NonlinearOptimizer.h\n- gtsam/nonlinear/LevenbergMarquardtParams.h\n- gtsam/linear/VectorValues.h\n+ a01106.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- a01079.html\n- gtsam/nonlinear/LevenbergMarquardtParams.h\n+ a01103.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- a01121.html\n- gtsam/nonlinear/NonlinearOptimizerParams.h\n- gtsam/nonlinear/NonlinearFactorGraph.h\n+ a01157.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- a01058.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+ a01067.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- a01172.html\n- gtsam/nonlinear/NonlinearFactorGraph.h\n+ a01034.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- a01130.html\n- gtsam/base/timing.h\n- gtsam/linear/JacobianFactor.h\n- gtsam/linear/HessianFactor.h\n- gtsam/nonlinear/Marginals.h\n+ a01109.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- a01070.html\n- gtsam/linear/GaussianBayesTree.h\n- gtsam/nonlinear/NonlinearFactorGraph.h\n- gtsam/nonlinear/Values.h\n+ a01061.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- a01046.html\n- gtsam/nonlinear/NonlinearConjugateGradientOptimizer.h\n- gtsam/nonlinear/Values.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/VectorValues.h\n+ a01055.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- a01160.html\n- gtsam/base/Manifold.h\n- gtsam/nonlinear/NonlinearOptimizer.h\n+ a01097.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- a01100.html\n- gtsam/inference/Key.h\n+ a01073.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 a01136.html\n- gtsam/hybrid/HybridValues.h\n- gtsam/nonlinear/NonlinearFactor.h\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- a01169.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+ a01013.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- a01022.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+ a01166.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- a01094.html\n- gtsam/geometry/Point2.h\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/nonlinear/GraphvizFormatting.h\n- gtsam/inference/FactorGraph.h\n+ a01112.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- a01145.html\n- gtsam/nonlinear/NonlinearISAM.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/inference/Ordering.h\n+ a01091.html\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- a01118.html\n- gtsam/nonlinear/NonlinearFactorGraph.h\n- gtsam/linear/GaussianISAM.h\n+ a01010.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- a01049.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+ a01100.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- a01019.html\n- gtsam/nonlinear/NonlinearFactorGraph.h\n- gtsam/nonlinear/NonlinearOptimizerParams.h\n+ a01082.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- a01001.html\n- gtsam/nonlinear/NonlinearOptimizerParams.h\n+ a01076.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- a01127.html\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/SubgraphSolver.h\n+ a01031.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- a01004.html\n- gtsam/base/FastDefaultAllocator.h\n- gtsam/inference/Key.h\n+ a01037.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- a01088.html\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/linear/HessianFactor.h\n+ a01007.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- a01397.html\n- precompiled_header.h\n+ a01406.html\n+ precompiled_header.h\n \n \n precompiled_header.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/\n- a01403.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+ a01400.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 \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- a01211.html\n- gtsam/base/Testable.h\n- gtsam/inference/Factor.h\n- gtsam/inference/Key.h\n- gtsam/linear/NoiseModel.h\n+ a01193.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- a01208.html\n- gtsam/sfm/DsfTrackGenerator.h\n+ a01190.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- a01220.html\n- gtsam/base/DSFMap.h\n- gtsam/sfm/SfmTrack.h\n+ a01199.html\n+ gtsam/base/DSFMap.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 a01184.html\n- gtsam/sfm/MFAS.h\n+ gtsam/sfm/MFAS.h\n \n \n MFAS.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/\n- a01199.html\n- gtsam/inference/Key.h\n- gtsam/sfm/BinaryMeasurement.h\n+ a01223.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- a01193.html\n+ a01232.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- a01217.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+ a01208.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- a01205.html\n- gtsam/sfm/SfmTrack.h\n+ a01202.html\n+ gtsam/sfm/SfmTrack.h\n gtsam\n \n \n SfmTrack.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/\n- a01202.html\n- gtsam/base/serialization.h\n- gtsam/geometry/Point2.h\n- gtsam/geometry/Point3.h\n+ a01211.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 a01214.html\n- gtsam/linear/SubgraphPreconditioner.h\n- gtsam/nonlinear/LevenbergMarquardtOptimizer.h\n- gtsam/nonlinear/NonlinearFactorGraph.h\n- gtsam/sfm/ShonanAveraging.h\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/slam/FrobeniusFactor.h\n gtsam\n \n \n ShonanAveraging.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/\n- a01223.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+ a01220.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 a01196.html\n- gtsam/geometry/Rot2.h\n- gtsam/geometry/Rot3.h\n- gtsam/geometry/SOn.h\n- gtsam/nonlinear/NonlinearFactor.h\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 a01229.html\n- gtsam/geometry/SOn.h\n- gtsam/linear/JacobianFactor.h\n- gtsam/nonlinear/NonlinearFactor.h\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- a01190.html\n- gtsam/geometry/Point3.h\n- gtsam/linear/NoiseModel.h\n- gtsam/nonlinear/NonlinearFactor.h\n+ a01205.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- a01226.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/sfm/TranslationRecovery.h\n- gtsam/slam/BetweenFactor.h\n+ a01217.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/sfm/TranslationRecovery.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- a01187.html\n- gtsam/nonlinear/LevenbergMarquardtOptimizer.h\n- gtsam/nonlinear/Values.h\n- gtsam/sfm/BinaryMeasurement.h\n+ a01226.html\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- a01256.html\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/linear/GaussianFactor.h\n+ a01262.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- a01274.html\n- gtsam/base/Testable.h\n- gtsam/base/Lie.h\n- gtsam/nonlinear/NonlinearFactor.h\n+ a01241.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- a01319.html\n- gtsam/base/Lie.h\n- gtsam/nonlinear/NonlinearFactor.h\n+ a01340.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- a01247.html\n+ a01289.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- a01301.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+ a01247.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- a01259.html\n- gtsam/slam/EssentialMatrixConstraint.h\n+ a01265.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- a01337.html\n- gtsam/nonlinear/NonlinearFactor.h\n+ a01256.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- a01235.html\n- gtsam/slam/FrobeniusFactor.h\n+ a01328.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- a01295.html\n- gtsam/geometry/Rot2.h\n- gtsam/geometry/Rot3.h\n- gtsam/geometry/SOn.h\n- gtsam/nonlinear/NonlinearFactor.h\n+ a01337.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- a01280.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+ a01250.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- a01328.html\n+ a01283.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- a01331.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- a01292.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+ a01274.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- a01289.html\n- gtsam/nonlinear/NonlinearFactorGraph.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/VectorValues.h\n- gtsam/inference/graph.h\n+ a01301.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- a01325.html\n+ a01286.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- a01334.html\n+ a01310.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+ a01280.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- a01241.html\n- gtsam/geometry/CameraSet.h\n- gtsam/linear/JacobianFactor.h\n- gtsam/linear/VectorValues.h\n+ a01277.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- a01268.html\n- gtsam/slam/RegularImplicitSchurFactor.h\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/linear/RegularHessianFactor.h\n- gtsam/geometry/CameraSet.h\n+ a01295.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- a01250.html\n- gtsam/geometry/triangulation.h\n+ a01331.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- a01262.html\n- gtsam/slam/SmartFactorBase.h\n- gtsam/slam/SmartFactorParams.h\n- gtsam/geometry/triangulation.h\n+ a01307.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- a01313.html\n- gtsam/slam/SmartProjectionFactor.h\n+ a01292.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 a01253.html\n- gtsam/slam/SmartProjectionFactor.h\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- a01310.html\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/geometry/StereoCamera.h\n+ a01238.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- a01358.html\n- gtsam/inference/FactorGraph-inst.h\n- gtsam/symbolic/SymbolicBayesNet.h\n+ a01376.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- a01364.html\n- gtsam/symbolic/SymbolicConditional.h\n- gtsam/inference/BayesNet.h\n- gtsam/inference/FactorGraph.h\n- gtsam/base/types.h\n+ a01343.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 a01391.html\n- gtsam/symbolic/SymbolicBayesNet.h\n- gtsam/symbolic/SymbolicFactorGraph.h\n- gtsam/inference/BayesTree.h\n- gtsam/inference/BayesTreeCliqueBase.h\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 a01373.html\n- gtsam/symbolic/SymbolicConditional.h\n+ gtsam/symbolic/SymbolicConditional.h\n gtsam\n \n \n SymbolicConditional.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/\n- a01352.html\n- gtsam/base/Testable.h\n- gtsam/base/types.h\n- gtsam/symbolic/SymbolicFactor.h\n+ a01358.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- a01367.html\n- gtsam/inference/EliminationTree-inst.h\n- gtsam/symbolic/SymbolicEliminationTree.h\n+ a01346.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- a01361.html\n- gtsam/symbolic/SymbolicBayesNet.h\n- gtsam/symbolic/SymbolicFactorGraph.h\n- gtsam/inference/EliminationTree.h\n+ a01370.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- a01343.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+ a01382.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- a01382.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+ 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 gtsam\n \n \n SymbolicFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/\n- a01385.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- a01370.html\n- gtsam/inference/FactorGraph-inst.h\n- gtsam/symbolic/SymbolicFactorGraph.h\n- gtsam/symbolic/SymbolicEliminationTree.h\n- gtsam/symbolic/SymbolicJunctionTree.h\n+ a01349.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/symbolic/SymbolicConditional.h\n gtsam\n \n \n SymbolicFactorGraph.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/\n- a01379.html\n- gtsam/symbolic/SymbolicFactor.h\n- gtsam/inference/FactorGraph.h\n- gtsam/inference/EliminateableFactorGraph.h\n- gtsam/base/types.h\n+ a01388.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- a01388.html\n- gtsam/symbolic/SymbolicISAM.h\n- gtsam/inference/ISAM-inst.h\n+ a01361.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- a01346.html\n+ a01385.html\n gtsam/symbolic/SymbolicBayesTree.h\n- gtsam/inference/ISAM.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- a01349.html\n- gtsam/inference/JunctionTree-inst.h\n- gtsam/symbolic/SymbolicJunctionTree.h\n- gtsam/symbolic/SymbolicEliminationTree.h\n+ a01364.html\n+ gtsam/inference/JunctionTree-inst.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- a01355.html\n- gtsam/symbolic/SymbolicFactorGraph.h\n+ a01352.html\n+ gtsam/symbolic/SymbolicFactorGraph.h\n gtsam/symbolic/SymbolicBayesTree.h\n- gtsam/inference/JunctionTree.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- \"a00146.html#a7d85957bab2d18cf56ab9aaf95a106de\",\n- \"a00461.html#a8d52d7d8a5e5c8d7318ce95ee57e9cfa\",\n- \"a00851.html#ad2b587fde5d35a27d6c88feb4432e785\",\n- \"a01238_source.html\",\n+ \"a00146.html#a09f2bbdb9f9d633542362dbe8d79f9ab\",\n+ \"a00452_source.html\",\n+ \"a00824.html\",\n+ \"a01241.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,130 +1,152 @@\n var NAVTREEINDEX0 = {\n- \"a00002.html\": [4, 0, 0, 0, 44],\n- \"a00002_source.html\": [4, 0, 0, 0, 44],\n- \"a00005.html\": [4, 0, 0, 0, 5],\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, 17],\n- \"a00011.html#a3041816208c79ef76d3ef2e0991d90b2\": [4, 0, 0, 0, 17, 9],\n- \"a00011.html#a5c6ccec4a3ea452361c0956766bccef5\": [4, 0, 0, 0, 17, 12],\n- \"a00011.html#abd92914d0822d42584d46f31fb500048\": [4, 0, 0, 0, 17, 8],\n- \"a00011.html#adaf06b04fa93b050e99bc3d571d85d53\": [4, 0, 0, 0, 17, 11],\n- \"a00011.html#adbd55c711e6ceee791b595558eb3ec8a\": [4, 0, 0, 0, 17, 7],\n- \"a00011.html#aeef5af7d583d275fbc0e6e5af8bf2afc\": [4, 0, 0, 0, 17, 6],\n- \"a00011.html#af5a7c0a7422c38a0baa131c073e233ac\": [4, 0, 0, 0, 17, 10],\n- \"a00011.html#afe28b7f8e3592fb9f5cf9ebae09497ba\": [4, 0, 0, 0, 17, 13],\n- \"a00011_source.html\": [4, 0, 0, 0, 17],\n- \"a00014.html\": [4, 0, 0, 0, 32],\n- \"a00014.html#a08641f0f7145716bba9159dd95099a44\": [4, 0, 0, 0, 32, 11],\n- \"a00014.html#a0eec17f894b358dd9f30d7af28082ba5\": [4, 0, 0, 0, 32, 2],\n- \"a00014.html#a21e760bc75888053afd86a27d56b6148\": [4, 0, 0, 0, 32, 8],\n- \"a00014.html#a254be27d6d4b416fa2b546c77ae783fc\": [4, 0, 0, 0, 32, 1],\n- \"a00014.html#a2f19ba6625a264457805513fefcb5c32\": [4, 0, 0, 0, 32, 9],\n- \"a00014.html#a2f509195ea2180d0f7dbd3a99a088ff4\": [4, 0, 0, 0, 32, 0],\n- \"a00014.html#a59ba6a7db27344c5cb021f1421905020\": [4, 0, 0, 0, 32, 4],\n- \"a00014.html#a6d6b2964354593f69848f6bf5d3e0ca1\": [4, 0, 0, 0, 32, 3],\n- \"a00014.html#a830c8c65902d7d0e763562e6c9357346\": [4, 0, 0, 0, 32, 10],\n- \"a00014.html#a982034802415eb6e9bd02355257ed96a\": [4, 0, 0, 0, 32, 7],\n- \"a00014.html#aa0926a5d779171bd8e1d30fb5982b5c0\": [4, 0, 0, 0, 32, 5],\n- \"a00014.html#add6d6575582314cc9b5dbdbe2a86374d\": [4, 0, 0, 0, 32, 6],\n- \"a00014_source.html\": [4, 0, 0, 0, 32],\n- \"a00017.html\": [4, 0, 0, 0, 35],\n- \"a00020.html\": [4, 0, 0, 0, 25],\n- \"a00020_source.html\": [4, 0, 0, 0, 25],\n- \"a00023.html\": [4, 0, 0, 0, 1],\n- \"a00023.html#a747683f736c50bca16b3aab0e95b1b76\": [4, 0, 0, 0, 1, 0],\n- \"a00023.html#abe82fa6aceccfa2360cf314ab44f39ad\": [4, 0, 0, 0, 1, 1],\n- \"a00026.html\": [4, 0, 0, 0, 23],\n- \"a00026.html#a068f1f8df2afd609744bc82386259e71\": [4, 0, 0, 0, 23, 0],\n- \"a00026_source.html\": [4, 0, 0, 0, 23],\n- \"a00029.html\": [4, 0, 0, 0, 7],\n- \"a00029_source.html\": [4, 0, 0, 0, 7],\n- \"a00032.html\": [4, 0, 0, 0, 24],\n- \"a00032.html#a0ca8a22de666bc39015da34f150df748\": [4, 0, 0, 0, 24, 20],\n- \"a00032.html#a10295660c0177e08d45812fbb7e4c554\": [4, 0, 0, 0, 24, 28],\n- \"a00032.html#a11011d8e9bd69e486c9752875f710c18\": [4, 0, 0, 0, 24, 27],\n- \"a00032.html#a157eb3b44dd4e38bbd66f3cc68a20e43\": [4, 0, 0, 0, 24, 4],\n- \"a00032.html#a15c46aa999886d4ccd06ab73fc02db31\": [4, 0, 0, 0, 24, 22],\n- \"a00032.html#a272af6f7139b76d085279060646e32d1\": [4, 0, 0, 0, 24, 15],\n- \"a00032.html#a2cf5181fc7bca1ef6a1070959de7b975\": [4, 0, 0, 0, 24, 18],\n- \"a00032.html#a3b0937e08e79604ee6ab10fca6ffe65e\": [4, 0, 0, 0, 24, 11],\n- \"a00032.html#a3eb3fef9c77920dfd9496e71a0bcf669\": [4, 0, 0, 0, 24, 23],\n- \"a00032.html#a46d002a0529f1172aebb7e1d85d5c08c\": [4, 0, 0, 0, 24, 7],\n- \"a00032.html#a4c4c5744f0b348d4ec6c047f796e7924\": [4, 0, 0, 0, 24, 3],\n- \"a00032.html#a4e010b7f436124b9b421ba7dc438d987\": [4, 0, 0, 0, 24, 25],\n- \"a00032.html#a526a422ea611724345affed8b71d9bac\": [4, 0, 0, 0, 24, 10],\n- \"a00032.html#a581a9f8db043590096fbac682b8f6a93\": [4, 0, 0, 0, 24, 2],\n- \"a00032.html#a5b0db4ac5f279b12fc91fab4cb40b1bf\": [4, 0, 0, 0, 24, 6],\n- \"a00032.html#a5ca42a2fc87373c005299f3087995a97\": [4, 0, 0, 0, 24, 19],\n- \"a00032.html#a6846b5cc84c1d5a54a436121b27057e0\": [4, 0, 0, 0, 24, 13],\n- \"a00032.html#a722e98babba795ce480f89527b572251\": [4, 0, 0, 0, 24, 16],\n- \"a00032.html#a799c83517a20a8e0b0b014f26b50f660\": [4, 0, 0, 0, 24, 24],\n- \"a00032.html#a8061b20199f839b115512d95d058fcbf\": [4, 0, 0, 0, 24, 14],\n- \"a00032.html#aa8f0264edaf78d503809c1e3152340ee\": [4, 0, 0, 0, 24, 8],\n- \"a00032.html#ac224e2384e41171181b2dbc0f700cdc1\": [4, 0, 0, 0, 24, 21],\n- \"a00032.html#acc2f741132522a6ce57d544a27a95855\": [4, 0, 0, 0, 24, 17],\n- \"a00032.html#acfbadc0ab0cd9386205b2737c5d0b727\": [4, 0, 0, 0, 24, 9],\n- \"a00032.html#af40f61e8eff01acdb028ad33b8f3529b\": [4, 0, 0, 0, 24, 12],\n- \"a00032.html#afcc94e3b49906e824c01a3d56df62d33\": [4, 0, 0, 0, 24, 5],\n- \"a00032.html#afd8862271510196ec4e2d894f623942d\": [4, 0, 0, 0, 24, 26],\n- \"a00032_source.html\": [4, 0, 0, 0, 24],\n- \"a00038_source.html\": [4, 0, 0, 0, 33],\n- \"a00041.html\": [4, 0, 0, 0, 41],\n- \"a00041_source.html\": [4, 0, 0, 0, 41],\n+ \"a00002.html\": [4, 0, 0, 0, 26],\n+ \"a00002_source.html\": [4, 0, 0, 0, 26],\n+ \"a00005.html\": [4, 0, 0, 0, 32],\n+ \"a00005.html#a08641f0f7145716bba9159dd95099a44\": [4, 0, 0, 0, 32, 11],\n+ \"a00005.html#a0eec17f894b358dd9f30d7af28082ba5\": [4, 0, 0, 0, 32, 2],\n+ \"a00005.html#a21e760bc75888053afd86a27d56b6148\": [4, 0, 0, 0, 32, 8],\n+ \"a00005.html#a254be27d6d4b416fa2b546c77ae783fc\": [4, 0, 0, 0, 32, 1],\n+ \"a00005.html#a2f19ba6625a264457805513fefcb5c32\": [4, 0, 0, 0, 32, 9],\n+ \"a00005.html#a2f509195ea2180d0f7dbd3a99a088ff4\": [4, 0, 0, 0, 32, 0],\n+ \"a00005.html#a59ba6a7db27344c5cb021f1421905020\": [4, 0, 0, 0, 32, 4],\n+ \"a00005.html#a6d6b2964354593f69848f6bf5d3e0ca1\": [4, 0, 0, 0, 32, 3],\n+ \"a00005.html#a830c8c65902d7d0e763562e6c9357346\": [4, 0, 0, 0, 32, 10],\n+ \"a00005.html#a982034802415eb6e9bd02355257ed96a\": [4, 0, 0, 0, 32, 7],\n+ \"a00005.html#aa0926a5d779171bd8e1d30fb5982b5c0\": [4, 0, 0, 0, 32, 5],\n+ \"a00005.html#add6d6575582314cc9b5dbdbe2a86374d\": [4, 0, 0, 0, 32, 6],\n+ \"a00005_source.html\": [4, 0, 0, 0, 32],\n+ \"a00008.html\": [4, 0, 0, 0, 27],\n+ \"a00008.html#a007080ca4741cc3d3d6a209b0ae3fe61\": [4, 0, 0, 0, 27, 18],\n+ \"a00008.html#a0d8faf2bb0a908ff484677bb2fcf707c\": [4, 0, 0, 0, 27, 8],\n+ \"a00008.html#a16c154fe5e35242e26af8286e77eea11\": [4, 0, 0, 0, 27, 22],\n+ \"a00008.html#a262487af458d1f48dd7d3bc549caae00\": [4, 0, 0, 0, 27, 7],\n+ \"a00008.html#a332bad7d1e70d3c04ceca35adce7a134\": [4, 0, 0, 0, 27, 12],\n+ \"a00008.html#a349b7ed4a67a8c3d80737e5383507bc4\": [4, 0, 0, 0, 27, 4],\n+ \"a00008.html#a56c41958e57a4bc7361ab593011462fd\": [4, 0, 0, 0, 27, 1],\n+ \"a00008.html#a5f2fe2bfc17737ff9ae1fb8b210604f0\": [4, 0, 0, 0, 27, 10],\n+ \"a00008.html#a7fad959f63f2eac1478c5ede7b9ae4db\": [4, 0, 0, 0, 27, 16],\n+ \"a00008.html#a85ab51b2e8f4cea69f72e06a5c136e85\": [4, 0, 0, 0, 27, 11],\n+ \"a00008.html#a89449123a746480a1d668cecb5576708\": [4, 0, 0, 0, 27, 20],\n+ \"a00008.html#a8d7ea177ef3e93af15a4a77c2bd7fa8b\": [4, 0, 0, 0, 27, 9],\n+ \"a00008.html#a8eb16192d8ebe2532d8a69c9f2bf15b2\": [4, 0, 0, 0, 27, 3],\n+ \"a00008.html#a976ff7999fcc13ef602b6ece1b078bca\": [4, 0, 0, 0, 27, 23],\n+ \"a00008.html#aa12c78301a9d2968afe5a1a14baa7e90\": [4, 0, 0, 0, 27, 19],\n+ \"a00008.html#aa3261c2d455f892dae1921f8c3a39267\": [4, 0, 0, 0, 27, 17],\n+ \"a00008.html#aa4d516d0d98946341ad2766521011d1b\": [4, 0, 0, 0, 27, 0],\n+ \"a00008.html#aa5d177a3bf16f9f5acf45ee62c816479\": [4, 0, 0, 0, 27, 15],\n+ \"a00008.html#ab181d2a3de466fc0c87bd29501bbc7ab\": [4, 0, 0, 0, 27, 6],\n+ \"a00008.html#abb476c3e77878f7e0f70dd51871f48e7\": [4, 0, 0, 0, 27, 13],\n+ \"a00008.html#abdff0a4b4fdf0e609aa62fb8d8b1dbba\": [4, 0, 0, 0, 27, 14],\n+ \"a00008.html#adbb4a71187706918faca3a11519b62f6\": [4, 0, 0, 0, 27, 5],\n+ \"a00008.html#ae2e939177cf58b42d7ed4c9856d536c5\": [4, 0, 0, 0, 27, 21],\n+ \"a00008.html#aefeb77f2324e4bbfca2c8152c49a4565\": [4, 0, 0, 0, 27, 2],\n+ \"a00008_source.html\": [4, 0, 0, 0, 27],\n+ \"a00011.html\": [4, 0, 0, 0, 9],\n+ \"a00011_source.html\": [4, 0, 0, 0, 9],\n+ \"a00017.html\": [4, 0, 0, 0, 5],\n+ \"a00020.html\": [4, 0, 0, 0, 36],\n+ \"a00020_source.html\": [4, 0, 0, 0, 36],\n+ \"a00023.html\": [4, 0, 0, 0, 24],\n+ \"a00023.html#a0ca8a22de666bc39015da34f150df748\": [4, 0, 0, 0, 24, 20],\n+ \"a00023.html#a10295660c0177e08d45812fbb7e4c554\": [4, 0, 0, 0, 24, 28],\n+ \"a00023.html#a11011d8e9bd69e486c9752875f710c18\": [4, 0, 0, 0, 24, 27],\n+ \"a00023.html#a157eb3b44dd4e38bbd66f3cc68a20e43\": [4, 0, 0, 0, 24, 4],\n+ \"a00023.html#a15c46aa999886d4ccd06ab73fc02db31\": [4, 0, 0, 0, 24, 22],\n+ \"a00023.html#a272af6f7139b76d085279060646e32d1\": [4, 0, 0, 0, 24, 15],\n+ \"a00023.html#a2cf5181fc7bca1ef6a1070959de7b975\": [4, 0, 0, 0, 24, 18],\n+ \"a00023.html#a3b0937e08e79604ee6ab10fca6ffe65e\": [4, 0, 0, 0, 24, 11],\n+ \"a00023.html#a3eb3fef9c77920dfd9496e71a0bcf669\": [4, 0, 0, 0, 24, 23],\n+ \"a00023.html#a46d002a0529f1172aebb7e1d85d5c08c\": [4, 0, 0, 0, 24, 7],\n+ \"a00023.html#a4c4c5744f0b348d4ec6c047f796e7924\": [4, 0, 0, 0, 24, 3],\n+ \"a00023.html#a4e010b7f436124b9b421ba7dc438d987\": [4, 0, 0, 0, 24, 25],\n+ \"a00023.html#a526a422ea611724345affed8b71d9bac\": [4, 0, 0, 0, 24, 10],\n+ \"a00023.html#a581a9f8db043590096fbac682b8f6a93\": [4, 0, 0, 0, 24, 2],\n+ \"a00023.html#a5b0db4ac5f279b12fc91fab4cb40b1bf\": [4, 0, 0, 0, 24, 6],\n+ \"a00023.html#a5ca42a2fc87373c005299f3087995a97\": [4, 0, 0, 0, 24, 19],\n+ \"a00023.html#a6846b5cc84c1d5a54a436121b27057e0\": [4, 0, 0, 0, 24, 13],\n+ \"a00023.html#a722e98babba795ce480f89527b572251\": [4, 0, 0, 0, 24, 16],\n+ \"a00023.html#a799c83517a20a8e0b0b014f26b50f660\": [4, 0, 0, 0, 24, 24],\n+ \"a00023.html#a8061b20199f839b115512d95d058fcbf\": [4, 0, 0, 0, 24, 14],\n+ \"a00023.html#aa8f0264edaf78d503809c1e3152340ee\": [4, 0, 0, 0, 24, 8],\n+ \"a00023.html#ac224e2384e41171181b2dbc0f700cdc1\": [4, 0, 0, 0, 24, 21],\n+ \"a00023.html#acc2f741132522a6ce57d544a27a95855\": [4, 0, 0, 0, 24, 17],\n+ \"a00023.html#acfbadc0ab0cd9386205b2737c5d0b727\": [4, 0, 0, 0, 24, 9],\n+ \"a00023.html#af40f61e8eff01acdb028ad33b8f3529b\": [4, 0, 0, 0, 24, 12],\n+ \"a00023.html#afcc94e3b49906e824c01a3d56df62d33\": [4, 0, 0, 0, 24, 5],\n+ \"a00023.html#afd8862271510196ec4e2d894f623942d\": [4, 0, 0, 0, 24, 26],\n+ \"a00023_source.html\": [4, 0, 0, 0, 24],\n+ \"a00026.html\": [4, 0, 0, 0, 19],\n+ \"a00026.html#a47e06cd29f4e8a20a8a7842e4045845f\": [4, 0, 0, 0, 19, 0],\n+ \"a00026.html#a6f805b32c5544e5552d702d5e2b4e801\": [4, 0, 0, 0, 19, 2],\n+ \"a00026.html#abcb9ece2bd206193ac40f118f1815c0e\": [4, 0, 0, 0, 19, 1],\n+ \"a00026_source.html\": [4, 0, 0, 0, 19],\n+ \"a00029.html\": [4, 0, 0, 0, 47],\n+ \"a00029_source.html\": [4, 0, 0, 0, 47],\n+ \"a00032.html\": [4, 0, 0, 0, 8],\n+ \"a00035_source.html\": [4, 0, 0, 0, 0],\n+ \"a00038.html\": [4, 0, 0, 0, 6],\n+ \"a00038_source.html\": [4, 0, 0, 0, 6],\n \"a00044.html\": [4, 0, 0, 0, 37],\n \"a00044.html#a3735d0cee6f4d530e75479f7b1ebaf07\": [4, 0, 0, 0, 37, 1],\n \"a00044.html#a50e24f0a9085721425089cdce18f2475\": [4, 0, 0, 0, 37, 2],\n \"a00044.html#a67e7c6f5c4916c4a58a783e6b566d55a\": [4, 0, 0, 0, 37, 0],\n \"a00044.html#a7228bbaf6ad62b65be7a2084c01aae5c\": [4, 0, 0, 0, 37, 4],\n \"a00044.html#afd7410807789da9ad91d6630063be36f\": [4, 0, 0, 0, 37, 3],\n \"a00044_source.html\": [4, 0, 0, 0, 37],\n- \"a00047.html\": [4, 0, 0, 0, 19],\n- \"a00047.html#a47e06cd29f4e8a20a8a7842e4045845f\": [4, 0, 0, 0, 19, 0],\n- \"a00047.html#a6f805b32c5544e5552d702d5e2b4e801\": [4, 0, 0, 0, 19, 2],\n- \"a00047.html#abcb9ece2bd206193ac40f118f1815c0e\": [4, 0, 0, 0, 19, 1],\n- \"a00047_source.html\": [4, 0, 0, 0, 19],\n- \"a00050.html\": [4, 0, 0, 0, 28],\n- \"a00050_source.html\": [4, 0, 0, 0, 28],\n- \"a00056.html\": [4, 0, 0, 0, 10],\n- \"a00056_source.html\": [4, 0, 0, 0, 10],\n- \"a00059.html\": [4, 0, 0, 0, 46],\n- \"a00065.html\": [4, 0, 0, 0, 43],\n- \"a00065.html#a09610ec69a8b3f3a00399bb378eda9cf\": [4, 0, 0, 0, 43, 4],\n- \"a00065.html#a09f2bbdb9f9d633542362dbe8d79f9ab\": [4, 0, 0, 0, 43, 19],\n- \"a00065.html#a14844c96706dc362917e0d5e76d65fbe\": [4, 0, 0, 0, 43, 6],\n- \"a00065.html#a2a0cfd7908b06491df49b6a9c9186775\": [4, 0, 0, 0, 43, 15],\n- \"a00065.html#a2ca3db47b15350977c1f03c5560ab332\": [4, 0, 0, 0, 43, 2],\n- \"a00065.html#a368ee40bd9c0124d572d2e49bcb077bf\": [4, 0, 0, 0, 43, 11],\n- \"a00065.html#a3d1cad2313f69f9fa5008fdc348d1526\": [4, 0, 0, 0, 43, 7],\n- \"a00065.html#a4ca41ba9ec9d6d21a2b9f5e00f9f25ed\": [4, 0, 0, 0, 43, 14],\n- \"a00065.html#a5e5d8018a0f44a6a299406aeda27d44b\": [4, 0, 0, 0, 43, 18],\n- \"a00065.html#a64988014ab746343803620dc42513646\": [4, 0, 0, 0, 43, 16],\n- \"a00065.html#a760cc36e9009b23cf564c436294b3504\": [4, 0, 0, 0, 43, 17],\n- \"a00065.html#a8bdced1844ffd6a53af0396d82eaa6da\": [4, 0, 0, 0, 43, 9],\n- \"a00065.html#a9f3ee662d25ffb8c04b4e35c4b02e90b\": [4, 0, 0, 0, 43, 1],\n- \"a00065.html#aa7ed1d4fe2dd6828cfeb2d8f488b818d\": [4, 0, 0, 0, 43, 8],\n- \"a00065.html#ac3cf8e8e70cd696d9c789c31bc1e89a7\": [4, 0, 0, 0, 43, 0],\n- \"a00065.html#ac9c0c05b0198ec0fb6e4115edb755910\": [4, 0, 0, 0, 43, 13],\n- \"a00065.html#aca1c56d11a05464a7a5458dc32ccc777\": [4, 0, 0, 0, 43, 20],\n- \"a00065.html#ad80249acf12bbea741e755cd8fc73042\": [4, 0, 0, 0, 43, 5],\n- \"a00065.html#ae19c359190a379cba44bf818a2293f7c\": [4, 0, 0, 0, 43, 10],\n- \"a00065.html#ae1c88acfa9575bcea3f2e738cb637a85\": [4, 0, 0, 0, 43, 3],\n- \"a00065.html#afb77eefc25dea0fb3e0fcc8f246b617a\": [4, 0, 0, 0, 43, 12],\n- \"a00065_source.html\": [4, 0, 0, 0, 43],\n- \"a00071.html\": [4, 0, 0, 0, 12],\n- \"a00071_source.html\": [4, 0, 0, 0, 12],\n- \"a00074.html\": [4, 0, 0, 0, 18],\n- \"a00074.html#a644bbe6719d8dd756e11e8b3d2fd229a\": [4, 0, 0, 0, 18, 2],\n- \"a00074.html#a72a7c561cc91f437a22023297fb7f658\": [4, 0, 0, 0, 18, 0],\n- \"a00074.html#aaa623dd059a67523b029af6ec20a38da\": [4, 0, 0, 0, 18, 1],\n- \"a00074_source.html\": [4, 0, 0, 0, 18],\n- \"a00077_source.html\": [4, 0, 0, 0, 0],\n+ \"a00047.html\": [4, 0, 0, 0, 12],\n+ \"a00047_source.html\": [4, 0, 0, 0, 12],\n+ \"a00050.html\": [4, 0, 0, 0, 7],\n+ \"a00050_source.html\": [4, 0, 0, 0, 7],\n+ \"a00053.html\": [4, 0, 0, 0, 42],\n+ \"a00053.html#a09610ec69a8b3f3a00399bb378eda9cf\": [4, 0, 0, 0, 42, 4],\n+ \"a00053.html#a09f2bbdb9f9d633542362dbe8d79f9ab\": [4, 0, 0, 0, 42, 15],\n+ \"a00053.html#a14844c96706dc362917e0d5e76d65fbe\": [4, 0, 0, 0, 42, 5],\n+ \"a00053.html#a2a0cfd7908b06491df49b6a9c9186775\": [4, 0, 0, 0, 42, 11],\n+ \"a00053.html#a2ca3db47b15350977c1f03c5560ab332\": [4, 0, 0, 0, 42, 2],\n+ \"a00053.html#a368ee40bd9c0124d572d2e49bcb077bf\": [4, 0, 0, 0, 42, 8],\n+ \"a00053.html#a5e5d8018a0f44a6a299406aeda27d44b\": [4, 0, 0, 0, 42, 14],\n+ \"a00053.html#a64988014ab746343803620dc42513646\": [4, 0, 0, 0, 42, 12],\n+ \"a00053.html#a760cc36e9009b23cf564c436294b3504\": [4, 0, 0, 0, 42, 13],\n+ \"a00053.html#a8bdced1844ffd6a53af0396d82eaa6da\": [4, 0, 0, 0, 42, 6],\n+ \"a00053.html#a9f3ee662d25ffb8c04b4e35c4b02e90b\": [4, 0, 0, 0, 42, 1],\n+ \"a00053.html#ac3cf8e8e70cd696d9c789c31bc1e89a7\": [4, 0, 0, 0, 42, 0],\n+ \"a00053.html#ac9c0c05b0198ec0fb6e4115edb755910\": [4, 0, 0, 0, 42, 10],\n+ \"a00053.html#aca1c56d11a05464a7a5458dc32ccc777\": [4, 0, 0, 0, 42, 16],\n+ \"a00053.html#ae19c359190a379cba44bf818a2293f7c\": [4, 0, 0, 0, 42, 7],\n+ \"a00053.html#ae1c88acfa9575bcea3f2e738cb637a85\": [4, 0, 0, 0, 42, 3],\n+ \"a00053.html#afb77eefc25dea0fb3e0fcc8f246b617a\": [4, 0, 0, 0, 42, 9],\n+ \"a00059.html\": [4, 0, 0, 0, 23],\n+ \"a00059.html#a068f1f8df2afd609744bc82386259e71\": [4, 0, 0, 0, 23, 0],\n+ \"a00059_source.html\": [4, 0, 0, 0, 23],\n+ \"a00062.html\": [4, 0, 0, 0, 17],\n+ \"a00062.html#a3041816208c79ef76d3ef2e0991d90b2\": [4, 0, 0, 0, 17, 9],\n+ \"a00062.html#a5c6ccec4a3ea452361c0956766bccef5\": [4, 0, 0, 0, 17, 12],\n+ \"a00062.html#abd92914d0822d42584d46f31fb500048\": [4, 0, 0, 0, 17, 8],\n+ \"a00062.html#adaf06b04fa93b050e99bc3d571d85d53\": [4, 0, 0, 0, 17, 11],\n+ \"a00062.html#adbd55c711e6ceee791b595558eb3ec8a\": [4, 0, 0, 0, 17, 7],\n+ \"a00062.html#aeef5af7d583d275fbc0e6e5af8bf2afc\": [4, 0, 0, 0, 17, 6],\n+ \"a00062.html#af5a7c0a7422c38a0baa131c073e233ac\": [4, 0, 0, 0, 17, 10],\n+ \"a00062.html#afe28b7f8e3592fb9f5cf9ebae09497ba\": [4, 0, 0, 0, 17, 13],\n+ \"a00062_source.html\": [4, 0, 0, 0, 17],\n+ \"a00065.html\": [4, 0, 0, 0, 31],\n+ \"a00065.html#a1f3dc67ad88b799c469088e428c583b1\": [4, 0, 0, 0, 31, 6],\n+ \"a00065.html#a659619cca082d1c10b07c033d48c54da\": [4, 0, 0, 0, 31, 5],\n+ \"a00065.html#abe0a238cdd07d484ff0be56ae945b182\": [4, 0, 0, 0, 31, 4],\n+ \"a00065.html#ad2dbee4a72127938c79162cc8b6d5152\": [4, 0, 0, 0, 31, 7],\n+ \"a00065_source.html\": [4, 0, 0, 0, 31],\n+ \"a00068.html\": [4, 0, 0, 0, 13],\n+ \"a00068_source.html\": [4, 0, 0, 0, 13],\n+ \"a00071.html\": [4, 0, 0, 0, 14],\n+ \"a00071_source.html\": [4, 0, 0, 0, 14],\n+ \"a00074_source.html\": [4, 0, 0, 0, 33],\n+ \"a00077.html\": [4, 0, 0, 0, 16],\n+ \"a00077.html#a2e95b5b5508cf3284107e979401bd1a4\": [4, 0, 0, 0, 16, 9],\n+ \"a00077.html#aac1ea136475ea605715c809f4b3f0156\": [4, 0, 0, 0, 16, 8],\n+ \"a00077_source.html\": [4, 0, 0, 0, 16],\n \"a00080.html\": [4, 0, 0, 0, 21],\n \"a00080.html#a0d998e1b770c9864946ddb031b1c4522\": [4, 0, 0, 0, 21, 3],\n \"a00080.html#a2218e53a2b99c449e70aa5b7805895fc\": [4, 0, 0, 0, 21, 18],\n \"a00080.html#a24d3ad0252f91f0ec301593c45cf5af7\": [4, 0, 0, 0, 21, 25],\n \"a00080.html#a3eb7eed9019d3fda8fcf74fbf85b85c9\": [4, 0, 0, 0, 21, 22],\n \"a00080.html#a3f9622226dfe06908f11b42bf0bdd22d\": [4, 0, 0, 0, 21, 0],\n \"a00080.html#a44ead03912d5dcf094d8421e1702ee71\": [4, 0, 0, 0, 21, 20],\n@@ -145,108 +167,86 @@\n \"a00080.html#abb0e19bbbeaca95843e8161b89a12fda\": [4, 0, 0, 0, 21, 1],\n \"a00080.html#abdd1ab05e8ac90b340fbd8f3b322dc6d\": [4, 0, 0, 0, 21, 12],\n \"a00080.html#ad8b524ba6c9aed0d21a020999c9b5d88\": [4, 0, 0, 0, 21, 7],\n \"a00080.html#ad8f0349471464c1fb515819d9503849a\": [4, 0, 0, 0, 21, 16],\n \"a00080.html#ae32c295e2c40c1e85f146a8a6266eaa8\": [4, 0, 0, 0, 21, 21],\n \"a00080.html#af1c32907adce74cf9edd6ee5bba5a085\": [4, 0, 0, 0, 21, 8],\n \"a00080.html#aff78dee59ac0250432081f39deb5f6d1\": [4, 0, 0, 0, 21, 14],\n- \"a00083.html\": [4, 0, 0, 0, 31],\n- \"a00083.html#a1f3dc67ad88b799c469088e428c583b1\": [4, 0, 0, 0, 31, 6],\n- \"a00083.html#a659619cca082d1c10b07c033d48c54da\": [4, 0, 0, 0, 31, 5],\n- \"a00083.html#abe0a238cdd07d484ff0be56ae945b182\": [4, 0, 0, 0, 31, 4],\n- \"a00083.html#ad2dbee4a72127938c79162cc8b6d5152\": [4, 0, 0, 0, 31, 7],\n- \"a00083_source.html\": [4, 0, 0, 0, 31],\n- \"a00086.html\": [4, 0, 0, 0, 29],\n- \"a00089.html\": [4, 0, 0, 0, 9],\n- \"a00089_source.html\": [4, 0, 0, 0, 9],\n- \"a00092.html\": [4, 0, 0, 0, 36],\n- \"a00092_source.html\": [4, 0, 0, 0, 36],\n- \"a00095.html\": [4, 0, 0, 0, 26],\n- \"a00095_source.html\": [4, 0, 0, 0, 26],\n- \"a00098.html\": [4, 0, 0, 0, 16],\n- \"a00098.html#a2e95b5b5508cf3284107e979401bd1a4\": [4, 0, 0, 0, 16, 9],\n- \"a00098.html#aac1ea136475ea605715c809f4b3f0156\": [4, 0, 0, 0, 16, 8],\n- \"a00098_source.html\": [4, 0, 0, 0, 16],\n- \"a00101.html\": [4, 0, 0, 0, 14],\n- \"a00101_source.html\": [4, 0, 0, 0, 14],\n- \"a00104.html\": [4, 0, 0, 0, 20],\n- \"a00104.html#a64b5e2e3c812d2cdea5ee294100f825f\": [4, 0, 0, 0, 20, 7],\n- \"a00104.html#ae03a6aedf0a82f67c2f3e987fb3aacba\": [4, 0, 0, 0, 20, 8],\n- \"a00104_source.html\": [4, 0, 0, 0, 20],\n- \"a00107_source.html\": [4, 0, 0, 0, 45],\n- \"a00110.html\": [4, 0, 0, 0, 11],\n- \"a00110_source.html\": [4, 0, 0, 0, 11],\n- \"a00113.html\": [4, 0, 0, 0, 13],\n- \"a00113_source.html\": [4, 0, 0, 0, 13],\n- \"a00116.html\": [4, 0, 0, 0, 47],\n- \"a00116_source.html\": [4, 0, 0, 0, 47],\n- \"a00122.html\": [4, 0, 0, 0, 8],\n- \"a00125.html\": [4, 0, 0, 0, 42],\n- \"a00125.html#a09610ec69a8b3f3a00399bb378eda9cf\": [4, 0, 0, 0, 42, 4],\n- \"a00125.html#a09f2bbdb9f9d633542362dbe8d79f9ab\": [4, 0, 0, 0, 42, 15],\n- \"a00125.html#a14844c96706dc362917e0d5e76d65fbe\": [4, 0, 0, 0, 42, 5],\n- \"a00125.html#a2a0cfd7908b06491df49b6a9c9186775\": [4, 0, 0, 0, 42, 11],\n- \"a00125.html#a2ca3db47b15350977c1f03c5560ab332\": [4, 0, 0, 0, 42, 2],\n- \"a00125.html#a368ee40bd9c0124d572d2e49bcb077bf\": [4, 0, 0, 0, 42, 8],\n- \"a00125.html#a5e5d8018a0f44a6a299406aeda27d44b\": [4, 0, 0, 0, 42, 14],\n- \"a00125.html#a64988014ab746343803620dc42513646\": [4, 0, 0, 0, 42, 12],\n- \"a00125.html#a760cc36e9009b23cf564c436294b3504\": [4, 0, 0, 0, 42, 13],\n- \"a00125.html#a8bdced1844ffd6a53af0396d82eaa6da\": [4, 0, 0, 0, 42, 6],\n- \"a00125.html#a9f3ee662d25ffb8c04b4e35c4b02e90b\": [4, 0, 0, 0, 42, 1],\n- \"a00125.html#ac3cf8e8e70cd696d9c789c31bc1e89a7\": [4, 0, 0, 0, 42, 0],\n- \"a00125.html#ac9c0c05b0198ec0fb6e4115edb755910\": [4, 0, 0, 0, 42, 10],\n- \"a00125.html#aca1c56d11a05464a7a5458dc32ccc777\": [4, 0, 0, 0, 42, 16],\n- \"a00125.html#ae19c359190a379cba44bf818a2293f7c\": [4, 0, 0, 0, 42, 7],\n- \"a00125.html#ae1c88acfa9575bcea3f2e738cb637a85\": [4, 0, 0, 0, 42, 3],\n- \"a00125.html#afb77eefc25dea0fb3e0fcc8f246b617a\": [4, 0, 0, 0, 42, 9],\n- \"a00128_source.html\": [4, 0, 0, 0, 4],\n- \"a00131.html\": [4, 0, 0, 0, 6],\n- \"a00131_source.html\": [4, 0, 0, 0, 6],\n- \"a00134.html\": [4, 0, 0, 0, 27],\n- \"a00134.html#a007080ca4741cc3d3d6a209b0ae3fe61\": [4, 0, 0, 0, 27, 18],\n- \"a00134.html#a0d8faf2bb0a908ff484677bb2fcf707c\": [4, 0, 0, 0, 27, 8],\n- \"a00134.html#a16c154fe5e35242e26af8286e77eea11\": [4, 0, 0, 0, 27, 22],\n- \"a00134.html#a262487af458d1f48dd7d3bc549caae00\": [4, 0, 0, 0, 27, 7],\n- \"a00134.html#a332bad7d1e70d3c04ceca35adce7a134\": [4, 0, 0, 0, 27, 12],\n- \"a00134.html#a349b7ed4a67a8c3d80737e5383507bc4\": [4, 0, 0, 0, 27, 4],\n- \"a00134.html#a56c41958e57a4bc7361ab593011462fd\": [4, 0, 0, 0, 27, 1],\n- \"a00134.html#a5f2fe2bfc17737ff9ae1fb8b210604f0\": [4, 0, 0, 0, 27, 10],\n- \"a00134.html#a7fad959f63f2eac1478c5ede7b9ae4db\": [4, 0, 0, 0, 27, 16],\n- \"a00134.html#a85ab51b2e8f4cea69f72e06a5c136e85\": [4, 0, 0, 0, 27, 11],\n- \"a00134.html#a89449123a746480a1d668cecb5576708\": [4, 0, 0, 0, 27, 20],\n- \"a00134.html#a8d7ea177ef3e93af15a4a77c2bd7fa8b\": [4, 0, 0, 0, 27, 9],\n- \"a00134.html#a8eb16192d8ebe2532d8a69c9f2bf15b2\": [4, 0, 0, 0, 27, 3],\n- \"a00134.html#a976ff7999fcc13ef602b6ece1b078bca\": [4, 0, 0, 0, 27, 23],\n- \"a00134.html#aa12c78301a9d2968afe5a1a14baa7e90\": [4, 0, 0, 0, 27, 19],\n- \"a00134.html#aa3261c2d455f892dae1921f8c3a39267\": [4, 0, 0, 0, 27, 17],\n- \"a00134.html#aa4d516d0d98946341ad2766521011d1b\": [4, 0, 0, 0, 27, 0],\n- \"a00134.html#aa5d177a3bf16f9f5acf45ee62c816479\": [4, 0, 0, 0, 27, 15],\n- \"a00134.html#ab181d2a3de466fc0c87bd29501bbc7ab\": [4, 0, 0, 0, 27, 6],\n- \"a00134.html#abb476c3e77878f7e0f70dd51871f48e7\": [4, 0, 0, 0, 27, 13],\n- \"a00134.html#abdff0a4b4fdf0e609aa62fb8d8b1dbba\": [4, 0, 0, 0, 27, 14],\n- \"a00134.html#adbb4a71187706918faca3a11519b62f6\": [4, 0, 0, 0, 27, 5],\n- \"a00134.html#ae2e939177cf58b42d7ed4c9856d536c5\": [4, 0, 0, 0, 27, 21],\n- \"a00134.html#aefeb77f2324e4bbfca2c8152c49a4565\": [4, 0, 0, 0, 27, 2],\n- \"a00134_source.html\": [4, 0, 0, 0, 27],\n- \"a00137.html\": [4, 0, 0, 0, 30],\n- \"a00137_source.html\": [4, 0, 0, 0, 30],\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, 15],\n- \"a00146.html\": [4, 0, 0, 0, 22],\n- \"a00146.html#a0d998e1b770c9864946ddb031b1c4522\": [4, 0, 0, 0, 22, 9],\n- \"a00146.html#a2218e53a2b99c449e70aa5b7805895fc\": [4, 0, 0, 0, 22, 29],\n- \"a00146.html#a24d3ad0252f91f0ec301593c45cf5af7\": [4, 0, 0, 0, 22, 41],\n- \"a00146.html#a2754f325c8600303d627d9e8cf1f9949\": [4, 0, 0, 0, 22, 34],\n- \"a00146.html#a3eb7eed9019d3fda8fcf74fbf85b85c9\": [4, 0, 0, 0, 22, 35],\n- \"a00146.html#a3f9622226dfe06908f11b42bf0bdd22d\": [4, 0, 0, 0, 22, 6],\n- \"a00146.html#a44ead03912d5dcf094d8421e1702ee71\": [4, 0, 0, 0, 22, 31],\n- \"a00146.html#a4b81794af72954abafbb726fc712f5db\": [4, 0, 0, 0, 22, 24],\n- \"a00146.html#a54fa43c89c5334314c8c75939dd5c2d7\": [4, 0, 0, 0, 22, 30],\n- \"a00146.html#a559dba69e2854eb66e34222f60f55722\": [4, 0, 0, 0, 22, 14],\n- \"a00146.html#a57edf6ed7312f63d35f73233665c334d\": [4, 0, 0, 0, 22, 43],\n- \"a00146.html#a5c82884a356ddd09229a5283aed04df9\": [4, 0, 0, 0, 22, 37],\n- \"a00146.html#a60019a03f26b92c6b2a08e43d153d4c0\": [4, 0, 0, 0, 22, 42],\n- \"a00146.html#a6c4876cbe85d5651a52eda0e97c60f2f\": [4, 0, 0, 0, 22, 10],\n- \"a00146.html#a7a116d0643f123ef3b15d91056506492\": [4, 0, 0, 0, 22, 8],\n- \"a00146.html#a7baa2f3184a444adce108633c0265e0c\": [4, 0, 0, 0, 22, 19]\n+ \"a00083.html\": [4, 0, 0, 0, 29],\n+ \"a00086_source.html\": [4, 0, 0, 0, 4],\n+ \"a00089.html\": [4, 0, 0, 0, 30],\n+ \"a00089_source.html\": [4, 0, 0, 0, 30],\n+ \"a00092.html\": [4, 0, 0, 0, 10],\n+ \"a00092_source.html\": [4, 0, 0, 0, 10],\n+ \"a00095.html\": [4, 0, 0, 0, 48],\n+ \"a00095_source.html\": [4, 0, 0, 0, 48],\n+ \"a00101.html\": [4, 0, 0, 0, 44],\n+ \"a00101_source.html\": [4, 0, 0, 0, 44],\n+ \"a00104.html\": [4, 0, 0, 0, 18],\n+ \"a00104.html#a644bbe6719d8dd756e11e8b3d2fd229a\": [4, 0, 0, 0, 18, 2],\n+ \"a00104.html#a72a7c561cc91f437a22023297fb7f658\": [4, 0, 0, 0, 18, 0],\n+ \"a00104.html#aaa623dd059a67523b029af6ec20a38da\": [4, 0, 0, 0, 18, 1],\n+ \"a00104_source.html\": [4, 0, 0, 0, 18],\n+ \"a00107.html\": [4, 0, 0, 0, 20],\n+ \"a00107.html#a64b5e2e3c812d2cdea5ee294100f825f\": [4, 0, 0, 0, 20, 7],\n+ \"a00107.html#ae03a6aedf0a82f67c2f3e987fb3aacba\": [4, 0, 0, 0, 20, 8],\n+ \"a00107_source.html\": [4, 0, 0, 0, 20],\n+ \"a00113.html\": [4, 0, 0, 0, 11],\n+ \"a00113_source.html\": [4, 0, 0, 0, 11],\n+ \"a00116.html\": [4, 0, 0, 0, 35],\n+ \"a00119.html\": [4, 0, 0, 0, 22],\n+ \"a00119.html#a0d998e1b770c9864946ddb031b1c4522\": [4, 0, 0, 0, 22, 9],\n+ \"a00119.html#a2218e53a2b99c449e70aa5b7805895fc\": [4, 0, 0, 0, 22, 29],\n+ \"a00119.html#a24d3ad0252f91f0ec301593c45cf5af7\": [4, 0, 0, 0, 22, 41],\n+ \"a00119.html#a2754f325c8600303d627d9e8cf1f9949\": [4, 0, 0, 0, 22, 34],\n+ \"a00119.html#a3eb7eed9019d3fda8fcf74fbf85b85c9\": [4, 0, 0, 0, 22, 35],\n+ \"a00119.html#a3f9622226dfe06908f11b42bf0bdd22d\": [4, 0, 0, 0, 22, 6],\n+ \"a00119.html#a44ead03912d5dcf094d8421e1702ee71\": [4, 0, 0, 0, 22, 31],\n+ \"a00119.html#a4b81794af72954abafbb726fc712f5db\": [4, 0, 0, 0, 22, 24],\n+ \"a00119.html#a54fa43c89c5334314c8c75939dd5c2d7\": [4, 0, 0, 0, 22, 30],\n+ \"a00119.html#a559dba69e2854eb66e34222f60f55722\": [4, 0, 0, 0, 22, 14],\n+ \"a00119.html#a57edf6ed7312f63d35f73233665c334d\": [4, 0, 0, 0, 22, 43],\n+ \"a00119.html#a5c82884a356ddd09229a5283aed04df9\": [4, 0, 0, 0, 22, 37],\n+ \"a00119.html#a60019a03f26b92c6b2a08e43d153d4c0\": [4, 0, 0, 0, 22, 42],\n+ \"a00119.html#a6c4876cbe85d5651a52eda0e97c60f2f\": [4, 0, 0, 0, 22, 10],\n+ \"a00119.html#a7a116d0643f123ef3b15d91056506492\": [4, 0, 0, 0, 22, 8],\n+ \"a00119.html#a7baa2f3184a444adce108633c0265e0c\": [4, 0, 0, 0, 22, 19],\n+ \"a00119.html#a7d85957bab2d18cf56ab9aaf95a106de\": [4, 0, 0, 0, 22, 28],\n+ \"a00119.html#a7eec9339ab5a008a28ddfaa6b2c94611\": [4, 0, 0, 0, 22, 21],\n+ \"a00119.html#a8b0bf332d52b333dab2b20d763c8925b\": [4, 0, 0, 0, 22, 11],\n+ \"a00119.html#a8d7e46204d953f64a39445599dbd7eee\": [4, 0, 0, 0, 22, 39],\n+ \"a00119.html#a97f108d19e52c83c331c55d35b23796e\": [4, 0, 0, 0, 22, 36],\n+ \"a00119.html#a9ae1d9fe2ccad044fbb88b5c1d9e035a\": [4, 0, 0, 0, 22, 38],\n+ \"a00119.html#aa2e36d7ab63000feddaeb61bbfcf2db1\": [4, 0, 0, 0, 22, 40],\n+ \"a00119.html#ab15462d8c16813d0a7a5b1f76a2f64b7\": [4, 0, 0, 0, 22, 18],\n+ \"a00119.html#ab235abf7505b634be2165e0db58239dd\": [4, 0, 0, 0, 22, 26],\n+ \"a00119.html#ab2c65f1a69009a306b6a5f9ef31dcee2\": [4, 0, 0, 0, 22, 16],\n+ \"a00119.html#aba542e2cd85f08b76f80a0871a4ea713\": [4, 0, 0, 0, 22, 12],\n+ \"a00119.html#abb0e19bbbeaca95843e8161b89a12fda\": [4, 0, 0, 0, 22, 7],\n+ \"a00119.html#abc29e3164ed30e785a3c48dfd1aa6ca5\": [4, 0, 0, 0, 22, 32],\n+ \"a00119.html#abdd1ab05e8ac90b340fbd8f3b322dc6d\": [4, 0, 0, 0, 22, 20],\n+ \"a00119.html#ad1088fa2d1494e6a4123a6bc3f5c2d7e\": [4, 0, 0, 0, 22, 22],\n+ \"a00119.html#ad8b524ba6c9aed0d21a020999c9b5d88\": [4, 0, 0, 0, 22, 13],\n+ \"a00119.html#ad8f0349471464c1fb515819d9503849a\": [4, 0, 0, 0, 22, 25],\n+ \"a00119.html#ae32c295e2c40c1e85f146a8a6266eaa8\": [4, 0, 0, 0, 22, 33],\n+ \"a00119.html#af1c32907adce74cf9edd6ee5bba5a085\": [4, 0, 0, 0, 22, 15],\n+ \"a00119.html#af31e657258505b2e5148846ebbaa3195\": [4, 0, 0, 0, 22, 17],\n+ \"a00119.html#afd5b3cf3f54adcbdd6d9e7403f1a792f\": [4, 0, 0, 0, 22, 27],\n+ \"a00119.html#aff78dee59ac0250432081f39deb5f6d1\": [4, 0, 0, 0, 22, 23],\n+ \"a00119_source.html\": [4, 0, 0, 0, 22],\n+ \"a00122_source.html\": [4, 0, 0, 0, 45],\n+ \"a00125.html\": [4, 0, 0, 0, 1],\n+ \"a00125.html#a747683f736c50bca16b3aab0e95b1b76\": [4, 0, 0, 0, 1, 0],\n+ \"a00125.html#abe82fa6aceccfa2360cf314ab44f39ad\": [4, 0, 0, 0, 1, 1],\n+ \"a00128_source.html\": [4, 0, 0, 0, 15],\n+ \"a00131.html\": [4, 0, 0, 0, 41],\n+ \"a00131_source.html\": [4, 0, 0, 0, 41],\n+ \"a00137.html\": [4, 0, 0, 0, 46],\n+ \"a00140.html\": [4, 0, 0, 0, 2],\n+ \"a00140.html#a747683f736c50bca16b3aab0e95b1b76\": [4, 0, 0, 0, 2, 0],\n+ \"a00140.html#abe82fa6aceccfa2360cf314ab44f39ad\": [4, 0, 0, 0, 2, 1],\n+ \"a00140_source.html\": [4, 0, 0, 0, 2],\n+ \"a00143.html\": [4, 0, 0, 0, 28],\n+ \"a00143_source.html\": [4, 0, 0, 0, 28],\n+ \"a00146.html\": [4, 0, 0, 0, 43],\n+ \"a00146.html#a09610ec69a8b3f3a00399bb378eda9cf\": [4, 0, 0, 0, 43, 4]\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,252 +1,252 @@\n var NAVTREEINDEX1 = {\n- \"a00146.html#a7d85957bab2d18cf56ab9aaf95a106de\": [4, 0, 0, 0, 22, 28],\n- \"a00146.html#a7eec9339ab5a008a28ddfaa6b2c94611\": [4, 0, 0, 0, 22, 21],\n- \"a00146.html#a8b0bf332d52b333dab2b20d763c8925b\": [4, 0, 0, 0, 22, 11],\n- \"a00146.html#a8d7e46204d953f64a39445599dbd7eee\": [4, 0, 0, 0, 22, 39],\n- \"a00146.html#a97f108d19e52c83c331c55d35b23796e\": [4, 0, 0, 0, 22, 36],\n- \"a00146.html#a9ae1d9fe2ccad044fbb88b5c1d9e035a\": [4, 0, 0, 0, 22, 38],\n- \"a00146.html#aa2e36d7ab63000feddaeb61bbfcf2db1\": [4, 0, 0, 0, 22, 40],\n- \"a00146.html#ab15462d8c16813d0a7a5b1f76a2f64b7\": [4, 0, 0, 0, 22, 18],\n- \"a00146.html#ab235abf7505b634be2165e0db58239dd\": [4, 0, 0, 0, 22, 26],\n- \"a00146.html#ab2c65f1a69009a306b6a5f9ef31dcee2\": [4, 0, 0, 0, 22, 16],\n- \"a00146.html#aba542e2cd85f08b76f80a0871a4ea713\": [4, 0, 0, 0, 22, 12],\n- \"a00146.html#abb0e19bbbeaca95843e8161b89a12fda\": [4, 0, 0, 0, 22, 7],\n- \"a00146.html#abc29e3164ed30e785a3c48dfd1aa6ca5\": [4, 0, 0, 0, 22, 32],\n- \"a00146.html#abdd1ab05e8ac90b340fbd8f3b322dc6d\": [4, 0, 0, 0, 22, 20],\n- \"a00146.html#ad1088fa2d1494e6a4123a6bc3f5c2d7e\": [4, 0, 0, 0, 22, 22],\n- \"a00146.html#ad8b524ba6c9aed0d21a020999c9b5d88\": [4, 0, 0, 0, 22, 13],\n- \"a00146.html#ad8f0349471464c1fb515819d9503849a\": [4, 0, 0, 0, 22, 25],\n- \"a00146.html#ae32c295e2c40c1e85f146a8a6266eaa8\": [4, 0, 0, 0, 22, 33],\n- \"a00146.html#af1c32907adce74cf9edd6ee5bba5a085\": [4, 0, 0, 0, 22, 15],\n- \"a00146.html#af31e657258505b2e5148846ebbaa3195\": [4, 0, 0, 0, 22, 17],\n- \"a00146.html#afd5b3cf3f54adcbdd6d9e7403f1a792f\": [4, 0, 0, 0, 22, 27],\n- \"a00146.html#aff78dee59ac0250432081f39deb5f6d1\": [4, 0, 0, 0, 22, 23],\n- \"a00146_source.html\": [4, 0, 0, 0, 22],\n- \"a00152.html\": [4, 0, 0, 1, 3],\n- \"a00152_source.html\": [4, 0, 0, 1, 3],\n+ \"a00146.html#a09f2bbdb9f9d633542362dbe8d79f9ab\": [4, 0, 0, 0, 43, 19],\n+ \"a00146.html#a14844c96706dc362917e0d5e76d65fbe\": [4, 0, 0, 0, 43, 6],\n+ \"a00146.html#a2a0cfd7908b06491df49b6a9c9186775\": [4, 0, 0, 0, 43, 15],\n+ \"a00146.html#a2ca3db47b15350977c1f03c5560ab332\": [4, 0, 0, 0, 43, 2],\n+ \"a00146.html#a368ee40bd9c0124d572d2e49bcb077bf\": [4, 0, 0, 0, 43, 11],\n+ \"a00146.html#a3d1cad2313f69f9fa5008fdc348d1526\": [4, 0, 0, 0, 43, 7],\n+ \"a00146.html#a4ca41ba9ec9d6d21a2b9f5e00f9f25ed\": [4, 0, 0, 0, 43, 14],\n+ \"a00146.html#a5e5d8018a0f44a6a299406aeda27d44b\": [4, 0, 0, 0, 43, 18],\n+ \"a00146.html#a64988014ab746343803620dc42513646\": [4, 0, 0, 0, 43, 16],\n+ \"a00146.html#a760cc36e9009b23cf564c436294b3504\": [4, 0, 0, 0, 43, 17],\n+ \"a00146.html#a8bdced1844ffd6a53af0396d82eaa6da\": [4, 0, 0, 0, 43, 9],\n+ \"a00146.html#a9f3ee662d25ffb8c04b4e35c4b02e90b\": [4, 0, 0, 0, 43, 1],\n+ \"a00146.html#aa7ed1d4fe2dd6828cfeb2d8f488b818d\": [4, 0, 0, 0, 43, 8],\n+ \"a00146.html#ac3cf8e8e70cd696d9c789c31bc1e89a7\": [4, 0, 0, 0, 43, 0],\n+ \"a00146.html#ac9c0c05b0198ec0fb6e4115edb755910\": [4, 0, 0, 0, 43, 13],\n+ \"a00146.html#aca1c56d11a05464a7a5458dc32ccc777\": [4, 0, 0, 0, 43, 20],\n+ \"a00146.html#ad80249acf12bbea741e755cd8fc73042\": [4, 0, 0, 0, 43, 5],\n+ \"a00146.html#ae19c359190a379cba44bf818a2293f7c\": [4, 0, 0, 0, 43, 10],\n+ \"a00146.html#ae1c88acfa9575bcea3f2e738cb637a85\": [4, 0, 0, 0, 43, 3],\n+ \"a00146.html#afb77eefc25dea0fb3e0fcc8f246b617a\": [4, 0, 0, 0, 43, 12],\n+ \"a00146_source.html\": [4, 0, 0, 0, 43],\n+ \"a00149.html\": [4, 0, 0, 0, 25],\n+ \"a00149_source.html\": [4, 0, 0, 0, 25],\n+ \"a00152.html\": [4, 0, 0, 1, 1],\n+ \"a00152_source.html\": [4, 0, 0, 1, 1],\n \"a00155.html\": [4, 0, 0, 1, 8],\n \"a00155_source.html\": [4, 0, 0, 1, 8],\n- \"a00158.html\": [4, 0, 0, 1, 7],\n- \"a00158_source.html\": [4, 0, 0, 1, 7],\n- \"a00161.html\": [4, 0, 0, 1, 5],\n- \"a00161_source.html\": [4, 0, 0, 1, 5],\n+ \"a00158.html\": [4, 0, 0, 1, 0],\n+ \"a00158_source.html\": [4, 0, 0, 1, 0],\n+ \"a00161.html\": [4, 0, 0, 1, 3],\n+ \"a00161_source.html\": [4, 0, 0, 1, 3],\n \"a00164.html\": [4, 0, 0, 1, 4],\n- \"a00167.html\": [4, 0, 0, 1, 1],\n- \"a00167_source.html\": [4, 0, 0, 1, 1],\n- \"a00170.html\": [4, 0, 0, 1, 2],\n- \"a00173.html\": [4, 0, 0, 1, 0],\n- \"a00173_source.html\": [4, 0, 0, 1, 0],\n- \"a00176.html\": [4, 0, 0, 1, 6],\n- \"a00176.html#a24ec5d6ec6b211d0cbaf645c11c198de\": [4, 0, 0, 1, 6, 2],\n- \"a00176.html#a9920fe883a2f506440aca7c1a2bd1a00\": [4, 0, 0, 1, 6, 1],\n- \"a00176_source.html\": [4, 0, 0, 1, 6],\n- \"a00179.html\": [4, 0, 0, 2, 13],\n- \"a00182.html\": [4, 0, 0, 2, 19],\n- \"a00185.html\": [4, 0, 0, 2, 14],\n- \"a00185_source.html\": [4, 0, 0, 2, 14],\n- \"a00188.html\": [4, 0, 0, 2, 24],\n- \"a00191.html\": [4, 0, 0, 2, 7],\n- \"a00194.html\": [4, 0, 0, 2, 28],\n- \"a00194.html#a147114735037c2260d4810a8820e72f6\": [4, 0, 0, 2, 28, 2],\n- \"a00194.html#a2b6707b04064df79d26d1016dfa2a013\": [4, 0, 0, 2, 28, 3],\n- \"a00194.html#a55a86a4657d82f6ff048a10d058c529f\": [4, 0, 0, 2, 28, 1],\n- \"a00194_source.html\": [4, 0, 0, 2, 28],\n- \"a00197.html\": [4, 0, 0, 2, 5],\n- \"a00200_source.html\": [4, 0, 0, 2, 3],\n- \"a00203.html\": [4, 0, 0, 2, 22],\n- \"a00203.html#aa8c26fa5afbbfd23795d7d421e543a81\": [4, 0, 0, 2, 22, 0],\n- \"a00203_source.html\": [4, 0, 0, 2, 22],\n- \"a00206.html\": [4, 0, 0, 2, 27],\n- \"a00206.html#a147114735037c2260d4810a8820e72f6\": [4, 0, 0, 2, 27, 0],\n- \"a00206.html#a2b6707b04064df79d26d1016dfa2a013\": [4, 0, 0, 2, 27, 1],\n- \"a00209.html\": [4, 0, 0, 2, 17],\n- \"a00209.html#ae1c1177c8725296b34601409322400ea\": [4, 0, 0, 2, 17, 0],\n- \"a00212.html\": [4, 0, 0, 2, 10],\n- \"a00212_source.html\": [4, 0, 0, 2, 10],\n- \"a00215.html\": [4, 0, 0, 2, 12],\n- \"a00215_source.html\": [4, 0, 0, 2, 12],\n- \"a00218.html\": [4, 0, 0, 2, 15],\n- \"a00221.html\": [4, 0, 0, 2, 4],\n- \"a00221.html#a1744c5e018220146e8df7a68a05d5c43\": [4, 0, 0, 2, 4, 5],\n- \"a00221.html#aaf5f5013828ac5e4750377dcad969276\": [4, 0, 0, 2, 4, 4],\n- \"a00221.html#ad19a5c8f7d997b0b16cf646659834b0f\": [4, 0, 0, 2, 4, 3],\n- \"a00221.html#ae890a8919b441443ffdc0d8ab047838d\": [4, 0, 0, 2, 4, 2],\n- \"a00221_source.html\": [4, 0, 0, 2, 4],\n- \"a00224.html\": [4, 0, 0, 2, 21],\n- \"a00227.html\": [4, 0, 0, 2, 1],\n- \"a00227_source.html\": [4, 0, 0, 2, 1],\n- \"a00230.html\": [4, 0, 0, 2, 20],\n- \"a00230_source.html\": [4, 0, 0, 2, 20],\n- \"a00233.html\": [4, 0, 0, 2, 8],\n- \"a00233_source.html\": [4, 0, 0, 2, 8],\n- \"a00236.html\": [4, 0, 0, 2, 30],\n- \"a00236.html#aa6c58dfb2fc9398a026e3268ba2edfad\": [4, 0, 0, 2, 30, 2],\n- \"a00236.html#ab98cf2a4777006c28d6983db5d8ec574\": [4, 0, 0, 2, 30, 1],\n- \"a00236.html#ae4856250df52ce4b9b4b16c7a833408c\": [4, 0, 0, 2, 30, 0],\n- \"a00236_source.html\": [4, 0, 0, 2, 30],\n- \"a00239.html\": [4, 0, 0, 2, 23],\n- \"a00239.html#a0be4f243161c2fd937df60aee511eb16\": [4, 0, 0, 2, 23, 3],\n- \"a00239_source.html\": [4, 0, 0, 2, 23],\n- \"a00242.html\": [4, 0, 0, 2, 11],\n- \"a00245.html\": [4, 0, 0, 2, 9],\n- \"a00248.html\": [4, 0, 0, 2, 25],\n- \"a00248_source.html\": [4, 0, 0, 2, 25],\n- \"a00251.html\": [4, 0, 0, 2, 6],\n- \"a00251_source.html\": [4, 0, 0, 2, 6],\n- \"a00254.html\": [4, 0, 0, 2, 29],\n- \"a00254.html#aa6c58dfb2fc9398a026e3268ba2edfad\": [4, 0, 0, 2, 29, 2],\n- \"a00254.html#ab98cf2a4777006c28d6983db5d8ec574\": [4, 0, 0, 2, 29, 1],\n- \"a00254.html#ae4856250df52ce4b9b4b16c7a833408c\": [4, 0, 0, 2, 29, 0],\n- \"a00257.html\": [4, 0, 0, 2, 0],\n- \"a00260.html\": [4, 0, 0, 2, 16],\n- \"a00260_source.html\": [4, 0, 0, 2, 16],\n- \"a00263.html\": [4, 0, 0, 2, 18],\n- \"a00263.html#ae1c1177c8725296b34601409322400ea\": [4, 0, 0, 2, 18, 1],\n- \"a00263_source.html\": [4, 0, 0, 2, 18],\n- \"a00269.html\": [4, 0, 0, 2, 26],\n- \"a00269_source.html\": [4, 0, 0, 2, 26],\n- \"a00272.html\": [4, 0, 0, 2, 2],\n- \"a00272_source.html\": [4, 0, 0, 2, 2],\n- \"a00275_source.html\": [4, 0, 0, 3, 23],\n- \"a00278.html\": [4, 0, 0, 3, 5],\n- \"a00281.html\": [4, 0, 0, 3, 54],\n- \"a00281_source.html\": [4, 0, 0, 3, 54],\n- \"a00284.html\": [4, 0, 0, 3, 4],\n- \"a00284_source.html\": [4, 0, 0, 3, 4],\n- \"a00287.html\": [4, 0, 0, 3, 53],\n- \"a00287.html#a3e57e4771f13855a495ec2c6454c9121\": [4, 0, 0, 3, 53, 3],\n- \"a00287.html#a76855a1214bf05a8704ee3deaece6339\": [4, 0, 0, 3, 53, 2],\n- \"a00287.html#a8d21728e3da4cf1a96e1b6f87a97da47\": [4, 0, 0, 3, 53, 4],\n- \"a00287_source.html\": [4, 0, 0, 3, 53],\n- \"a00293.html\": [4, 0, 0, 3, 37],\n- \"a00293_source.html\": [4, 0, 0, 3, 37],\n- \"a00296.html\": [4, 0, 0, 3, 19],\n- \"a00296_source.html\": [4, 0, 0, 3, 19],\n- \"a00299.html\": [4, 0, 0, 3, 49],\n- \"a00299.html#a3a2e8c622e65623a6853c84073bdb4f2\": [4, 0, 0, 3, 49, 0],\n- \"a00299_source.html\": [4, 0, 0, 3, 49],\n- \"a00302.html\": [4, 0, 0, 3, 6],\n- \"a00302_source.html\": [4, 0, 0, 3, 6],\n- \"a00305.html\": [4, 0, 0, 3, 16],\n- \"a00305_source.html\": [4, 0, 0, 3, 16],\n- \"a00308.html\": [4, 0, 0, 3, 43],\n- \"a00311.html\": [4, 0, 0, 3, 56],\n- \"a00311.html#ac1829b506847127f406c0d6182fc0cdd\": [4, 0, 0, 3, 56, 5],\n- \"a00311.html#afdaebcf25a03a9a9986d35d2831605dd\": [4, 0, 0, 3, 56, 4],\n- \"a00311_source.html\": [4, 0, 0, 3, 56],\n- \"a00314.html\": [4, 0, 0, 3, 8],\n- \"a00314_source.html\": [4, 0, 0, 3, 8],\n- \"a00317.html\": [4, 0, 0, 3, 22],\n- \"a00317_source.html\": [4, 0, 0, 3, 22],\n- \"a00320.html\": [4, 0, 0, 3, 9],\n- \"a00323.html\": [4, 0, 0, 3, 7],\n- \"a00326.html\": [4, 0, 0, 3, 33],\n- \"a00329.html\": [4, 0, 0, 3, 57],\n- \"a00329_source.html\": [4, 0, 0, 3, 57],\n- \"a00335.html\": [4, 0, 0, 3, 26],\n- \"a00335_source.html\": [4, 0, 0, 3, 26],\n- \"a00338.html\": [4, 0, 0, 3, 55],\n- \"a00341.html\": [4, 0, 0, 3, 36],\n- \"a00341.html#aefb606eb24889c0f418acf1515a2c723\": [4, 0, 0, 3, 36, 6],\n- \"a00341_source.html\": [4, 0, 0, 3, 36],\n- \"a00344.html\": [4, 0, 0, 3, 32],\n- \"a00344.html#a300205092710091b8745c0a145da20a1\": [4, 0, 0, 3, 32, 5],\n- \"a00344.html#a57f778b84bc6106471006421d289b832\": [4, 0, 0, 3, 32, 6],\n- \"a00344.html#a7dc820e4e47218768f104b43a184a1bd\": [4, 0, 0, 3, 32, 4],\n- \"a00344.html#a86bf6ed2ffb0ecc42a7deb8922f4ca4f\": [4, 0, 0, 3, 32, 2],\n- \"a00344.html#aa42f7ec660b7353de39f9c86a26711cc\": [4, 0, 0, 3, 32, 3],\n- \"a00344.html#aaa8ed89fd60ea4601d9de63c4811525b\": [4, 0, 0, 3, 32, 1],\n- \"a00344.html#abb52bb00c68909fc1147e5d112e8c2ae\": [4, 0, 0, 3, 32, 8],\n- \"a00344.html#ac37b6f807985ffd25217e33f6136fe58\": [4, 0, 0, 3, 32, 7],\n- \"a00344_source.html\": [4, 0, 0, 3, 32],\n- \"a00347.html\": [4, 0, 0, 3, 40],\n- \"a00347.html#a5172b5b6d51bd5348c7e551e1376f60a\": [4, 0, 0, 3, 40, 0],\n- \"a00353.html\": [4, 0, 0, 3, 2],\n- \"a00353.html#a9ac814fcc4484bce32e4616d69afb225\": [4, 0, 0, 3, 2, 0],\n- \"a00353_source.html\": [4, 0, 0, 3, 2],\n- \"a00359.html\": [4, 0, 0, 3, 14],\n- \"a00359_source.html\": [4, 0, 0, 3, 14],\n- \"a00362.html\": [4, 0, 0, 3, 59],\n- \"a00365.html\": [4, 0, 0, 3, 50],\n- \"a00365.html#a72fc8b10f24d82aa8a4c99f99403fe5e\": [4, 0, 0, 3, 50, 0],\n- \"a00365.html#a7c7e26b6d07ec0f16363c196247b294d\": [4, 0, 0, 3, 50, 1],\n- \"a00368.html\": [4, 0, 0, 3, 0],\n- \"a00368_source.html\": [4, 0, 0, 3, 0],\n- \"a00371.html\": [4, 0, 0, 3, 1],\n- \"a00374.html\": [4, 0, 0, 3, 13],\n- \"a00377.html\": [4, 0, 0, 3, 58],\n- \"a00377_source.html\": [4, 0, 0, 3, 58],\n- \"a00380.html\": [4, 0, 0, 3, 41],\n- \"a00380.html#a5172b5b6d51bd5348c7e551e1376f60a\": [4, 0, 0, 3, 41, 5],\n- \"a00380.html#a52e26554234edf7de94a5e43dd0bcbf9\": [4, 0, 0, 3, 41, 4],\n- \"a00380_source.html\": [4, 0, 0, 3, 41],\n- \"a00383.html\": [4, 0, 0, 3, 28],\n- \"a00383_source.html\": [4, 0, 0, 3, 28],\n- \"a00386.html\": [4, 0, 0, 3, 52],\n- \"a00386.html#a3e57e4771f13855a495ec2c6454c9121\": [4, 0, 0, 3, 52, 0],\n- \"a00386.html#a8d21728e3da4cf1a96e1b6f87a97da47\": [4, 0, 0, 3, 52, 1],\n- \"a00389_source.html\": [4, 0, 0, 3, 62],\n- \"a00392.html\": [4, 0, 0, 3, 15],\n- \"a00395.html\": [4, 0, 0, 3, 31],\n- \"a00395.html#a57f778b84bc6106471006421d289b832\": [4, 0, 0, 3, 31, 3],\n- \"a00395.html#a7dc820e4e47218768f104b43a184a1bd\": [4, 0, 0, 3, 31, 2],\n- \"a00395.html#a86bf6ed2ffb0ecc42a7deb8922f4ca4f\": [4, 0, 0, 3, 31, 0],\n- \"a00395.html#aa42f7ec660b7353de39f9c86a26711cc\": [4, 0, 0, 3, 31, 1],\n- \"a00395.html#abb52bb00c68909fc1147e5d112e8c2ae\": [4, 0, 0, 3, 31, 5],\n- \"a00395.html#ac37b6f807985ffd25217e33f6136fe58\": [4, 0, 0, 3, 31, 4],\n- \"a00398.html\": [4, 0, 0, 3, 34],\n- \"a00398.html#a4b78f4db0e05f3ca838ee4da6187710e\": [4, 0, 0, 3, 34, 5],\n- \"a00398_source.html\": [4, 0, 0, 3, 34],\n+ \"a00167.html\": [4, 0, 0, 1, 7],\n+ \"a00167_source.html\": [4, 0, 0, 1, 7],\n+ \"a00170.html\": [4, 0, 0, 1, 5],\n+ \"a00170_source.html\": [4, 0, 0, 1, 5],\n+ \"a00173.html\": [4, 0, 0, 1, 6],\n+ \"a00173.html#a24ec5d6ec6b211d0cbaf645c11c198de\": [4, 0, 0, 1, 6, 2],\n+ \"a00173.html#a9920fe883a2f506440aca7c1a2bd1a00\": [4, 0, 0, 1, 6, 1],\n+ \"a00173_source.html\": [4, 0, 0, 1, 6],\n+ \"a00176.html\": [4, 0, 0, 1, 2],\n+ \"a00179.html\": [4, 0, 0, 2, 30],\n+ \"a00179.html#aa6c58dfb2fc9398a026e3268ba2edfad\": [4, 0, 0, 2, 30, 2],\n+ \"a00179.html#ab98cf2a4777006c28d6983db5d8ec574\": [4, 0, 0, 2, 30, 1],\n+ \"a00179.html#ae4856250df52ce4b9b4b16c7a833408c\": [4, 0, 0, 2, 30, 0],\n+ \"a00179_source.html\": [4, 0, 0, 2, 30],\n+ \"a00182.html\": [4, 0, 0, 2, 8],\n+ \"a00182_source.html\": [4, 0, 0, 2, 8],\n+ \"a00185.html\": [4, 0, 0, 2, 23],\n+ \"a00185.html#a0be4f243161c2fd937df60aee511eb16\": [4, 0, 0, 2, 23, 3],\n+ \"a00185_source.html\": [4, 0, 0, 2, 23],\n+ \"a00188.html\": [4, 0, 0, 2, 17],\n+ \"a00188.html#ae1c1177c8725296b34601409322400ea\": [4, 0, 0, 2, 17, 0],\n+ \"a00191.html\": [4, 0, 0, 2, 19],\n+ \"a00194.html\": [4, 0, 0, 2, 14],\n+ \"a00194_source.html\": [4, 0, 0, 2, 14],\n+ \"a00197.html\": [4, 0, 0, 2, 21],\n+ \"a00200.html\": [4, 0, 0, 2, 20],\n+ \"a00200_source.html\": [4, 0, 0, 2, 20],\n+ \"a00203.html\": [4, 0, 0, 2, 13],\n+ \"a00206.html\": [4, 0, 0, 2, 0],\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, 6],\n+ \"a00212_source.html\": [4, 0, 0, 2, 6],\n+ \"a00215.html\": [4, 0, 0, 2, 28],\n+ \"a00215.html#a147114735037c2260d4810a8820e72f6\": [4, 0, 0, 2, 28, 2],\n+ \"a00215.html#a2b6707b04064df79d26d1016dfa2a013\": [4, 0, 0, 2, 28, 3],\n+ \"a00215.html#a55a86a4657d82f6ff048a10d058c529f\": [4, 0, 0, 2, 28, 1],\n+ \"a00215_source.html\": [4, 0, 0, 2, 28],\n+ \"a00218.html\": [4, 0, 0, 2, 26],\n+ \"a00218_source.html\": [4, 0, 0, 2, 26],\n+ \"a00221.html\": [4, 0, 0, 2, 2],\n+ \"a00221_source.html\": [4, 0, 0, 2, 2],\n+ \"a00227.html\": [4, 0, 0, 2, 15],\n+ \"a00230.html\": [4, 0, 0, 2, 10],\n+ \"a00230_source.html\": [4, 0, 0, 2, 10],\n+ \"a00233.html\": [4, 0, 0, 2, 27],\n+ \"a00233.html#a147114735037c2260d4810a8820e72f6\": [4, 0, 0, 2, 27, 0],\n+ \"a00233.html#a2b6707b04064df79d26d1016dfa2a013\": [4, 0, 0, 2, 27, 1],\n+ \"a00236.html\": [4, 0, 0, 2, 12],\n+ \"a00236_source.html\": [4, 0, 0, 2, 12],\n+ \"a00239.html\": [4, 0, 0, 2, 11],\n+ \"a00242.html\": [4, 0, 0, 2, 1],\n+ \"a00242_source.html\": [4, 0, 0, 2, 1],\n+ \"a00245.html\": [4, 0, 0, 2, 16],\n+ \"a00245_source.html\": [4, 0, 0, 2, 16],\n+ \"a00248.html\": [4, 0, 0, 2, 24],\n+ \"a00251.html\": [4, 0, 0, 2, 18],\n+ \"a00251.html#ae1c1177c8725296b34601409322400ea\": [4, 0, 0, 2, 18, 1],\n+ \"a00251_source.html\": [4, 0, 0, 2, 18],\n+ \"a00254.html\": [4, 0, 0, 2, 22],\n+ \"a00254.html#aa8c26fa5afbbfd23795d7d421e543a81\": [4, 0, 0, 2, 22, 0],\n+ \"a00254_source.html\": [4, 0, 0, 2, 22],\n+ \"a00257.html\": [4, 0, 0, 2, 5],\n+ \"a00260_source.html\": [4, 0, 0, 2, 3],\n+ \"a00263.html\": [4, 0, 0, 2, 7],\n+ \"a00266.html\": [4, 0, 0, 2, 25],\n+ \"a00266_source.html\": [4, 0, 0, 2, 25],\n+ \"a00269.html\": [4, 0, 0, 2, 9],\n+ \"a00272.html\": [4, 0, 0, 2, 4],\n+ \"a00272.html#a1744c5e018220146e8df7a68a05d5c43\": [4, 0, 0, 2, 4, 5],\n+ \"a00272.html#aaf5f5013828ac5e4750377dcad969276\": [4, 0, 0, 2, 4, 4],\n+ \"a00272.html#ad19a5c8f7d997b0b16cf646659834b0f\": [4, 0, 0, 2, 4, 3],\n+ \"a00272.html#ae890a8919b441443ffdc0d8ab047838d\": [4, 0, 0, 2, 4, 2],\n+ \"a00272_source.html\": [4, 0, 0, 2, 4],\n+ \"a00275.html\": [4, 0, 0, 3, 1],\n+ \"a00278.html\": [4, 0, 0, 3, 22],\n+ \"a00278_source.html\": [4, 0, 0, 3, 22],\n+ \"a00281.html\": [4, 0, 0, 3, 40],\n+ \"a00281.html#a5172b5b6d51bd5348c7e551e1376f60a\": [4, 0, 0, 3, 40, 0],\n+ \"a00284.html\": [4, 0, 0, 3, 10],\n+ \"a00284_source.html\": [4, 0, 0, 3, 10],\n+ \"a00290.html\": [4, 0, 0, 3, 18],\n+ \"a00290_source.html\": [4, 0, 0, 3, 18],\n+ \"a00293.html\": [4, 0, 0, 3, 19],\n+ \"a00293_source.html\": [4, 0, 0, 3, 19],\n+ \"a00296.html\": [4, 0, 0, 3, 6],\n+ \"a00296_source.html\": [4, 0, 0, 3, 6],\n+ \"a00299.html\": [4, 0, 0, 3, 28],\n+ \"a00299_source.html\": [4, 0, 0, 3, 28],\n+ \"a00302.html\": [4, 0, 0, 3, 0],\n+ \"a00302_source.html\": [4, 0, 0, 3, 0],\n+ \"a00305.html\": [4, 0, 0, 3, 42],\n+ \"a00311_source.html\": [4, 0, 0, 3, 25],\n+ \"a00314.html\": [4, 0, 0, 3, 17],\n+ \"a00317.html\": [4, 0, 0, 3, 8],\n+ \"a00317_source.html\": [4, 0, 0, 3, 8],\n+ \"a00320.html\": [4, 0, 0, 3, 27],\n+ \"a00320_source.html\": [4, 0, 0, 3, 27],\n+ \"a00323.html\": [4, 0, 0, 3, 51],\n+ \"a00323.html#a2e0b14126ed42ee95ca5f5f092c5bc84\": [4, 0, 0, 3, 51, 6],\n+ \"a00323.html#a72fc8b10f24d82aa8a4c99f99403fe5e\": [4, 0, 0, 3, 51, 4],\n+ \"a00323.html#a7c7e26b6d07ec0f16363c196247b294d\": [4, 0, 0, 3, 51, 5],\n+ \"a00323_source.html\": [4, 0, 0, 3, 51],\n+ \"a00326.html\": [4, 0, 0, 3, 14],\n+ \"a00326_source.html\": [4, 0, 0, 3, 14],\n+ \"a00329.html\": [4, 0, 0, 3, 33],\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, 21],\n+ \"a00338.html\": [4, 0, 0, 3, 7],\n+ \"a00341.html\": [4, 0, 0, 3, 58],\n+ \"a00341_source.html\": [4, 0, 0, 3, 58],\n+ \"a00344.html\": [4, 0, 0, 3, 53],\n+ \"a00344.html#a3e57e4771f13855a495ec2c6454c9121\": [4, 0, 0, 3, 53, 3],\n+ \"a00344.html#a76855a1214bf05a8704ee3deaece6339\": [4, 0, 0, 3, 53, 2],\n+ \"a00344.html#a8d21728e3da4cf1a96e1b6f87a97da47\": [4, 0, 0, 3, 53, 4],\n+ \"a00344_source.html\": [4, 0, 0, 3, 53],\n+ \"a00347.html\": [4, 0, 0, 3, 45],\n+ \"a00347_source.html\": [4, 0, 0, 3, 45],\n+ \"a00350.html\": [4, 0, 0, 3, 26],\n+ \"a00350_source.html\": [4, 0, 0, 3, 26],\n+ \"a00353_source.html\": [4, 0, 0, 3, 62],\n+ \"a00356.html\": [4, 0, 0, 3, 46],\n+ \"a00359.html\": [4, 0, 0, 3, 61],\n+ \"a00359.html#a0a386184e9ed9cc4ec844d48d91ba759\": [4, 0, 0, 3, 61, 6],\n+ \"a00359.html#a0f9e5111ffc481b34f0123418b0ecd13\": [4, 0, 0, 3, 61, 13],\n+ \"a00359.html#a13ac0858b6f6600f5a4242aeb797692f\": [4, 0, 0, 3, 61, 14],\n+ \"a00359.html#a1a0e4ac1b773cc295daae7849c833876\": [4, 0, 0, 3, 61, 25],\n+ \"a00359.html#a2b96bc32f3c5c436db3fe60e5139319e\": [4, 0, 0, 3, 61, 20],\n+ \"a00359.html#a31e52d463db397f0dda1a13352ab217c\": [4, 0, 0, 3, 61, 24],\n+ \"a00359.html#a3d070e707c4b2d69d0f024a30501f06c\": [4, 0, 0, 3, 61, 7],\n+ \"a00359.html#a46a14c34d729a626825e4eff8a7de8dd\": [4, 0, 0, 3, 61, 22],\n+ \"a00359.html#a48ad2c1085fcae3881fa956f4cd81890\": [4, 0, 0, 3, 61, 5],\n+ \"a00359.html#a4b0057879b0c5f323185452b0d1a4232\": [4, 0, 0, 3, 61, 8],\n+ \"a00359.html#a523a0528f883f1c569a8a4c9a0e514a0\": [4, 0, 0, 3, 61, 10],\n+ \"a00359.html#a58f4009e3a8872d0ac6780d654cccc2e\": [4, 0, 0, 3, 61, 16],\n+ \"a00359.html#a6a1849035b3acd163d6de715e7683ebf\": [4, 0, 0, 3, 61, 27],\n+ \"a00359.html#a7f3d15de99fffcc537089fa1440d8ca2\": [4, 0, 0, 3, 61, 26],\n+ \"a00359.html#a8d16887f8890aaf7ceb5e3cbb181a191\": [4, 0, 0, 3, 61, 12],\n+ \"a00359.html#a8d52d7d8a5e5c8d7318ce95ee57e9cfa\": [4, 0, 0, 3, 61, 19],\n+ \"a00359.html#a9dab6b5829b51511735b6b841bb36a36\": [4, 0, 0, 3, 61, 15],\n+ \"a00359.html#aac6df5bbfb7131cbb05e2a9691e59ba3\": [4, 0, 0, 3, 61, 17],\n+ \"a00359.html#ab79854d3cb3bcc4f562fc88a0731a447\": [4, 0, 0, 3, 61, 18],\n+ \"a00359.html#ad167fac94fa72c0d3b8db36e5fa2becb\": [4, 0, 0, 3, 61, 21],\n+ \"a00359.html#aebe53b43e5151ce9c355b4aa4ba57c13\": [4, 0, 0, 3, 61, 4],\n+ \"a00359.html#aed2918ac0049316bf09f96879efca3b6\": [4, 0, 0, 3, 61, 9],\n+ \"a00359.html#af01b2988c1bb89268ad572ea7d7ba293\": [4, 0, 0, 3, 61, 23],\n+ \"a00359.html#af378e231b519e8bb1f09f4aa13a38dca\": [4, 0, 0, 3, 61, 11],\n+ \"a00359_source.html\": [4, 0, 0, 3, 61],\n+ \"a00362_source.html\": [4, 0, 0, 3, 23],\n+ \"a00365.html\": [4, 0, 0, 3, 39],\n+ \"a00365_source.html\": [4, 0, 0, 3, 39],\n+ \"a00368.html\": [4, 0, 0, 3, 34],\n+ \"a00368.html#a4b78f4db0e05f3ca838ee4da6187710e\": [4, 0, 0, 3, 34, 5],\n+ \"a00368_source.html\": [4, 0, 0, 3, 34],\n+ \"a00371.html\": [4, 0, 0, 3, 32],\n+ \"a00371.html#a300205092710091b8745c0a145da20a1\": [4, 0, 0, 3, 32, 5],\n+ \"a00371.html#a57f778b84bc6106471006421d289b832\": [4, 0, 0, 3, 32, 6],\n+ \"a00371.html#a7dc820e4e47218768f104b43a184a1bd\": [4, 0, 0, 3, 32, 4],\n+ \"a00371.html#a86bf6ed2ffb0ecc42a7deb8922f4ca4f\": [4, 0, 0, 3, 32, 2],\n+ \"a00371.html#aa42f7ec660b7353de39f9c86a26711cc\": [4, 0, 0, 3, 32, 3],\n+ \"a00371.html#aaa8ed89fd60ea4601d9de63c4811525b\": [4, 0, 0, 3, 32, 1],\n+ \"a00371.html#abb52bb00c68909fc1147e5d112e8c2ae\": [4, 0, 0, 3, 32, 8],\n+ \"a00371.html#ac37b6f807985ffd25217e33f6136fe58\": [4, 0, 0, 3, 32, 7],\n+ \"a00371_source.html\": [4, 0, 0, 3, 32],\n+ \"a00374.html\": [4, 0, 0, 3, 43],\n+ \"a00377.html\": [4, 0, 0, 3, 5],\n+ \"a00380.html\": [4, 0, 0, 3, 9],\n+ \"a00383.html\": [4, 0, 0, 3, 3],\n+ \"a00389.html\": [4, 0, 0, 3, 54],\n+ \"a00389_source.html\": [4, 0, 0, 3, 54],\n+ \"a00398.html\": [4, 0, 0, 3, 36],\n+ \"a00398.html#aefb606eb24889c0f418acf1515a2c723\": [4, 0, 0, 3, 36, 6],\n+ \"a00398_source.html\": [4, 0, 0, 3, 36],\n \"a00401.html\": [4, 0, 0, 3, 60],\n \"a00401_source.html\": [4, 0, 0, 3, 60],\n- \"a00404.html\": [4, 0, 0, 3, 10],\n- \"a00404_source.html\": [4, 0, 0, 3, 10],\n- \"a00407.html\": [4, 0, 0, 3, 39],\n- \"a00407_source.html\": [4, 0, 0, 3, 39],\n- \"a00410.html\": [4, 0, 0, 3, 3],\n- \"a00413.html\": [4, 0, 0, 3, 11],\n- \"a00416.html\": [4, 0, 0, 3, 17],\n- \"a00422.html\": [4, 0, 0, 3, 24],\n- \"a00422.html#aae9294b064e306ac7993dea546c0d8fb\": [4, 0, 0, 3, 24, 2],\n- \"a00422_source.html\": [4, 0, 0, 3, 24],\n- \"a00425.html\": [4, 0, 0, 3, 46],\n- \"a00431.html\": [4, 0, 0, 3, 45],\n- \"a00431_source.html\": [4, 0, 0, 3, 45],\n+ \"a00404.html\": [4, 0, 0, 3, 52],\n+ \"a00404.html#a3e57e4771f13855a495ec2c6454c9121\": [4, 0, 0, 3, 52, 0],\n+ \"a00404.html#a8d21728e3da4cf1a96e1b6f87a97da47\": [4, 0, 0, 3, 52, 1],\n+ \"a00407.html\": [4, 0, 0, 3, 2],\n+ \"a00407.html#a9ac814fcc4484bce32e4616d69afb225\": [4, 0, 0, 3, 2, 0],\n+ \"a00407_source.html\": [4, 0, 0, 3, 2],\n+ \"a00410.html\": [4, 0, 0, 3, 59],\n+ \"a00413.html\": [4, 0, 0, 3, 57],\n+ \"a00413_source.html\": [4, 0, 0, 3, 57],\n+ \"a00416.html\": [4, 0, 0, 3, 4],\n+ \"a00416_source.html\": [4, 0, 0, 3, 4],\n+ \"a00419.html\": [4, 0, 0, 3, 50],\n+ \"a00419.html#a72fc8b10f24d82aa8a4c99f99403fe5e\": [4, 0, 0, 3, 50, 0],\n+ \"a00419.html#a7c7e26b6d07ec0f16363c196247b294d\": [4, 0, 0, 3, 50, 1],\n+ \"a00422.html\": [4, 0, 0, 3, 11],\n+ \"a00425.html\": [4, 0, 0, 3, 48],\n+ \"a00428.html\": [4, 0, 0, 3, 37],\n+ \"a00428_source.html\": [4, 0, 0, 3, 37],\n+ \"a00431.html\": [4, 0, 0, 3, 35],\n \"a00434.html\": [4, 0, 0, 3, 38],\n- \"a00437.html\": [4, 0, 0, 3, 51],\n- \"a00437.html#a2e0b14126ed42ee95ca5f5f092c5bc84\": [4, 0, 0, 3, 51, 6],\n- \"a00437.html#a72fc8b10f24d82aa8a4c99f99403fe5e\": [4, 0, 0, 3, 51, 4],\n- \"a00437.html#a7c7e26b6d07ec0f16363c196247b294d\": [4, 0, 0, 3, 51, 5],\n- \"a00437_source.html\": [4, 0, 0, 3, 51],\n- \"a00440_source.html\": [4, 0, 0, 3, 12],\n- \"a00443.html\": [4, 0, 0, 3, 21],\n- \"a00446.html\": [4, 0, 0, 3, 18],\n- \"a00446_source.html\": [4, 0, 0, 3, 18],\n- \"a00449.html\": [4, 0, 0, 3, 30],\n- \"a00449.html#a63d86e99c211c6daeac2b7b4dd9d928e\": [4, 0, 0, 3, 30, 6],\n- \"a00449.html#a6ede8384dee0353a0ce5fb54ea50c21d\": [4, 0, 0, 3, 30, 1],\n- \"a00449.html#a93d4e38a582b6f32fc4f301df10721d5\": [4, 0, 0, 3, 30, 2],\n- \"a00449.html#a9e357cda5287fae1438f86bc4df27a80\": [4, 0, 0, 3, 30, 4],\n- \"a00449.html#afd1282dfb080cb393ae60188b4582cb2\": [4, 0, 0, 3, 30, 3],\n- \"a00449.html#afee4e6aa4aba9b6a6b421ddd75b52dfc\": [4, 0, 0, 3, 30, 5],\n- \"a00449_source.html\": [4, 0, 0, 3, 30],\n- \"a00455.html\": [4, 0, 0, 3, 35],\n- \"a00458.html\": [4, 0, 0, 3, 47],\n- \"a00458_source.html\": [4, 0, 0, 3, 47],\n- \"a00461.html\": [4, 0, 0, 3, 61],\n- \"a00461.html#a0a386184e9ed9cc4ec844d48d91ba759\": [4, 0, 0, 3, 61, 6],\n- \"a00461.html#a0f9e5111ffc481b34f0123418b0ecd13\": [4, 0, 0, 3, 61, 13],\n- \"a00461.html#a13ac0858b6f6600f5a4242aeb797692f\": [4, 0, 0, 3, 61, 14],\n- \"a00461.html#a1a0e4ac1b773cc295daae7849c833876\": [4, 0, 0, 3, 61, 25],\n- \"a00461.html#a2b96bc32f3c5c436db3fe60e5139319e\": [4, 0, 0, 3, 61, 20],\n- \"a00461.html#a31e52d463db397f0dda1a13352ab217c\": [4, 0, 0, 3, 61, 24],\n- \"a00461.html#a3d070e707c4b2d69d0f024a30501f06c\": [4, 0, 0, 3, 61, 7],\n- \"a00461.html#a46a14c34d729a626825e4eff8a7de8dd\": [4, 0, 0, 3, 61, 22],\n- \"a00461.html#a48ad2c1085fcae3881fa956f4cd81890\": [4, 0, 0, 3, 61, 5],\n- \"a00461.html#a4b0057879b0c5f323185452b0d1a4232\": [4, 0, 0, 3, 61, 8],\n- \"a00461.html#a523a0528f883f1c569a8a4c9a0e514a0\": [4, 0, 0, 3, 61, 10],\n- \"a00461.html#a58f4009e3a8872d0ac6780d654cccc2e\": [4, 0, 0, 3, 61, 16],\n- \"a00461.html#a6a1849035b3acd163d6de715e7683ebf\": [4, 0, 0, 3, 61, 27],\n- \"a00461.html#a7f3d15de99fffcc537089fa1440d8ca2\": [4, 0, 0, 3, 61, 26],\n- \"a00461.html#a8d16887f8890aaf7ceb5e3cbb181a191\": [4, 0, 0, 3, 61, 12]\n+ \"a00437_source.html\": [4, 0, 0, 3, 12],\n+ \"a00440.html\": [4, 0, 0, 3, 31],\n+ \"a00440.html#a57f778b84bc6106471006421d289b832\": [4, 0, 0, 3, 31, 3],\n+ \"a00440.html#a7dc820e4e47218768f104b43a184a1bd\": [4, 0, 0, 3, 31, 2],\n+ \"a00440.html#a86bf6ed2ffb0ecc42a7deb8922f4ca4f\": [4, 0, 0, 3, 31, 0],\n+ \"a00440.html#aa42f7ec660b7353de39f9c86a26711cc\": [4, 0, 0, 3, 31, 1],\n+ \"a00440.html#abb52bb00c68909fc1147e5d112e8c2ae\": [4, 0, 0, 3, 31, 5],\n+ \"a00440.html#ac37b6f807985ffd25217e33f6136fe58\": [4, 0, 0, 3, 31, 4],\n+ \"a00443.html\": [4, 0, 0, 3, 29],\n+ \"a00443.html#a93d4e38a582b6f32fc4f301df10721d5\": [4, 0, 0, 3, 29, 0],\n+ \"a00443.html#a9e357cda5287fae1438f86bc4df27a80\": [4, 0, 0, 3, 29, 2],\n+ \"a00443.html#afd1282dfb080cb393ae60188b4582cb2\": [4, 0, 0, 3, 29, 1],\n+ \"a00443.html#afee4e6aa4aba9b6a6b421ddd75b52dfc\": [4, 0, 0, 3, 29, 3],\n+ \"a00446.html\": [4, 0, 0, 3, 13],\n+ \"a00449.html\": [4, 0, 0, 3, 49],\n+ \"a00449.html#a3a2e8c622e65623a6853c84073bdb4f2\": [4, 0, 0, 3, 49, 0],\n+ \"a00449_source.html\": [4, 0, 0, 3, 49],\n+ \"a00452.html\": [4, 0, 0, 3, 47]\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.html#a8d52d7d8a5e5c8d7318ce95ee57e9cfa\": [4, 0, 0, 3, 61, 19],\n- \"a00461.html#a9dab6b5829b51511735b6b841bb36a36\": [4, 0, 0, 3, 61, 15],\n- \"a00461.html#aac6df5bbfb7131cbb05e2a9691e59ba3\": [4, 0, 0, 3, 61, 17],\n- \"a00461.html#ab79854d3cb3bcc4f562fc88a0731a447\": [4, 0, 0, 3, 61, 18],\n- \"a00461.html#ad167fac94fa72c0d3b8db36e5fa2becb\": [4, 0, 0, 3, 61, 21],\n- \"a00461.html#aebe53b43e5151ce9c355b4aa4ba57c13\": [4, 0, 0, 3, 61, 4],\n- \"a00461.html#aed2918ac0049316bf09f96879efca3b6\": [4, 0, 0, 3, 61, 9],\n- \"a00461.html#af01b2988c1bb89268ad572ea7d7ba293\": [4, 0, 0, 3, 61, 23],\n- \"a00461.html#af378e231b519e8bb1f09f4aa13a38dca\": [4, 0, 0, 3, 61, 11],\n- \"a00461_source.html\": [4, 0, 0, 3, 61],\n- \"a00464_source.html\": [4, 0, 0, 3, 25],\n- \"a00467.html\": [4, 0, 0, 3, 27],\n- \"a00467_source.html\": [4, 0, 0, 3, 27],\n- \"a00470.html\": [4, 0, 0, 3, 42],\n- \"a00473.html\": [4, 0, 0, 3, 48],\n- \"a00476.html\": [4, 0, 0, 3, 29],\n- \"a00476.html#a93d4e38a582b6f32fc4f301df10721d5\": [4, 0, 0, 3, 29, 0],\n- \"a00476.html#a9e357cda5287fae1438f86bc4df27a80\": [4, 0, 0, 3, 29, 2],\n- \"a00476.html#afd1282dfb080cb393ae60188b4582cb2\": [4, 0, 0, 3, 29, 1],\n- \"a00476.html#afee4e6aa4aba9b6a6b421ddd75b52dfc\": [4, 0, 0, 3, 29, 3],\n+ \"a00452_source.html\": [4, 0, 0, 3, 47],\n+ \"a00455.html\": [4, 0, 0, 3, 55],\n+ \"a00458.html\": [4, 0, 0, 3, 24],\n+ \"a00458.html#aae9294b064e306ac7993dea546c0d8fb\": [4, 0, 0, 3, 24, 2],\n+ \"a00458_source.html\": [4, 0, 0, 3, 24],\n+ \"a00461.html\": [4, 0, 0, 3, 15],\n+ \"a00464.html\": [4, 0, 0, 3, 56],\n+ \"a00464.html#ac1829b506847127f406c0d6182fc0cdd\": [4, 0, 0, 3, 56, 5],\n+ \"a00464.html#afdaebcf25a03a9a9986d35d2831605dd\": [4, 0, 0, 3, 56, 4],\n+ \"a00464_source.html\": [4, 0, 0, 3, 56],\n+ \"a00467.html\": [4, 0, 0, 3, 16],\n+ \"a00467_source.html\": [4, 0, 0, 3, 16],\n+ \"a00473.html\": [4, 0, 0, 3, 30],\n+ \"a00473.html#a63d86e99c211c6daeac2b7b4dd9d928e\": [4, 0, 0, 3, 30, 6],\n+ \"a00473.html#a6ede8384dee0353a0ce5fb54ea50c21d\": [4, 0, 0, 3, 30, 1],\n+ \"a00473.html#a93d4e38a582b6f32fc4f301df10721d5\": [4, 0, 0, 3, 30, 2],\n+ \"a00473.html#a9e357cda5287fae1438f86bc4df27a80\": [4, 0, 0, 3, 30, 4],\n+ \"a00473.html#afd1282dfb080cb393ae60188b4582cb2\": [4, 0, 0, 3, 30, 3],\n+ \"a00473.html#afee4e6aa4aba9b6a6b421ddd75b52dfc\": [4, 0, 0, 3, 30, 5],\n+ \"a00473_source.html\": [4, 0, 0, 3, 30],\n \"a00479.html\": [4, 0, 0, 3, 44],\n- \"a00482.html\": [4, 0, 0, 4, 1],\n- \"a00482.html#ad92a1966f54e02a7c2ce061c1228c7b3\": [4, 0, 0, 4, 1, 1],\n- \"a00482_source.html\": [4, 0, 0, 4, 1],\n- \"a00485.html\": [4, 0, 0, 4, 16],\n- \"a00485.html#a584e4e05d52a617c1d313e1f53c8ce58\": [4, 0, 0, 4, 16, 1],\n- \"a00488.html\": [4, 0, 0, 4, 20],\n- \"a00488_source.html\": [4, 0, 0, 4, 20],\n- \"a00491.html\": [4, 0, 0, 4, 4],\n- \"a00491.html#ae6415c63d70d1b582a0162652b16b868\": [4, 0, 0, 4, 4, 0],\n- \"a00494.html\": [4, 0, 0, 4, 7],\n- \"a00494_source.html\": [4, 0, 0, 4, 7],\n- \"a00497.html\": [4, 0, 0, 4, 27],\n- \"a00497_source.html\": [4, 0, 0, 4, 27],\n- \"a00500.html\": [4, 0, 0, 4, 19],\n- \"a00503.html\": [4, 0, 0, 4, 24],\n- \"a00503_source.html\": [4, 0, 0, 4, 24],\n- \"a00506.html\": [4, 0, 0, 4, 23],\n- \"a00509.html\": [4, 0, 0, 4, 8],\n- \"a00512.html\": [4, 0, 0, 4, 6],\n- \"a00515.html\": [4, 0, 0, 4, 10],\n- \"a00518.html\": [4, 0, 0, 4, 15],\n- \"a00518_source.html\": [4, 0, 0, 4, 15],\n- \"a00521.html\": [4, 0, 0, 4, 14],\n- \"a00524.html\": [4, 0, 0, 4, 5],\n- \"a00524_source.html\": [4, 0, 0, 4, 5],\n- \"a00527.html\": [4, 0, 0, 4, 28],\n- \"a00527_source.html\": [4, 0, 0, 4, 28],\n- \"a00530.html\": [4, 0, 0, 4, 25],\n- \"a00533.html\": [4, 0, 0, 4, 2],\n- \"a00536.html\": [4, 0, 0, 4, 18],\n- \"a00536_source.html\": [4, 0, 0, 4, 18],\n- \"a00539.html\": [4, 0, 0, 4, 26],\n- \"a00539_source.html\": [4, 0, 0, 4, 26],\n- \"a00542.html\": [4, 0, 0, 4, 11],\n- \"a00542_source.html\": [4, 0, 0, 4, 11],\n- \"a00548.html\": [4, 0, 0, 4, 17],\n- \"a00548.html#a584e4e05d52a617c1d313e1f53c8ce58\": [4, 0, 0, 4, 17, 2],\n- \"a00548_source.html\": [4, 0, 0, 4, 17],\n- \"a00551.html\": [4, 0, 0, 4, 0],\n- \"a00551.html#ad92a1966f54e02a7c2ce061c1228c7b3\": [4, 0, 0, 4, 0, 0],\n- \"a00554.html\": [4, 0, 0, 4, 22],\n- \"a00554_source.html\": [4, 0, 0, 4, 22],\n- \"a00557.html\": [4, 0, 0, 4, 13],\n- \"a00557.html#a8b4a8e0d32b81b0fa2fa15c437b89e7c\": [4, 0, 0, 4, 13, 1],\n- \"a00557_source.html\": [4, 0, 0, 4, 13],\n- \"a00560.html\": [4, 0, 0, 4, 9],\n- \"a00560_source.html\": [4, 0, 0, 4, 9],\n- \"a00563.html\": [4, 0, 0, 4, 3],\n- \"a00563_source.html\": [4, 0, 0, 4, 3],\n- \"a00566.html\": [4, 0, 0, 4, 12],\n- \"a00569.html\": [4, 0, 0, 4, 21],\n- \"a00572.html\": [4, 0, 0, 5, 22],\n- \"a00572.html#a18a265afdea057ea54be10262396be12\": [4, 0, 0, 5, 22, 6],\n- \"a00572.html#a3453247aec1d8b4642947ffd4bca426b\": [4, 0, 0, 5, 22, 7],\n- \"a00572.html#a62b34d6038ccdfa84d8a5bb0c15328b1\": [4, 0, 0, 5, 22, 3],\n- \"a00572.html#a6c0319a6ebcc83d4a5cf9ff51729bb80\": [4, 0, 0, 5, 22, 8],\n- \"a00572.html#a7771a103b41708e88763ff67059ff01d\": [4, 0, 0, 5, 22, 4],\n- \"a00572.html#ae67d0d86c4e55b175859967a70b36983\": [4, 0, 0, 5, 22, 5],\n- \"a00572_source.html\": [4, 0, 0, 5, 22],\n- \"a00575.html\": [4, 0, 0, 5, 4],\n- \"a00575_source.html\": [4, 0, 0, 5, 4],\n- \"a00578_source.html\": [4, 0, 0, 5, 9],\n- \"a00581.html\": [4, 0, 0, 5, 29],\n- \"a00581.html#a1c320e42b033352fbbd8266e3bd5faad\": [4, 0, 0, 5, 29, 4],\n- \"a00581.html#a4c14be406d50f65bd404429a7b1d3af0\": [4, 0, 0, 5, 29, 8],\n- \"a00581.html#a4f9e295c4f7086ce05cbe37aeeca47fe\": [4, 0, 0, 5, 29, 5],\n- \"a00581.html#aab7ddea9b0bc36f296327e0ec08c4ef0\": [4, 0, 0, 5, 29, 6],\n- \"a00581.html#aac25d6c8afb07054416ba6727685bf55\": [4, 0, 0, 5, 29, 7],\n- \"a00581.html#ae4b4e8e7f0d745882c6a02b507d5bffe\": [4, 0, 0, 5, 29, 3],\n- \"a00581_source.html\": [4, 0, 0, 5, 29],\n- \"a00584.html\": [4, 0, 0, 5, 33],\n- \"a00587.html\": [4, 0, 0, 5, 10],\n- \"a00587_source.html\": [4, 0, 0, 5, 10],\n- \"a00590.html\": [4, 0, 0, 5, 41],\n- \"a00590_source.html\": [4, 0, 0, 5, 41],\n- \"a00593.html\": [4, 0, 0, 5, 19],\n- \"a00593_source.html\": [4, 0, 0, 5, 19],\n+ \"a00482.html\": [4, 0, 0, 4, 8],\n+ \"a00485.html\": [4, 0, 0, 4, 4],\n+ \"a00485.html#ae6415c63d70d1b582a0162652b16b868\": [4, 0, 0, 4, 4, 0],\n+ \"a00488.html\": [4, 0, 0, 4, 10],\n+ \"a00491.html\": [4, 0, 0, 4, 18],\n+ \"a00491_source.html\": [4, 0, 0, 4, 18],\n+ \"a00494.html\": [4, 0, 0, 4, 0],\n+ \"a00494.html#ad92a1966f54e02a7c2ce061c1228c7b3\": [4, 0, 0, 4, 0, 0],\n+ \"a00497.html\": [4, 0, 0, 4, 15],\n+ \"a00497_source.html\": [4, 0, 0, 4, 15],\n+ \"a00500.html\": [4, 0, 0, 4, 22],\n+ \"a00500_source.html\": [4, 0, 0, 4, 22],\n+ \"a00503.html\": [4, 0, 0, 4, 17],\n+ \"a00503.html#a584e4e05d52a617c1d313e1f53c8ce58\": [4, 0, 0, 4, 17, 2],\n+ \"a00503_source.html\": [4, 0, 0, 4, 17],\n+ \"a00506.html\": [4, 0, 0, 4, 20],\n+ \"a00506_source.html\": [4, 0, 0, 4, 20],\n+ \"a00509.html\": [4, 0, 0, 4, 19],\n+ \"a00512.html\": [4, 0, 0, 4, 26],\n+ \"a00512_source.html\": [4, 0, 0, 4, 26],\n+ \"a00515.html\": [4, 0, 0, 4, 27],\n+ \"a00515_source.html\": [4, 0, 0, 4, 27],\n+ \"a00518.html\": [4, 0, 0, 4, 2],\n+ \"a00521.html\": [4, 0, 0, 4, 11],\n+ \"a00521_source.html\": [4, 0, 0, 4, 11],\n+ \"a00524.html\": [4, 0, 0, 4, 7],\n+ \"a00524_source.html\": [4, 0, 0, 4, 7],\n+ \"a00527.html\": [4, 0, 0, 4, 6],\n+ \"a00530.html\": [4, 0, 0, 4, 24],\n+ \"a00530_source.html\": [4, 0, 0, 4, 24],\n+ \"a00533.html\": [4, 0, 0, 4, 23],\n+ \"a00536.html\": [4, 0, 0, 4, 9],\n+ \"a00536_source.html\": [4, 0, 0, 4, 9],\n+ \"a00539.html\": [4, 0, 0, 4, 5],\n+ \"a00539_source.html\": [4, 0, 0, 4, 5],\n+ \"a00542.html\": [4, 0, 0, 4, 16],\n+ \"a00542.html#a584e4e05d52a617c1d313e1f53c8ce58\": [4, 0, 0, 4, 16, 1],\n+ \"a00545.html\": [4, 0, 0, 4, 28],\n+ \"a00545_source.html\": [4, 0, 0, 4, 28],\n+ \"a00548.html\": [4, 0, 0, 4, 25],\n+ \"a00551.html\": [4, 0, 0, 4, 13],\n+ \"a00551.html#a8b4a8e0d32b81b0fa2fa15c437b89e7c\": [4, 0, 0, 4, 13, 1],\n+ \"a00551_source.html\": [4, 0, 0, 4, 13],\n+ \"a00554.html\": [4, 0, 0, 4, 1],\n+ \"a00554.html#ad92a1966f54e02a7c2ce061c1228c7b3\": [4, 0, 0, 4, 1, 1],\n+ \"a00554_source.html\": [4, 0, 0, 4, 1],\n+ \"a00557.html\": [4, 0, 0, 4, 21],\n+ \"a00560.html\": [4, 0, 0, 4, 3],\n+ \"a00560_source.html\": [4, 0, 0, 4, 3],\n+ \"a00563.html\": [4, 0, 0, 4, 12],\n+ \"a00569.html\": [4, 0, 0, 4, 14],\n+ \"a00572.html\": [4, 0, 0, 5, 8],\n+ \"a00572_source.html\": [4, 0, 0, 5, 8],\n+ \"a00575.html\": [4, 0, 0, 5, 22],\n+ \"a00575.html#a18a265afdea057ea54be10262396be12\": [4, 0, 0, 5, 22, 6],\n+ \"a00575.html#a3453247aec1d8b4642947ffd4bca426b\": [4, 0, 0, 5, 22, 7],\n+ \"a00575.html#a62b34d6038ccdfa84d8a5bb0c15328b1\": [4, 0, 0, 5, 22, 3],\n+ \"a00575.html#a6c0319a6ebcc83d4a5cf9ff51729bb80\": [4, 0, 0, 5, 22, 8],\n+ \"a00575.html#a7771a103b41708e88763ff67059ff01d\": [4, 0, 0, 5, 22, 4],\n+ \"a00575.html#ae67d0d86c4e55b175859967a70b36983\": [4, 0, 0, 5, 22, 5],\n+ \"a00575_source.html\": [4, 0, 0, 5, 22],\n+ \"a00578.html\": [4, 0, 0, 5, 25],\n+ \"a00578_source.html\": [4, 0, 0, 5, 25],\n+ \"a00584.html\": [4, 0, 0, 5, 27],\n+ \"a00584_source.html\": [4, 0, 0, 5, 27],\n+ \"a00587.html\": [4, 0, 0, 5, 4],\n+ \"a00587_source.html\": [4, 0, 0, 5, 4],\n+ \"a00590.html\": [4, 0, 0, 5, 39],\n+ \"a00590_source.html\": [4, 0, 0, 5, 39],\n+ \"a00593.html\": [4, 0, 0, 5, 23],\n+ \"a00593.html#ae955942fde34b4cf32ac3573a1aa1e29\": [4, 0, 0, 5, 23, 0],\n+ \"a00593_source.html\": [4, 0, 0, 5, 23],\n \"a00596.html\": [4, 0, 0, 5, 12],\n \"a00596_source.html\": [4, 0, 0, 5, 12],\n- \"a00599.html\": [4, 0, 0, 5, 32],\n- \"a00599_source.html\": [4, 0, 0, 5, 32],\n- \"a00602.html\": [4, 0, 0, 5, 14],\n- \"a00602_source.html\": [4, 0, 0, 5, 14],\n- \"a00605_source.html\": [4, 0, 0, 5, 13],\n- \"a00608_source.html\": [4, 0, 0, 5, 21],\n- \"a00611.html\": [4, 0, 0, 5, 20],\n- \"a00611_source.html\": [4, 0, 0, 5, 20],\n- \"a00614.html\": [4, 0, 0, 5, 31],\n- \"a00614_source.html\": [4, 0, 0, 5, 31],\n- \"a00620.html\": [4, 0, 0, 5, 27],\n- \"a00620_source.html\": [4, 0, 0, 5, 27],\n+ \"a00599.html\": [4, 0, 0, 5, 37],\n+ \"a00599_source.html\": [4, 0, 0, 5, 37],\n+ \"a00605.html\": [4, 0, 0, 5, 15],\n+ \"a00605_source.html\": [4, 0, 0, 5, 15],\n+ \"a00608.html\": [4, 0, 0, 5, 16],\n+ \"a00608_source.html\": [4, 0, 0, 5, 16],\n+ \"a00611.html\": [4, 0, 0, 5, 38],\n+ \"a00614.html\": [4, 0, 0, 5, 28],\n+ \"a00614_source.html\": [4, 0, 0, 5, 28],\n+ \"a00617.html\": [4, 0, 0, 5, 33],\n+ \"a00620.html\": [4, 0, 0, 5, 40],\n \"a00623.html\": [4, 0, 0, 5, 5],\n \"a00623_source.html\": [4, 0, 0, 5, 5],\n- \"a00626.html\": [4, 0, 0, 5, 23],\n- \"a00626.html#ae955942fde34b4cf32ac3573a1aa1e29\": [4, 0, 0, 5, 23, 0],\n- \"a00626_source.html\": [4, 0, 0, 5, 23],\n- \"a00629.html\": [4, 0, 0, 5, 40],\n- \"a00632.html\": [4, 0, 0, 5, 28],\n- \"a00632_source.html\": [4, 0, 0, 5, 28],\n- \"a00635.html\": [4, 0, 0, 5, 8],\n- \"a00635_source.html\": [4, 0, 0, 5, 8],\n+ \"a00626.html\": [4, 0, 0, 5, 3],\n+ \"a00629.html\": [4, 0, 0, 5, 34],\n+ \"a00629_source.html\": [4, 0, 0, 5, 34],\n+ \"a00632_source.html\": [4, 0, 0, 5, 13],\n+ \"a00635.html\": [4, 0, 0, 5, 19],\n+ \"a00635_source.html\": [4, 0, 0, 5, 19],\n \"a00638.html\": [4, 0, 0, 5, 17],\n- \"a00641.html\": [4, 0, 0, 5, 18],\n- \"a00641.html#a99e63c90a8ac740d99716e73fe97e054\": [4, 0, 0, 5, 18, 1],\n- \"a00641_source.html\": [4, 0, 0, 5, 18],\n- \"a00644.html\": [4, 0, 0, 5, 1],\n- \"a00644_source.html\": [4, 0, 0, 5, 1],\n- \"a00647.html\": [4, 0, 0, 5, 25],\n- \"a00647_source.html\": [4, 0, 0, 5, 25],\n- \"a00650.html\": [4, 0, 0, 5, 38],\n- \"a00653.html\": [4, 0, 0, 5, 16],\n- \"a00653_source.html\": [4, 0, 0, 5, 16],\n- \"a00656.html\": [4, 0, 0, 5, 37],\n- \"a00656_source.html\": [4, 0, 0, 5, 37],\n- \"a00659.html\": [4, 0, 0, 5, 15],\n- \"a00659_source.html\": [4, 0, 0, 5, 15],\n- \"a00662.html\": [4, 0, 0, 5, 26],\n- \"a00662_source.html\": [4, 0, 0, 5, 26],\n- \"a00665.html\": [4, 0, 0, 5, 30],\n- \"a00665.html#a37995b0d0610e5fb29c6bd0715151d67\": [4, 0, 0, 5, 30, 3],\n- \"a00665.html#a4adc1bb606fa4a14d5dbd246f95cecd3\": [4, 0, 0, 5, 30, 4],\n- \"a00665.html#a4e4c133c4fd0d9d73593f601be2248a6\": [4, 0, 0, 5, 30, 5],\n- \"a00665.html#ae9a7dceb0a85c356062b55f6939b1419\": [4, 0, 0, 5, 30, 2],\n- \"a00665_source.html\": [4, 0, 0, 5, 30],\n- \"a00668.html\": [4, 0, 0, 5, 34],\n- \"a00668_source.html\": [4, 0, 0, 5, 34],\n- \"a00671_source.html\": [4, 0, 0, 5, 0],\n- \"a00674.html\": [4, 0, 0, 5, 24],\n- \"a00674_source.html\": [4, 0, 0, 5, 24],\n- \"a00677.html\": [4, 0, 0, 5, 35],\n- \"a00680.html\": [4, 0, 0, 5, 6],\n- \"a00680_source.html\": [4, 0, 0, 5, 6],\n- \"a00683.html\": [4, 0, 0, 5, 39],\n- \"a00683_source.html\": [4, 0, 0, 5, 39],\n- \"a00692.html\": [4, 0, 0, 5, 11],\n- \"a00695.html\": [4, 0, 0, 5, 7],\n- \"a00695_source.html\": [4, 0, 0, 5, 7],\n- \"a00698.html\": [4, 0, 0, 5, 3],\n- \"a00701.html\": [4, 0, 0, 5, 2],\n- \"a00701_source.html\": [4, 0, 0, 5, 2],\n- \"a00704.html\": [4, 0, 0, 6, 7],\n- \"a00704_source.html\": [4, 0, 0, 6, 7],\n- \"a00707.html\": [4, 0, 0, 6, 25],\n- \"a00710.html\": [4, 0, 0, 6, 59],\n- \"a00713.html\": [4, 0, 0, 6, 16],\n- \"a00713_source.html\": [4, 0, 0, 6, 16],\n- \"a00716.html\": [4, 0, 0, 6, 11],\n- \"a00719.html\": [4, 0, 0, 6, 33],\n- \"a00719.html#ab56c4bfa363f8c23c48eb078e9c84a9c\": [4, 0, 0, 6, 33, 0],\n- \"a00722.html\": [4, 0, 0, 6, 27],\n- \"a00722.html#a6516ea957c3a22ddf429cefef1fe9486\": [4, 0, 0, 6, 27, 1],\n- \"a00722_source.html\": [4, 0, 0, 6, 27],\n- \"a00725.html\": [4, 0, 0, 6, 47],\n- \"a00725_source.html\": [4, 0, 0, 6, 47],\n- \"a00728_source.html\": [4, 0, 0, 6, 45],\n- \"a00731_source.html\": [4, 0, 0, 6, 40],\n- \"a00734.html\": [4, 0, 0, 6, 8],\n- \"a00737.html\": [4, 0, 0, 6, 10],\n- \"a00737_source.html\": [4, 0, 0, 6, 10],\n- \"a00740.html\": [4, 0, 0, 6, 41],\n- \"a00743.html\": [4, 0, 0, 6, 55],\n- \"a00746.html\": [4, 0, 0, 6, 5],\n- \"a00749.html\": [4, 0, 0, 6, 39],\n- \"a00749_source.html\": [4, 0, 0, 6, 39],\n- \"a00752.html\": [4, 0, 0, 6, 26],\n- \"a00752_source.html\": [4, 0, 0, 6, 26],\n- \"a00755.html\": [4, 0, 0, 6, 42],\n- \"a00755.html#ab6e5a4884342656e0837ef07008ec03f\": [4, 0, 0, 6, 42, 12],\n- \"a00755_source.html\": [4, 0, 0, 6, 42],\n- \"a00758.html\": [4, 0, 0, 6, 44],\n- \"a00758_source.html\": [4, 0, 0, 6, 44],\n- \"a00761.html\": [4, 0, 0, 6, 34],\n- \"a00761.html#ab56c4bfa363f8c23c48eb078e9c84a9c\": [4, 0, 0, 6, 34, 2],\n- \"a00761_source.html\": [4, 0, 0, 6, 34],\n- \"a00764.html\": [4, 0, 0, 6, 51],\n- \"a00764_source.html\": [4, 0, 0, 6, 51],\n- \"a00767.html\": [4, 0, 0, 6, 52],\n- \"a00767.html#a52b9b28b076a8ae17d6d3d72ee1229c3\": [4, 0, 0, 6, 52, 0],\n- \"a00767.html#aa9013a9053629f0c00b97726d9d8e19e\": [4, 0, 0, 6, 52, 1],\n- \"a00767_source.html\": [4, 0, 0, 6, 52],\n- \"a00773.html\": [4, 0, 0, 6, 9],\n- \"a00773_source.html\": [4, 0, 0, 6, 9],\n+ \"a00641.html\": [4, 0, 0, 5, 20],\n+ \"a00641_source.html\": [4, 0, 0, 5, 20],\n+ \"a00644.html\": [4, 0, 0, 5, 11],\n+ \"a00647.html\": [4, 0, 0, 5, 14],\n+ \"a00647_source.html\": [4, 0, 0, 5, 14],\n+ \"a00650_source.html\": [4, 0, 0, 5, 9],\n+ \"a00653.html\": [4, 0, 0, 5, 24],\n+ \"a00653_source.html\": [4, 0, 0, 5, 24],\n+ \"a00656_source.html\": [4, 0, 0, 5, 0],\n+ \"a00659.html\": [4, 0, 0, 5, 18],\n+ \"a00659.html#a99e63c90a8ac740d99716e73fe97e054\": [4, 0, 0, 5, 18, 1],\n+ \"a00659_source.html\": [4, 0, 0, 5, 18],\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, 10],\n+ \"a00665_source.html\": [4, 0, 0, 5, 10],\n+ \"a00668.html\": [4, 0, 0, 5, 31],\n+ \"a00668_source.html\": [4, 0, 0, 5, 31],\n+ \"a00671.html\": [4, 0, 0, 5, 2],\n+ \"a00671_source.html\": [4, 0, 0, 5, 2],\n+ \"a00674.html\": [4, 0, 0, 5, 6],\n+ \"a00674_source.html\": [4, 0, 0, 5, 6],\n+ \"a00677.html\": [4, 0, 0, 5, 30],\n+ \"a00677.html#a37995b0d0610e5fb29c6bd0715151d67\": [4, 0, 0, 5, 30, 3],\n+ \"a00677.html#a4adc1bb606fa4a14d5dbd246f95cecd3\": [4, 0, 0, 5, 30, 4],\n+ \"a00677.html#a4e4c133c4fd0d9d73593f601be2248a6\": [4, 0, 0, 5, 30, 5],\n+ \"a00677.html#ae9a7dceb0a85c356062b55f6939b1419\": [4, 0, 0, 5, 30, 2],\n+ \"a00677_source.html\": [4, 0, 0, 5, 30],\n+ \"a00680_source.html\": [4, 0, 0, 5, 21],\n+ \"a00683.html\": [4, 0, 0, 5, 1],\n+ \"a00683_source.html\": [4, 0, 0, 5, 1],\n+ \"a00686.html\": [4, 0, 0, 5, 35],\n+ \"a00689.html\": [4, 0, 0, 5, 32],\n+ \"a00689_source.html\": [4, 0, 0, 5, 32],\n+ \"a00695.html\": [4, 0, 0, 5, 41],\n+ \"a00695_source.html\": [4, 0, 0, 5, 41],\n+ \"a00698.html\": [4, 0, 0, 5, 26],\n+ \"a00698_source.html\": [4, 0, 0, 5, 26],\n+ \"a00701.html\": [4, 0, 0, 5, 7],\n+ \"a00701_source.html\": [4, 0, 0, 5, 7],\n+ \"a00704.html\": [4, 0, 0, 6, 2],\n+ \"a00704_source.html\": [4, 0, 0, 6, 2],\n+ \"a00710.html\": [4, 0, 0, 6, 57],\n+ \"a00713.html\": [4, 0, 0, 6, 31],\n+ \"a00713_source.html\": [4, 0, 0, 6, 31],\n+ \"a00716.html\": [4, 0, 0, 6, 10],\n+ \"a00716_source.html\": [4, 0, 0, 6, 10],\n+ \"a00719.html\": [4, 0, 0, 6, 1],\n+ \"a00719_source.html\": [4, 0, 0, 6, 1],\n+ \"a00722.html\": [4, 0, 0, 6, 39],\n+ \"a00722_source.html\": [4, 0, 0, 6, 39],\n+ \"a00725.html\": [4, 0, 0, 6, 20],\n+ \"a00725.html#a35c269c3243cab16a7475239a9c91021\": [4, 0, 0, 6, 20, 3],\n+ \"a00725_source.html\": [4, 0, 0, 6, 20],\n+ \"a00728.html\": [4, 0, 0, 6, 4],\n+ \"a00728.html#a106ec458ddb425604809da93346af55d\": [4, 0, 0, 6, 4, 4],\n+ \"a00728.html#a552de56fca49d1b4942dd9b8e8357b0a\": [4, 0, 0, 6, 4, 5],\n+ \"a00728.html#a5644e12e89afaac433f5d61c3d8e9003\": [4, 0, 0, 6, 4, 2],\n+ \"a00728.html#a6abcac97e441f1454790ff53caa1b229\": [4, 0, 0, 6, 4, 8],\n+ \"a00728.html#a74eb09e3192f06bae9de746aa981624a\": [4, 0, 0, 6, 4, 1],\n+ \"a00728.html#aa84fa88db91d429bec261c655fc54bd6\": [4, 0, 0, 6, 4, 3],\n+ \"a00728.html#aa91c0485819ec2bfd249a922c81e3eb4\": [4, 0, 0, 6, 4, 6],\n+ \"a00728.html#af2dc48a6a2e9abf4d0636578847a6b5a\": [4, 0, 0, 6, 4, 7],\n+ \"a00728_source.html\": [4, 0, 0, 6, 4],\n+ \"a00731.html\": [4, 0, 0, 6, 17],\n+ \"a00734_source.html\": [4, 0, 0, 6, 43],\n+ \"a00737_source.html\": [4, 0, 0, 6, 40],\n+ \"a00740.html\": [4, 0, 0, 6, 16],\n+ \"a00740_source.html\": [4, 0, 0, 6, 16],\n+ \"a00746.html\": [4, 0, 0, 6, 53],\n+ \"a00746.html#a0ec82adc6e13261cf4a012b65b301256\": [4, 0, 0, 6, 53, 0],\n+ \"a00746.html#a2c7eca9f27b43b52756c1afd85478dd8\": [4, 0, 0, 6, 53, 1],\n+ \"a00749.html\": [4, 0, 0, 6, 51],\n+ \"a00749_source.html\": [4, 0, 0, 6, 51],\n+ \"a00752.html\": [4, 0, 0, 6, 14],\n+ \"a00752_source.html\": [4, 0, 0, 6, 14],\n+ \"a00755.html\": [4, 0, 0, 6, 50],\n+ \"a00758_source.html\": [4, 0, 0, 6, 45],\n+ \"a00761.html\": [4, 0, 0, 6, 3],\n+ \"a00761.html#a106ec458ddb425604809da93346af55d\": [4, 0, 0, 6, 3, 2],\n+ \"a00761.html#a552de56fca49d1b4942dd9b8e8357b0a\": [4, 0, 0, 6, 3, 3],\n+ \"a00761.html#a5644e12e89afaac433f5d61c3d8e9003\": [4, 0, 0, 6, 3, 0],\n+ \"a00761.html#a6abcac97e441f1454790ff53caa1b229\": [4, 0, 0, 6, 3, 6],\n+ \"a00761.html#aa84fa88db91d429bec261c655fc54bd6\": [4, 0, 0, 6, 3, 1],\n+ \"a00761.html#aa91c0485819ec2bfd249a922c81e3eb4\": [4, 0, 0, 6, 3, 4],\n+ \"a00761.html#af2dc48a6a2e9abf4d0636578847a6b5a\": [4, 0, 0, 6, 3, 5],\n+ \"a00764.html\": [4, 0, 0, 6, 46],\n+ \"a00764_source.html\": [4, 0, 0, 6, 46],\n+ \"a00767.html\": [4, 0, 0, 6, 15],\n+ \"a00770.html\": [4, 0, 0, 6, 29],\n+ \"a00770.html#a37ca85391e3bc671c71b68bc324296f0\": [4, 0, 0, 6, 29, 7],\n+ \"a00770.html#a6516ea957c3a22ddf429cefef1fe9486\": [4, 0, 0, 6, 29, 4],\n+ \"a00770.html#a81b7af7638d28555c3f404318cc67b22\": [4, 0, 0, 6, 29, 5],\n+ \"a00770.html#aa84114ad1593684ad739088a2898afdb\": [4, 0, 0, 6, 29, 1],\n+ \"a00770.html#ad2b587fde5d35a27d6c88feb4432e785\": [4, 0, 0, 6, 29, 3],\n+ \"a00770.html#aed4b2ca704ddd6530ea70122f883ac88\": [4, 0, 0, 6, 29, 6],\n+ \"a00770.html#af55440f741d8b2f706101f7a79ba7111\": [4, 0, 0, 6, 29, 2],\n+ \"a00770_source.html\": [4, 0, 0, 6, 29],\n+ \"a00773.html\": [4, 0, 0, 6, 55],\n+ \"a00776.html\": [4, 0, 0, 6, 0],\n+ \"a00776_source.html\": [4, 0, 0, 6, 0],\n \"a00779.html\": [4, 0, 0, 6, 30],\n- \"a00785.html\": [4, 0, 0, 6, 14],\n- \"a00785_source.html\": [4, 0, 0, 6, 14],\n- \"a00788.html\": [4, 0, 0, 6, 18],\n- \"a00788_source.html\": [4, 0, 0, 6, 18],\n- \"a00791.html\": [4, 0, 0, 6, 3],\n- \"a00791.html#a106ec458ddb425604809da93346af55d\": [4, 0, 0, 6, 3, 2],\n- \"a00791.html#a552de56fca49d1b4942dd9b8e8357b0a\": [4, 0, 0, 6, 3, 3],\n- \"a00791.html#a5644e12e89afaac433f5d61c3d8e9003\": [4, 0, 0, 6, 3, 0],\n- \"a00791.html#a6abcac97e441f1454790ff53caa1b229\": [4, 0, 0, 6, 3, 6],\n- \"a00791.html#aa84fa88db91d429bec261c655fc54bd6\": [4, 0, 0, 6, 3, 1],\n- \"a00791.html#aa91c0485819ec2bfd249a922c81e3eb4\": [4, 0, 0, 6, 3, 4],\n- \"a00791.html#af2dc48a6a2e9abf4d0636578847a6b5a\": [4, 0, 0, 6, 3, 5],\n- \"a00794.html\": [4, 0, 0, 6, 58],\n- \"a00794_source.html\": [4, 0, 0, 6, 58],\n- \"a00797.html\": [4, 0, 0, 6, 31],\n- \"a00797_source.html\": [4, 0, 0, 6, 31],\n- \"a00800.html\": [4, 0, 0, 6, 48],\n- \"a00803.html\": [4, 0, 0, 6, 1],\n- \"a00803_source.html\": [4, 0, 0, 6, 1],\n- \"a00806.html\": [4, 0, 0, 6, 13],\n- \"a00809.html\": [4, 0, 0, 6, 35],\n- \"a00812.html\": [4, 0, 0, 6, 0],\n- \"a00812_source.html\": [4, 0, 0, 6, 0],\n- \"a00815.html\": [4, 0, 0, 6, 2],\n- \"a00815_source.html\": [4, 0, 0, 6, 2],\n- \"a00818.html\": [4, 0, 0, 6, 38],\n- \"a00821.html\": [4, 0, 0, 6, 37],\n- \"a00821_source.html\": [4, 0, 0, 6, 37],\n- \"a00824_source.html\": [4, 0, 0, 6, 32],\n- \"a00827.html\": [4, 0, 0, 6, 22],\n- \"a00830.html\": [4, 0, 0, 6, 60],\n- \"a00830_source.html\": [4, 0, 0, 6, 60],\n- \"a00833.html\": [4, 0, 0, 6, 12],\n- \"a00833_source.html\": [4, 0, 0, 6, 12],\n- \"a00836.html\": [4, 0, 0, 6, 19],\n- \"a00836.html#a35c269c3243cab16a7475239a9c91021\": [4, 0, 0, 6, 19, 0],\n- \"a00839.html\": [4, 0, 0, 6, 17],\n- \"a00842.html\": [4, 0, 0, 6, 54],\n- \"a00842.html#a0ec82adc6e13261cf4a012b65b301256\": [4, 0, 0, 6, 54, 4],\n- \"a00842.html#a2c7eca9f27b43b52756c1afd85478dd8\": [4, 0, 0, 6, 54, 5],\n- \"a00842_source.html\": [4, 0, 0, 6, 54],\n- \"a00848.html\": [4, 0, 0, 6, 6],\n- \"a00848_source.html\": [4, 0, 0, 6, 6],\n- \"a00851.html\": [4, 0, 0, 6, 28],\n- \"a00851.html#a81b7af7638d28555c3f404318cc67b22\": [4, 0, 0, 6, 28, 3],\n- \"a00851.html#aa84114ad1593684ad739088a2898afdb\": [4, 0, 0, 6, 28, 0]\n+ \"a00782.html\": [4, 0, 0, 6, 9],\n+ \"a00782_source.html\": [4, 0, 0, 6, 9],\n+ \"a00788.html\": [4, 0, 0, 6, 42],\n+ \"a00788.html#ab6e5a4884342656e0837ef07008ec03f\": [4, 0, 0, 6, 42, 12],\n+ \"a00788_source.html\": [4, 0, 0, 6, 42],\n+ \"a00791.html\": [4, 0, 0, 6, 41],\n+ \"a00794.html\": [4, 0, 0, 6, 49],\n+ \"a00794_source.html\": [4, 0, 0, 6, 49],\n+ \"a00797.html\": [4, 0, 0, 6, 28],\n+ \"a00797.html#a81b7af7638d28555c3f404318cc67b22\": [4, 0, 0, 6, 28, 3],\n+ \"a00797.html#aa84114ad1593684ad739088a2898afdb\": [4, 0, 0, 6, 28, 0],\n+ \"a00797.html#ad2b587fde5d35a27d6c88feb4432e785\": [4, 0, 0, 6, 28, 2],\n+ \"a00797.html#aed4b2ca704ddd6530ea70122f883ac88\": [4, 0, 0, 6, 28, 4],\n+ \"a00797.html#af55440f741d8b2f706101f7a79ba7111\": [4, 0, 0, 6, 28, 1],\n+ \"a00800.html\": [4, 0, 0, 6, 44],\n+ \"a00800_source.html\": [4, 0, 0, 6, 44],\n+ \"a00803.html\": [4, 0, 0, 6, 18],\n+ \"a00803_source.html\": [4, 0, 0, 6, 18],\n+ \"a00806.html\": [4, 0, 0, 6, 37],\n+ \"a00806_source.html\": [4, 0, 0, 6, 37],\n+ \"a00809.html\": [4, 0, 0, 6, 6],\n+ \"a00809_source.html\": [4, 0, 0, 6, 6],\n+ \"a00815.html\": [4, 0, 0, 6, 23],\n+ \"a00815_source.html\": [4, 0, 0, 6, 23],\n+ \"a00818.html\": [4, 0, 0, 6, 58],\n+ \"a00818_source.html\": [4, 0, 0, 6, 58],\n+ \"a00821.html\": [4, 0, 0, 6, 59]\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- \"a00851.html#ad2b587fde5d35a27d6c88feb4432e785\": [4, 0, 0, 6, 28, 2],\n- \"a00851.html#aed4b2ca704ddd6530ea70122f883ac88\": [4, 0, 0, 6, 28, 4],\n- \"a00851.html#af55440f741d8b2f706101f7a79ba7111\": [4, 0, 0, 6, 28, 1],\n- \"a00854.html\": [4, 0, 0, 6, 50],\n- \"a00857.html\": [4, 0, 0, 6, 4],\n- \"a00857.html#a106ec458ddb425604809da93346af55d\": [4, 0, 0, 6, 4, 4],\n- \"a00857.html#a552de56fca49d1b4942dd9b8e8357b0a\": [4, 0, 0, 6, 4, 5],\n- \"a00857.html#a5644e12e89afaac433f5d61c3d8e9003\": [4, 0, 0, 6, 4, 2],\n- \"a00857.html#a6abcac97e441f1454790ff53caa1b229\": [4, 0, 0, 6, 4, 8],\n- \"a00857.html#a74eb09e3192f06bae9de746aa981624a\": [4, 0, 0, 6, 4, 1],\n- \"a00857.html#aa84fa88db91d429bec261c655fc54bd6\": [4, 0, 0, 6, 4, 3],\n- \"a00857.html#aa91c0485819ec2bfd249a922c81e3eb4\": [4, 0, 0, 6, 4, 6],\n- \"a00857.html#af2dc48a6a2e9abf4d0636578847a6b5a\": [4, 0, 0, 6, 4, 7],\n- \"a00857_source.html\": [4, 0, 0, 6, 4],\n- \"a00860.html\": [4, 0, 0, 6, 49],\n- \"a00860_source.html\": [4, 0, 0, 6, 49],\n- \"a00863.html\": [4, 0, 0, 6, 36],\n- \"a00863_source.html\": [4, 0, 0, 6, 36],\n- \"a00866.html\": [4, 0, 0, 6, 21],\n- \"a00866_source.html\": [4, 0, 0, 6, 21],\n- \"a00869.html\": [4, 0, 0, 6, 57],\n- \"a00872.html\": [4, 0, 0, 6, 24],\n- \"a00872_source.html\": [4, 0, 0, 6, 24],\n- \"a00875.html\": [4, 0, 0, 6, 53],\n- \"a00875.html#a0ec82adc6e13261cf4a012b65b301256\": [4, 0, 0, 6, 53, 0],\n- \"a00875.html#a2c7eca9f27b43b52756c1afd85478dd8\": [4, 0, 0, 6, 53, 1],\n- \"a00878.html\": [4, 0, 0, 6, 23],\n- \"a00878_source.html\": [4, 0, 0, 6, 23],\n- \"a00881.html\": [4, 0, 0, 6, 29],\n- \"a00881.html#a37ca85391e3bc671c71b68bc324296f0\": [4, 0, 0, 6, 29, 7],\n- \"a00881.html#a6516ea957c3a22ddf429cefef1fe9486\": [4, 0, 0, 6, 29, 4],\n- \"a00881.html#a81b7af7638d28555c3f404318cc67b22\": [4, 0, 0, 6, 29, 5],\n- \"a00881.html#aa84114ad1593684ad739088a2898afdb\": [4, 0, 0, 6, 29, 1],\n- \"a00881.html#ad2b587fde5d35a27d6c88feb4432e785\": [4, 0, 0, 6, 29, 3],\n- \"a00881.html#aed4b2ca704ddd6530ea70122f883ac88\": [4, 0, 0, 6, 29, 6],\n- \"a00881.html#af55440f741d8b2f706101f7a79ba7111\": [4, 0, 0, 6, 29, 2],\n- \"a00881_source.html\": [4, 0, 0, 6, 29],\n- \"a00887.html\": [4, 0, 0, 6, 15],\n- \"a00890_source.html\": [4, 0, 0, 6, 43],\n- \"a00893.html\": [4, 0, 0, 6, 46],\n- \"a00893_source.html\": [4, 0, 0, 6, 46],\n- \"a00896.html\": [4, 0, 0, 6, 56],\n- \"a00896_source.html\": [4, 0, 0, 6, 56],\n- \"a00899.html\": [4, 0, 0, 6, 20],\n- \"a00899.html#a35c269c3243cab16a7475239a9c91021\": [4, 0, 0, 6, 20, 3],\n- \"a00899_source.html\": [4, 0, 0, 6, 20],\n- \"a00905.html\": [4, 0, 0, 7, 24],\n- \"a00905_source.html\": [4, 0, 0, 7, 24],\n- \"a00908.html\": [4, 0, 0, 7, 22],\n- \"a00908_source.html\": [4, 0, 0, 7, 22],\n- \"a00911.html\": [4, 0, 0, 7, 14],\n- \"a00914.html\": [4, 0, 0, 7, 2],\n- \"a00917.html\": [4, 0, 0, 7, 0],\n- \"a00920.html\": [4, 0, 0, 7, 26],\n- \"a00920_source.html\": [4, 0, 0, 7, 26],\n- \"a00923.html\": [4, 0, 0, 7, 6],\n- \"a00926.html\": [4, 0, 0, 7, 8],\n- \"a00926_source.html\": [4, 0, 0, 7, 8],\n- \"a00932.html\": [4, 0, 0, 7, 25],\n- \"a00932_source.html\": [4, 0, 0, 7, 25],\n- \"a00935.html\": [4, 0, 0, 7, 18],\n- \"a00938.html\": [4, 0, 0, 7, 7],\n- \"a00938_source.html\": [4, 0, 0, 7, 7],\n- \"a00941.html\": [4, 0, 0, 7, 1],\n- \"a00941_source.html\": [4, 0, 0, 7, 1],\n- \"a00944.html\": [4, 0, 0, 7, 13],\n- \"a00944_source.html\": [4, 0, 0, 7, 13],\n- \"a00947_source.html\": [4, 0, 0, 7, 17],\n- \"a00956.html\": [4, 0, 0, 7, 12],\n- \"a00956.html#ae7a6582902c6daf9f20f2f7e466c60d8\": [4, 0, 0, 7, 12, 0],\n- \"a00959.html\": [4, 0, 0, 7, 20],\n- \"a00959.html#ad6ba0a40d5dd8936f4ca53f7bb3ef53b\": [4, 0, 0, 7, 20, 2],\n- \"a00959_source.html\": [4, 0, 0, 7, 20],\n- \"a00965.html\": [4, 0, 0, 7, 27],\n- \"a00968.html\": [4, 0, 0, 7, 21],\n- \"a00971.html\": [4, 0, 0, 7, 10],\n- \"a00974.html\": [4, 0, 0, 7, 3],\n- \"a00974_source.html\": [4, 0, 0, 7, 3],\n- \"a00977.html\": [4, 0, 0, 7, 28],\n- \"a00977_source.html\": [4, 0, 0, 7, 28],\n- \"a00980.html\": [4, 0, 0, 7, 16],\n- \"a00980_source.html\": [4, 0, 0, 7, 16],\n- \"a00983.html\": [4, 0, 0, 7, 23],\n- \"a00983_source.html\": [4, 0, 0, 7, 23],\n- \"a00986.html\": [4, 0, 0, 7, 15],\n- \"a00986_source.html\": [4, 0, 0, 7, 15],\n- \"a00989.html\": [4, 0, 0, 7, 4],\n- \"a00992.html\": [4, 0, 0, 7, 19],\n- \"a00992_source.html\": [4, 0, 0, 7, 19],\n+ \"a00824.html\": [4, 0, 0, 6, 11],\n+ \"a00827.html\": [4, 0, 0, 6, 7],\n+ \"a00827_source.html\": [4, 0, 0, 6, 7],\n+ \"a00830.html\": [4, 0, 0, 6, 8],\n+ \"a00833.html\": [4, 0, 0, 6, 34],\n+ \"a00833.html#ab56c4bfa363f8c23c48eb078e9c84a9c\": [4, 0, 0, 6, 34, 2],\n+ \"a00833_source.html\": [4, 0, 0, 6, 34],\n+ \"a00836.html\": [4, 0, 0, 6, 35],\n+ \"a00839.html\": [4, 0, 0, 6, 38],\n+ \"a00842_source.html\": [4, 0, 0, 6, 32],\n+ \"a00845.html\": [4, 0, 0, 6, 21],\n+ \"a00845_source.html\": [4, 0, 0, 6, 21],\n+ \"a00848.html\": [4, 0, 0, 6, 25],\n+ \"a00851.html\": [4, 0, 0, 6, 22],\n+ \"a00857.html\": [4, 0, 0, 6, 54],\n+ \"a00857.html#a0ec82adc6e13261cf4a012b65b301256\": [4, 0, 0, 6, 54, 4],\n+ \"a00857.html#a2c7eca9f27b43b52756c1afd85478dd8\": [4, 0, 0, 6, 54, 5],\n+ \"a00857_source.html\": [4, 0, 0, 6, 54],\n+ \"a00860.html\": [4, 0, 0, 6, 56],\n+ \"a00860_source.html\": [4, 0, 0, 6, 56],\n+ \"a00863.html\": [4, 0, 0, 6, 52],\n+ \"a00863.html#a52b9b28b076a8ae17d6d3d72ee1229c3\": [4, 0, 0, 6, 52, 0],\n+ \"a00863.html#aa9013a9053629f0c00b97726d9d8e19e\": [4, 0, 0, 6, 52, 1],\n+ \"a00863_source.html\": [4, 0, 0, 6, 52],\n+ \"a00866.html\": [4, 0, 0, 6, 12],\n+ \"a00866_source.html\": [4, 0, 0, 6, 12],\n+ \"a00869.html\": [4, 0, 0, 6, 60],\n+ \"a00869_source.html\": [4, 0, 0, 6, 60],\n+ \"a00872.html\": [4, 0, 0, 6, 27],\n+ \"a00872.html#a6516ea957c3a22ddf429cefef1fe9486\": [4, 0, 0, 6, 27, 1],\n+ \"a00872_source.html\": [4, 0, 0, 6, 27],\n+ \"a00875.html\": [4, 0, 0, 6, 19],\n+ \"a00875.html#a35c269c3243cab16a7475239a9c91021\": [4, 0, 0, 6, 19, 0],\n+ \"a00878.html\": [4, 0, 0, 6, 33],\n+ \"a00878.html#ab56c4bfa363f8c23c48eb078e9c84a9c\": [4, 0, 0, 6, 33, 0],\n+ \"a00881.html\": [4, 0, 0, 6, 48],\n+ \"a00884.html\": [4, 0, 0, 6, 36],\n+ \"a00884_source.html\": [4, 0, 0, 6, 36],\n+ \"a00887.html\": [4, 0, 0, 6, 26],\n+ \"a00887_source.html\": [4, 0, 0, 6, 26],\n+ \"a00890.html\": [4, 0, 0, 6, 5],\n+ \"a00893.html\": [4, 0, 0, 6, 13],\n+ \"a00896.html\": [4, 0, 0, 6, 47],\n+ \"a00896_source.html\": [4, 0, 0, 6, 47],\n+ \"a00899.html\": [4, 0, 0, 6, 24],\n+ \"a00899_source.html\": [4, 0, 0, 6, 24],\n+ \"a00905.html\": [4, 0, 0, 7, 19],\n+ \"a00905_source.html\": [4, 0, 0, 7, 19],\n+ \"a00908.html\": [4, 0, 0, 7, 26],\n+ \"a00908_source.html\": [4, 0, 0, 7, 26],\n+ \"a00911.html\": [4, 0, 0, 7, 3],\n+ \"a00911_source.html\": [4, 0, 0, 7, 3],\n+ \"a00917.html\": [4, 0, 0, 7, 22],\n+ \"a00917_source.html\": [4, 0, 0, 7, 22],\n+ \"a00923.html\": [4, 0, 0, 7, 24],\n+ \"a00923_source.html\": [4, 0, 0, 7, 24],\n+ \"a00926.html\": [4, 0, 0, 7, 15],\n+ \"a00926_source.html\": [4, 0, 0, 7, 15],\n+ \"a00929.html\": [4, 0, 0, 7, 12],\n+ \"a00929.html#ae7a6582902c6daf9f20f2f7e466c60d8\": [4, 0, 0, 7, 12, 0],\n+ \"a00932.html\": [4, 0, 0, 7, 1],\n+ \"a00932_source.html\": [4, 0, 0, 7, 1],\n+ \"a00935.html\": [4, 0, 0, 7, 0],\n+ \"a00938.html\": [4, 0, 0, 7, 23],\n+ \"a00938_source.html\": [4, 0, 0, 7, 23],\n+ \"a00944_source.html\": [4, 0, 0, 7, 17],\n+ \"a00947.html\": [4, 0, 0, 7, 7],\n+ \"a00947_source.html\": [4, 0, 0, 7, 7],\n+ \"a00950.html\": [4, 0, 0, 7, 6],\n+ \"a00953.html\": [4, 0, 0, 7, 13],\n+ \"a00953_source.html\": [4, 0, 0, 7, 13],\n+ \"a00956.html\": [4, 0, 0, 7, 28],\n+ \"a00956_source.html\": [4, 0, 0, 7, 28],\n+ \"a00959.html\": [4, 0, 0, 7, 18],\n+ \"a00962.html\": [4, 0, 0, 7, 14],\n+ \"a00965.html\": [4, 0, 0, 7, 2],\n+ \"a00968.html\": [4, 0, 0, 7, 25],\n+ \"a00968_source.html\": [4, 0, 0, 7, 25],\n+ \"a00971.html\": [4, 0, 0, 7, 4],\n+ \"a00977.html\": [4, 0, 0, 7, 10],\n+ \"a00980.html\": [4, 0, 0, 7, 27],\n+ \"a00983.html\": [4, 0, 0, 7, 5],\n+ \"a00983_source.html\": [4, 0, 0, 7, 5],\n+ \"a00986.html\": [4, 0, 0, 7, 20],\n+ \"a00986.html#ad6ba0a40d5dd8936f4ca53f7bb3ef53b\": [4, 0, 0, 7, 20, 2],\n+ \"a00986_source.html\": [4, 0, 0, 7, 20],\n+ \"a00989.html\": [4, 0, 0, 7, 21],\n+ \"a00992.html\": [4, 0, 0, 7, 16],\n+ \"a00992_source.html\": [4, 0, 0, 7, 16],\n \"a00995.html\": [4, 0, 0, 7, 11],\n \"a00995_source.html\": [4, 0, 0, 7, 11],\n- \"a00998.html\": [4, 0, 0, 7, 5],\n- \"a00998_source.html\": [4, 0, 0, 7, 5],\n- \"a01001.html\": [4, 0, 0, 8, 51],\n- \"a01004.html\": [4, 0, 0, 8, 57],\n- \"a01004_source.html\": [4, 0, 0, 8, 57],\n- \"a01010.html\": [4, 0, 0, 8, 13],\n- \"a01010.html#a8ec37fe83eda47404b8588e1f012df21\": [4, 0, 0, 8, 13, 0],\n- \"a01010.html#a9753b4e62378151d30bf8af5e2fc1602\": [4, 0, 0, 8, 13, 1],\n- \"a01010_source.html\": [4, 0, 0, 8, 13],\n- \"a01013.html\": [4, 0, 0, 8, 12],\n- \"a01013_source.html\": [4, 0, 0, 8, 12],\n- \"a01016_source.html\": [4, 0, 0, 8, 7],\n- \"a01019.html\": [4, 0, 0, 8, 50],\n- \"a01019.html#a3382482454c164c6f5817dcbe6f932b3\": [4, 0, 0, 8, 50, 1],\n- \"a01019_source.html\": [4, 0, 0, 8, 50],\n- \"a01022.html\": [4, 0, 0, 8, 45],\n- \"a01025.html\": [4, 0, 0, 8, 28],\n- \"a01025_source.html\": [4, 0, 0, 8, 28],\n- \"a01031.html\": [4, 0, 0, 8, 1],\n- \"a01031_source.html\": [4, 0, 0, 8, 1],\n- \"a01034.html\": [4, 0, 0, 8, 2],\n- \"a01040.html\": [4, 0, 0, 8, 26],\n- \"a01040.html#a2b0857edd76f8d63eeee0ce9944e28d4\": [4, 0, 0, 8, 26, 1],\n- \"a01040_source.html\": [4, 0, 0, 8, 26],\n+ \"a00998.html\": [4, 0, 0, 7, 8],\n+ \"a00998_source.html\": [4, 0, 0, 7, 8],\n+ \"a01001.html\": [4, 0, 0, 8, 8],\n+ \"a01001_source.html\": [4, 0, 0, 8, 8],\n+ \"a01004.html\": [4, 0, 0, 8, 14],\n+ \"a01004.html#a313f0e290f370cff0b7e25024d1b8c6d\": [4, 0, 0, 8, 14, 5],\n+ \"a01004.html#a9d2a0b16c9f78f20fc78fa39c7426242\": [4, 0, 0, 8, 14, 4],\n+ \"a01004_source.html\": [4, 0, 0, 8, 14],\n+ \"a01007.html\": [4, 0, 0, 8, 58],\n+ \"a01007.html#ad5602eb85d05df6cba60e47eebbd3636\": [4, 0, 0, 8, 58, 1],\n+ \"a01007_source.html\": [4, 0, 0, 8, 58],\n+ \"a01010.html\": [4, 0, 0, 8, 48],\n+ \"a01010_source.html\": [4, 0, 0, 8, 48],\n+ \"a01013.html\": [4, 0, 0, 8, 44],\n+ \"a01013_source.html\": [4, 0, 0, 8, 44],\n+ \"a01016.html\": [4, 0, 0, 8, 27],\n+ \"a01019.html\": [4, 0, 0, 8, 28],\n+ \"a01019_source.html\": [4, 0, 0, 8, 28],\n+ \"a01022.html\": [4, 0, 0, 8, 4],\n+ \"a01022_source.html\": [4, 0, 0, 8, 4],\n+ \"a01025.html\": [4, 0, 0, 8, 16],\n+ \"a01025_source.html\": [4, 0, 0, 8, 16],\n+ \"a01028.html\": [4, 0, 0, 8, 19],\n+ \"a01031.html\": [4, 0, 0, 8, 52],\n+ \"a01031_source.html\": [4, 0, 0, 8, 52],\n+ \"a01034.html\": [4, 0, 0, 8, 36],\n+ \"a01034_source.html\": [4, 0, 0, 8, 36],\n+ \"a01037.html\": [4, 0, 0, 8, 57],\n+ \"a01037_source.html\": [4, 0, 0, 8, 57],\n+ \"a01040.html\": [4, 0, 0, 8, 3],\n+ \"a01040_source.html\": [4, 0, 0, 8, 3],\n \"a01043.html\": [4, 0, 0, 8, 21],\n- \"a01046.html\": [4, 0, 0, 8, 39],\n- \"a01049.html\": [4, 0, 0, 8, 49],\n- \"a01049.html#a3382482454c164c6f5817dcbe6f932b3\": [4, 0, 0, 8, 49, 0],\n- \"a01052.html\": [4, 0, 0, 8, 27],\n- \"a01055.html\": [4, 0, 0, 8, 6],\n- \"a01055.html#a3db519caa1b7e43412c9a7e13acf8329\": [4, 0, 0, 8, 6, 8],\n- \"a01055.html#a405f3793afc2cc3173c3fbdecadb162a\": [4, 0, 0, 8, 6, 9],\n- \"a01055.html#a51881c20dd5ecdd129cb993ea8374846\": [4, 0, 0, 8, 6, 6],\n- \"a01055.html#a589e3ff8cd71e5a17ee1dcfae8b2df26\": [4, 0, 0, 8, 6, 10],\n- \"a01055.html#a794029fe8dfc03f67a8cb64ad05d47c9\": [4, 0, 0, 8, 6, 7],\n- \"a01055.html#a9512eb02324210895442f2bf8268902d\": [4, 0, 0, 8, 6, 11],\n- \"a01055_source.html\": [4, 0, 0, 8, 6],\n- \"a01058.html\": [4, 0, 0, 8, 35],\n- \"a01061.html\": [4, 0, 0, 8, 30],\n- \"a01061_source.html\": [4, 0, 0, 8, 30],\n- \"a01064.html\": [4, 0, 0, 8, 20],\n- \"a01064_source.html\": [4, 0, 0, 8, 20],\n- \"a01067.html\": [4, 0, 0, 8, 16],\n- \"a01067_source.html\": [4, 0, 0, 8, 16],\n- \"a01070.html\": [4, 0, 0, 8, 38],\n- \"a01070_source.html\": [4, 0, 0, 8, 38],\n- \"a01073.html\": [4, 0, 0, 8, 19],\n- \"a01076.html\": [4, 0, 0, 8, 3],\n- \"a01076_source.html\": [4, 0, 0, 8, 3],\n- \"a01079.html\": [4, 0, 0, 8, 33],\n- \"a01082.html\": [4, 0, 0, 8, 23],\n- \"a01085.html\": [4, 0, 0, 8, 32],\n- \"a01085_source.html\": [4, 0, 0, 8, 32],\n- \"a01088.html\": [4, 0, 0, 8, 58],\n- \"a01088.html#ad5602eb85d05df6cba60e47eebbd3636\": [4, 0, 0, 8, 58, 1],\n- \"a01088_source.html\": [4, 0, 0, 8, 58],\n- \"a01091.html\": [4, 0, 0, 8, 31],\n- \"a01094.html\": [4, 0, 0, 8, 46],\n- \"a01094_source.html\": [4, 0, 0, 8, 46],\n- \"a01097_source.html\": [4, 0, 0, 8, 56],\n- \"a01100.html\": [4, 0, 0, 8, 42],\n- \"a01100_source.html\": [4, 0, 0, 8, 42],\n- \"a01103.html\": [4, 0, 0, 8, 25],\n- \"a01103.html#a2b0857edd76f8d63eeee0ce9944e28d4\": [4, 0, 0, 8, 25, 0],\n- \"a01106.html\": [4, 0, 0, 8, 5],\n- \"a01106.html#a3db519caa1b7e43412c9a7e13acf8329\": [4, 0, 0, 8, 5, 3],\n- \"a01106.html#a51881c20dd5ecdd129cb993ea8374846\": [4, 0, 0, 8, 5, 2],\n- \"a01106_source.html\": [4, 0, 0, 8, 5],\n- \"a01109_source.html\": [4, 0, 0, 8, 41],\n- \"a01112_source.html\": [4, 0, 0, 8, 18],\n- \"a01115.html\": [4, 0, 0, 8, 29],\n- \"a01115_source.html\": [4, 0, 0, 8, 29],\n- \"a01118.html\": [4, 0, 0, 8, 48],\n- \"a01118_source.html\": [4, 0, 0, 8, 48],\n- \"a01121.html\": [4, 0, 0, 8, 34],\n- \"a01121_source.html\": [4, 0, 0, 8, 34],\n- \"a01124.html\": [4, 0, 0, 8, 4],\n- \"a01124_source.html\": [4, 0, 0, 8, 4],\n- \"a01127.html\": [4, 0, 0, 8, 52],\n- \"a01127_source.html\": [4, 0, 0, 8, 52],\n- \"a01130.html\": [4, 0, 0, 8, 37],\n- \"a01133.html\": [4, 0, 0, 8, 15],\n+ \"a01046.html\": [4, 0, 0, 8, 30],\n+ \"a01046_source.html\": [4, 0, 0, 8, 30],\n+ \"a01049.html\": [4, 0, 0, 8, 17],\n+ \"a01049_source.html\": [4, 0, 0, 8, 17],\n+ \"a01052.html\": [4, 0, 0, 8, 20],\n+ \"a01052_source.html\": [4, 0, 0, 8, 20],\n+ \"a01055.html\": [4, 0, 0, 8, 39],\n+ \"a01058.html\": [4, 0, 0, 8, 12],\n+ \"a01058_source.html\": [4, 0, 0, 8, 12],\n+ \"a01061.html\": [4, 0, 0, 8, 38],\n+ \"a01061_source.html\": [4, 0, 0, 8, 38],\n+ \"a01064.html\": [4, 0, 0, 8, 6],\n+ \"a01064.html#a3db519caa1b7e43412c9a7e13acf8329\": [4, 0, 0, 8, 6, 8],\n+ \"a01064.html#a405f3793afc2cc3173c3fbdecadb162a\": [4, 0, 0, 8, 6, 9],\n+ \"a01064.html#a51881c20dd5ecdd129cb993ea8374846\": [4, 0, 0, 8, 6, 6],\n+ \"a01064.html#a589e3ff8cd71e5a17ee1dcfae8b2df26\": [4, 0, 0, 8, 6, 10],\n+ \"a01064.html#a794029fe8dfc03f67a8cb64ad05d47c9\": [4, 0, 0, 8, 6, 7],\n+ \"a01064.html#a9512eb02324210895442f2bf8268902d\": [4, 0, 0, 8, 6, 11],\n+ \"a01064_source.html\": [4, 0, 0, 8, 6],\n+ \"a01067.html\": [4, 0, 0, 8, 35],\n+ \"a01070.html\": [4, 0, 0, 8, 13],\n+ \"a01070.html#a8ec37fe83eda47404b8588e1f012df21\": [4, 0, 0, 8, 13, 0],\n+ \"a01070.html#a9753b4e62378151d30bf8af5e2fc1602\": [4, 0, 0, 8, 13, 1],\n+ \"a01070_source.html\": [4, 0, 0, 8, 13],\n+ \"a01073.html\": [4, 0, 0, 8, 42],\n+ \"a01073_source.html\": [4, 0, 0, 8, 42],\n+ \"a01076.html\": [4, 0, 0, 8, 51],\n+ \"a01082.html\": [4, 0, 0, 8, 50],\n+ \"a01082.html#a3382482454c164c6f5817dcbe6f932b3\": [4, 0, 0, 8, 50, 1],\n+ \"a01082_source.html\": [4, 0, 0, 8, 50],\n+ \"a01085_source.html\": [4, 0, 0, 8, 7],\n+ \"a01088.html\": [4, 0, 0, 8, 23],\n+ \"a01091.html\": [4, 0, 0, 8, 47],\n+ \"a01094.html\": [4, 0, 0, 8, 29],\n+ \"a01094_source.html\": [4, 0, 0, 8, 29],\n+ \"a01097.html\": [4, 0, 0, 8, 40],\n+ \"a01097.html#a0ceb9e5a5e864b96c529db67f55a873b\": [4, 0, 0, 8, 40, 1],\n+ \"a01097.html#afc19854e0bfc1acadb00ff00a043cc17\": [4, 0, 0, 8, 40, 2],\n+ \"a01097_source.html\": [4, 0, 0, 8, 40],\n+ \"a01100.html\": [4, 0, 0, 8, 49],\n+ \"a01100.html#a3382482454c164c6f5817dcbe6f932b3\": [4, 0, 0, 8, 49, 0],\n+ \"a01103.html\": [4, 0, 0, 8, 33],\n+ \"a01106.html\": [4, 0, 0, 8, 32],\n+ \"a01106_source.html\": [4, 0, 0, 8, 32],\n+ \"a01109.html\": [4, 0, 0, 8, 37],\n+ \"a01112.html\": [4, 0, 0, 8, 46],\n+ \"a01112_source.html\": [4, 0, 0, 8, 46],\n+ \"a01115.html\": [4, 0, 0, 8, 22],\n+ \"a01115_source.html\": [4, 0, 0, 8, 22],\n+ \"a01118.html\": [4, 0, 0, 8, 5],\n+ \"a01118.html#a3db519caa1b7e43412c9a7e13acf8329\": [4, 0, 0, 8, 5, 3],\n+ \"a01118.html#a51881c20dd5ecdd129cb993ea8374846\": [4, 0, 0, 8, 5, 2],\n+ \"a01118_source.html\": [4, 0, 0, 8, 5],\n+ \"a01121.html\": [4, 0, 0, 8, 2],\n+ \"a01124.html\": [4, 0, 0, 8, 11],\n+ \"a01124_source.html\": [4, 0, 0, 8, 11],\n+ \"a01127.html\": [4, 0, 0, 8, 1],\n+ \"a01127_source.html\": [4, 0, 0, 8, 1],\n+ \"a01130.html\": [4, 0, 0, 8, 15],\n+ \"a01133_source.html\": [4, 0, 0, 8, 56],\n \"a01136.html\": [4, 0, 0, 8, 43],\n- \"a01139.html\": [4, 0, 0, 8, 22],\n- \"a01139_source.html\": [4, 0, 0, 8, 22],\n- \"a01142.html\": [4, 0, 0, 8, 24],\n- \"a01142_source.html\": [4, 0, 0, 8, 24],\n- \"a01145.html\": [4, 0, 0, 8, 47],\n- \"a01148.html\": [4, 0, 0, 8, 8],\n- \"a01148_source.html\": [4, 0, 0, 8, 8],\n- \"a01151.html\": [4, 0, 0, 8, 0],\n- \"a01154.html\": [4, 0, 0, 8, 10],\n- \"a01154.html#a701d0cd12b81a725f7f9cd2432fe9e2a\": [4, 0, 0, 8, 10, 0],\n- \"a01154_source.html\": [4, 0, 0, 8, 10],\n- \"a01157.html\": [4, 0, 0, 8, 14],\n- \"a01157.html#a313f0e290f370cff0b7e25024d1b8c6d\": [4, 0, 0, 8, 14, 5],\n- \"a01157.html#a9d2a0b16c9f78f20fc78fa39c7426242\": [4, 0, 0, 8, 14, 4],\n- \"a01157_source.html\": [4, 0, 0, 8, 14],\n- \"a01160.html\": [4, 0, 0, 8, 40],\n- \"a01160.html#a0ceb9e5a5e864b96c529db67f55a873b\": [4, 0, 0, 8, 40, 1],\n- \"a01160.html#afc19854e0bfc1acadb00ff00a043cc17\": [4, 0, 0, 8, 40, 2],\n- \"a01160_source.html\": [4, 0, 0, 8, 40],\n- \"a01163.html\": [4, 0, 0, 8, 11],\n- \"a01163_source.html\": [4, 0, 0, 8, 11],\n- \"a01166.html\": [4, 0, 0, 8, 17],\n- \"a01166_source.html\": [4, 0, 0, 8, 17],\n- \"a01169.html\": [4, 0, 0, 8, 44],\n- \"a01169_source.html\": [4, 0, 0, 8, 44],\n- \"a01172.html\": [4, 0, 0, 8, 36],\n- \"a01172_source.html\": [4, 0, 0, 8, 36],\n+ \"a01139.html\": [4, 0, 0, 8, 31],\n+ \"a01142.html\": [4, 0, 0, 8, 0],\n+ \"a01145_source.html\": [4, 0, 0, 8, 18],\n+ \"a01148_source.html\": [4, 0, 0, 8, 41],\n+ \"a01151.html\": [4, 0, 0, 8, 26],\n+ \"a01151.html#a2b0857edd76f8d63eeee0ce9944e28d4\": [4, 0, 0, 8, 26, 1],\n+ \"a01151_source.html\": [4, 0, 0, 8, 26],\n+ \"a01157.html\": [4, 0, 0, 8, 34],\n+ \"a01157_source.html\": [4, 0, 0, 8, 34],\n+ \"a01163.html\": [4, 0, 0, 8, 24],\n+ \"a01163_source.html\": [4, 0, 0, 8, 24],\n+ \"a01166.html\": [4, 0, 0, 8, 45],\n+ \"a01169.html\": [4, 0, 0, 8, 10],\n+ \"a01169.html#a701d0cd12b81a725f7f9cd2432fe9e2a\": [4, 0, 0, 8, 10, 0],\n+ \"a01169_source.html\": [4, 0, 0, 8, 10],\n+ \"a01172.html\": [4, 0, 0, 8, 25],\n+ \"a01172.html#a2b0857edd76f8d63eeee0ce9944e28d4\": [4, 0, 0, 8, 25, 0],\n \"a01184.html\": [4, 0, 0, 10, 3],\n- \"a01187.html\": [4, 0, 0, 10, 15],\n- \"a01187_source.html\": [4, 0, 0, 10, 15],\n- \"a01190.html\": [4, 0, 0, 10, 13],\n- \"a01190_source.html\": [4, 0, 0, 10, 13],\n- \"a01193.html\": [4, 0, 0, 10, 5],\n- \"a01193.html#a43c2c2ead4fddd79d9c3f9a5bfa764ae\": [4, 0, 0, 10, 5, 6],\n- \"a01193.html#a4a2433812cf34ee359e3ec99f4f5bcc4\": [4, 0, 0, 10, 5, 7],\n- \"a01193.html#a710ec0322f4a2c0883841b58516b7a6a\": [4, 0, 0, 10, 5, 5],\n- \"a01193.html#aaff07ef70e6161c4d1d2bd7546ff91e6\": [4, 0, 0, 10, 5, 1],\n- \"a01193.html#aba34ed4a103d9057536ee5cac27cfdef\": [4, 0, 0, 10, 5, 2],\n- \"a01193.html#ad632ed56581bf174eef379bbe272a06a\": [4, 0, 0, 10, 5, 0],\n- \"a01193.html#ad8b55993353cbab0fde06b872783fe92\": [4, 0, 0, 10, 5, 3],\n- \"a01193.html#ade6eca65dc0168a65f641961ca97924c\": [4, 0, 0, 10, 5, 4],\n+ \"a01190.html\": [4, 0, 0, 10, 1],\n+ \"a01190.html#ac50218675ff25e1e9202d335ecfa6b3a\": [4, 0, 0, 10, 1, 0],\n+ \"a01193.html\": [4, 0, 0, 10, 0],\n+ \"a01193_source.html\": [4, 0, 0, 10, 0],\n \"a01196.html\": [4, 0, 0, 10, 11],\n \"a01196_source.html\": [4, 0, 0, 10, 11],\n- \"a01199.html\": [4, 0, 0, 10, 4],\n- \"a01199_source.html\": [4, 0, 0, 10, 4],\n- \"a01202.html\": [4, 0, 0, 10, 8],\n- \"a01202.html#a21a02e01a9608ce6cade24c1366b208c\": [4, 0, 0, 10, 8, 4],\n- \"a01202.html#a9ad7940245bbbf4bf25d1dc4690b0108\": [4, 0, 0, 10, 8, 3],\n- \"a01202_source.html\": [4, 0, 0, 10, 8],\n- \"a01205.html\": [4, 0, 0, 10, 7],\n- \"a01208.html\": [4, 0, 0, 10, 1],\n- \"a01208.html#ac50218675ff25e1e9202d335ecfa6b3a\": [4, 0, 0, 10, 1, 0],\n- \"a01211.html\": [4, 0, 0, 10, 0],\n- \"a01211_source.html\": [4, 0, 0, 10, 0],\n+ \"a01199.html\": [4, 0, 0, 10, 2],\n+ \"a01199.html#ac50218675ff25e1e9202d335ecfa6b3a\": [4, 0, 0, 10, 2, 1],\n+ \"a01199_source.html\": [4, 0, 0, 10, 2],\n+ \"a01202.html\": [4, 0, 0, 10, 7],\n+ \"a01205.html\": [4, 0, 0, 10, 13],\n+ \"a01205_source.html\": [4, 0, 0, 10, 13],\n+ \"a01208.html\": [4, 0, 0, 10, 6],\n+ \"a01208.html#a43c2c2ead4fddd79d9c3f9a5bfa764ae\": [4, 0, 0, 10, 6, 8],\n+ \"a01208.html#a4a2433812cf34ee359e3ec99f4f5bcc4\": [4, 0, 0, 10, 6, 9],\n+ \"a01208.html#a710ec0322f4a2c0883841b58516b7a6a\": [4, 0, 0, 10, 6, 7],\n+ \"a01208.html#aaff07ef70e6161c4d1d2bd7546ff91e6\": [4, 0, 0, 10, 6, 3],\n+ \"a01208.html#aba34ed4a103d9057536ee5cac27cfdef\": [4, 0, 0, 10, 6, 4],\n+ \"a01208.html#acab0207730cf78822bdf274b50739d31\": [4, 0, 0, 10, 6, 1],\n+ \"a01208.html#ad632ed56581bf174eef379bbe272a06a\": [4, 0, 0, 10, 6, 2],\n+ \"a01208.html#ad8b55993353cbab0fde06b872783fe92\": [4, 0, 0, 10, 6, 5],\n+ \"a01208.html#ade6eca65dc0168a65f641961ca97924c\": [4, 0, 0, 10, 6, 6],\n+ \"a01208_source.html\": [4, 0, 0, 10, 6],\n+ \"a01211.html\": [4, 0, 0, 10, 8],\n+ \"a01211.html#a21a02e01a9608ce6cade24c1366b208c\": [4, 0, 0, 10, 8, 4],\n+ \"a01211.html#a9ad7940245bbbf4bf25d1dc4690b0108\": [4, 0, 0, 10, 8, 3],\n+ \"a01211_source.html\": [4, 0, 0, 10, 8],\n \"a01214.html\": [4, 0, 0, 10, 9],\n- \"a01217.html\": [4, 0, 0, 10, 6],\n- \"a01217.html#a43c2c2ead4fddd79d9c3f9a5bfa764ae\": [4, 0, 0, 10, 6, 8],\n- \"a01217.html#a4a2433812cf34ee359e3ec99f4f5bcc4\": [4, 0, 0, 10, 6, 9],\n- \"a01217.html#a710ec0322f4a2c0883841b58516b7a6a\": [4, 0, 0, 10, 6, 7],\n- \"a01217.html#aaff07ef70e6161c4d1d2bd7546ff91e6\": [4, 0, 0, 10, 6, 3],\n- \"a01217.html#aba34ed4a103d9057536ee5cac27cfdef\": [4, 0, 0, 10, 6, 4],\n- \"a01217.html#acab0207730cf78822bdf274b50739d31\": [4, 0, 0, 10, 6, 1],\n- \"a01217.html#ad632ed56581bf174eef379bbe272a06a\": [4, 0, 0, 10, 6, 2],\n- \"a01217.html#ad8b55993353cbab0fde06b872783fe92\": [4, 0, 0, 10, 6, 5],\n- \"a01217.html#ade6eca65dc0168a65f641961ca97924c\": [4, 0, 0, 10, 6, 6],\n- \"a01217_source.html\": [4, 0, 0, 10, 6],\n- \"a01220.html\": [4, 0, 0, 10, 2],\n- \"a01220.html#ac50218675ff25e1e9202d335ecfa6b3a\": [4, 0, 0, 10, 2, 1],\n- \"a01220_source.html\": [4, 0, 0, 10, 2],\n- \"a01223.html\": [4, 0, 0, 10, 10],\n- \"a01223_source.html\": [4, 0, 0, 10, 10],\n- \"a01226.html\": [4, 0, 0, 10, 14],\n+ \"a01217.html\": [4, 0, 0, 10, 14],\n+ \"a01220.html\": [4, 0, 0, 10, 10],\n+ \"a01220_source.html\": [4, 0, 0, 10, 10],\n+ \"a01223.html\": [4, 0, 0, 10, 4],\n+ \"a01223_source.html\": [4, 0, 0, 10, 4],\n+ \"a01226.html\": [4, 0, 0, 10, 15],\n+ \"a01226_source.html\": [4, 0, 0, 10, 15],\n \"a01229.html\": [4, 0, 0, 10, 12],\n \"a01229_source.html\": [4, 0, 0, 10, 12],\n- \"a01235.html\": [4, 0, 0, 11, 11],\n- \"a01235.html#aa43e7fd7c2b86873458a91ddafc506e4\": [4, 0, 0, 11, 11, 0]\n+ \"a01232.html\": [4, 0, 0, 10, 5],\n+ \"a01232.html#a43c2c2ead4fddd79d9c3f9a5bfa764ae\": [4, 0, 0, 10, 5, 6],\n+ \"a01232.html#a4a2433812cf34ee359e3ec99f4f5bcc4\": [4, 0, 0, 10, 5, 7],\n+ \"a01232.html#a710ec0322f4a2c0883841b58516b7a6a\": [4, 0, 0, 10, 5, 5],\n+ \"a01232.html#aaff07ef70e6161c4d1d2bd7546ff91e6\": [4, 0, 0, 10, 5, 1],\n+ \"a01232.html#aba34ed4a103d9057536ee5cac27cfdef\": [4, 0, 0, 10, 5, 2],\n+ \"a01232.html#ad632ed56581bf174eef379bbe272a06a\": [4, 0, 0, 10, 5, 0],\n+ \"a01232.html#ad8b55993353cbab0fde06b872783fe92\": [4, 0, 0, 10, 5, 3],\n+ \"a01232.html#ade6eca65dc0168a65f641961ca97924c\": [4, 0, 0, 10, 5, 4],\n+ \"a01238.html\": [4, 0, 0, 11, 37],\n+ \"a01238_source.html\": [4, 0, 0, 11, 37]\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- \"a01238_source.html\": [4, 0, 0, 11, 21],\n- \"a01241.html\": [4, 0, 0, 11, 30],\n- \"a01241_source.html\": [4, 0, 0, 11, 30],\n- \"a01247.html\": [4, 0, 0, 11, 5],\n- \"a01247.html#a635ec096b94adc2b05f081cd07eb2c0f\": [4, 0, 0, 11, 5, 2],\n- \"a01247.html#a68bc584d72da3747666ac134a9490f92\": [4, 0, 0, 11, 5, 10],\n- \"a01247.html#a71d086efc70f4af31d3c3b00dde4f7c0\": [4, 0, 0, 11, 5, 8],\n- \"a01247.html#a79f6cde1c018ea0f4ca3c7fc83123a14\": [4, 0, 0, 11, 5, 3],\n- \"a01247.html#a961e0398bbfc2504c62fdaad70472418\": [4, 0, 0, 11, 5, 6],\n- \"a01247.html#abc8bb9db0893652e8b5e7b47782ec990\": [4, 0, 0, 11, 5, 5],\n- \"a01247.html#abfc0157e4790e3b03dc601d3e86c684d\": [4, 0, 0, 11, 5, 7],\n- \"a01247.html#ac96511703a91071d7b2033976f9739c3\": [4, 0, 0, 11, 5, 4],\n- \"a01247.html#acfe516bc2d9ca4cc4530dd3b8460ce3d\": [4, 0, 0, 11, 5, 9],\n- \"a01247.html#adbe09e573771fd72b08069353d537725\": [4, 0, 0, 11, 5, 0],\n- \"a01247.html#aef971b2c69845e4fcce707306703c7b8\": [4, 0, 0, 11, 5, 1],\n- \"a01250.html\": [4, 0, 0, 11, 33],\n- \"a01250.html#ac3d021280c8a8b84903a8ce81f73ea0f\": [4, 0, 0, 11, 33, 1],\n- \"a01250.html#ac3d021280c8a8b84903a8ce81f73ea0fa0836b9ba9572539be631139b0785a200\": [4, 0, 0, 11, 33, 1, 2],\n- \"a01250.html#ac3d021280c8a8b84903a8ce81f73ea0fa7377887fa83ae502adf7f477205c0273\": [4, 0, 0, 11, 33, 1, 0],\n- \"a01250.html#ac3d021280c8a8b84903a8ce81f73ea0fa88da97b27cb213cdf714af781ae76b99\": [4, 0, 0, 11, 33, 1, 1],\n- \"a01250.html#adf2020f3f6087064dde501c99794aac3\": [4, 0, 0, 11, 33, 2],\n- \"a01250.html#adf2020f3f6087064dde501c99794aac3a672276bd72f64f6b462004c89c57297b\": [4, 0, 0, 11, 33, 2, 2],\n- \"a01250.html#adf2020f3f6087064dde501c99794aac3a7a3f02bec869fc563591ecb84ea2eb7a\": [4, 0, 0, 11, 33, 2, 1],\n- \"a01250.html#adf2020f3f6087064dde501c99794aac3a94d642727a23c8b5a1b59b8f74553e80\": [4, 0, 0, 11, 33, 2, 0],\n- \"a01250.html#adf2020f3f6087064dde501c99794aac3aca6b517d49e41094c865c321ddff5b81\": [4, 0, 0, 11, 33, 2, 3],\n- \"a01250_source.html\": [4, 0, 0, 11, 33],\n+ \"a01241.html\": [4, 0, 0, 11, 3],\n+ \"a01241_source.html\": [4, 0, 0, 11, 3],\n+ \"a01244_source.html\": [4, 0, 0, 11, 19],\n+ \"a01247.html\": [4, 0, 0, 11, 6],\n+ \"a01247.html#a635ec096b94adc2b05f081cd07eb2c0f\": [4, 0, 0, 11, 6, 6],\n+ \"a01247.html#a683ab6a83b5b3e508e734a7089986838\": [4, 0, 0, 11, 6, 12],\n+ \"a01247.html#a68bc584d72da3747666ac134a9490f92\": [4, 0, 0, 11, 6, 17],\n+ \"a01247.html#a6ab764d13f9aaeafc2dc60763b05ec0e\": [4, 0, 0, 11, 6, 1],\n+ \"a01247.html#a6eb4817b97658f00e426b753c52361ed\": [4, 0, 0, 11, 6, 11],\n+ \"a01247.html#a6f8d49b13ccc0e007a5e7572286d5854\": [4, 0, 0, 11, 6, 7],\n+ \"a01247.html#a71d086efc70f4af31d3c3b00dde4f7c0\": [4, 0, 0, 11, 6, 15],\n+ \"a01247.html#a8a2136a163e31faaefe2db498a9b9b43\": [4, 0, 0, 11, 6, 10],\n+ \"a01247.html#a8be373f34edc0a9d28b1bfab5dd62ba0\": [4, 0, 0, 11, 6, 2],\n+ \"a01247.html#a8be373f34edc0a9d28b1bfab5dd62ba0a37cef4c071c8c4f77f31fa617e91da53\": [4, 0, 0, 11, 6, 2, 1],\n+ \"a01247.html#a8be373f34edc0a9d28b1bfab5dd62ba0a406af886b3b4b113dfe666c8ad95e38b\": [4, 0, 0, 11, 6, 2, 0],\n+ \"a01247.html#a8be373f34edc0a9d28b1bfab5dd62ba0aacc5d659fca66977c8fe6f341802fae9\": [4, 0, 0, 11, 6, 2, 2],\n+ \"a01247.html#a90552b70a2da9c74595cae4b05c2ce18\": [4, 0, 0, 11, 6, 3],\n+ \"a01247.html#a90552b70a2da9c74595cae4b05c2ce18a1f8edeb25c58a249789556c686265a4c\": [4, 0, 0, 11, 6, 3, 2],\n+ \"a01247.html#a90552b70a2da9c74595cae4b05c2ce18a2f9067b8f5bd2d0dd38c49326a4c070e\": [4, 0, 0, 11, 6, 3, 4],\n+ \"a01247.html#a90552b70a2da9c74595cae4b05c2ce18a3790bc2c6f11cd7da84730b33173de5a\": [4, 0, 0, 11, 6, 3, 1],\n+ \"a01247.html#a90552b70a2da9c74595cae4b05c2ce18a5450a16f3522214ccdfa23c461e7d05a\": [4, 0, 0, 11, 6, 3, 3],\n+ \"a01247.html#a90552b70a2da9c74595cae4b05c2ce18ad0aaa5c51a45cb7c9151aae60a603209\": [4, 0, 0, 11, 6, 3, 0],\n+ \"a01247.html#a961e0398bbfc2504c62fdaad70472418\": [4, 0, 0, 11, 6, 13],\n+ \"a01247.html#abc8bb9db0893652e8b5e7b47782ec990\": [4, 0, 0, 11, 6, 9],\n+ \"a01247.html#abcc5d1ec05ddc954d5de28929acabbdf\": [4, 0, 0, 11, 6, 0],\n+ \"a01247.html#abfc0157e4790e3b03dc601d3e86c684d\": [4, 0, 0, 11, 6, 14],\n+ \"a01247.html#ac96511703a91071d7b2033976f9739c3\": [4, 0, 0, 11, 6, 8],\n+ \"a01247.html#acfe516bc2d9ca4cc4530dd3b8460ce3d\": [4, 0, 0, 11, 6, 16],\n+ \"a01247.html#adbe09e573771fd72b08069353d537725\": [4, 0, 0, 11, 6, 4],\n+ \"a01247.html#aef971b2c69845e4fcce707306703c7b8\": [4, 0, 0, 11, 6, 5],\n+ \"a01247_source.html\": [4, 0, 0, 11, 6],\n+ \"a01250.html\": [4, 0, 0, 11, 13],\n+ \"a01250_source.html\": [4, 0, 0, 11, 13],\n \"a01253.html\": [4, 0, 0, 11, 36],\n \"a01253_source.html\": [4, 0, 0, 11, 36],\n- \"a01256.html\": [4, 0, 0, 11, 0],\n- \"a01256_source.html\": [4, 0, 0, 11, 0],\n- \"a01259.html\": [4, 0, 0, 11, 7],\n- \"a01262.html\": [4, 0, 0, 11, 34],\n- \"a01262_source.html\": [4, 0, 0, 11, 34],\n- \"a01265_source.html\": [4, 0, 0, 11, 18],\n- \"a01268.html\": [4, 0, 0, 11, 32],\n- \"a01268_source.html\": [4, 0, 0, 11, 32],\n- \"a01271_source.html\": [4, 0, 0, 11, 9],\n- \"a01274.html\": [4, 0, 0, 11, 3],\n- \"a01274_source.html\": [4, 0, 0, 11, 3],\n- \"a01277_source.html\": [4, 0, 0, 11, 31],\n- \"a01280.html\": [4, 0, 0, 11, 13],\n- \"a01280_source.html\": [4, 0, 0, 11, 13],\n- \"a01283.html\": [4, 0, 0, 11, 27],\n- \"a01283_source.html\": [4, 0, 0, 11, 27],\n- \"a01286_source.html\": [4, 0, 0, 11, 29],\n- \"a01289.html\": [4, 0, 0, 11, 22],\n- \"a01289_source.html\": [4, 0, 0, 11, 22],\n- \"a01292.html\": [4, 0, 0, 11, 16],\n- \"a01292_source.html\": [4, 0, 0, 11, 16],\n- \"a01295.html\": [4, 0, 0, 11, 12],\n- \"a01295.html#aa43e7fd7c2b86873458a91ddafc506e4\": [4, 0, 0, 11, 12, 3],\n- \"a01295_source.html\": [4, 0, 0, 11, 12],\n- \"a01298_source.html\": [4, 0, 0, 11, 23],\n- \"a01301.html\": [4, 0, 0, 11, 6],\n- \"a01301.html#a635ec096b94adc2b05f081cd07eb2c0f\": [4, 0, 0, 11, 6, 6],\n- \"a01301.html#a683ab6a83b5b3e508e734a7089986838\": [4, 0, 0, 11, 6, 12],\n- \"a01301.html#a68bc584d72da3747666ac134a9490f92\": [4, 0, 0, 11, 6, 17],\n- \"a01301.html#a6ab764d13f9aaeafc2dc60763b05ec0e\": [4, 0, 0, 11, 6, 1],\n- \"a01301.html#a6eb4817b97658f00e426b753c52361ed\": [4, 0, 0, 11, 6, 11],\n- \"a01301.html#a6f8d49b13ccc0e007a5e7572286d5854\": [4, 0, 0, 11, 6, 7],\n- \"a01301.html#a71d086efc70f4af31d3c3b00dde4f7c0\": [4, 0, 0, 11, 6, 15],\n- \"a01301.html#a8a2136a163e31faaefe2db498a9b9b43\": [4, 0, 0, 11, 6, 10],\n- \"a01301.html#a8be373f34edc0a9d28b1bfab5dd62ba0\": [4, 0, 0, 11, 6, 2],\n- \"a01301.html#a8be373f34edc0a9d28b1bfab5dd62ba0a37cef4c071c8c4f77f31fa617e91da53\": [4, 0, 0, 11, 6, 2, 1],\n- \"a01301.html#a8be373f34edc0a9d28b1bfab5dd62ba0a406af886b3b4b113dfe666c8ad95e38b\": [4, 0, 0, 11, 6, 2, 0],\n- \"a01301.html#a8be373f34edc0a9d28b1bfab5dd62ba0aacc5d659fca66977c8fe6f341802fae9\": [4, 0, 0, 11, 6, 2, 2],\n- \"a01301.html#a90552b70a2da9c74595cae4b05c2ce18\": [4, 0, 0, 11, 6, 3],\n- \"a01301.html#a90552b70a2da9c74595cae4b05c2ce18a1f8edeb25c58a249789556c686265a4c\": [4, 0, 0, 11, 6, 3, 2],\n- \"a01301.html#a90552b70a2da9c74595cae4b05c2ce18a2f9067b8f5bd2d0dd38c49326a4c070e\": [4, 0, 0, 11, 6, 3, 4],\n- \"a01301.html#a90552b70a2da9c74595cae4b05c2ce18a3790bc2c6f11cd7da84730b33173de5a\": [4, 0, 0, 11, 6, 3, 1],\n- \"a01301.html#a90552b70a2da9c74595cae4b05c2ce18a5450a16f3522214ccdfa23c461e7d05a\": [4, 0, 0, 11, 6, 3, 3],\n- \"a01301.html#a90552b70a2da9c74595cae4b05c2ce18ad0aaa5c51a45cb7c9151aae60a603209\": [4, 0, 0, 11, 6, 3, 0],\n- \"a01301.html#a961e0398bbfc2504c62fdaad70472418\": [4, 0, 0, 11, 6, 13],\n- \"a01301.html#abc8bb9db0893652e8b5e7b47782ec990\": [4, 0, 0, 11, 6, 9],\n- \"a01301.html#abcc5d1ec05ddc954d5de28929acabbdf\": [4, 0, 0, 11, 6, 0],\n- \"a01301.html#abfc0157e4790e3b03dc601d3e86c684d\": [4, 0, 0, 11, 6, 14],\n- \"a01301.html#ac96511703a91071d7b2033976f9739c3\": [4, 0, 0, 11, 6, 8],\n- \"a01301.html#acfe516bc2d9ca4cc4530dd3b8460ce3d\": [4, 0, 0, 11, 6, 16],\n- \"a01301.html#adbe09e573771fd72b08069353d537725\": [4, 0, 0, 11, 6, 4],\n- \"a01301.html#aef971b2c69845e4fcce707306703c7b8\": [4, 0, 0, 11, 6, 5],\n- \"a01301_source.html\": [4, 0, 0, 11, 6],\n- \"a01307_source.html\": [4, 0, 0, 11, 20],\n- \"a01310.html\": [4, 0, 0, 11, 37],\n- \"a01310_source.html\": [4, 0, 0, 11, 37],\n- \"a01313.html\": [4, 0, 0, 11, 35],\n- \"a01313_source.html\": [4, 0, 0, 11, 35],\n- \"a01316_source.html\": [4, 0, 0, 11, 19],\n- \"a01319.html\": [4, 0, 0, 11, 4],\n- \"a01319_source.html\": [4, 0, 0, 11, 4],\n- \"a01322_source.html\": [4, 0, 0, 11, 38],\n- \"a01325.html\": [4, 0, 0, 11, 24],\n- \"a01325_source.html\": [4, 0, 0, 11, 24],\n- \"a01328.html\": [4, 0, 0, 11, 14],\n- \"a01328_source.html\": [4, 0, 0, 11, 14],\n- \"a01331.html\": [4, 0, 0, 11, 15],\n- \"a01334.html\": [4, 0, 0, 11, 25],\n- \"a01334_source.html\": [4, 0, 0, 11, 25],\n- \"a01337.html\": [4, 0, 0, 11, 8],\n- \"a01337_source.html\": [4, 0, 0, 11, 8],\n- \"a01340_source.html\": [4, 0, 0, 11, 17],\n- \"a01343.html\": [4, 0, 0, 12, 7],\n- \"a01343.html#ae394348e1a503834f713405afa9afad8\": [4, 0, 0, 12, 7, 0],\n- \"a01343_source.html\": [4, 0, 0, 12, 7],\n- \"a01346.html\": [4, 0, 0, 12, 13],\n- \"a01346_source.html\": [4, 0, 0, 12, 13],\n- \"a01349.html\": [4, 0, 0, 12, 14],\n- \"a01352.html\": [4, 0, 0, 12, 4],\n- \"a01352_source.html\": [4, 0, 0, 12, 4],\n- \"a01355.html\": [4, 0, 0, 12, 15],\n- \"a01355.html#ad78d0a5ba773ceac7ff253525032a15e\": [4, 0, 0, 12, 15, 0],\n- \"a01355_source.html\": [4, 0, 0, 12, 15],\n- \"a01358.html\": [4, 0, 0, 12, 0],\n- \"a01361.html\": [4, 0, 0, 12, 6],\n- \"a01361_source.html\": [4, 0, 0, 12, 6],\n- \"a01364.html\": [4, 0, 0, 12, 1],\n- \"a01364_source.html\": [4, 0, 0, 12, 1],\n- \"a01367.html\": [4, 0, 0, 12, 5],\n- \"a01370.html\": [4, 0, 0, 12, 10],\n+ \"a01256.html\": [4, 0, 0, 11, 8],\n+ \"a01256_source.html\": [4, 0, 0, 11, 8],\n+ \"a01262.html\": [4, 0, 0, 11, 0],\n+ \"a01262_source.html\": [4, 0, 0, 11, 0],\n+ \"a01265.html\": [4, 0, 0, 11, 7],\n+ \"a01268_source.html\": [4, 0, 0, 11, 23],\n+ \"a01271_source.html\": [4, 0, 0, 11, 20],\n+ \"a01274.html\": [4, 0, 0, 11, 16],\n+ \"a01274_source.html\": [4, 0, 0, 11, 16],\n+ \"a01277.html\": [4, 0, 0, 11, 30],\n+ \"a01277_source.html\": [4, 0, 0, 11, 30],\n+ \"a01280.html\": [4, 0, 0, 11, 27],\n+ \"a01280_source.html\": [4, 0, 0, 11, 27],\n+ \"a01283.html\": [4, 0, 0, 11, 14],\n+ \"a01283_source.html\": [4, 0, 0, 11, 14],\n+ \"a01286.html\": [4, 0, 0, 11, 24],\n+ \"a01286_source.html\": [4, 0, 0, 11, 24],\n+ \"a01289.html\": [4, 0, 0, 11, 5],\n+ \"a01289.html#a635ec096b94adc2b05f081cd07eb2c0f\": [4, 0, 0, 11, 5, 2],\n+ \"a01289.html#a68bc584d72da3747666ac134a9490f92\": [4, 0, 0, 11, 5, 10],\n+ \"a01289.html#a71d086efc70f4af31d3c3b00dde4f7c0\": [4, 0, 0, 11, 5, 8],\n+ \"a01289.html#a79f6cde1c018ea0f4ca3c7fc83123a14\": [4, 0, 0, 11, 5, 3],\n+ \"a01289.html#a961e0398bbfc2504c62fdaad70472418\": [4, 0, 0, 11, 5, 6],\n+ \"a01289.html#abc8bb9db0893652e8b5e7b47782ec990\": [4, 0, 0, 11, 5, 5],\n+ \"a01289.html#abfc0157e4790e3b03dc601d3e86c684d\": [4, 0, 0, 11, 5, 7],\n+ \"a01289.html#ac96511703a91071d7b2033976f9739c3\": [4, 0, 0, 11, 5, 4],\n+ \"a01289.html#acfe516bc2d9ca4cc4530dd3b8460ce3d\": [4, 0, 0, 11, 5, 9],\n+ \"a01289.html#adbe09e573771fd72b08069353d537725\": [4, 0, 0, 11, 5, 0],\n+ \"a01289.html#aef971b2c69845e4fcce707306703c7b8\": [4, 0, 0, 11, 5, 1],\n+ \"a01292.html\": [4, 0, 0, 11, 35],\n+ \"a01292_source.html\": [4, 0, 0, 11, 35],\n+ \"a01295.html\": [4, 0, 0, 11, 32],\n+ \"a01295_source.html\": [4, 0, 0, 11, 32],\n+ \"a01298_source.html\": [4, 0, 0, 11, 21],\n+ \"a01301.html\": [4, 0, 0, 11, 22],\n+ \"a01301_source.html\": [4, 0, 0, 11, 22],\n+ \"a01304.html\": [4, 0, 0, 11, 15],\n+ \"a01307.html\": [4, 0, 0, 11, 34],\n+ \"a01307_source.html\": [4, 0, 0, 11, 34],\n+ \"a01310.html\": [4, 0, 0, 11, 25],\n+ \"a01310_source.html\": [4, 0, 0, 11, 25],\n+ \"a01313_source.html\": [4, 0, 0, 11, 38],\n+ \"a01316_source.html\": [4, 0, 0, 11, 29],\n+ \"a01319_source.html\": [4, 0, 0, 11, 18],\n+ \"a01322_source.html\": [4, 0, 0, 11, 17],\n+ \"a01325_source.html\": [4, 0, 0, 11, 9],\n+ \"a01328.html\": [4, 0, 0, 11, 11],\n+ \"a01328.html#aa43e7fd7c2b86873458a91ddafc506e4\": [4, 0, 0, 11, 11, 0],\n+ \"a01331.html\": [4, 0, 0, 11, 33],\n+ \"a01331.html#ac3d021280c8a8b84903a8ce81f73ea0f\": [4, 0, 0, 11, 33, 1],\n+ \"a01331.html#ac3d021280c8a8b84903a8ce81f73ea0fa0836b9ba9572539be631139b0785a200\": [4, 0, 0, 11, 33, 1, 2],\n+ \"a01331.html#ac3d021280c8a8b84903a8ce81f73ea0fa7377887fa83ae502adf7f477205c0273\": [4, 0, 0, 11, 33, 1, 0],\n+ \"a01331.html#ac3d021280c8a8b84903a8ce81f73ea0fa88da97b27cb213cdf714af781ae76b99\": [4, 0, 0, 11, 33, 1, 1],\n+ \"a01331.html#adf2020f3f6087064dde501c99794aac3\": [4, 0, 0, 11, 33, 2],\n+ \"a01331.html#adf2020f3f6087064dde501c99794aac3a672276bd72f64f6b462004c89c57297b\": [4, 0, 0, 11, 33, 2, 2],\n+ \"a01331.html#adf2020f3f6087064dde501c99794aac3a7a3f02bec869fc563591ecb84ea2eb7a\": [4, 0, 0, 11, 33, 2, 1],\n+ \"a01331.html#adf2020f3f6087064dde501c99794aac3a94d642727a23c8b5a1b59b8f74553e80\": [4, 0, 0, 11, 33, 2, 0],\n+ \"a01331.html#adf2020f3f6087064dde501c99794aac3aca6b517d49e41094c865c321ddff5b81\": [4, 0, 0, 11, 33, 2, 3],\n+ \"a01331_source.html\": [4, 0, 0, 11, 33],\n+ \"a01334_source.html\": [4, 0, 0, 11, 31],\n+ \"a01337.html\": [4, 0, 0, 11, 12],\n+ \"a01337.html#aa43e7fd7c2b86873458a91ddafc506e4\": [4, 0, 0, 11, 12, 3],\n+ \"a01337_source.html\": [4, 0, 0, 11, 12],\n+ \"a01340.html\": [4, 0, 0, 11, 4],\n+ \"a01340_source.html\": [4, 0, 0, 11, 4],\n+ \"a01343.html\": [4, 0, 0, 12, 1],\n+ \"a01343_source.html\": [4, 0, 0, 12, 1],\n+ \"a01346.html\": [4, 0, 0, 12, 5],\n+ \"a01349.html\": [4, 0, 0, 12, 10],\n+ \"a01352.html\": [4, 0, 0, 12, 15],\n+ \"a01352.html#ad78d0a5ba773ceac7ff253525032a15e\": [4, 0, 0, 12, 15, 0],\n+ \"a01352_source.html\": [4, 0, 0, 12, 15],\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, 4],\n+ \"a01358_source.html\": [4, 0, 0, 12, 4],\n+ \"a01361.html\": [4, 0, 0, 12, 12],\n+ \"a01364.html\": [4, 0, 0, 12, 14],\n+ \"a01370.html\": [4, 0, 0, 12, 6],\n+ \"a01370_source.html\": [4, 0, 0, 12, 6],\n \"a01373.html\": [4, 0, 0, 12, 3],\n- \"a01379.html\": [4, 0, 0, 12, 11],\n- \"a01379_source.html\": [4, 0, 0, 12, 11],\n- \"a01382.html\": [4, 0, 0, 12, 8],\n- \"a01382.html#a659f20993995258b1405737e375efd10\": [4, 0, 0, 12, 8, 0],\n- \"a01385.html\": [4, 0, 0, 12, 9],\n- \"a01385.html#a659f20993995258b1405737e375efd10\": [4, 0, 0, 12, 9, 2],\n- \"a01385_source.html\": [4, 0, 0, 12, 9],\n- \"a01388.html\": [4, 0, 0, 12, 12],\n+ \"a01376.html\": [4, 0, 0, 12, 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, 7],\n+ \"a01382.html#ae394348e1a503834f713405afa9afad8\": [4, 0, 0, 12, 7, 0],\n+ \"a01382_source.html\": [4, 0, 0, 12, 7],\n+ \"a01385.html\": [4, 0, 0, 12, 13],\n+ \"a01385_source.html\": [4, 0, 0, 12, 13],\n+ \"a01388.html\": [4, 0, 0, 12, 11],\n+ \"a01388_source.html\": [4, 0, 0, 12, 11],\n \"a01391.html\": [4, 0, 0, 12, 2],\n \"a01391_source.html\": [4, 0, 0, 12, 2],\n- \"a01397.html\": [4, 0, 0, 14],\n- \"a01403.html\": [4, 0, 0, 15],\n- \"a01403_source.html\": [4, 0, 0, 15],\n+ \"a01400.html\": [4, 0, 0, 15],\n+ \"a01400_source.html\": [4, 0, 0, 15],\n+ \"a01406.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": "@@ -219,34 +219,34 @@\n \"a01434.html#a67e7c6f5c4916c4a58a783e6b566d55a\": [2, 0, 0, 2, 0],\n \"a01434.html#a7228bbaf6ad62b65be7a2084c01aae5c\": [2, 0, 0, 2, 4],\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+ \"a02276.html\": [3, 0, 1, 380],\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\": [3, 0, 1, 161],\n \"a02324.html\": [2, 0, 0, 159],\n- \"a02324.html#a139a63931a8e8afab4d67cb5bc326659\": [3, 0, 1, 161, 3],\n+ \"a02324.html\": [3, 0, 1, 161],\n \"a02324.html#a139a63931a8e8afab4d67cb5bc326659\": [2, 0, 0, 159, 3],\n- \"a02324.html#a13de4f83b7b5305a7be4ee1136dcd201\": [2, 0, 0, 159, 15],\n+ \"a02324.html#a139a63931a8e8afab4d67cb5bc326659\": [3, 0, 1, 161, 3],\n \"a02324.html#a13de4f83b7b5305a7be4ee1136dcd201\": [3, 0, 1, 161, 15],\n- \"a02324.html#a1e837adf9acfec8a734324b76a9266be\": [3, 0, 1, 161, 14],\n+ \"a02324.html#a13de4f83b7b5305a7be4ee1136dcd201\": [2, 0, 0, 159, 15],\n \"a02324.html#a1e837adf9acfec8a734324b76a9266be\": [2, 0, 0, 159, 14],\n- \"a02324.html#a541ab79b139a7177b1a561ad199f9751\": [2, 0, 0, 159, 11],\n+ \"a02324.html#a1e837adf9acfec8a734324b76a9266be\": [3, 0, 1, 161, 14],\n \"a02324.html#a541ab79b139a7177b1a561ad199f9751\": [3, 0, 1, 161, 11],\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\": [2, 0, 0, 159, 6],\n \"a02324.html#a60ddebd2ce398b9697a0161274ae91cc\": [3, 0, 1, 161, 6],\n \"a02324.html#a69007ce84df439ad16eefdd23e55580e\": [2, 0, 0, 159, 5],\n \"a02324.html#a69007ce84df439ad16eefdd23e55580e\": [3, 0, 1, 161, 5],\n \"a02324.html#a8bf7ebb7a0a758cebd90d38663f88f89\": [2, 0, 0, 159, 0],\n \"a02324.html#a8bf7ebb7a0a758cebd90d38663f88f89\": [3, 0, 1, 161, 0],\n- \"a02324.html#a93ec4963773f9cfcfdc34b437b0274b1\": [3, 0, 1, 161, 4],\n- \"a02324.html#a93ec4963773f9cfcfdc34b437b0274b1\": [2, 0, 0, 159, 4]\n+ \"a02324.html#a93ec4963773f9cfcfdc34b437b0274b1\": [2, 0, 0, 159, 4],\n+ \"a02324.html#a93ec4963773f9cfcfdc34b437b0274b1\": [3, 0, 1, 161, 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": "@@ -7,112 +7,112 @@\n \"a02324.html#ac47a680ad0e320fa896e740fe662ad4d\": [3, 0, 1, 161, 8],\n \"a02324.html#ac98d07dd8f7b70e16ccb9a01abf56b9c\": [2, 0, 0, 159, 17],\n \"a02324.html#ac98d07dd8f7b70e16ccb9a01abf56b9c\": [3, 0, 1, 161, 17],\n \"a02324.html#ad352f894df0e4ede3b39e45ffa0cb98d\": [3, 0, 1, 161, 7],\n \"a02324.html#ad352f894df0e4ede3b39e45ffa0cb98d\": [2, 0, 0, 159, 7],\n \"a02324.html#adb4eb10667d811f19db1e32992785c0a\": [3, 0, 1, 161, 16],\n \"a02324.html#adb4eb10667d811f19db1e32992785c0a\": [2, 0, 0, 159, 16],\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#addd810632994517d363f0baa629fcf66\": [2, 0, 0, 159, 1],\n \"a02324.html#ae54ab9a7abe2a7d48bc2756aa545ac78\": [2, 0, 0, 159, 13],\n+ \"a02324.html#ae54ab9a7abe2a7d48bc2756aa545ac78\": [3, 0, 1, 161, 13],\n \"a02324.html#aec0e38fe2f3bab85d4e18bb7509ce152\": [2, 0, 0, 159, 9],\n \"a02324.html#aec0e38fe2f3bab85d4e18bb7509ce152\": [3, 0, 1, 161, 9],\n- \"a02324.html#af542d73ada53c5e0f80f89d0fe2a937c\": [2, 0, 0, 159, 2],\n \"a02324.html#af542d73ada53c5e0f80f89d0fe2a937c\": [3, 0, 1, 161, 2],\n+ \"a02324.html#af542d73ada53c5e0f80f89d0fe2a937c\": [2, 0, 0, 159, 2],\n \"a02328.html\": [2, 0, 0, 459],\n \"a02328.html\": [3, 0, 1, 461],\n- \"a02332.html\": [3, 0, 1, 167],\n \"a02332.html\": [2, 0, 0, 165],\n+ \"a02332.html\": [3, 0, 1, 167],\n \"a02336.html\": [3, 0, 1, 246],\n \"a02336.html\": [2, 0, 0, 244],\n- \"a02340.html\": [2, 0, 0, 7],\n \"a02340.html\": [3, 0, 1, 9],\n- \"a02344.html\": [3, 0, 1, 206],\n+ \"a02340.html\": [2, 0, 0, 7],\n \"a02344.html\": [2, 0, 0, 204],\n- \"a02348.html\": [3, 0, 1, 78],\n+ \"a02344.html\": [3, 0, 1, 206],\n \"a02348.html\": [2, 0, 0, 76],\n+ \"a02348.html\": [3, 0, 1, 78],\n \"a02348.html#acfac23871b8e9ba54fdf2990e8fbbbeb\": [2, 0, 0, 76, 0],\n \"a02348.html#acfac23871b8e9ba54fdf2990e8fbbbeb\": [3, 0, 1, 78, 0],\n \"a02352.html\": [2, 0, 0, 425],\n \"a02352.html\": [3, 0, 1, 427],\n \"a02356.html\": [3, 0, 1, 79],\n \"a02356.html\": [2, 0, 0, 77],\n- \"a02356.html#a920a249b3e2bf675eb9ae96ac25887b5\": [3, 0, 1, 79, 0],\n \"a02356.html#a920a249b3e2bf675eb9ae96ac25887b5\": [2, 0, 0, 77, 0],\n+ \"a02356.html#a920a249b3e2bf675eb9ae96ac25887b5\": [3, 0, 1, 79, 0],\n \"a02360.html\": [2, 0, 0, 426],\n \"a02360.html\": [3, 0, 1, 428],\n \"a02364.html\": [3, 0, 1, 227],\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\": [2, 0, 0, 225, 1],\n \"a02364.html#a6e41bdf1904caef72ea3f014a0ddd802\": [3, 0, 1, 227, 1],\n+ \"a02364.html#a6e41bdf1904caef72ea3f014a0ddd802\": [2, 0, 0, 225, 1],\n \"a02364.html#a7c6ad50bc991512d6cf712ab9b0c28c1\": [2, 0, 0, 225, 3],\n \"a02364.html#a7c6ad50bc991512d6cf712ab9b0c28c1\": [3, 0, 1, 227, 3],\n \"a02364.html#a9a8ba0a0f7442929df460d79292134aa\": [3, 0, 1, 227, 4],\n \"a02364.html#a9a8ba0a0f7442929df460d79292134aa\": [2, 0, 0, 225, 4],\n- \"a02364.html#aa23724169652cc5d3eddd61bdb5863a8\": [2, 0, 0, 225, 5],\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#adf52076de7615c335b4574f577a22b77\": [3, 0, 1, 227, 6],\n \"a02364.html#adf52076de7615c335b4574f577a22b77\": [2, 0, 0, 225, 6],\n- \"a02364.html#aee395d766c6c8afb27a9bece5c42400e\": [3, 0, 1, 227, 0],\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 \"a02368.html\": [2, 0, 0, 224],\n \"a02368.html\": [3, 0, 1, 226],\n \"a02372.html\": [3, 0, 1, 2, 20],\n \"a02376.html\": [3, 0, 1, 2, 19],\n- \"a02380.html\": [2, 0, 0, 205],\n \"a02380.html\": [3, 0, 1, 207],\n- \"a02384.html\": [3, 0, 1, 541],\n+ \"a02380.html\": [2, 0, 0, 205],\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\": [3, 0, 1, 134],\n \"a02412.html\": [2, 0, 0, 132],\n- \"a02416.html\": [2, 0, 0, 313],\n+ \"a02412.html\": [3, 0, 1, 134],\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+ \"a02424.html\": [3, 0, 1, 317],\n \"a02428.html\": [3, 0, 1, 318],\n \"a02428.html\": [2, 0, 0, 316],\n \"a02432.html\": [2, 0, 0, 245],\n \"a02432.html\": [3, 0, 1, 247],\n \"a02432.html#a45be31afb639bbb371651691d57818fe\": [2, 0, 0, 245, 0],\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\": [2, 0, 0, 246, 1],\n+ \"a02436.html\": [3, 0, 1, 248],\n \"a02436.html#a8d632e9f7d98ecdcfb72a67ecfb4f103\": [3, 0, 1, 248, 1],\n- \"a02436.html#af22fec3bfb7858ad0eb9bfe19bf1329e\": [2, 0, 0, 246, 0],\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\": [2, 0, 0, 139],\n \"a02444.html\": [3, 0, 1, 141],\n- \"a02448.html\": [2, 0, 0, 262],\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#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\": [2, 0, 0, 262, 11],\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#a59115dc58b27a4d622d06f1a43deebe9\": [2, 0, 0, 262, 1],\n \"a02448.html#a6686cfa51063175cc51326ce90d5f7b0\": [2, 0, 0, 262, 10],\n \"a02448.html#a6686cfa51063175cc51326ce90d5f7b0\": [3, 0, 1, 264, 10],\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@@ -121,76 +121,76 @@\n \"a02448.html#a8ed907b7cc1367188fad8ac2cd99aa15\": [2, 0, 0, 262, 12],\n \"a02448.html#aad86e44b7f9c9327f166c01167c20f54\": [2, 0, 0, 262, 0],\n \"a02448.html#aad86e44b7f9c9327f166c01167c20f54\": [3, 0, 1, 264, 0],\n \"a02448.html#ac2b2b0c5b95f654313726ccbf95e993d\": [3, 0, 1, 264, 3],\n \"a02448.html#ac2b2b0c5b95f654313726ccbf95e993d\": [2, 0, 0, 262, 3],\n \"a02448.html#af99817fb2887d9029b642f8b7f5a2227\": [3, 0, 1, 264, 9],\n \"a02448.html#af99817fb2887d9029b642f8b7f5a2227\": [2, 0, 0, 262, 9],\n- \"a02452.html\": [3, 0, 1, 265],\n \"a02452.html\": [2, 0, 0, 263],\n- \"a02452.html#a3009c0d094984c8b892f7573f3f722bf\": [3, 0, 1, 265, 1],\n+ \"a02452.html\": [3, 0, 1, 265],\n \"a02452.html#a3009c0d094984c8b892f7573f3f722bf\": [2, 0, 0, 263, 1],\n+ \"a02452.html#a3009c0d094984c8b892f7573f3f722bf\": [3, 0, 1, 265, 1],\n \"a02452.html#a38f5ef78eef67e4ef45356adfef88da3\": [2, 0, 0, 263, 5],\n \"a02452.html#a38f5ef78eef67e4ef45356adfef88da3\": [3, 0, 1, 265, 5],\n- \"a02452.html#a4804b29dee9d045095431989ef71da6f\": [2, 0, 0, 263, 0],\n \"a02452.html#a4804b29dee9d045095431989ef71da6f\": [3, 0, 1, 265, 0],\n+ \"a02452.html#a4804b29dee9d045095431989ef71da6f\": [2, 0, 0, 263, 0],\n \"a02452.html#a8898ad351d830aee1e3dd7e878f1fcfc\": [3, 0, 1, 265, 7],\n \"a02452.html#a8898ad351d830aee1e3dd7e878f1fcfc\": [2, 0, 0, 263, 7],\n \"a02452.html#a8c7596c4767e1254224e59c191a30486\": [2, 0, 0, 263, 4],\n \"a02452.html#a8c7596c4767e1254224e59c191a30486\": [3, 0, 1, 265, 4],\n- \"a02452.html#a98082822bae323ca57ddcaba6ed1f785\": [2, 0, 0, 263, 2],\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\": [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 \"a02460.html\": [3, 0, 1, 237],\n+ \"a02460.html\": [2, 0, 0, 235],\n \"a02464.html\": [3, 0, 1, 299],\n \"a02464.html\": [2, 0, 0, 297],\n- \"a02464.html#aa25886a3e8642f111a265dec1045c6f3\": [3, 0, 1, 299, 0],\n \"a02464.html#aa25886a3e8642f111a265dec1045c6f3\": [2, 0, 0, 297, 0],\n- \"a02468.html\": [3, 0, 1, 505],\n+ \"a02464.html#aa25886a3e8642f111a265dec1045c6f3\": [3, 0, 1, 299, 0],\n \"a02468.html\": [2, 0, 0, 503],\n- \"a02480.html\": [2, 0, 0, 112],\n+ \"a02468.html\": [3, 0, 1, 505],\n \"a02480.html\": [3, 0, 1, 114],\n- \"a02484.html\": [2, 0, 0, 113],\n+ \"a02480.html\": [2, 0, 0, 112],\n \"a02484.html\": [3, 0, 1, 115],\n+ \"a02484.html\": [2, 0, 0, 113],\n \"a02488.html\": [2, 0, 0, 168],\n \"a02488.html\": [3, 0, 1, 170],\n \"a02492.html\": [3, 0, 1, 378],\n \"a02492.html\": [2, 0, 0, 376],\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#a4efc6de8e5ea1810c3d32f29a00714c0\": [3, 0, 1, 379, 5],\n \"a02496.html#a5e422f39c89802be3c5aaaf65dbfd862\": [3, 0, 1, 379, 0],\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\": [2, 0, 0, 377, 2],\n \"a02496.html#a730172f56582e5a56d1fcb93d230d1de\": [3, 0, 1, 379, 2],\n- \"a02496.html#a8f7ec9cccffe7d666e3a025546377c32\": [2, 0, 0, 377, 4],\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\": [2, 0, 0, 322],\n \"a02500.html\": [3, 0, 1, 324],\n- \"a02500.html#aa618fffc79e001904f7d53e0f27a29fd\": [2, 0, 0, 322, 0],\n \"a02500.html#aa618fffc79e001904f7d53e0f27a29fd\": [3, 0, 1, 324, 0],\n+ \"a02500.html#aa618fffc79e001904f7d53e0f27a29fd\": [2, 0, 0, 322, 0],\n \"a02504.html\": [2, 0, 0, 269],\n \"a02504.html\": [3, 0, 1, 271],\n \"a02504.html#abc191cc95d1df7bb9e9fcf7edb857162\": [3, 0, 1, 271, 0],\n \"a02504.html#abc191cc95d1df7bb9e9fcf7edb857162\": [2, 0, 0, 269, 0],\n- \"a02508.html\": [3, 0, 1, 192],\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#a5b59c8bf5a4f3ed5ab5a3bdc4bb0dad2\": [3, 0, 1, 192, 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@@ -200,48 +200,48 @@\n \"a02516.html#a8c699a69c7d0708ffa2047f78c3c5ba4\": [3, 0, 1, 2, 24, 5],\n \"a02516.html#aaf71bcd586bc33bd38e9db2a8f59614a\": [3, 0, 1, 2, 24, 0],\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\": [3, 0, 1, 64],\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 \"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#a0b891b92eae0f946f0dce5892f6b74d3\": [3, 0, 1, 560, 3],\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#a422ed00f49aca034422716e3e8e345bf\": [3, 0, 1, 560, 4],\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#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\": [3, 0, 1, 377],\n \"a02556.html\": [2, 0, 0, 375],\n- \"a02560.html\": [3, 0, 1, 250],\n+ \"a02556.html\": [3, 0, 1, 377],\n \"a02560.html\": [2, 0, 0, 248],\n- \"a02564.html\": [3, 0, 1, 251],\n+ \"a02560.html\": [3, 0, 1, 250],\n \"a02564.html\": [2, 0, 0, 249],\n+ \"a02564.html\": [3, 0, 1, 251],\n \"a02568.html\": [3, 0, 1, 309],\n \"a02568.html\": [2, 0, 0, 307],\n- \"a02568.html#a37b3ac486d866219fe29f05bd0d742b2\": [3, 0, 1, 309, 1],\n \"a02568.html#a37b3ac486d866219fe29f05bd0d742b2\": [2, 0, 0, 307, 1],\n- \"a02568.html#a65a98f77981bd096f65841afb0215747\": [3, 0, 1, 309, 2],\n+ \"a02568.html#a37b3ac486d866219fe29f05bd0d742b2\": [3, 0, 1, 309, 1],\n \"a02568.html#a65a98f77981bd096f65841afb0215747\": [2, 0, 0, 307, 2],\n- \"a02568.html#acea65ff66039691f574aea2894a255d8\": [3, 0, 1, 309, 0],\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 \"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/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', ['../a00020.html', 1, '']]],\n+ ['optionaljacobian_2eh_48', ['OptionalJacobian.h', ['../a00149.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', ['../a00584.html', 1, '']]],\n- ['ordering_2eh_56', ['Ordering.h', ['../a00668.html', 1, '']]],\n+ ['ordering_2ecpp_55', ['Ordering.cpp', ['../a00617.html', 1, '']]],\n+ ['ordering_2eh_56', ['Ordering.h', ['../a00629.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": "@@ -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', ['../a00335.html', 1, '']]],\n+ ['pinholecamera_2eh_32', ['PinholeCamera.h', ['../a00350.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', ['../a00467.html', 1, '']]],\n+ ['pinholepose_2eh_35', ['PinholePose.h', ['../a00320.html', 1, '']]],\n ['pinholeset_36', ['PinholeSet', ['../a03136.html', 1, 'gtsam']]],\n- ['pinholeset_2eh_37', ['PinholeSet.h', ['../a00383.html', 1, '']]],\n+ ['pinholeset_2eh_37', ['PinholeSet.h', ['../a00299.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', ['../a00476.html', 1, '']]],\n- ['point2_2eh_45', ['Point2.h', ['../a00449.html', 1, '']]],\n+ ['point2_2ecpp_44', ['Point2.cpp', ['../a00443.html', 1, '']]],\n+ ['point2_2eh_45', ['Point2.h', ['../a00473.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', ['../a00395.html', 1, '']]],\n- ['point3_2eh_48', ['Point3.h', ['../a00344.html', 1, '']]],\n+ ['point3_2ecpp_47', ['Point3.cpp', ['../a00440.html', 1, '']]],\n+ ['point3_2eh_48', ['Point3.h', ['../a00371.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,56 +113,56 @@\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', ['../a00326.html', 1, '']]],\n- ['pose2_2eh_55', ['Pose2.h', ['../a00398.html', 1, '']]],\n+ ['pose2_2ecpp_54', ['Pose2.cpp', ['../a00329.html', 1, '']]],\n+ ['pose2_2eh_55', ['Pose2.h', ['../a00368.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', ['../a00455.html', 1, '']]],\n- ['pose3_2eh_58', ['Pose3.h', ['../a00341.html', 1, '']]],\n+ ['pose3_2ecpp_57', ['Pose3.cpp', ['../a00431.html', 1, '']]],\n+ ['pose3_2eh_58', ['Pose3.h', ['../a00398.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', ['../a01325.html', 1, '']]],\n+ ['poserotationprior_2eh_62', ['PoseRotationPrior.h', ['../a01286.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', ['../a01334.html', 1, '']]],\n+ ['posetranslationprior_2eh_64', ['PoseTranslationPrior.h', ['../a01310.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', ['../a00758.html', 1, '']]],\n+ ['powermethod_2eh_68', ['PowerMethod.h', ['../a00800.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', ['../a01397.html', 1, '']]],\n- ['precompiled_5fheader_2eh_72', ['precompiled_header.h', ['../a01403.html', 1, '']]],\n+ ['precompiled_5fheader_2ecpp_71', ['precompiled_header.cpp', ['../a01406.html', 1, '']]],\n+ ['precompiled_5fheader_2eh_72', ['precompiled_header.h', ['../a01400.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 ['../a04076.html#adbbb5438ff5a2a829c9ba34f392ab21c', 1, 'gtsam::AHRSFactor::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', ['../a00968.html', 1, '']]],\n- ['preintegratedrotation_2eh_89', ['PreintegratedRotation.h', ['../a00908.html', 1, '']]],\n+ ['preintegratedrotation_2ecpp_88', ['PreintegratedRotation.cpp', ['../a00989.html', 1, '']]],\n+ ['preintegratedrotation_2eh_89', ['PreintegratedRotation.h', ['../a00917.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', ['../a00983.html', 1, '']]],\n+ ['preintegrationbase_2eh_92', ['PreintegrationBase.h', ['../a00938.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', ['../a00905.html', 1, '']]],\n+ ['preintegrationparams_2eh_95', ['PreintegrationParams.h', ['../a00923.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', ['../a00095.html', 1, '']]],\n+ ['productliegroup_2eh_117', ['ProductLieGroup.h', ['../a00002.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', ['../a01280.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', ['../a00293.html', 1, '']]]\n+ ['quaternion_2eh_4', ['Quaternion.h', ['../a00428.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', ['../a00893.html', 1, '']]],\n+ ['regularhessianfactor_2eh_26', ['RegularHessianFactor.h', ['../a00764.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', ['../a01241.html', 1, '']]],\n+ ['regularimplicitschurfactor_2eh_28', ['RegularImplicitSchurFactor.h', ['../a01277.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', ['../a00725.html', 1, '']]],\n+ ['regularjacobianfactor_2eh_30', ['RegularJacobianFactor.h', ['../a00896.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@@ -208,38 +208,38 @@\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', ['../a00434.html', 1, '']]],\n- ['rot2_2eh_90', ['Rot2.h', ['../a00407.html', 1, '']]],\n+ ['rot2_2eh_90', ['Rot2.h', ['../a00365.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', ['../a00347.html', 1, '']]],\n- ['rot3_2eh_93', ['Rot3.h', ['../a00380.html', 1, '']]],\n+ ['rot3_2ecpp_92', ['Rot3.cpp', ['../a00281.html', 1, '']]],\n+ ['rot3_2eh_93', ['Rot3.h', ['../a00332.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', ['../a00470.html', 1, '']]],\n- ['rot3q_2ecpp_96', ['Rot3Q.cpp', ['../a00308.html', 1, '']]],\n+ ['rot3m_2ecpp_95', ['Rot3M.cpp', ['../a00305.html', 1, '']]],\n+ ['rot3q_2ecpp_96', ['Rot3Q.cpp', ['../a00374.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- ['../a00074.html#a644bbe6719d8dd756e11e8b3d2fd229a', 1, 'gtsam::testing::rotate()']\n+ ['../a00104.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', ['../a00800.html', 1, '']]],\n- ['sampler_2eh_9', ['Sampler.h', ['../a00860.html', 1, '']]],\n+ ['sampler_2ecpp_8', ['Sampler.cpp', ['../a00881.html', 1, '']]],\n+ ['sampler_2eh_9', ['Sampler.h', ['../a00794.html', 1, '']]],\n ['save_10', ['save', ['../a01428.html#a09f2bbdb9f9d633542362dbe8d79f9ab', 1, 'gtsam::save()'],\n- ['../a00026.html#a068f1f8df2afd609744bc82386259e71', 1, 'boost::serialization::save()'],\n+ ['../a00059.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', ['../a00854.html', 1, '']]],\n- ['scatter_2eh_22', ['Scatter.h', ['../a00764.html', 1, '']]],\n+ ['scatter_2ecpp_21', ['Scatter.cpp', ['../a00755.html', 1, '']]],\n+ ['scatter_2eh_22', ['Scatter.h', ['../a00749.html', 1, '']]],\n ['scenario_23', ['Scenario', ['../a04224.html', 1, 'gtsam']]],\n- ['scenario_2eh_24', ['Scenario.h', ['../a00932.html', 1, '']]],\n+ ['scenario_2eh_24', ['Scenario.h', ['../a00968.html', 1, '']]],\n ['scenariorunner_25', ['ScenarioRunner', ['../a04236.html', 1, 'gtsam']]],\n- ['scenariorunner_2eh_26', ['ScenarioRunner.h', ['../a00920.html', 1, '']]],\n+ ['scenariorunner_2eh_26', ['ScenarioRunner.h', ['../a00908.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', ['../a00134.html', 1, '']]],\n- ['serializationtesthelpers_2eh_39', ['serializationTestHelpers.h', ['../a00050.html', 1, '']]],\n+ ['serialization_2eh_38', ['serialization.h', ['../a00008.html', 1, '']]],\n+ ['serializationtesthelpers_2eh_39', ['serializationTestHelpers.h', ['../a00143.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', ['../a01193.html', 1, '']]],\n- ['sfmdata_2eh_75', ['SfmData.h', ['../a01217.html', 1, '']]],\n+ ['sfmdata_2ecpp_74', ['SfmData.cpp', ['../a01232.html', 1, '']]],\n+ ['sfmdata_2eh_75', ['SfmData.h', ['../a01208.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', ['../a01205.html', 1, '']]],\n- ['sfmtrack_2eh_80', ['SfmTrack.h', ['../a01202.html', 1, '']]],\n+ ['sfmtrack_2ecpp_79', ['SfmTrack.cpp', ['../a01202.html', 1, '']]],\n+ ['sfmtrack_2eh_80', ['SfmTrack.h', ['../a01211.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@@ -227,15 +227,15 @@\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', ['../a01214.html', 1, '']]],\n- ['shonanaveraging_2eh_94', ['ShonanAveraging.h', ['../a01223.html', 1, '']]],\n+ ['shonanaveraging_2eh_94', ['ShonanAveraging.h', ['../a01220.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@@ -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', ['../a00254.html', 1, '']]],\n- ['signature_2eh_113', ['Signature.h', ['../a00236.html', 1, '']]],\n+ ['signature_2ecpp_112', ['Signature.cpp', ['../a00209.html', 1, '']]],\n+ ['signature_2eh_113', ['Signature.h', ['../a00179.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', ['../a00479.html', 1, '']]],\n- ['similarity2_2eh_116', ['Similarity2.h', ['../a00431.html', 1, '']]],\n+ ['similarity2_2eh_116', ['Similarity2.h', ['../a00347.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', ['../a00425.html', 1, '']]],\n- ['similarity3_2eh_119', ['Similarity3.h', ['../a00458.html', 1, '']]],\n- ['simplecamera_2ecpp_120', ['SimpleCamera.cpp', ['../a00473.html', 1, '']]],\n- ['simplecamera_2eh_121', ['SimpleCamera.h', ['../a00299.html', 1, '']]],\n+ ['similarity3_2ecpp_118', ['Similarity3.cpp', ['../a00356.html', 1, '']]],\n+ ['similarity3_2eh_119', ['Similarity3.h', ['../a00452.html', 1, '']]],\n+ ['simplecamera_2ecpp_120', ['SimpleCamera.cpp', ['../a00425.html', 1, '']]],\n+ ['simplecamera_2eh_121', ['SimpleCamera.h', ['../a00449.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', ['../a01268.html', 1, '']]],\n+ ['smartfactorbase_2eh_130', ['SmartFactorBase.h', ['../a01295.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', ['../a01250.html', 1, '']]],\n+ ['smartfactorparams_2eh_132', ['SmartFactorParams.h', ['../a01331.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', ['../a01262.html', 1, '']]],\n+ ['smartprojectionfactor_2eh_134', ['SmartProjectionFactor.h', ['../a01307.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', ['../a01313.html', 1, '']]],\n+ ['smartprojectionposefactor_2eh_138', ['SmartProjectionPoseFactor.h', ['../a01292.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', ['../a01253.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', ['../a00365.html', 1, '']]],\n- ['so3_2eh_143', ['SO3.h', ['../a00437.html', 1, '']]],\n- ['so4_2ecpp_144', ['SO4.cpp', ['../a00386.html', 1, '']]],\n- ['so4_2eh_145', ['SO4.h', ['../a00287.html', 1, '']]],\n+ ['so3_2ecpp_142', ['SO3.cpp', ['../a00419.html', 1, '']]],\n+ ['so3_2eh_143', ['SO3.h', ['../a00323.html', 1, '']]],\n+ ['so4_2ecpp_144', ['SO4.cpp', ['../a00404.html', 1, '']]],\n+ ['so4_2eh_145', ['SO4.h', ['../a00344.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', ['../a00281.html', 1, '']]],\n- ['son_2ecpp_153', ['SOn.cpp', ['../a00338.html', 1, '']]],\n- ['son_2eh_154', ['SOn.h', ['../a00311.html', 1, '']]],\n+ ['son_2dinl_2eh_152', ['SOn-inl.h', ['../a00389.html', 1, '']]],\n+ ['son_2ecpp_153', ['SOn.cpp', ['../a00455.html', 1, '']]],\n+ ['son_2eh_154', ['SOn.h', ['../a00464.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', ['../a00767.html', 1, '']]],\n+ ['sparseeigen_2eh_158', ['SparseEigen.h', ['../a00863.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', ['../a00329.html', 1, '']]],\n+ ['sphericalcamera_2eh_163', ['SphericalCamera.h', ['../a00413.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', ['../a00377.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', ['../a01310.html', 1, '']]],\n+ ['stereofactor_2eh_183', ['StereoFactor.h', ['../a01238.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', ['../a00362.html', 1, '']]],\n+ ['stereopoint2_2ecpp_185', ['StereoPoint2.cpp', ['../a00410.html', 1, '']]],\n ['stereopoint2_2eh_186', ['StereoPoint2.h', ['../a00401.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', ['../a00875.html', 1, '']]],\n- ['subgraphbuilder_2eh_197', ['SubgraphBuilder.h', ['../a00842.html', 1, '']]],\n+ ['subgraphbuilder_2ecpp_196', ['SubgraphBuilder.cpp', ['../a00746.html', 1, '']]],\n+ ['subgraphbuilder_2eh_197', ['SubgraphBuilder.h', ['../a00857.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', ['../a00743.html', 1, '']]],\n- ['subgraphpreconditioner_2eh_201', ['SubgraphPreconditioner.h', ['../a00896.html', 1, '']]],\n+ ['subgraphpreconditioner_2ecpp_200', ['SubgraphPreconditioner.cpp', ['../a00773.html', 1, '']]],\n+ ['subgraphpreconditioner_2eh_201', ['SubgraphPreconditioner.h', ['../a00860.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', ['../a00869.html', 1, '']]],\n- ['subgraphsolver_2eh_205', ['SubgraphSolver.h', ['../a00794.html', 1, '']]],\n+ ['subgraphsolver_2ecpp_204', ['SubgraphSolver.cpp', ['../a00710.html', 1, '']]],\n+ ['subgraphsolver_2eh_205', ['SubgraphSolver.h', ['../a00818.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', ['../a00677.html', 1, '']]],\n+ ['symbol_2ecpp_213', ['Symbol.cpp', ['../a00686.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', ['../a01358.html', 1, '']]],\n- ['symbolicbayesnet_2eh_220', ['SymbolicBayesNet.h', ['../a01364.html', 1, '']]],\n+ ['symbolicbayesnet_2ecpp_219', ['SymbolicBayesNet.cpp', ['../a01376.html', 1, '']]],\n+ ['symbolicbayesnet_2eh_220', ['SymbolicBayesNet.h', ['../a01343.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', ['../a01391.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', ['../a01373.html', 1, '']]],\n- ['symbolicconditional_2eh_227', ['SymbolicConditional.h', ['../a01352.html', 1, '']]],\n+ ['symbolicconditional_2eh_227', ['SymbolicConditional.h', ['../a01358.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', ['../a01367.html', 1, '']]],\n- ['symboliceliminationtree_2eh_230', ['SymbolicEliminationTree.h', ['../a01361.html', 1, '']]],\n+ ['symboliceliminationtree_2ecpp_229', ['SymbolicEliminationTree.cpp', ['../a01346.html', 1, '']]],\n+ ['symboliceliminationtree_2eh_230', ['SymbolicEliminationTree.h', ['../a01370.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', ['../a01343.html', 1, '']]],\n- ['symbolicfactor_2ecpp_233', ['SymbolicFactor.cpp', ['../a01382.html', 1, '']]],\n- ['symbolicfactor_2eh_234', ['SymbolicFactor.h', ['../a01385.html', 1, '']]],\n+ ['symbolicfactor_2dinst_2eh_232', ['SymbolicFactor-inst.h', ['../a01382.html', 1, '']]],\n+ ['symbolicfactor_2ecpp_233', ['SymbolicFactor.cpp', ['../a01355.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', ['../a01370.html', 1, '']]],\n- ['symbolicfactorgraph_2eh_237', ['SymbolicFactorGraph.h', ['../a01379.html', 1, '']]],\n+ ['symbolicfactorgraph_2ecpp_236', ['SymbolicFactorGraph.cpp', ['../a01349.html', 1, '']]],\n+ ['symbolicfactorgraph_2eh_237', ['SymbolicFactorGraph.h', ['../a01388.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', ['../a01388.html', 1, '']]],\n- ['symbolicisam_2eh_241', ['SymbolicISAM.h', ['../a01346.html', 1, '']]],\n+ ['symbolicisam_2ecpp_240', ['SymbolicISAM.cpp', ['../a01361.html', 1, '']]],\n+ ['symbolicisam_2eh_241', ['SymbolicISAM.h', ['../a01385.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', ['../a01349.html', 1, '']]],\n- ['symbolicjunctiontree_2eh_244', ['SymbolicJunctionTree.h', ['../a01355.html', 1, '']]],\n+ ['symbolicjunctiontree_2ecpp_243', ['SymbolicJunctionTree.cpp', ['../a01364.html', 1, '']]],\n+ ['symbolicjunctiontree_2eh_244', ['SymbolicJunctionTree.h', ['../a01352.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', ['../a00086.html', 1, '']]],\n- ['symmetricblockmatrix_2eh_248', ['SymmetricBlockMatrix.h', ['../a00137.html', 1, '']]],\n+ ['symmetricblockmatrix_2ecpp_247', ['SymmetricBlockMatrix.cpp', ['../a00083.html', 1, '']]],\n+ ['symmetricblockmatrix_2eh_248', ['SymmetricBlockMatrix.h', ['../a00089.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', ['../a00965.html', 1, '']]],\n- ['tangentpreintegration_2eh_4', ['TangentPreintegration.h', ['../a00977.html', 1, '']]],\n+ ['tangentpreintegration_2ecpp_3', ['TangentPreintegration.cpp', ['../a00980.html', 1, '']]],\n+ ['tangentpreintegration_2eh_4', ['TangentPreintegration.h', ['../a00956.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', ['../a00083.html', 1, '']]],\n+ ['testable_2eh_9', ['Testable.h', ['../a00065.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', ['../a00014.html', 1, '']]],\n+ ['testableassertions_2eh_131', ['TestableAssertions.h', ['../a00005.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', ['../a00035.html', 1, '']]],\n+ ['threadsafeexception_2eh_136', ['ThreadsafeException.h', ['../a00056.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', ['../a00017.html', 1, '']]],\n- ['timing_2eh_151', ['timing.h', ['../a00092.html', 1, '']]],\n+ ['timing_2ecpp_150', ['timing.cpp', ['../a00116.html', 1, '']]],\n+ ['timing_2eh_151', ['timing.h', ['../a00020.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', ['../a01208.html#ac50218675ff25e1e9202d335ecfa6b3a', 1, 'gtsam::gtsfm']]],\n+ ['tracksfrompairwisematches_166', ['tracksFromPairwiseMatches', ['../a01190.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,25 +418,25 @@\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', ['../a01190.html', 1, '']]],\n+ ['translationfactor_2eh_340', ['TranslationFactor.h', ['../a01205.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', ['../a01226.html', 1, '']]],\n- ['translationrecovery_2eh_344', ['TranslationRecovery.h', ['../a01187.html', 1, '']]],\n+ ['translationrecovery_2ecpp_343', ['TranslationRecovery.cpp', ['../a01217.html', 1, '']]],\n+ ['translationrecovery_2eh_344', ['TranslationRecovery.h', ['../a01226.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 ['../a03824.html#a9defe89aaaa6cd3695dfebbb0cbf9781', 1, 'gtsam::System::transposeMultiplyAdd()'],\n@@ -473,15 +473,15 @@\n ['../a01428.html#ab79854d3cb3bcc4f562fc88a0731a447', 1, 'gtsam::triangulatePoint3(const std::vector< Pose3 > &poses, boost::shared_ptr< CALIBRATION > sharedCal, const Point2Vector &measurements, double rank_tol=1e-9, bool optimize=false, const SharedNoiseModel &model=nullptr, const bool useLOST=false)'],\n ['../a01428.html#a58f4009e3a8872d0ac6780d654cccc2e', 1, 'gtsam::triangulatePoint3(const CameraSet< CAMERA > &cameras, const typename CAMERA::MeasurementVector &measurements, double rank_tol=1e-9, bool optimize=false, const SharedNoiseModel &model=nullptr, const bool useLOST=false)']\n ]],\n ['triangulatesafe_362', ['triangulatesafe', ['../a04936.html#a689089b7db400d88f95ef8cdb6b8a653', 1, 'gtsam::SmartProjectionFactor::triangulateSafe()'],\n ['../a03136.html#a5fbe615d1bfd9e5c3a797e44297eea09', 1, 'gtsam::PinholeSet::triangulateSafe()'],\n ['../a01428.html#a8d52d7d8a5e5c8d7318ce95ee57e9cfa', 1, 'gtsam::triangulateSafe()']\n ]],\n- ['triangulation_2eh_363', ['triangulation.h', ['../a00461.html', 1, '']]],\n+ ['triangulation_2eh_363', ['triangulation.h', ['../a00359.html', 1, '']]],\n ['triangulationcheiralityexception_364', ['TriangulationCheiralityException', ['../a03368.html', 1, 'gtsam']]],\n ['triangulationfactor_365', ['triangulationfactor', ['../a04968.html', 1, 'gtsam::TriangulationFactor< CAMERA >'],\n ['../a04968.html#ae02b051f95339acc3e410d5352b985d2', 1, 'gtsam::TriangulationFactor::TriangulationFactor()'],\n ['../a04968.html#a73cd66af4faf4400cffe370d803ee223', 1, 'gtsam::TriangulationFactor::TriangulationFactor(const CAMERA &camera, const Measurement &measured, const SharedNoiseModel &model, Key pointKey, bool throwCheirality=false, bool verboseCheirality=false)']\n ]],\n ['triangulationgraph_366', ['triangulationgraph', ['../a01428.html#a2b96bc32f3c5c436db3fe60e5139319e', 1, 'gtsam::triangulationGraph(const CameraSet< CAMERA > &cameras, const typename CAMERA::MeasurementVector &measurements, Key landmarkKey, const Point3 &initialEstimate, const SharedNoiseModel &model=nullptr)'],\n ['../a01428.html#ad167fac94fa72c0d3b8db36e5fa2becb', 1, 'gtsam::triangulationGraph(const std::vector< Pose3 > &poses, boost::shared_ptr< CALIBRATION > sharedCal, const Point2Vector &measurements, Key landmarkKey, const Point3 &initialEstimate, const SharedNoiseModel &model=noiseModel::Unit::Create(2))']\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', ['../a00068.html', 1, '']]],\n- ['types_2eh_378', ['types.h', ['../a00119.html', 1, '']]],\n+ ['types_2ecpp_377', ['types.cpp', ['../a00014.html', 1, '']]],\n+ ['types_2eh_378', ['types.h', ['../a00098.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', ['../a00041.html', 1, '']]],\n+ ['value_2eh_3', ['Value.h', ['../a00131.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', ['../a01004.html', 1, '']]],\n+ ['values_2eh_11', ['Values.h', ['../a01037.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', ['../a00656.html', 1, '']]],\n- ['variableindex_2ecpp_27', ['VariableIndex.cpp', ['../a00650.html', 1, '']]],\n- ['variableindex_2eh_28', ['VariableIndex.h', ['../a00683.html', 1, '']]],\n+ ['variableindex_2dinl_2eh_26', ['VariableIndex-inl.h', ['../a00599.html', 1, '']]],\n+ ['variableindex_2ecpp_27', ['VariableIndex.cpp', ['../a00611.html', 1, '']]],\n+ ['variableindex_2eh_28', ['VariableIndex.h', ['../a00590.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', ['../a00629.html', 1, '']]],\n- ['variableslots_2eh_34', ['VariableSlots.h', ['../a00590.html', 1, '']]],\n+ ['variableslots_2ecpp_33', ['VariableSlots.cpp', ['../a00620.html', 1, '']]],\n+ ['variableslots_2eh_34', ['VariableSlots.h', ['../a00695.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', ['../a00125.html', 1, '']]],\n- ['vector_2eh_43', ['Vector.h', ['../a00065.html', 1, '']]],\n+ ['vector_2ecpp_42', ['Vector.cpp', ['../a00053.html', 1, '']]],\n+ ['vector_2eh_43', ['Vector.h', ['../a00146.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', ['../a00002.html', 1, '']]],\n+ ['vectorserialization_2eh_54', ['VectorSerialization.h', ['../a00101.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', ['../a00710.html', 1, '']]],\n- ['vectorvalues_2eh_75', ['VectorValues.h', ['../a00830.html', 1, '']]],\n+ ['vectorvalues_2ecpp_74', ['VectorValues.cpp', ['../a00821.html', 1, '']]],\n+ ['vectorvalues_2eh_75', ['VectorValues.h', ['../a00869.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', ['../a00059.html', 1, '']]],\n- ['verticalblockmatrix_2eh_87', ['VerticalBlockMatrix.h', ['../a00116.html', 1, '']]],\n+ ['verticalblockmatrix_2ecpp_86', ['VerticalBlockMatrix.cpp', ['../a00137.html', 1, '']]],\n+ ['verticalblockmatrix_2eh_87', ['VerticalBlockMatrix.h', ['../a00029.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', ['../a00140.html', 1, '']]],\n+ ['weightedsampler_2eh_8', ['WeightedSampler.h', ['../a00095.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', ['../a01088.html', 1, '']]],\n+ ['whitenoisefactor_2eh_18', ['WhiteNoiseFactor.h', ['../a01007.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', ['../a00812.html', 1, '']]],\n+ ['acceleratedpowermethod_2eh_9', ['AcceleratedPowerMethod.h', ['../a00776.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', ['../a00917.html', 1, '']]],\n- ['ahrsfactor_2eh_38', ['AHRSFactor.h', ['../a00941.html', 1, '']]],\n+ ['ahrsfactor_2ecpp_37', ['AHRSFactor.cpp', ['../a00935.html', 1, '']]],\n+ ['ahrsfactor_2eh_38', ['AHRSFactor.h', ['../a00932.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', ['../a00257.html', 1, '']]],\n- ['algebraicdecisiontree_2eh_41', ['AlgebraicDecisionTree.h', ['../a00227.html', 1, '']]],\n+ ['algebraicdecisiontree_2ecpp_40', ['AlgebraicDecisionTree.cpp', ['../a00206.html', 1, '']]],\n+ ['algebraicdecisiontree_2eh_41', ['AlgebraicDecisionTree.h', ['../a00242.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', ['../a01256.html', 1, '']]],\n+ ['antifactor_2eh_55', ['AntiFactor.h', ['../a01262.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', ['../a00119.html#a30d3af2da1ea940197addce4f3c223c8', 1, 'types.h']]],\n+ ['assert_5fthrow_75', ['assert_throw', ['../a00098.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', ['../a00272.html', 1, '']]],\n+ ['assignment_2eh_77', ['Assignment.h', ['../a00221.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@@ -215,16 +215,16 @@\n ['atdiscrete_82', ['atDiscrete', ['../a03504.html#ae9a522be7b012de1c785caa3d17dfb7e', 1, 'gtsam::HybridValues']]],\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', ['../a00914.html', 1, '']]],\n- ['attitudefactor_2eh_87', ['AttitudeFactor.h', ['../a00974.html', 1, '']]],\n+ ['attitudefactor_2ecpp_86', ['AttitudeFactor.cpp', ['../a00965.html', 1, '']]],\n+ ['attitudefactor_2eh_87', ['AttitudeFactor.h', ['../a00911.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', ['../a00989.html', 1, '']]],\n- ['barometricfactor_2eh_14', ['BarometricFactor.h', ['../a00998.html', 1, '']]],\n+ ['barometricfactor_2ecpp_13', ['BarometricFactor.cpp', ['../a00971.html', 1, '']]],\n+ ['barometricfactor_2eh_14', ['BarometricFactor.h', ['../a00983.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', ['../a00173.html', 1, '']]],\n+ ['basis_2eh_23', ['Basis.h', ['../a00158.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', ['../a00167.html', 1, '']]],\n+ ['basisfactors_2eh_28', ['BasisFactors.h', ['../a00152.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', ['../a00644.html', 1, '']]],\n+ ['bayesnet_2eh_30', ['BayesNet.h', ['../a00683.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', ['../a00701.html', 1, '']]],\n- ['bayestree_2ecpp_39', ['BayesTree.cpp', ['../a00698.html', 1, '']]],\n- ['bayestree_2eh_40', ['BayesTree.h', ['../a00575.html', 1, '']]],\n+ ['bayestree_2dinst_2eh_38', ['BayesTree-inst.h', ['../a00671.html', 1, '']]],\n+ ['bayestree_2ecpp_39', ['BayesTree.cpp', ['../a00626.html', 1, '']]],\n+ ['bayestree_2eh_40', ['BayesTree.h', ['../a00587.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', ['../a00623.html', 1, '']]],\n- ['bayestreecliquebase_2eh_48', ['BayesTreeCliqueBase.h', ['../a00680.html', 1, '']]],\n+ ['bayestreecliquebase_2eh_48', ['BayesTreeCliqueBase.h', ['../a00674.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', ['../a00368.html', 1, '']]],\n+ ['bearingrange_2eh_67', ['BearingRange.h', ['../a00302.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- ['../a00074.html#a72a7c561cc91f437a22023297fb7f658', 1, 'gtsam::testing::between()']\n+ ['../a00104.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', ['../a01274.html', 1, '']]],\n+ ['betweenfactor_2eh_78', ['BetweenFactor.h', ['../a01241.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', ['../a00803.html', 1, '']]],\n+ ['binaryjacobianfactor_2eh_88', ['BinaryJacobianFactor.h', ['../a00719.html', 1, '']]],\n ['binarymeasurement_89', ['BinaryMeasurement', ['../a04688.html', 1, 'gtsam']]],\n- ['binarymeasurement_2eh_90', ['BinaryMeasurement.h', ['../a01211.html', 1, '']]],\n+ ['binarymeasurement_2eh_90', ['BinaryMeasurement.h', ['../a01193.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', ['../a01319.html', 1, '']]],\n+ ['boundingconstraint_2eh_106', ['BoundingConstraint.h', ['../a01340.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', ['../a00371.html', 1, '']]],\n- ['cal3_2eh_7', ['Cal3.h', ['../a00353.html', 1, '']]],\n+ ['cal3_2ecpp_6', ['Cal3.cpp', ['../a00275.html', 1, '']]],\n+ ['cal3_2eh_7', ['Cal3.h', ['../a00407.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', ['../a00410.html', 1, '']]],\n- ['cal3_5fs2_2eh_10', ['Cal3_S2.h', ['../a00284.html', 1, '']]],\n+ ['cal3_5fs2_2ecpp_9', ['Cal3_S2.cpp', ['../a00383.html', 1, '']]],\n+ ['cal3_5fs2_2eh_10', ['Cal3_S2.h', ['../a00416.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', ['../a00278.html', 1, '']]],\n- ['cal3_5fs2stereo_2eh_13', ['Cal3_S2Stereo.h', ['../a00302.html', 1, '']]],\n+ ['cal3_5fs2stereo_2ecpp_12', ['Cal3_S2Stereo.cpp', ['../a00377.html', 1, '']]],\n+ ['cal3_5fs2stereo_2eh_13', ['Cal3_S2Stereo.h', ['../a00296.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', ['../a00323.html', 1, '']]],\n- ['cal3bundler_2eh_16', ['Cal3Bundler.h', ['../a00314.html', 1, '']]],\n+ ['cal3bundler_2ecpp_15', ['Cal3Bundler.cpp', ['../a00338.html', 1, '']]],\n+ ['cal3bundler_2eh_16', ['Cal3Bundler.h', ['../a00317.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', ['../a00320.html', 1, '']]],\n- ['cal3ds2_2eh_19', ['Cal3DS2.h', ['../a00404.html', 1, '']]],\n+ ['cal3ds2_2ecpp_18', ['Cal3DS2.cpp', ['../a00380.html', 1, '']]],\n+ ['cal3ds2_2eh_19', ['Cal3DS2.h', ['../a00284.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', ['../a00413.html', 1, '']]],\n+ ['cal3ds2_5fbase_2ecpp_21', ['Cal3DS2_Base.cpp', ['../a00422.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', ['../a00374.html', 1, '']]],\n- ['cal3fisheye_2eh_24', ['Cal3Fisheye.h', ['../a00359.html', 1, '']]],\n+ ['cal3fisheye_2ecpp_23', ['Cal3Fisheye.cpp', ['../a00446.html', 1, '']]],\n+ ['cal3fisheye_2eh_24', ['Cal3Fisheye.h', ['../a00326.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', ['../a00392.html', 1, '']]],\n- ['cal3unified_2eh_27', ['Cal3Unified.h', ['../a00305.html', 1, '']]],\n+ ['cal3unified_2ecpp_26', ['Cal3Unified.cpp', ['../a00461.html', 1, '']]],\n+ ['cal3unified_2eh_27', ['Cal3Unified.h', ['../a00467.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', ['../a00416.html', 1, '']]],\n- ['calibratedcamera_2eh_36', ['CalibratedCamera.h', ['../a00446.html', 1, '']]],\n+ ['calibratedcamera_2ecpp_35', ['CalibratedCamera.cpp', ['../a00314.html', 1, '']]],\n+ ['calibratedcamera_2eh_36', ['CalibratedCamera.h', ['../a00290.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', ['../a00296.html', 1, '']]],\n+ ['cameraset_2eh_52', ['CameraSet.h', ['../a00293.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,20 +141,20 @@\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', ['../a00170.html', 1, '']]],\n- ['chebyshev_2eh_64', ['Chebyshev.h', ['../a00152.html', 1, '']]],\n+ ['chebyshev_2ecpp_63', ['Chebyshev.cpp', ['../a00176.html', 1, '']]],\n+ ['chebyshev_2eh_64', ['Chebyshev.h', ['../a00161.html', 1, '']]],\n ['chebyshev1basis_65', ['Chebyshev1Basis', ['../a02732.html', 1, 'gtsam']]],\n ['chebyshev2_66', ['Chebyshev2', ['../a02740.html', 1, 'gtsam']]],\n ['chebyshev2_2ecpp_67', ['Chebyshev2.cpp', ['../a00164.html', 1, '']]],\n- ['chebyshev2_2eh_68', ['Chebyshev2.h', ['../a00161.html', 1, '']]],\n+ ['chebyshev2_2eh_68', ['Chebyshev2.h', ['../a00170.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 ['checkmuconvergence_73', ['checkMuConvergence', ['../a04360.html#a302084640dd5a35e9895911aa9b841e2', 1, 'gtsam::GncOptimizer']]],\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', ['../a00023.html', 1, '']]],\n- ['cholesky_2eh_84', ['cholesky.h', ['../a00008.html', 1, '']]],\n+ ['cholesky_2ecpp_83', ['cholesky.cpp', ['../a00125.html', 1, '']]],\n+ ['cholesky_2eh_84', ['cholesky.h', ['../a00140.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', ['../a00695.html', 1, '']]],\n- ['clustertree_2eh_106', ['ClusterTree.h', ['../a00635.html', 1, '']]],\n+ ['clustertree_2dinst_2eh_105', ['ClusterTree-inst.h', ['../a00701.html', 1, '']]],\n+ ['clustertree_2eh_106', ['ClusterTree.h', ['../a00572.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', ['../a00923.html', 1, '']]],\n- ['combinedimufactor_2eh_123', ['CombinedImuFactor.h', ['../a00938.html', 1, '']]],\n+ ['combinedimufactor_2ecpp_122', ['CombinedImuFactor.cpp', ['../a00950.html', 1, '']]],\n+ ['combinedimufactor_2eh_123', ['CombinedImuFactor.h', ['../a00947.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', ['../a00365.html#a72fc8b10f24d82aa8a4c99f99403fe5e', 1, 'gtsam::so3']]],\n+ ['compose_128', ['compose', ['../a00419.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', ['../a00587.html', 1, '']]],\n+ ['conditional_2eh_161', ['Conditional.h', ['../a00665.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', ['../a00815.html', 1, '']]],\n+ ['conjugategradientsolver_2eh_173', ['ConjugateGradientSolver.h', ['../a00704.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', ['../a00926.html', 1, '']]],\n+ ['constantvelocityfactor_2eh_186', ['ConstantVelocityFactor.h', ['../a00998.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', ['../a01151.html', 1, '']]],\n- ['customfactor_2eh_230', ['CustomFactor.h', ['../a01031.html', 1, '']]],\n+ ['customfactor_2ecpp_229', ['CustomFactor.cpp', ['../a01142.html', 1, '']]],\n+ ['customfactor_2eh_230', ['CustomFactor.h', ['../a01127.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', ['../a00443.html', 1, '']]],\n- ['cyclic_2eh_233', ['Cyclic.h', ['../a00317.html', 1, '']]]\n+ ['cyclic_2ecpp_232', ['Cyclic.cpp', ['../a00335.html', 1, '']]],\n+ ['cyclic_2eh_233', ['Cyclic.h', ['../a00278.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', ['../a01247.html', 1, '']]],\n- ['dataset_2eh_6', ['dataset.h', ['../a01301.html', 1, '']]],\n- ['dcompose_7', ['Dcompose', ['../a00365.html#a7c7e26b6d07ec0f16363c196247b294d', 1, 'gtsam::so3']]],\n+ ['dataset_2ecpp_5', ['dataset.cpp', ['../a01289.html', 1, '']]],\n+ ['dataset_2eh_6', ['dataset.h', ['../a01247.html', 1, '']]],\n+ ['dcompose_7', ['Dcompose', ['../a00419.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', ['../a00005.html', 1, '']]],\n- ['debug_2eh_11', ['debug.h', ['../a00131.html', 1, '']]],\n+ ['debug_2ecpp_10', ['debug.cpp', ['../a00017.html', 1, '']]],\n+ ['debug_2eh_11', ['debug.h', ['../a00038.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', ['../a00221.html', 1, '']]],\n+ ['decisiontree_2eh_14', ['DecisionTree.h', ['../a00272.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', ['../a00197.html', 1, '']]],\n- ['decisiontreefactor_2eh_21', ['DecisionTreeFactor.h', ['../a00251.html', 1, '']]],\n+ ['decisiontreefactor_2ecpp_20', ['DecisionTreeFactor.cpp', ['../a00257.html', 1, '']]],\n+ ['decisiontreefactor_2eh_21', ['DecisionTreeFactor.h', ['../a00212.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', ['../a00311.html#afdaebcf25a03a9a9986d35d2831605dd', 1, 'gtsam::internal']]],\n+ ['dimensionso_83', ['DimensionSO', ['../a00464.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', ['../a00191.html', 1, '']]],\n- ['discretebayesnet_2eh_92', ['DiscreteBayesNet.h', ['../a00233.html', 1, '']]],\n+ ['discretebayesnet_2ecpp_91', ['DiscreteBayesNet.cpp', ['../a00263.html', 1, '']]],\n+ ['discretebayesnet_2eh_92', ['DiscreteBayesNet.h', ['../a00182.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', ['../a00245.html', 1, '']]],\n- ['discretebayestree_2eh_95', ['DiscreteBayesTree.h', ['../a00212.html', 1, '']]],\n+ ['discretebayestree_2ecpp_94', ['DiscreteBayesTree.cpp', ['../a00269.html', 1, '']]],\n+ ['discretebayestree_2eh_95', ['DiscreteBayesTree.h', ['../a00230.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', ['../a00242.html', 1, '']]],\n- ['discreteconditional_2eh_100', ['DiscreteConditional.h', ['../a00215.html', 1, '']]],\n+ ['discreteconditional_2ecpp_99', ['DiscreteConditional.cpp', ['../a00239.html', 1, '']]],\n+ ['discreteconditional_2eh_100', ['DiscreteConditional.h', ['../a00236.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', ['../a00179.html', 1, '']]],\n- ['discretedistribution_2eh_104', ['DiscreteDistribution.h', ['../a00185.html', 1, '']]],\n+ ['discretedistribution_2ecpp_103', ['DiscreteDistribution.cpp', ['../a00203.html', 1, '']]],\n+ ['discretedistribution_2eh_104', ['DiscreteDistribution.h', ['../a00194.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', ['../a00218.html', 1, '']]],\n- ['discreteeliminationtree_2eh_107', ['DiscreteEliminationTree.h', ['../a00260.html', 1, '']]],\n+ ['discreteeliminationtree_2ecpp_106', ['DiscreteEliminationTree.cpp', ['../a00227.html', 1, '']]],\n+ ['discreteeliminationtree_2eh_107', ['DiscreteEliminationTree.h', ['../a00245.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', ['../a00209.html', 1, '']]],\n- ['discretefactor_2eh_110', ['DiscreteFactor.h', ['../a00263.html', 1, '']]],\n+ ['discretefactor_2ecpp_109', ['DiscreteFactor.cpp', ['../a00188.html', 1, '']]],\n+ ['discretefactor_2eh_110', ['DiscreteFactor.h', ['../a00251.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', ['../a00182.html', 1, '']]],\n- ['discretefactorgraph_2eh_113', ['DiscreteFactorGraph.h', ['../a00230.html', 1, '']]],\n+ ['discretefactorgraph_2ecpp_112', ['DiscreteFactorGraph.cpp', ['../a00191.html', 1, '']]],\n+ ['discretefactorgraph_2eh_113', ['DiscreteFactorGraph.h', ['../a00200.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', ['../a00224.html', 1, '']]],\n- ['discretejunctiontree_2eh_116', ['DiscreteJunctionTree.h', ['../a00203.html', 1, '']]],\n+ ['discretejunctiontree_2ecpp_115', ['DiscreteJunctionTree.cpp', ['../a00197.html', 1, '']]],\n+ ['discretejunctiontree_2eh_116', ['DiscreteJunctionTree.h', ['../a00254.html', 1, '']]],\n ['discretekey_117', ['DiscreteKey', ['../a01415.html#gad529b58f00471d8f8b25a89b48b7afc2', 1, 'gtsam']]],\n- ['discretekey_2eh_118', ['DiscreteKey.h', ['../a00239.html', 1, '']]],\n+ ['discretekey_2eh_118', ['DiscreteKey.h', ['../a00185.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', ['../a00188.html', 1, '']]],\n- ['discretelookupdag_2eh_125', ['DiscreteLookupDAG.h', ['../a00248.html', 1, '']]],\n+ ['discretelookupdag_2ecpp_124', ['DiscreteLookupDAG.cpp', ['../a00248.html', 1, '']]],\n+ ['discretelookupdag_2eh_125', ['DiscreteLookupDAG.h', ['../a00266.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', ['../a00269.html', 1, '']]],\n+ ['discretemarginals_2eh_128', ['DiscreteMarginals.h', ['../a00218.html', 1, '']]],\n ['discretevalues_129', ['discretevalues', ['../a05040.html', 1, 'DiscreteValues'],\n ['../a02900.html', 1, 'gtsam::DiscreteValues']\n ]],\n- ['discretevalues_2ecpp_130', ['DiscreteValues.cpp', ['../a00206.html', 1, '']]],\n- ['discretevalues_2eh_131', ['DiscreteValues.h', ['../a00194.html', 1, '']]],\n+ ['discretevalues_2ecpp_130', ['DiscreteValues.cpp', ['../a00233.html', 1, '']]],\n+ ['discretevalues_2eh_131', ['DiscreteValues.h', ['../a00215.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', ['../a01034.html', 1, '']]],\n- ['doglegoptimizer_2eh_139', ['DoglegOptimizer.h', ['../a01076.html', 1, '']]],\n+ ['doglegoptimizer_2ecpp_138', ['DoglegOptimizer.cpp', ['../a01121.html', 1, '']]],\n+ ['doglegoptimizer_2eh_139', ['DoglegOptimizer.h', ['../a01040.html', 1, '']]],\n ['doglegoptimizerimpl_140', ['DoglegOptimizerImpl', ['../a04264.html', 1, 'gtsam']]],\n- ['doglegoptimizerimpl_2eh_141', ['DoglegOptimizerImpl.h', ['../a01124.html', 1, '']]],\n+ ['doglegoptimizerimpl_2eh_141', ['DoglegOptimizerImpl.h', ['../a01022.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', ['../a00692.html', 1, '']]],\n+ ['dotwriter_2ecpp_145', ['DotWriter.cpp', ['../a00644.html', 1, '']]],\n ['dotwriter_2eh_146', ['DotWriter.h', ['../a00596.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', ['../a00029.html', 1, '']]],\n- ['dsftrackgenerator_2ecpp_154', ['DsfTrackGenerator.cpp', ['../a01208.html', 1, '']]],\n- ['dsftrackgenerator_2eh_155', ['DsfTrackGenerator.h', ['../a01220.html', 1, '']]],\n+ ['dsfmap_2eh_153', ['DSFMap.h', ['../a00050.html', 1, '']]],\n+ ['dsftrackgenerator_2ecpp_154', ['DsfTrackGenerator.cpp', ['../a01190.html', 1, '']]],\n+ ['dsftrackgenerator_2eh_155', ['DsfTrackGenerator.h', ['../a01199.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', ['../a00122.html', 1, '']]],\n- ['dsfvector_2eh_158', ['DSFVector.h', ['../a00089.html', 1, '']]],\n+ ['dsfvector_2ecpp_157', ['DSFVector.cpp', ['../a00032.html', 1, '']]],\n+ ['dsfvector_2eh_158', ['DSFVector.h', ['../a00011.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', ['../a00602.html', 1, '']]],\n+ ['eliminateablefactorgraph_2eh_14', ['EliminateableFactorGraph.h', ['../a00647.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- ['../a01343.html#ae394348e1a503834f713405afa9afad8', 1, 'gtsam::internal::EliminateSymbolic()']\n+ ['../a01382.html#ae394348e1a503834f713405afa9afad8', 1, 'gtsam::internal::EliminateSymbolic()']\n ]],\n- ['eliminatetree_30', ['EliminateTree', ['../a00626.html#ae955942fde34b4cf32ac3573a1aa1e29', 1, 'gtsam::inference']]],\n+ ['eliminatetree_30', ['EliminateTree', ['../a00593.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', ['../a00659.html', 1, '']]],\n- ['eliminationtree_2eh_44', ['EliminationTree.h', ['../a00653.html', 1, '']]],\n+ ['eliminationtree_2dinst_2eh_43', ['EliminationTree-inst.h', ['../a00605.html', 1, '']]],\n+ ['eliminationtree_2eh_44', ['EliminationTree.h', ['../a00608.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', ['../a00791.html', 1, '']]],\n- ['errors_2eh_82', ['Errors.h', ['../a00857.html', 1, '']]],\n+ ['errors_2ecpp_81', ['Errors.cpp', ['../a00761.html', 1, '']]],\n+ ['errors_2eh_82', ['Errors.h', ['../a00728.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', ['../a01259.html', 1, '']]],\n- ['essentialmatrixconstraint_2eh_88', ['EssentialMatrixConstraint.h', ['../a01337.html', 1, '']]],\n+ ['essentialmatrixconstraint_2ecpp_87', ['EssentialMatrixConstraint.cpp', ['../a01265.html', 1, '']]],\n+ ['essentialmatrixconstraint_2eh_88', ['EssentialMatrixConstraint.h', ['../a01256.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', ['../a01154.html#a701d0cd12b81a725f7f9cd2432fe9e2a', 1, 'expressionTesting.h']]],\n- ['expect_5fcorrect_5ffactor_5fjacobians_109', ['EXPECT_CORRECT_FACTOR_JACOBIANS', ['../a01010.html#a8ec37fe83eda47404b8588e1f012df21', 1, 'factorTesting.h']]],\n+ ['expect_5fcorrect_5fexpression_5fjacobians_108', ['EXPECT_CORRECT_EXPRESSION_JACOBIANS', ['../a01169.html#a701d0cd12b81a725f7f9cd2432fe9e2a', 1, 'expressionTesting.h']]],\n+ ['expect_5fcorrect_5ffactor_5fjacobians_109', ['EXPECT_CORRECT_FACTOR_JACOBIANS', ['../a01070.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', ['../a01106.html', 1, '']]],\n- ['expression_2eh_119', ['Expression.h', ['../a01055.html', 1, '']]],\n+ ['expression_2dinl_2eh_118', ['Expression-inl.h', ['../a01118.html', 1, '']]],\n+ ['expression_2eh_119', ['Expression.h', ['../a01064.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', ['../a01148.html', 1, '']]],\n+ ['expressionfactorgraph_2eh_131', ['ExpressionFactorGraph.h', ['../a01001.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', ['../a01154.html', 1, '']]],\n+ ['expressiontesting_2eh_139', ['expressionTesting.h', ['../a01169.html', 1, '']]],\n ['extendedkalmanfilter_140', ['ExtendedKalmanFilter', ['../a04332.html', 1, 'gtsam']]],\n- ['extendedkalmanfilter_2dinl_2eh_141', ['ExtendedKalmanFilter-inl.h', ['../a01163.html', 1, '']]],\n- ['extendedkalmanfilter_2eh_142', ['ExtendedKalmanFilter.h', ['../a01013.html', 1, '']]],\n+ ['extendedkalmanfilter_2dinl_2eh_141', ['ExtendedKalmanFilter-inl.h', ['../a01124.html', 1, '']]],\n+ ['extendedkalmanfilter_2eh_142', ['ExtendedKalmanFilter.h', ['../a01058.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": "@@ -10,24 +10,24 @@\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', ['../a00638.html', 1, '']]],\n- ['factor_2eh_5', ['Factor.h', ['../a00641.html', 1, '']]],\n+ ['factor_2eh_5', ['Factor.h', ['../a00659.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', ['../a00593.html', 1, '']]],\n- ['factorgraph_2eh_9', ['FactorGraph.h', ['../a00611.html', 1, '']]],\n+ ['factorgraph_2dinst_2eh_8', ['FactorGraph-inst.h', ['../a00635.html', 1, '']]],\n+ ['factorgraph_2eh_9', ['FactorGraph.h', ['../a00641.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', ['../a01010.html', 1, '']]],\n+ ['factortesting_2eh_31', ['factorTesting.h', ['../a01070.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', ['../a00056.html', 1, '']]],\n+ ['fastdefaultallocator_2eh_35', ['FastDefaultAllocator.h', ['../a00092.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', ['../a00110.html', 1, '']]],\n+ ['fastlist_2eh_38', ['FastList.h', ['../a00113.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', ['../a00071.html', 1, '']]],\n+ ['fastmap_2eh_41', ['FastMap.h', ['../a00047.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', ['../a00113.html', 1, '']]],\n+ ['fastset_2eh_49', ['FastSet.h', ['../a00068.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', ['../a00101.html', 1, '']]],\n+ ['fastvector_2eh_52', ['FastVector.h', ['../a00071.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', ['../a00176.html', 1, '']]],\n+ ['fitbasis_2eh_71', ['FitBasis.h', ['../a00173.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', ['../a00158.html', 1, '']]],\n+ ['fourier_2eh_78', ['Fourier.h', ['../a00167.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', ['../a01235.html', 1, '']]],\n- ['frobeniusfactor_2eh_84', ['FrobeniusFactor.h', ['../a01295.html', 1, '']]],\n+ ['frobeniusfactor_2ecpp_83', ['FrobeniusFactor.cpp', ['../a01328.html', 1, '']]],\n+ ['frobeniusfactor_2eh_84', ['FrobeniusFactor.h', ['../a01337.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', ['../a01157.html', 1, '']]],\n+ ['functorizedfactor_2eh_110', ['FunctorizedFactor.h', ['../a01004.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', ['../a00746.html', 1, '']]],\n- ['gaussianbayesnet_2eh_6', ['GaussianBayesNet.h', ['../a00848.html', 1, '']]],\n+ ['gaussianbayesnet_2ecpp_5', ['GaussianBayesNet.cpp', ['../a00890.html', 1, '']]],\n+ ['gaussianbayesnet_2eh_6', ['GaussianBayesNet.h', ['../a00809.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', ['../a00704.html', 1, '']]],\n- ['gaussianbayestree_2ecpp_9', ['GaussianBayesTree.cpp', ['../a00734.html', 1, '']]],\n- ['gaussianbayestree_2eh_10', ['GaussianBayesTree.h', ['../a00773.html', 1, '']]],\n+ ['gaussianbayestree_2dinl_2eh_8', ['GaussianBayesTree-inl.h', ['../a00827.html', 1, '']]],\n+ ['gaussianbayestree_2ecpp_9', ['GaussianBayesTree.cpp', ['../a00830.html', 1, '']]],\n+ ['gaussianbayestree_2eh_10', ['GaussianBayesTree.h', ['../a00782.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', ['../a00737.html', 1, '']]],\n- ['gaussianconditional_2ecpp_14', ['GaussianConditional.cpp', ['../a00716.html', 1, '']]],\n- ['gaussianconditional_2eh_15', ['GaussianConditional.h', ['../a00833.html', 1, '']]],\n+ ['gaussianconditional_2dinl_2eh_13', ['GaussianConditional-inl.h', ['../a00716.html', 1, '']]],\n+ ['gaussianconditional_2ecpp_14', ['GaussianConditional.cpp', ['../a00824.html', 1, '']]],\n+ ['gaussianconditional_2eh_15', ['GaussianConditional.h', ['../a00866.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', ['../a00806.html', 1, '']]],\n- ['gaussiandensity_2eh_18', ['GaussianDensity.h', ['../a00785.html', 1, '']]],\n+ ['gaussiandensity_2ecpp_17', ['GaussianDensity.cpp', ['../a00893.html', 1, '']]],\n+ ['gaussiandensity_2eh_18', ['GaussianDensity.h', ['../a00752.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', ['../a00887.html', 1, '']]],\n- ['gaussianeliminationtree_2eh_21', ['GaussianEliminationTree.h', ['../a00713.html', 1, '']]],\n+ ['gaussianeliminationtree_2ecpp_20', ['GaussianEliminationTree.cpp', ['../a00767.html', 1, '']]],\n+ ['gaussianeliminationtree_2eh_21', ['GaussianEliminationTree.h', ['../a00740.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', ['../a00839.html', 1, '']]],\n- ['gaussianfactor_2eh_25', ['GaussianFactor.h', ['../a00788.html', 1, '']]],\n+ ['gaussianfactor_2ecpp_24', ['GaussianFactor.cpp', ['../a00731.html', 1, '']]],\n+ ['gaussianfactor_2eh_25', ['GaussianFactor.h', ['../a00803.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', ['../a00836.html', 1, '']]],\n- ['gaussianfactorgraph_2eh_28', ['GaussianFactorGraph.h', ['../a00899.html', 1, '']]],\n+ ['gaussianfactorgraph_2ecpp_27', ['GaussianFactorGraph.cpp', ['../a00875.html', 1, '']]],\n+ ['gaussianfactorgraph_2eh_28', ['GaussianFactorGraph.h', ['../a00725.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', ['../a00866.html', 1, '']]],\n+ ['gaussianisam_2eh_32', ['GaussianISAM.h', ['../a00845.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', ['../a00827.html', 1, '']]],\n- ['gaussianjunctiontree_2eh_35', ['GaussianJunctionTree.h', ['../a00878.html', 1, '']]],\n+ ['gaussianjunctiontree_2ecpp_34', ['GaussianJunctionTree.cpp', ['../a00851.html', 1, '']]],\n+ ['gaussianjunctiontree_2eh_35', ['GaussianJunctionTree.h', ['../a00815.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', ['../a00551.html', 1, '']]],\n- ['gaussianmixture_2eh_38', ['GaussianMixture.h', ['../a00482.html', 1, '']]],\n+ ['gaussianmixture_2ecpp_37', ['GaussianMixture.cpp', ['../a00494.html', 1, '']]],\n+ ['gaussianmixture_2eh_38', ['GaussianMixture.h', ['../a00554.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', ['../a00533.html', 1, '']]],\n- ['gaussianmixturefactor_2eh_41', ['GaussianMixtureFactor.h', ['../a00563.html', 1, '']]],\n+ ['gaussianmixturefactor_2ecpp_40', ['GaussianMixtureFactor.cpp', ['../a00518.html', 1, '']]],\n+ ['gaussianmixturefactor_2eh_41', ['GaussianMixtureFactor.h', ['../a00560.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', ['../a01133.html', 1, '']]],\n- ['gaussnewtonoptimizer_2eh_44', ['GaussNewtonOptimizer.h', ['../a01067.html', 1, '']]],\n+ ['gaussnewtonoptimizer_2ecpp_43', ['GaussNewtonOptimizer.cpp', ['../a01130.html', 1, '']]],\n+ ['gaussnewtonoptimizer_2eh_44', ['GaussNewtonOptimizer.h', ['../a01025.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', ['../a01280.html', 1, '']]],\n+ ['generalsfmfactor_2eh_48', ['GeneralSFMFactor.h', ['../a01250.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,29 +194,29 @@\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', ['../a01400.html', 1, '']]],\n+ ['global_5fincludes_2eh_104', ['global_includes.h', ['../a01394.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', ['../a01166.html', 1, '']]],\n+ ['gncoptimizer_2eh_107', ['GncOptimizer.h', ['../a01049.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', ['../a00971.html', 1, '']]],\n+ ['gpsfactor_2ecpp_110', ['GPSFactor.cpp', ['../a00977.html', 1, '']]],\n ['gpsfactor_2eh_111', ['GPSFactor.h', ['../a00995.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@@ -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', ['../a00572.html', 1, '']]],\n+ ['graph_2eh_117', ['graph.h', ['../a00575.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', ['../a01073.html', 1, '']]],\n- ['graphvizformatting_2eh_123', ['GraphvizFormatting.h', ['../a01064.html', 1, '']]],\n+ ['graphvizformatting_2ecpp_122', ['GraphvizFormatting.cpp', ['../a01028.html', 1, '']]],\n+ ['graphvizformatting_2eh_123', ['GraphvizFormatting.h', ['../a01052.html', 1, '']]],\n ['greaterthanorequal_124', ['greaterThanOrEqual', ['../a01428.html#a368ee40bd9c0124d572d2e49bcb077bf', 1, 'gtsam']]],\n- ['group_2eh_125', ['Group.h', ['../a00098.html', 1, '']]],\n+ ['group_2eh_125', ['Group.h', ['../a00077.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', ['../a00098.html#aac1ea136475ea605715c809f4b3f0156', 1, 'Group.h']]],\n- ['gtsam_5fconcept_5flie_5finst_134', ['GTSAM_CONCEPT_LIE_INST', ['../a00011.html#aeef5af7d583d275fbc0e6e5af8bf2afc', 1, 'Lie.h']]],\n- ['gtsam_5fconcept_5fmanifold_5finst_135', ['GTSAM_CONCEPT_MANIFOLD_INST', ['../a00104.html#a64b5e2e3c812d2cdea5ee294100f825f', 1, 'Manifold.h']]],\n+ ['gtsam_5fconcept_5fgroup_5finst_133', ['GTSAM_CONCEPT_GROUP_INST', ['../a00077.html#aac1ea136475ea605715c809f4b3f0156', 1, 'Group.h']]],\n+ ['gtsam_5fconcept_5flie_5finst_134', ['GTSAM_CONCEPT_LIE_INST', ['../a00062.html#aeef5af7d583d275fbc0e6e5af8bf2afc', 1, 'Lie.h']]],\n+ ['gtsam_5fconcept_5fmanifold_5finst_135', ['GTSAM_CONCEPT_MANIFOLD_INST', ['../a00107.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', ['../a00083.html#abe0a238cdd07d484ff0be56ae945b182', 1, 'Testable.h']]],\n- ['gtsam_5fmake_5faligned_5foperator_5fnew_138', ['GTSAM_MAKE_ALIGNED_OPERATOR_NEW', ['../a00119.html#aa123dd61687e08ae328154a1890b7b86', 1, 'types.h']]],\n- ['gtsam_5fmake_5faligned_5foperator_5fnew_5fif_139', ['GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF', ['../a00119.html#a352ab46cee3a766e30b049690802fb0a', 1, 'types.h']]],\n+ ['gtsam_5fconcept_5ftestable_5finst_137', ['GTSAM_CONCEPT_TESTABLE_INST', ['../a00065.html#abe0a238cdd07d484ff0be56ae945b182', 1, 'Testable.h']]],\n+ ['gtsam_5fmake_5faligned_5foperator_5fnew_138', ['GTSAM_MAKE_ALIGNED_OPERATOR_NEW', ['../a00098.html#aa123dd61687e08ae328154a1890b7b86', 1, 'types.h']]],\n+ ['gtsam_5fmake_5faligned_5foperator_5fnew_5fif_139', ['GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF', ['../a00098.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', ['../a00872.html', 1, '']]],\n- ['hessianfactor_2ecpp_28', ['HessianFactor.cpp', ['../a00707.html', 1, '']]],\n- ['hessianfactor_2eh_29', ['HessianFactor.h', ['../a00752.html', 1, '']]],\n+ ['hessianfactor_2dinl_2eh_27', ['HessianFactor-inl.h', ['../a00899.html', 1, '']]],\n+ ['hessianfactor_2ecpp_28', ['HessianFactor.cpp', ['../a00848.html', 1, '']]],\n+ ['hessianfactor_2eh_29', ['HessianFactor.h', ['../a00887.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', ['../a00491.html', 1, '']]],\n- ['hybridbayesnet_2eh_42', ['HybridBayesNet.h', ['../a00524.html', 1, '']]],\n+ ['hybridbayesnet_2ecpp_41', ['HybridBayesNet.cpp', ['../a00485.html', 1, '']]],\n+ ['hybridbayesnet_2eh_42', ['HybridBayesNet.h', ['../a00539.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', ['../a00512.html', 1, '']]],\n- ['hybridbayestree_2eh_45', ['HybridBayesTree.h', ['../a00494.html', 1, '']]],\n+ ['hybridbayestree_2ecpp_44', ['HybridBayesTree.cpp', ['../a00527.html', 1, '']]],\n+ ['hybridbayestree_2eh_45', ['HybridBayesTree.h', ['../a00524.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', ['../a00509.html', 1, '']]],\n- ['hybridconditional_2eh_49', ['HybridConditional.h', ['../a00560.html', 1, '']]],\n+ ['hybridconditional_2ecpp_48', ['HybridConditional.cpp', ['../a00482.html', 1, '']]],\n+ ['hybridconditional_2eh_49', ['HybridConditional.h', ['../a00536.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', ['../a00542.html', 1, '']]],\n+ ['hybrideliminationtree_2ecpp_51', ['HybridEliminationTree.cpp', ['../a00488.html', 1, '']]],\n+ ['hybrideliminationtree_2eh_52', ['HybridEliminationTree.h', ['../a00521.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', ['../a00566.html', 1, '']]],\n- ['hybridfactor_2eh_55', ['HybridFactor.h', ['../a00557.html', 1, '']]],\n+ ['hybridfactor_2ecpp_54', ['HybridFactor.cpp', ['../a00563.html', 1, '']]],\n+ ['hybridfactor_2eh_55', ['HybridFactor.h', ['../a00551.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', ['../a00521.html', 1, '']]],\n- ['hybridfactorgraph_2eh_58', ['HybridFactorGraph.h', ['../a00518.html', 1, '']]],\n+ ['hybridfactorgraph_2ecpp_57', ['HybridFactorGraph.cpp', ['../a00569.html', 1, '']]],\n+ ['hybridfactorgraph_2eh_58', ['HybridFactorGraph.h', ['../a00497.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', ['../a00485.html', 1, '']]],\n- ['hybridgaussianfactorgraph_2eh_61', ['HybridGaussianFactorGraph.h', ['../a00548.html', 1, '']]],\n+ ['hybridgaussianfactorgraph_2ecpp_60', ['HybridGaussianFactorGraph.cpp', ['../a00542.html', 1, '']]],\n+ ['hybridgaussianfactorgraph_2eh_61', ['HybridGaussianFactorGraph.h', ['../a00503.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', ['../a00536.html', 1, '']]],\n+ ['hybridgaussianisam_2eh_63', ['HybridGaussianISAM.h', ['../a00491.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', ['../a00500.html', 1, '']]],\n- ['hybridjunctiontree_2eh_66', ['HybridJunctionTree.h', ['../a00488.html', 1, '']]],\n+ ['hybridjunctiontree_2ecpp_65', ['HybridJunctionTree.cpp', ['../a00509.html', 1, '']]],\n+ ['hybridjunctiontree_2eh_66', ['HybridJunctionTree.h', ['../a00506.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', ['../a00569.html', 1, '']]],\n- ['hybridnonlinearfactorgraph_2eh_69', ['HybridNonlinearFactorGraph.h', ['../a00554.html', 1, '']]],\n+ ['hybridnonlinearfactorgraph_2ecpp_68', ['HybridNonlinearFactorGraph.cpp', ['../a00557.html', 1, '']]],\n+ ['hybridnonlinearfactorgraph_2eh_69', ['HybridNonlinearFactorGraph.h', ['../a00500.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', ['../a00506.html', 1, '']]],\n- ['hybridnonlinearisam_2eh_72', ['HybridNonlinearISAM.h', ['../a00503.html', 1, '']]],\n+ ['hybridnonlinearisam_2ecpp_71', ['HybridNonlinearISAM.cpp', ['../a00533.html', 1, '']]],\n+ ['hybridnonlinearisam_2eh_72', ['HybridNonlinearISAM.h', ['../a00530.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', ['../a00530.html', 1, '']]],\n- ['hybridsmoother_2eh_76', ['HybridSmoother.h', ['../a00539.html', 1, '']]],\n+ ['hybridsmoother_2ecpp_75', ['HybridSmoother.cpp', ['../a00548.html', 1, '']]],\n+ ['hybridsmoother_2eh_76', ['HybridSmoother.h', ['../a00512.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', ['../a00497.html', 1, '']]]\n+ ['hybridvalues_2eh_78', ['HybridValues.h', ['../a00515.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', ['../a00956.html', 1, '']]],\n- ['imubias_2eh_2', ['ImuBias.h', ['../a00944.html', 1, '']]],\n+ ['imubias_2ecpp_1', ['ImuBias.cpp', ['../a00929.html', 1, '']]],\n+ ['imubias_2eh_2', ['ImuBias.h', ['../a00953.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', ['../a00911.html', 1, '']]],\n- ['imufactor_2eh_5', ['ImuFactor.h', ['../a00986.html', 1, '']]],\n+ ['imufactor_2ecpp_4', ['ImuFactor.cpp', ['../a00962.html', 1, '']]],\n+ ['imufactor_2eh_5', ['ImuFactor.h', ['../a00926.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', ['../a00626.html', 1, '']]],\n- ['inferenceexceptions_2eh_17', ['inferenceExceptions.h', ['../a00674.html', 1, '']]],\n+ ['inference_2dinst_2eh_16', ['inference-inst.h', ['../a00593.html', 1, '']]],\n+ ['inferenceexceptions_2eh_17', ['inferenceExceptions.h', ['../a00653.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', ['../a01328.html', 1, '']]],\n+ ['initializepose_2eh_29', ['InitializePose.h', ['../a01283.html', 1, '']]],\n ['initializepose3_30', ['InitializePose3', ['../a04856.html', 1, 'gtsam']]],\n- ['initializepose3_2ecpp_31', ['InitializePose3.cpp', ['../a01331.html', 1, '']]],\n- ['initializepose3_2eh_32', ['InitializePose3.h', ['../a01292.html', 1, '']]],\n+ ['initializepose3_2ecpp_31', ['InitializePose3.cpp', ['../a01304.html', 1, '']]],\n+ ['initializepose3_2eh_32', ['InitializePose3.h', ['../a01274.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- ['../a00074.html#aaa623dd059a67523b029af6ec20a38da', 1, 'gtsam::testing::inverse()'],\n+ ['../a00104.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', ['../a00647.html', 1, '']]],\n- ['isam_2eh_70', ['ISAM.h', ['../a00662.html', 1, '']]],\n+ ['isam_2dinst_2eh_69', ['ISAM-inst.h', ['../a00578.html', 1, '']]],\n+ ['isam_2eh_70', ['ISAM.h', ['../a00698.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', ['../a01043.html', 1, '']]],\n- ['isam2_2dimpl_2eh_73', ['ISAM2-impl.h', ['../a01139.html', 1, '']]],\n- ['isam2_2ecpp_74', ['ISAM2.cpp', ['../a01082.html', 1, '']]],\n- ['isam2_2eh_75', ['ISAM2.h', ['../a01142.html', 1, '']]],\n+ ['isam2_2dimpl_2eh_73', ['ISAM2-impl.h', ['../a01115.html', 1, '']]],\n+ ['isam2_2ecpp_74', ['ISAM2.cpp', ['../a01088.html', 1, '']]],\n+ ['isam2_2eh_75', ['ISAM2.h', ['../a01163.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', ['../a01103.html', 1, '']]],\n- ['isam2clique_2eh_79', ['ISAM2Clique.h', ['../a01040.html', 1, '']]],\n+ ['isam2clique_2ecpp_78', ['ISAM2Clique.cpp', ['../a01172.html', 1, '']]],\n+ ['isam2clique_2eh_79', ['ISAM2Clique.h', ['../a01151.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', ['../a01052.html', 1, '']]],\n- ['isam2params_2eh_85', ['ISAM2Params.h', ['../a01025.html', 1, '']]],\n+ ['isam2params_2ecpp_84', ['ISAM2Params.cpp', ['../a01016.html', 1, '']]],\n+ ['isam2params_2eh_85', ['ISAM2Params.h', ['../a01019.html', 1, '']]],\n ['isam2result_86', ['ISAM2Result', ['../a04420.html', 1, 'gtsam']]],\n- ['isam2result_2eh_87', ['ISAM2Result.h', ['../a01115.html', 1, '']]],\n+ ['isam2result_2eh_87', ['ISAM2Result.h', ['../a01094.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', ['../a01061.html', 1, '']]],\n+ ['isam2updateparams_2eh_90', ['ISAM2UpdateParams.h', ['../a01046.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', ['../a00722.html', 1, '']]],\n- ['iterative_2ecpp_125', ['iterative.cpp', ['../a00851.html', 1, '']]],\n- ['iterative_2eh_126', ['iterative.h', ['../a00881.html', 1, '']]],\n+ ['iterative_2dinl_2eh_124', ['iterative-inl.h', ['../a00872.html', 1, '']]],\n+ ['iterative_2ecpp_125', ['iterative.cpp', ['../a00797.html', 1, '']]],\n+ ['iterative_2eh_126', ['iterative.h', ['../a00770.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', ['../a00779.html', 1, '']]],\n- ['iterativesolver_2eh_131', ['IterativeSolver.h', ['../a00797.html', 1, '']]],\n+ ['iterativesolver_2eh_131', ['IterativeSolver.h', ['../a00713.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', ['../a00719.html', 1, '']]],\n- ['jacobianfactor_2eh_3', ['JacobianFactor.h', ['../a00761.html', 1, '']]],\n+ ['jacobianfactor_2ecpp_2', ['JacobianFactor.cpp', ['../a00878.html', 1, '']]],\n+ ['jacobianfactor_2eh_3', ['JacobianFactor.h', ['../a00833.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@@ -47,16 +47,16 @@\n ['../a04456.html#ab2fcf64154122a05a99c0d7c29611d34', 1, 'gtsam::JointMarginal::JointMarginal()']\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', ['../a00620.html', 1, '']]],\n- ['junctiontree_2eh_15', ['JunctionTree.h', ['../a00632.html', 1, '']]],\n+ ['junctiontree_2dinst_2eh_14', ['JunctionTree-inst.h', ['../a00584.html', 1, '']]],\n+ ['junctiontree_2eh_15', ['JunctionTree.h', ['../a00614.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', ['../a00809.html', 1, '']]],\n- ['kalmanfilter_2eh_9', ['KalmanFilter.h', ['../a00863.html', 1, '']]],\n+ ['kalmanfilter_2ecpp_8', ['KalmanFilter.cpp', ['../a00836.html', 1, '']]],\n+ ['kalmanfilter_2eh_9', ['KalmanFilter.h', ['../a00884.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', ['../a00581.html', 1, '']]],\n+ ['key_2eh_13', ['Key.h', ['../a00662.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', ['../a00665.html', 1, '']]],\n+ ['labeledsymbol_2eh_6', ['LabeledSymbol.h', ['../a00677.html', 1, '']]],\n ['labels_7', ['labels', ['../a02796.html#a3c81ed3e00b4ecf14633a107690f9946', 1, 'gtsam::DecisionTree']]],\n- ['lago_2eh_8', ['lago.h', ['../a01289.html', 1, '']]],\n+ ['lago_2eh_8', ['lago.h', ['../a01301.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', ['../a01091.html', 1, '']]],\n- ['levenbergmarquardtoptimizer_2eh_21', ['LevenbergMarquardtOptimizer.h', ['../a01085.html', 1, '']]],\n+ ['levenbergmarquardtoptimizer_2ecpp_20', ['LevenbergMarquardtOptimizer.cpp', ['../a01139.html', 1, '']]],\n+ ['levenbergmarquardtoptimizer_2eh_21', ['LevenbergMarquardtOptimizer.h', ['../a01106.html', 1, '']]],\n ['levenbergmarquardtparams_22', ['LevenbergMarquardtParams', ['../a04440.html', 1, 'gtsam']]],\n- ['levenbergmarquardtparams_2ecpp_23', ['LevenbergMarquardtParams.cpp', ['../a01079.html', 1, '']]],\n- ['levenbergmarquardtparams_2eh_24', ['LevenbergMarquardtParams.h', ['../a01121.html', 1, '']]],\n- ['lie_2eh_25', ['Lie.h', ['../a00011.html', 1, '']]],\n+ ['levenbergmarquardtparams_2ecpp_23', ['LevenbergMarquardtParams.cpp', ['../a01103.html', 1, '']]],\n+ ['levenbergmarquardtparams_2eh_24', ['LevenbergMarquardtParams.h', ['../a01157.html', 1, '']]],\n+ ['lie_2eh_25', ['Lie.h', ['../a00062.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', ['../a00074.html', 1, '']]],\n+ ['lieproxies_2eh_55', ['lieProxies.h', ['../a00104.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', ['../a00422.html', 1, '']]],\n+ ['line3_2eh_62', ['Line3.h', ['../a00458.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', ['../a00821.html', 1, '']]],\n+ ['linearalgorithms_2dinst_2eh_67', ['linearAlgorithms-inst.h', ['../a00806.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', ['../a01058.html', 1, '']]],\n- ['linearcontainerfactor_2eh_70', ['LinearContainerFactor.h', ['../a01172.html', 1, '']]],\n- ['linearexceptions_2ecpp_71', ['linearExceptions.cpp', ['../a00818.html', 1, '']]],\n- ['linearexceptions_2eh_72', ['linearExceptions.h', ['../a00749.html', 1, '']]],\n+ ['linearcontainerfactor_2ecpp_69', ['LinearContainerFactor.cpp', ['../a01067.html', 1, '']]],\n+ ['linearcontainerfactor_2eh_70', ['LinearContainerFactor.h', ['../a01034.html', 1, '']]],\n+ ['linearexceptions_2ecpp_71', ['linearExceptions.cpp', ['../a00839.html', 1, '']]],\n+ ['linearexceptions_2eh_72', ['linearExceptions.h', ['../a00722.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', ['../a00980.html', 1, '']]],\n+ ['magfactor_2eh_1', ['MagFactor.h', ['../a00992.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', ['../a00047.html', 1, '']]],\n+ ['make_5fshared_2eh_8', ['make_shared.h', ['../a00026.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', ['../a00104.html', 1, '']]],\n+ ['manifold_2eh_16', ['Manifold.h', ['../a00107.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', ['../a00935.html', 1, '']]],\n- ['manifoldpreintegration_2eh_37', ['ManifoldPreintegration.h', ['../a00992.html', 1, '']]],\n+ ['manifoldpreintegration_2ecpp_36', ['ManifoldPreintegration.cpp', ['../a00959.html', 1, '']]],\n+ ['manifoldpreintegration_2eh_37', ['ManifoldPreintegration.h', ['../a00905.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', ['../a01130.html', 1, '']]],\n- ['marginals_2eh_67', ['Marginals.h', ['../a01070.html', 1, '']]],\n+ ['marginals_2ecpp_66', ['Marginals.cpp', ['../a01109.html', 1, '']]],\n+ ['marginals_2eh_67', ['Marginals.h', ['../a01061.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@@ -135,24 +135,24 @@\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', ['../a00080.html', 1, '']]],\n- ['matrix_2eh_73', ['Matrix.h', ['../a00146.html', 1, '']]],\n+ ['matrix_2eh_73', ['Matrix.h', ['../a00119.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', ['../a00026.html', 1, '']]],\n+ ['matrixserialization_2eh_77', ['MatrixSerialization.h', ['../a00059.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', ['../a00614.html', 1, '']]],\n- ['metisindex_2eh_102', ['MetisIndex.h', ['../a00599.html', 1, '']]],\n+ ['metisindex_2dinl_2eh_101', ['MetisIndex-inl.h', ['../a00668.html', 1, '']]],\n+ ['metisindex_2eh_102', ['MetisIndex.h', ['../a00689.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', ['../a01184.html', 1, '']]],\n- ['mfas_2eh_105', ['MFAS.h', ['../a01199.html', 1, '']]],\n+ ['mfas_2eh_105', ['MFAS.h', ['../a01223.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', ['../a00527.html', 1, '']]],\n+ ['mixturefactor_2eh_114', ['MixtureFactor.h', ['../a00545.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', ['../a00959.html', 1, '']]],\n+ ['navstate_2eh_6', ['NavState.h', ['../a00986.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', ['../a00740.html', 1, '']]],\n- ['noisemodel_2eh_34', ['NoiseModel.h', ['../a00755.html', 1, '']]],\n+ ['noisemodel_2ecpp_33', ['NoiseModel.cpp', ['../a00791.html', 1, '']]],\n+ ['noisemodel_2eh_34', ['NoiseModel.h', ['../a00788.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', ['../a01046.html', 1, '']]],\n- ['nonlinearconjugategradientoptimizer_2eh_84', ['NonlinearConjugateGradientOptimizer.h', ['../a01160.html', 1, '']]],\n+ ['nonlinearconjugategradientoptimizer_2ecpp_83', ['NonlinearConjugateGradientOptimizer.cpp', ['../a01055.html', 1, '']]],\n+ ['nonlinearconjugategradientoptimizer_2eh_84', ['NonlinearConjugateGradientOptimizer.h', ['../a01097.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', ['../a01100.html', 1, '']]],\n+ ['nonlinearexceptions_2eh_88', ['nonlinearExceptions.h', ['../a01073.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', ['../a01136.html', 1, '']]],\n- ['nonlinearfactor_2eh_91', ['NonlinearFactor.h', ['../a01169.html', 1, '']]],\n+ ['nonlinearfactor_2eh_91', ['NonlinearFactor.h', ['../a01013.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', ['../a01022.html', 1, '']]],\n- ['nonlinearfactorgraph_2eh_94', ['NonlinearFactorGraph.h', ['../a01094.html', 1, '']]],\n+ ['nonlinearfactorgraph_2ecpp_93', ['NonlinearFactorGraph.cpp', ['../a01166.html', 1, '']]],\n+ ['nonlinearfactorgraph_2eh_94', ['NonlinearFactorGraph.h', ['../a01112.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', ['../a01145.html', 1, '']]],\n- ['nonlinearisam_2eh_100', ['NonlinearISAM.h', ['../a01118.html', 1, '']]],\n+ ['nonlinearisam_2ecpp_99', ['NonlinearISAM.cpp', ['../a01091.html', 1, '']]],\n+ ['nonlinearisam_2eh_100', ['NonlinearISAM.h', ['../a01010.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', ['../a01049.html', 1, '']]],\n- ['nonlinearoptimizer_2eh_103', ['NonlinearOptimizer.h', ['../a01019.html', 1, '']]],\n+ ['nonlinearoptimizer_2ecpp_102', ['NonlinearOptimizer.cpp', ['../a01100.html', 1, '']]],\n+ ['nonlinearoptimizer_2eh_103', ['NonlinearOptimizer.h', ['../a01082.html', 1, '']]],\n ['nonlinearoptimizerparams_104', ['NonlinearOptimizerParams', ['../a04556.html', 1, 'gtsam']]],\n- ['nonlinearoptimizerparams_2ecpp_105', ['NonlinearOptimizerParams.cpp', ['../a01001.html', 1, '']]],\n- ['nonlinearoptimizerparams_2eh_106', ['NonlinearOptimizerParams.h', ['../a01127.html', 1, '']]],\n+ ['nonlinearoptimizerparams_2ecpp_105', ['NonlinearOptimizerParams.cpp', ['../a01076.html', 1, '']]],\n+ ['nonlinearoptimizerparams_2eh_106', ['NonlinearOptimizerParams.h', ['../a01031.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', ['../a00032.html', 1, '']]],\n+ ['numericalderivative_2eh_137', ['numericalDerivative.h', ['../a00023.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', ['../a00119.html#a30d3af2da1ea940197addce4f3c223c8', 1, 'types.h']]]\n+ ['assert_5fthrow_0', ['assert_throw', ['../a00098.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', ['../a01154.html#a701d0cd12b81a725f7f9cd2432fe9e2a', 1, 'expressionTesting.h']]],\n- ['expect_5fcorrect_5ffactor_5fjacobians_1', ['EXPECT_CORRECT_FACTOR_JACOBIANS', ['../a01010.html#a8ec37fe83eda47404b8588e1f012df21', 1, 'factorTesting.h']]]\n+ ['expect_5fcorrect_5fexpression_5fjacobians_0', ['EXPECT_CORRECT_EXPRESSION_JACOBIANS', ['../a01169.html#a701d0cd12b81a725f7f9cd2432fe9e2a', 1, 'expressionTesting.h']]],\n+ ['expect_5fcorrect_5ffactor_5fjacobians_1', ['EXPECT_CORRECT_FACTOR_JACOBIANS', ['../a01070.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', ['../a00098.html#aac1ea136475ea605715c809f4b3f0156', 1, 'Group.h']]],\n- ['gtsam_5fconcept_5flie_5finst_1', ['GTSAM_CONCEPT_LIE_INST', ['../a00011.html#aeef5af7d583d275fbc0e6e5af8bf2afc', 1, 'Lie.h']]],\n- ['gtsam_5fconcept_5fmanifold_5finst_2', ['GTSAM_CONCEPT_MANIFOLD_INST', ['../a00104.html#a64b5e2e3c812d2cdea5ee294100f825f', 1, 'Manifold.h']]],\n+ ['gtsam_5fconcept_5fgroup_5finst_0', ['GTSAM_CONCEPT_GROUP_INST', ['../a00077.html#aac1ea136475ea605715c809f4b3f0156', 1, 'Group.h']]],\n+ ['gtsam_5fconcept_5flie_5finst_1', ['GTSAM_CONCEPT_LIE_INST', ['../a00062.html#aeef5af7d583d275fbc0e6e5af8bf2afc', 1, 'Lie.h']]],\n+ ['gtsam_5fconcept_5fmanifold_5finst_2', ['GTSAM_CONCEPT_MANIFOLD_INST', ['../a00107.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', ['../a00083.html#abe0a238cdd07d484ff0be56ae945b182', 1, 'Testable.h']]],\n- ['gtsam_5fmake_5faligned_5foperator_5fnew_5', ['GTSAM_MAKE_ALIGNED_OPERATOR_NEW', ['../a00119.html#aa123dd61687e08ae328154a1890b7b86', 1, 'types.h']]],\n- ['gtsam_5fmake_5faligned_5foperator_5fnew_5fif_6', ['GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF', ['../a00119.html#a352ab46cee3a766e30b049690802fb0a', 1, 'types.h']]]\n+ ['gtsam_5fconcept_5ftestable_5finst_4', ['GTSAM_CONCEPT_TESTABLE_INST', ['../a00065.html#abe0a238cdd07d484ff0be56ae945b182', 1, 'Testable.h']]],\n+ ['gtsam_5fmake_5faligned_5foperator_5fnew_5', ['GTSAM_MAKE_ALIGNED_OPERATOR_NEW', ['../a00098.html#aa123dd61687e08ae328154a1890b7b86', 1, 'types.h']]],\n+ ['gtsam_5fmake_5faligned_5foperator_5fnew_5fif_6', ['GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF', ['../a00098.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', ['../a00812.html', 1, '']]],\n- ['ahrsfactor_2ecpp_1', ['AHRSFactor.cpp', ['../a00917.html', 1, '']]],\n- ['ahrsfactor_2eh_2', ['AHRSFactor.h', ['../a00941.html', 1, '']]],\n- ['algebraicdecisiontree_2ecpp_3', ['AlgebraicDecisionTree.cpp', ['../a00257.html', 1, '']]],\n- ['algebraicdecisiontree_2eh_4', ['AlgebraicDecisionTree.h', ['../a00227.html', 1, '']]],\n- ['antifactor_2eh_5', ['AntiFactor.h', ['../a01256.html', 1, '']]],\n- ['assignment_2eh_6', ['Assignment.h', ['../a00272.html', 1, '']]],\n- ['attitudefactor_2ecpp_7', ['AttitudeFactor.cpp', ['../a00914.html', 1, '']]],\n- ['attitudefactor_2eh_8', ['AttitudeFactor.h', ['../a00974.html', 1, '']]]\n+ ['acceleratedpowermethod_2eh_0', ['AcceleratedPowerMethod.h', ['../a00776.html', 1, '']]],\n+ ['ahrsfactor_2ecpp_1', ['AHRSFactor.cpp', ['../a00935.html', 1, '']]],\n+ ['ahrsfactor_2eh_2', ['AHRSFactor.h', ['../a00932.html', 1, '']]],\n+ ['algebraicdecisiontree_2ecpp_3', ['AlgebraicDecisionTree.cpp', ['../a00206.html', 1, '']]],\n+ ['algebraicdecisiontree_2eh_4', ['AlgebraicDecisionTree.h', ['../a00242.html', 1, '']]],\n+ ['antifactor_2eh_5', ['AntiFactor.h', ['../a01262.html', 1, '']]],\n+ ['assignment_2eh_6', ['Assignment.h', ['../a00221.html', 1, '']]],\n+ ['attitudefactor_2ecpp_7', ['AttitudeFactor.cpp', ['../a00965.html', 1, '']]],\n+ ['attitudefactor_2eh_8', ['AttitudeFactor.h', ['../a00911.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', ['../a00989.html', 1, '']]],\n- ['barometricfactor_2eh_1', ['BarometricFactor.h', ['../a00998.html', 1, '']]],\n- ['basis_2eh_2', ['Basis.h', ['../a00173.html', 1, '']]],\n- ['basisfactors_2eh_3', ['BasisFactors.h', ['../a00167.html', 1, '']]],\n- ['bayesnet_2eh_4', ['BayesNet.h', ['../a00644.html', 1, '']]],\n- ['bayestree_2dinst_2eh_5', ['BayesTree-inst.h', ['../a00701.html', 1, '']]],\n- ['bayestree_2ecpp_6', ['BayesTree.cpp', ['../a00698.html', 1, '']]],\n- ['bayestree_2eh_7', ['BayesTree.h', ['../a00575.html', 1, '']]],\n+ ['barometricfactor_2ecpp_0', ['BarometricFactor.cpp', ['../a00971.html', 1, '']]],\n+ ['barometricfactor_2eh_1', ['BarometricFactor.h', ['../a00983.html', 1, '']]],\n+ ['basis_2eh_2', ['Basis.h', ['../a00158.html', 1, '']]],\n+ ['basisfactors_2eh_3', ['BasisFactors.h', ['../a00152.html', 1, '']]],\n+ ['bayesnet_2eh_4', ['BayesNet.h', ['../a00683.html', 1, '']]],\n+ ['bayestree_2dinst_2eh_5', ['BayesTree-inst.h', ['../a00671.html', 1, '']]],\n+ ['bayestree_2ecpp_6', ['BayesTree.cpp', ['../a00626.html', 1, '']]],\n+ ['bayestree_2eh_7', ['BayesTree.h', ['../a00587.html', 1, '']]],\n ['bayestreecliquebase_2dinst_2eh_8', ['BayesTreeCliqueBase-inst.h', ['../a00623.html', 1, '']]],\n- ['bayestreecliquebase_2eh_9', ['BayesTreeCliqueBase.h', ['../a00680.html', 1, '']]],\n+ ['bayestreecliquebase_2eh_9', ['BayesTreeCliqueBase.h', ['../a00674.html', 1, '']]],\n ['bearingfactor_2eh_10', ['BearingFactor.h', ['../a08158.html', 1, '']]],\n- ['bearingrange_2eh_11', ['BearingRange.h', ['../a00368.html', 1, '']]],\n+ ['bearingrange_2eh_11', ['BearingRange.h', ['../a00302.html', 1, '']]],\n ['bearingrangefactor_2eh_12', ['BearingRangeFactor.h', ['../a08164.html', 1, '']]],\n- ['betweenfactor_2eh_13', ['BetweenFactor.h', ['../a01274.html', 1, '']]],\n- ['binaryjacobianfactor_2eh_14', ['BinaryJacobianFactor.h', ['../a00803.html', 1, '']]],\n- ['binarymeasurement_2eh_15', ['BinaryMeasurement.h', ['../a01211.html', 1, '']]],\n- ['boundingconstraint_2eh_16', ['BoundingConstraint.h', ['../a01319.html', 1, '']]]\n+ ['betweenfactor_2eh_13', ['BetweenFactor.h', ['../a01241.html', 1, '']]],\n+ ['binaryjacobianfactor_2eh_14', ['BinaryJacobianFactor.h', ['../a00719.html', 1, '']]],\n+ ['binarymeasurement_2eh_15', ['BinaryMeasurement.h', ['../a01193.html', 1, '']]],\n+ ['boundingconstraint_2eh_16', ['BoundingConstraint.h', ['../a01340.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', ['../a00293.html', 1, '']]]\n+ ['quaternion_2eh_0', ['Quaternion.h', ['../a00428.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', ['../a00893.html', 1, '']]],\n- ['regularimplicitschurfactor_2eh_2', ['RegularImplicitSchurFactor.h', ['../a01241.html', 1, '']]],\n- ['regularjacobianfactor_2eh_3', ['RegularJacobianFactor.h', ['../a00725.html', 1, '']]],\n+ ['regularhessianfactor_2eh_1', ['RegularHessianFactor.h', ['../a00764.html', 1, '']]],\n+ ['regularimplicitschurfactor_2eh_2', ['RegularImplicitSchurFactor.h', ['../a01277.html', 1, '']]],\n+ ['regularjacobianfactor_2eh_3', ['RegularJacobianFactor.h', ['../a00896.html', 1, '']]],\n ['rot2_2ecpp_4', ['Rot2.cpp', ['../a00434.html', 1, '']]],\n- ['rot2_2eh_5', ['Rot2.h', ['../a00407.html', 1, '']]],\n- ['rot3_2ecpp_6', ['Rot3.cpp', ['../a00347.html', 1, '']]],\n- ['rot3_2eh_7', ['Rot3.h', ['../a00380.html', 1, '']]],\n- ['rot3m_2ecpp_8', ['Rot3M.cpp', ['../a00470.html', 1, '']]],\n- ['rot3q_2ecpp_9', ['Rot3Q.cpp', ['../a00308.html', 1, '']]]\n+ ['rot2_2eh_5', ['Rot2.h', ['../a00365.html', 1, '']]],\n+ ['rot3_2ecpp_6', ['Rot3.cpp', ['../a00281.html', 1, '']]],\n+ ['rot3_2eh_7', ['Rot3.h', ['../a00332.html', 1, '']]],\n+ ['rot3m_2ecpp_8', ['Rot3M.cpp', ['../a00305.html', 1, '']]],\n+ ['rot3q_2ecpp_9', ['Rot3Q.cpp', ['../a00374.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', ['../a00800.html', 1, '']]],\n- ['sampler_2eh_1', ['Sampler.h', ['../a00860.html', 1, '']]],\n- ['scatter_2ecpp_2', ['Scatter.cpp', ['../a00854.html', 1, '']]],\n- ['scatter_2eh_3', ['Scatter.h', ['../a00764.html', 1, '']]],\n- ['scenario_2eh_4', ['Scenario.h', ['../a00932.html', 1, '']]],\n- ['scenariorunner_2eh_5', ['ScenarioRunner.h', ['../a00920.html', 1, '']]],\n- ['serialization_2eh_6', ['serialization.h', ['../a00134.html', 1, '']]],\n- ['serializationtesthelpers_2eh_7', ['serializationTestHelpers.h', ['../a00050.html', 1, '']]],\n- ['sfmdata_2ecpp_8', ['SfmData.cpp', ['../a01193.html', 1, '']]],\n- ['sfmdata_2eh_9', ['SfmData.h', ['../a01217.html', 1, '']]],\n- ['sfmtrack_2ecpp_10', ['SfmTrack.cpp', ['../a01205.html', 1, '']]],\n- ['sfmtrack_2eh_11', ['SfmTrack.h', ['../a01202.html', 1, '']]],\n+ ['sampler_2ecpp_0', ['Sampler.cpp', ['../a00881.html', 1, '']]],\n+ ['sampler_2eh_1', ['Sampler.h', ['../a00794.html', 1, '']]],\n+ ['scatter_2ecpp_2', ['Scatter.cpp', ['../a00755.html', 1, '']]],\n+ ['scatter_2eh_3', ['Scatter.h', ['../a00749.html', 1, '']]],\n+ ['scenario_2eh_4', ['Scenario.h', ['../a00968.html', 1, '']]],\n+ ['scenariorunner_2eh_5', ['ScenarioRunner.h', ['../a00908.html', 1, '']]],\n+ ['serialization_2eh_6', ['serialization.h', ['../a00008.html', 1, '']]],\n+ ['serializationtesthelpers_2eh_7', ['serializationTestHelpers.h', ['../a00143.html', 1, '']]],\n+ ['sfmdata_2ecpp_8', ['SfmData.cpp', ['../a01232.html', 1, '']]],\n+ ['sfmdata_2eh_9', ['SfmData.h', ['../a01208.html', 1, '']]],\n+ ['sfmtrack_2ecpp_10', ['SfmTrack.cpp', ['../a01202.html', 1, '']]],\n+ ['sfmtrack_2eh_11', ['SfmTrack.h', ['../a01211.html', 1, '']]],\n ['shonanaveraging_2ecpp_12', ['ShonanAveraging.cpp', ['../a01214.html', 1, '']]],\n- ['shonanaveraging_2eh_13', ['ShonanAveraging.h', ['../a01223.html', 1, '']]],\n+ ['shonanaveraging_2eh_13', ['ShonanAveraging.h', ['../a01220.html', 1, '']]],\n ['shonanfactor_2eh_14', ['ShonanFactor.h', ['../a01196.html', 1, '']]],\n ['shonangaugefactor_2eh_15', ['ShonanGaugeFactor.h', ['../a01229.html', 1, '']]],\n- ['signature_2ecpp_16', ['Signature.cpp', ['../a00254.html', 1, '']]],\n- ['signature_2eh_17', ['Signature.h', ['../a00236.html', 1, '']]],\n+ ['signature_2ecpp_16', ['Signature.cpp', ['../a00209.html', 1, '']]],\n+ ['signature_2eh_17', ['Signature.h', ['../a00179.html', 1, '']]],\n ['similarity2_2ecpp_18', ['Similarity2.cpp', ['../a00479.html', 1, '']]],\n- ['similarity2_2eh_19', ['Similarity2.h', ['../a00431.html', 1, '']]],\n- ['similarity3_2ecpp_20', ['Similarity3.cpp', ['../a00425.html', 1, '']]],\n- ['similarity3_2eh_21', ['Similarity3.h', ['../a00458.html', 1, '']]],\n- ['simplecamera_2ecpp_22', ['SimpleCamera.cpp', ['../a00473.html', 1, '']]],\n- ['simplecamera_2eh_23', ['SimpleCamera.h', ['../a00299.html', 1, '']]],\n- ['smartfactorbase_2eh_24', ['SmartFactorBase.h', ['../a01268.html', 1, '']]],\n- ['smartfactorparams_2eh_25', ['SmartFactorParams.h', ['../a01250.html', 1, '']]],\n- ['smartprojectionfactor_2eh_26', ['SmartProjectionFactor.h', ['../a01262.html', 1, '']]],\n- ['smartprojectionposefactor_2eh_27', ['SmartProjectionPoseFactor.h', ['../a01313.html', 1, '']]],\n+ ['similarity2_2eh_19', ['Similarity2.h', ['../a00347.html', 1, '']]],\n+ ['similarity3_2ecpp_20', ['Similarity3.cpp', ['../a00356.html', 1, '']]],\n+ ['similarity3_2eh_21', ['Similarity3.h', ['../a00452.html', 1, '']]],\n+ ['simplecamera_2ecpp_22', ['SimpleCamera.cpp', ['../a00425.html', 1, '']]],\n+ ['simplecamera_2eh_23', ['SimpleCamera.h', ['../a00449.html', 1, '']]],\n+ ['smartfactorbase_2eh_24', ['SmartFactorBase.h', ['../a01295.html', 1, '']]],\n+ ['smartfactorparams_2eh_25', ['SmartFactorParams.h', ['../a01331.html', 1, '']]],\n+ ['smartprojectionfactor_2eh_26', ['SmartProjectionFactor.h', ['../a01307.html', 1, '']]],\n+ ['smartprojectionposefactor_2eh_27', ['SmartProjectionPoseFactor.h', ['../a01292.html', 1, '']]],\n ['smartprojectionrigfactor_2eh_28', ['SmartProjectionRigFactor.h', ['../a01253.html', 1, '']]],\n- ['so3_2ecpp_29', ['SO3.cpp', ['../a00365.html', 1, '']]],\n- ['so3_2eh_30', ['SO3.h', ['../a00437.html', 1, '']]],\n- ['so4_2ecpp_31', ['SO4.cpp', ['../a00386.html', 1, '']]],\n- ['so4_2eh_32', ['SO4.h', ['../a00287.html', 1, '']]],\n- ['son_2dinl_2eh_33', ['SOn-inl.h', ['../a00281.html', 1, '']]],\n- ['son_2ecpp_34', ['SOn.cpp', ['../a00338.html', 1, '']]],\n- ['son_2eh_35', ['SOn.h', ['../a00311.html', 1, '']]],\n- ['sparseeigen_2eh_36', ['SparseEigen.h', ['../a00767.html', 1, '']]],\n- ['sphericalcamera_2eh_37', ['SphericalCamera.h', ['../a00329.html', 1, '']]],\n- ['stereocamera_2eh_38', ['StereoCamera.h', ['../a00377.html', 1, '']]],\n- ['stereofactor_2eh_39', ['StereoFactor.h', ['../a01310.html', 1, '']]],\n- ['stereopoint2_2ecpp_40', ['StereoPoint2.cpp', ['../a00362.html', 1, '']]],\n+ ['so3_2ecpp_29', ['SO3.cpp', ['../a00419.html', 1, '']]],\n+ ['so3_2eh_30', ['SO3.h', ['../a00323.html', 1, '']]],\n+ ['so4_2ecpp_31', ['SO4.cpp', ['../a00404.html', 1, '']]],\n+ ['so4_2eh_32', ['SO4.h', ['../a00344.html', 1, '']]],\n+ ['son_2dinl_2eh_33', ['SOn-inl.h', ['../a00389.html', 1, '']]],\n+ ['son_2ecpp_34', ['SOn.cpp', ['../a00455.html', 1, '']]],\n+ ['son_2eh_35', ['SOn.h', ['../a00464.html', 1, '']]],\n+ ['sparseeigen_2eh_36', ['SparseEigen.h', ['../a00863.html', 1, '']]],\n+ ['sphericalcamera_2eh_37', ['SphericalCamera.h', ['../a00413.html', 1, '']]],\n+ ['stereocamera_2eh_38', ['StereoCamera.h', ['../a00341.html', 1, '']]],\n+ ['stereofactor_2eh_39', ['StereoFactor.h', ['../a01238.html', 1, '']]],\n+ ['stereopoint2_2ecpp_40', ['StereoPoint2.cpp', ['../a00410.html', 1, '']]],\n ['stereopoint2_2eh_41', ['StereoPoint2.h', ['../a00401.html', 1, '']]],\n- ['subgraphbuilder_2ecpp_42', ['SubgraphBuilder.cpp', ['../a00875.html', 1, '']]],\n- ['subgraphbuilder_2eh_43', ['SubgraphBuilder.h', ['../a00842.html', 1, '']]],\n- ['subgraphpreconditioner_2ecpp_44', ['SubgraphPreconditioner.cpp', ['../a00743.html', 1, '']]],\n- ['subgraphpreconditioner_2eh_45', ['SubgraphPreconditioner.h', ['../a00896.html', 1, '']]],\n- ['subgraphsolver_2ecpp_46', ['SubgraphSolver.cpp', ['../a00869.html', 1, '']]],\n- ['subgraphsolver_2eh_47', ['SubgraphSolver.h', ['../a00794.html', 1, '']]],\n- ['symbol_2ecpp_48', ['Symbol.cpp', ['../a00677.html', 1, '']]],\n+ ['subgraphbuilder_2ecpp_42', ['SubgraphBuilder.cpp', ['../a00746.html', 1, '']]],\n+ ['subgraphbuilder_2eh_43', ['SubgraphBuilder.h', ['../a00857.html', 1, '']]],\n+ ['subgraphpreconditioner_2ecpp_44', ['SubgraphPreconditioner.cpp', ['../a00773.html', 1, '']]],\n+ ['subgraphpreconditioner_2eh_45', ['SubgraphPreconditioner.h', ['../a00860.html', 1, '']]],\n+ ['subgraphsolver_2ecpp_46', ['SubgraphSolver.cpp', ['../a00710.html', 1, '']]],\n+ ['subgraphsolver_2eh_47', ['SubgraphSolver.h', ['../a00818.html', 1, '']]],\n+ ['symbol_2ecpp_48', ['Symbol.cpp', ['../a00686.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', ['../a01358.html', 1, '']]],\n- ['symbolicbayesnet_2eh_51', ['SymbolicBayesNet.h', ['../a01364.html', 1, '']]],\n+ ['symbolicbayesnet_2ecpp_50', ['SymbolicBayesNet.cpp', ['../a01376.html', 1, '']]],\n+ ['symbolicbayesnet_2eh_51', ['SymbolicBayesNet.h', ['../a01343.html', 1, '']]],\n ['symbolicbayestree_2eh_52', ['SymbolicBayesTree.h', ['../a01391.html', 1, '']]],\n ['symbolicconditional_2ecpp_53', ['SymbolicConditional.cpp', ['../a01373.html', 1, '']]],\n- ['symbolicconditional_2eh_54', ['SymbolicConditional.h', ['../a01352.html', 1, '']]],\n- ['symboliceliminationtree_2ecpp_55', ['SymbolicEliminationTree.cpp', ['../a01367.html', 1, '']]],\n- ['symboliceliminationtree_2eh_56', ['SymbolicEliminationTree.h', ['../a01361.html', 1, '']]],\n- ['symbolicfactor_2dinst_2eh_57', ['SymbolicFactor-inst.h', ['../a01343.html', 1, '']]],\n- ['symbolicfactor_2ecpp_58', ['SymbolicFactor.cpp', ['../a01382.html', 1, '']]],\n- ['symbolicfactor_2eh_59', ['SymbolicFactor.h', ['../a01385.html', 1, '']]],\n- ['symbolicfactorgraph_2ecpp_60', ['SymbolicFactorGraph.cpp', ['../a01370.html', 1, '']]],\n- ['symbolicfactorgraph_2eh_61', ['SymbolicFactorGraph.h', ['../a01379.html', 1, '']]],\n- ['symbolicisam_2ecpp_62', ['SymbolicISAM.cpp', ['../a01388.html', 1, '']]],\n- ['symbolicisam_2eh_63', ['SymbolicISAM.h', ['../a01346.html', 1, '']]],\n- ['symbolicjunctiontree_2ecpp_64', ['SymbolicJunctionTree.cpp', ['../a01349.html', 1, '']]],\n- ['symbolicjunctiontree_2eh_65', ['SymbolicJunctionTree.h', ['../a01355.html', 1, '']]],\n- ['symmetricblockmatrix_2ecpp_66', ['SymmetricBlockMatrix.cpp', ['../a00086.html', 1, '']]],\n- ['symmetricblockmatrix_2eh_67', ['SymmetricBlockMatrix.h', ['../a00137.html', 1, '']]]\n+ ['symbolicconditional_2eh_54', ['SymbolicConditional.h', ['../a01358.html', 1, '']]],\n+ ['symboliceliminationtree_2ecpp_55', ['SymbolicEliminationTree.cpp', ['../a01346.html', 1, '']]],\n+ ['symboliceliminationtree_2eh_56', ['SymbolicEliminationTree.h', ['../a01370.html', 1, '']]],\n+ ['symbolicfactor_2dinst_2eh_57', ['SymbolicFactor-inst.h', ['../a01382.html', 1, '']]],\n+ ['symbolicfactor_2ecpp_58', ['SymbolicFactor.cpp', ['../a01355.html', 1, '']]],\n+ ['symbolicfactor_2eh_59', ['SymbolicFactor.h', ['../a01379.html', 1, '']]],\n+ ['symbolicfactorgraph_2ecpp_60', ['SymbolicFactorGraph.cpp', ['../a01349.html', 1, '']]],\n+ ['symbolicfactorgraph_2eh_61', ['SymbolicFactorGraph.h', ['../a01388.html', 1, '']]],\n+ ['symbolicisam_2ecpp_62', ['SymbolicISAM.cpp', ['../a01361.html', 1, '']]],\n+ ['symbolicisam_2eh_63', ['SymbolicISAM.h', ['../a01385.html', 1, '']]],\n+ ['symbolicjunctiontree_2ecpp_64', ['SymbolicJunctionTree.cpp', ['../a01364.html', 1, '']]],\n+ ['symbolicjunctiontree_2eh_65', ['SymbolicJunctionTree.h', ['../a01352.html', 1, '']]],\n+ ['symmetricblockmatrix_2ecpp_66', ['SymmetricBlockMatrix.cpp', ['../a00083.html', 1, '']]],\n+ ['symmetricblockmatrix_2eh_67', ['SymmetricBlockMatrix.h', ['../a00089.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', ['../a00965.html', 1, '']]],\n- ['tangentpreintegration_2eh_1', ['TangentPreintegration.h', ['../a00977.html', 1, '']]],\n- ['testable_2eh_2', ['Testable.h', ['../a00083.html', 1, '']]],\n- ['testableassertions_2eh_3', ['TestableAssertions.h', ['../a00014.html', 1, '']]],\n- ['threadsafeexception_2eh_4', ['ThreadsafeException.h', ['../a00035.html', 1, '']]],\n- ['timing_2ecpp_5', ['timing.cpp', ['../a00017.html', 1, '']]],\n- ['timing_2eh_6', ['timing.h', ['../a00092.html', 1, '']]],\n- ['translationfactor_2eh_7', ['TranslationFactor.h', ['../a01190.html', 1, '']]],\n- ['translationrecovery_2ecpp_8', ['TranslationRecovery.cpp', ['../a01226.html', 1, '']]],\n- ['translationrecovery_2eh_9', ['TranslationRecovery.h', ['../a01187.html', 1, '']]],\n+ ['tangentpreintegration_2ecpp_0', ['TangentPreintegration.cpp', ['../a00980.html', 1, '']]],\n+ ['tangentpreintegration_2eh_1', ['TangentPreintegration.h', ['../a00956.html', 1, '']]],\n+ ['testable_2eh_2', ['Testable.h', ['../a00065.html', 1, '']]],\n+ ['testableassertions_2eh_3', ['TestableAssertions.h', ['../a00005.html', 1, '']]],\n+ ['threadsafeexception_2eh_4', ['ThreadsafeException.h', ['../a00056.html', 1, '']]],\n+ ['timing_2ecpp_5', ['timing.cpp', ['../a00116.html', 1, '']]],\n+ ['timing_2eh_6', ['timing.h', ['../a00020.html', 1, '']]],\n+ ['translationfactor_2eh_7', ['TranslationFactor.h', ['../a01205.html', 1, '']]],\n+ ['translationrecovery_2ecpp_8', ['TranslationRecovery.cpp', ['../a01217.html', 1, '']]],\n+ ['translationrecovery_2eh_9', ['TranslationRecovery.h', ['../a01226.html', 1, '']]],\n ['treetraversal_2dinst_2eh_10', ['treeTraversal-inst.h', ['../a00044.html', 1, '']]],\n- ['triangulation_2eh_11', ['triangulation.h', ['../a00461.html', 1, '']]],\n- ['types_2ecpp_12', ['types.cpp', ['../a00068.html', 1, '']]],\n- ['types_2eh_13', ['types.h', ['../a00119.html', 1, '']]]\n+ ['triangulation_2eh_11', ['triangulation.h', ['../a00359.html', 1, '']]],\n+ ['types_2ecpp_12', ['types.cpp', ['../a00014.html', 1, '']]],\n+ ['types_2eh_13', ['types.h', ['../a00098.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', ['../a00041.html', 1, '']]],\n- ['values_2eh_1', ['Values.h', ['../a01004.html', 1, '']]],\n- ['variableindex_2dinl_2eh_2', ['VariableIndex-inl.h', ['../a00656.html', 1, '']]],\n- ['variableindex_2ecpp_3', ['VariableIndex.cpp', ['../a00650.html', 1, '']]],\n- ['variableindex_2eh_4', ['VariableIndex.h', ['../a00683.html', 1, '']]],\n- ['variableslots_2ecpp_5', ['VariableSlots.cpp', ['../a00629.html', 1, '']]],\n- ['variableslots_2eh_6', ['VariableSlots.h', ['../a00590.html', 1, '']]],\n- ['vector_2ecpp_7', ['Vector.cpp', ['../a00125.html', 1, '']]],\n- ['vector_2eh_8', ['Vector.h', ['../a00065.html', 1, '']]],\n- ['vectorserialization_2eh_9', ['VectorSerialization.h', ['../a00002.html', 1, '']]],\n- ['vectorvalues_2ecpp_10', ['VectorValues.cpp', ['../a00710.html', 1, '']]],\n- ['vectorvalues_2eh_11', ['VectorValues.h', ['../a00830.html', 1, '']]],\n- ['verticalblockmatrix_2ecpp_12', ['VerticalBlockMatrix.cpp', ['../a00059.html', 1, '']]],\n- ['verticalblockmatrix_2eh_13', ['VerticalBlockMatrix.h', ['../a00116.html', 1, '']]]\n+ ['value_2eh_0', ['Value.h', ['../a00131.html', 1, '']]],\n+ ['values_2eh_1', ['Values.h', ['../a01037.html', 1, '']]],\n+ ['variableindex_2dinl_2eh_2', ['VariableIndex-inl.h', ['../a00599.html', 1, '']]],\n+ ['variableindex_2ecpp_3', ['VariableIndex.cpp', ['../a00611.html', 1, '']]],\n+ ['variableindex_2eh_4', ['VariableIndex.h', ['../a00590.html', 1, '']]],\n+ ['variableslots_2ecpp_5', ['VariableSlots.cpp', ['../a00620.html', 1, '']]],\n+ ['variableslots_2eh_6', ['VariableSlots.h', ['../a00695.html', 1, '']]],\n+ ['vector_2ecpp_7', ['Vector.cpp', ['../a00053.html', 1, '']]],\n+ ['vector_2eh_8', ['Vector.h', ['../a00146.html', 1, '']]],\n+ ['vectorserialization_2eh_9', ['VectorSerialization.h', ['../a00101.html', 1, '']]],\n+ ['vectorvalues_2ecpp_10', ['VectorValues.cpp', ['../a00821.html', 1, '']]],\n+ ['vectorvalues_2eh_11', ['VectorValues.h', ['../a00869.html', 1, '']]],\n+ ['verticalblockmatrix_2ecpp_12', ['VerticalBlockMatrix.cpp', ['../a00137.html', 1, '']]],\n+ ['verticalblockmatrix_2eh_13', ['VerticalBlockMatrix.h', ['../a00029.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', ['../a00140.html', 1, '']]],\n- ['whitenoisefactor_2eh_1', ['WhiteNoiseFactor.h', ['../a01088.html', 1, '']]]\n+ ['weightedsampler_2eh_0', ['WeightedSampler.h', ['../a00095.html', 1, '']]],\n+ ['whitenoisefactor_2eh_1', ['WhiteNoiseFactor.h', ['../a01007.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', ['../a00371.html', 1, '']]],\n- ['cal3_2eh_1', ['Cal3.h', ['../a00353.html', 1, '']]],\n- ['cal3_5fs2_2ecpp_2', ['Cal3_S2.cpp', ['../a00410.html', 1, '']]],\n- ['cal3_5fs2_2eh_3', ['Cal3_S2.h', ['../a00284.html', 1, '']]],\n- ['cal3_5fs2stereo_2ecpp_4', ['Cal3_S2Stereo.cpp', ['../a00278.html', 1, '']]],\n- ['cal3_5fs2stereo_2eh_5', ['Cal3_S2Stereo.h', ['../a00302.html', 1, '']]],\n- ['cal3bundler_2ecpp_6', ['Cal3Bundler.cpp', ['../a00323.html', 1, '']]],\n- ['cal3bundler_2eh_7', ['Cal3Bundler.h', ['../a00314.html', 1, '']]],\n- ['cal3ds2_2ecpp_8', ['Cal3DS2.cpp', ['../a00320.html', 1, '']]],\n- ['cal3ds2_2eh_9', ['Cal3DS2.h', ['../a00404.html', 1, '']]],\n- ['cal3ds2_5fbase_2ecpp_10', ['Cal3DS2_Base.cpp', ['../a00413.html', 1, '']]],\n- ['cal3fisheye_2ecpp_11', ['Cal3Fisheye.cpp', ['../a00374.html', 1, '']]],\n- ['cal3fisheye_2eh_12', ['Cal3Fisheye.h', ['../a00359.html', 1, '']]],\n- ['cal3unified_2ecpp_13', ['Cal3Unified.cpp', ['../a00392.html', 1, '']]],\n- ['cal3unified_2eh_14', ['Cal3Unified.h', ['../a00305.html', 1, '']]],\n- ['calibratedcamera_2ecpp_15', ['CalibratedCamera.cpp', ['../a00416.html', 1, '']]],\n- ['calibratedcamera_2eh_16', ['CalibratedCamera.h', ['../a00446.html', 1, '']]],\n- ['cameraset_2eh_17', ['CameraSet.h', ['../a00296.html', 1, '']]],\n- ['chebyshev_2ecpp_18', ['Chebyshev.cpp', ['../a00170.html', 1, '']]],\n- ['chebyshev_2eh_19', ['Chebyshev.h', ['../a00152.html', 1, '']]],\n+ ['cal3_2ecpp_0', ['Cal3.cpp', ['../a00275.html', 1, '']]],\n+ ['cal3_2eh_1', ['Cal3.h', ['../a00407.html', 1, '']]],\n+ ['cal3_5fs2_2ecpp_2', ['Cal3_S2.cpp', ['../a00383.html', 1, '']]],\n+ ['cal3_5fs2_2eh_3', ['Cal3_S2.h', ['../a00416.html', 1, '']]],\n+ ['cal3_5fs2stereo_2ecpp_4', ['Cal3_S2Stereo.cpp', ['../a00377.html', 1, '']]],\n+ ['cal3_5fs2stereo_2eh_5', ['Cal3_S2Stereo.h', ['../a00296.html', 1, '']]],\n+ ['cal3bundler_2ecpp_6', ['Cal3Bundler.cpp', ['../a00338.html', 1, '']]],\n+ ['cal3bundler_2eh_7', ['Cal3Bundler.h', ['../a00317.html', 1, '']]],\n+ ['cal3ds2_2ecpp_8', ['Cal3DS2.cpp', ['../a00380.html', 1, '']]],\n+ ['cal3ds2_2eh_9', ['Cal3DS2.h', ['../a00284.html', 1, '']]],\n+ ['cal3ds2_5fbase_2ecpp_10', ['Cal3DS2_Base.cpp', ['../a00422.html', 1, '']]],\n+ ['cal3fisheye_2ecpp_11', ['Cal3Fisheye.cpp', ['../a00446.html', 1, '']]],\n+ ['cal3fisheye_2eh_12', ['Cal3Fisheye.h', ['../a00326.html', 1, '']]],\n+ ['cal3unified_2ecpp_13', ['Cal3Unified.cpp', ['../a00461.html', 1, '']]],\n+ ['cal3unified_2eh_14', ['Cal3Unified.h', ['../a00467.html', 1, '']]],\n+ ['calibratedcamera_2ecpp_15', ['CalibratedCamera.cpp', ['../a00314.html', 1, '']]],\n+ ['calibratedcamera_2eh_16', ['CalibratedCamera.h', ['../a00290.html', 1, '']]],\n+ ['cameraset_2eh_17', ['CameraSet.h', ['../a00293.html', 1, '']]],\n+ ['chebyshev_2ecpp_18', ['Chebyshev.cpp', ['../a00176.html', 1, '']]],\n+ ['chebyshev_2eh_19', ['Chebyshev.h', ['../a00161.html', 1, '']]],\n ['chebyshev2_2ecpp_20', ['Chebyshev2.cpp', ['../a00164.html', 1, '']]],\n- ['chebyshev2_2eh_21', ['Chebyshev2.h', ['../a00161.html', 1, '']]],\n- ['cholesky_2ecpp_22', ['cholesky.cpp', ['../a00023.html', 1, '']]],\n- ['cholesky_2eh_23', ['cholesky.h', ['../a00008.html', 1, '']]],\n- ['clustertree_2dinst_2eh_24', ['ClusterTree-inst.h', ['../a00695.html', 1, '']]],\n- ['clustertree_2eh_25', ['ClusterTree.h', ['../a00635.html', 1, '']]],\n- ['combinedimufactor_2ecpp_26', ['CombinedImuFactor.cpp', ['../a00923.html', 1, '']]],\n- ['combinedimufactor_2eh_27', ['CombinedImuFactor.h', ['../a00938.html', 1, '']]],\n+ ['chebyshev2_2eh_21', ['Chebyshev2.h', ['../a00170.html', 1, '']]],\n+ ['cholesky_2ecpp_22', ['cholesky.cpp', ['../a00125.html', 1, '']]],\n+ ['cholesky_2eh_23', ['cholesky.h', ['../a00140.html', 1, '']]],\n+ ['clustertree_2dinst_2eh_24', ['ClusterTree-inst.h', ['../a00701.html', 1, '']]],\n+ ['clustertree_2eh_25', ['ClusterTree.h', ['../a00572.html', 1, '']]],\n+ ['combinedimufactor_2ecpp_26', ['CombinedImuFactor.cpp', ['../a00950.html', 1, '']]],\n+ ['combinedimufactor_2eh_27', ['CombinedImuFactor.h', ['../a00947.html', 1, '']]],\n ['concepts_2eh_28', ['concepts.h', ['../a08128.html', 1, '']]],\n- ['conditional_2eh_29', ['Conditional.h', ['../a00587.html', 1, '']]],\n- ['conjugategradientsolver_2eh_30', ['ConjugateGradientSolver.h', ['../a00815.html', 1, '']]],\n- ['constantvelocityfactor_2eh_31', ['ConstantVelocityFactor.h', ['../a00926.html', 1, '']]],\n- ['customfactor_2ecpp_32', ['CustomFactor.cpp', ['../a01151.html', 1, '']]],\n- ['customfactor_2eh_33', ['CustomFactor.h', ['../a01031.html', 1, '']]],\n- ['cyclic_2ecpp_34', ['Cyclic.cpp', ['../a00443.html', 1, '']]],\n- ['cyclic_2eh_35', ['Cyclic.h', ['../a00317.html', 1, '']]]\n+ ['conditional_2eh_29', ['Conditional.h', ['../a00665.html', 1, '']]],\n+ ['conjugategradientsolver_2eh_30', ['ConjugateGradientSolver.h', ['../a00704.html', 1, '']]],\n+ ['constantvelocityfactor_2eh_31', ['ConstantVelocityFactor.h', ['../a00998.html', 1, '']]],\n+ ['customfactor_2ecpp_32', ['CustomFactor.cpp', ['../a01142.html', 1, '']]],\n+ ['customfactor_2eh_33', ['CustomFactor.h', ['../a01127.html', 1, '']]],\n+ ['cyclic_2ecpp_34', ['Cyclic.cpp', ['../a00335.html', 1, '']]],\n+ ['cyclic_2eh_35', ['Cyclic.h', ['../a00278.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', ['../a01247.html', 1, '']]],\n- ['dataset_2eh_1', ['dataset.h', ['../a01301.html', 1, '']]],\n- ['debug_2ecpp_2', ['debug.cpp', ['../a00005.html', 1, '']]],\n- ['debug_2eh_3', ['debug.h', ['../a00131.html', 1, '']]],\n- ['decisiontree_2eh_4', ['DecisionTree.h', ['../a00221.html', 1, '']]],\n- ['decisiontreefactor_2ecpp_5', ['DecisionTreeFactor.cpp', ['../a00197.html', 1, '']]],\n- ['decisiontreefactor_2eh_6', ['DecisionTreeFactor.h', ['../a00251.html', 1, '']]],\n- ['discretebayesnet_2ecpp_7', ['DiscreteBayesNet.cpp', ['../a00191.html', 1, '']]],\n- ['discretebayesnet_2eh_8', ['DiscreteBayesNet.h', ['../a00233.html', 1, '']]],\n- ['discretebayestree_2ecpp_9', ['DiscreteBayesTree.cpp', ['../a00245.html', 1, '']]],\n- ['discretebayestree_2eh_10', ['DiscreteBayesTree.h', ['../a00212.html', 1, '']]],\n- ['discreteconditional_2ecpp_11', ['DiscreteConditional.cpp', ['../a00242.html', 1, '']]],\n- ['discreteconditional_2eh_12', ['DiscreteConditional.h', ['../a00215.html', 1, '']]],\n- ['discretedistribution_2ecpp_13', ['DiscreteDistribution.cpp', ['../a00179.html', 1, '']]],\n- ['discretedistribution_2eh_14', ['DiscreteDistribution.h', ['../a00185.html', 1, '']]],\n- ['discreteeliminationtree_2ecpp_15', ['DiscreteEliminationTree.cpp', ['../a00218.html', 1, '']]],\n- ['discreteeliminationtree_2eh_16', ['DiscreteEliminationTree.h', ['../a00260.html', 1, '']]],\n- ['discretefactor_2ecpp_17', ['DiscreteFactor.cpp', ['../a00209.html', 1, '']]],\n- ['discretefactor_2eh_18', ['DiscreteFactor.h', ['../a00263.html', 1, '']]],\n- ['discretefactorgraph_2ecpp_19', ['DiscreteFactorGraph.cpp', ['../a00182.html', 1, '']]],\n- ['discretefactorgraph_2eh_20', ['DiscreteFactorGraph.h', ['../a00230.html', 1, '']]],\n- ['discretejunctiontree_2ecpp_21', ['DiscreteJunctionTree.cpp', ['../a00224.html', 1, '']]],\n- ['discretejunctiontree_2eh_22', ['DiscreteJunctionTree.h', ['../a00203.html', 1, '']]],\n- ['discretekey_2eh_23', ['DiscreteKey.h', ['../a00239.html', 1, '']]],\n- ['discretelookupdag_2ecpp_24', ['DiscreteLookupDAG.cpp', ['../a00188.html', 1, '']]],\n- ['discretelookupdag_2eh_25', ['DiscreteLookupDAG.h', ['../a00248.html', 1, '']]],\n- ['discretemarginals_2eh_26', ['DiscreteMarginals.h', ['../a00269.html', 1, '']]],\n- ['discretevalues_2ecpp_27', ['DiscreteValues.cpp', ['../a00206.html', 1, '']]],\n- ['discretevalues_2eh_28', ['DiscreteValues.h', ['../a00194.html', 1, '']]],\n- ['doglegoptimizer_2ecpp_29', ['DoglegOptimizer.cpp', ['../a01034.html', 1, '']]],\n- ['doglegoptimizer_2eh_30', ['DoglegOptimizer.h', ['../a01076.html', 1, '']]],\n- ['doglegoptimizerimpl_2eh_31', ['DoglegOptimizerImpl.h', ['../a01124.html', 1, '']]],\n- ['dotwriter_2ecpp_32', ['DotWriter.cpp', ['../a00692.html', 1, '']]],\n+ ['dataset_2ecpp_0', ['dataset.cpp', ['../a01289.html', 1, '']]],\n+ ['dataset_2eh_1', ['dataset.h', ['../a01247.html', 1, '']]],\n+ ['debug_2ecpp_2', ['debug.cpp', ['../a00017.html', 1, '']]],\n+ ['debug_2eh_3', ['debug.h', ['../a00038.html', 1, '']]],\n+ ['decisiontree_2eh_4', ['DecisionTree.h', ['../a00272.html', 1, '']]],\n+ ['decisiontreefactor_2ecpp_5', ['DecisionTreeFactor.cpp', ['../a00257.html', 1, '']]],\n+ ['decisiontreefactor_2eh_6', ['DecisionTreeFactor.h', ['../a00212.html', 1, '']]],\n+ ['discretebayesnet_2ecpp_7', ['DiscreteBayesNet.cpp', ['../a00263.html', 1, '']]],\n+ ['discretebayesnet_2eh_8', ['DiscreteBayesNet.h', ['../a00182.html', 1, '']]],\n+ ['discretebayestree_2ecpp_9', ['DiscreteBayesTree.cpp', ['../a00269.html', 1, '']]],\n+ ['discretebayestree_2eh_10', ['DiscreteBayesTree.h', ['../a00230.html', 1, '']]],\n+ ['discreteconditional_2ecpp_11', ['DiscreteConditional.cpp', ['../a00239.html', 1, '']]],\n+ ['discreteconditional_2eh_12', ['DiscreteConditional.h', ['../a00236.html', 1, '']]],\n+ ['discretedistribution_2ecpp_13', ['DiscreteDistribution.cpp', ['../a00203.html', 1, '']]],\n+ ['discretedistribution_2eh_14', ['DiscreteDistribution.h', ['../a00194.html', 1, '']]],\n+ ['discreteeliminationtree_2ecpp_15', ['DiscreteEliminationTree.cpp', ['../a00227.html', 1, '']]],\n+ ['discreteeliminationtree_2eh_16', ['DiscreteEliminationTree.h', ['../a00245.html', 1, '']]],\n+ ['discretefactor_2ecpp_17', ['DiscreteFactor.cpp', ['../a00188.html', 1, '']]],\n+ ['discretefactor_2eh_18', ['DiscreteFactor.h', ['../a00251.html', 1, '']]],\n+ ['discretefactorgraph_2ecpp_19', ['DiscreteFactorGraph.cpp', ['../a00191.html', 1, '']]],\n+ ['discretefactorgraph_2eh_20', ['DiscreteFactorGraph.h', ['../a00200.html', 1, '']]],\n+ ['discretejunctiontree_2ecpp_21', ['DiscreteJunctionTree.cpp', ['../a00197.html', 1, '']]],\n+ ['discretejunctiontree_2eh_22', ['DiscreteJunctionTree.h', ['../a00254.html', 1, '']]],\n+ ['discretekey_2eh_23', ['DiscreteKey.h', ['../a00185.html', 1, '']]],\n+ ['discretelookupdag_2ecpp_24', ['DiscreteLookupDAG.cpp', ['../a00248.html', 1, '']]],\n+ ['discretelookupdag_2eh_25', ['DiscreteLookupDAG.h', ['../a00266.html', 1, '']]],\n+ ['discretemarginals_2eh_26', ['DiscreteMarginals.h', ['../a00218.html', 1, '']]],\n+ ['discretevalues_2ecpp_27', ['DiscreteValues.cpp', ['../a00233.html', 1, '']]],\n+ ['discretevalues_2eh_28', ['DiscreteValues.h', ['../a00215.html', 1, '']]],\n+ ['doglegoptimizer_2ecpp_29', ['DoglegOptimizer.cpp', ['../a01121.html', 1, '']]],\n+ ['doglegoptimizer_2eh_30', ['DoglegOptimizer.h', ['../a01040.html', 1, '']]],\n+ ['doglegoptimizerimpl_2eh_31', ['DoglegOptimizerImpl.h', ['../a01022.html', 1, '']]],\n+ ['dotwriter_2ecpp_32', ['DotWriter.cpp', ['../a00644.html', 1, '']]],\n ['dotwriter_2eh_33', ['DotWriter.h', ['../a00596.html', 1, '']]],\n- ['dsfmap_2eh_34', ['DSFMap.h', ['../a00029.html', 1, '']]],\n- ['dsftrackgenerator_2ecpp_35', ['DsfTrackGenerator.cpp', ['../a01208.html', 1, '']]],\n- ['dsftrackgenerator_2eh_36', ['DsfTrackGenerator.h', ['../a01220.html', 1, '']]],\n- ['dsfvector_2ecpp_37', ['DSFVector.cpp', ['../a00122.html', 1, '']]],\n- ['dsfvector_2eh_38', ['DSFVector.h', ['../a00089.html', 1, '']]]\n+ ['dsfmap_2eh_34', ['DSFMap.h', ['../a00050.html', 1, '']]],\n+ ['dsftrackgenerator_2ecpp_35', ['DsfTrackGenerator.cpp', ['../a01190.html', 1, '']]],\n+ ['dsftrackgenerator_2eh_36', ['DsfTrackGenerator.h', ['../a01199.html', 1, '']]],\n+ ['dsfvector_2ecpp_37', ['DSFVector.cpp', ['../a00032.html', 1, '']]],\n+ ['dsfvector_2eh_38', ['DSFVector.h', ['../a00011.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', ['../a00602.html', 1, '']]],\n- ['eliminationtree_2dinst_2eh_1', ['EliminationTree-inst.h', ['../a00659.html', 1, '']]],\n- ['eliminationtree_2eh_2', ['EliminationTree.h', ['../a00653.html', 1, '']]],\n- ['errors_2ecpp_3', ['Errors.cpp', ['../a00791.html', 1, '']]],\n- ['errors_2eh_4', ['Errors.h', ['../a00857.html', 1, '']]],\n- ['essentialmatrixconstraint_2ecpp_5', ['EssentialMatrixConstraint.cpp', ['../a01259.html', 1, '']]],\n- ['essentialmatrixconstraint_2eh_6', ['EssentialMatrixConstraint.h', ['../a01337.html', 1, '']]],\n- ['expression_2dinl_2eh_7', ['Expression-inl.h', ['../a01106.html', 1, '']]],\n- ['expression_2eh_8', ['Expression.h', ['../a01055.html', 1, '']]],\n- ['expressionfactorgraph_2eh_9', ['ExpressionFactorGraph.h', ['../a01148.html', 1, '']]],\n+ ['eliminateablefactorgraph_2eh_0', ['EliminateableFactorGraph.h', ['../a00647.html', 1, '']]],\n+ ['eliminationtree_2dinst_2eh_1', ['EliminationTree-inst.h', ['../a00605.html', 1, '']]],\n+ ['eliminationtree_2eh_2', ['EliminationTree.h', ['../a00608.html', 1, '']]],\n+ ['errors_2ecpp_3', ['Errors.cpp', ['../a00761.html', 1, '']]],\n+ ['errors_2eh_4', ['Errors.h', ['../a00728.html', 1, '']]],\n+ ['essentialmatrixconstraint_2ecpp_5', ['EssentialMatrixConstraint.cpp', ['../a01265.html', 1, '']]],\n+ ['essentialmatrixconstraint_2eh_6', ['EssentialMatrixConstraint.h', ['../a01256.html', 1, '']]],\n+ ['expression_2dinl_2eh_7', ['Expression-inl.h', ['../a01118.html', 1, '']]],\n+ ['expression_2eh_8', ['Expression.h', ['../a01064.html', 1, '']]],\n+ ['expressionfactorgraph_2eh_9', ['ExpressionFactorGraph.h', ['../a01001.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', ['../a01154.html', 1, '']]],\n- ['extendedkalmanfilter_2dinl_2eh_12', ['ExtendedKalmanFilter-inl.h', ['../a01163.html', 1, '']]],\n- ['extendedkalmanfilter_2eh_13', ['ExtendedKalmanFilter.h', ['../a01013.html', 1, '']]]\n+ ['expressiontesting_2eh_11', ['expressionTesting.h', ['../a01169.html', 1, '']]],\n+ ['extendedkalmanfilter_2dinl_2eh_12', ['ExtendedKalmanFilter-inl.h', ['../a01124.html', 1, '']]],\n+ ['extendedkalmanfilter_2eh_13', ['ExtendedKalmanFilter.h', ['../a01058.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', ['../a00638.html', 1, '']]],\n- ['factor_2eh_1', ['Factor.h', ['../a00641.html', 1, '']]],\n- ['factorgraph_2dinst_2eh_2', ['FactorGraph-inst.h', ['../a00593.html', 1, '']]],\n- ['factorgraph_2eh_3', ['FactorGraph.h', ['../a00611.html', 1, '']]],\n- ['factortesting_2eh_4', ['factorTesting.h', ['../a01010.html', 1, '']]],\n- ['fastdefaultallocator_2eh_5', ['FastDefaultAllocator.h', ['../a00056.html', 1, '']]],\n- ['fastlist_2eh_6', ['FastList.h', ['../a00110.html', 1, '']]],\n- ['fastmap_2eh_7', ['FastMap.h', ['../a00071.html', 1, '']]],\n- ['fastset_2eh_8', ['FastSet.h', ['../a00113.html', 1, '']]],\n- ['fastvector_2eh_9', ['FastVector.h', ['../a00101.html', 1, '']]],\n- ['fitbasis_2eh_10', ['FitBasis.h', ['../a00176.html', 1, '']]],\n- ['fourier_2eh_11', ['Fourier.h', ['../a00158.html', 1, '']]],\n- ['frobeniusfactor_2ecpp_12', ['FrobeniusFactor.cpp', ['../a01235.html', 1, '']]],\n- ['frobeniusfactor_2eh_13', ['FrobeniusFactor.h', ['../a01295.html', 1, '']]],\n- ['functorizedfactor_2eh_14', ['FunctorizedFactor.h', ['../a01157.html', 1, '']]]\n+ ['factor_2eh_1', ['Factor.h', ['../a00659.html', 1, '']]],\n+ ['factorgraph_2dinst_2eh_2', ['FactorGraph-inst.h', ['../a00635.html', 1, '']]],\n+ ['factorgraph_2eh_3', ['FactorGraph.h', ['../a00641.html', 1, '']]],\n+ ['factortesting_2eh_4', ['factorTesting.h', ['../a01070.html', 1, '']]],\n+ ['fastdefaultallocator_2eh_5', ['FastDefaultAllocator.h', ['../a00092.html', 1, '']]],\n+ ['fastlist_2eh_6', ['FastList.h', ['../a00113.html', 1, '']]],\n+ ['fastmap_2eh_7', ['FastMap.h', ['../a00047.html', 1, '']]],\n+ ['fastset_2eh_8', ['FastSet.h', ['../a00068.html', 1, '']]],\n+ ['fastvector_2eh_9', ['FastVector.h', ['../a00071.html', 1, '']]],\n+ ['fitbasis_2eh_10', ['FitBasis.h', ['../a00173.html', 1, '']]],\n+ ['fourier_2eh_11', ['Fourier.h', ['../a00167.html', 1, '']]],\n+ ['frobeniusfactor_2ecpp_12', ['FrobeniusFactor.cpp', ['../a01328.html', 1, '']]],\n+ ['frobeniusfactor_2eh_13', ['FrobeniusFactor.h', ['../a01337.html', 1, '']]],\n+ ['functorizedfactor_2eh_14', ['FunctorizedFactor.h', ['../a01004.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', ['../a00746.html', 1, '']]],\n- ['gaussianbayesnet_2eh_1', ['GaussianBayesNet.h', ['../a00848.html', 1, '']]],\n- ['gaussianbayestree_2dinl_2eh_2', ['GaussianBayesTree-inl.h', ['../a00704.html', 1, '']]],\n- ['gaussianbayestree_2ecpp_3', ['GaussianBayesTree.cpp', ['../a00734.html', 1, '']]],\n- ['gaussianbayestree_2eh_4', ['GaussianBayesTree.h', ['../a00773.html', 1, '']]],\n- ['gaussianconditional_2dinl_2eh_5', ['GaussianConditional-inl.h', ['../a00737.html', 1, '']]],\n- ['gaussianconditional_2ecpp_6', ['GaussianConditional.cpp', ['../a00716.html', 1, '']]],\n- ['gaussianconditional_2eh_7', ['GaussianConditional.h', ['../a00833.html', 1, '']]],\n- ['gaussiandensity_2ecpp_8', ['GaussianDensity.cpp', ['../a00806.html', 1, '']]],\n- ['gaussiandensity_2eh_9', ['GaussianDensity.h', ['../a00785.html', 1, '']]],\n- ['gaussianeliminationtree_2ecpp_10', ['GaussianEliminationTree.cpp', ['../a00887.html', 1, '']]],\n- ['gaussianeliminationtree_2eh_11', ['GaussianEliminationTree.h', ['../a00713.html', 1, '']]],\n- ['gaussianfactor_2ecpp_12', ['GaussianFactor.cpp', ['../a00839.html', 1, '']]],\n- ['gaussianfactor_2eh_13', ['GaussianFactor.h', ['../a00788.html', 1, '']]],\n- ['gaussianfactorgraph_2ecpp_14', ['GaussianFactorGraph.cpp', ['../a00836.html', 1, '']]],\n- ['gaussianfactorgraph_2eh_15', ['GaussianFactorGraph.h', ['../a00899.html', 1, '']]],\n- ['gaussianisam_2eh_16', ['GaussianISAM.h', ['../a00866.html', 1, '']]],\n- ['gaussianjunctiontree_2ecpp_17', ['GaussianJunctionTree.cpp', ['../a00827.html', 1, '']]],\n- ['gaussianjunctiontree_2eh_18', ['GaussianJunctionTree.h', ['../a00878.html', 1, '']]],\n- ['gaussianmixture_2ecpp_19', ['GaussianMixture.cpp', ['../a00551.html', 1, '']]],\n- ['gaussianmixture_2eh_20', ['GaussianMixture.h', ['../a00482.html', 1, '']]],\n- ['gaussianmixturefactor_2ecpp_21', ['GaussianMixtureFactor.cpp', ['../a00533.html', 1, '']]],\n- ['gaussianmixturefactor_2eh_22', ['GaussianMixtureFactor.h', ['../a00563.html', 1, '']]],\n- ['gaussnewtonoptimizer_2ecpp_23', ['GaussNewtonOptimizer.cpp', ['../a01133.html', 1, '']]],\n- ['gaussnewtonoptimizer_2eh_24', ['GaussNewtonOptimizer.h', ['../a01067.html', 1, '']]],\n- ['generalsfmfactor_2eh_25', ['GeneralSFMFactor.h', ['../a01280.html', 1, '']]],\n- ['global_5fincludes_2eh_26', ['global_includes.h', ['../a01400.html', 1, '']]],\n- ['gncoptimizer_2eh_27', ['GncOptimizer.h', ['../a01166.html', 1, '']]],\n- ['gpsfactor_2ecpp_28', ['GPSFactor.cpp', ['../a00971.html', 1, '']]],\n+ ['gaussianbayesnet_2ecpp_0', ['GaussianBayesNet.cpp', ['../a00890.html', 1, '']]],\n+ ['gaussianbayesnet_2eh_1', ['GaussianBayesNet.h', ['../a00809.html', 1, '']]],\n+ ['gaussianbayestree_2dinl_2eh_2', ['GaussianBayesTree-inl.h', ['../a00827.html', 1, '']]],\n+ ['gaussianbayestree_2ecpp_3', ['GaussianBayesTree.cpp', ['../a00830.html', 1, '']]],\n+ ['gaussianbayestree_2eh_4', ['GaussianBayesTree.h', ['../a00782.html', 1, '']]],\n+ ['gaussianconditional_2dinl_2eh_5', ['GaussianConditional-inl.h', ['../a00716.html', 1, '']]],\n+ ['gaussianconditional_2ecpp_6', ['GaussianConditional.cpp', ['../a00824.html', 1, '']]],\n+ ['gaussianconditional_2eh_7', ['GaussianConditional.h', ['../a00866.html', 1, '']]],\n+ ['gaussiandensity_2ecpp_8', ['GaussianDensity.cpp', ['../a00893.html', 1, '']]],\n+ ['gaussiandensity_2eh_9', ['GaussianDensity.h', ['../a00752.html', 1, '']]],\n+ ['gaussianeliminationtree_2ecpp_10', ['GaussianEliminationTree.cpp', ['../a00767.html', 1, '']]],\n+ ['gaussianeliminationtree_2eh_11', ['GaussianEliminationTree.h', ['../a00740.html', 1, '']]],\n+ ['gaussianfactor_2ecpp_12', ['GaussianFactor.cpp', ['../a00731.html', 1, '']]],\n+ ['gaussianfactor_2eh_13', ['GaussianFactor.h', ['../a00803.html', 1, '']]],\n+ ['gaussianfactorgraph_2ecpp_14', ['GaussianFactorGraph.cpp', ['../a00875.html', 1, '']]],\n+ ['gaussianfactorgraph_2eh_15', ['GaussianFactorGraph.h', ['../a00725.html', 1, '']]],\n+ ['gaussianisam_2eh_16', ['GaussianISAM.h', ['../a00845.html', 1, '']]],\n+ ['gaussianjunctiontree_2ecpp_17', ['GaussianJunctionTree.cpp', ['../a00851.html', 1, '']]],\n+ ['gaussianjunctiontree_2eh_18', ['GaussianJunctionTree.h', ['../a00815.html', 1, '']]],\n+ ['gaussianmixture_2ecpp_19', ['GaussianMixture.cpp', ['../a00494.html', 1, '']]],\n+ ['gaussianmixture_2eh_20', ['GaussianMixture.h', ['../a00554.html', 1, '']]],\n+ ['gaussianmixturefactor_2ecpp_21', ['GaussianMixtureFactor.cpp', ['../a00518.html', 1, '']]],\n+ ['gaussianmixturefactor_2eh_22', ['GaussianMixtureFactor.h', ['../a00560.html', 1, '']]],\n+ ['gaussnewtonoptimizer_2ecpp_23', ['GaussNewtonOptimizer.cpp', ['../a01130.html', 1, '']]],\n+ ['gaussnewtonoptimizer_2eh_24', ['GaussNewtonOptimizer.h', ['../a01025.html', 1, '']]],\n+ ['generalsfmfactor_2eh_25', ['GeneralSFMFactor.h', ['../a01250.html', 1, '']]],\n+ ['global_5fincludes_2eh_26', ['global_includes.h', ['../a01394.html', 1, '']]],\n+ ['gncoptimizer_2eh_27', ['GncOptimizer.h', ['../a01049.html', 1, '']]],\n+ ['gpsfactor_2ecpp_28', ['GPSFactor.cpp', ['../a00977.html', 1, '']]],\n ['gpsfactor_2eh_29', ['GPSFactor.h', ['../a00995.html', 1, '']]],\n- ['graph_2eh_30', ['graph.h', ['../a00572.html', 1, '']]],\n- ['graphvizformatting_2ecpp_31', ['GraphvizFormatting.cpp', ['../a01073.html', 1, '']]],\n- ['graphvizformatting_2eh_32', ['GraphvizFormatting.h', ['../a01064.html', 1, '']]],\n- ['group_2eh_33', ['Group.h', ['../a00098.html', 1, '']]]\n+ ['graph_2eh_30', ['graph.h', ['../a00575.html', 1, '']]],\n+ ['graphvizformatting_2ecpp_31', ['GraphvizFormatting.cpp', ['../a01028.html', 1, '']]],\n+ ['graphvizformatting_2eh_32', ['GraphvizFormatting.h', ['../a01052.html', 1, '']]],\n+ ['group_2eh_33', ['Group.h', ['../a00077.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', ['../a00872.html', 1, '']]],\n- ['hessianfactor_2ecpp_1', ['HessianFactor.cpp', ['../a00707.html', 1, '']]],\n- ['hessianfactor_2eh_2', ['HessianFactor.h', ['../a00752.html', 1, '']]],\n- ['hybridbayesnet_2ecpp_3', ['HybridBayesNet.cpp', ['../a00491.html', 1, '']]],\n- ['hybridbayesnet_2eh_4', ['HybridBayesNet.h', ['../a00524.html', 1, '']]],\n- ['hybridbayestree_2ecpp_5', ['HybridBayesTree.cpp', ['../a00512.html', 1, '']]],\n- ['hybridbayestree_2eh_6', ['HybridBayesTree.h', ['../a00494.html', 1, '']]],\n- ['hybridconditional_2ecpp_7', ['HybridConditional.cpp', ['../a00509.html', 1, '']]],\n- ['hybridconditional_2eh_8', ['HybridConditional.h', ['../a00560.html', 1, '']]],\n- ['hybrideliminationtree_2ecpp_9', ['HybridEliminationTree.cpp', ['../a00515.html', 1, '']]],\n- ['hybrideliminationtree_2eh_10', ['HybridEliminationTree.h', ['../a00542.html', 1, '']]],\n- ['hybridfactor_2ecpp_11', ['HybridFactor.cpp', ['../a00566.html', 1, '']]],\n- ['hybridfactor_2eh_12', ['HybridFactor.h', ['../a00557.html', 1, '']]],\n- ['hybridfactorgraph_2ecpp_13', ['HybridFactorGraph.cpp', ['../a00521.html', 1, '']]],\n- ['hybridfactorgraph_2eh_14', ['HybridFactorGraph.h', ['../a00518.html', 1, '']]],\n- ['hybridgaussianfactorgraph_2ecpp_15', ['HybridGaussianFactorGraph.cpp', ['../a00485.html', 1, '']]],\n- ['hybridgaussianfactorgraph_2eh_16', ['HybridGaussianFactorGraph.h', ['../a00548.html', 1, '']]],\n- ['hybridgaussianisam_2eh_17', ['HybridGaussianISAM.h', ['../a00536.html', 1, '']]],\n- ['hybridjunctiontree_2ecpp_18', ['HybridJunctionTree.cpp', ['../a00500.html', 1, '']]],\n- ['hybridjunctiontree_2eh_19', ['HybridJunctionTree.h', ['../a00488.html', 1, '']]],\n- ['hybridnonlinearfactorgraph_2ecpp_20', ['HybridNonlinearFactorGraph.cpp', ['../a00569.html', 1, '']]],\n- ['hybridnonlinearfactorgraph_2eh_21', ['HybridNonlinearFactorGraph.h', ['../a00554.html', 1, '']]],\n- ['hybridnonlinearisam_2ecpp_22', ['HybridNonlinearISAM.cpp', ['../a00506.html', 1, '']]],\n- ['hybridnonlinearisam_2eh_23', ['HybridNonlinearISAM.h', ['../a00503.html', 1, '']]],\n- ['hybridsmoother_2ecpp_24', ['HybridSmoother.cpp', ['../a00530.html', 1, '']]],\n- ['hybridsmoother_2eh_25', ['HybridSmoother.h', ['../a00539.html', 1, '']]],\n- ['hybridvalues_2eh_26', ['HybridValues.h', ['../a00497.html', 1, '']]]\n+ ['hessianfactor_2dinl_2eh_0', ['HessianFactor-inl.h', ['../a00899.html', 1, '']]],\n+ ['hessianfactor_2ecpp_1', ['HessianFactor.cpp', ['../a00848.html', 1, '']]],\n+ ['hessianfactor_2eh_2', ['HessianFactor.h', ['../a00887.html', 1, '']]],\n+ ['hybridbayesnet_2ecpp_3', ['HybridBayesNet.cpp', ['../a00485.html', 1, '']]],\n+ ['hybridbayesnet_2eh_4', ['HybridBayesNet.h', ['../a00539.html', 1, '']]],\n+ ['hybridbayestree_2ecpp_5', ['HybridBayesTree.cpp', ['../a00527.html', 1, '']]],\n+ ['hybridbayestree_2eh_6', ['HybridBayesTree.h', ['../a00524.html', 1, '']]],\n+ ['hybridconditional_2ecpp_7', ['HybridConditional.cpp', ['../a00482.html', 1, '']]],\n+ ['hybridconditional_2eh_8', ['HybridConditional.h', ['../a00536.html', 1, '']]],\n+ ['hybrideliminationtree_2ecpp_9', ['HybridEliminationTree.cpp', ['../a00488.html', 1, '']]],\n+ ['hybrideliminationtree_2eh_10', ['HybridEliminationTree.h', ['../a00521.html', 1, '']]],\n+ ['hybridfactor_2ecpp_11', ['HybridFactor.cpp', ['../a00563.html', 1, '']]],\n+ ['hybridfactor_2eh_12', ['HybridFactor.h', ['../a00551.html', 1, '']]],\n+ ['hybridfactorgraph_2ecpp_13', ['HybridFactorGraph.cpp', ['../a00569.html', 1, '']]],\n+ ['hybridfactorgraph_2eh_14', ['HybridFactorGraph.h', ['../a00497.html', 1, '']]],\n+ ['hybridgaussianfactorgraph_2ecpp_15', ['HybridGaussianFactorGraph.cpp', ['../a00542.html', 1, '']]],\n+ ['hybridgaussianfactorgraph_2eh_16', ['HybridGaussianFactorGraph.h', ['../a00503.html', 1, '']]],\n+ ['hybridgaussianisam_2eh_17', ['HybridGaussianISAM.h', ['../a00491.html', 1, '']]],\n+ ['hybridjunctiontree_2ecpp_18', ['HybridJunctionTree.cpp', ['../a00509.html', 1, '']]],\n+ ['hybridjunctiontree_2eh_19', ['HybridJunctionTree.h', ['../a00506.html', 1, '']]],\n+ ['hybridnonlinearfactorgraph_2ecpp_20', ['HybridNonlinearFactorGraph.cpp', ['../a00557.html', 1, '']]],\n+ ['hybridnonlinearfactorgraph_2eh_21', ['HybridNonlinearFactorGraph.h', ['../a00500.html', 1, '']]],\n+ ['hybridnonlinearisam_2ecpp_22', ['HybridNonlinearISAM.cpp', ['../a00533.html', 1, '']]],\n+ ['hybridnonlinearisam_2eh_23', ['HybridNonlinearISAM.h', ['../a00530.html', 1, '']]],\n+ ['hybridsmoother_2ecpp_24', ['HybridSmoother.cpp', ['../a00548.html', 1, '']]],\n+ ['hybridsmoother_2eh_25', ['HybridSmoother.h', ['../a00512.html', 1, '']]],\n+ ['hybridvalues_2eh_26', ['HybridValues.h', ['../a00515.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', ['../a00956.html', 1, '']]],\n- ['imubias_2eh_1', ['ImuBias.h', ['../a00944.html', 1, '']]],\n- ['imufactor_2ecpp_2', ['ImuFactor.cpp', ['../a00911.html', 1, '']]],\n- ['imufactor_2eh_3', ['ImuFactor.h', ['../a00986.html', 1, '']]],\n- ['inference_2dinst_2eh_4', ['inference-inst.h', ['../a00626.html', 1, '']]],\n- ['inferenceexceptions_2eh_5', ['inferenceExceptions.h', ['../a00674.html', 1, '']]],\n- ['initializepose_2eh_6', ['InitializePose.h', ['../a01328.html', 1, '']]],\n- ['initializepose3_2ecpp_7', ['InitializePose3.cpp', ['../a01331.html', 1, '']]],\n- ['initializepose3_2eh_8', ['InitializePose3.h', ['../a01292.html', 1, '']]],\n- ['isam_2dinst_2eh_9', ['ISAM-inst.h', ['../a00647.html', 1, '']]],\n- ['isam_2eh_10', ['ISAM.h', ['../a00662.html', 1, '']]],\n+ ['imubias_2ecpp_0', ['ImuBias.cpp', ['../a00929.html', 1, '']]],\n+ ['imubias_2eh_1', ['ImuBias.h', ['../a00953.html', 1, '']]],\n+ ['imufactor_2ecpp_2', ['ImuFactor.cpp', ['../a00962.html', 1, '']]],\n+ ['imufactor_2eh_3', ['ImuFactor.h', ['../a00926.html', 1, '']]],\n+ ['inference_2dinst_2eh_4', ['inference-inst.h', ['../a00593.html', 1, '']]],\n+ ['inferenceexceptions_2eh_5', ['inferenceExceptions.h', ['../a00653.html', 1, '']]],\n+ ['initializepose_2eh_6', ['InitializePose.h', ['../a01283.html', 1, '']]],\n+ ['initializepose3_2ecpp_7', ['InitializePose3.cpp', ['../a01304.html', 1, '']]],\n+ ['initializepose3_2eh_8', ['InitializePose3.h', ['../a01274.html', 1, '']]],\n+ ['isam_2dinst_2eh_9', ['ISAM-inst.h', ['../a00578.html', 1, '']]],\n+ ['isam_2eh_10', ['ISAM.h', ['../a00698.html', 1, '']]],\n ['isam2_2dimpl_2ecpp_11', ['ISAM2-impl.cpp', ['../a01043.html', 1, '']]],\n- ['isam2_2dimpl_2eh_12', ['ISAM2-impl.h', ['../a01139.html', 1, '']]],\n- ['isam2_2ecpp_13', ['ISAM2.cpp', ['../a01082.html', 1, '']]],\n- ['isam2_2eh_14', ['ISAM2.h', ['../a01142.html', 1, '']]],\n- ['isam2clique_2ecpp_15', ['ISAM2Clique.cpp', ['../a01103.html', 1, '']]],\n- ['isam2clique_2eh_16', ['ISAM2Clique.h', ['../a01040.html', 1, '']]],\n- ['isam2params_2ecpp_17', ['ISAM2Params.cpp', ['../a01052.html', 1, '']]],\n- ['isam2params_2eh_18', ['ISAM2Params.h', ['../a01025.html', 1, '']]],\n- ['isam2result_2eh_19', ['ISAM2Result.h', ['../a01115.html', 1, '']]],\n- ['isam2updateparams_2eh_20', ['ISAM2UpdateParams.h', ['../a01061.html', 1, '']]],\n- ['iterative_2dinl_2eh_21', ['iterative-inl.h', ['../a00722.html', 1, '']]],\n- ['iterative_2ecpp_22', ['iterative.cpp', ['../a00851.html', 1, '']]],\n- ['iterative_2eh_23', ['iterative.h', ['../a00881.html', 1, '']]],\n+ ['isam2_2dimpl_2eh_12', ['ISAM2-impl.h', ['../a01115.html', 1, '']]],\n+ ['isam2_2ecpp_13', ['ISAM2.cpp', ['../a01088.html', 1, '']]],\n+ ['isam2_2eh_14', ['ISAM2.h', ['../a01163.html', 1, '']]],\n+ ['isam2clique_2ecpp_15', ['ISAM2Clique.cpp', ['../a01172.html', 1, '']]],\n+ ['isam2clique_2eh_16', ['ISAM2Clique.h', ['../a01151.html', 1, '']]],\n+ ['isam2params_2ecpp_17', ['ISAM2Params.cpp', ['../a01016.html', 1, '']]],\n+ ['isam2params_2eh_18', ['ISAM2Params.h', ['../a01019.html', 1, '']]],\n+ ['isam2result_2eh_19', ['ISAM2Result.h', ['../a01094.html', 1, '']]],\n+ ['isam2updateparams_2eh_20', ['ISAM2UpdateParams.h', ['../a01046.html', 1, '']]],\n+ ['iterative_2dinl_2eh_21', ['iterative-inl.h', ['../a00872.html', 1, '']]],\n+ ['iterative_2ecpp_22', ['iterative.cpp', ['../a00797.html', 1, '']]],\n+ ['iterative_2eh_23', ['iterative.h', ['../a00770.html', 1, '']]],\n ['iterativesolver_2ecpp_24', ['IterativeSolver.cpp', ['../a00779.html', 1, '']]],\n- ['iterativesolver_2eh_25', ['IterativeSolver.h', ['../a00797.html', 1, '']]]\n+ ['iterativesolver_2eh_25', ['IterativeSolver.h', ['../a00713.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', ['../a00719.html', 1, '']]],\n- ['jacobianfactor_2eh_1', ['JacobianFactor.h', ['../a00761.html', 1, '']]],\n- ['junctiontree_2dinst_2eh_2', ['JunctionTree-inst.h', ['../a00620.html', 1, '']]],\n- ['junctiontree_2eh_3', ['JunctionTree.h', ['../a00632.html', 1, '']]]\n+ ['jacobianfactor_2ecpp_0', ['JacobianFactor.cpp', ['../a00878.html', 1, '']]],\n+ ['jacobianfactor_2eh_1', ['JacobianFactor.h', ['../a00833.html', 1, '']]],\n+ ['junctiontree_2dinst_2eh_2', ['JunctionTree-inst.h', ['../a00584.html', 1, '']]],\n+ ['junctiontree_2eh_3', ['JunctionTree.h', ['../a00614.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', ['../a00809.html', 1, '']]],\n- ['kalmanfilter_2eh_1', ['KalmanFilter.h', ['../a00863.html', 1, '']]],\n- ['key_2eh_2', ['Key.h', ['../a00581.html', 1, '']]]\n+ ['kalmanfilter_2ecpp_0', ['KalmanFilter.cpp', ['../a00836.html', 1, '']]],\n+ ['kalmanfilter_2eh_1', ['KalmanFilter.h', ['../a00884.html', 1, '']]],\n+ ['key_2eh_2', ['Key.h', ['../a00662.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', ['../a00665.html', 1, '']]],\n- ['lago_2eh_1', ['lago.h', ['../a01289.html', 1, '']]],\n- ['levenbergmarquardtoptimizer_2ecpp_2', ['LevenbergMarquardtOptimizer.cpp', ['../a01091.html', 1, '']]],\n- ['levenbergmarquardtoptimizer_2eh_3', ['LevenbergMarquardtOptimizer.h', ['../a01085.html', 1, '']]],\n- ['levenbergmarquardtparams_2ecpp_4', ['LevenbergMarquardtParams.cpp', ['../a01079.html', 1, '']]],\n- ['levenbergmarquardtparams_2eh_5', ['LevenbergMarquardtParams.h', ['../a01121.html', 1, '']]],\n- ['lie_2eh_6', ['Lie.h', ['../a00011.html', 1, '']]],\n- ['lieproxies_2eh_7', ['lieProxies.h', ['../a00074.html', 1, '']]],\n- ['line3_2eh_8', ['Line3.h', ['../a00422.html', 1, '']]],\n- ['linearalgorithms_2dinst_2eh_9', ['linearAlgorithms-inst.h', ['../a00821.html', 1, '']]],\n- ['linearcontainerfactor_2ecpp_10', ['LinearContainerFactor.cpp', ['../a01058.html', 1, '']]],\n- ['linearcontainerfactor_2eh_11', ['LinearContainerFactor.h', ['../a01172.html', 1, '']]],\n- ['linearexceptions_2ecpp_12', ['linearExceptions.cpp', ['../a00818.html', 1, '']]],\n- ['linearexceptions_2eh_13', ['linearExceptions.h', ['../a00749.html', 1, '']]]\n+ ['labeledsymbol_2eh_0', ['LabeledSymbol.h', ['../a00677.html', 1, '']]],\n+ ['lago_2eh_1', ['lago.h', ['../a01301.html', 1, '']]],\n+ ['levenbergmarquardtoptimizer_2ecpp_2', ['LevenbergMarquardtOptimizer.cpp', ['../a01139.html', 1, '']]],\n+ ['levenbergmarquardtoptimizer_2eh_3', ['LevenbergMarquardtOptimizer.h', ['../a01106.html', 1, '']]],\n+ ['levenbergmarquardtparams_2ecpp_4', ['LevenbergMarquardtParams.cpp', ['../a01103.html', 1, '']]],\n+ ['levenbergmarquardtparams_2eh_5', ['LevenbergMarquardtParams.h', ['../a01157.html', 1, '']]],\n+ ['lie_2eh_6', ['Lie.h', ['../a00062.html', 1, '']]],\n+ ['lieproxies_2eh_7', ['lieProxies.h', ['../a00104.html', 1, '']]],\n+ ['line3_2eh_8', ['Line3.h', ['../a00458.html', 1, '']]],\n+ ['linearalgorithms_2dinst_2eh_9', ['linearAlgorithms-inst.h', ['../a00806.html', 1, '']]],\n+ ['linearcontainerfactor_2ecpp_10', ['LinearContainerFactor.cpp', ['../a01067.html', 1, '']]],\n+ ['linearcontainerfactor_2eh_11', ['LinearContainerFactor.h', ['../a01034.html', 1, '']]],\n+ ['linearexceptions_2ecpp_12', ['linearExceptions.cpp', ['../a00839.html', 1, '']]],\n+ ['linearexceptions_2eh_13', ['linearExceptions.h', ['../a00722.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', ['../a00980.html', 1, '']]],\n- ['make_5fshared_2eh_1', ['make_shared.h', ['../a00047.html', 1, '']]],\n- ['manifold_2eh_2', ['Manifold.h', ['../a00104.html', 1, '']]],\n- ['manifoldpreintegration_2ecpp_3', ['ManifoldPreintegration.cpp', ['../a00935.html', 1, '']]],\n- ['manifoldpreintegration_2eh_4', ['ManifoldPreintegration.h', ['../a00992.html', 1, '']]],\n- ['marginals_2ecpp_5', ['Marginals.cpp', ['../a01130.html', 1, '']]],\n- ['marginals_2eh_6', ['Marginals.h', ['../a01070.html', 1, '']]],\n+ ['magfactor_2eh_0', ['MagFactor.h', ['../a00992.html', 1, '']]],\n+ ['make_5fshared_2eh_1', ['make_shared.h', ['../a00026.html', 1, '']]],\n+ ['manifold_2eh_2', ['Manifold.h', ['../a00107.html', 1, '']]],\n+ ['manifoldpreintegration_2ecpp_3', ['ManifoldPreintegration.cpp', ['../a00959.html', 1, '']]],\n+ ['manifoldpreintegration_2eh_4', ['ManifoldPreintegration.h', ['../a00905.html', 1, '']]],\n+ ['marginals_2ecpp_5', ['Marginals.cpp', ['../a01109.html', 1, '']]],\n+ ['marginals_2eh_6', ['Marginals.h', ['../a01061.html', 1, '']]],\n ['matrix_2ecpp_7', ['Matrix.cpp', ['../a00080.html', 1, '']]],\n- ['matrix_2eh_8', ['Matrix.h', ['../a00146.html', 1, '']]],\n- ['matrixserialization_2eh_9', ['MatrixSerialization.h', ['../a00026.html', 1, '']]],\n- ['metisindex_2dinl_2eh_10', ['MetisIndex-inl.h', ['../a00614.html', 1, '']]],\n- ['metisindex_2eh_11', ['MetisIndex.h', ['../a00599.html', 1, '']]],\n+ ['matrix_2eh_8', ['Matrix.h', ['../a00119.html', 1, '']]],\n+ ['matrixserialization_2eh_9', ['MatrixSerialization.h', ['../a00059.html', 1, '']]],\n+ ['metisindex_2dinl_2eh_10', ['MetisIndex-inl.h', ['../a00668.html', 1, '']]],\n+ ['metisindex_2eh_11', ['MetisIndex.h', ['../a00689.html', 1, '']]],\n ['mfas_2ecpp_12', ['MFAS.cpp', ['../a01184.html', 1, '']]],\n- ['mfas_2eh_13', ['MFAS.h', ['../a01199.html', 1, '']]],\n- ['mixturefactor_2eh_14', ['MixtureFactor.h', ['../a00527.html', 1, '']]]\n+ ['mfas_2eh_13', ['MFAS.h', ['../a01223.html', 1, '']]],\n+ ['mixturefactor_2eh_14', ['MixtureFactor.h', ['../a00545.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', ['../a00959.html', 1, '']]],\n- ['noisemodel_2ecpp_1', ['NoiseModel.cpp', ['../a00740.html', 1, '']]],\n- ['noisemodel_2eh_2', ['NoiseModel.h', ['../a00755.html', 1, '']]],\n- ['nonlinearconjugategradientoptimizer_2ecpp_3', ['NonlinearConjugateGradientOptimizer.cpp', ['../a01046.html', 1, '']]],\n- ['nonlinearconjugategradientoptimizer_2eh_4', ['NonlinearConjugateGradientOptimizer.h', ['../a01160.html', 1, '']]],\n- ['nonlinearexceptions_2eh_5', ['nonlinearExceptions.h', ['../a01100.html', 1, '']]],\n+ ['navstate_2eh_0', ['NavState.h', ['../a00986.html', 1, '']]],\n+ ['noisemodel_2ecpp_1', ['NoiseModel.cpp', ['../a00791.html', 1, '']]],\n+ ['noisemodel_2eh_2', ['NoiseModel.h', ['../a00788.html', 1, '']]],\n+ ['nonlinearconjugategradientoptimizer_2ecpp_3', ['NonlinearConjugateGradientOptimizer.cpp', ['../a01055.html', 1, '']]],\n+ ['nonlinearconjugategradientoptimizer_2eh_4', ['NonlinearConjugateGradientOptimizer.h', ['../a01097.html', 1, '']]],\n+ ['nonlinearexceptions_2eh_5', ['nonlinearExceptions.h', ['../a01073.html', 1, '']]],\n ['nonlinearfactor_2ecpp_6', ['NonlinearFactor.cpp', ['../a01136.html', 1, '']]],\n- ['nonlinearfactor_2eh_7', ['NonlinearFactor.h', ['../a01169.html', 1, '']]],\n- ['nonlinearfactorgraph_2ecpp_8', ['NonlinearFactorGraph.cpp', ['../a01022.html', 1, '']]],\n- ['nonlinearfactorgraph_2eh_9', ['NonlinearFactorGraph.h', ['../a01094.html', 1, '']]],\n- ['nonlinearisam_2ecpp_10', ['NonlinearISAM.cpp', ['../a01145.html', 1, '']]],\n- ['nonlinearisam_2eh_11', ['NonlinearISAM.h', ['../a01118.html', 1, '']]],\n- ['nonlinearoptimizer_2ecpp_12', ['NonlinearOptimizer.cpp', ['../a01049.html', 1, '']]],\n- ['nonlinearoptimizer_2eh_13', ['NonlinearOptimizer.h', ['../a01019.html', 1, '']]],\n- ['nonlinearoptimizerparams_2ecpp_14', ['NonlinearOptimizerParams.cpp', ['../a01001.html', 1, '']]],\n- ['nonlinearoptimizerparams_2eh_15', ['NonlinearOptimizerParams.h', ['../a01127.html', 1, '']]],\n- ['numericalderivative_2eh_16', ['numericalDerivative.h', ['../a00032.html', 1, '']]]\n+ ['nonlinearfactor_2eh_7', ['NonlinearFactor.h', ['../a01013.html', 1, '']]],\n+ ['nonlinearfactorgraph_2ecpp_8', ['NonlinearFactorGraph.cpp', ['../a01166.html', 1, '']]],\n+ ['nonlinearfactorgraph_2eh_9', ['NonlinearFactorGraph.h', ['../a01112.html', 1, '']]],\n+ ['nonlinearisam_2ecpp_10', ['NonlinearISAM.cpp', ['../a01091.html', 1, '']]],\n+ ['nonlinearisam_2eh_11', ['NonlinearISAM.h', ['../a01010.html', 1, '']]],\n+ ['nonlinearoptimizer_2ecpp_12', ['NonlinearOptimizer.cpp', ['../a01100.html', 1, '']]],\n+ ['nonlinearoptimizer_2eh_13', ['NonlinearOptimizer.h', ['../a01082.html', 1, '']]],\n+ ['nonlinearoptimizerparams_2ecpp_14', ['NonlinearOptimizerParams.cpp', ['../a01076.html', 1, '']]],\n+ ['nonlinearoptimizerparams_2eh_15', ['NonlinearOptimizerParams.h', ['../a01031.html', 1, '']]],\n+ ['numericalderivative_2eh_16', ['numericalDerivative.h', ['../a00023.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', ['../a00020.html', 1, '']]],\n- ['ordering_2ecpp_1', ['Ordering.cpp', ['../a00584.html', 1, '']]],\n- ['ordering_2eh_2', ['Ordering.h', ['../a00668.html', 1, '']]]\n+ ['optionaljacobian_2eh_0', ['OptionalJacobian.h', ['../a00149.html', 1, '']]],\n+ ['ordering_2ecpp_1', ['Ordering.cpp', ['../a00617.html', 1, '']]],\n+ ['ordering_2eh_2', ['Ordering.h', ['../a00629.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', ['../a00155.html', 1, '']]],\n- ['pinholecamera_2eh_1', ['PinholeCamera.h', ['../a00335.html', 1, '']]],\n- ['pinholepose_2eh_2', ['PinholePose.h', ['../a00467.html', 1, '']]],\n- ['pinholeset_2eh_3', ['PinholeSet.h', ['../a00383.html', 1, '']]],\n- ['point2_2ecpp_4', ['Point2.cpp', ['../a00476.html', 1, '']]],\n- ['point2_2eh_5', ['Point2.h', ['../a00449.html', 1, '']]],\n- ['point3_2ecpp_6', ['Point3.cpp', ['../a00395.html', 1, '']]],\n- ['point3_2eh_7', ['Point3.h', ['../a00344.html', 1, '']]],\n- ['pose2_2ecpp_8', ['Pose2.cpp', ['../a00326.html', 1, '']]],\n- ['pose2_2eh_9', ['Pose2.h', ['../a00398.html', 1, '']]],\n- ['pose3_2ecpp_10', ['Pose3.cpp', ['../a00455.html', 1, '']]],\n- ['pose3_2eh_11', ['Pose3.h', ['../a00341.html', 1, '']]],\n- ['poserotationprior_2eh_12', ['PoseRotationPrior.h', ['../a01325.html', 1, '']]],\n- ['posetranslationprior_2eh_13', ['PoseTranslationPrior.h', ['../a01334.html', 1, '']]],\n- ['powermethod_2eh_14', ['PowerMethod.h', ['../a00758.html', 1, '']]],\n- ['precompiled_5fheader_2ecpp_15', ['precompiled_header.cpp', ['../a01397.html', 1, '']]],\n- ['precompiled_5fheader_2eh_16', ['precompiled_header.h', ['../a01403.html', 1, '']]],\n- ['preintegratedrotation_2ecpp_17', ['PreintegratedRotation.cpp', ['../a00968.html', 1, '']]],\n- ['preintegratedrotation_2eh_18', ['PreintegratedRotation.h', ['../a00908.html', 1, '']]],\n- ['preintegrationbase_2eh_19', ['PreintegrationBase.h', ['../a00983.html', 1, '']]],\n- ['preintegrationparams_2eh_20', ['PreintegrationParams.h', ['../a00905.html', 1, '']]],\n+ ['pinholecamera_2eh_1', ['PinholeCamera.h', ['../a00350.html', 1, '']]],\n+ ['pinholepose_2eh_2', ['PinholePose.h', ['../a00320.html', 1, '']]],\n+ ['pinholeset_2eh_3', ['PinholeSet.h', ['../a00299.html', 1, '']]],\n+ ['point2_2ecpp_4', ['Point2.cpp', ['../a00443.html', 1, '']]],\n+ ['point2_2eh_5', ['Point2.h', ['../a00473.html', 1, '']]],\n+ ['point3_2ecpp_6', ['Point3.cpp', ['../a00440.html', 1, '']]],\n+ ['point3_2eh_7', ['Point3.h', ['../a00371.html', 1, '']]],\n+ ['pose2_2ecpp_8', ['Pose2.cpp', ['../a00329.html', 1, '']]],\n+ ['pose2_2eh_9', ['Pose2.h', ['../a00368.html', 1, '']]],\n+ ['pose3_2ecpp_10', ['Pose3.cpp', ['../a00431.html', 1, '']]],\n+ ['pose3_2eh_11', ['Pose3.h', ['../a00398.html', 1, '']]],\n+ ['poserotationprior_2eh_12', ['PoseRotationPrior.h', ['../a01286.html', 1, '']]],\n+ ['posetranslationprior_2eh_13', ['PoseTranslationPrior.h', ['../a01310.html', 1, '']]],\n+ ['powermethod_2eh_14', ['PowerMethod.h', ['../a00800.html', 1, '']]],\n+ ['precompiled_5fheader_2ecpp_15', ['precompiled_header.cpp', ['../a01406.html', 1, '']]],\n+ ['precompiled_5fheader_2eh_16', ['precompiled_header.h', ['../a01400.html', 1, '']]],\n+ ['preintegratedrotation_2ecpp_17', ['PreintegratedRotation.cpp', ['../a00989.html', 1, '']]],\n+ ['preintegratedrotation_2eh_18', ['PreintegratedRotation.h', ['../a00917.html', 1, '']]],\n+ ['preintegrationbase_2eh_19', ['PreintegrationBase.h', ['../a00938.html', 1, '']]],\n+ ['preintegrationparams_2eh_20', ['PreintegrationParams.h', ['../a00923.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', ['../a00095.html', 1, '']]],\n- ['projectionfactor_2eh_23', ['ProjectionFactor.h', ['../a01283.html', 1, '']]]\n+ ['productliegroup_2eh_22', ['ProductLieGroup.h', ['../a00002.html', 1, '']]],\n+ ['projectionfactor_2eh_23', ['ProjectionFactor.h', ['../a01280.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', ['../a00074.html#a644bbe6719d8dd756e11e8b3d2fd229a', 1, 'gtsam::testing::rotate()'],\n+ ['rotate_55', ['rotate', ['../a00104.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', ['../a00026.html#a068f1f8df2afd609744bc82386259e71', 1, 'boost::serialization::save()'],\n+ ['save_6', ['save', ['../a00059.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', ['../a01208.html#ac50218675ff25e1e9202d335ecfa6b3a', 1, 'gtsam::gtsfm']]],\n+ ['tracksfrompairwisematches_19', ['tracksFromPairwiseMatches', ['../a01190.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', ['../a00074.html#a72a7c561cc91f437a22023297fb7f658', 1, 'gtsam::testing::between()'],\n+ ['between_26', ['between', ['../a00104.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', ['../a00365.html#a72fc8b10f24d82aa8a4c99f99403fe5e', 1, 'gtsam::so3']]],\n+ ['compose_70', ['compose', ['../a00419.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', ['../a00365.html#a7c7e26b6d07ec0f16363c196247b294d', 1, 'gtsam::so3']]],\n+ ['dcompose_4', ['Dcompose', ['../a00419.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', ['../a00311.html#afdaebcf25a03a9a9986d35d2831605dd', 1, 'gtsam::internal']]],\n+ ['dimensionso_49', ['DimensionSO', ['../a00464.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- ['../a01343.html#ae394348e1a503834f713405afa9afad8', 1, 'gtsam::internal::EliminateSymbolic()']\n+ ['../a01382.html#ae394348e1a503834f713405afa9afad8', 1, 'gtsam::internal::EliminateSymbolic()']\n ]],\n- ['eliminatetree_16', ['EliminateTree', ['../a00626.html#ae955942fde34b4cf32ac3573a1aa1e29', 1, 'gtsam::inference']]],\n+ ['eliminatetree_16', ['EliminateTree', ['../a00593.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- ['../a00074.html#aaa623dd059a67523b029af6ec20a38da', 1, 'gtsam::testing::inverse()'],\n+ ['../a00104.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/a00011.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00062.js", "comments": ["Files 9% similar despite different names"], "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,16 +1,16 @@\n-var a00011 = [\n+var a00062 = [\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\", \"a00011.html#aeef5af7d583d275fbc0e6e5af8bf2afc\", null],\n- [\"BCH\", \"a00011.html#adbd55c711e6ceee791b595558eb3ec8a\", null],\n- [\"between_default\", \"a00011.html#abd92914d0822d42584d46f31fb500048\", null],\n- [\"expm\", \"a00011.html#a3041816208c79ef76d3ef2e0991d90b2\", null],\n- [\"expmap_default\", \"a00011.html#af5a7c0a7422c38a0baa131c073e233ac\", null],\n- [\"interpolate\", \"a00011.html#adaf06b04fa93b050e99bc3d571d85d53\", null],\n- [\"logmap_default\", \"a00011.html#a5c6ccec4a3ea452361c0956766bccef5\", null],\n- [\"wedge\", \"a00011.html#afe28b7f8e3592fb9f5cf9ebae09497ba\", null]\n+ [\"GTSAM_CONCEPT_LIE_INST\", \"a00062.html#aeef5af7d583d275fbc0e6e5af8bf2afc\", null],\n+ [\"BCH\", \"a00062.html#adbd55c711e6ceee791b595558eb3ec8a\", null],\n+ [\"between_default\", \"a00062.html#abd92914d0822d42584d46f31fb500048\", null],\n+ [\"expm\", \"a00062.html#a3041816208c79ef76d3ef2e0991d90b2\", null],\n+ [\"expmap_default\", \"a00062.html#af5a7c0a7422c38a0baa131c073e233ac\", null],\n+ [\"interpolate\", \"a00062.html#adaf06b04fa93b050e99bc3d571d85d53\", null],\n+ [\"logmap_default\", \"a00062.html#a5c6ccec4a3ea452361c0956766bccef5\", null],\n+ [\"wedge\", \"a00062.html#afe28b7f8e3592fb9f5cf9ebae09497ba\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00014_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00005_source.html", "comments": ["Files 0% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n
    \n
    \n
    \n \n \n
    \n \n
    \n
    \n \n
    \n
    TestableAssertions.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/Testable.h>
    \n-\n+
    20#include <gtsam/base/Testable.h>
    \n+\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@@ -469,28 +469,28 @@\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+
    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
    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"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00032_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00023_source.html", "comments": ["Files 0% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n \n
    \n
    numericalDerivative.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@@ -117,18 +117,18 @@\n
    10 * -------------------------------------------------------------------------- */
    \n
    11
    \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+\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@@ -988,18 +988,18 @@\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+
    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
    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@@ -1026,13 +1026,13 @@\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"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00035.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00290.html", "comments": ["Files 8% 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/ThreadsafeException.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@@ -67,15 +67,15 @@\n
    \n
    \n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n-
    ThreadsafeException.h File Reference
    \n+
    CalibratedCamera.h File Reference
    \n
    \n
    \n \n-

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

    Calibrated camera for which only pose is unknown. \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 Classes

    class  gtsam::ThreadsafeException< DERIVED >
     Base exception type that uses tbb_allocator if GTSAM is compiled with TBB. More...
    class  gtsam::CheiralityException
     
    class  gtsam::RuntimeErrorThreadsafe
     Thread-safe runtime error exception. More...
    class  gtsam::PinholeBase
     A pinhole camera class that has a Pose3, functions as base class for all pinhole cameras. More...
     
    class  gtsam::OutOfRangeThreadsafe
     Thread-safe out of range exception. More...
    class  gtsam::CalibratedCamera
     A Calibrated camera class [R|-R't], calibration K=I. More...
     
    class  gtsam::InvalidArgumentThreadsafe
     Thread-safe invalid argument exception. More...
    struct  gtsam::traits< CalibratedCamera >
     
    class  gtsam::CholeskyFailed
     Indicate Cholesky factorization failure. More...
    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-

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

    \n-
    Author
    Richard Roberts
    \n-
    Date
    Aug 21, 2010
    \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,42 +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-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+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:_\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+ 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-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+ 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-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+ 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-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+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-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+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-Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.\n- Author\n- Richard Roberts\n+Calibrated camera for which only pose is unknown.\n Date\n- Aug 21, 2010\n+ Aug 17, 2009\n+ Author\n+ Frank Dellaert\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+ * _\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 * Generated on Tue Jan 9 2024 05:51: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/a00845.html", "comments": ["Files 4% 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/Value.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianISAM.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-
    Value.h File Reference
    \n+
    GaussianISAM.h File Reference
    \n
    \n
    \n \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+

    Go to the source code of this file.

    \n \n \n-\n-\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...
    class  gtsam::GaussianISAM
     
    struct  gtsam::traits< GaussianISAM >
     traits 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 any variable that can be optimized or used in a factor.

    \n-
    Author
    Richard Roberts
    \n-
    Date
    Jan 14, 2012
    \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,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-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+GaussianISAM.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:_\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+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\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 _\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 *\b**\b**\b**\b**\b* D\bDe\bet\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+ Date\n+ July 29, 2013\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- * _\bV_\ba_\bl_\bu_\be_\b._\bh\n+ * _\bl_\bi_\bn_\be_\ba_\br\n+ * _\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/a00041_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00179_source.html", "comments": ["Files 7% 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/Value.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@@ -72,15 +72,15 @@\n
    \n
    \n
    \n \n \n
    \n \n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    Value.h
    \n+
    Signature.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/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+
    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-
    68 virtual Value* retract_(const Vector& delta) const = 0;
    \n+
    62 private:
    \n+
    63
    \n+
    65 DiscreteKey key_;
    \n+
    66
    \n+
    68 DiscreteKeys parents_;
    \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+
    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+
    76 public:
    \n+
    88 Signature(const DiscreteKey& key, const DiscreteKeys& parents,
    \n+
    89 const Table& table);
    \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+
    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} /* namespace gtsam */
    \n-
    130
    \n-
    131BOOST_SERIALIZATION_ASSUME_ABSTRACT(gtsam::Value)
    \n-
    typedef and functions to augment Eigen's VectorXd
    \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+
    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-
    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+
    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
    \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-Value.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@@ -15,105 +15,119 @@\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-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+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-_\b6_\b8 virtual _\bV_\ba_\bl_\bu_\be* _\br_\be_\bt_\br_\ba_\bc_\bt_\b_(const Vector& delta) const = 0;\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-_\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+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+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-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+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} /* 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+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+_\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:_\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:_\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\n- * _\bb_\ba_\bs_\be\n- * _\bV_\ba_\bl_\bu_\be_\b._\bh\n+ * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\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/a00074.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00038.html", "comments": ["Files 14% 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/lieProxies.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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n \n
    \n \n-
    lieProxies.h File Reference
    \n+
    debug.h File Reference
    \n
    \n
    \n \n-

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

    Global debugging flags. \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 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 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+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 convenient mappings of common member functions for testing.

    \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,40 +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-lieProxies.h File Reference\n-Provides convenient mappings of common member functions for testing. _\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-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+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-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+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 convenient mappings of common member functions for testing.\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- * _\bl_\bi_\be_\bP_\br_\bo_\bx_\bi_\be_\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/a00083.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00077.js", "comments": ["Files 22% similar despite different names"], "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,10 +1,12 @@\n-var a00083 = [\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\", \"a00083.html#abe0a238cdd07d484ff0be56ae945b182\", null],\n- [\"assert_equal\", \"a00083.html#a659619cca082d1c10b07c033d48c54da\", null],\n- [\"equal\", \"a00083.html#a1f3dc67ad88b799c469088e428c583b1\", null],\n- [\"equal\", \"a00083.html#ad2dbee4a72127938c79162cc8b6d5152\", null]\n+var a00077 = [\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\", \"a00077.html#aac1ea136475ea605715c809f4b3f0156\", null],\n+ [\"BOOST_CONCEPT_REQUIRES\", \"a00077.html#a2e95b5b5508cf3284107e979401bd1a4\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00083_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00776_source.html", "comments": ["Files 5% 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/Testable.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-
    Testable.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-
    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-
    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+
    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-
    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+
    \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-
    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+
    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,175 +1,186 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Testable.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-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-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+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-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+_\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:_\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_\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- * _\bb_\ba_\bs_\be\n- * _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\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/a00086.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01286.html", "comments": ["Files 6% 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/SymmetricBlockMatrix.cpp 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@@ -67,15 +67,15 @@\n
    \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n \n \n
    \n \n-
    SymmetricBlockMatrix.cpp File Reference
    \n+
    PoseRotationPrior.h File Reference
    \n
    \n
    \n \n-

    Access to matrices via blocks of pre-defined sizes. \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+Classes

    class  gtsam::PoseRotationPrior< POSE >
     
    \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+

    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,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-SymmetricBlockMatrix.cpp 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\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:_\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-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+Implements a prior on the rotation component of a pose.\n Date\n- Sep 18, 2010\n+ Jun 14, 2012\n+ Author\n+ Alex Cunningham\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+ * _\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 * Generated on Tue Jan 9 2024 05:51: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.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00689.html", "comments": ["Files 7% 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/FastList.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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n-
    FastList.h File Reference
    \n+
    MetisIndex.h File Reference
    \n
    \n
    \n \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 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::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-

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

    \n-
    Author
    Richard Roberts
    \n-
    Date
    Oct 22, 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,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-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+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:_\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:_\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-A thin wrapper around std::list that uses boost's fast_pool_allocator.\n Author\n- Richard Roberts\n+ Andrew Melim\n Date\n- Oct 22, 2010\n+ Oct. 10, 2014\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bb_\ba_\bs_\be\n- * _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh\n+ * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\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/a00110_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00278_source.html", "comments": ["Files 6% 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/FastList.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@@ -72,15 +72,15 @@\n
    \n
    \n
    \n \n \n
    \n \n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    FastList.h
    \n+
    Cyclic.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 <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 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+
    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+
    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+
    76
    \n+
    Concept check for values that can be used in unit tests.
    \n+
    Concept check class for variable types with Group properties.
    \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 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,114 +1,118 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-FastList.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-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-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-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+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+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+76\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_\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:_\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:_\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- * _\bb_\ba_\bs_\be\n- * _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh\n+ * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\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/a00116_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00629_source.html", "comments": ["Files 9% 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/inference/Ordering.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+
    Ordering.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-
    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-
    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+
    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+
    76
    \n+
    78 bool contains(const Key& key) const;
    \n+
    79
    \n+\n+
    87
    \n
    90
    \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+
    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-
    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-
    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-
    168
    \n-
    170 const DenseIndex& rowStart() const { return rowStart_; }
    \n-
    171
    \n-
    173 DenseIndex& rowStart() { return rowStart_; }
    \n-
    174
    \n-
    176 const DenseIndex& rowEnd() const { return rowEnd_; }
    \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-
    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+
    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-
    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-
    Serialization for matrices.
    \n-
    A thin wrapper around std::vector that uses a custom allocator.
    \n-
    typedef and functions to augment Eigen's MatrixXd
    \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+
    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
    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+
    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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,346 +1,312 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-VerticalBlockMatrix.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 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-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+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-_\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-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+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-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+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-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-_\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-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-_\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+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-_\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+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-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_\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-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\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+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+_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh\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:_\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:_\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\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+ * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\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/a00122.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00578.html", "comments": ["Files 4% 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/DSFVector.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@@ -67,15 +67,15 @@\n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n \n
    \n \n-
    DSFVector.cpp File Reference
    \n+
    ISAM-inst.h File Reference
    \n
    \n
    \n \n-

    a faster implementation for DSF, which uses vector rather than btree. \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-

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

    \n-
    Date
    Jun 25, 2010
    \n-
    Author
    Kai Ni
    \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,22 +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-DSFVector.cpp File Reference\n-a faster implementation for DSF, which uses vector rather than btree. _\bM_\bo_\br_\be_\b._\b._\b.\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-a faster implementation for DSF, which uses vector rather than btree.\n- Date\n- Jun 25, 2010\n+Incremental update functionality (iSAM) for BayesTree.\n Author\n- Kai Ni\n+ Michael Kaess\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+ * _\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/a00134_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00290_source.html", "comments": ["Files 18% 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/serialization.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@@ -72,15 +72,15 @@\n \n
    \n
    \n \n \n
    \n \n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    serialization.h
    \n+
    CalibratedCamera.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 <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+
    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-
    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+\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+
    46
    \n+
    \n+
    52class GTSAM_EXPORT PinholeBase {
    \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-
    \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-
    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+
    69 Pose3 pose_;
    \n+
    70
    \n+
    71protected:
    \n+
    72
    \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+
    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-
    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-
    116
    \n-
    118template <class T>
    \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+
    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+
    117
    \n+
    121
    \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-
    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+
    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-
    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+
    \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-
    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+
    223 inline static std::pair<size_t, size_t> translationInterval() {
    \n+
    224 return std::make_pair(3, 5);
    \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+
    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-
    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+
    260 }
    \n
    \n-
    271
    \n-
    272} // namespace gtsam
    \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 exception type that uses tbb_allocator if GTSAM is compiled with TBB.
    \n+
    Base class and basic functions for Manifold types.
    \n+
    Bearing-Range product.
    \n+
    3D Pose
    \n+
    2D Point
    \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+
    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+
    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,349 +1,460 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-serialization.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-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+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#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+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+46\n+_\b5_\b2class GTSAM_EXPORT _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be {\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+_\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-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+69 _\bP_\bo_\bs_\be_\b3 pose_;\n+70\n+71protected:\n+72\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+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-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+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+117\n+121\n+_\b1_\b2_\b3 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be() {}\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-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+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-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+_\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-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+_\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-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+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+_\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+_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n+Base class and basic functions for Manifold types.\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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\n- * _\bb_\ba_\bs_\be\n- * _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\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 * Generated on Tue Jan 9 2024 05:51: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_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00869_source.html", "comments": ["Files 18% 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/SymmetricBlockMatrix.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-
    SymmetricBlockMatrix.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+
    3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
    \n+
    4 * Atlanta, Georgia 30332-0415
    \n+
    5 * All Rights Reserved
    \n+
    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+\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-
    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+
    29
    \n+
    30#include <map>
    \n+
    31#include <string>
    \n+
    32#include <iosfwd>
    \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
    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+
    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 DenseIndex rows() const { assertInvariants(); return variableColOffsets_.back() - variableColOffsets_[blockStart_]; }
    \n+
    114 VectorValues(const Vector& c, const Dims& dims);
    \n
    115
    \n-
    117 DenseIndex cols() const { return rows(); }
    \n+
    117 VectorValues(const Vector& c, const Scatter& scatter);
    \n
    118
    \n-
    120 DenseIndex nBlocks() const { return nActualBlocks() - blockStart_; }
    \n+
    120 static VectorValues Zero(const VectorValues& other);
    \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+
    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-
    \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+
    172 VectorValues& update(const VectorValues& values);
    \n+
    173
    \n+
    178 iterator insert(const std::pair<Key, Vector>& key_value);
    \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+
    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-
    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+
    \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-
    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+
    \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-
    \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+
    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-
    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+
    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+
    289 return result;
    \n+
    290 }
    \n+
    \n+
    291
    \n+
    293 Vector vector(const Dims& dims) const;
    \n+
    294
    \n+
    296 void swap(VectorValues& other);
    \n
    297
    \n-
    298 protected:
    \n-
    299
    \n-
    \n-\n-
    302 return variableColOffsets_.size();
    \n-
    303 }
    \n-
    \n+
    299 bool hasSameStructure(const VectorValues other) const;
    \n+
    300
    \n
    304
    \n-
    \n-\n-
    307 return nOffsets() - 1;
    \n-
    308 }
    \n-
    \n+
    308 double dot(const VectorValues& v) const;
    \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+
    311 double norm() const;
    \n+
    312
    \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+
    333 VectorValues& addInPlace_(const VectorValues& c);
    \n+
    334
    \n+
    337 VectorValues operator-(const VectorValues& c) const;
    \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-
    A thin wrapper around std::vector that uses a custom allocator.
    \n-
    Typedefs for easier changing of types.
    \n-
    typedef and functions to augment Eigen's MatrixXd
    \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+
    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+
    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+
    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-
    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+
    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+
    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,546 +1,468 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SymmetricBlockMatrix.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+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n+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+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-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+29\n+30#include \n+31#include \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 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+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-_\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+114 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs(const Vector& c, const Dims& dims);\n 115\n-_\b1_\b1_\b7 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bc_\bo_\bl_\bs() const { return rows(); }\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-_\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+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-_\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+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 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+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-_\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+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-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+_\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-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+_\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_\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+_\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-_\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+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+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-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+299 bool hasSameStructure(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs other) const;\n+300\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+308 double _\bd_\bo_\bt(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& v) const;\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+311 double norm() const;\n+312\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+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-_\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+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+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+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-_\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+_\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:_\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_\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:_\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:_\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- * _\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+ * _\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/a00176_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01082_source.html", "comments": ["Files 6% 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/nonlinear/NonlinearOptimizer.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+
    NonlinearOptimizer.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-
    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+
    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-
    \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-
    Factor Graph Values.
    \n-
    Linear Factor Graph where all factors are Gaussians.
    \n-
    Factor Graph consisting of non-linear factors.
    \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+
    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
    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+
    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-
    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+
    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-
    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,157 +1,151 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-FitBasis.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-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+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-_\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-_\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+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+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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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- * _\bF_\bi_\bt_\bB_\ba_\bs_\bi_\bs_\b._\bh\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 * Generated on Tue Jan 9 2024 05:51: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_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00254_source.html", "comments": ["Files 1% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n \n
    \n
    DiscreteJunctionTree.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
    27 // Forward declarations
    \n
    28 class DiscreteEliminationTree;
    \n
    29
    \n
    \n@@ -137,29 +137,29 @@\n
    57
    \n
    66 DiscreteJunctionTree(const DiscreteEliminationTree& eliminationTree);
    \n
    67 };
    \n
    \n
    68
    \n \n
    71}
    \n-
    Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree.
    \n-\n-
    The junction tree.
    \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
    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": "@@ -37,17 +37,17 @@\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-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\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:_\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"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00224.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01376.html", "comments": ["Files 2% 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/DiscreteJunctionTree.cpp 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@@ -67,15 +67,15 @@\n
    \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n \n
    \n \n-
    DiscreteJunctionTree.cpp File Reference
    \n+
    SymbolicBayesNet.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+
    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,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-DiscreteJunctionTree.cpp File Reference\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- Mar 29, 2013\n+ Oct 29, 2009\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_\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\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/a00227_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00242_source.html", "comments": ["Files 0% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n \n
    \n
    AlgebraicDecisionTree.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+
    21#include <gtsam/base/Testable.h>
    \n
    22#include <gtsam/discrete/DecisionTree-inl.h>
    \n
    23
    \n
    24#include <algorithm>
    \n
    25#include <map>
    \n
    26#include <string>
    \n
    27#include <vector>
    \n
    28namespace gtsam {
    \n@@ -276,15 +276,15 @@\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+
    Concept check for values that can be used in unit tests.
    \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@@ -302,13 +302,13 @@\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
    \n
    \n \n
    \n \n
    \n \n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00233_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00182_source.html", "comments": ["Files 1% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n
    \n
    \n
    \n \n \n
    \n \n
    \n
    \n \n
    \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-\n-\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@@ -229,18 +229,18 @@\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-
    Factor Graph Base Class.
    \n-
    Bayes network.
    \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
    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
    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@@ -258,13 +258,13 @@\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"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00239_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00266_source.html", "comments": ["Files 7% 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/DiscreteKey.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteLookupDAG.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-
    DiscreteKey.h
    \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-
    19#pragma once
    \n-
    20
    \n-\n-
    22#include <gtsam/inference/Key.h>
    \n+
    18#pragma once
    \n+
    19
    \n+\n+\n+\n
    23
    \n-
    24#include <boost/serialization/vector.hpp>
    \n-
    25#include <map>
    \n-
    26#include <string>
    \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
    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+
    31class DiscreteBayesNet;
    \n+
    32
    \n+
    \n+
    40class GTSAM_EXPORT DiscreteLookupTable : public DiscreteConditional {
    \n+
    41 public:
    \n+\n+
    43 using shared_ptr = boost::shared_ptr<This>;
    \n+
    44 using BaseConditional = Conditional<DecisionTreeFactor, This>;
    \n+
    45
    \n+
    \n+
    53 DiscreteLookupTable(size_t nFrontals, const DiscreteKeys& keys,
    \n+
    54 const ADT& potentials)
    \n+
    55 : DiscreteConditional(nFrontals, keys, potentials) {}
    \n+
    \n+
    56
    \n+
    58 void print(
    \n+
    59 const std::string& s = "Discrete Lookup Table: ",
    \n+
    60 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
    \n+
    61
    \n+
    67 size_t argmax(const DiscreteValues& parentsValues) 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-
    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+
    73 void argmaxInPlace(DiscreteValues* parentsValues) const;
    \n+
    74};
    \n+
    \n+
    75
    \n+
    \n+
    77class GTSAM_EXPORT DiscreteLookupDAG : public BayesNet<DiscreteLookupTable> {
    \n+
    78 public:
    \n+\n+
    80 using This = DiscreteLookupDAG;
    \n+
    81 using shared_ptr = boost::shared_ptr<This>;
    \n+
    82
    \n+
    85
    \n+\n+
    88
    \n+
    90 static DiscreteLookupDAG FromBayesNet(const DiscreteBayesNet& bayesNet);
    \n+
    91
    \n+
    93 virtual ~DiscreteLookupDAG() {}
    \n+
    94
    \n+
    96
    \n
    99
    \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+
    101 bool equals(const This& bn, double tol = 1e-9) const;
    \n+
    102
    \n+
    104
    \n+
    107
    \n+
    109 template <typename... Args>
    \n+
    \n+
    110 void add(Args&&... args) {
    \n+
    111 emplace_shared<DiscreteLookupTable>(std::forward<Args>(args)...);
    \n+
    112 }
    \n+
    \n+
    113
    \n+
    125 DiscreteValues argmax(DiscreteValues given = DiscreteValues()) const;
    \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(Base);
    \n+
    134 }
    \n+
    135};
    \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
    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+\n+
    A Bayes net made from discrete conditional distributions.
    Definition DiscreteBayesNet.h:38
    \n+
    Discrete Conditional Density Derives from DecisionTreeFactor.
    Definition DiscreteConditional.h:40
    \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+
    DiscreteLookupTable table for max-product.
    Definition DiscreteLookupDAG.h:40
    \n+
    DiscreteLookupTable(size_t nFrontals, const DiscreteKeys &keys, const ADT &potentials)
    Construct a new Discrete Lookup Table object.
    Definition DiscreteLookupDAG.h:53
    \n+
    A DAG made from lookup tables, as defined above.
    Definition DiscreteLookupDAG.h:77
    \n+
    bool equals(const This &bn, double tol=1e-9) const
    Check equality.
    \n+
    DiscreteLookupDAG()
    Construct empty DAG.
    Definition DiscreteLookupDAG.h:87
    \n+
    void add(Args &&... args)
    Add a DiscreteLookupTable.
    Definition DiscreteLookupDAG.h:110
    \n+
    virtual ~DiscreteLookupDAG()
    Destructor.
    Definition DiscreteLookupDAG.h:93
    \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+
    Definition Conditional.h:64
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,148 +1,164 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DiscreteKey.h\n+DiscreteLookupDAG.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+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_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn_\b._\bh>\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._\bh>\n 23\n-24#include \n-25#include \n-26#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_\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+31class DiscreteBayesNet;\n+32\n+_\b4_\b0class GTSAM_EXPORT _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bT_\ba_\bb_\bl_\be : public _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl {\n+41 public:\n+42 using _\bT_\bh_\bi_\bs = _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bT_\ba_\bb_\bl_\be;\n+43 using shared_ptr = boost::shared_ptr;\n+44 using BaseConditional = _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b,_\b _\bT_\bh_\bi_\bs_\b>;\n+45\n+_\b5_\b3 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bT_\ba_\bb_\bl_\be(size_t nFrontals, const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& keys,\n+54 const _\bA_\bD_\bT& potentials)\n+55 : _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(nFrontals, keys, potentials) {}\n+56\n+58 void _\bp_\br_\bi_\bn_\bt(\n+59 const std::string& s = \"Discrete Lookup Table: \",\n+60 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override;\n+61\n+67 size_t argmax(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& parentsValues) 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-_\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+73 void argmaxInPlace(_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs* parentsValues) const;\n+74};\n+75\n+_\b7_\b7class GTSAM_EXPORT _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG : public _\bB_\ba_\by_\be_\bs_\bN_\be_\bt {\n+78 public:\n+79 using _\bB_\ba_\bs_\be = _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bT_\ba_\bb_\bl_\be_\b>;\n+80 using _\bT_\bh_\bi_\bs = _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG;\n+81 using shared_ptr = boost::shared_ptr;\n+82\n+85\n+_\b8_\b7 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG() {}\n+88\n+90 static _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG FromBayesNet(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt& bayesNet);\n+91\n+_\b9_\b3 virtual _\b~_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG() {}\n+94\n+96\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-_\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+_\b1_\b0_\b1 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs& bn, double tol = 1e-9) const;\n+102\n+104\n+107\n+109 template \n+_\b1_\b1_\b0 void _\ba_\bd_\bd(Args&&... args) {\n+111 emplace_shared(std::forward(args)...);\n+112 }\n+113\n+125 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs argmax(_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs given = _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs()) const;\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);\n+134 }\n+135};\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bK_\be_\by_\b _\b>\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_\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_\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:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bT_\ba_\bb_\bl_\be\n+DiscreteLookupTable table for max-product.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteLookupDAG.h:40\n+_\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_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bT_\ba_\bb_\bl_\be\n+DiscreteLookupTable(size_t nFrontals, const DiscreteKeys &keys, const ADT\n+&potentials)\n+Construct a new Discrete Lookup Table object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteLookupDAG.h:53\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_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const This &bn, double tol=1e-9) const\n+Check equality.\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_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG\n+DiscreteLookupDAG()\n+Construct empty DAG.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteLookupDAG.h:87\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_\b:_\b:_\ba_\bd_\bd\n+void add(Args &&... args)\n+Add a DiscreteLookupTable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteLookupDAG.h:110\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_\b:_\b:_\b~_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG\n+virtual ~DiscreteLookupDAG()\n+Destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteLookupDAG.h:93\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:_\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\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_\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/a00248_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01034_source.html", "comments": ["Files 6% 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/DiscreteLookupDAG.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@@ -72,15 +72,15 @@\n \n
    \n
    \n \n \n
    \n \n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    DiscreteLookupDAG.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-
    18#pragma once
    \n+\n+
    13
    \n+
    14namespace gtsam {
    \n+
    15
    \n+
    16 // Forward declarations
    \n+
    17 class JacobianFactor;
    \n+
    18 class HessianFactor;
    \n
    19
    \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+
    \n+
    26class GTSAM_EXPORT LinearContainerFactor : public NonlinearFactor {
    \n+
    27protected:
    \n
    28
    \n-
    29namespace gtsam {
    \n-
    30
    \n-
    31class DiscreteBayesNet;
    \n-
    32
    \n-
    \n-
    40class GTSAM_EXPORT DiscreteLookupTable : public DiscreteConditional {
    \n-
    41 public:
    \n-\n-
    43 using shared_ptr = boost::shared_ptr<This>;
    \n-
    44 using BaseConditional = Conditional<DecisionTreeFactor, This>;
    \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+
    42
    \n+\n
    45
    \n-
    \n-
    53 DiscreteLookupTable(size_t nFrontals, const DiscreteKeys& keys,
    \n-
    54 const ADT& potentials)
    \n-
    55 : DiscreteConditional(nFrontals, keys, potentials) {}
    \n-
    \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-
    58 void print(
    \n-
    59 const std::string& s = "Discrete Lookup Table: ",
    \n-
    60 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
    \n-
    61
    \n-
    67 size_t argmax(const DiscreteValues& parentsValues) const;
    \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+
    63
    \n+
    65 bool equals(const NonlinearFactor& f, double tol = 1e-9) const override;
    \n+
    66
    \n+
    67 // NonlinearFactor
    \n
    68
    \n-
    73 void argmaxInPlace(DiscreteValues* parentsValues) const;
    \n-
    74};
    \n-
    \n-
    75
    \n-
    \n-
    77class GTSAM_EXPORT DiscreteLookupDAG : public BayesNet<DiscreteLookupTable> {
    \n-
    78 public:
    \n-\n-
    80 using This = DiscreteLookupDAG;
    \n-
    81 using shared_ptr = boost::shared_ptr<This>;
    \n-
    82
    \n-
    85
    \n-\n-
    88
    \n-
    90 static DiscreteLookupDAG FromBayesNet(const DiscreteBayesNet& bayesNet);
    \n-
    91
    \n-
    93 virtual ~DiscreteLookupDAG() {}
    \n-
    94
    \n-
    96
    \n-
    99
    \n-
    101 bool equals(const This& bn, double tol = 1e-9) 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-
    104
    \n+
    106 GaussianFactor::shared_ptr negateToGaussian() const;
    \n
    107
    \n-
    109 template <typename... Args>
    \n-
    \n-
    110 void add(Args&&... args) {
    \n-
    111 emplace_shared<DiscreteLookupTable>(std::forward<Args>(args)...);
    \n-
    112 }
    \n-
    \n-
    113
    \n-
    125 DiscreteValues argmax(DiscreteValues given = DiscreteValues()) const;
    \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(Base);
    \n-
    134 }
    \n-
    135};
    \n-
    \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-
    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+
    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+
    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-
    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-\n-
    A Bayes net made from discrete conditional distributions.
    Definition DiscreteBayesNet.h:38
    \n-
    Discrete Conditional Density Derives from DecisionTreeFactor.
    Definition DiscreteConditional.h:40
    \n-
    DiscreteKeys is a set of keys that can be assembled using the & operator.
    Definition DiscreteKey.h:39
    \n-
    DiscreteLookupTable table for max-product.
    Definition DiscreteLookupDAG.h:40
    \n-
    DiscreteLookupTable(size_t nFrontals, const DiscreteKeys &keys, const ADT &potentials)
    Construct a new Discrete Lookup Table object.
    Definition DiscreteLookupDAG.h:53
    \n-
    A DAG made from lookup tables, as defined above.
    Definition DiscreteLookupDAG.h:77
    \n-
    bool equals(const This &bn, double tol=1e-9) const
    Check equality.
    \n-
    DiscreteLookupDAG()
    Construct empty DAG.
    Definition DiscreteLookupDAG.h:87
    \n-
    void add(Args &&... args)
    Add a DiscreteLookupTable.
    Definition DiscreteLookupDAG.h:110
    \n-
    virtual ~DiscreteLookupDAG()
    Destructor.
    Definition DiscreteLookupDAG.h:93
    \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-
    Definition Conditional.h:64
    \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+
    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,164 +1,185 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DiscreteLookupDAG.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-18#pragma once\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-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_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn_\b._\bh>\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._\bh>\n-23\n-24#include \n-25#include \n-26#include \n-27#include \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-29namespace _\bg_\bt_\bs_\ba_\bm {\n-30\n-31class DiscreteBayesNet;\n-32\n-_\b4_\b0class GTSAM_EXPORT _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bT_\ba_\bb_\bl_\be : public _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl {\n-41 public:\n-42 using _\bT_\bh_\bi_\bs = _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bT_\ba_\bb_\bl_\be;\n-43 using shared_ptr = boost::shared_ptr;\n-44 using BaseConditional = _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b,_\b _\bT_\bh_\bi_\bs_\b>;\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+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-_\b5_\b3 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bT_\ba_\bb_\bl_\be(size_t nFrontals, const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& keys,\n-54 const _\bA_\bD_\bT& potentials)\n-55 : _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(nFrontals, keys, potentials) {}\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-58 void _\bp_\br_\bi_\bn_\bt(\n-59 const std::string& s = \"Discrete Lookup Table: \",\n-60 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override;\n-61\n-67 size_t argmax(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& parentsValues) const;\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+63\n+65 bool equals(const NonlinearFactor& f, double tol = 1e-9) const override;\n+66\n+67 // NonlinearFactor\n 68\n-73 void argmaxInPlace(_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs* parentsValues) const;\n-74};\n-75\n-_\b7_\b7class GTSAM_EXPORT _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG : public _\bB_\ba_\by_\be_\bs_\bN_\be_\bt {\n-78 public:\n-79 using _\bB_\ba_\bs_\be = _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bT_\ba_\bb_\bl_\be_\b>;\n-80 using _\bT_\bh_\bi_\bs = _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG;\n-81 using shared_ptr = boost::shared_ptr;\n-82\n-85\n-_\b8_\b7 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG() {}\n-88\n-90 static _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG FromBayesNet(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt& bayesNet);\n-91\n-_\b9_\b3 virtual _\b~_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG() {}\n-94\n-96\n-99\n-_\b1_\b0_\b1 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs& bn, double tol = 1e-9) 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-104\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-109 template \n-_\b1_\b1_\b0 void _\ba_\bd_\bd(Args&&... args) {\n-111 emplace_shared(std::forward(args)...);\n-112 }\n-113\n-125 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs argmax(_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs given = _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs()) const;\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);\n-134 }\n-135};\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-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+_\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+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:_\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:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bK_\be_\by_\b _\b>\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_\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_\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_\bT_\ba_\bb_\bl_\be\n-DiscreteLookupTable table for max-product.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteLookupDAG.h:40\n-_\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_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bT_\ba_\bb_\bl_\be\n-DiscreteLookupTable(size_t nFrontals, const DiscreteKeys &keys, const ADT\n-&potentials)\n-Construct a new Discrete Lookup Table object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteLookupDAG.h:53\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_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const This &bn, double tol=1e-9) const\n-Check equality.\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_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG\n-DiscreteLookupDAG()\n-Construct empty DAG.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteLookupDAG.h:87\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_\b:_\b:_\ba_\bd_\bd\n-void add(Args &&... args)\n-Add a DiscreteLookupTable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteLookupDAG.h:110\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_\b:_\b:_\b~_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG\n-virtual ~DiscreteLookupDAG()\n-Destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteLookupDAG.h:93\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:_\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:_\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:_\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- * _\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+ * _\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 * Generated on Tue Jan 9 2024 05:51: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.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00686.html", "comments": ["Files 6% 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/DiscreteEliminationTree.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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n \n \n
    \n \n-
    DiscreteEliminationTree.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    Symbol.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::DiscreteEliminationTree
     Elimination tree for discrete factors. 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
    Mar 29, 2013
    \n-
    Author
    Frank Dellaert
    \n+
    Date
    June 9, 2012
    \n+
    Author
    : Frank Dellaert
    \n
    \n-Richard Roberts
    \n+: Richard Roberts
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,26 +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-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+_\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 Date\n- Mar 29, 2013\n+ June 9, 2012\n Author\n- Frank Dellaert\n- Richard Roberts\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+ * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\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/a00263_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00347_source.html", "comments": ["Files 8% 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/DiscreteFactor.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@@ -72,15 +72,15 @@\n \n
    \n
    \n \n \n
    \n \n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    DiscreteFactor.h
    \n+
    Similarity2.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#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+
    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-
    \n-
    38class GTSAM_EXPORT DiscreteFactor: public Factor {
    \n-
    39
    \n-
    40public:
    \n+
    \n+
    35class GTSAM_EXPORT Similarity2 : public LieGroup<Similarity2, 4> {
    \n+
    38 typedef Rot2 Rotation;
    \n+
    39 typedef Point2 Translation;
    \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+
    42 private:
    \n+
    43 Rot2 R_;
    \n+
    44 Point2 t_;
    \n+
    45 double s_;
    \n
    46
    \n-\n-
    48
    \n-
    49public:
    \n+
    47 public:
    \n
    50
    \n+\n
    53
    \n-\n+
    55 Similarity2(double s);
    \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+
    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
    69
    \n-
    71 virtual bool equals(const DiscreteFactor& lf, double tol = 1e-9) const = 0;
    \n+
    71 bool equals(const Similarity2& sim, double tol) const;
    \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+
    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+
    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-
    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+
    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-
    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+
    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 rotation
    \n+
    2D Pose
    \n+
    2D Point
    \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+
    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-
    A helper that implements the traits interface for GTSAM types.
    Definition Testable.h:151
    \n-
    A discrete probabilistic factor.
    Definition DecisionTreeFactor.h:45
    \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+
    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 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,196 +1,212 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DiscreteFactor.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, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, 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_\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+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-_\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+_\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 // 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+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-_\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+47 public:\n 50\n+52 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2();\n 53\n-_\b5_\b5 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br() {}\n+55 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2(double s);\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+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 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+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-_\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+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+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-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-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+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-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+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+_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n+Base class and basic functions for Manifold types.\n+_\bR_\bo_\bt_\b2_\b._\bh\n+2D rotation\n+_\bP_\bo_\bs_\be_\b2_\b._\bh\n+2D 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-_\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:_\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:_\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_\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_\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_\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- * _\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+ * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\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/a00269_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00218_source.html", "comments": ["Files 0% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n \n
    \n
    DiscreteMarginals.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/Vector.h>
    \n+\n+\n+
    25#include <gtsam/base/Vector.h>
    \n
    26
    \n
    27namespace gtsam {
    \n
    28
    \n
    \n \n
    34
    \n
    35 protected:
    \n@@ -167,17 +167,17 @@\n
    75 }
    \n
    \n
    76
    \n
    77 };
    \n
    \n
    78
    \n
    79} /* namespace gtsam */
    \n-
    typedef and functions to augment Eigen's VectorXd
    \n-
    Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree.
    \n-\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
    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@@ -186,13 +186,13 @@\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": "@@ -63,17 +63,17 @@\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+_\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-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\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"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00275_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00362_source.html", "comments": ["Files 1% 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/a00281_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00452_source.html", "comments": ["Files 9% 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-inl.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity3.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-inl.h
    \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-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-
    12#pragma once
    \n-
    13
    \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-
    \n-
    29typename SO<N>::MatrixNN SO<N>::Hat(const TangentVector& xi) {
    \n-
    30 return SOn::Hat(xi);
    \n-
    31}
    \n-
    \n+
    19#pragma once
    \n+
    20
    \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+
    27
    \n+
    28namespace gtsam {
    \n+
    29
    \n+
    30// Forward declarations
    \n+
    31class Pose3;
    \n
    32
    \n-
    33// Implementation for N>=5 just uses dynamic version
    \n-
    34template <int N>
    \n-
    \n-
    35typename SO<N>::TangentVector SO<N>::Vee(const MatrixNN& X) {
    \n-
    36 return SOn::Vee(X);
    \n-
    37}
    \n-
    \n-
    38
    \n-
    39template <int N>
    \n-
    \n-\n-
    41 if (H) throw std::runtime_error("SO<N>::Retract jacobian not implemented.");
    \n-
    42 const Matrix X = Hat(xi / 2.0);
    \n-
    43 size_t n = AmbientDim(xi.size());
    \n-
    44 const auto I = Eigen::MatrixXd::Identity(n, n);
    \n-
    45 // https://pdfs.semanticscholar.org/6165/0347b2ccac34b5f423081d1ce4dbc4d09475.pdf
    \n-
    46 return SO((I + X) * (I - X).inverse());
    \n-
    47}
    \n-
    \n-
    48
    \n-
    49template <int N>
    \n-
    \n-
    50typename SO<N>::TangentVector SO<N>::ChartAtOrigin::Local(const SO& R,
    \n-
    51 ChartJacobian H) {
    \n-
    52 if (H) throw std::runtime_error("SO<N>::Local jacobian not implemented.");
    \n-
    53 const size_t n = R.rows();
    \n-
    54 const auto I = Eigen::MatrixXd::Identity(n, n);
    \n-
    55 const Matrix X = (I - R.matrix_) * (I + R.matrix_).inverse();
    \n-
    56 return -2 * Vee(X);
    \n-
    57}
    \n-
    \n-
    58
    \n-
    59template <int N>
    \n-
    60typename SO<N>::MatrixDD SO<N>::AdjointMap() const {
    \n-
    61 if (N==2) return I_1x1; // SO(2) case
    \n-
    62 throw std::runtime_error(
    \n-
    63 "SO<N>::AdjointMap only implemented for SO2, SO3 and SO4.");
    \n-
    64}
    \n-
    65
    \n-
    66template <int N>
    \n-
    \n-
    67SO<N> SO<N>::Expmap(const TangentVector& omega, ChartJacobian H) {
    \n-
    68 throw std::runtime_error("SO<N>::Expmap only implemented for SO3 and SO4.");
    \n-
    69}
    \n-
    \n+
    \n+
    36class GTSAM_EXPORT Similarity3 : public LieGroup<Similarity3, 7> {
    \n+
    39 typedef Rot3 Rotation;
    \n+
    40 typedef Point3 Translation;
    \n+
    42
    \n+
    43 private:
    \n+
    44 Rot3 R_;
    \n+
    45 Point3 t_;
    \n+
    46 double s_;
    \n+
    47
    \n+
    48 public:
    \n+
    51
    \n+\n+
    54
    \n+
    56 Similarity3(double s);
    \n+
    57
    \n+
    59 Similarity3(const Rot3& R, const Point3& t, double s);
    \n+
    60
    \n+
    62 Similarity3(const Matrix3& R, const Vector3& t, double s);
    \n+
    63
    \n+
    65 Similarity3(const Matrix4& T);
    \n+
    66
    \n
    70
    \n-
    71template <int N>
    \n-
    \n-
    72typename SO<N>::MatrixDD SO<N>::ExpmapDerivative(const TangentVector& omega) {
    \n-
    73 throw std::runtime_error("SO<N>::ExpmapDerivative only implemented for SO3.");
    \n-
    74}
    \n-
    \n-
    75
    \n-
    76template <int N>
    \n-
    \n-
    77typename SO<N>::TangentVector SO<N>::Logmap(const SO& R, ChartJacobian H) {
    \n-
    78 throw std::runtime_error("SO<N>::Logmap only implemented for SO3.");
    \n-
    79}
    \n-
    \n-
    80
    \n-
    81template <int N>
    \n-
    \n-
    82typename SO<N>::MatrixDD SO<N>::LogmapDerivative(const TangentVector& omega) {
    \n-
    83 throw std::runtime_error("O<N>::LogmapDerivative only implemented for SO3.");
    \n-
    84}
    \n-
    \n+
    72 bool equals(const Similarity3& sim, double tol) const;
    \n+
    73
    \n+
    75 bool operator==(const Similarity3& other) const;
    \n+
    76
    \n+
    78 void print(const std::string& s) const;
    \n+
    79
    \n+
    80 friend std::ostream& operator<<(std::ostream& os, const Similarity3& p);
    \n+
    81
    \n
    85
    \n-
    86// Default fixed size version (but specialized elsewehere for N=2,3,4)
    \n-
    87template <int N>
    \n-
    \n-
    88typename SO<N>::VectorN2 SO<N>::vec(
    \n-
    89 OptionalJacobian<internal::NSquaredSO(N), dimension> H) const {
    \n-
    90 // Vectorize
    \n-
    91 VectorN2 X = Eigen::Map<const VectorN2>(matrix_.data());
    \n-
    92
    \n-
    93 // If requested, calculate H as (I \\oplus Q) * P,
    \n-
    94 // where Q is the N*N rotation matrix, and P is calculated below.
    \n-
    95 if (H) {
    \n-
    96 // Calculate P matrix of vectorized generators
    \n-
    97 // TODO(duy): Should we refactor this as the jacobian of Hat?
    \n-
    98 Matrix P = SO<N>::VectorizedGenerators();
    \n-
    99 for (size_t i = 0; i < N; i++) {
    \n-
    100 H->block(i * N, 0, N, dimension) =
    \n-
    101 matrix_ * P.block(i * N, 0, N, dimension);
    \n-
    102 }
    \n-
    103 }
    \n-
    104 return X;
    \n-
    105}
    \n-
    \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+
    87 static Similarity3 Identity();
    \n+
    88
    \n+
    90 Similarity3 operator*(const Similarity3& S) const;
    \n+
    91
    \n+
    93 Similarity3 inverse() const;
    \n+
    94
    \n+
    98
    \n+
    100 Point3 transformFrom(const Point3& p, //
    \n+
    101 OptionalJacobian<3, 7> H1 = boost::none, //
    \n+
    102 OptionalJacobian<3, 3> H2 = boost::none) const;
    \n+
    103
    \n+
    115 Pose3 transformFrom(const Pose3& T) const;
    \n+
    116
    \n+
    118 Point3 operator*(const Point3& p) const;
    \n+
    119
    \n+
    123 static Similarity3 Align(const Point3Pairs& abPointPairs);
    \n+
    124
    \n+
    135 static Similarity3 Align(const std::vector<Pose3Pair>& abPosePairs);
    \n+
    136
    \n+
    140
    \n+
    144 static Vector7 Logmap(const Similarity3& s, //
    \n+
    145 OptionalJacobian<7, 7> Hm = boost::none);
    \n+
    146
    \n+
    149 static Similarity3 Expmap(const Vector7& v, //
    \n+
    150 OptionalJacobian<7, 7> Hm = boost::none);
    \n+
    151
    \n+
    \n+\n+
    154 static Similarity3 Retract(const Vector7& v,
    \n+
    155 ChartJacobian H = boost::none) {
    \n+
    156 return Similarity3::Expmap(v, H);
    \n+
    157 }
    \n+
    158 static Vector7 Local(const Similarity3& other,
    \n+
    159 ChartJacobian H = boost::none) {
    \n+
    160 return Similarity3::Logmap(other, H);
    \n+
    161 }
    \n+
    162 };
    \n+
    \n+
    163
    \n+
    164 using LieGroup<Similarity3, 7>::inverse;
    \n+
    165
    \n+
    172 static Matrix4 wedge(const Vector7& xi);
    \n+
    173
    \n+
    175 Matrix7 AdjointMap() const;
    \n+
    176
    \n+
    180
    \n+
    182 Matrix4 matrix() const;
    \n+
    183
    \n+
    185 Rot3 rotation() const { return R_; }
    \n+
    186
    \n+
    188 Point3 translation() const { return t_; }
    \n+
    189
    \n+
    191 double scale() const { return s_; }
    \n+
    192
    \n+
    194 inline static size_t Dim() { return 7; }
    \n+
    195
    \n+
    197 inline size_t dim() const { return 7; }
    \n+
    198
    \n+
    202
    \n+
    203 private:
    \n+
    205 static Matrix3 GetV(Vector3 w, double lambda);
    \n+
    206
    \n+
    208};
    \n+
    \n+
    209
    \n+
    210template <>
    \n+
    211inline Matrix wedge<Similarity3>(const Vector& xi) {
    \n+
    212 return Similarity3::wedge(xi);
    \n+
    213}
    \n+
    214
    \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 Lie types.
    \n+
    Base class and basic functions for Manifold types.
    \n+
    3D rotation represented as a rotation matrix or quaternion
    \n+
    3D Point
    \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+
    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+
    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-
    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-
    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-
    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-
    SO()
    Construct SO<N> identity for N >= 2.
    Definition SOn.h:79
    \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+
    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+
    3D similarity transform
    Definition Similarity3.h:36
    \n+
    static size_t Dim()
    Dimensionality of tangent space = 7 DOF - used to autodetect sizes.
    Definition Similarity3.h:194
    \n+
    Point3 translation() const
    Return a GTSAM translation.
    Definition Similarity3.h:188
    \n+
    Rot3 rotation() const
    Return a GTSAM rotation.
    Definition Similarity3.h:185
    \n+
    size_t dim() const
    Dimensionality of tangent space = 7 DOF.
    Definition Similarity3.h:197
    \n+
    static Matrix4 wedge(const Vector7 &xi)
    wedge for Similarity3:
    Definition Similarity3.cpp:198
    \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": "@@ -1,194 +1,233 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SOn-inl.h\n+Similarity3.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-12#pragma once\n-13\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n-22\n-23#include \n-24\n-25namespace _\bg_\bt_\bs_\ba_\bm {\n-26\n-27// Implementation for N>=5 just uses dynamic version\n-28template \n-_\b2_\b9typename SO::MatrixNN _\bS_\bO_\b<_\bN_\b>_\b:_\b:_\bH_\ba_\bt(const TangentVector& xi) {\n-30 return _\bS_\bO_\bn_\b:_\b:_\bH_\ba_\bt(xi);\n-31}\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 \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/_\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/_\bR_\bo_\bt_\b3_\b._\bh>\n+27\n+28namespace _\bg_\bt_\bs_\ba_\bm {\n+29\n+30// Forward declarations\n+31class Pose3;\n 32\n-33// Implementation for N>=5 just uses dynamic version\n-34template \n-_\b3_\b5typename SO::TangentVector _\bS_\bO_\b<_\bN_\b>_\b:_\b:_\bV_\be_\be(const MatrixNN& X) {\n-36 return _\bS_\bO_\bn_\b:_\b:_\bV_\be_\be(X);\n-37}\n-38\n-39template \n-_\b4_\b0_\bS_\bO_\b<_\bN_\b> _\bS_\bO_\b<_\bN_\b>_\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 TangentVector& xi, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H)\n-{\n-41 if (H) throw std::runtime_error(\"SO::Retract jacobian not implemented.\");\n-42 const Matrix X = _\bH_\ba_\bt(xi / 2.0);\n-43 size_t n = AmbientDim(xi.size());\n-44 const auto I = Eigen::MatrixXd::Identity(n, n);\n-45 // https://pdfs.semanticscholar.org/6165/\n-0347b2ccac34b5f423081d1ce4dbc4d09475.pdf\n-46 return _\bS_\bO((I + X) * (I - X)._\bi_\bn_\bv_\be_\br_\bs_\be());\n-47}\n-48\n-49template \n-_\b5_\b0typename SO::TangentVector _\bS_\bO_\b<_\bN_\b>_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn_\b:_\b:_\bL_\bo_\bc_\ba_\bl(const _\bS_\bO& R,\n-51 _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H) {\n-52 if (H) throw std::runtime_error(\"SO::Local jacobian not implemented.\");\n-53 const size_t n = R.rows();\n-54 const auto I = Eigen::MatrixXd::Identity(n, n);\n-55 const Matrix X = (I - R.matrix_) * (I + R.matrix_).inverse();\n-56 return -2 * _\bV_\be_\be(X);\n-57}\n-58\n-59template \n-60typename SO::MatrixDD _\bS_\bO_\b<_\bN_\b>_\b:_\b:_\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp() const {\n-61 if (N==2) return I_1x1; // SO(2) case\n-62 throw std::runtime_error(\n-63 \"SO::AdjointMap only implemented for SO2, SO3 and SO4.\");\n-64}\n-65\n-66template \n-_\b6_\b7_\bS_\bO_\b<_\bN_\b> _\bS_\bO_\b<_\bN_\b>_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp(const TangentVector& omega, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H) {\n-68 throw std::runtime_error(\"SO::Expmap only implemented for SO3 and SO4.\");\n-69}\n+_\b3_\b6class GTSAM_EXPORT _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3 : public _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {\n+39 typedef _\bR_\bo_\bt_\b3 _\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn;\n+40 typedef _\bP_\bo_\bi_\bn_\bt_\b3 Translation;\n+42\n+43 private:\n+44 _\bR_\bo_\bt_\b3 R_;\n+45 _\bP_\bo_\bi_\bn_\bt_\b3 t_;\n+46 double s_;\n+47\n+48 public:\n+51\n+53 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3();\n+54\n+56 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3(double s);\n+57\n+59 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3(const _\bR_\bo_\bt_\b3& R, const _\bP_\bo_\bi_\bn_\bt_\b3& t, double s);\n+60\n+62 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3(const Matrix3& R, const Vector3& t, double s);\n+63\n+65 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3(const Matrix4& T);\n+66\n 70\n-71template \n-_\b7_\b2typename SO::MatrixDD _\bS_\bO_\b<_\bN_\b>_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const TangentVector& omega)\n-{\n-73 throw std::runtime_error(\"SO::ExpmapDerivative only implemented for\n-SO3.\");\n-74}\n-75\n-76template \n-_\b7_\b7typename SO::TangentVector _\bS_\bO_\b<_\bN_\b>_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp(const _\bS_\bO& R, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H) {\n-78 throw std::runtime_error(\"SO::Logmap only implemented for SO3.\");\n-79}\n-80\n-81template \n-_\b8_\b2typename SO::MatrixDD _\bS_\bO_\b<_\bN_\b>_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const TangentVector& omega)\n-{\n-83 throw std::runtime_error(\"O::LogmapDerivative only implemented for\n-SO3.\");\n-84}\n+72 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3& sim, double tol) const;\n+73\n+75 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3& other) const;\n+76\n+78 void _\bp_\br_\bi_\bn_\bt(const std::string& s) const;\n+79\n+80 friend std::ostream& operator<<(std::ostream& os, const _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3& p);\n+81\n 85\n-86// Default fixed size version (but specialized elsewehere for N=2,3,4)\n-87template \n-_\b8_\b8typename SO::VectorN2 _\bS_\bO_\b<_\bN_\b>_\b:_\b:_\bv_\be_\bc(\n-89 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H) const {\n-90 // Vectorize\n-91 VectorN2 X = Eigen::Map(_\bm_\ba_\bt_\br_\bi_\bx_\b_.data());\n-92\n-93 // If requested, calculate H as (I \\oplus Q) * P,\n-94 // where Q is the N*N rotation matrix, and P is calculated below.\n-95 if (H) {\n-96 // Calculate P matrix of vectorized generators\n-97 // TODO(duy): Should we refactor this as the jacobian of Hat?\n-98 Matrix P = _\bS_\bO_\b<_\bN_\b>_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bG_\be_\bn_\be_\br_\ba_\bt_\bo_\br_\bs();\n-99 for (size_t i = 0; i < N; i++) {\n-100 H->block(i * N, 0, N, dimension) =\n-101 _\bm_\ba_\bt_\br_\bi_\bx_\b_ * P.block(i * N, 0, N, dimension);\n-102 }\n-103 }\n-104 return X;\n-105}\n-106\n-107template \n-108void _\bS_\bO_\b<_\bN_\b>_\b:_\b:_\bp_\br_\bi_\bn_\bt(const std::string& s) const {\n-109 std::cout << s << _\bm_\ba_\bt_\br_\bi_\bx_\b_ << std::endl;\n-110}\n-111\n-112} // namespace gtsam\n-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\n+87 static _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3 Identity();\n+88\n+90 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3& S) const;\n+91\n+93 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3 inverse() const;\n+94\n+98\n+100 _\bP_\bo_\bi_\bn_\bt_\b3 transformFrom(const _\bP_\bo_\bi_\bn_\bt_\b3& p, //\n+101 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b7_\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+115 _\bP_\bo_\bs_\be_\b3 transformFrom(const _\bP_\bo_\bs_\be_\b3& T) const;\n+116\n+118 _\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+119\n+123 static _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3 Align(const Point3Pairs& abPointPairs);\n+124\n+135 static _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3 Align(const std::vector& abPosePairs);\n+136\n+140\n+144 static Vector7 Logmap(const _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3& s, //\n+145 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b7_\b,_\b _\b7_\b> Hm = boost::none);\n+146\n+149 static _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3 Expmap(const Vector7& v, //\n+150 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b7_\b,_\b _\b7_\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_\b3 Retract(const Vector7& v,\n+155 ChartJacobian H = boost::none) {\n+156 return Similarity3::Expmap(v, H);\n+157 }\n+158 static Vector7 Local(const _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3& other,\n+159 ChartJacobian H = boost::none) {\n+160 return Similarity3::Logmap(other, H);\n+161 }\n+162 };\n+163\n+164 using _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp<_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3, 7>::inverse;\n+165\n+172 static Matrix4 _\bw_\be_\bd_\bg_\be(const Vector7& xi);\n+173\n+175 Matrix7 AdjointMap() const;\n+176\n+180\n+182 Matrix4 matrix() const;\n+183\n+_\b1_\b8_\b5 _\bR_\bo_\bt_\b3 _\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn() const { return R_; }\n+186\n+_\b1_\b8_\b8 _\bP_\bo_\bi_\bn_\bt_\b3 _\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn() const { return t_; }\n+189\n+_\b1_\b9_\b1 double _\bs_\bc_\ba_\bl_\be() const { return s_; }\n+192\n+_\b1_\b9_\b4 inline static size_t _\bD_\bi_\bm() { return 7; }\n+195\n+_\b1_\b9_\b7 inline size_t _\bd_\bi_\bm() const { return 7; }\n+198\n+202\n+203 private:\n+205 static Matrix3 GetV(Vector3 w, double lambda);\n+206\n+208};\n+209\n+210template <>\n+211inline Matrix wedge(const Vector& xi) {\n+212 return _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3_\b:_\b:_\bw_\be_\bd_\bg_\be(xi);\n+213}\n+214\n+215template <>\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+_\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+_\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+_\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:_\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:_\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:_\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:_\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_\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:_\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_\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:_\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()\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:_\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:_\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:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3\n+3D similarity transform\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity3.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3_\b:_\b:_\bD_\bi_\bm\n+static size_t Dim()\n+Dimensionality of tangent space = 7 DOF - used to autodetect sizes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity3.h:194\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn\n+Point3 translation() const\n+Return a GTSAM translation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity3.h:188\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3_\b:_\b:_\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n+Rot3 rotation() const\n+Return a GTSAM rotation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity3.h:185\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3_\b:_\b:_\bd_\bi_\bm\n+size_t dim() const\n+Dimensionality of tangent space = 7 DOF.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity3.h:197\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3_\b:_\b:_\bw_\be_\bd_\bg_\be\n+static Matrix4 wedge(const Vector7 &xi)\n+wedge for Similarity3:\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity3.cpp:198\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3_\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 Similarity3.h:191\n+_\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+Chart at the origin.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity3.h:153\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+ * _\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/a00287.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00332.html", "comments": ["Files 8% 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/SO4.h 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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n-
    SO4.h File Reference
    \n+
    Rot3.h File Reference
    \n
    \n
    \n \n-

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

    3D rotation represented as a rotation matrix or quaternion \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::traits< SO4 >
    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::traits< const SO4 >
    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+\n

    \n Typedefs

    \n-using gtsam::SO4 = SO< 4 >
     
    \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-\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.
     
    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-

    4*4 matrix representation of SO(4)

    \n-
    Author
    Frank Dellaert
    \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-Luca Carlone
    \n-
    Date
    March 2019
    \n+Varun Agrawal
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,47 +1,56 @@\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 | _\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-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:_\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:_\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:_\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:S\bSO\bO4\b4 = _\bS_\bO< 4 >\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- 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+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-4*4 matrix representation of SO(4)\n+3D rotation represented as a rotation matrix or quaternion\n Author\n+ Alireza Fathi\n+ Christian Potthast\n Frank Dellaert\n+ Richard Roberts\n Luca Carlone\n- Date\n- March 2019\n+ Varun Agrawal\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bO_\b4_\b._\bh\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/a00287_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00770_source.html", "comments": ["Files 6% 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/SO4.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@@ -72,15 +72,15 @@\n \n
    \n
    \n \n \n
    \n \n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    SO4.h
    \n+
    iterative.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-
    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-
    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+
    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-
    46template <>
    \n-
    47GTSAM_EXPORT
    \n-
    48Vector6 SO4::Vee(const Matrix4 &X);
    \n+
    46 private:
    \n+
    47 const Matrix& A_;
    \n+
    48 const Vector& b_;
    \n
    49
    \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+
    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-
    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+
    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+
    \n+
    76
    \n+
    \n+
    78 Vector operator*(const Vector& x) const {
    \n+
    79 return A() * x;
    \n+
    80 }
    \n+
    \n+
    81
    \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 Lie types.
    \n-
    Concept check class for variable types with Group properties.
    \n-
    Base class and basic functions for Manifold types.
    \n-
    typedef and functions to augment Eigen's MatrixXd
    \n-
    N*N matrix representation of SO(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+\n+
    149
    \n+
    typedef and functions to augment Eigen's MatrixXd
    \n+
    Implementation of Conjugate Gradient solver for a linear system.
    \n+
    Factor Graph Values.
    \n+
    Iterative methods, template implementation.
    \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-
    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+
    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+
    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+
    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,178 +1,183 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SO4.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-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-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+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-46template <>\n-47GTSAM_EXPORT\n-48Vector6 _\bS_\bO_\b4_\b:_\b:_\bV_\be_\be(const Matrix4 &X);\n+46 private:\n+47 const Matrix& A_;\n+48 const Vector& b_;\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-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+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-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-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-_\bG_\br_\bo_\bu_\bp_\b._\bh\n-Concept check class for variable types with Group properties.\n-_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n-Base class and basic functions for Manifold types.\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+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+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#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-_\bS_\bO_\bn_\b._\bh\n-N*N matrix representation of SO(N).\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+_\bi_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\b-_\bi_\bn_\bl_\b._\bh\n+Iterative methods, template 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:_\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_\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:_\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:_\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_\b4_\b._\bh\n+ * _\bl_\bi_\bn_\be_\ba_\br\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/a00305_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00170_source.html", "comments": ["Files 6% 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/Cal3Unified.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Chebyshev2.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-
    Cal3Unified.h
    \n+
    Chebyshev2.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-
    24#pragma once
    \n-
    25
    \n-
    26#include <gtsam/geometry/Cal3DS2_Base.h>
    \n-
    27
    \n-
    28namespace gtsam {
    \n-
    29
    \n-
    \n-
    45class GTSAM_EXPORT Cal3Unified : public Cal3DS2_Base {
    \n-
    46 using This = Cal3Unified;
    \n-
    47 using Base = Cal3DS2_Base;
    \n-
    48
    \n-
    49 private:
    \n-
    50 double xi_ = 0.0f;
    \n-
    51
    \n-
    52 public:
    \n-
    53 enum { dimension = 10 };
    \n-
    54
    \n-
    56 using shared_ptr = boost::shared_ptr<Cal3Unified>;
    \n-
    57
    \n-
    60
    \n-
    62 Cal3Unified() = default;
    \n-
    63
    \n-
    64 Cal3Unified(double fx, double fy, double s, double u0, double v0, double k1,
    \n-
    65 double k2, double p1 = 0.0, double p2 = 0.0, double xi = 0.0)
    \n-
    66 : Base(fx, fy, s, u0, v0, k1, k2, p1, p2), xi_(xi) {}
    \n-
    67
    \n-
    68 ~Cal3Unified() override {}
    \n-
    69
    \n-
    73
    \n-
    74 Cal3Unified(const Vector10& v)
    \n-
    75 : Base(v(0), v(1), v(2), v(3), v(4), v(5), v(6), v(7), v(8)), xi_(v(9)) {}
    \n-
    76
    \n-
    80
    \n-
    82 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,
    \n-
    83 const Cal3Unified& cal);
    \n-
    84
    \n-
    86 void print(const std::string& s = "") const override;
    \n-
    87
    \n-
    89 bool equals(const Cal3Unified& K, double tol = 10e-9) const;
    \n-
    90
    \n-
    94
    \n-
    96 inline double xi() const { return xi_; }
    \n-
    97
    \n-
    99 Vector10 vector() const;
    \n-
    100
    \n-
    108 Point2 uncalibrate(const Point2& p,
    \n-
    109 OptionalJacobian<2, 10> Dcal = boost::none,
    \n-
    110 OptionalJacobian<2, 2> Dp = boost::none) const;
    \n-
    111
    \n-
    113 Point2 calibrate(const Point2& p, OptionalJacobian<2, 10> Dcal = boost::none,
    \n-
    114 OptionalJacobian<2, 2> Dp = boost::none) const;
    \n-
    115
    \n-
    117 Point2 spaceToNPlane(const Point2& p) const;
    \n-
    118
    \n-
    120 Point2 nPlaneToSpace(const Point2& p) const;
    \n-
    121
    \n-
    125
    \n-
    127 Cal3Unified retract(const Vector& d) const;
    \n-
    128
    \n-
    130 Vector localCoordinates(const Cal3Unified& T2) const;
    \n-
    131
    \n-
    133 size_t dim() const override { return Dim(); }
    \n-
    134
    \n-
    136 inline static size_t Dim() { return dimension; }
    \n-
    137
    \n-
    139
    \n-
    140 private:
    \n-
    142 friend class boost::serialization::access;
    \n-
    143 template <class Archive>
    \n-
    144 void serialize(Archive& ar, const unsigned int /*version*/) {
    \n-
    145 ar& boost::serialization::make_nvp(
    \n-
    146 "Cal3Unified", boost::serialization::base_object<Cal3DS2_Base>(*this));
    \n-
    147 ar& BOOST_SERIALIZATION_NVP(xi_);
    \n-
    148 }
    \n-
    149};
    \n-
    \n-
    150
    \n-
    151template <>
    \n-
    152struct traits<Cal3Unified> : public internal::Manifold<Cal3Unified> {};
    \n-
    153
    \n-
    154template <>
    \n-
    155struct traits<const Cal3Unified> : public internal::Manifold<Cal3Unified> {};
    \n-
    156}
    \n+
    33#pragma once
    \n+
    34
    \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+
    49
    \n+
    50 using Base = Basis<Chebyshev2>;
    \n+
    51 using Parameters = Eigen::Matrix<double, /*Nx1*/ -1, 1>;
    \n+
    52 using DiffMatrix = Eigen::Matrix<double, /*NxN*/ -1, -1>;
    \n+
    53
    \n+
    \n+
    55 static double Point(size_t N, int j) {
    \n+
    56 assert(j >= 0 && size_t(j) < N);
    \n+
    57 const double dtheta = M_PI / (N > 1 ? (N - 1) : 1);
    \n+
    58 // We add -PI so that we get values ordered from -1 to +1
    \n+
    59 // sin(- M_PI_2 + dtheta*j); also works
    \n+
    60 return cos(-M_PI + dtheta * j);
    \n+
    61 }
    \n+
    \n+
    62
    \n+
    \n+
    64 static double Point(size_t N, int j, double a, double b) {
    \n+
    65 assert(j >= 0 && size_t(j) < N);
    \n+
    66 const double dtheta = M_PI / (N - 1);
    \n+
    67 // We add -PI so that we get values ordered from -1 to +1
    \n+
    68 return a + (b - a) * (1. + cos(-M_PI + dtheta * j)) / 2;
    \n+
    69 }
    \n+
    \n+
    70
    \n+
    \n+
    72 static Vector Points(size_t N) {
    \n+
    73 Vector points(N);
    \n+
    74 for (size_t j = 0; j < N; j++) points(j) = Point(N, j);
    \n+
    75 return points;
    \n+
    76 }
    \n+
    \n+
    77
    \n+
    \n+
    79 static Vector Points(size_t N, double a, double b) {
    \n+
    80 Vector points = Points(N);
    \n+
    81 const double T1 = (a + b) / 2, T2 = (b - a) / 2;
    \n+
    82 points = T1 + (T2 * points).array();
    \n+
    83 return points;
    \n+
    84 }
    \n+
    \n+
    85
    \n+
    94 static Weights CalculateWeights(size_t N, double x, double a = -1,
    \n+
    95 double b = 1);
    \n+
    96
    \n+
    101 static Weights DerivativeWeights(size_t N, double x, double a = -1,
    \n+
    102 double b = 1);
    \n+
    103
    \n+
    108 static DiffMatrix DifferentiationMatrix(size_t N, double a = -1,
    \n+
    109 double b = 1);
    \n+
    110
    \n+
    129 static Weights IntegrationWeights(size_t N, double a = -1, double b = 1);
    \n+
    130
    \n+
    134 template <size_t M>
    \n+
    \n+
    135 static Matrix matrix(std::function<Eigen::Matrix<double, M, 1>(double)> f,
    \n+
    136 size_t N, double a = -1, double b = 1) {
    \n+
    137 Matrix Xmat(M, N);
    \n+
    138 for (size_t j = 0; j < N; j++) {
    \n+
    139 Xmat.col(j) = f(Point(N, j, a, b));
    \n+
    140 }
    \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
    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-
    Calibration of a camera with radial distortion.
    Definition Cal3DS2_Base.h:42
    \n-
    Calibration of a omni-directional camera with mirror + lens radial distortion.
    Definition Cal3Unified.h:45
    \n-
    size_t dim() const override
    Return dimensions of calibration manifold object.
    Definition Cal3Unified.h:133
    \n-
    Cal3Unified()=default
    Default Constructor with only unit focal length.
    \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+
    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+
    static Matrix matrix(std::function< Eigen::Matrix< double, M, 1 >(double)> f, size_t N, double a=-1, double b=1)
    Create matrix of values at Chebyshev points given vector-valued function.
    Definition Chebyshev2.h:135
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,151 +1,128 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Cal3Unified.h\n+Chebyshev2.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 \n-27\n-28namespace _\bg_\bt_\bs_\ba_\bm {\n-29\n-_\b4_\b5class GTSAM_EXPORT _\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd : public _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be {\n-46 using _\bT_\bh_\bi_\bs = _\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd;\n-47 using _\bB_\ba_\bs_\be = _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be;\n-48\n-49 private:\n-50 double xi_ = 0.0f;\n-51\n-52 public:\n-53 enum { dimension = 10 };\n-54\n-56 using shared_ptr = boost::shared_ptr;\n-57\n-60\n-_\b6_\b2 _\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd() = default;\n-63\n-64 _\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd(double fx, double fy, double s, double u0, double v0, double k1,\n-65 double k2, double p1 = 0.0, double p2 = 0.0, double xi = 0.0)\n-66 : _\bB_\ba_\bs_\be(fx, fy, s, u0, v0, k1, k2, p1, p2), xi_(xi) {}\n-67\n-68 _\b~_\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd() override {}\n-69\n-73\n-74 Cal3Unified(const Vector10& v)\n-75 : Base(v(0), v(1), v(2), v(3), v(4), v(5), v(6), v(7), v(8)), xi_(v(9)) {}\n-76\n-80\n-82 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,\n-83 const Cal3Unified& cal);\n-84\n-86 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const override;\n-87\n-89 bool equals(const Cal3Unified& K, double tol = 10e-9) const;\n-90\n-94\n-_\b9_\b6 inline double _\bx_\bi() const { return xi_; }\n-97\n-99 Vector10 vector() const;\n-100\n-108 _\bP_\bo_\bi_\bn_\bt_\b2 uncalibrate(const _\bP_\bo_\bi_\bn_\bt_\b2& p,\n-109 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b1_\b0_\b> Dcal = boost::none,\n-110 _\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-111\n-113 _\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 _\b1_\b0_\b> Dcal = boost::\n-none,\n-114 _\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-115\n-117 _\bP_\bo_\bi_\bn_\bt_\b2 spaceToNPlane(const _\bP_\bo_\bi_\bn_\bt_\b2& p) const;\n-118\n-120 _\bP_\bo_\bi_\bn_\bt_\b2 nPlaneToSpace(const _\bP_\bo_\bi_\bn_\bt_\b2& p) const;\n-121\n-125\n-127 _\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd retract(const Vector& d) const;\n-128\n-130 Vector localCoordinates(const _\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd& T2) const;\n-131\n-_\b1_\b3_\b3 size_t _\bd_\bi_\bm() const override { return Dim(); }\n-134\n-_\b1_\b3_\b6 inline static size_t _\bD_\bi_\bm() { return dimension; }\n-137\n-139\n-140 private:\n-_\b1_\b4_\b2 friend class boost::serialization::access;\n-143 template \n-144 void serialize(Archive& ar, const unsigned int /*version*/) {\n-145 ar& boost::serialization::make_nvp(\n-146 \"Cal3Unified\", boost::serialization::base_object(*this));\n-147 ar& BOOST_SERIALIZATION_NVP(xi_);\n-148 }\n-149};\n-150\n-151template <>\n-_\b1_\b5_\b2struct _\bt_\br_\ba_\bi_\bt_\bs<_\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {};\n-153\n-154template <>\n-_\b1_\b5_\b5struct _\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-156}\n+33#pragma once\n+34\n+35#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n+36#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+37#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\bi_\bs_\b/_\bB_\ba_\bs_\bi_\bs_\b._\bh>\n+38\n+39namespace _\bg_\bt_\bs_\ba_\bm {\n+40\n+_\b4_\b6class GTSAM_EXPORT _\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b2 : public _\bB_\ba_\bs_\bi_\bs {\n+47 public:\n+48 EIGEN_MAKE_ALIGNED_OPERATOR_NEW\n+49\n+50 using _\bB_\ba_\bs_\be = _\bB_\ba_\bs_\bi_\bs_\b<_\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b2_\b>;\n+51 using Parameters = Eigen::Matrix;\n+52 using DiffMatrix = Eigen::Matrix;\n+53\n+_\b5_\b5 static double _\bP_\bo_\bi_\bn_\bt(size_t N, int j) {\n+56 assert(j >= 0 && size_t(j) < N);\n+57 const double dtheta = M_PI / (N > 1 ? (N - 1) : 1);\n+58 // We add -PI so that we get values ordered from -1 to +1\n+59 // sin(- M_PI_2 + dtheta*j); also works\n+60 return cos(-M_PI + dtheta * j);\n+61 }\n+62\n+_\b6_\b4 static double _\bP_\bo_\bi_\bn_\bt(size_t N, int j, double a, double b) {\n+65 assert(j >= 0 && size_t(j) < N);\n+66 const double dtheta = M_PI / (N - 1);\n+67 // We add -PI so that we get values ordered from -1 to +1\n+68 return a + (b - a) * (1. + cos(-M_PI + dtheta * j)) / 2;\n+69 }\n+70\n+_\b7_\b2 static Vector _\bP_\bo_\bi_\bn_\bt_\bs(size_t N) {\n+73 Vector points(N);\n+74 for (size_t j = 0; j < N; j++) points(j) = Point(N, j);\n+75 return points;\n+76 }\n+77\n+_\b7_\b9 static Vector _\bP_\bo_\bi_\bn_\bt_\bs(size_t N, double a, double b) {\n+80 Vector points = Points(N);\n+81 const double T1 = (a + b) / 2, T2 = (b - a) / 2;\n+82 points = T1 + (T2 * points).array();\n+83 return points;\n+84 }\n+85\n+94 static Weights CalculateWeights(size_t N, double x, double a = -1,\n+95 double b = 1);\n+96\n+101 static Weights DerivativeWeights(size_t N, double x, double a = -1,\n+102 double b = 1);\n+103\n+108 static DiffMatrix DifferentiationMatrix(size_t N, double a = -1,\n+109 double b = 1);\n+110\n+129 static Weights IntegrationWeights(size_t N, double a = -1, double b = 1);\n+130\n+134 template \n+_\b1_\b3_\b5 static Matrix _\bm_\ba_\bt_\br_\bi_\bx(std::function(double)> f,\n+136 size_t N, double a = -1, double b = 1) {\n+137 Matrix Xmat(M, N);\n+138 for (size_t j = 0; j < N; j++) {\n+139 Xmat.col(j) = f(Point(N, j, a, b));\n+140 }\n+141 return Xmat;\n+142 }\n+143}; // \\ Chebyshev2\n+144\n+145} // namespace gtsam\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+_\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:_\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:_\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_\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_\b:_\b:_\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd\n-Calibration of a omni-directional camera with mirror + lens radial distortion.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Unified.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd_\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 Cal3Unified.h:133\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd_\b:_\b:_\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd\n-Cal3Unified()=default\n-Default Constructor with only unit focal length.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd_\b:_\b:_\bx_\bi\n-double xi() const\n-mirror parameter\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Unified.h:96\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd_\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 Cal3Unified.h:136\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:_\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b2\n+Chebyshev Interpolation on Chebyshev points of the second kind Note that N\n+here, the number of points...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Chebyshev2.h:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b2_\b:_\b:_\bP_\bo_\bi_\bn_\bt\n+static double Point(size_t N, int j)\n+Specific Chebyshev point.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Chebyshev2.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b2_\b:_\b:_\bP_\bo_\bi_\bn_\bt\n+static double Point(size_t N, int j, double a, double b)\n+Specific Chebyshev point, within [a,b] interval.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Chebyshev2.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b2_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\bs\n+static Vector Points(size_t N)\n+All Chebyshev points.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Chebyshev2.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b2_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\bs\n+static Vector Points(size_t N, double a, double b)\n+All Chebyshev points, within [a,b] interval.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Chebyshev2.h:79\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b2_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx\n+static Matrix matrix(std::function< Eigen::Matrix< double, M, 1 >(double)> f,\n+size_t N, double a=-1, double b=1)\n+Create matrix of values at Chebyshev points given vector-valued function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Chebyshev2.h:135\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+ * _\bb_\ba_\bs_\bi_\bs\n+ * _\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\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/a01394.html", "comments": ["Files 5% 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/a00311.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00464.html", "comments": ["Files 1% similar despite different names"], "unified_diff": "@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    SOn.h File Reference
    \n
    \n
    \n \n

    N*N matrix representation of SO(N). \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@@ -158,13 +158,13 @@\n

    N can be Eigen::Dynamic

    Author
    Frank Dellaert
    \n
    Date
    March 2019
    \n \n \n \n
    \n \n
    \n \n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00314_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01151_source.html", "comments": ["Files 7% 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 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-
    Cal3Bundler.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// \\callgraph
    \n+
    19
    \n
    20#pragma once
    \n
    21
    \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-
    35 double tol_ = 1e-5;
    \n-
    36
    \n-
    37 // NOTE: We use the base class fx to represent the common focal length.
    \n-
    38 // Also, image center parameters (u0, v0) are not optimized
    \n-
    39 // but are treated as constants.
    \n-
    40
    \n-
    41 public:
    \n-
    42 enum { dimension = 3 };
    \n-
    43
    \n-
    45 using shared_ptr = boost::shared_ptr<Cal3Bundler>;
    \n-
    46
    \n-
    49
    \n-
    51 Cal3Bundler() = default;
    \n-
    52
    \n-
    \n-
    62 Cal3Bundler(double f, double k1, double k2, double u0 = 0, double v0 = 0,
    \n-
    63 double tol = 1e-5)
    \n-
    64 : Cal3(f, f, 0, u0, v0), k1_(k1), k2_(k2), tol_(tol) {}
    \n-
    \n-
    65
    \n-
    66 ~Cal3Bundler() override {}
    \n-
    67
    \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 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,
    \n-
    74 const Cal3Bundler& cal);
    \n+
    73 void setEliminationResult(
    \n+
    74 const FactorGraphType::EliminationResult& eliminationResult);
    \n
    75
    \n-
    77 void print(const std::string& s = "") const override;
    \n+
    77 Base::FactorType::shared_ptr& cachedFactor() { return cachedFactor_; }
    \n
    78
    \n-
    80 bool equals(const Cal3Bundler& K, double tol = 10e-9) const;
    \n+
    80 const Vector& gradientContribution() const { return gradientContribution_; }
    \n
    81
    \n-
    85
    \n-
    87 inline double k1() const { return k1_; }
    \n-
    88
    \n-
    90 inline double k2() const { return k2_; }
    \n-
    91
    \n-
    93 inline double px() const { return u0_; }
    \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-
    96 inline double py() const { return v0_; }
    \n-
    97
    \n-
    98 Matrix3 K() const override;
    \n-
    99 Vector4 k() const;
    \n-
    100
    \n-
    101 Vector3 vector() const;
    \n-
    102
    \n-
    103#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
    \n-
    105 inline double GTSAM_DEPRECATED u0() const { return u0_; }
    \n-
    106
    \n-
    108 inline double GTSAM_DEPRECATED v0() const { return v0_; }
    \n-
    109#endif
    \n-
    110
    \n-
    119 Point2 uncalibrate(const Point2& p, OptionalJacobian<2, 3> Dcal = boost::none,
    \n-
    120 OptionalJacobian<2, 2> Dp = boost::none) const;
    \n-
    121
    \n-
    130 Point2 calibrate(const Point2& pi, OptionalJacobian<2, 3> Dcal = boost::none,
    \n-
    131 OptionalJacobian<2, 2> Dp = boost::none) const;
    \n-
    132
    \n-
    134 Matrix2 D2d_intrinsic(const Point2& p) const;
    \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 Matrix23 D2d_calibration(const Point2& p) const;
    \n-
    138
    \n-
    140 Matrix25 D2d_intrinsic_calibration(const Point2& p) const;
    \n-
    141
    \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 size_t dim() const override { return Dim(); }
    \n-
    148
    \n-
    150 inline static size_t Dim() { return dimension; }
    \n-
    151
    \n-
    \n-
    153 inline Cal3Bundler retract(const Vector& d) const {
    \n-
    154 return Cal3Bundler(fx_ + d(0), k1_ + d(1), k2_ + d(2), u0_, v0_);
    \n-
    155 }
    \n-
    \n-
    156
    \n-
    \n-
    158 Vector3 localCoordinates(const Cal3Bundler& T2) const {
    \n-
    159 return T2.vector() - vector();
    \n-
    160 }
    \n-
    \n-
    161
    \n-
    162 private:
    \n-
    166
    \n-
    168 friend class boost::serialization::access;
    \n-
    169 template <class Archive>
    \n-
    170 void serialize(Archive& ar, const unsigned int /*version*/) {
    \n-
    171 ar& boost::serialization::make_nvp(
    \n-
    172 "Cal3Bundler", boost::serialization::base_object<Cal3>(*this));
    \n-
    173 ar& BOOST_SERIALIZATION_NVP(k1_);
    \n-
    174 ar& BOOST_SERIALIZATION_NVP(k2_);
    \n-
    175 ar& BOOST_SERIALIZATION_NVP(tol_);
    \n-
    176 }
    \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-
    179};
    \n-
    \n-
    180
    \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+
    178} // namespace gtsam
    \n+\n+
    Base class for cliques of a BayesTree.
    \n+
    Linear Factor Graph where all factors are Gaussians.
    \n+
    Chordal Bayes Net, the result of eliminating a factor graph.
    \n+
    Conditional Gaussian Base class.
    \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-
    double k2() const
    distorsion parameter k2
    Definition Cal3Bundler.h:90
    \n-
    Cal3Bundler()=default
    Default constructor.
    \n-
    Cal3Bundler retract(const Vector &d) const
    Update calibration with tangent space delta.
    Definition Cal3Bundler.h:153
    \n-
    double py() const
    image center in y
    Definition Cal3Bundler.h:96
    \n-
    Cal3Bundler(double f, double k1, double k2, double u0=0, double v0=0, double tol=1e-5)
    Constructor.
    Definition Cal3Bundler.h:62
    \n-
    Vector3 localCoordinates(const Cal3Bundler &T2) const
    Calculate local coordinates to another calibration.
    Definition Cal3Bundler.h:158
    \n-
    double px() const
    image center in x
    Definition Cal3Bundler.h:93
    \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+
    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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,196 +1,205 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Cal3Bundler.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// \\callgraph\n+19\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-25namespace _\bg_\bt_\bs_\ba_\bm {\n-26\n-_\b3_\b2class GTSAM_EXPORT _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br : public _\bC_\ba_\bl_\b3 {\n-33 private:\n-34 double k1_ = 0.0f, k2_ = 0.0f;\n-35 double tol_ = 1e-5;\n-36\n-37 // NOTE: We use the base class fx to represent the common focal length.\n-38 // Also, image center parameters (u0, v0) are not optimized\n-39 // but are treated as constants.\n-40\n-41 public:\n-42 enum { dimension = 3 };\n-43\n-45 using shared_ptr = boost::shared_ptr;\n-46\n-49\n-_\b5_\b1 _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br() = default;\n-52\n-_\b6_\b2 _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br(double f, double k1, double k2, double u0 = 0, double v0 = 0,\n-63 double tol = 1e-5)\n-64 : _\bC_\ba_\bl_\b3(f, f, 0, u0, v0), k1_(k1), k2_(k2), tol_(tol) {}\n-65\n-66 _\b~_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br() override {}\n-67\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 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,\n-74 const Cal3Bundler& cal);\n+73 void setEliminationResult(\n+74 const FactorGraphType::EliminationResult& eliminationResult);\n 75\n-77 void print(const std::string& s = \"\") const override;\n+_\b7_\b7 Base::FactorType::shared_ptr& _\bc_\ba_\bc_\bh_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br() { return cachedFactor_; }\n 78\n-80 bool equals(const Cal3Bundler& K, double tol = 10e-9) const;\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-85\n-_\b8_\b7 inline double _\bk_\b1() const { return k1_; }\n-88\n-_\b9_\b0 inline double _\bk_\b2() const { return k2_; }\n-91\n-_\b9_\b3 inline double _\bp_\bx() const { return u0_; }\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-_\b9_\b6 inline double _\bp_\by() const { return v0_; }\n-97\n-98 Matrix3 K() const override;\n-99 Vector4 k() const;\n-100\n-101 Vector3 vector() const;\n-102\n-103#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n-105 inline double GTSAM_DEPRECATED u0() const { return u0_; }\n-106\n-108 inline double GTSAM_DEPRECATED v0() const { return v0_; }\n-109#endif\n-110\n-119 _\bP_\bo_\bi_\bn_\bt_\b2 uncalibrate(const Point2& p, OptionalJacobian<2, 3> Dcal = boost::\n-none,\n-120 OptionalJacobian<2, 2> Dp = boost::none) const;\n-121\n-130 _\bP_\bo_\bi_\bn_\bt_\b2 calibrate(const Point2& pi, OptionalJacobian<2, 3> Dcal = boost::\n-none,\n-131 OptionalJacobian<2, 2> Dp = boost::none) const;\n-132\n-134 Matrix2 D2d_intrinsic(const Point2& p) const;\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 Matrix23 D2d_calibration(const Point2& p) const;\n-138\n-140 Matrix25 D2d_intrinsic_calibration(const Point2& p) const;\n-141\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-_\b1_\b4_\b7 size_t _\bd_\bi_\bm() const override { return Dim(); }\n-148\n-_\b1_\b5_\b0 inline static size_t _\bD_\bi_\bm() { return dimension; }\n-151\n-_\b1_\b5_\b3 inline _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br _\br_\be_\bt_\br_\ba_\bc_\bt(const Vector& d) const {\n-154 return _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br(fx_ + d(0), k1_ + d(1), k2_ + d(2), u0_, v0_);\n-155 }\n-156\n-_\b1_\b5_\b8 Vector3 _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br& T2) const {\n-159 return T2.vector() - vector();\n-160 }\n-161\n-162 private:\n-166\n-_\b1_\b6_\b8 friend class boost::serialization::access;\n-169 template \n-170 void serialize(Archive& ar, const unsigned int /*version*/) {\n-171 ar& boost::serialization::make_nvp(\n-172 \"Cal3Bundler\", boost::serialization::base_object(*this));\n-173 ar& BOOST_SERIALIZATION_NVP(k1_);\n-174 ar& BOOST_SERIALIZATION_NVP(k2_);\n-175 ar& BOOST_SERIALIZATION_NVP(tol_);\n-176 }\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-179};\n-180\n-181template <>\n-_\b1_\b8_\b2struct _\bt_\br_\ba_\bi_\bt_\bs<_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {};\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:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n-{};\n-186\n-187} // 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+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_\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_\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_\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:_\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_\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_\bB_\bu_\bn_\bd_\bl_\be_\br\n-Calibration used by Bundler.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Bundler.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b:_\b:_\bk_\b1\n-double k1() const\n-distorsion parameter k1\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Bundler.h:87\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b:_\b:_\bk_\b2\n-double k2() const\n-distorsion parameter k2\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Bundler.h:90\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br\n-Cal3Bundler()=default\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-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt\n-Cal3Bundler retract(const Vector &d) const\n-Update calibration with tangent space delta.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Bundler.h:153\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\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 Cal3Bundler.h:96\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br\n-Cal3Bundler(double f, double k1, double k2, double u0=0, double v0=0, double\n-tol=1e-5)\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Bundler.h:62\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n-Vector3 localCoordinates(const Cal3Bundler &T2) const\n-Calculate local coordinates to another calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Bundler.h:158\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\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 Cal3Bundler.h:93\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b:_\b:_\bd_\bi_\bm\n-size_t dim() const override\n-return DOF, dimensionality of tangent space\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Bundler.h:147\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\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 Cal3Bundler.h:150\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- * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\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/a00329_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00413_source.html", "comments": ["Files 1% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n \n
    \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
    19#pragma once
    \n
    20
    \n-
    21#include <gtsam/base/Manifold.h>
    \n-\n+
    21#include <gtsam/base/Manifold.h>
    \n+\n
    23#include <gtsam/base/concepts.h>
    \n
    24#include <gtsam/dllexport.h>
    \n-\n-\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@@ -273,31 +273,31 @@\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+\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 exception type that uses tbb_allocator if GTSAM is compiled with TBB.
    \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-
    Bearing-Range product.
    \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+
    Base class and basic functions for Manifold types.
    \n+
    Bearing-Range product.
    \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
    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@@ -330,13 +330,13 @@\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": "@@ -170,24 +170,24 @@\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 _\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-_\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-_\bP_\bo_\bs_\be_\b3_\b._\bh\n-3D Pose\n+_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n+Base class and basic functions for Manifold types.\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00350_source.html", "comments": ["Files 0% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n
    \n
    \n
    \n \n \n
    \n \n
    \n
    \n \n
    \n
    PinholeCamera.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
    \n
    24namespace gtsam {
    \n
    25
    \n
    32template<typename Calibration>
    \n
    \n
    33class PinholeCamera: public PinholeBaseK<Calibration> {
    \n
    34
    \n@@ -398,15 +398,15 @@\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+\n
    341};
    \n
    \n
    342
    \n
    343// manifold traits
    \n
    344
    \n
    345template <typename Calibration>
    \n
    \n@@ -421,17 +421,17 @@\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+
    #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
    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@@ -485,13 +485,13 @@\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"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00353.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01238.html", "comments": ["Files 6% 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.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@@ -67,15 +67,15 @@\n
    \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n \n
    \n \n-
    Cal3.h File Reference
    \n+Namespaces
    \n+
    StereoFactor.h File Reference
    \n \n
    \n \n-

    Common code for all Calibration models. \n+

    A non-linear factor for stereo measurements. \n More...

    \n \n-

    Go to the source code of this file.

    \n+

    Go to the source code of this file.

    \n

    \n Classes

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

    \n Classes

    class  gtsam::Cal3
     Common base class for all calibration models. 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-\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-

    Common code for all Calibration models.

    \n-
    Author
    Varun Agrawal
    \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,33 +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-Cal3.h File Reference\n-Common code for all Calibration models. _\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+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:_\bC_\ba_\bl_\b3\n-\u00a0 Common base class for all calibration models. _\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-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-Common code for all Calibration models.\n+A non-linear factor for stereo measurements.\n Author\n- Varun Agrawal\n+ Alireza Fathi\n+ Chris Beall\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bl_\b3_\b._\bh\n+ * _\bs_\bl_\ba_\bm\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/a00362.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01112.html", "comments": ["Files 6% 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/StereoPoint2.cpp 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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n \n \n
    \n \n-
    StereoPoint2.cpp File Reference
    \n+Classes |\n+Namespaces
    \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+Classes

    class  gtsam::NonlinearFactorGraph
     
    struct  gtsam::traits< NonlinearFactorGraph >
     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-ostream & gtsam::operator<< (ostream &os, const StereoPoint2 &p)
     
    \n

    Detailed Description

    \n-
    Date
    Jan 26, 2010
    \n-
    Author
    dellaert
    \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,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-StereoPoint2.cpp File Reference\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+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\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+\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+\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 _\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+Factor Graph consisting of non-linear factors.\n Author\n- dellaert\n+ Frank Dellaert\n+ Carlos Nieto\n+ Christian Potthast\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+ * _\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 * Generated on Tue Jan 9 2024 05:51: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/a00365_source.html", "comments": ["Files 6% 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/StereoCamera.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-
    StereoCamera.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-
    18#pragma once
    \n-
    19
    \n-\n-\n-\n-
    23
    \n-
    24namespace gtsam {
    \n+
    20#pragma once
    \n+
    21
    \n+\n+
    23#include <gtsam/base/Lie.h>
    \n+
    24#include <boost/optional.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-
    42
    \n-
    \n-
    47class GTSAM_EXPORT StereoCamera {
    \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
    48
    \n-
    49public:
    \n-
    50
    \n-\n-
    56 typedef StereoPoint2Vector MeasurementVector;
    \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-
    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+
    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-
    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+
    94 static Rot2 Random(std::mt19937 & rng);
    \n+
    95
    \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-
    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+
    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
    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-
    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+
    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
    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-
    The most common 5DOF 3D->2D calibration + Stereo baseline.
    \n-
    3D Pose
    \n-
    A 2D stereo point (uL,uR,v)
    \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
    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-
    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+
    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
    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+
    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-
    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+
    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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,265 +1,277 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-StereoCamera.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-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/_\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-_\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+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 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+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-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+_\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 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+94 static _\bR_\bo_\bt_\b2 Random(std::mt19937 & rng);\n+95\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-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+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 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-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+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 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-_\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-_\bP_\bo_\bs_\be_\b3_\b._\bh\n-3D Pose\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_\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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+_\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 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+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_\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:_\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:_\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_\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\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+ * _\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/a00380_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00332_source.html", "comments": ["Files 0% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n
    \n
    \n
    \n \n \n
    \n \n
    \n
    \n \n
    \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@@ -117,16 +117,16 @@\n
    10 * -------------------------------------------------------------------------- */
    \n
    11
    \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+\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@@ -458,15 +458,15 @@\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+\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@@ -476,17 +476,17 @@\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+
    #define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
    This marks a GTSAM object to require alignment.
    Definition types.h:308
    \n+
    3*3 matrix representation of SO(3)
    \n+
    Lie Group wrapper for Eigen Quaternions.
    \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@@ -528,13 +528,13 @@\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": "@@ -354,18 +354,18 @@\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+_\bQ_\bu_\ba_\bt_\be_\br_\bn_\bi_\bo_\bn_\b._\bh\n+Lie Group wrapper for Eigen Quaternions.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00383_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00782_source.html", "comments": ["Files 8% 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/PinholeSet.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@@ -72,15 +72,15 @@\n \n
    \n
    \n \n \n
    \n \n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    PinholeSet.h
    \n+
    GaussianBayesTree.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 <boost/optional.hpp>
    \n-
    23
    \n-
    24namespace gtsam {
    \n-
    25
    \n-
    29template<class CAMERA>
    \n-
    \n-
    30class PinholeSet: public CameraSet<CAMERA> {
    \n-
    31
    \n-
    32private:
    \n-
    33 typedef CameraSet<CAMERA> Base;
    \n-
    34 typedef PinholeSet<CAMERA> This;
    \n-
    35
    \n-
    36protected:
    \n-
    37
    \n-
    38public:
    \n-
    39
    \n-
    \n-
    41 virtual ~PinholeSet() {
    \n-
    42 }
    \n-
    \n-
    43
    \n-
    46
    \n-
    \n-
    48 void print(const std::string& s = "") const override {
    \n-
    49 Base::print(s);
    \n-
    50 }
    \n-
    \n-
    51
    \n-
    \n-
    53 bool equals(const PinholeSet& p, double tol = 1e-9) const {
    \n-
    54 return Base::equals(p, tol); // TODO all flags
    \n-
    55 }
    \n-
    \n-
    56
    \n-
    58
    \n-
    \n-\n-
    61 const typename CAMERA::MeasurementVector& measured,
    \n-
    62 const TriangulationParameters& params) const {
    \n-
    63 return gtsam::triangulateSafe(*this, measured, params);
    \n-
    64 }
    \n-
    \n+
    20#pragma once
    \n+
    21
    \n+\n+\n+\n+\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+
    62
    \n+
    64 bool equals(const This& other, double tol = 1e-9) const;
    \n
    65
    \n-
    66private:
    \n-
    67
    \n-\n-
    70 template<class ARCHIVE>
    \n-
    71 void serialize(ARCHIVE & ar, const unsigned int version) {
    \n-
    72 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
    \n-
    73 }
    \n-
    74};
    \n-
    \n-
    75
    \n-
    76template<class CAMERA>
    \n-
    \n-
    77struct traits<PinholeSet<CAMERA> > : public Testable<PinholeSet<CAMERA> > {
    \n-
    78};
    \n-
    \n-
    79
    \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-
    Functions for triangulation.
    \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+
    Bayes Tree is a tree of cliques of a Bayes Chain.
    \n+
    Base class for cliques of a BayesTree.
    \n+
    Linear Factor Graph where all factors are Gaussians.
    \n+
    Chordal Bayes Net, the result of eliminating a factor graph.
    \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+
    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-
    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-
    TriangulationResult triangulateSafe(const typename CAMERA::MeasurementVector &measured, const TriangulationParameters &params) const
    triangulateSafe
    Definition PinholeSet.h:60
    \n-
    bool equals(const PinholeSet &p, double tol=1e-9) const
    equals
    Definition PinholeSet.h:53
    \n-
    virtual ~PinholeSet()
    Virtual destructor.
    Definition PinholeSet.h:41
    \n-
    void print(const std::string &s="") const override
    print
    Definition PinholeSet.h:48
    \n-
    friend class boost::serialization::access
    Serialization function.
    Definition PinholeSet.h:69
    \n-
    Definition triangulation.h:556
    \n-
    TriangulationResult is an optional point, along with the reasons why it is invalid.
    Definition triangulation.h:626
    \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,134 +1,146 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-PinholeSet.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, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, 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_\bm_\be_\br_\ba_\bS_\be_\bt_\b._\bh>\n-21#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-22#include \n-23\n-24namespace _\bg_\bt_\bs_\ba_\bm {\n-25\n-29template\n-_\b3_\b0class _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt: public _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt {\n-31\n-32private:\n-33 typedef _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b> Base;\n-34 typedef _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b> This;\n-35\n-36protected:\n-37\n-38public:\n-39\n-_\b4_\b1 virtual _\b~_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt() {\n-42 }\n-43\n-46\n-_\b4_\b8 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const override {\n-49 Base::print(s);\n-50 }\n-51\n-_\b5_\b3 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt& p, double tol = 1e-9) const {\n-54 return Base::equals(p, tol); // TODO all flags\n-55 }\n-56\n-58\n-_\b6_\b0 _\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(\n-61 const typename CAMERA::MeasurementVector& measured,\n-62 const _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs& params) const {\n-63 return _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bS_\ba_\bf_\be(*this, measured, params);\n-64 }\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+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+62\n+64 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& other, double tol = 1e-9) const;\n 65\n-66private:\n-67\n-_\b6_\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-70 template\n-71 void serialize(ARCHIVE & ar, const unsigned int version) {\n-72 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);\n-73 }\n-74};\n-75\n-76template\n-_\b7_\b7struct _\bt_\br_\ba_\bi_\bt_\bs<_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt > : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be > {\n-78};\n-79\n-80template\n-_\b8_\b1struct _\bt_\br_\ba_\bi_\bt_\bs > : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-> {\n-82};\n-83\n-84} // \\ namespace gtsam\n-_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b._\bh\n-Base class to create smart factors on poses or cameras.\n-_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh\n-Functions for triangulation.\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_\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_\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_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n+Chordal Bayes Net, the result of eliminating a factor graph.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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_\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:_\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:_\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:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt\n-PinholeSet: triangulates point and keeps an estimate of it around.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeSet.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bS_\ba_\bf_\be\n-TriangulationResult triangulateSafe(const typename CAMERA::MeasurementVector\n-&measured, const TriangulationParameters ¶ms) const\n-triangulateSafe\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeSet.h:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const PinholeSet &p, double tol=1e-9) const\n-equals\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeSet.h:53\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt_\b:_\b:_\b~_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt\n-virtual ~PinholeSet()\n-Virtual destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeSet.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\") const override\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeSet.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\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 PinholeSet.h:69\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_\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:_\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- * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt_\b._\bh\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 * Generated on Tue Jan 9 2024 05:51: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/a00428.html", "comments": ["Files 9% 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/SO4.cpp 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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n \n \n
    \n \n-
    SO4.cpp File Reference
    \n+Macros |\n+Typedefs
    \n+
    Quaternion.h File Reference
    \n \n
    \n \n-

    4*4 matrix representation of SO(4) \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+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-\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+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-

    4*4 matrix representation of SO(4)

    \n-
    Author
    Frank Dellaert
    \n-
    \n-Luca Carlone
    \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,31 +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-SO4.cpp 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 | _\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 N\bNa\bam\bme\bes\bsp\bpa\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 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+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-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+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-4*4 matrix representation of SO(4)\n+Lie Group wrapper for Eigen Quaternions.\n Author\n Frank Dellaert\n- Luca Carlone\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bO_\b4_\b._\bc_\bp_\bp\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/a00392.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00605.html", "comments": ["Files 6% 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/Cal3Unified.cpp 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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n \n \n
    \n \n-
    Cal3Unified.cpp File Reference
    \n+Namespaces
    \n+
    EliminationTree-inst.h 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-Functions

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

    Detailed Description

    \n-
    Date
    Mar 8, 2014
    \n-
    Author
    Jing Dong
    \n+
    Author
    Frank Dellaert
    \n
    \n-Varun Agrawal
    \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,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 | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Cal3Unified.cpp File Reference\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 N\bNa\bam\bme\bes\bsp\bpa\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- Date\n- Mar 8, 2014\n Author\n- Jing Dong\n- Varun Agrawal\n+ Frank Dellaert\n+ Richard Roberts\n+ Date\n+ Oct 13, 2010\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+ * _\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 * Generated on Tue Jan 9 2024 05:51: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/a00440.html", "comments": ["Files 0% similar despite different names"], "unified_diff": "@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n

    Detailed Description

    \n

    3D Point

    \n
    \n
    \n \n
    \n \n
    \n \n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00404_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00473_source.html", "comments": ["Files 12% 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.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-
    Cal3DS2.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-
    21#pragma once
    \n+
    18#pragma once
    \n+
    19
    \n+
    20#include <gtsam/base/VectorSpace.h>
    \n+
    21#include <boost/serialization/nvp.hpp>
    \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-
    \n-
    35class GTSAM_EXPORT Cal3DS2 : public Cal3DS2_Base {
    \n-
    36 using Base = Cal3DS2_Base;
    \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-
    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+
    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+
    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-
    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+
    103} // \\ namespace gtsam
    \n+
    104
    \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-
    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+
    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,126 +1,140 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Cal3DS2.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-21#pragma once\n+18#pragma once\n+19\n+20#include \n+21#include \n 22\n-23#include \n-24#include \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+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-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+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+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 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+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:_\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_\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 * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b._\bh\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/a00422_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00818_source.html", "comments": ["Files 6% 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/Line3.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@@ -72,15 +72,15 @@\n
    \n
    \n
    \n \n \n
    \n \n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    Line3.h
    \n+
    SubgraphSolver.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/geometry/Rot3.h>
    \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-
    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-
    36 OptionalJacobian<4, 4> Dline = boost::none);
    \n-
    37
    \n-
    38
    \n-
    \n-
    44class GTSAM_EXPORT Line3 {
    \n-
    45 private:
    \n-
    46 Rot3 R_; // Rotation of line about x and y in world frame
    \n-
    47 double a_, b_; // Intersection of line with the world x-y plane rotated by R_
    \n-
    48 // Also the closest point on line to origin
    \n-
    49 public:
    \n-
    50 enum { dimension = 4 };
    \n-
    51
    \n-
    \n-\n-
    54 a_(0), b_(0) {}
    \n-
    \n-
    55
    \n-
    \n-
    57 Line3(const Rot3 &R, const double a, const double b) :
    \n-
    58 R_(R), a_(a), b_(b) {}
    \n-
    \n-
    59
    \n-
    71 Line3 retract(const Vector4 &v,
    \n-
    72 OptionalJacobian<4, 4> Dp = boost::none,
    \n-
    73 OptionalJacobian<4, 4> Dv = boost::none) const;
    \n-
    74
    \n-
    84 Vector4 localCoordinates(const Line3 &q,
    \n-
    85 OptionalJacobian<4, 4> Dp = boost::none,
    \n-
    86 OptionalJacobian<4, 4> Dq = boost::none) const;
    \n+\n+\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+
    \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-
    92 void print(const std::string &s = "") const;
    \n-
    93
    \n-
    100 bool equals(const Line3 &l2, double tol = 10e-9) const;
    \n-
    101
    \n-
    108 Unit3 project(OptionalJacobian<2, 4> Dline = boost::none) const;
    \n-
    109
    \n-
    118 Point3 point(double distance = 0) const;
    \n-
    119
    \n-
    \n-
    123 inline Rot3 R() const {
    \n-
    124 return R_;
    \n-
    125 }
    \n-
    \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-
    \n-
    130 inline double a() const {
    \n-
    131 return a_;
    \n-
    132 }
    \n-
    \n-
    133
    \n-
    \n-
    137 inline double b() const {
    \n-
    138 return b_;
    \n-
    139 }
    \n-
    \n-
    140
    \n-
    149 friend Line3 transformTo(const Pose3 &wTc, const Line3 &wL,
    \n-\n-\n-
    152};
    \n-
    \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 Pose
    \n-
    3D rotation represented as a rotation matrix or quaternion
    \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
    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-
    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-
    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 line (R,a,b) : (Rot3,Scalar,Scalar)
    Definition Line3.h:44
    \n-
    Rot3 R() const
    Return the rotation of the line.
    Definition Line3.h:123
    \n-
    Line3()
    Default constructor is the Z axis.
    Definition Line3.h:53
    \n-
    Line3(const Rot3 &R, const double a, const double b)
    Constructor for general line from (R, a, b)
    Definition Line3.h:57
    \n-
    double b() const
    Return the y-coordinate of the intersection of the line with the xy plane.
    Definition Line3.h:137
    \n-
    double a() const
    Return the x-coordinate of the intersection of the line with the xy plane.
    Definition Line3.h:130
    \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-
    Represents a 3D point on a unit sphere.
    Definition Unit3.h:43
    \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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,163 +1,139 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Line3.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 * 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, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n+6 * Authors: Frank Dellaert, 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/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b3_\b._\bh>\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+11\n+20#pragma once\n 21\n-22namespace _\bg_\bt_\bs_\ba_\bm {\n-23\n-24class Line3;\n-25\n-34GTSAM_EXPORT Line3 _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bo(const Pose3 &wTc, const Line3 &wL,\n-35 OptionalJacobian<4, 6> Dpose = boost::none,\n-36 OptionalJacobian<4, 4> Dline = boost::none);\n-37\n-38\n-_\b4_\b4class GTSAM_EXPORT _\bL_\bi_\bn_\be_\b3 {\n-45 private:\n-46 _\bR_\bo_\bt_\b3 R_; // Rotation of line about x and y in world frame\n-47 double a_, b_; // Intersection of line with the world x-y plane rotated by\n-R_\n-48 // Also the closest point on line to origin\n-49 public:\n-50 enum { dimension = 4 };\n-51\n-_\b5_\b3 _\bL_\bi_\bn_\be_\b3() :\n-54 a_(0), b_(0) {}\n-55\n-_\b5_\b7 _\bL_\bi_\bn_\be_\b3(const _\bR_\bo_\bt_\b3 &R, const double a, const double b) :\n-58 R_(R), a_(a), b_(b) {}\n-59\n-71 _\bL_\bi_\bn_\be_\b3 retract(const Vector4 &v,\n-72 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b4_\b,_\b _\b4_\b> Dp = boost::none,\n-73 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b4_\b,_\b _\b4_\b> Dv = boost::none) const;\n-74\n-84 Vector4 localCoordinates(const _\bL_\bi_\bn_\be_\b3 &q,\n-85 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b4_\b,_\b _\b4_\b> Dp = boost::none,\n-86 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b4_\b,_\b _\b4_\b> Dq = boost::none) const;\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+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-92 void _\bp_\br_\bi_\bn_\bt(const std::string &s = \"\") const;\n-93\n-100 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bL_\bi_\bn_\be_\b3 &l2, double tol = 10e-9) const;\n-101\n-108 _\bU_\bn_\bi_\bt_\b3 _\bp_\br_\bo_\bj_\be_\bc_\bt(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b4_\b> Dline = boost::none) const;\n-109\n-118 _\bP_\bo_\bi_\bn_\bt_\b3 point(double distance = 0) const;\n-119\n-_\b1_\b2_\b3 inline _\bR_\bo_\bt_\b3 _\bR() const {\n-124 return R_;\n-125 }\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-_\b1_\b3_\b0 inline double _\ba() const {\n-131 return a_;\n-132 }\n-133\n-_\b1_\b3_\b7 inline double _\bb() const {\n-138 return b_;\n-139 }\n-140\n-149 friend _\bL_\bi_\bn_\be_\b3 _\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,\n-150 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b4_\b,_\b _\b6_\b> Dpose,\n-151 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b4_\b,_\b _\b4_\b> Dline);\n-152};\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-_\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+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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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:_\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:_\bL_\bi_\bn_\be_\b3\n-A 3D line (R,a,b) : (Rot3,Scalar,Scalar)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Line3.h:44\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\b3_\b:_\b:_\bR\n-Rot3 R() const\n-Return the rotation of the line.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Line3.h:123\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\b3_\b:_\b:_\bL_\bi_\bn_\be_\b3\n-Line3()\n-Default constructor is the Z axis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Line3.h:53\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\b3_\b:_\b:_\bL_\bi_\bn_\be_\b3\n-Line3(const Rot3 &R, const double a, const double b)\n-Constructor for general line from (R, a, b)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Line3.h:57\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\b3_\b:_\b:_\bb\n-double b() const\n-Return the y-coordinate of the intersection of the line with the xy plane.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Line3.h:137\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\b3_\b:_\b:_\ba\n-double a() const\n-Return the x-coordinate of the intersection of the line with the xy plane.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Line3.h:130\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:_\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:_\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\n- * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bL_\bi_\bn_\be_\b3_\b._\bh\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 * Generated on Tue Jan 9 2024 05:51: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_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00551_source.html", "comments": ["Files 7% 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/Similarity2.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@@ -72,15 +72,15 @@\n \n
    \n
    \n \n \n
    \n \n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    Similarity2.h
    \n+
    HybridFactor.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/Manifold.h>
    \n-
    22#include <gtsam/dllexport.h>
    \n-\n-\n-
    25#include <gtsam/geometry/Rot2.h>
    \n+
    20#include <gtsam/base/Testable.h>
    \n+\n+\n+\n+\n+\n
    26
    \n-
    27namespace gtsam {
    \n-
    28
    \n-
    29// Forward declarations
    \n-
    30class Pose2;
    \n-
    31
    \n-
    \n-
    35class GTSAM_EXPORT Similarity2 : public LieGroup<Similarity2, 4> {
    \n-
    38 typedef Rot2 Rotation;
    \n-
    39 typedef Point2 Translation;
    \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-
    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-
    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-
    69
    \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-
    84
    \n-
    86 static Similarity2 Identity();
    \n-
    87
    \n-
    89 Similarity2 operator*(const Similarity2& S) const;
    \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+
    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-
    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+
    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+
    118
    \n+
    120 bool isDiscrete() const { return isDiscrete_; }
    \n
    121
    \n-
    135 static Similarity2 Align(const Pose2Pairs& abPosePairs);
    \n+
    123 bool isContinuous() const { return isContinuous_; }
    \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+
    133
    \n+
    135 const KeyVector &continuousKeys() const { return continuousKeys_; }
    \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+
    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
    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-
    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::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-
    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+
    A helper that implements the traits interface for GTSAM types.
    Definition Testable.h:151
    \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+
    Definition Factor.h:68
    \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-Similarity2.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,197 +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/_\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+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-27namespace _\bg_\bt_\bs_\ba_\bm {\n-28\n-29// Forward declarations\n-30class Pose2;\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+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-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-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-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-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+_\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+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-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+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+118\n+_\b1_\b2_\b0 bool _\bi_\bs_\bD_\bi_\bs_\bc_\br_\be_\bt_\be() const { return isDiscrete_; }\n 121\n-135 static _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2 Align(const Pose2Pairs& abPosePairs);\n+_\b1_\b2_\b3 bool _\bi_\bs_\bC_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs() const { return isContinuous_; }\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+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-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-_\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+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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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-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:_\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:_\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:_\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\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:_\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- * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2_\b._\bh\n+ * _\bh_\by_\bb_\br_\bi_\bd\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/a00437.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00950.html", "comments": ["Files 11% 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 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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n \n \n
    \n \n-
    SO3.h File Reference
    \n+
    CombinedImuFactor.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+\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::SO3 = SO< 3 >
     

    \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+\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 CombinedImuFactor &f)
     
    \n

    Detailed Description

    \n-

    3*3 matrix representation of SO(3)

    \n-
    Author
    Frank Dellaert
    \n+
    Author
    Luca Carlone
    \n
    \n-Luca Carlone
    \n+Stephen Williams \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+Richard Roberts \n+
    \n+Vadim Indelman
    \n+
    \n+David Jensen
    \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,61 +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 | _\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+_\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- 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+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-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bO_\b3_\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 _\bc_\bo_\bn_\bs_\bt_\b _\bS_\bO_\b3_\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-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+#define\u00a0 D\bD_\b_t\bt_\b_t\bt(H)\u00a0\u00a0\u00a0(H)->block<3,3>(3,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+#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-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+#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-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+ Stephen Williams\n+ Richard Roberts\n+ Vadim Indelman\n+ David Jensen\n+ Frank Dellaert\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+ * _\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 * Generated on Tue Jan 9 2024 05:51: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_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00086_source.html", "comments": ["Files 6% 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_Base.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@@ -72,15 +72,15 @@\n \n
    \n
    \n \n \n
    \n \n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    Cal3DS2_Base.h
    \n+
    ConcurrentMap.h
    \n
    \n
    \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/geometry/Cal3.h>
    \n-\n-
    24#include <boost/shared_ptr.hpp>
    \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-
    26namespace gtsam {
    \n-
    27
    \n-
    \n-
    42class GTSAM_EXPORT Cal3DS2_Base : public Cal3 {
    \n-
    43 protected:
    \n-
    44 double k1_ = 0.0f, k2_ = 0.0f;
    \n-
    45 double p1_ = 0.0f, p2_ = 0.0f;
    \n-
    46 double tol_ = 1e-5;
    \n-
    47
    \n-
    48 public:
    \n-
    49 enum { dimension = 9 };
    \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-
    52 using shared_ptr = boost::shared_ptr<Cal3DS2_Base>;
    \n-
    53
    \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-
    58 Cal3DS2_Base() = default;
    \n-
    59
    \n-
    60 Cal3DS2_Base(double fx, double fy, double s, double u0, double v0, double k1,
    \n-
    61 double k2, double p1 = 0.0, double p2 = 0.0, double tol = 1e-5)
    \n-
    62 : Cal3(fx, fy, s, u0, v0),
    \n-
    63 k1_(k1),
    \n-
    64 k2_(k2),
    \n-
    65 p1_(p1),
    \n-
    66 p2_(p2),
    \n-
    67 tol_(tol) {}
    \n-
    68
    \n-
    69 ~Cal3DS2_Base() override {}
    \n-
    70
    \n-
    74
    \n-
    75 Cal3DS2_Base(const Vector9& v)
    \n-
    76 : Cal3(v(0), v(1), v(2), v(3), v(4)),
    \n-
    77 k1_(v(5)),
    \n-
    78 k2_(v(6)),
    \n-
    79 p1_(v(7)),
    \n-
    80 p2_(v(8)) {}
    \n-
    81
    \n-
    85
    \n-
    87 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,
    \n-
    88 const Cal3DS2_Base& cal);
    \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+
    85 ConcurrentMap(const Base& x) : Base(x) {}
    \n+
    86
    \n+
    88 bool exists(const KEY& e) const { return this->count(e); }
    \n
    89
    \n-
    91 void print(const std::string& s = "") const override;
    \n-
    92
    \n-
    94 bool equals(const Cal3DS2_Base& K, double tol = 1e-8) const;
    \n-
    95
    \n-
    99
    \n-
    101 inline double k1() const { return k1_; }
    \n-
    102
    \n-
    104 inline double k2() const { return k2_; }
    \n-
    105
    \n-
    107 inline double p1() const { return p1_; }
    \n-
    108
    \n-
    110 inline double p2() const { return p2_; }
    \n-
    111
    \n-
    113 Vector4 k() const { return Vector4(k1_, k2_, p1_, p2_); }
    \n-
    114
    \n-
    116 Vector9 vector() const;
    \n-
    117
    \n-
    125 Point2 uncalibrate(const Point2& p, OptionalJacobian<2, 9> Dcal = boost::none,
    \n-
    126 OptionalJacobian<2, 2> Dp = boost::none) const;
    \n-
    127
    \n-
    129 Point2 calibrate(const Point2& p, OptionalJacobian<2, 9> Dcal = boost::none,
    \n-
    130 OptionalJacobian<2, 2> Dp = boost::none) const;
    \n-
    131
    \n-
    133 Matrix2 D2d_intrinsic(const Point2& p) const;
    \n-
    134
    \n-
    136 Matrix29 D2d_calibration(const Point2& p) const;
    \n-
    137
    \n-
    139 size_t dim() const override { return Dim(); }
    \n-
    140
    \n-
    142 inline static size_t Dim() { return dimension; }
    \n-
    143
    \n-
    147
    \n-
    \n-
    149 virtual boost::shared_ptr<Cal3DS2_Base> clone() const {
    \n-
    150 return boost::shared_ptr<Cal3DS2_Base>(new Cal3DS2_Base(*this));
    \n-
    151 }
    \n-
    \n-
    152
    \n-
    154
    \n-
    155 private:
    \n-
    158
    \n-
    160 friend class boost::serialization::access;
    \n-
    161 template <class Archive>
    \n-
    162 void serialize(Archive& ar, const unsigned int /*version*/) {
    \n-
    163 ar& boost::serialization::make_nvp(
    \n-
    164 "Cal3DS2_Base", boost::serialization::base_object<Cal3>(*this));
    \n-
    165 ar& BOOST_SERIALIZATION_NVP(k1_);
    \n-
    166 ar& BOOST_SERIALIZATION_NVP(k2_);
    \n-
    167 ar& BOOST_SERIALIZATION_NVP(p1_);
    \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+
    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::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-
    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-
    double p2() const
    Second tangential distortion coefficient.
    Definition Cal3DS2_Base.h:110
    \n-
    static size_t Dim()
    return DOF, dimensionality of tangent space
    Definition Cal3DS2_Base.h:142
    \n-
    virtual boost::shared_ptr< Cal3DS2_Base > clone() const
    Definition Cal3DS2_Base.h:149
    \n-
    double k2() const
    Second distortion coefficient.
    Definition Cal3DS2_Base.h:104
    \n-
    double k1() const
    First distortion coefficient.
    Definition Cal3DS2_Base.h:101
    \n-
    size_t dim() const override
    return DOF, dimensionality of tangent space
    Definition Cal3DS2_Base.h:139
    \n-
    double p1() const
    First tangential distortion coefficient.
    Definition Cal3DS2_Base.h:107
    \n-
    Vector4 k() const
    return distortion parameter vector
    Definition Cal3DS2_Base.h:113
    \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-
    • gtsam
    • geometry
    • Cal3DS2_Base.h
    • \n+
    • gtsam
    • base
    • ConcurrentMap.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,184 +1,168 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Cal3DS2_Base.h\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 <_\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#include \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-26namespace _\bg_\bt_\bs_\ba_\bm {\n-27\n-_\b4_\b2class GTSAM_EXPORT _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be : public _\bC_\ba_\bl_\b3 {\n-43 protected:\n-_\b4_\b4 double k1_ = 0.0f, k2_ = 0.0f;\n-_\b4_\b5 double p1_ = 0.0f, p2_ = 0.0f;\n-_\b4_\b6 double tol_ = 1e-5;\n-47\n-48 public:\n-49 enum { dimension = 9 };\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-52 using shared_ptr = boost::shared_ptr;\n-53\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-_\b5_\b8 _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be() = default;\n-59\n-60 _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be(double fx, double fy, double s, double u0, double v0, double\n-k1,\n-61 double k2, double p1 = 0.0, double p2 = 0.0, double tol = 1e-5)\n-62 : _\bC_\ba_\bl_\b3(fx, fy, s, u0, v0),\n-63 k1_(k1),\n-64 k2_(k2),\n-65 p1_(p1),\n-66 p2_(p2),\n-67 tol_(tol) {}\n-68\n-69 _\b~_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be() override {}\n-70\n-74\n-75 Cal3DS2_Base(const Vector9& v)\n-76 : Cal3(v(0), v(1), v(2), v(3), v(4)),\n-77 k1_(v(5)),\n-78 k2_(v(6)),\n-79 p1_(v(7)),\n-80 p2_(v(8)) {}\n-81\n-85\n-87 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,\n-88 const Cal3DS2_Base& cal);\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+_\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-91 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const override;\n-92\n-94 bool equals(const Cal3DS2_Base& K, double tol = 1e-8) const;\n-95\n-99\n-_\b1_\b0_\b1 inline double _\bk_\b1() const { return k1_; }\n-102\n-_\b1_\b0_\b4 inline double _\bk_\b2() const { return k2_; }\n-105\n-_\b1_\b0_\b7 inline double _\bp_\b1() const { return p1_; }\n-108\n-_\b1_\b1_\b0 inline double _\bp_\b2() const { return p2_; }\n-111\n-_\b1_\b1_\b3 Vector4 _\bk() const { return Vector4(k1_, k2_, p1_, p2_); }\n-114\n-116 Vector9 vector() const;\n-117\n-125 _\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-126 _\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-127\n-129 _\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-130 _\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-131\n-133 Matrix2 D2d_intrinsic(const _\bP_\bo_\bi_\bn_\bt_\b2& p) const;\n-134\n-136 Matrix29 D2d_calibration(const _\bP_\bo_\bi_\bn_\bt_\b2& p) const;\n-137\n-_\b1_\b3_\b9 size_t _\bd_\bi_\bm() const override { return Dim(); }\n-140\n-_\b1_\b4_\b2 inline static size_t _\bD_\bi_\bm() { return dimension; }\n-143\n-147\n-_\b1_\b4_\b9 virtual boost::shared_ptr _\bc_\bl_\bo_\bn_\be() const {\n-150 return boost::shared_ptr(new _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be(*this));\n-151 }\n-152\n-154\n-155 private:\n-158\n-_\b1_\b6_\b0 friend class boost::serialization::access;\n-161 template \n-162 void serialize(Archive& ar, const unsigned int /*version*/) {\n-163 ar& boost::serialization::make_nvp(\n-164 \"Cal3DS2_Base\", boost::serialization::base_object(*this));\n-165 ar& BOOST_SERIALIZATION_NVP(k1_);\n-166 ar& BOOST_SERIALIZATION_NVP(k2_);\n-167 ar& BOOST_SERIALIZATION_NVP(p1_);\n-168 ar& BOOST_SERIALIZATION_NVP(p2_);\n-169 ar& BOOST_SERIALIZATION_NVP(tol_);\n-170 }\n-171\n-173};\n-174}\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+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_\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:_\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:_\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\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_\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_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be\n-Cal3DS2_Base()=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_\b:_\b:_\bp_\b2\n-double p2() const\n-Second tangential distortion coefficient.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3DS2_Base.h:110\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be_\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 Cal3DS2_Base.h:142\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-virtual boost::shared_ptr< Cal3DS2_Base > clone() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3DS2_Base.h:149\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\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 Cal3DS2_Base.h:104\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\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 Cal3DS2_Base.h:101\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be_\b:_\b:_\bd_\bi_\bm\n-size_t dim() const override\n-return DOF, dimensionality of tangent space\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3DS2_Base.h:139\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be_\b:_\b:_\bp_\b1\n-double p1() const\n-First tangential distortion coefficient.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3DS2_Base.h:107\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\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 Cal3DS2_Base.h:113\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- * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * C\bCa\bal\bl3\b3D\bDS\bS2\b2_\b_B\bBa\bas\bse\be.\b.h\bh\n+ * _\bb_\ba_\bs_\be\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/a00446_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00911_source.html", "comments": ["Files 17% 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/navigation/AttitudeFactor.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+
    AttitudeFactor.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/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-
    41 Key nearbyVariable() const {return j_;}
    \n-
    42
    \n-
    43private:
    \n-
    44 Key j_;
    \n-
    45};
    \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-
    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+
    18#pragma once
    \n+
    19
    \n+\n+\n+
    22#include <gtsam/geometry/Unit3.h>
    \n+
    23
    \n+
    24namespace gtsam {
    \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-
    89 static Matrix23 Dpoint(const Point2& pn, double d, const Matrix3& Rt);
    \n+
    83public:
    \n+
    84
    \n+
    86 typedef boost::shared_ptr<Rot3AttitudeFactor> shared_ptr;
    \n+
    87
    \n+\n
    90
    \n-
    92
    \n-
    93public:
    \n+
    \n+\n+
    93 }
    \n+
    \n
    94
    \n+
    95 ~Rot3AttitudeFactor() override {
    \n+
    96 }
    \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-
    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+
    \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+
    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 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+\n+
    157
    \n+
    158public:
    \n+
    159
    \n+
    161 typedef boost::shared_ptr<Pose3AttitudeFactor> shared_ptr;
    \n+
    162
    \n+\n
    165
    \n-
    167 const Pose3& getPose(OptionalJacobian<6, 6> H) const;
    \n-
    168
    \n+
    \n+\n+
    168 }
    \n+
    \n+
    169
    \n+
    170 ~Pose3AttitudeFactor() override {
    \n+
    171 }
    \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+
    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-
    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 exception type that uses tbb_allocator if GTSAM is compiled with TBB.
    \n-
    Base class and basic functions for Manifold types.
    \n-
    3D Pose
    \n-
    Bearing-Range product.
    \n-
    2D Point
    \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-
    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+
    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-
    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 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-
    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+
    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,460 +1,332 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-CalibratedCamera.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-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-41 _\bK_\be_\by nearbyVariable() const {return j_;}\n-42\n-43private:\n-44 _\bK_\be_\by j_;\n-45};\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-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+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+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-89 static Matrix23 Dpoint(const _\bP_\bo_\bi_\bn_\bt_\b2& pn, double d, const Matrix3& Rt);\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-92\n-93public:\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-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 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+_\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+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-_\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+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-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+_\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-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+_\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-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-_\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-_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n-Base class and basic functions for Manifold types.\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-_\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+_\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:_\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_\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:_\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:_\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:_\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- * _\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_\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 * Generated on Tue Jan 9 2024 05:51: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_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01049_source.html", "comments": ["Files 14% 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/triangulation.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@@ -72,15 +72,15 @@\n
    \n
    \n
    \n \n \n
    \n \n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    triangulation.h
    \n+
    GncOptimizer.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-\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-\n-
    42 std::runtime_error("Triangulation Underconstrained Exception.") {
    \n-
    43 }
    \n-
    44};
    \n-
    \n-
    45
    \n-
    \n-
    47class GTSAM_EXPORT TriangulationCheiralityException: public std::runtime_error {
    \n-
    48public:
    \n-\n-
    50 std::runtime_error(
    \n-
    51 "Triangulation Cheirality Exception: The resulting landmark is behind one or more cameras.") {
    \n-
    52 }
    \n-
    53};
    \n-
    \n-
    54
    \n-
    62GTSAM_EXPORT Vector4 triangulateHomogeneousDLT(
    \n-
    63 const std::vector<Matrix34, Eigen::aligned_allocator<Matrix34>>& projection_matrices,
    \n-
    64 const Point2Vector& measurements, double rank_tol = 1e-9);
    \n-
    65
    \n-
    74GTSAM_EXPORT Vector4 triangulateHomogeneousDLT(
    \n-
    75 const std::vector<Matrix34, Eigen::aligned_allocator<Matrix34>>& projection_matrices,
    \n-
    76 const std::vector<Unit3>& measurements, double rank_tol = 1e-9);
    \n-
    77
    \n-
    85GTSAM_EXPORT Point3 triangulateDLT(
    \n-
    86 const std::vector<Matrix34, Eigen::aligned_allocator<Matrix34>>& projection_matrices,
    \n-
    87 const Point2Vector& measurements,
    \n-
    88 double rank_tol = 1e-9);
    \n-
    89
    \n-
    93GTSAM_EXPORT Point3 triangulateDLT(
    \n-
    94 const std::vector<Matrix34, Eigen::aligned_allocator<Matrix34>>& projection_matrices,
    \n-
    95 const std::vector<Unit3>& measurements,
    \n-
    96 double rank_tol = 1e-9);
    \n-
    97
    \n-
    108GTSAM_EXPORT Point3 triangulateLOST(const std::vector<Pose3>& poses,
    \n-
    109 const Point3Vector& calibratedMeasurements,
    \n-
    110 const SharedIsotropic& measurementNoise);
    \n-
    111
    \n-
    121template<class CALIBRATION>
    \n-
    \n-
    122std::pair<NonlinearFactorGraph, Values> triangulationGraph(
    \n-
    123 const std::vector<Pose3>& poses, boost::shared_ptr<CALIBRATION> sharedCal,
    \n-
    124 const Point2Vector& measurements, Key landmarkKey,
    \n-
    125 const Point3& initialEstimate,
    \n-
    126 const SharedNoiseModel& model = noiseModel::Unit::Create(2)) {
    \n-
    127 Values values;
    \n-
    128 values.insert(landmarkKey, initialEstimate); // Initial landmark value
    \n-\n-
    130 for (size_t i = 0; i < measurements.size(); i++) {
    \n-
    131 const Pose3& pose_i = poses[i];
    \n-
    132 typedef PinholePose<CALIBRATION> Camera;
    \n-
    133 Camera camera_i(pose_i, sharedCal);
    \n-
    134 graph.emplace_shared<TriangulationFactor<Camera> > //
    \n-
    135 (camera_i, measurements[i], model, landmarkKey);
    \n-
    136 }
    \n-
    137 return std::make_pair(graph, values);
    \n-
    138}
    \n-
    \n-
    139
    \n-
    149template<class CAMERA>
    \n-
    \n-
    150std::pair<NonlinearFactorGraph, Values> triangulationGraph(
    \n-
    151 const CameraSet<CAMERA>& cameras,
    \n-
    152 const typename CAMERA::MeasurementVector& measurements, Key landmarkKey,
    \n-
    153 const Point3& initialEstimate,
    \n-
    154 const SharedNoiseModel& model = nullptr) {
    \n-
    155 Values values;
    \n-
    156 values.insert(landmarkKey, initialEstimate); // Initial landmark value
    \n-\n-\n-\n-
    160 for (size_t i = 0; i < measurements.size(); i++) {
    \n-
    161 const CAMERA& camera_i = cameras[i];
    \n-
    162 graph.emplace_shared<TriangulationFactor<CAMERA> > //
    \n-
    163 (camera_i, measurements[i], model? model : unit, landmarkKey);
    \n-
    164 }
    \n-
    165 return std::make_pair(graph, values);
    \n-
    166}
    \n-
    \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+
    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+
    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-
    175GTSAM_EXPORT Point3 optimize(const NonlinearFactorGraph& graph,
    \n-
    176 const Values& values, Key landmarkKey);
    \n-
    177
    \n-
    186template<class CALIBRATION>
    \n-
    \n-
    187Point3 triangulateNonlinear(const std::vector<Pose3>& poses,
    \n-
    188 boost::shared_ptr<CALIBRATION> sharedCal,
    \n-
    189 const Point2Vector& measurements, const Point3& initialEstimate,
    \n-
    190 const SharedNoiseModel& model = nullptr) {
    \n-
    191
    \n-
    192 // Create a factor graph and initial values
    \n-
    193 Values values;
    \n-\n-
    195 boost::tie(graph, values) = triangulationGraph<CALIBRATION> //
    \n-
    196 (poses, sharedCal, measurements, Symbol('p', 0), initialEstimate, model);
    \n-
    197
    \n-
    198 return optimize(graph, values, Symbol('p', 0));
    \n-
    199}
    \n-
    \n-
    200
    \n-
    208template<class CAMERA>
    \n-
    \n-\n-
    210 const CameraSet<CAMERA>& cameras,
    \n-
    211 const typename CAMERA::MeasurementVector& measurements, const Point3& initialEstimate,
    \n-
    212 const SharedNoiseModel& model = nullptr) {
    \n-
    213
    \n-
    214 // Create a factor graph and initial values
    \n-
    215 Values values;
    \n-\n-
    217 boost::tie(graph, values) = triangulationGraph<CAMERA> //
    \n-
    218 (cameras, measurements, Symbol('p', 0), initialEstimate, model);
    \n-
    219
    \n-
    220 return optimize(graph, values, Symbol('p', 0));
    \n-
    221}
    \n-
    \n-
    222
    \n-
    223template<class CAMERA>
    \n-
    224std::vector<Matrix34, Eigen::aligned_allocator<Matrix34>>
    \n-
    225projectionMatricesFromCameras(const CameraSet<CAMERA> &cameras) {
    \n-
    226 std::vector<Matrix34, Eigen::aligned_allocator<Matrix34>> projection_matrices;
    \n-
    227 for (const CAMERA &camera: cameras) {
    \n-
    228 projection_matrices.push_back(camera.cameraProjectionMatrix());
    \n-
    229 }
    \n-
    230 return projection_matrices;
    \n-
    231}
    \n-
    232
    \n-
    233// overload, assuming pinholePose
    \n-
    234template<class CALIBRATION>
    \n-
    235std::vector<Matrix34, Eigen::aligned_allocator<Matrix34>> projectionMatricesFromPoses(
    \n-
    236 const std::vector<Pose3> &poses, boost::shared_ptr<CALIBRATION> sharedCal) {
    \n-
    237 std::vector<Matrix34, Eigen::aligned_allocator<Matrix34>> projection_matrices;
    \n-
    238 for (size_t i = 0; i < poses.size(); i++) {
    \n-
    239 PinholePose<CALIBRATION> camera(poses.at(i), sharedCal);
    \n-
    240 projection_matrices.push_back(camera.cameraProjectionMatrix());
    \n-
    241 }
    \n-
    242 return projection_matrices;
    \n-
    243}
    \n-
    244
    \n-
    252template <class CALIBRATION>
    \n-
    \n-
    253Cal3_S2 createPinholeCalibration(const CALIBRATION& cal) {
    \n-
    254 const auto& K = cal.K();
    \n-
    255 return Cal3_S2(K(0, 0), K(1, 1), K(0, 1), K(0, 2), K(1, 2));
    \n-
    256}
    \n-
    \n-
    257
    \n-
    260template <class CALIBRATION, class MEASUREMENT>
    \n-
    \n-\n-
    262 const CALIBRATION& cal, const MEASUREMENT& measurement,
    \n-
    263 boost::optional<Cal3_S2> pinholeCal = boost::none) {
    \n-
    264 if (!pinholeCal) {
    \n-
    265 pinholeCal = createPinholeCalibration(cal);
    \n-
    266 }
    \n-
    267 return pinholeCal->uncalibrate(cal.calibrate(measurement));
    \n-
    268}
    \n-
    \n-
    269
    \n-
    281template <class CALIBRATION>
    \n-
    \n-
    282Point2Vector undistortMeasurements(const CALIBRATION& cal,
    \n-
    283 const Point2Vector& measurements) {
    \n-
    284 Cal3_S2 pinholeCalibration = createPinholeCalibration(cal);
    \n-
    285 Point2Vector undistortedMeasurements;
    \n-
    286 // Calibrate with cal and uncalibrate with pinhole version of cal so that
    \n-
    287 // measurements are undistorted.
    \n-
    288 std::transform(measurements.begin(), measurements.end(),
    \n-
    289 std::back_inserter(undistortedMeasurements),
    \n-
    290 [&cal, &pinholeCalibration](const Point2& measurement) {
    \n-
    291 return undistortMeasurementInternal<CALIBRATION>(
    \n-
    292 cal, measurement, pinholeCalibration);
    \n-
    293 });
    \n-
    294 return undistortedMeasurements;
    \n-
    295}
    \n-
    \n-
    296
    \n-
    298template <>
    \n-
    \n-
    299inline Point2Vector undistortMeasurements(const Cal3_S2& cal,
    \n-
    300 const Point2Vector& measurements) {
    \n-
    301 return measurements;
    \n-
    302}
    \n-
    \n-
    303
    \n-
    315template <class CAMERA>
    \n-
    \n-
    316typename CAMERA::MeasurementVector undistortMeasurements(
    \n-
    317 const CameraSet<CAMERA>& cameras,
    \n-
    318 const typename CAMERA::MeasurementVector& measurements) {
    \n-
    319 const size_t nrMeasurements = measurements.size();
    \n-
    320 assert(nrMeasurements == cameras.size());
    \n-
    321 typename CAMERA::MeasurementVector undistortedMeasurements(nrMeasurements);
    \n-
    322 for (size_t ii = 0; ii < nrMeasurements; ++ii) {
    \n-
    323 // Calibrate with cal and uncalibrate with pinhole version of cal so that
    \n-
    324 // measurements are undistorted.
    \n-
    325 undistortedMeasurements[ii] =
    \n-
    326 undistortMeasurementInternal<typename CAMERA::CalibrationType>(
    \n-
    327 cameras[ii].calibration(), measurements[ii]);
    \n-
    328 }
    \n-
    329 return undistortedMeasurements;
    \n-
    330}
    \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-
    331
    \n-
    333template <class CAMERA = PinholeCamera<Cal3_S2>>
    \n+
    332
    \n
    \n-
    334inline PinholeCamera<Cal3_S2>::MeasurementVector undistortMeasurements(
    \n-
    335 const CameraSet<PinholeCamera<Cal3_S2>>& cameras,
    \n-
    336 const PinholeCamera<Cal3_S2>::MeasurementVector& measurements) {
    \n-
    337 return measurements;
    \n-
    338}
    \n-
    \n-
    339
    \n-
    341template <class CAMERA = SphericalCamera>
    \n-
    \n-
    342inline SphericalCamera::MeasurementVector undistortMeasurements(
    \n-
    343 const CameraSet<SphericalCamera>& cameras,
    \n-
    344 const SphericalCamera::MeasurementVector& measurements) {
    \n-
    345 return measurements;
    \n-
    346}
    \n-
    \n-
    347
    \n-
    356template <class CALIBRATION>
    \n-
    \n-
    357inline Point3Vector calibrateMeasurementsShared(
    \n-
    358 const CALIBRATION& cal, const Point2Vector& measurements) {
    \n-
    359 Point3Vector calibratedMeasurements;
    \n-
    360 // Calibrate with cal and uncalibrate with pinhole version of cal so that
    \n-
    361 // measurements are undistorted.
    \n-
    362 std::transform(measurements.begin(), measurements.end(),
    \n-
    363 std::back_inserter(calibratedMeasurements),
    \n-
    364 [&cal](const Point2& measurement) {
    \n-
    365 Point3 p;
    \n-
    366 p << cal.calibrate(measurement), 1.0;
    \n-
    367 return p;
    \n-
    368 });
    \n-
    369 return calibratedMeasurements;
    \n-
    370}
    \n-
    \n-
    371
    \n-
    380template <class CAMERA>
    \n-
    \n-
    381inline Point3Vector calibrateMeasurements(
    \n-
    382 const CameraSet<CAMERA>& cameras,
    \n-
    383 const typename CAMERA::MeasurementVector& measurements) {
    \n-
    384 const size_t nrMeasurements = measurements.size();
    \n-
    385 assert(nrMeasurements == cameras.size());
    \n-
    386 Point3Vector calibratedMeasurements(nrMeasurements);
    \n-
    387 for (size_t ii = 0; ii < nrMeasurements; ++ii) {
    \n-
    388 calibratedMeasurements[ii]
    \n-
    389 << cameras[ii].calibration().calibrate(measurements[ii]),
    \n-
    390 1.0;
    \n-
    391 }
    \n-
    392 return calibratedMeasurements;
    \n-
    393}
    \n-
    \n-
    394
    \n-
    396template <class CAMERA = SphericalCamera>
    \n-
    \n-
    397inline Point3Vector calibrateMeasurements(
    \n-
    398 const CameraSet<SphericalCamera>& cameras,
    \n-
    399 const SphericalCamera::MeasurementVector& measurements) {
    \n-
    400 Point3Vector calibratedMeasurements(measurements.size());
    \n-
    401 for (size_t ii = 0; ii < measurements.size(); ++ii) {
    \n-
    402 calibratedMeasurements[ii] << measurements[ii].point3();
    \n-
    403 }
    \n-
    404 return calibratedMeasurements;
    \n-
    405}
    \n-
    \n-
    406
    \n-
    420template <class CALIBRATION>
    \n-
    \n-
    421Point3 triangulatePoint3(const std::vector<Pose3>& poses,
    \n-
    422 boost::shared_ptr<CALIBRATION> sharedCal,
    \n-
    423 const Point2Vector& measurements,
    \n-
    424 double rank_tol = 1e-9, bool optimize = false,
    \n-
    425 const SharedNoiseModel& model = nullptr,
    \n-
    426 const bool useLOST = false) {
    \n-
    427 assert(poses.size() == measurements.size());
    \n-
    428 if (poses.size() < 2) throw(TriangulationUnderconstrainedException());
    \n-
    429
    \n-
    430 // Triangulate linearly
    \n-
    431 Point3 point;
    \n-
    432 if (useLOST) {
    \n-
    433 // Reduce input noise model to an isotropic noise model using the mean of
    \n-
    434 // the diagonal.
    \n-
    435 const double measurementSigma = model ? model->sigmas().mean() : 1e-4;
    \n-
    436 SharedIsotropic measurementNoise =
    \n-
    437 noiseModel::Isotropic::Sigma(2, measurementSigma);
    \n-
    438 // calibrate the measurements to obtain homogenous coordinates in image
    \n-
    439 // plane.
    \n-
    440 auto calibratedMeasurements =
    \n-
    441 calibrateMeasurementsShared<CALIBRATION>(*sharedCal, measurements);
    \n-
    442
    \n-
    443 point = triangulateLOST(poses, calibratedMeasurements, measurementNoise);
    \n-
    444 } else {
    \n-
    445 // construct projection matrices from poses & calibration
    \n-
    446 auto projection_matrices = projectionMatricesFromPoses(poses, sharedCal);
    \n-
    447
    \n-
    448 // Undistort the measurements, leaving only the pinhole elements in effect.
    \n-
    449 auto undistortedMeasurements =
    \n-
    450 undistortMeasurements<CALIBRATION>(*sharedCal, measurements);
    \n-
    451
    \n-
    452 point =
    \n-
    453 triangulateDLT(projection_matrices, undistortedMeasurements, rank_tol);
    \n-
    454 }
    \n-
    455
    \n-
    456 // Then refine using non-linear optimization
    \n-
    457 if (optimize)
    \n-
    458 point = triangulateNonlinear<CALIBRATION> //
    \n-
    459 (poses, sharedCal, measurements, point, model);
    \n-
    460
    \n-
    461#ifdef GTSAM_THROW_CHEIRALITY_EXCEPTION
    \n-
    462 // verify that the triangulated point lies in front of all cameras
    \n-
    463 for (const Pose3& pose : poses) {
    \n-
    464 const Point3& p_local = pose.transformTo(point);
    \n-
    465 if (p_local.z() <= 0) throw(TriangulationCheiralityException());
    \n-
    466 }
    \n-
    467#endif
    \n-
    468
    \n-
    469 return point;
    \n-
    470}
    \n-
    \n-
    471
    \n-
    486template <class CAMERA>
    \n-
    \n-\n-
    488 const typename CAMERA::MeasurementVector& measurements,
    \n-
    489 double rank_tol = 1e-9, bool optimize = false,
    \n-
    490 const SharedNoiseModel& model = nullptr,
    \n-
    491 const bool useLOST = false) {
    \n-
    492 size_t m = cameras.size();
    \n-
    493 assert(measurements.size() == m);
    \n-
    494
    \n-
    495 if (m < 2) throw(TriangulationUnderconstrainedException());
    \n-
    496
    \n-
    497 // Triangulate linearly
    \n-
    498 Point3 point;
    \n-
    499 if (useLOST) {
    \n-
    500 // Reduce input noise model to an isotropic noise model using the mean of
    \n-
    501 // the diagonal.
    \n-
    502 const double measurementSigma = model ? model->sigmas().mean() : 1e-4;
    \n-
    503 SharedIsotropic measurementNoise =
    \n-
    504 noiseModel::Isotropic::Sigma(2, measurementSigma);
    \n-
    505
    \n-
    506 // construct poses from cameras.
    \n-
    507 std::vector<Pose3> poses;
    \n-
    508 poses.reserve(cameras.size());
    \n-
    509 for (const auto& camera : cameras) poses.push_back(camera.pose());
    \n-
    510
    \n-
    511 // calibrate the measurements to obtain homogenous coordinates in image
    \n-
    512 // plane.
    \n-
    513 auto calibratedMeasurements =
    \n-
    514 calibrateMeasurements<CAMERA>(cameras, measurements);
    \n-
    515
    \n-
    516 point = triangulateLOST(poses, calibratedMeasurements, measurementNoise);
    \n-
    517 } else {
    \n-
    518 // construct projection matrices from poses & calibration
    \n-
    519 auto projection_matrices = projectionMatricesFromCameras(cameras);
    \n-
    520
    \n-
    521 // Undistort the measurements, leaving only the pinhole elements in effect.
    \n-
    522 auto undistortedMeasurements =
    \n-
    523 undistortMeasurements<CAMERA>(cameras, measurements);
    \n-
    524
    \n-
    525 point =
    \n-
    526 triangulateDLT(projection_matrices, undistortedMeasurements, rank_tol);
    \n-
    527 }
    \n-
    528
    \n-
    529 // Then refine using non-linear optimization
    \n-
    530 if (optimize) {
    \n-
    531 point = triangulateNonlinear<CAMERA>(cameras, measurements, point, model);
    \n-
    532 }
    \n-
    533
    \n-
    534#ifdef GTSAM_THROW_CHEIRALITY_EXCEPTION
    \n-
    535 // verify that the triangulated point lies in front of all cameras
    \n-
    536 for (const CAMERA& camera : cameras) {
    \n-
    537 const Point3& p_local = camera.pose().transformTo(point);
    \n-
    538 if (p_local.z() <= 0) throw(TriangulationCheiralityException());
    \n-
    539 }
    \n-
    540#endif
    \n-
    541
    \n-
    542 return point;
    \n-
    543}
    \n-
    \n-
    544
    \n-
    546template <class CALIBRATION>
    \n-
    \n-\n-
    548 const Point2Vector& measurements,
    \n-
    549 double rank_tol = 1e-9, bool optimize = false,
    \n-
    550 const SharedNoiseModel& model = nullptr,
    \n-
    551 const bool useLOST = false) {
    \n-
    552 return triangulatePoint3<PinholeCamera<CALIBRATION>> //
    \n-
    553 (cameras, measurements, rank_tol, optimize, model, useLOST);
    \n-
    554}
    \n-
    \n-
    555
    \n-
    \n-
    556struct GTSAM_EXPORT TriangulationParameters {
    \n-
    557
    \n-\n-\n-
    561
    \n-\n-
    567
    \n-\n-
    574
    \n-\n-
    576
    \n-
    \n-
    586 TriangulationParameters(const double _rankTolerance = 1.0,
    \n-
    587 const bool _enableEPI = false, double _landmarkDistanceThreshold = -1,
    \n-
    588 double _dynamicOutlierRejectionThreshold = -1,
    \n-
    589 const SharedNoiseModel& _noiseModel = nullptr) :
    \n-
    590 rankTolerance(_rankTolerance), enableEPI(_enableEPI), //
    \n-
    591 landmarkDistanceThreshold(_landmarkDistanceThreshold), //
    \n-
    592 dynamicOutlierRejectionThreshold(_dynamicOutlierRejectionThreshold),
    \n-
    593 noiseModel(_noiseModel){
    \n-
    594 }
    \n-
    \n-
    595
    \n-
    596 // stream to output
    \n-
    597 friend std::ostream &operator<<(std::ostream &os,
    \n-
    598 const TriangulationParameters& p) {
    \n-
    599 os << "rankTolerance = " << p.rankTolerance << std::endl;
    \n-
    600 os << "enableEPI = " << p.enableEPI << std::endl;
    \n-
    601 os << "landmarkDistanceThreshold = " << p.landmarkDistanceThreshold
    \n-
    602 << std::endl;
    \n-
    603 os << "dynamicOutlierRejectionThreshold = "
    \n-
    604 << p.dynamicOutlierRejectionThreshold << std::endl;
    \n-
    605 os << "noise model" << std::endl;
    \n-
    606 return os;
    \n-
    607 }
    \n-
    608
    \n-
    609private:
    \n-
    610
    \n-
    612 friend class boost::serialization::access;
    \n-
    613 template<class ARCHIVE>
    \n-
    614 void serialize(ARCHIVE & ar, const unsigned int version) {
    \n-
    615 ar & BOOST_SERIALIZATION_NVP(rankTolerance);
    \n-
    616 ar & BOOST_SERIALIZATION_NVP(enableEPI);
    \n-
    617 ar & BOOST_SERIALIZATION_NVP(landmarkDistanceThreshold);
    \n-
    618 ar & BOOST_SERIALIZATION_NVP(dynamicOutlierRejectionThreshold);
    \n-
    619 }
    \n-
    620};
    \n-
    \n-
    621
    \n-
    \n-
    626class TriangulationResult : public boost::optional<Point3> {
    \n-
    627 public:
    \n-
    628 enum Status { VALID, DEGENERATE, BEHIND_CAMERA, OUTLIER, FAR_POINT };
    \n-
    629 Status status;
    \n-
    630
    \n-
    631 private:
    \n-
    632 TriangulationResult(Status s) : status(s) {}
    \n-
    633
    \n-
    634 public:
    \n-\n-
    639
    \n-
    643 TriangulationResult(const Point3& p) : status(VALID) { reset(p); }
    \n-
    644 static TriangulationResult Degenerate() {
    \n-
    645 return TriangulationResult(DEGENERATE);
    \n-
    646 }
    \n-
    647 static TriangulationResult Outlier() { return TriangulationResult(OUTLIER); }
    \n-
    648 static TriangulationResult FarPoint() {
    \n-
    649 return TriangulationResult(FAR_POINT);
    \n-
    650 }
    \n-
    651 static TriangulationResult BehindCamera() {
    \n-
    652 return TriangulationResult(BEHIND_CAMERA);
    \n-
    653 }
    \n-
    654 bool valid() const { return status == VALID; }
    \n-
    655 bool degenerate() const { return status == DEGENERATE; }
    \n-
    656 bool outlier() const { return status == OUTLIER; }
    \n-
    657 bool farPoint() const { return status == FAR_POINT; }
    \n-
    658 bool behindCamera() const { return status == BEHIND_CAMERA; }
    \n-
    659 // stream to output
    \n-
    660 friend std::ostream& operator<<(std::ostream& os,
    \n-
    661 const TriangulationResult& result) {
    \n-
    662 if (result)
    \n-
    663 os << "point = " << *result << std::endl;
    \n-
    664 else
    \n-
    665 os << "no point, status = " << result.status << std::endl;
    \n-
    666 return os;
    \n-
    667 }
    \n-
    668
    \n-
    669 private:
    \n-\n-
    672 template <class ARCHIVE>
    \n-
    673 void serialize(ARCHIVE& ar, const unsigned int version) {
    \n-
    674 ar& BOOST_SERIALIZATION_NVP(status);
    \n-
    675 }
    \n-
    676};
    \n-
    \n-
    677
    \n-
    679template<class CAMERA>
    \n-
    \n-\n-
    681 const typename CAMERA::MeasurementVector& measured,
    \n-
    682 const TriangulationParameters& params) {
    \n-
    683
    \n-
    684 size_t m = cameras.size();
    \n-
    685
    \n-
    686 // if we have a single pose the corresponding factor is uninformative
    \n-
    687 if (m < 2)
    \n-
    688 return TriangulationResult::Degenerate();
    \n-
    689 else
    \n-
    690 // We triangulate the 3D position of the landmark
    \n-
    691 try {
    \n-
    692 Point3 point =
    \n-
    693 triangulatePoint3<CAMERA>(cameras, measured, params.rankTolerance,
    \n-
    694 params.enableEPI, params.noiseModel);
    \n-
    695
    \n-
    696 // Check landmark distance and re-projection errors to avoid outliers
    \n-
    697 size_t i = 0;
    \n-
    698 double maxReprojError = 0.0;
    \n-
    699 for(const CAMERA& camera: cameras) {
    \n-
    700 const Pose3& pose = camera.pose();
    \n-
    701 if (params.landmarkDistanceThreshold > 0
    \n-
    702 && distance3(pose.translation(), point)
    \n-\n-
    704 return TriangulationResult::FarPoint();
    \n-
    705#ifdef GTSAM_THROW_CHEIRALITY_EXCEPTION
    \n-
    706 // verify that the triangulated point lies in front of all cameras
    \n-
    707 // Only needed if this was not yet handled by exception
    \n-
    708 const Point3& p_local = pose.transformTo(point);
    \n-
    709 if (p_local.z() <= 0)
    \n-
    710 return TriangulationResult::BehindCamera();
    \n-
    711#endif
    \n-
    712 // Check reprojection error
    \n-
    713 if (params.dynamicOutlierRejectionThreshold > 0) {
    \n-
    714 const typename CAMERA::Measurement& zi = measured.at(i);
    \n-
    715 Point2 reprojectionError = camera.reprojectionError(point, zi);
    \n-
    716 maxReprojError = std::max(maxReprojError, reprojectionError.norm());
    \n-
    717 }
    \n-
    718 i += 1;
    \n-
    719 }
    \n-
    720 // Flag as degenerate if average reprojection error is too large
    \n-\n-
    722 && maxReprojError > params.dynamicOutlierRejectionThreshold)
    \n-
    723 return TriangulationResult::Outlier();
    \n-
    724
    \n-
    725 // all good!
    \n-
    726 return TriangulationResult(point);
    \n-\n-
    728 // This exception is thrown if
    \n-
    729 // 1) There is a single pose for triangulation - this should not happen because we checked the number of poses before
    \n-
    730 // 2) The rank of the matrix used for triangulation is < 3: rotation-only, parallel cameras (or motion towards the landmark)
    \n-
    731 return TriangulationResult::Degenerate();
    \n-\n-
    733 // point is behind one of the cameras: can be the case of close-to-parallel cameras or may depend on outliers
    \n-
    734 return TriangulationResult::BehindCamera();
    \n-
    735 }
    \n-
    736}
    \n-
    \n-
    737
    \n-
    738// Vector of Cameras - used by the Python/MATLAB wrapper
    \n-
    739using CameraSetCal3Bundler = CameraSet<PinholeCamera<Cal3Bundler>>;
    \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-
    The most common 5DOF 3D->2D calibration.
    \n-
    Base class to create smart factors on poses or cameras.
    \n-
    Unified Calibration Model, see Mei07icra for details.
    \n-
    Calibration used by Bundler.
    \n-
    Calibrated camera with spherical projection.
    \n-
    Base class for all pinhole cameras.
    \n-
    Calibration of a fisheye camera.
    \n-
    2D Pose
    \n-
    Calibration of a camera with radial distortion, calculations in base class Cal3DS2_Base.
    \n-
    Factor Graph consisting of non-linear factors.
    \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-
    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-
    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-
    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-
    Point3 triangulateNonlinear(const std::vector< Pose3 > &poses, boost::shared_ptr< CALIBRATION > sharedCal, const Point2Vector &measurements, const Point3 &initialEstimate, const SharedNoiseModel &model=nullptr)
    Given an initial estimate , refine a point using measurements in several cameras.
    Definition triangulation.h:187
    \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-
    noiseModel::Base::shared_ptr SharedNoiseModel
    Aliases.
    Definition NoiseModel.h:724
    \n-
    Point3 triangulatePoint3(const std::vector< Pose3 > &poses, boost::shared_ptr< CALIBRATION > sharedCal, const Point2Vector &measurements, double rank_tol=1e-9, bool optimize=false, const SharedNoiseModel &model=nullptr, const bool useLOST=false)
    Function to triangulate 3D landmark point from an arbitrary number of poses (at least 2) using the DL...
    Definition triangulation.h:421
    \n-
    std::pair< NonlinearFactorGraph, Values > triangulationGraph(const std::vector< Pose3 > &poses, boost::shared_ptr< CALIBRATION > sharedCal, const Point2Vector &measurements, Key landmarkKey, const Point3 &initialEstimate, const SharedNoiseModel &model=noiseModel::Unit::Create(2))
    Create a factor graph with projection factors from poses and one calibration.
    Definition triangulation.h:122
    \n-
    std::uint64_t Key
    Integer nonlinear key type.
    Definition types.h:100
    \n-
    Point3Vector calibrateMeasurements(const CameraSet< CAMERA > &cameras, const typename CAMERA::MeasurementVector &measurements)
    Convert pixel measurements in image to homogeneous measurements in the image plane using camera intri...
    Definition triangulation.h:381
    \n-
    Point3 triangulateDLT(const std::vector< Matrix34, Eigen::aligned_allocator< Matrix34 > > &projection_matrices, const Point2Vector &measurements, double rank_tol)
    DLT triangulation: See Hartley and Zisserman, 2nd Ed., page 312.
    Definition triangulation.cpp:127
    \n-
    Vector4 triangulateHomogeneousDLT(const std::vector< Matrix34, Eigen::aligned_allocator< Matrix34 > > &projection_matrices, const Point2Vector &measurements, double rank_tol)
    DLT triangulation: See Hartley and Zisserman, 2nd Ed., page 312.
    Definition triangulation.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-
    The most common 5DOF 3D->2D calibration.
    Definition Cal3_S2.h:34
    \n-
    A set of cameras, all with their own calibration.
    Definition CameraSet.h:36
    \n-
    A pinhole camera class that has a Pose3 and a Calibration.
    Definition PinholeCamera.h:33
    \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-
    Point3 transformTo(const Point3 &point, OptionalJacobian< 3, 6 > Hself=boost::none, OptionalJacobian< 3, 3 > Hpoint=boost::none) const
    takes point in world coordinates and transforms it to Pose coordinates
    Definition Pose3.cpp:371
    \n-
    const Point3 & translation(OptionalJacobian< 3, 6 > Hself=boost::none) const
    get translation
    Definition Pose3.cpp:308
    \n-
    Exception thrown by triangulateDLT when SVD returns rank < 3.
    Definition triangulation.h:39
    \n-
    Exception thrown by triangulateDLT when landmark is behind one or more of the cameras.
    Definition triangulation.h:47
    \n-
    Definition triangulation.h:556
    \n-
    TriangulationParameters(const double _rankTolerance=1.0, const bool _enableEPI=false, double _landmarkDistanceThreshold=-1, double _dynamicOutlierRejectionThreshold=-1, const SharedNoiseModel &_noiseModel=nullptr)
    Constructor.
    Definition triangulation.h:586
    \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-
    SharedNoiseModel noiseModel
    used in the nonlinear triangulation
    Definition triangulation.h:575
    \n-
    TriangulationResult is an optional point, along with the reasons why it is invalid.
    Definition triangulation.h:626
    \n-
    TriangulationResult()
    Default constructor, only for serialization.
    Definition triangulation.h:638
    \n-
    TriangulationResult(const Point3 &p)
    Constructor.
    Definition triangulation.h:643
    \n-
    friend class boost::serialization::access
    Serialization function.
    Definition triangulation.h:671
    \n-
    Character and index key used to refer to variables.
    Definition Symbol.h:35
    \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-
    static shared_ptr Create(size_t dim)
    Create a unit covariance noise model.
    Definition NoiseModel.h:597
    \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-
    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-
    Non-linear factor for a constraint derived from a 2D measurement.
    Definition TriangulationFactor.h:33
    \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,815 +1,616 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-triangulation.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 -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, 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/_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\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_\b__\bS_\b2_\b._\bh>\n-27#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-28#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-29#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-30#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b._\bh>\n-31#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b2_\b._\bh>\n-32#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-33#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-34#include \n-35\n-36namespace _\bg_\bt_\bs_\ba_\bm {\n-37\n-_\b3_\b9class GTSAM_EXPORT _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bU_\bn_\bd_\be_\br_\bc_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn: public std::\n-runtime_error {\n-40public:\n-41 _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bU_\bn_\bd_\be_\br_\bc_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn() :\n-42 std::runtime_error(\"Triangulation Underconstrained Exception.\") {\n-43 }\n-44};\n-45\n-_\b4_\b7class GTSAM_EXPORT _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn: public std::\n-runtime_error {\n-48public:\n-49 _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn() :\n-50 std::runtime_error(\n-51 \"Triangulation Cheirality Exception: The resulting landmark is behind one or\n-more cameras.\") {\n-52 }\n-53};\n-54\n-62GTSAM_EXPORT Vector4 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bH_\bo_\bm_\bo_\bg_\be_\bn_\be_\bo_\bu_\bs_\bD_\bL_\bT(\n-63 const std::vector>&\n-projection_matrices,\n-64 const Point2Vector& measurements, double rank_tol = 1e-9);\n-65\n-74GTSAM_EXPORT Vector4 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bH_\bo_\bm_\bo_\bg_\be_\bn_\be_\bo_\bu_\bs_\bD_\bL_\bT(\n-75 const std::vector>&\n-projection_matrices,\n-76 const std::vector& measurements, double rank_tol = 1e-9);\n-77\n-85GTSAM_EXPORT _\bP_\bo_\bi_\bn_\bt_\b3 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bD_\bL_\bT(\n-86 const std::vector>&\n-projection_matrices,\n-87 const Point2Vector& measurements,\n-88 double rank_tol = 1e-9);\n-89\n-93GTSAM_EXPORT _\bP_\bo_\bi_\bn_\bt_\b3 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bD_\bL_\bT(\n-94 const std::vector>&\n-projection_matrices,\n-95 const std::vector& measurements,\n-96 double rank_tol = 1e-9);\n-97\n-108GTSAM_EXPORT _\bP_\bo_\bi_\bn_\bt_\b3 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bL_\bO_\bS_\bT(const std::vector& poses,\n-109 const Point3Vector& calibratedMeasurements,\n-110 const SharedIsotropic& measurementNoise);\n-111\n-121template\n-_\b1_\b2_\b2std::pair _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bG_\br_\ba_\bp_\bh(\n-123 const std::vector& poses, boost::shared_ptr sharedCal,\n-124 const Point2Vector& measurements, _\bK_\be_\by landmarkKey,\n-125 const _\bP_\bo_\bi_\bn_\bt_\b3& initialEstimate,\n-126 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model = _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bC_\br_\be_\ba_\bt_\be(2)) {\n-127 _\bV_\ba_\bl_\bu_\be_\bs values;\n-128 values._\bi_\bn_\bs_\be_\br_\bt(landmarkKey, initialEstimate); // Initial landmark value\n-129 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh graph;\n-130 for (size_t i = 0; i < measurements.size(); i++) {\n-131 const _\bP_\bo_\bs_\be_\b3& pose_i = poses[i];\n-132 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-133 Camera camera_i(pose_i, sharedCal);\n-134 graph.emplace_shared<_\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-135 (camera_i, measurements[i], model, landmarkKey);\n-136 }\n-137 return std::make_pair(graph, values);\n-138}\n-139\n-149template\n-_\b1_\b5_\b0std::pair _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bG_\br_\ba_\bp_\bh(\n-151 const _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>& cameras,\n-152 const typename CAMERA::MeasurementVector& measurements, _\bK_\be_\by landmarkKey,\n-153 const _\bP_\bo_\bi_\bn_\bt_\b3& initialEstimate,\n-154 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model = nullptr) {\n-155 _\bV_\ba_\bl_\bu_\be_\bs values;\n-156 values._\bi_\bn_\bs_\be_\br_\bt(landmarkKey, initialEstimate); // Initial landmark value\n-157 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh graph;\n-158 static _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl unit(_\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-159 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b:_\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 for (size_t i = 0; i < measurements.size(); i++) {\n-161 const CAMERA& camera_i = cameras[i];\n-162 graph.emplace_shared<_\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-163 (camera_i, measurements[i], model? model : unit, landmarkKey);\n-164 }\n-165 return std::make_pair(graph, values);\n-166}\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+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-175GTSAM_EXPORT _\bP_\bo_\bi_\bn_\bt_\b3 _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(const NonlinearFactorGraph& graph,\n-176 const _\bV_\ba_\bl_\bu_\be_\bs& values, _\bK_\be_\by landmarkKey);\n-177\n-186template\n-_\b1_\b8_\b7_\bP_\bo_\bi_\bn_\bt_\b3 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br(const std::vector& poses,\n-188 boost::shared_ptr sharedCal,\n-189 const Point2Vector& measurements, const _\bP_\bo_\bi_\bn_\bt_\b3& initialEstimate,\n-190 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model = nullptr) {\n-191\n-192 // Create a factor graph and initial values\n-193 _\bV_\ba_\bl_\bu_\be_\bs values;\n-194 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh graph;\n-195 boost::tie(graph, values) = triangulationGraph //\n-196 (poses, sharedCal, measurements, _\bS_\by_\bm_\bb_\bo_\bl('p', 0), initialEstimate, model);\n-197\n-198 return _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(graph, values, _\bS_\by_\bm_\bb_\bo_\bl('p', 0));\n-199}\n-200\n-208template\n-_\b2_\b0_\b9_\bP_\bo_\bi_\bn_\bt_\b3 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br(\n-210 const _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>& cameras,\n-211 const typename CAMERA::MeasurementVector& measurements, const _\bP_\bo_\bi_\bn_\bt_\b3&\n-initialEstimate,\n-212 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model = nullptr) {\n-213\n-214 // Create a factor graph and initial values\n-215 _\bV_\ba_\bl_\bu_\be_\bs values;\n-216 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh graph;\n-217 boost::tie(graph, values) = triangulationGraph //\n-218 (cameras, measurements, _\bS_\by_\bm_\bb_\bo_\bl('p', 0), initialEstimate, model);\n-219\n-220 return _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(graph, values, _\bS_\by_\bm_\bb_\bo_\bl('p', 0));\n-221}\n-222\n-223template\n-224std::vector>\n-225projectionMatricesFromCameras(const CameraSet &cameras) {\n-226 std::vector>\n-projection_matrices;\n-227 for (const CAMERA &camera: cameras) {\n-228 projection_matrices.push_back(camera.cameraProjectionMatrix());\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 return projection_matrices;\n-231}\n-232\n-233// overload, assuming pinholePose\n-234template\n-235std::vector>\n-projectionMatricesFromPoses(\n-236 const std::vector &poses, boost::shared_ptr sharedCal)\n-{\n-237 std::vector>\n-projection_matrices;\n-238 for (size_t i = 0; i < poses.size(); i++) {\n-239 PinholePose camera(poses.at(i), sharedCal);\n-240 projection_matrices.push_back(camera.cameraProjectionMatrix());\n-241 }\n-242 return projection_matrices;\n-243}\n-244\n-252template \n-_\b2_\b5_\b3_\bC_\ba_\bl_\b3_\b__\bS_\b2 _\bc_\br_\be_\ba_\bt_\be_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn(const CALIBRATION& cal) {\n-254 const auto& K = cal.K();\n-255 return _\bC_\ba_\bl_\b3_\b__\bS_\b2(K(0, 0), K(1, 1), K(0, 1), K(0, 2), K(1, 2));\n-256}\n-257\n-260template \n-_\b2_\b6_\b1MEASUREMENT _\bu_\bn_\bd_\bi_\bs_\bt_\bo_\br_\bt_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bn_\ba_\bl(\n-262 const CALIBRATION& cal, const MEASUREMENT& measurement,\n-263 boost::optional pinholeCal = boost::none) {\n-264 if (!pinholeCal) {\n-265 pinholeCal = _\bc_\br_\be_\ba_\bt_\be_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn(cal);\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 return pinholeCal->uncalibrate(cal.calibrate(measurement));\n-268}\n-269\n-281template \n-_\b2_\b8_\b2Point2Vector _\bu_\bn_\bd_\bi_\bs_\bt_\bo_\br_\bt_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(const CALIBRATION& cal,\n-283 const Point2Vector& measurements) {\n-284 _\bC_\ba_\bl_\b3_\b__\bS_\b2 pinholeCalibration = _\bc_\br_\be_\ba_\bt_\be_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn(cal);\n-285 Point2Vector undistortedMeasurements;\n-286 // Calibrate with cal and uncalibrate with pinhole version of cal so that\n-287 // measurements are undistorted.\n-288 std::transform(measurements.begin(), measurements.end(),\n-289 std::back_inserter(undistortedMeasurements),\n-290 [&cal, &pinholeCalibration](const _\bP_\bo_\bi_\bn_\bt_\b2& measurement) {\n-291 return undistortMeasurementInternal(\n-292 cal, measurement, pinholeCalibration);\n-293 });\n-294 return undistortedMeasurements;\n-295}\n-296\n-298template <>\n-_\b2_\b9_\b9inline Point2Vector _\bu_\bn_\bd_\bi_\bs_\bt_\bo_\br_\bt_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(const _\bC_\ba_\bl_\b3_\b__\bS_\b2& cal,\n-300 const Point2Vector& measurements) {\n-301 return measurements;\n-302}\n-303\n-315template \n-_\b3_\b1_\b6typename CAMERA::MeasurementVector _\bu_\bn_\bd_\bi_\bs_\bt_\bo_\br_\bt_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(\n-317 const _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>& cameras,\n-318 const typename CAMERA::MeasurementVector& measurements) {\n-319 const size_t nrMeasurements = measurements.size();\n-320 assert(nrMeasurements == cameras.size());\n-321 typename CAMERA::MeasurementVector undistortedMeasurements(nrMeasurements);\n-322 for (size_t ii = 0; ii < nrMeasurements; ++ii) {\n-323 // Calibrate with cal and uncalibrate with pinhole version of cal so that\n-324 // measurements are undistorted.\n-325 undistortedMeasurements[ii] =\n-326 undistortMeasurementInternal(\n-327 cameras[ii].calibration(), measurements[ii]);\n-328 }\n-329 return undistortedMeasurements;\n-330}\n-331\n-333template >\n-_\b3_\b3_\b4inline PinholeCamera::MeasurementVector _\bu_\bn_\bd_\bi_\bs_\bt_\bo_\br_\bt_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(\n-335 const _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt<_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b>>& cameras,\n-336 const PinholeCamera::MeasurementVector& measurements) {\n-337 return measurements;\n-338}\n-339\n-341template \n-_\b3_\b4_\b2inline SphericalCamera::MeasurementVector _\bu_\bn_\bd_\bi_\bs_\bt_\bo_\br_\bt_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(\n-343 const _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b>& cameras,\n-344 const SphericalCamera::MeasurementVector& measurements) {\n-345 return measurements;\n-346}\n-347\n-356template \n-_\b3_\b5_\b7inline Point3Vector _\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-358 const CALIBRATION& cal, const Point2Vector& measurements) {\n-359 Point3Vector calibratedMeasurements;\n-360 // Calibrate with cal and uncalibrate with pinhole version of cal so that\n-361 // measurements are undistorted.\n-362 std::transform(measurements.begin(), measurements.end(),\n-363 std::back_inserter(calibratedMeasurements),\n-364 [&cal](const _\bP_\bo_\bi_\bn_\bt_\b2& measurement) {\n-365 Point3 p;\n-366 p << cal.calibrate(measurement), 1.0;\n-367 return p;\n-368 });\n-369 return calibratedMeasurements;\n-370}\n-371\n-380template \n-_\b3_\b8_\b1inline Point3Vector _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(\n-382 const _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>& cameras,\n-383 const typename CAMERA::MeasurementVector& measurements) {\n-384 const size_t nrMeasurements = measurements.size();\n-385 assert(nrMeasurements == cameras.size());\n-386 Point3Vector calibratedMeasurements(nrMeasurements);\n-387 for (size_t ii = 0; ii < nrMeasurements; ++ii) {\n-388 calibratedMeasurements[ii]\n-389 << cameras[ii].calibration().calibrate(measurements[ii]),\n-390 1.0;\n-391 }\n-392 return calibratedMeasurements;\n-393}\n-394\n-396template \n-_\b3_\b9_\b7inline Point3Vector _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(\n-398 const _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b>& cameras,\n-399 const SphericalCamera::MeasurementVector& measurements) {\n-400 Point3Vector calibratedMeasurements(measurements.size());\n-401 for (size_t ii = 0; ii < measurements.size(); ++ii) {\n-402 calibratedMeasurements[ii] << measurements[ii].point3();\n-403 }\n-404 return calibratedMeasurements;\n-405}\n-406\n-420template \n-_\b4_\b2_\b1_\bP_\bo_\bi_\bn_\bt_\b3 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bP_\bo_\bi_\bn_\bt_\b3(const std::vector& poses,\n-422 boost::shared_ptr sharedCal,\n-423 const Point2Vector& measurements,\n-424 double rank_tol = 1e-9, bool _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be = false,\n-425 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model = nullptr,\n-426 const bool useLOST = false) {\n-427 assert(poses.size() == measurements.size());\n-428 if (poses.size() < 2) throw(_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bU_\bn_\bd_\be_\br_\bc_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn());\n-429\n-430 // Triangulate linearly\n-431 _\bP_\bo_\bi_\bn_\bt_\b3 point;\n-432 if (useLOST) {\n-433 // Reduce input noise model to an isotropic noise model using the mean of\n-434 // the diagonal.\n-435 const double measurementSigma = model ? model->sigmas().mean() : 1e-4;\n-436 SharedIsotropic measurementNoise =\n-437 _\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(2, measurementSigma);\n-438 // calibrate the measurements to obtain homogenous coordinates in image\n-439 // plane.\n-440 auto calibratedMeasurements =\n-441 calibrateMeasurementsShared(*sharedCal, measurements);\n-442\n-443 point = _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bL_\bO_\bS_\bT(poses, calibratedMeasurements, measurementNoise);\n-444 } else {\n-445 // construct projection matrices from poses & calibration\n-446 auto projection_matrices = projectionMatricesFromPoses(poses, sharedCal);\n-447\n-448 // Undistort the measurements, leaving only the pinhole elements in effect.\n-449 auto undistortedMeasurements =\n-450 undistortMeasurements(*sharedCal, measurements);\n-451\n-452 point =\n-453 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bD_\bL_\bT(projection_matrices, undistortedMeasurements, rank_tol);\n-454 }\n-455\n-456 // Then refine using non-linear optimization\n-457 if (_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be)\n-458 point = triangulateNonlinear //\n-459 (poses, sharedCal, measurements, point, model);\n-460\n-461#ifdef GTSAM_THROW_CHEIRALITY_EXCEPTION\n-462 // verify that the triangulated point lies in front of all cameras\n-463 for (const _\bP_\bo_\bs_\be_\b3& pose : poses) {\n-464 const _\bP_\bo_\bi_\bn_\bt_\b3& p_local = pose.transformTo(point);\n-465 if (p_local.z() <= 0) throw(_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn());\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#endif\n-468\n-469 return point;\n-470}\n-471\n-486template \n-_\b4_\b8_\b7_\bP_\bo_\bi_\bn_\bt_\b3 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bP_\bo_\bi_\bn_\bt_\b3(const _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>& cameras,\n-488 const typename CAMERA::MeasurementVector& measurements,\n-489 double rank_tol = 1e-9, bool _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be = false,\n-490 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model = nullptr,\n-491 const bool useLOST = false) {\n-492 size_t m = cameras.size();\n-493 assert(measurements.size() == m);\n-494\n-495 if (m < 2) throw(_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bU_\bn_\bd_\be_\br_\bc_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn());\n-496\n-497 // Triangulate linearly\n-498 _\bP_\bo_\bi_\bn_\bt_\b3 point;\n-499 if (useLOST) {\n-500 // Reduce input noise model to an isotropic noise model using the mean of\n-501 // the diagonal.\n-502 const double measurementSigma = model ? model->sigmas().mean() : 1e-4;\n-503 SharedIsotropic measurementNoise =\n-504 _\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(2, measurementSigma);\n-505\n-506 // construct poses from cameras.\n-507 std::vector poses;\n-508 poses.reserve(cameras.size());\n-509 for (const auto& camera : cameras) poses.push_back(camera.pose());\n-510\n-511 // calibrate the measurements to obtain homogenous coordinates in image\n-512 // plane.\n-513 auto calibratedMeasurements =\n-514 calibrateMeasurements(cameras, measurements);\n-515\n-516 point = _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bL_\bO_\bS_\bT(poses, calibratedMeasurements, measurementNoise);\n-517 } else {\n-518 // construct projection matrices from poses & calibration\n-519 auto projection_matrices = projectionMatricesFromCameras(cameras);\n-520\n-521 // Undistort the measurements, leaving only the pinhole elements in effect.\n-522 auto undistortedMeasurements =\n-523 undistortMeasurements(cameras, measurements);\n-524\n-525 point =\n-526 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bD_\bL_\bT(projection_matrices, undistortedMeasurements, rank_tol);\n-527 }\n-528\n-529 // Then refine using non-linear optimization\n-530 if (_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be) {\n-531 point = triangulateNonlinear(cameras, measurements, point, model);\n-532 }\n-533\n-534#ifdef GTSAM_THROW_CHEIRALITY_EXCEPTION\n-535 // verify that the triangulated point lies in front of all cameras\n-536 for (const CAMERA& camera : cameras) {\n-537 const _\bP_\bo_\bi_\bn_\bt_\b3& p_local = camera.pose().transformTo(point);\n-538 if (p_local.z() <= 0) throw(_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn());\n-539 }\n-540#endif\n-541\n-542 return point;\n-543}\n-544\n-546template \n-_\b5_\b4_\b7_\bP_\bo_\bi_\bn_\bt_\b3 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bP_\bo_\bi_\bn_\bt_\b3(const _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt<_\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>>&\n-cameras,\n-548 const Point2Vector& measurements,\n-549 double rank_tol = 1e-9, bool _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be = false,\n-550 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model = nullptr,\n-551 const bool useLOST = false) {\n-552 return triangulatePoint3> //\n-553 (cameras, measurements, rank_tol, _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be, model, useLOST);\n-554}\n-555\n-_\b5_\b5_\b6struct GTSAM_EXPORT _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs {\n-557\n-_\b5_\b5_\b8 double _\br_\ba_\bn_\bk_\bT_\bo_\bl_\be_\br_\ba_\bn_\bc_\be;\n-_\b5_\b6_\b0 bool _\be_\bn_\ba_\bb_\bl_\be_\bE_\bP_\bI;\n-561\n-_\b5_\b6_\b6 double _\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-567\n-_\b5_\b7_\b3 double _\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-574\n-_\b5_\b7_\b5 _\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-576\n-_\b5_\b8_\b6 _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs(const double _rankTolerance = 1.0,\n-587 const bool _enableEPI = false, double _landmarkDistanceThreshold = -1,\n-588 double _dynamicOutlierRejectionThreshold = -1,\n-589 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& _noiseModel = nullptr) :\n-590 rankTolerance(_rankTolerance), enableEPI(_enableEPI), //\n-591 landmarkDistanceThreshold(_landmarkDistanceThreshold), //\n-592 dynamicOutlierRejectionThreshold(_dynamicOutlierRejectionThreshold),\n-593 noiseModel(_noiseModel){\n-594 }\n-595\n-596 // stream to output\n-597 friend std::ostream &operator<<(std::ostream &os,\n-598 const _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs& p) {\n-599 os << \"rankTolerance = \" << p._\br_\ba_\bn_\bk_\bT_\bo_\bl_\be_\br_\ba_\bn_\bc_\be << std::endl;\n-600 os << \"enableEPI = \" << p._\be_\bn_\ba_\bb_\bl_\be_\bE_\bP_\bI << std::endl;\n-601 os << \"landmarkDistanceThreshold = \" << p._\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-602 << std::endl;\n-603 os << \"dynamicOutlierRejectionThreshold = \"\n-604 << p._\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 << std::endl;\n-605 os << \"noise model\" << std::endl;\n-606 return os;\n-607 }\n-608\n-609private:\n-610\n-_\b6_\b1_\b2 friend class boost::serialization::access;\n-613 template\n-614 void serialize(ARCHIVE & ar, const unsigned int version) {\n-615 ar & BOOST_SERIALIZATION_NVP(rankTolerance);\n-616 ar & BOOST_SERIALIZATION_NVP(enableEPI);\n-617 ar & BOOST_SERIALIZATION_NVP(landmarkDistanceThreshold);\n-618 ar & BOOST_SERIALIZATION_NVP(dynamicOutlierRejectionThreshold);\n-619 }\n-620};\n-621\n-_\b6_\b2_\b6class _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt : public boost::optional {\n-627 public:\n-628 enum Status { VALID, DEGENERATE, BEHIND_CAMERA, OUTLIER, FAR_POINT };\n-629 Status status;\n-630\n-631 private:\n-632 _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt(Status s) : status(s) {}\n-633\n-634 public:\n-_\b6_\b3_\b8 _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt() {}\n-639\n-_\b6_\b4_\b3 _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt(const _\bP_\bo_\bi_\bn_\bt_\b3& p) : status(VALID) { reset(p); }\n-644 static _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt Degenerate() {\n-645 return _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt(DEGENERATE);\n-646 }\n-647 static _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt Outlier() { return _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt(OUTLIER);\n-}\n-648 static _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt FarPoint() {\n-649 return _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt(FAR_POINT);\n-650 }\n-651 static _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt BehindCamera() {\n-652 return _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt(BEHIND_CAMERA);\n-653 }\n-654 bool valid() const { return status == VALID; }\n-655 bool degenerate() const { return status == DEGENERATE; }\n-656 bool outlier() const { return status == OUTLIER; }\n-657 bool farPoint() const { return status == FAR_POINT; }\n-658 bool behindCamera() const { return status == BEHIND_CAMERA; }\n-659 // stream to output\n-660 friend std::ostream& operator<<(std::ostream& os,\n-661 const _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt& result) {\n-662 if (result)\n-663 os << \"point = \" << *result << std::endl;\n-664 else\n-665 os << \"no point, status = \" << result.status << std::endl;\n-666 return os;\n-667 }\n-668\n-669 private:\n-_\b6_\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-672 template \n-673 void serialize(ARCHIVE& ar, const unsigned int version) {\n-674 ar& BOOST_SERIALIZATION_NVP(status);\n-675 }\n-676};\n-677\n-679template\n-_\b6_\b8_\b0_\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_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>& cameras,\n-681 const typename CAMERA::MeasurementVector& measured,\n-682 const _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs& params) {\n-683\n-684 size_t m = cameras.size();\n-685\n-686 // if we have a single pose the corresponding factor is uninformative\n-687 if (m < 2)\n-688 return TriangulationResult::Degenerate();\n-689 else\n-690 // We triangulate the 3D position of the landmark\n-691 try {\n-692 _\bP_\bo_\bi_\bn_\bt_\b3 point =\n-693 triangulatePoint3(cameras, measured, params._\br_\ba_\bn_\bk_\bT_\bo_\bl_\be_\br_\ba_\bn_\bc_\be,\n-694 params._\be_\bn_\ba_\bb_\bl_\be_\bE_\bP_\bI, params._\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl);\n-695\n-696 // Check landmark distance and re-projection errors to avoid outliers\n-697 size_t i = 0;\n-698 double maxReprojError = 0.0;\n-699 for(const CAMERA& camera: cameras) {\n-700 const _\bP_\bo_\bs_\be_\b3& pose = camera.pose();\n-701 if (params._\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 > 0\n-702 && _\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be_\b3(pose._\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn(), point)\n-703 > params._\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-704 return TriangulationResult::FarPoint();\n-705#ifdef GTSAM_THROW_CHEIRALITY_EXCEPTION\n-706 // verify that the triangulated point lies in front of all cameras\n-707 // Only needed if this was not yet handled by exception\n-708 const _\bP_\bo_\bi_\bn_\bt_\b3& p_local = pose._\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bo(point);\n-709 if (p_local.z() <= 0)\n-710 return TriangulationResult::BehindCamera();\n-711#endif\n-712 // Check reprojection error\n-713 if (params._\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 > 0) {\n-714 const typename CAMERA::Measurement& zi = measured.at(i);\n-715 _\bP_\bo_\bi_\bn_\bt_\b2 reprojectionError = camera.reprojectionError(point, zi);\n-716 maxReprojError = std::max(maxReprojError, reprojectionError.norm());\n-717 }\n-718 i += 1;\n-719 }\n-720 // Flag as degenerate if average reprojection error is too large\n-721 if (params._\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 > 0\n-722 && maxReprojError > params._\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-723 return TriangulationResult::Outlier();\n-724\n-725 // all good!\n-726 return _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt(point);\n-727 } catch (_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bU_\bn_\bd_\be_\br_\bc_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn&) {\n-728 // This exception is thrown if\n-729 // 1) There is a single pose for triangulation - this should not happen\n-because we checked the number of poses before\n-730 // 2) The rank of the matrix used for triangulation is < 3: rotation-only,\n-parallel cameras (or motion towards the landmark)\n-731 return TriangulationResult::Degenerate();\n-732 } catch (_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn&) {\n-733 // point is behind one of the cameras: can be the case of close-to-parallel\n-cameras or may depend on outliers\n-734 return TriangulationResult::BehindCamera();\n-735 }\n-736}\n-737\n-738// Vector of Cameras - used by the Python/MATLAB wrapper\n-739using CameraSetCal3Bundler = CameraSet>;\n-740using CameraSetCal3_S2 = CameraSet>;\n-741using CameraSetCal3DS2 = CameraSet>;\n-742using CameraSetCal3Fisheye = CameraSet>;\n-743using CameraSetCal3Unified = CameraSet>;\n-744using CameraSetSpherical = CameraSet;\n-745} // \\namespace gtsam\n-746\n-_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bh\n-The most common 5DOF 3D->2D calibration.\n-_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b._\bh\n-Base class to create smart factors on poses or cameras.\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_\bB_\bu_\bn_\bd_\bl_\be_\br_\b._\bh\n-Calibration used by Bundler.\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_\bF_\bi_\bs_\bh_\be_\by_\be_\b._\bh\n-Calibration of a fisheye camera.\n-_\bP_\bo_\bs_\be_\b2_\b._\bh\n-2D Pose\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+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:_\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-Point2Vector &measurements)\n-Convert pixel measurements in image to homogeneous measurements in the image\n-plane using shared camer...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:357\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bL_\bO_\bS_\bT\n-Point3 triangulateLOST(const std::vector< Pose3 > &poses, const Point3Vector\n-&calibratedMeasurements, const SharedIsotropic &measurementNoise)\n-Triangulation using the LOST (Linear Optimal Sine Triangulation) algorithm\n-proposed in https://arxiv....\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.cpp:92\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bu_\bn_\bd_\bi_\bs_\bt_\bo_\br_\bt_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-Point2Vector undistortMeasurements(const CALIBRATION &cal, const Point2Vector\n-&measurements)\n-Remove distortion for measurements so as if the measurements came from a\n-pinhole camera.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:282\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn\n-Cal3_S2 createPinholeCalibration(const CALIBRATION &cal)\n-Create a pinhole calibration from a different Cal3 object, removing distortion.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:253\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bu_\bn_\bd_\bi_\bs_\bt_\bo_\br_\bt_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bI_\bn_\bt_\be_\br_\bn_\ba_\bl\n-MEASUREMENT undistortMeasurementInternal(const CALIBRATION &cal, const\n-MEASUREMENT &measurement, boost::optional< Cal3_S2 > pinholeCal=boost::none)\n-Internal undistortMeasurement to be used by undistortMeasurement and\n-undistortMeasurements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:261\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_\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_\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:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n-Point3 triangulateNonlinear(const std::vector< Pose3 > &poses, boost::\n-shared_ptr< CALIBRATION > sharedCal, const Point2Vector &measurements, const\n-Point3 &initialEstimate, const SharedNoiseModel &model=nullptr)\n-Given an initial estimate , refine a point using measurements in several\n-cameras.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:187\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:_\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_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bP_\bo_\bi_\bn_\bt_\b3\n-Point3 triangulatePoint3(const std::vector< Pose3 > &poses, boost::shared_ptr<\n-CALIBRATION > sharedCal, const Point2Vector &measurements, double rank_tol=1e-\n-9, bool optimize=false, const SharedNoiseModel &model=nullptr, const bool\n-useLOST=false)\n-Function to triangulate 3D landmark point from an arbitrary number of poses (at\n-least 2) using the DL...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:421\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bG_\br_\ba_\bp_\bh\n-std::pair< NonlinearFactorGraph, Values > triangulationGraph(const std::vector<\n-Pose3 > &poses, boost::shared_ptr< CALIBRATION > sharedCal, const Point2Vector\n-&measurements, Key landmarkKey, const Point3 &initialEstimate, const\n-SharedNoiseModel &model=noiseModel::Unit::Create(2))\n-Create a factor graph with projection factors from poses and one calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:122\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_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-Point3Vector calibrateMeasurements(const CameraSet< CAMERA > &cameras, const\n-typename CAMERA::MeasurementVector &measurements)\n-Convert pixel measurements in image to homogeneous measurements in the image\n-plane using camera intri...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:381\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bD_\bL_\bT\n-Point3 triangulateDLT(const std::vector< Matrix34, Eigen::aligned_allocator<\n-Matrix34 > > &projection_matrices, const Point2Vector &measurements, double\n-rank_tol)\n-DLT triangulation: See Hartley and Zisserman, 2nd Ed., page 312.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.cpp:127\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bH_\bo_\bm_\bo_\bg_\be_\bn_\be_\bo_\bu_\bs_\bD_\bL_\bT\n-Vector4 triangulateHomogeneousDLT(const std::vector< Matrix34, Eigen::\n-aligned_allocator< Matrix34 > > &projection_matrices, const Point2Vector\n-&measurements, double rank_tol)\n-DLT triangulation: See Hartley and Zisserman, 2nd Ed., page 312.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.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:_\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_\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:_\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_\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:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bo\n-Point3 transformTo(const Point3 &point, OptionalJacobian< 3, 6 > Hself=boost::\n-none, OptionalJacobian< 3, 3 > Hpoint=boost::none) const\n-takes point in world coordinates and transforms it to Pose coordinates\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:371\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:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bU_\bn_\bd_\be_\br_\bc_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n-Exception thrown by triangulateDLT when SVD returns rank < 3.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n-Exception thrown by triangulateDLT when landmark is behind one or more of the\n-cameras.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:47\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:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n-TriangulationParameters(const double _rankTolerance=1.0, const bool\n-_enableEPI=false, double _landmarkDistanceThreshold=-1, double\n-_dynamicOutlierRejectionThreshold=-1, const SharedNoiseModel\n-&_noiseModel=nullptr)\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:586\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:_\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:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-SharedNoiseModel noiseModel\n-used in the nonlinear triangulation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:575\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:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt\n-TriangulationResult()\n-Default constructor, only for serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:638\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_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt\n-TriangulationResult(const Point3 &p)\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 triangulation.h:643\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_\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 triangulation.h:671\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:_\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_\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+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+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-_\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:_\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-_\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- * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh\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 * Generated on Tue Jan 9 2024 05:51: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/a00890.html", "comments": ["Files 5% 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/Rot3M.cpp 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-
    Rot3M.cpp File Reference
    \n+
    GaussianBayesNet.cpp File Reference
    \n
    \n
    \n \n-

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

    Chordal Bayes Net, the result of eliminating a factor graph. \n More...

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

    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,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\n-Rot3M.cpp File Reference\n-Rotation (internal: 3*3 matrix representation*) _\bM_\bo_\br_\be_\b._\b._\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-Rotation (internal: 3*3 matrix representation*)\n+Chordal Bayes Net, the result of eliminating a factor graph.\n Author\n- Alireza Fathi\n- Christian Potthast\n- Frank Dellaert\n- Richard Roberts\n+ Frank Dellaert, Varun Agrawal\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+ * _\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/a00476.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00200.html", "comments": ["Files 23% 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/Point2.cpp 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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n \n \n
    \n \n-
    Point2.cpp File Reference
    \n+
    DiscreteFactorGraph.h File Reference
    \n
    \n
    \n \n-

    2D Point \n-More...

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

    2D Point

    \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,48 +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 | _\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+_\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 N\bNa\bam\bme\bes\bsp\bpa\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+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-2D Point\n+ Date\n+ Feb 14, 2011\n Author\n+ Duy-Nguyen Ta\n Frank Dellaert\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+ * _\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 * Generated on Tue Jan 9 2024 05:51: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_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01007_source.html", "comments": ["Files 6% 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/GaussianMixture.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-
    GaussianMixture.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
    20#pragma once
    \n
    21
    \n-
    22#include <gtsam/discrete/DecisionTree-inl.h>
    \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-
    54 : public HybridFactor,
    \n-
    55 public Conditional<HybridFactor, GaussianMixture> {
    \n-
    56 public:
    \n-
    57 using This = GaussianMixture;
    \n-
    58 using shared_ptr = boost::shared_ptr<GaussianMixture>;
    \n-\n-\n-
    61
    \n-\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-
    65 private:
    \n-
    66 Conditionals conditionals_;
    \n-
    67 double logConstant_;
    \n-
    68
    \n-
    72 GaussianFactorGraphTree asGaussianFactorGraphTree() const;
    \n-
    73
    \n-\n-\n-
    83 prunerFunc(const DecisionTreeFactor &decisionTree);
    \n-
    84
    \n-
    85 public:
    \n-
    88
    \n-
    90 GaussianMixture() = default;
    \n-
    91
    \n-
    103 GaussianMixture(const KeyVector &continuousFrontals,
    \n-
    104 const KeyVector &continuousParents,
    \n-
    105 const DiscreteKeys &discreteParents,
    \n-
    106 const Conditionals &conditionals);
    \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+
    103
    \n+
    \n+
    105 ~WhiteNoiseFactor() override {
    \n+
    106 }
    \n+
    \n
    107
    \n-
    116 GaussianMixture(KeyVector &&continuousFrontals, KeyVector &&continuousParents,
    \n-
    117 DiscreteKeys &&discreteParents,
    \n-
    118 std::vector<GaussianConditional::shared_ptr> &&conditionals);
    \n-
    119
    \n-\n-
    129 const KeyVector &continuousFrontals, const KeyVector &continuousParents,
    \n-
    130 const DiscreteKeys &discreteParents,
    \n-
    131 const std::vector<GaussianConditional::shared_ptr> &conditionals);
    \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+
    \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-
    136
    \n-
    138 bool equals(const HybridFactor &lf, double tol = 1e-9) const override;
    \n-
    139
    \n-
    141 void print(
    \n-
    142 const std::string &s = "GaussianMixture\\n",
    \n-
    143 const KeyFormatter &formatter = DefaultKeyFormatter) const override;
    \n-
    144
    \n-
    148
    \n-\n-
    151 const DiscreteValues &discreteValues) const;
    \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-
    154 size_t nrComponents() const;
    \n-
    155
    \n-
    157 KeyVector continuousParents() const;
    \n-
    158
    \n-
    161 double logNormalizationConstant() const override { return logConstant_; }
    \n-
    162
    \n-
    167 boost::shared_ptr<GaussianMixtureFactor> likelihood(
    \n-
    168 const VectorValues &given) const;
    \n-
    169
    \n-
    171 const Conditionals &conditionals() const;
    \n-
    172
    \n-
    180 AlgebraicDecisionTree<Key> logProbability(
    \n-
    181 const VectorValues &continuousValues) const;
    \n-
    182
    \n-
    208 double error(const HybridValues &values) const override;
    \n-
    209
    \n-
    217 AlgebraicDecisionTree<Key> error(const VectorValues &continuousValues) const;
    \n-
    218
    \n-
    225 double logProbability(const HybridValues &values) const override;
    \n-
    226
    \n-
    228 double evaluate(const HybridValues &values) const override;
    \n-
    229
    \n-
    \n-
    231 double operator()(const HybridValues &values) const {
    \n-
    232 return evaluate(values);
    \n-
    233 }
    \n-
    \n-
    234
    \n-
    242 void prune(const DecisionTreeFactor &decisionTree);
    \n-
    243
    \n-\n-
    253
    \n-
    254 private:
    \n-
    256 bool allFrontalsGiven(const VectorValues &given) const;
    \n-
    257
    \n-
    259 friend class boost::serialization::access;
    \n-
    260 template <class Archive>
    \n-
    261 void serialize(Archive &ar, const unsigned int /*version*/) {
    \n-
    262 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseFactor);
    \n-
    263 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseConditional);
    \n-
    264 ar &BOOST_SERIALIZATION_NVP(conditionals_);
    \n-
    265 }
    \n-
    266};
    \n-
    \n-
    267
    \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-
    Decision Tree for use in DiscreteFactors.
    \n-
    specialized key for discrete variables
    \n-\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+
    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+
    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-
    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+
    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-
    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-
    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-
    An assignment from labels to value index (size_t).
    Definition Assignment.h:37
    \n-\n-
    A discrete probabilistic factor.
    Definition DecisionTreeFactor.h:45
    \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-
    A conditional of gaussian mixtures indexed by discrete variables, as part of a Bayes Network.
    Definition GaussianMixture.h:55
    \n-
    double logNormalizationConstant() const override
    The log normalization constant is max of the the individual log-normalization constants.
    Definition GaussianMixture.h:161
    \n-
    double operator()(const HybridValues &values) const
    Evaluate probability density, sugar.
    Definition GaussianMixture.h:231
    \n-
    GaussianMixture()=default
    Default constructor, mainly 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-
    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-
    the error.
    \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
    \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-GaussianMixture.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@@ -16,221 +16,189 @@\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/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\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_\bF_\ba_\bc_\bt_\bo_\br_\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/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-27#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-28#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-29#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-30\n-31namespace _\bg_\bt_\bs_\ba_\bm {\n-32\n-33class _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs;\n-34\n-_\b5_\b3class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be\n-54 : public _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br,\n-55 public _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl {\n-56 public:\n-57 using _\bT_\bh_\bi_\bs = _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be;\n-58 using shared_ptr = boost::shared_ptr;\n-59 using _\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br = _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br;\n-60 using _\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl = _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b,_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\b>;\n-61\n-_\b6_\b3 using _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bs = _\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_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br_\b>;\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-65 private:\n-66 _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bs conditionals_;\n-67 double logConstant_;\n-68\n-72 _\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-73\n-81 std::function<_\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-82 const _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b<_\bK_\be_\by_\b> &, 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 &)>\n-83 _\bp_\br_\bu_\bn_\be_\br_\bF_\bu_\bn_\bc(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br &decisionTree);\n-84\n-85 public:\n-88\n-_\b9_\b0 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be() = default;\n-91\n-103 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &continuousFrontals,\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 const _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bs &conditionals);\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+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-116 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be(_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &&continuousFrontals, _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-&&continuousParents,\n-117 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &&discreteParents,\n-118 std::vector &&conditionals);\n-119\n-128 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be(\n-129 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &continuousFrontals, const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &continuousParents,\n-130 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &discreteParents,\n-131 const std::vector &conditionals);\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+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-136\n-138 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-139\n-141 void _\bp_\br_\bi_\bn_\bt(\n-142 const std::string &s = \"GaussianMixture\\n\",\n-143 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &formatter = DefaultKeyFormatter) const override;\n-144\n-148\n-150 _\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 operator()(\n-151 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs &discreteValues) const;\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-154 size_t nrComponents() const;\n-155\n-157 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br continuousParents() const;\n-158\n-_\b1_\b6_\b1 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 override { return logConstant_; }\n-162\n-167 boost::shared_ptr likelihood(\n-168 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &given) const;\n-169\n-171 const Conditionals &conditionals() const;\n-172\n-180 _\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> logProbability(\n-181 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &continuousValues) const;\n-182\n-208 double error(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs &values) const override;\n-209\n-217 _\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-218\n-225 double logProbability(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs &values) const override;\n-226\n-228 double evaluate(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs &values) const override;\n-229\n-_\b2_\b3_\b1 double _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs &values) const {\n-232 return evaluate(values);\n-233 }\n-234\n-242 void prune(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br &decisionTree);\n-243\n-251 _\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-253\n-254 private:\n-256 bool allFrontalsGiven(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &given) const;\n-257\n-_\b2_\b5_\b9 friend class boost::serialization::access;\n-260 template \n-261 void serialize(Archive &ar, const unsigned int /*version*/) {\n-262 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br);\n-263 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl);\n-264 ar &BOOST_SERIALIZATION_NVP(conditionals_);\n-265 }\n-266};\n-267\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_\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-_\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_\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+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+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:_\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:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs_\bA_\bs_\bS_\be_\bt\n-std::set< DiscreteKey > DiscreteKeysAsSet(const DiscreteKeys &discreteKeys)\n-Return the DiscreteKey vector as a set.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianMixture.cpp:221\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:_\bp_\br_\bu_\bn_\be_\br_\bF_\bu_\bn_\bc\n-std::function< double(const Assignment< Key > &, double)> prunerFunc(const\n-DecisionTreeFactor &prunedDecisionTree, const HybridConditional &conditional)\n-Helper function to get the pruner functional.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridBayesNet.cpp:66\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:_\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 _\bK_\be_\by_\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_\b _\b>\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_\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\n-A conditional of gaussian mixtures indexed by discrete variables, as part of a\n-Bayes Network.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianMixture.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\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-double logNormalizationConstant() const override\n-The log normalization constant is max of the the individual log-normalization\n-constants.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianMixture.h:161\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-double operator()(const HybridValues &values) const\n-Evaluate probability density, sugar.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianMixture.h:231\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be\n-GaussianMixture()=default\n-Default constructor, mainly 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:_\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+_\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-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-_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-the error.\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\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+ * _\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/a00488_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00506_source.html", "comments": ["Files 0% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n \n
    \n
    HybridJunctionTree.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
    24namespace gtsam {
    \n
    25
    \n
    26// Forward declarations
    \n
    27class HybridEliminationTree;
    \n
    28
    \n
    \n@@ -138,28 +138,28 @@\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+
    Linearized Hybrid factor graph that uses type erasure.
    \n+
    Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.
    \n+
    The junction tree.
    \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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -38,18 +38,18 @@\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+_\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 _\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:_\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"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00494_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00809_source.html", "comments": ["Files 10% 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/HybridBayesTree.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-
    HybridBayesTree.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-
    20#pragma once
    \n-
    21
    \n-\n-\n-\n-\n-\n-\n-
    28
    \n-
    29#include <string>
    \n+
    19// \\callgraph
    \n+
    20
    \n+
    21#pragma once
    \n+
    22
    \n+\n+\n+\n+\n+
    27
    \n+
    28#include <utility>
    \n+
    29namespace gtsam {
    \n
    30
    \n-
    31namespace gtsam {
    \n-
    32
    \n-
    33// Forward declarations
    \n-
    34class HybridConditional;
    \n-
    35class VectorValues;
    \n-
    36
    \n-
    37/* ************************************************************************* */
    \n-
    \n-
    44class GTSAM_EXPORT HybridBayesTreeClique
    \n-
    45 : public BayesTreeCliqueBase<HybridBayesTreeClique,
    \n-
    46 HybridGaussianFactorGraph> {
    \n-
    47 public:
    \n-\n-\n-
    50 Base;
    \n-
    51 typedef boost::shared_ptr<This> shared_ptr;
    \n-
    52 typedef boost::weak_ptr<This> weak_ptr;
    \n-\n-
    54 HybridBayesTreeClique(const boost::shared_ptr<HybridConditional>& conditional)
    \n-
    55 : Base(conditional) {}
    \n-
    57 HybridBayesTreeClique(const HybridBayesTreeClique& clique) : Base(clique) {}
    \n-
    58
    \n-
    59 virtual ~HybridBayesTreeClique() {}
    \n-
    60};
    \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-
    62/* ************************************************************************* */
    \n-
    \n-
    64class GTSAM_EXPORT HybridBayesTree : public BayesTree<HybridBayesTreeClique> {
    \n-
    65 private:
    \n-\n+
    64 template <class DERIVEDCONDITIONAL>
    \n+
    \n+\n+
    66 : Base(graph) {}
    \n+
    \n
    67
    \n-
    68 public:
    \n-
    69 typedef HybridBayesTree This;
    \n-
    70 typedef boost::shared_ptr<This> shared_ptr;
    \n-
    71
    \n-
    74
    \n-
    75 HybridBayesTree() = default;
    \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 bool equals(const This& other, double tol = 1e-9) const;
    \n+
    78 virtual ~GaussianBayesNet() = default;
    \n
    79
    \n-
    87 GaussianBayesTree choose(const DiscreteValues& assignment) const;
    \n-
    88
    \n-
    96 HybridValues optimize() const;
    \n-
    97
    \n-
    105 VectorValues optimize(const DiscreteValues& assignment) const;
    \n-
    106
    \n-
    112 void prune(const size_t maxNumberLeaves);
    \n-
    113
    \n-
    115
    \n-
    116 private:
    \n-
    118 friend class boost::serialization::access;
    \n-
    119 template <class ARCHIVE>
    \n-
    120 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
    \n-
    121 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
    \n-
    122 }
    \n-
    123};
    \n-
    \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-
    126template <>
    \n-
    127struct traits<HybridBayesTree> : public Testable<HybridBayesTree> {};
    \n-
    128
    \n-
    139template <>
    \n-
    \n-\n-
    141 public:
    \n-\n-
    143 typedef HybridConditional Base;
    \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-
    145 boost::shared_ptr<CliqueType> clique;
    \n-
    146
    \n-
    \n-
    152 BayesTreeOrphanWrapper(const boost::shared_ptr<CliqueType>& clique)
    \n-
    153 : clique(clique) {
    \n-
    154 // Store parent keys in our base type factor so that eliminating those
    \n-
    155 // parent keys will pull this subtree into the elimination.
    \n-
    156 this->keys_.assign(clique->conditional()->beginParents(),
    \n-
    157 clique->conditional()->endParents());
    \n-
    158 this->discreteKeys_.assign(clique->conditional()->discreteKeys().begin(),
    \n-
    159 clique->conditional()->discreteKeys().end());
    \n-
    160 }
    \n-
    \n-
    161
    \n-
    \n-
    163 void print(
    \n-
    164 const std::string& s = "",
    \n-
    165 const KeyFormatter& formatter = DefaultKeyFormatter) const override {
    \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-
    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+
    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+
    Factor Graph Base Class.
    \n+
    Bayes network.
    \n+
    Conditional Gaussian Base class.
    \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
    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-
    A clique in a HybridBayesTree which is a HybridConditional internally.
    Definition HybridBayesTree.h:46
    \n-
    HybridBayesTreeClique(const boost::shared_ptr< HybridConditional > &conditional)
    Copy constructor.
    Definition HybridBayesTree.h:54
    \n-
    A Bayes tree representing a Hybrid density.
    Definition HybridBayesTree.h:64
    \n-
    HybridBayesTree()=default
    Default constructor, creates an empty Bayes tree.
    \n-
    BayesTreeOrphanWrapper(const boost::shared_ptr< CliqueType > &clique)
    Construct a new Bayes Tree Orphan Wrapper object.
    Definition HybridBayesTree.h:152
    \n-
    void print(const std::string &s="", const KeyFormatter &formatter=DefaultKeyFormatter) const override
    print utility
    Definition HybridBayesTree.h:163
    \n-
    Hybrid Conditional Density.
    Definition HybridConditional.h:62
    \n-
    HybridValues represents a collection of DiscreteValues and VectorValues.
    Definition HybridValues.h:38
    \n-
    Bayes tree.
    Definition BayesTree.h:67
    \n-
    Definition BayesTree.h:276
    \n-
    This is the base class for BayesTree cliques.
    Definition BayesTreeCliqueBase.h:50
    \n-
    A Bayes tree representing a Gaussian density.
    Definition GaussianBayesTree.h:52
    \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-
    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,156 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-HybridBayesTree.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-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_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\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/_\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#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/_\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-28\n-29#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_\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-31namespace _\bg_\bt_\bs_\ba_\bm {\n-32\n-33// Forward declarations\n-34class HybridConditional;\n-35class _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs;\n-36\n-37/* *************************************************************************\n-*/\n-_\b4_\b4class GTSAM_EXPORT _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be\n-45 : public _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be {\n-47 public:\n-48 typedef _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be _\bT_\bh_\bi_\bs;\n-49 typedef _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b<_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\b,\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>\n-50 _\bB_\ba_\bs_\be;\n-51 typedef boost::shared_ptr shared_ptr;\n-52 typedef boost::weak_ptr weak_ptr;\n-53 _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be() {}\n-_\b5_\b4 _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be(const boost::shared_ptr&\n-conditional)\n-55 : _\bB_\ba_\bs_\be(conditional) {}\n-57 _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be(const _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be& clique) : Base(clique) {}\n-58\n-59 virtual ~HybridBayesTreeClique() {}\n-60};\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-62/* *************************************************************************\n-*/\n-_\b6_\b4class GTSAM_EXPORT _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be : public _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-{\n-65 private:\n-66 typedef _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\b> _\bB_\ba_\bs_\be;\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-68 public:\n-69 typedef _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n-70 typedef boost::shared_ptr shared_ptr;\n-71\n-74\n-_\b7_\b5 _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be() = default;\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-78 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs& other, double tol = 1e-9) const;\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-87 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be choose(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& assignment) const;\n-88\n-96 _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be() const;\n-97\n-105 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& assignment) const;\n-106\n-112 void prune(const size_t maxNumberLeaves);\n-113\n-115\n-116 private:\n-_\b1_\b1_\b8 friend class boost::serialization::access;\n-119 template \n-120 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n-121 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-122 }\n-123};\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-126template <>\n-_\b1_\b2_\b7struct _\bt_\br_\ba_\bi_\bt_\bs<_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-128\n-139template <>\n-_\b1_\b4_\b0class _\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_\bC_\bl_\bi_\bq_\bu_\be> : public\n-_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl {\n-141 public:\n-142 typedef _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be _\bC_\bl_\bi_\bq_\bu_\be_\bT_\by_\bp_\be;\n-143 typedef _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bB_\ba_\bs_\be;\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-145 boost::shared_ptr clique;\n-146\n-_\b1_\b5_\b2 _\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-153 : clique(clique) {\n-154 // Store parent keys in our base type factor so that eliminating those\n-155 // parent keys will pull this subtree into the elimination.\n-156 this->keys_.assign(clique->conditional()->beginParents(),\n-157 clique->conditional()->endParents());\n-158 this->discreteKeys_.assign(clique->conditional()->discreteKeys().begin(),\n-159 clique->conditional()->discreteKeys().end());\n-160 }\n-161\n-_\b1_\b6_\b3 void _\bp_\br_\bi_\bn_\bt(\n-164 const std::string& s = \"\",\n-165 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override {\n-166 clique->print(s + \"stored clique\", formatter);\n-167 }\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_\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+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+_\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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@@ -149,60 +165,64 @@\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:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be\n-A clique in a HybridBayesTree which is a HybridConditional internally.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridBayesTree.h:46\n-_\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_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be\n-HybridBayesTreeClique(const boost::shared_ptr< HybridConditional >\n-&conditional)\n-Copy constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridBayesTree.h:54\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_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-HybridBayesTree()=default\n-Default constructor, creates an empty Bayes tree.\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 _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\b _\b>_\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 HybridBayesTree.h:152\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 _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\b _\b>_\b:_\b:_\bp_\br_\bi_\bn_\bt\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 utility\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridBayesTree.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\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_\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_\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_\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_\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\n-A Bayes tree representing a Gaussian density.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesTree.h:52\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-_\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_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\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/a00518_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01205_source.html", "comments": ["Files 6% 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/HybridFactorGraph.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@@ -72,15 +72,15 @@\n
    \n
    \n
    \n \n \n
    \n \n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    HybridFactorGraph.h
    \n+
    TranslationFactor.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-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-\n-\n-
    24
    \n-
    25#include <boost/format.hpp>
    \n-
    26#include <unordered_map>
    \n+
    12#pragma once
    \n+
    13
    \n+\n+
    22#include <gtsam/geometry/Unit3.h>
    \n+\n+\n+
    25
    \n+
    26namespace gtsam {
    \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-
    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-
    48 public:
    \n-
    51
    \n-
    53 HybridFactorGraph() = default;
    \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-
    60 template <class DERIVEDFACTOR>
    \n-\n-
    62
    \n-
    66
    \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};
    \n-
    \n-
    81
    \n-
    82} // namespace gtsam
    \n-\n-
    Factor Graph Base Class.
    \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-\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+
    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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,116 +1,113 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-HybridFactorGraph.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, 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/_\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+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-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_\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-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+_\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-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-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-_\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+_\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:_\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_\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\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+ * _\bs_\bf_\bm\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/a00527_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00545_source.html", "comments": ["Files 1% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n \n
    \n
    MixtureFactor.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
    28
    \n
    29#include <algorithm>
    \n
    30#include <boost/format.hpp>
    \n
    31#include <cmath>
    \n
    32#include <limits>
    \n
    33#include <vector>
    \n@@ -330,19 +330,19 @@\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-
    Factor Graph consisting of non-linear factors.
    \n-
    Non-linear factor base classes.
    \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 \n
    An algebraic decision tree fixes the range of a DecisionTree to double.
    Definition AlgebraicDecisionTree.h:38
    \n \n@@ -377,13 +377,13 @@\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": "@@ -212,18 +212,18 @@\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_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph consisting of non-linear factors.\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"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00542_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00521_source.html", "comments": ["Files 2% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n \n
    \n
    HybridEliminationTree.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
    24namespace gtsam {
    \n
    25
    \n
    \n
    31class GTSAM_EXPORT HybridEliminationTree
    \n
    32 : public EliminationTree<HybridBayesNet, HybridGaussianFactorGraph> {
    \n
    33 private:
    \n@@ -145,17 +145,17 @@\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+
    Linearized Hybrid factor graph that uses type erasure.
    \n+
    A Bayes net of Gaussian Conditionals indexed by discrete keys.
    \n+\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@@ -163,13 +163,13 @@\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": "@@ -45,18 +45,18 @@\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+_\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 _\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:_\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"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00548_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01388_source.html", "comments": ["Files 7% 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/symbolic/SymbolicFactorGraph.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+
    SymbolicFactorGraph.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-\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/* ************************************************************************* */
    \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+\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+
    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+\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-\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+
    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-
    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-
    Factor graph with utilities for hybrid factors.
    \n-\n-
    A set of GaussianFactors, indexed by a set of discrete keys.
    \n-
    Variable elimination algorithms for factor graphs.
    \n-
    Factor Graph Base Class.
    \n-
    Variable ordering for the elimination algorithm.
    \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+
    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+
    Factor Graph Base Class.
    \n+
    Variable elimination algorithms for factor graphs.
    \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-
    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+
    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 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+
    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
    \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-HybridGaussianFactorGraph.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@@ -16,272 +16,294 @@\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-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+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-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+_\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+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 _\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_\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-_\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+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-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_\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-_\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+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 _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n Factor Graph Base Class.\n-_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n-Variable ordering for the elimination algorithm.\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+_\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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-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:_\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:_\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_\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\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+ * _\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 * Generated on Tue Jan 9 2024 05:51: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/a01208_source.html", "comments": ["Files 6% 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/HybridFactor.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@@ -72,15 +72,15 @@\n \n
    \n
    \n \n \n
    \n \n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    HybridFactor.h
    \n+
    SfmData.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/Testable.h>
    \n-\n-\n-\n-\n-\n+
    19#pragma once
    \n+
    20
    \n+\n+\n+\n+\n+
    25#include <gtsam/sfm/SfmTrack.h>
    \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+
    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-
    \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-
    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-
    118
    \n-
    120 bool isDiscrete() const { return isDiscrete_; }
    \n-
    121
    \n-
    123 bool isContinuous() const { return isContinuous_; }
    \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-
    133
    \n-
    135 const KeyVector &continuousKeys() const { return continuousKeys_; }
    \n-
    136
    \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+
    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-
    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+
    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-
    152// HybridFactor
    \n+
    149
    \n+
    151template <>
    \n+
    152struct traits<SfmData> : public Testable<SfmData> {};
    \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-
    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+
    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+
    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
    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+
    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-
    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 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-
    Definition Factor.h:68
    \n-
    the error.
    \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,213 +1,238 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-HybridFactor.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, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, 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+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-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+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-_\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-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-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-_\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+_\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+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-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+_\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// 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_\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+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 _\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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\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:_\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_\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- * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bs_\bf_\bm\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/a00563_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00884_source.html", "comments": ["Files 10% 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/GaussianMixtureFactor.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@@ -72,15 +72,15 @@\n
    \n
    \n
    \n \n \n
    \n \n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    GaussianMixtureFactor.h
    \n+
    KalmanFilter.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-\n-\n-\n-\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-
    32class HybridValues;
    \n-
    33class DiscreteValues;
    \n-
    34class VectorValues;
    \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+
    \n+
    41class GTSAM_EXPORT KalmanFilter {
    \n+
    42
    \n+
    43public:
    \n+
    44
    \n+
    \n+\n+
    50 QR, CHOLESKY
    \n+
    51 };
    \n+
    \n
    52
    \n-
    53 using sharedFactor = boost::shared_ptr<GaussianFactor>;
    \n-
    54
    \n-\n+
    56 typedef GaussianDensity::shared_ptr State;
    \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+
    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+
    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-
    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+
    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+
    Linear Factor Graph where all factors are Gaussians.
    \n+
    A Gaussian Density.
    \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-
    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+
    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+
    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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,191 +1,167 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GaussianMixtureFactor.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 6 * Authors: Frank Dellaert, 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+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-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-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+_\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-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+_\b5_\b6 typedef GaussianDensity::shared_ptr _\bS_\bt_\ba_\bt_\be;\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+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+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-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-_\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+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_\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_\bD_\be_\bn_\bs_\bi_\bt_\by_\b._\bh\n+A Gaussian Density.\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:_\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:_\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:_\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\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+ * _\bl_\bi_\bn_\be_\ba_\br\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/a00566.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00266.html", "comments": ["Files 12% 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/HybridFactor.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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n \n \n
    \n \n-
    HybridFactor.cpp File Reference
    \n+Classes |\n+Namespaces
    \n+
    DiscreteLookupDAG.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::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-\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+
    Date
    January, 2022
    \n+
    Author
    Frank dellaert
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,30 +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-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+_\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-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+ 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- _\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+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-_\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+N\bNa\bam\bme\bes\bsp\bpa\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+ January, 2022\n Author\n- Fan Jiang\n+ Frank dellaert\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+ * _\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 * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00581.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00143.html", "comments": ["Files 17% 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/Key.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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n \n \n
    \n \n-
    Key.h File Reference
    \n+Functions |\n+Variables
    \n+
    serializationTestHelpers.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-\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+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\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-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+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-
    Author
    Richard Roberts
    \n+
    Author
    Alex Cunningham
    \n
    \n-Alex Cunningham
    \n-
    Date
    Feb 20, 2012
    \n-
    Author
    Richard Roberts
    \n-
    Date
    Feb 20, 2012
    \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,72 +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 | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Key.h File Reference\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-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+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- 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+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- 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+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- 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+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 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+ Feb 7, 2012\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_\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 * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00581_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00719_source.html", "comments": ["Files 9% 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/Key.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/BinaryJacobianFactor.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-
    Key.h
    \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-
    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-
    127
    \n-
    128
    \n-
    129
    \n-
    130
    \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-
    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-
    Typedefs for easier changing of types.
    \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+
    21#pragma once
    \n+
    22
    \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+
    \n+
    36 BinaryJacobianFactor(Key key1, const Eigen::Matrix<double, M, N1>& A1,
    \n+
    37 Key key2, const Eigen::Matrix<double, M, N2>& A2,
    \n+
    38 const Eigen::Matrix<double, M, 1>& b, //
    \n+
    39 const SharedDiagonal& model = SharedDiagonal()) :
    \n+
    40 JacobianFactor(key1, A1, key2, A2, b, model) {
    \n+
    41 }
    \n+
    \n+
    42
    \n+
    43 inline Key key1() const {
    \n+
    44 return keys_[0];
    \n+
    45 }
    \n+
    46 inline Key key2() const {
    \n+
    47 return keys_[1];
    \n+
    48 }
    \n+
    49
    \n+
    50 // Fixed-size matrix update
    \n+
    \n+
    51 void updateHessian(const KeyVector& infoKeys,
    \n+
    52 SymmetricBlockMatrix* info) const override {
    \n+
    53 gttic(updateHessian_BinaryJacobianFactor);
    \n+
    54 // Whiten the factor if it has a noise model
    \n+
    55 const SharedDiagonal& model = get_model();
    \n+
    56 if (model && !model->isUnit()) {
    \n+
    57 if (model->isConstrained())
    \n+
    58 throw std::invalid_argument(
    \n+
    59 "BinaryJacobianFactor::updateHessian: cannot update information with "
    \n+
    60 "constrained noise model");
    \n+
    61 BinaryJacobianFactor whitenedFactor(key1(), model->Whiten(getA(begin())),
    \n+
    62 key2(), model->Whiten(getA(end())), model->whiten(getb()));
    \n+
    63 whitenedFactor.updateHessian(infoKeys, info);
    \n+
    64 } else {
    \n+
    65 // First build an array of slots
    \n+
    66 DenseIndex slot1 = Slot(infoKeys, key1());
    \n+
    67 DenseIndex slot2 = Slot(infoKeys, key2());
    \n+
    68 DenseIndex slotB = info->nBlocks() - 1;
    \n+
    69
    \n+
    70 const Matrix& Ab = Ab_.matrix();
    \n+
    71 Eigen::Block<const Matrix, M, N1> A1(Ab, 0, 0);
    \n+
    72 Eigen::Block<const Matrix, M, N2> A2(Ab, 0, N1);
    \n+
    73 Eigen::Block<const Matrix, M, 1> b(Ab, 0, N1 + N2);
    \n+
    74
    \n+
    75 // We perform I += A'*A to the upper triangle
    \n+
    76 info->diagonalBlock(slot1).rankUpdate(A1.transpose());
    \n+
    77 info->updateOffDiagonalBlock(slot1, slot2, A1.transpose() * A2);
    \n+
    78 info->updateOffDiagonalBlock(slot1, slotB, A1.transpose() * b);
    \n+
    79 info->diagonalBlock(slot2).rankUpdate(A2.transpose());
    \n+
    80 info->updateOffDiagonalBlock(slot2, slotB, A2.transpose() * b);
    \n+
    81 info->updateDiagonalBlock(slotB, b.transpose() * b);
    \n+
    82 }
    \n+
    83 }
    \n+
    \n+
    84};
    \n+
    \n+
    85
    \n+
    86template<int M, int N1, int N2>
    \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+
    Timing utilities.
    \n+
    Access to matrices via blocks of pre-defined sizes.
    \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 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+
    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-
    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+
    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+
    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+
    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 Matrix & matrix() const
    Access to full matrix (including any portions excluded by rowStart(), rowEnd(), and firstBlock())
    Definition VerticalBlockMatrix.h:188
    \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+
    const_iterator end() const
    Iterator at end of involved variable keys.
    Definition Factor.h:146
    \n+
    A binary JacobianFactor specialization that uses fixed matrix math for speed.
    Definition BinaryJacobianFactor.h:33
    \n+
    BinaryJacobianFactor(Key key1, const Eigen::Matrix< double, M, N1 > &A1, Key key2, const Eigen::Matrix< double, M, N2 > &A2, const Eigen::Matrix< double, M, 1 > &b, const SharedDiagonal &model=SharedDiagonal())
    Constructor.
    Definition BinaryJacobianFactor.h:36
    \n+
    void updateHessian(const KeyVector &infoKeys, SymmetricBlockMatrix *info) const override
    Update an information matrix by adding the information corresponding to this factor (used internally ...
    Definition BinaryJacobianFactor.h:51
    \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+
    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", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,187 +1,186 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Key.h\n+BinaryJacobianFactor.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_\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-_\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-127\n-128\n-129\n-130\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-_\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_\by_\bp_\be_\bs_\b._\bh\n-Typedefs for easier changing of types.\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+21#pragma once\n+22\n+23#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+24#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+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh>\n+26\n+27namespace _\bg_\bt_\bs_\ba_\bm {\n+28\n+32template\n+_\b3_\b3struct _\bB_\bi_\bn_\ba_\br_\by_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br: _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br {\n+34\n+_\b3_\b6 _\bB_\bi_\bn_\ba_\br_\by_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by key1, const Eigen::Matrix& A1,\n+37 _\bK_\be_\by key2, const Eigen::Matrix& A2,\n+38 const Eigen::Matrix& b, //\n+39 const SharedDiagonal& model = SharedDiagonal()) :\n+40 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(key1, A1, key2, A2, b, model) {\n+41 }\n+42\n+43 inline _\bK_\be_\by key1() const {\n+44 return _\bk_\be_\by_\bs_\b_[0];\n+45 }\n+46 inline _\bK_\be_\by key2() const {\n+47 return _\bk_\be_\by_\bs_\b_[1];\n+48 }\n+49\n+50 // Fixed-size matrix update\n+_\b5_\b1 void _\bu_\bp_\bd_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& infoKeys,\n+52 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx* info) const override {\n+53 gttic(updateHessian_BinaryJacobianFactor);\n+54 // Whiten the factor if it has a noise model\n+55 const SharedDiagonal& model = _\bg_\be_\bt_\b__\bm_\bo_\bd_\be_\bl();\n+56 if (model && !model->isUnit()) {\n+57 if (model->isConstrained())\n+58 throw std::invalid_argument(\n+59 \"BinaryJacobianFactor::updateHessian: cannot update information with \"\n+60 \"constrained noise model\");\n+61 _\bB_\bi_\bn_\ba_\br_\by_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br whitenedFactor(key1(), model->Whiten(_\bg_\be_\bt_\bA(_\bb_\be_\bg_\bi_\bn())),\n+62 key2(), model->Whiten(_\bg_\be_\bt_\bA(_\be_\bn_\bd())), model->whiten(_\bg_\be_\bt_\bb()));\n+63 whitenedFactor._\bu_\bp_\bd_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn(infoKeys, info);\n+64 } else {\n+65 // First build an array of slots\n+66 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx slot1 = Slot(infoKeys, key1());\n+67 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx slot2 = Slot(infoKeys, key2());\n+68 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx slotB = info->_\bn_\bB_\bl_\bo_\bc_\bk_\bs() - 1;\n+69\n+70 const Matrix& Ab = Ab_._\bm_\ba_\bt_\br_\bi_\bx();\n+71 Eigen::Block A1(Ab, 0, 0);\n+72 Eigen::Block A2(Ab, 0, N1);\n+73 Eigen::Block b(Ab, 0, N1 + N2);\n+74\n+75 // We perform I += A'*A to the upper triangle\n+76 info->_\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(slot1).rankUpdate(A1.transpose());\n+77 info->_\bu_\bp_\bd_\ba_\bt_\be_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(slot1, slot2, A1.transpose() * A2);\n+78 info->_\bu_\bp_\bd_\ba_\bt_\be_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(slot1, slotB, A1.transpose() * b);\n+79 info->_\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(slot2).rankUpdate(A2.transpose());\n+80 info->_\bu_\bp_\bd_\ba_\bt_\be_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(slot2, slotB, A2.transpose() * b);\n+81 info->_\bu_\bp_\bd_\ba_\bt_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(slotB, b.transpose() * b);\n+82 }\n+83 }\n+84};\n+85\n+86template\n+_\b8_\b7struct _\bt_\br_\ba_\bi_\bt_\bs<_\bB_\bi_\bn_\ba_\br_\by_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br > : _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be<\n+88 BinaryJacobianFactor > {\n+89};\n+90\n+91} //namespace gtsam\n+_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n+Timing utilities.\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+_\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:_\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:_\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:_\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:_\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:_\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:_\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:_\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_\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:_\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:_\bB_\bi_\bn_\ba_\br_\by_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+A binary JacobianFactor specialization that uses fixed matrix math for speed.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BinaryJacobianFactor.h:33\n+_\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:_\bB_\bi_\bn_\ba_\br_\by_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+BinaryJacobianFactor(Key key1, const Eigen::Matrix< double, M, N1 > &A1, Key\n+key2, const Eigen::Matrix< double, M, N2 > &A2, const Eigen::Matrix< double, M,\n+1 > &b, const SharedDiagonal &model=SharedDiagonal())\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BinaryJacobianFactor.h:36\n+_\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:_\bu_\bp_\bd_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn\n+void updateHessian(const KeyVector &infoKeys, 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 BinaryJacobianFactor.h:51\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_\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:_\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\n- * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bK_\be_\by_\b._\bh\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 * Generated on Tue Jan 9 2024 05:51: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/a01277.html", "comments": ["Files 10% 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/EliminateableFactorGraph.h 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-
    EliminateableFactorGraph.h File Reference
    \n+
    RegularImplicitSchurFactor.h File Reference
    \n
    \n
    \n \n-

    Variable elimination algorithms for factor graphs. \n+

    A subclass of GaussianFactor specialized to structureless SFM. \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::EliminationTraits< GRAPH >
     Traits class for eliminateable factor graphs, specifies the types that result from elimination, etc. More...
    class  gtsam::RegularImplicitSchurFactor< CAMERA >
     RegularImplicitSchurFactor. More...
     
    class  gtsam::EliminateableFactorGraph< FACTOR_GRAPH >
     EliminateableFactorGraph is a base class for factor graphs that contains elimination algorithms. More...
    struct  gtsam::traits< RegularImplicitSchurFactor< CAMERA > >
     
    \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+

    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,32 +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-EliminateableFactorGraph.h File Reference\n-Variable elimination algorithms for factor graphs. _\bM_\bo_\br_\be_\b._\b._\b.\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-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+ 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- 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+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 *\b**\b**\b**\b**\b* D\bDe\bet\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+A subclass of GaussianFactor specialized to structureless SFM.\n Author\n- Richard Roberts\n- Date\n- Apr 21, 2013\n+ Frank Dellaert\n+ Luca Carlone\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+ * _\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/a00602_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00887_source.html", "comments": ["Files 22% 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/EliminateableFactorGraph.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/HessianFactor.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-
    EliminateableFactorGraph.h
    \n+
    HessianFactor.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 <boost/shared_ptr.hpp>
    \n-
    22#include <functional>
    \n-
    23#include <boost/variant.hpp>
    \n-
    24#include <boost/optional.hpp>
    \n+\n+\n+\n+\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-
    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+
    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+
    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+
    180
    \n+
    \n+
    182 explicit HessianFactor(const GaussianFactorGraph& factors)
    \n+
    183 : HessianFactor(factors, Scatter(factors)) {}
    \n+
    \n+
    184
    \n+
    186 ~HessianFactor() override {}
    \n+
    187
    \n+
    \n+\n+
    190 return boost::make_shared<HessianFactor>(*this); }
    \n+
    \n+
    191
    \n+
    193 void print(const std::string& s = "",
    \n+
    194 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
    \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+
    197 bool equals(const GaussianFactor& lf, double tol = 1e-9) const override;
    \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+
    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+
    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+
    290
    \n+
    294 Matrix information() const override;
    \n+
    295
    \n+
    297 void hessianDiagonalAdd(VectorValues& d) const override;
    \n+
    298
    \n+
    300 using Base::hessianDiagonal;
    \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
    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+
    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+
    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+
    416
    \n+
    417} // \\ namespace gtsam
    \n+
    418
    \n+
    419
    \n+\n+
    A thin wrapper around std::vector that uses a custom allocator.
    \n+
    Access to matrices via blocks of pre-defined sizes.
    \n+
    Maps global variable indices to slot indices.
    \n+
    A factor with a quadratic error function - a Gaussian.
    \n+
    Contains the HessianFactor class, a general quadratic factor.
    \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
    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+
    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+
    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
    \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-EliminateableFactorGraph.h\n+HessianFactor.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,332 +16,398 @@\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+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 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-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+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+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+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+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+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-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+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+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+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+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+290\n+294 Matrix information() const override;\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+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 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-_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh\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+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+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+_\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+_\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+_\bS_\bc_\ba_\bt_\bt_\be_\br_\b._\bh\n+Maps global variable indices to slot indices.\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-_\bi_\bn_\bl_\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_\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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-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:_\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:_\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+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 * _\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+ * _\bl_\bi_\bn_\be_\ba_\br\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/a00611_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00320_source.html", "comments": ["Files 8% 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/geometry/PinholePose.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+
    PinholePose.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// \\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+
    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+
    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-
    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 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+
    \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+
    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-
    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+
    \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-
    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+
    166 return result;
    \n+
    167 }
    \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-
    \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+
    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-
    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+
    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-
    260 HasDerivedValueType<CONTAINER> push_back(const CONTAINER& container) {
    \n-
    261 push_back(container.begin(), container.end());
    \n-
    262 }
    \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-
    263
    \n-
    268 template <class FACTOR_OR_CONTAINER>
    \n+
    267
    \n
    \n-
    269 void add(const FACTOR_OR_CONTAINER& factorOrContainer) {
    \n-
    270 push_back(factorOrContainer);
    \n+
    269 PinholePose(const Pose3& pose, const boost::shared_ptr<CALIBRATION>& K) :
    \n+
    270 Base(pose), K_(K) {
    \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+
    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-
    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+
    \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-
    362 sharedFactor back() const { return factors_.back(); }
    \n+
    361 ~PinholePose() override {
    \n+
    362 }
    \n
    363
    \n-
    365 double error(const HybridValues &values) const;
    \n-
    366
    \n-
    370
    \n-
    372 iterator begin() { return factors_.begin(); }
    \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-
    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+
    \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-
    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+
    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} // namespace gtsam
    \n+
    446// end of class PinholePose
    \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-
    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+
    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-
    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-\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+
    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+
    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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,591 +1,662 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-FactorGraph.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-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+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+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-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 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+_\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+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_\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+_\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-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+_\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-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\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-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+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-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+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-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+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-_\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+_\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-_\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+361 _\b~_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be() override {\n+362 }\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+_\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_\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+_\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-_\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+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-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-_\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-_\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+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:_\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:_\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-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+_\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:_\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 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 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\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+ * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\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/a00620_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00584_source.html", "comments": ["Files 0% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n \n
    \n
    JunctionTree-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-\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-
    The junction tree.
    \n-
    Collects factorgraph fragments defined on variable clusters, arranged in a tree.
    \n-\n-\n+
    The junction tree.
    \n+
    Collects factorgraph fragments defined on variable clusters, arranged in a 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@@ -278,13 +278,13 @@\n
    boost::shared_ptr< This > shared_ptr
    Typedef to the conditional base class.
    Definition SymbolicConditional.h:44
    \n
    boost::shared_ptr< This > shared_ptr
    Overriding the shared_ptr typedef.
    Definition SymbolicFactor.h:48
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -160,16 +160,16 @@\n 154\n 155} // namespace gtsam\n _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n The junction tree.\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-_\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+_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b-_\bi_\bn_\bs_\bt_\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/a00626_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00689_source.html", "comments": ["Files 10% 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/inference-inst.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@@ -72,15 +72,15 @@\n
    \n
    \n
    \n \n \n
    \n \n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    inference-inst.h
    \n+
    MetisIndex.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-
    9
    \n-
    10* -------------------------------------------------------------------------- */
    \n-
    11
    \n-
    20#pragma once
    \n-
    21
    \n-
    22#include <boost/shared_ptr.hpp>
    \n-
    23#include <utility>
    \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
    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-\n-
    A thin wrapper around std::vector that uses a custom allocator.
    \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// 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+
    Timing utilities.
    \n+
    Typedefs for easier changing of types.
    \n+
    Factor Graph Base Class.
    \n+\n+\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+
    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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,127 +1,117 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-inference-inst.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+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n+6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n-8* See LICENSE for the license information\n-9\n-10* -------------------------------------------------------------------------\n+8 * See LICENSE for the license information\n+9 * -------------------------------------------------------------------------\n - */\n-11\n-20#pragma once\n-21\n-22#include \n-23#include \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#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+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 89 }\n-90\n-91 }\n-92}\n-_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\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-_\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+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_\bi_\bm_\bi_\bn_\bg_\b._\bh\n+Timing utilities.\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+_\bK_\be_\by_\b._\bh\n+_\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx_\b-_\bi_\bn_\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:_\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\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\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._\bh\n * Generated on Tue Jan 9 2024 05:51: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/a00608.html", "comments": ["Files 5% 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/JunctionTree.h 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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n-
    JunctionTree.h File Reference
    \n+
    EliminationTree.h File Reference
    \n
    \n
    \n \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 \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...
    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-

    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,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-JunctionTree.h File Reference\n-The junction tree. _\bM_\bo_\br_\be_\b._\b._\b.\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:_\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+ 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-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._\bh\n * Generated on Tue Jan 9 2024 05:51: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/a00800_source.html", "comments": ["Files 8% 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/a00650.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00617.html", "comments": ["Files 4% 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.cpp 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@@ -67,15 +67,15 @@\n
    \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n \n
    \n \n-
    VariableIndex.cpp File Reference
    \n+
    Ordering.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-
    Author
    Richard Roberts
    \n-
    Date
    March 26, 2013
    \n+
    Author
    Richard Roberts
    \n+
    \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,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-VariableIndex.cpp File Reference\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 Author\n Richard Roberts\n+ Andrew Melim\n Date\n- March 26, 2013\n+ Sep 2, 2010\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+ * _\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/a00656.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01304.html", "comments": ["Files 5% 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/slam/InitializePose3.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+
    InitializePose3.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+
    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,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-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+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 *\b**\b**\b**\b**\b* D\bDe\bet\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+ Luca Carlone\n+ Frank Dellaert\n Date\n- March 26, 2013\n+ August, 2014\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+ * _\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 * Generated on Tue Jan 9 2024 05:51: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/a01007.html", "comments": ["Files 8% 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/BayesTreeCliqueBase.h 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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n \n
    \n \n-
    BayesTreeCliqueBase.h File Reference
    \n+Namespaces |\n+Variables
    \n+
    WhiteNoiseFactor.h File Reference
    \n \n
    \n \n-

    Base class for cliques of a BayesTree. \n+

    Binary white noise factor. \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::BayesTreeCliqueBase< DERIVED, FACTORGRAPH >
     This is the base class for BayesTree cliques. More...
    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-

    Base class for cliques of a BayesTree.

    \n-
    Author
    Richard Roberts and Frank Dellaert
    \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,25 +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-BayesTreeCliqueBase.h File Reference\n-Base class for cliques of a 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 | _\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:_\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+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-Base class for cliques of a BayesTree.\n+Binary white noise factor.\n Author\n- Richard Roberts and Frank Dellaert\n+ Chris Beall\n+ Frank Dellaert\n+ Date\n+ September 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_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\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/a00692.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01016.html", "comments": ["Files 4% 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/DotWriter.cpp 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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n \n
    \n \n-
    DotWriter.cpp File Reference
    \n+
    ISAM2Params.cpp File Reference
    \n
    \n
    \n \n-

    Graphviz formatting for factor graphs. \n+

    Parameters for iSAM 2. \n More...

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

    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,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-DotWriter.cpp File Reference\n-Graphviz formatting for factor graphs. _\bM_\bo_\br_\be_\b._\b._\b.\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 *\b**\b**\b**\b**\b* D\bDe\bet\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+Parameters for iSAM 2.\n Author\n- Frank Dellaert\n- Date\n- December, 2021\n+ Michael Kaess, Richard Roberts, Frank Dellaert\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+ * _\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 * Generated on Tue Jan 9 2024 05:51: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/a00419.html", "comments": ["Files 15% 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.cpp 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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n \n
    \n \n-
    HessianFactor.cpp File Reference
    \n+
    SO3.cpp File Reference
    \n
    \n
    \n+\n+

    3*3 matrix representation of SO(3) \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 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+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-
    Author
    Richard Roberts
    \n-
    Date
    Dec 8, 2010
    \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,36 +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 | _\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+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 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+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- 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+ 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- Richard Roberts\n+ Frank Dellaert\n+ Luca Carlone\n+ Duy Nguyen Ta\n Date\n- Dec 8, 2010\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- * _\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+ * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\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/a00731_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00062_source.html", "comments": ["Files 7% 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/LossFunctions.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-
    LossFunctions.h
    \n+
    Lie.h
    \n
    \n
    \n-
    1
    \n-
    2/* ----------------------------------------------------------------------------
    \n-
    3
    \n-
    4 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
    \n-
    5 * Atlanta, Georgia 30332-0415
    \n-
    6 * All Rights Reserved
    \n-
    7 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
    \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-
    24#include <gtsam/dllexport.h>
    \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 <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-
    31#include <boost/serialization/singleton.hpp>
    \n-
    32
    \n-
    33namespace gtsam {
    \n-
    34namespace noiseModel {
    \n-
    35// clang-format off
    \n-
    54// clang-format on
    \n-
    55namespace mEstimator {
    \n-
    56
    \n-
    \n-
    63class GTSAM_EXPORT Base {
    \n-
    64 public:
    \n-
    67 enum ReweightScheme { Scalar, Block };
    \n-
    68 typedef boost::shared_ptr<Base> shared_ptr;
    \n-
    69
    \n-
    70 protected:
    \n-\n-
    73
    \n-
    74 public:
    \n-
    75 Base(const ReweightScheme reweight = Block) : reweight_(reweight) {}
    \n-
    76 virtual ~Base() {}
    \n-
    77
    \n-
    79 ReweightScheme reweightScheme() const { return reweight_; }
    \n-
    80
    \n-
    94 virtual double loss(double distance) const { return 0; }
    \n-
    95
    \n-
    106 virtual double weight(double distance) const = 0;
    \n-
    107
    \n-
    108 virtual void print(const std::string &s) const = 0;
    \n-
    109 virtual bool equals(const Base &expected, double tol = 1e-8) const = 0;
    \n-
    110
    \n-
    111 double sqrtWeight(double distance) const { return std::sqrt(weight(distance)); }
    \n-
    112
    \n-
    115 Vector weight(const Vector &error) const;
    \n-
    116
    \n-
    118 Vector sqrtWeight(const Vector &error) const;
    \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+
    \n+
    116 static TangentVector LocalCoordinates(const Class& g) {
    \n+
    117 return Class::ChartAtOrigin::Local(g);
    \n+
    118 }
    \n+
    \n
    119
    \n-
    122 void reweight(Vector &error) const;
    \n-
    123 void reweight(std::vector<Matrix> &A, Vector &error) const;
    \n-
    124 void reweight(Matrix &A, Vector &error) const;
    \n-
    125 void reweight(Matrix &A1, Matrix &A2, Vector &error) const;
    \n-
    126 void reweight(Matrix &A1, Matrix &A2, Matrix &A3, Vector &error) const;
    \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_NVP(reweight_);
    \n-
    134 }
    \n-
    135};
    \n-
    \n-
    136
    \n-
    \n-
    146class GTSAM_EXPORT Null : public Base {
    \n-
    147 public:
    \n-
    148 typedef boost::shared_ptr<Null> shared_ptr;
    \n-
    149
    \n-
    150 Null(const ReweightScheme reweight = Block) : Base(reweight) {}
    \n-
    151 ~Null() override {}
    \n-
    152 double weight(double /*error*/) const override { return 1.0; }
    \n-
    153 double loss(double distance) const override { return 0.5 * distance * distance; }
    \n-
    154 void print(const std::string &s) const override;
    \n-
    155 bool equals(const Base & /*expected*/, double /*tol*/) const override { return true; }
    \n-
    156 static shared_ptr Create();
    \n-
    157
    \n-
    158 private:
    \n-
    160 friend class boost::serialization::access;
    \n-
    161 template <class ARCHIVE>
    \n-
    162 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
    \n-
    163 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
    \n-
    164 }
    \n-
    165};
    \n-
    \n-
    166
    \n-
    \n-
    175class GTSAM_EXPORT Fair : public Base {
    \n-
    176 protected:
    \n-
    177 double c_;
    \n-
    178
    \n-
    179 public:
    \n-
    180 typedef boost::shared_ptr<Fair> shared_ptr;
    \n-
    181
    \n-
    182 Fair(double c = 1.3998, const ReweightScheme reweight = Block);
    \n-
    183 double weight(double distance) const override;
    \n-
    184 double loss(double distance) const override;
    \n-
    185 void print(const std::string &s) const override;
    \n-
    186 bool equals(const Base &expected, double tol = 1e-8) const override;
    \n-
    187 static shared_ptr Create(double c, const ReweightScheme reweight = Block);
    \n-
    188 double modelParameter() const { return c_; }
    \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+
    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 private:
    \n-
    192 friend class boost::serialization::access;
    \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(c_);
    \n-
    197 }
    \n-
    198};
    \n-
    \n-
    199
    \n-
    \n-
    208class GTSAM_EXPORT Huber : public Base {
    \n-
    209 protected:
    \n-
    210 double k_;
    \n-
    211
    \n-
    212 public:
    \n-
    213 typedef boost::shared_ptr<Huber> shared_ptr;
    \n-
    214
    \n-
    215 Huber(double k = 1.345, const ReweightScheme reweight = Block);
    \n-
    216 double weight(double distance) const override;
    \n-
    217 double loss(double distance) const override;
    \n-
    218 void print(const std::string &s) const override;
    \n-
    219 bool equals(const Base &expected, double tol = 1e-8) const override;
    \n-
    220 static shared_ptr Create(double k, const ReweightScheme reweight = Block);
    \n-
    221 double modelParameter() const { return k_; }
    \n-
    222
    \n-
    223 private:
    \n-
    225 friend class boost::serialization::access;
    \n-
    226 template <class ARCHIVE>
    \n-
    227 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
    \n-
    228 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
    \n-
    229 ar &BOOST_SERIALIZATION_NVP(k_);
    \n-
    230 }
    \n-
    231};
    \n-
    \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-
    \n-
    246class GTSAM_EXPORT Cauchy : public Base {
    \n-
    247 protected:
    \n-
    248 double k_, ksquared_;
    \n-
    249
    \n-
    250 public:
    \n-
    251 typedef boost::shared_ptr<Cauchy> shared_ptr;
    \n-
    252
    \n-
    253 Cauchy(double k = 0.1, const ReweightScheme reweight = Block);
    \n-
    254 double weight(double distance) const override;
    \n-
    255 double loss(double distance) const override;
    \n-
    256 void print(const std::string &s) const override;
    \n-
    257 bool equals(const Base &expected, double tol = 1e-8) const override;
    \n-
    258 static shared_ptr Create(double k, const ReweightScheme reweight = Block);
    \n-
    259 double modelParameter() const { return k_; }
    \n-
    260
    \n-
    261 private:
    \n-
    263 friend class boost::serialization::access;
    \n-
    264 template <class ARCHIVE>
    \n-
    265 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
    \n-
    266 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
    \n-
    267 ar &BOOST_SERIALIZATION_NVP(k_);
    \n-
    268 ar &BOOST_SERIALIZATION_NVP(ksquared_);
    \n-
    269 }
    \n-
    270};
    \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-
    \n-
    280class GTSAM_EXPORT Tukey : public Base {
    \n-
    281 protected:
    \n-
    282 double c_, csquared_;
    \n-
    283
    \n-
    284 public:
    \n-
    285 typedef boost::shared_ptr<Tukey> shared_ptr;
    \n-
    286
    \n-
    287 Tukey(double c = 4.6851, const ReweightScheme reweight = Block);
    \n-
    288 double weight(double distance) const override;
    \n-
    289 double loss(double distance) const override;
    \n-
    290 void print(const std::string &s) const override;
    \n-
    291 bool equals(const Base &expected, double tol = 1e-8) const override;
    \n-
    292 static shared_ptr Create(double k, const ReweightScheme reweight = Block);
    \n-
    293 double modelParameter() const { return c_; }
    \n-
    294
    \n-
    295 private:
    \n-
    297 friend class boost::serialization::access;
    \n-
    298 template <class ARCHIVE>
    \n-
    299 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
    \n-
    300 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
    \n-
    301 ar &BOOST_SERIALIZATION_NVP(c_);
    \n-
    302 }
    \n-
    303};
    \n-
    \n-
    304
    \n-
    \n-
    313class GTSAM_EXPORT Welsch : public Base {
    \n-
    314 protected:
    \n-
    315 double c_, csquared_;
    \n-
    316
    \n-
    317 public:
    \n-
    318 typedef boost::shared_ptr<Welsch> shared_ptr;
    \n-
    319
    \n-
    320 Welsch(double c = 2.9846, const ReweightScheme reweight = Block);
    \n-
    321 double weight(double distance) const override;
    \n-
    322 double loss(double distance) const override;
    \n-
    323 void print(const std::string &s) const override;
    \n-
    324 bool equals(const Base &expected, double tol = 1e-8) const override;
    \n-
    325 static shared_ptr Create(double k, const ReweightScheme reweight = Block);
    \n-
    326 double modelParameter() const { return c_; }
    \n-
    327
    \n-
    328 private:
    \n-
    330 friend class boost::serialization::access;
    \n-
    331 template <class ARCHIVE>
    \n-
    332 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
    \n-
    333 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
    \n-
    334 ar &BOOST_SERIALIZATION_NVP(c_);
    \n-
    335 ar &BOOST_SERIALIZATION_NVP(csquared_);
    \n-
    336 }
    \n-
    337};
    \n-
    \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+
    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-
    \n-
    349class GTSAM_EXPORT GemanMcClure : public Base {
    \n-
    350 public:
    \n-
    351 typedef boost::shared_ptr<GemanMcClure> shared_ptr;
    \n-
    352
    \n-
    353 GemanMcClure(double c = 1.0, const ReweightScheme reweight = Block);
    \n-
    354 ~GemanMcClure() override {}
    \n-
    355 double weight(double distance) const override;
    \n-
    356 double loss(double distance) const override;
    \n-
    357 void print(const std::string &s) const override;
    \n-
    358 bool equals(const Base &expected, double tol = 1e-8) const override;
    \n-
    359 static shared_ptr Create(double k, const ReweightScheme reweight = Block);
    \n-
    360 double modelParameter() const { return c_; }
    \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 protected:
    \n-
    363 double c_;
    \n-
    364
    \n-
    365 private:
    \n-
    367 friend class boost::serialization::access;
    \n-
    368 template <class ARCHIVE>
    \n-
    369 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
    \n-
    370 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
    \n-
    371 ar &BOOST_SERIALIZATION_NVP(c_);
    \n-
    372 }
    \n-
    373};
    \n-
    \n-
    374
    \n-
    \n-
    387class GTSAM_EXPORT DCS : public Base {
    \n-
    388 public:
    \n-
    389 typedef boost::shared_ptr<DCS> shared_ptr;
    \n-
    390
    \n-
    391 DCS(double c = 1.0, const ReweightScheme reweight = Block);
    \n-
    392 ~DCS() override {}
    \n-
    393 double weight(double distance) const override;
    \n-
    394 double loss(double distance) const override;
    \n-
    395 void print(const std::string &s) const override;
    \n-
    396 bool equals(const Base &expected, double tol = 1e-8) const override;
    \n-
    397 static shared_ptr Create(double k, const ReweightScheme reweight = Block);
    \n-
    398 double modelParameter() const { return c_; }
    \n-
    399
    \n-
    400 protected:
    \n-
    401 double c_;
    \n-
    402
    \n-
    403 private:
    \n-
    405 friend class boost::serialization::access;
    \n-
    406 template <class ARCHIVE>
    \n-
    407 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
    \n-
    408 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
    \n-
    409 ar &BOOST_SERIALIZATION_NVP(c_);
    \n-
    410 }
    \n-
    411};
    \n-
    \n-
    412
    \n-
    \n-
    426class GTSAM_EXPORT L2WithDeadZone : public Base {
    \n-
    427 protected:
    \n-
    428 double k_;
    \n-
    429
    \n-
    430 public:
    \n-
    431 typedef boost::shared_ptr<L2WithDeadZone> shared_ptr;
    \n-
    432
    \n-
    433 L2WithDeadZone(double k = 1.0, const ReweightScheme reweight = Block);
    \n-
    434 double weight(double distance) const override;
    \n-
    435 double loss(double distance) const override;
    \n-
    436 void print(const std::string &s) const override;
    \n-
    437 bool equals(const Base &expected, double tol = 1e-8) const override;
    \n-
    438 static shared_ptr Create(double k, const ReweightScheme reweight = Block);
    \n-
    439 double modelParameter() const { return k_; }
    \n-
    440
    \n-
    441 private:
    \n-
    443 friend class boost::serialization::access;
    \n-
    444 template <class ARCHIVE>
    \n-
    445 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
    \n-
    446 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
    \n-
    447 ar &BOOST_SERIALIZATION_NVP(k_);
    \n-
    448 }
    \n-
    449};
    \n-
    \n-
    450
    \n-
    451} // namespace mEstimator
    \n-
    452} // namespace noiseModel
    \n-
    453} // namespace gtsam
    \n-
    Concept check for values that can be used in unit tests.
    \n-
    typedef and functions to augment Eigen's MatrixXd
    \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+
    Concept check class for variable types with Group properties.
    \n+
    Base class and basic functions for Manifold types.
    \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-
    virtual double weight(double distance) const =0
    This method is responsible for returning the weight function for a given amount of error.
    \n-
    ReweightScheme
    the rows can be weighted independently according to the error or uniformly with the norm of the right...
    Definition LossFunctions.h:67
    \n-
    "Null" robust loss function, equivalent to a Gaussian pdf noise model, or plain least-squares (non-ro...
    Definition LossFunctions.h:146
    \n-
    double weight(double) const override
    This method is responsible for returning the weight function for a given amount of error.
    Definition LossFunctions.h:152
    \n-
    double loss(double distance) const override
    This method is responsible for returning the total penalty for a given amount of error.
    Definition LossFunctions.h:153
    \n-
    Implementation of the "Fair" robust error model (Zhang97ivc)
    Definition LossFunctions.h:175
    \n-
    The "Huber" robust error model (Zhang97ivc).
    Definition LossFunctions.h:208
    \n-
    Implementation of the "Cauchy" robust error model (Lee2013IROS).
    Definition LossFunctions.h:246
    \n-
    Implementation of the "Tukey" robust error model (Zhang97ivc).
    Definition LossFunctions.h:280
    \n-
    Implementation of the "Welsch" robust error model (Zhang97ivc).
    Definition LossFunctions.h:313
    \n-
    Implementation of the "Geman-McClure" robust error model (Zhang97ivc).
    Definition LossFunctions.h:349
    \n-
    DCS implements the Dynamic Covariance Scaling robust error model from the paper Robust Map Optimizati...
    Definition LossFunctions.h:387
    \n-
    L2WithDeadZone implements a standard L2 penalty, but with a dead zone of width 2*k,...
    Definition LossFunctions.h:426
    \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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,385 +1,440 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-LossFunctions.h\n-1\n-2/* ---------------------------------------------------------------------------\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-3\n-4 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n-5 * Atlanta, Georgia 30332-0415\n-6 * All Rights Reserved\n-7 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n-8\n-9 * See LICENSE for the license information\n-10\n-11 * -------------------------------------------------------------------------\n+2\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n+6 * Authors: Frank Dellaert, 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-12\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+11\n+24#pragma once\n 25\n-26#include \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-34namespace noiseModel {\n-35// clang-format off\n-54// clang-format on\n-55namespace mEstimator {\n-56\n-_\b6_\b3class GTSAM_EXPORT _\bB_\ba_\bs_\be {\n-64 public:\n-_\b6_\b7 enum _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be { Scalar, Block };\n-68 typedef boost::shared_ptr shared_ptr;\n-69\n-70 protected:\n-_\b7_\b2 _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be _\br_\be_\bw_\be_\bi_\bg_\bh_\bt_\b_;\n-73\n-74 public:\n-75 _\bB_\ba_\bs_\be(const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block) : reweight_(reweight) {}\n-76 virtual _\b~_\bB_\ba_\bs_\be() {}\n-77\n-_\b7_\b9 _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be _\br_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be() const { return reweight_; }\n-80\n-_\b9_\b4 virtual double _\bl_\bo_\bs_\bs(double distance) const { return 0; }\n-95\n-_\b1_\b0_\b6 virtual double _\bw_\be_\bi_\bg_\bh_\bt(double distance) const = 0;\n-107\n-108 virtual void _\bp_\br_\bi_\bn_\bt(const std::string &s) const = 0;\n-109 virtual bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be &expected, double tol = 1e-8) const = 0;\n-110\n-111 double sqrtWeight(double distance) const { return std::sqrt(weight\n-(distance)); }\n-112\n-115 Vector weight(const Vector &error) const;\n-116\n-118 Vector sqrtWeight(const Vector &error) const;\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+_\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-122 void reweight(Vector &error) const;\n-123 void reweight(std::vector &A, Vector &error) const;\n-124 void reweight(Matrix &A, Vector &error) const;\n-125 void reweight(Matrix &A1, Matrix &A2, Vector &error) const;\n-126 void reweight(Matrix &A1, Matrix &A2, Matrix &A3, Vector &error) const;\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_NVP(reweight_);\n-134 }\n-135};\n-136\n-_\b1_\b4_\b6class GTSAM_EXPORT _\bN_\bu_\bl_\bl : public _\bB_\ba_\bs_\be {\n-147 public:\n-148 typedef boost::shared_ptr shared_ptr;\n-149\n-150 _\bN_\bu_\bl_\bl(const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block) : _\bB_\ba_\bs_\be(reweight) {}\n-151 _\b~_\bN_\bu_\bl_\bl() override {}\n-_\b1_\b5_\b2 double _\bw_\be_\bi_\bg_\bh_\bt(double /*error*/) const override { return 1.0; }\n-_\b1_\b5_\b3 double _\bl_\bo_\bs_\bs(double distance) const override { return 0.5 * distance *\n-distance; }\n-154 void _\bp_\br_\bi_\bn_\bt(const std::string &s) const override;\n-155 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be & /*expected*/, double /*tol*/) const override\n-{ return true; }\n-156 static shared_ptr Create();\n-157\n-158 private:\n-_\b1_\b6_\b0 friend class boost::serialization::access;\n-161 template \n-162 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n-163 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-164 }\n-165};\n-166\n-_\b1_\b7_\b5class GTSAM_EXPORT _\bF_\ba_\bi_\br : public _\bB_\ba_\bs_\be {\n-176 protected:\n-177 double c_;\n-178\n-179 public:\n-180 typedef boost::shared_ptr shared_ptr;\n-181\n-182 _\bF_\ba_\bi_\br(double c = 1.3998, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n-183 double weight(double distance) const override;\n-184 double loss(double distance) const override;\n-185 void _\bp_\br_\bi_\bn_\bt(const std::string &s) const override;\n-186 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be &expected, double tol = 1e-8) const override;\n-187 static shared_ptr Create(double c, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n-188 double modelParameter() const { return c_; }\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+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 private:\n-_\b1_\b9_\b2 friend class boost::serialization::access;\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(c_);\n-197 }\n-198};\n-199\n-_\b2_\b0_\b8class GTSAM_EXPORT _\bH_\bu_\bb_\be_\br : public _\bB_\ba_\bs_\be {\n-209 protected:\n-210 double k_;\n-211\n-212 public:\n-213 typedef boost::shared_ptr shared_ptr;\n-214\n-215 _\bH_\bu_\bb_\be_\br(double k = 1.345, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n-216 double weight(double distance) const override;\n-217 double loss(double distance) const override;\n-218 void _\bp_\br_\bi_\bn_\bt(const std::string &s) const override;\n-219 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be &expected, double tol = 1e-8) const override;\n-220 static shared_ptr Create(double k, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n-221 double modelParameter() const { return k_; }\n-222\n-223 private:\n-_\b2_\b2_\b5 friend class boost::serialization::access;\n-226 template \n-227 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n-228 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-229 ar &BOOST_SERIALIZATION_NVP(k_);\n-230 }\n-231};\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-_\b2_\b4_\b6class GTSAM_EXPORT _\bC_\ba_\bu_\bc_\bh_\by : public _\bB_\ba_\bs_\be {\n-247 protected:\n-248 double k_, ksquared_;\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-250 public:\n-251 typedef boost::shared_ptr shared_ptr;\n-252\n-253 _\bC_\ba_\bu_\bc_\bh_\by(double k = 0.1, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n-254 double weight(double distance) const override;\n-255 double loss(double distance) const override;\n-256 void _\bp_\br_\bi_\bn_\bt(const std::string &s) const override;\n-257 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be &expected, double tol = 1e-8) const override;\n-258 static shared_ptr Create(double k, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n-259 double modelParameter() const { return k_; }\n-260\n-261 private:\n-_\b2_\b6_\b3 friend class boost::serialization::access;\n-264 template \n-265 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n-266 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-267 ar &BOOST_SERIALIZATION_NVP(k_);\n-268 ar &BOOST_SERIALIZATION_NVP(ksquared_);\n-269 }\n-270};\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-_\b2_\b8_\b0class GTSAM_EXPORT _\bT_\bu_\bk_\be_\by : public _\bB_\ba_\bs_\be {\n-281 protected:\n-282 double c_, csquared_;\n-283\n-284 public:\n-285 typedef boost::shared_ptr shared_ptr;\n-286\n-287 _\bT_\bu_\bk_\be_\by(double c = 4.6851, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n-288 double weight(double distance) const override;\n-289 double loss(double distance) const override;\n-290 void _\bp_\br_\bi_\bn_\bt(const std::string &s) const override;\n-291 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be &expected, double tol = 1e-8) const override;\n-292 static shared_ptr Create(double k, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n-293 double modelParameter() const { return c_; }\n-294\n-295 private:\n-_\b2_\b9_\b7 friend class boost::serialization::access;\n-298 template \n-299 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n-300 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-301 ar &BOOST_SERIALIZATION_NVP(c_);\n-302 }\n-303};\n-304\n-_\b3_\b1_\b3class GTSAM_EXPORT _\bW_\be_\bl_\bs_\bc_\bh : public _\bB_\ba_\bs_\be {\n-314 protected:\n-315 double c_, csquared_;\n-316\n-317 public:\n-318 typedef boost::shared_ptr shared_ptr;\n-319\n-320 _\bW_\be_\bl_\bs_\bc_\bh(double c = 2.9846, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n-321 double weight(double distance) const override;\n-322 double loss(double distance) const override;\n-323 void _\bp_\br_\bi_\bn_\bt(const std::string &s) const override;\n-324 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be &expected, double tol = 1e-8) const override;\n-325 static shared_ptr Create(double k, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n-326 double modelParameter() const { return c_; }\n-327\n-328 private:\n-_\b3_\b3_\b0 friend class boost::serialization::access;\n-331 template \n-332 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n-333 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-334 ar &BOOST_SERIALIZATION_NVP(c_);\n-335 ar &BOOST_SERIALIZATION_NVP(csquared_);\n-336 }\n-337};\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-_\b3_\b4_\b9class GTSAM_EXPORT _\bG_\be_\bm_\ba_\bn_\bM_\bc_\bC_\bl_\bu_\br_\be : public _\bB_\ba_\bs_\be {\n-350 public:\n-351 typedef boost::shared_ptr shared_ptr;\n-352\n-353 _\bG_\be_\bm_\ba_\bn_\bM_\bc_\bC_\bl_\bu_\br_\be(double c = 1.0, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n-354 _\b~_\bG_\be_\bm_\ba_\bn_\bM_\bc_\bC_\bl_\bu_\br_\be() override {}\n-355 double weight(double distance) const override;\n-356 double loss(double distance) const override;\n-357 void _\bp_\br_\bi_\bn_\bt(const std::string &s) const override;\n-358 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be &expected, double tol = 1e-8) const override;\n-359 static shared_ptr Create(double k, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n-360 double modelParameter() const { return c_; }\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 protected:\n-363 double c_;\n-364\n-365 private:\n-_\b3_\b6_\b7 friend class boost::serialization::access;\n-368 template \n-369 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n-370 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-371 ar &BOOST_SERIALIZATION_NVP(c_);\n-372 }\n-373};\n-374\n-_\b3_\b8_\b7class GTSAM_EXPORT _\bD_\bC_\bS : public _\bB_\ba_\bs_\be {\n-388 public:\n-389 typedef boost::shared_ptr shared_ptr;\n-390\n-391 _\bD_\bC_\bS(double c = 1.0, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n-392 _\b~_\bD_\bC_\bS() override {}\n-393 double weight(double distance) const override;\n-394 double loss(double distance) const override;\n-395 void _\bp_\br_\bi_\bn_\bt(const std::string &s) const override;\n-396 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be &expected, double tol = 1e-8) const override;\n-397 static shared_ptr Create(double k, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n-398 double modelParameter() const { return c_; }\n-399\n-400 protected:\n-401 double c_;\n-402\n-403 private:\n-_\b4_\b0_\b5 friend class boost::serialization::access;\n-406 template \n-407 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n-408 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-409 ar &BOOST_SERIALIZATION_NVP(c_);\n-410 }\n-411};\n-412\n-_\b4_\b2_\b6class GTSAM_EXPORT _\bL_\b2_\bW_\bi_\bt_\bh_\bD_\be_\ba_\bd_\bZ_\bo_\bn_\be : public _\bB_\ba_\bs_\be {\n-427 protected:\n-428 double k_;\n-429\n-430 public:\n-431 typedef boost::shared_ptr shared_ptr;\n-432\n-433 _\bL_\b2_\bW_\bi_\bt_\bh_\bD_\be_\ba_\bd_\bZ_\bo_\bn_\be(double k = 1.0, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n-434 double weight(double distance) const override;\n-435 double loss(double distance) const override;\n-436 void _\bp_\br_\bi_\bn_\bt(const std::string &s) const override;\n-437 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be &expected, double tol = 1e-8) const override;\n-438 static shared_ptr Create(double k, const _\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be reweight = Block);\n-439 double modelParameter() const { return k_; }\n-440\n-441 private:\n-_\b4_\b4_\b3 friend class boost::serialization::access;\n-444 template \n-445 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n-446 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-447 ar &BOOST_SERIALIZATION_NVP(k_);\n-448 }\n-449};\n-450\n-451} // namespace mEstimator\n-452} // namespace noiseModel\n-453} // 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-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\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+_\bG_\br_\bo_\bu_\bp_\b._\bh\n+Concept check class for variable types with Group properties.\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:_\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_\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:_\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:_\bm_\bE_\bs_\bt_\bi_\bm_\ba_\bt_\bo_\br_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bl_\bo_\bs_\bs\n-virtual double loss(double distance) const\n-This method is responsible for returning the total penalty for a given amount\n-of error.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:94\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_\b:_\b:_\br_\be_\bw_\be_\bi_\bg_\bh_\bt_\b_\n-ReweightScheme reweight_\n-Strategy for reweighting.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:72\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_\b:_\b:_\br_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be\n-ReweightScheme reweightScheme() const\n-Returns the reweight scheme, as explained in ReweightScheme.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:79\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_\b:_\b:_\bw_\be_\bi_\bg_\bh_\bt\n-virtual double weight(double distance) const =0\n-This method is responsible for returning the weight function for a given amount\n-of error.\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_\b:_\b:_\bR_\be_\bw_\be_\bi_\bg_\bh_\bt_\bS_\bc_\bh_\be_\bm_\be\n-ReweightScheme\n-the rows can be weighted independently according to the error or uniformly with\n-the norm of the right...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:67\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:_\bN_\bu_\bl_\bl\n-\"Null\" robust loss function, equivalent to a Gaussian pdf noise model, or plain\n-least-squares (non-ro...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:146\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:_\bN_\bu_\bl_\bl_\b:_\b:_\bw_\be_\bi_\bg_\bh_\bt\n-double weight(double) const override\n-This method is responsible for returning the weight function for a given amount\n-of error.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:152\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:_\bN_\bu_\bl_\bl_\b:_\b:_\bl_\bo_\bs_\bs\n-double loss(double distance) const override\n-This method is responsible for returning the total penalty for a given amount\n-of error.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:153\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:_\bF_\ba_\bi_\br\n-Implementation of the \"Fair\" robust error model (Zhang97ivc)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:175\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:_\bH_\bu_\bb_\be_\br\n-The \"Huber\" robust error model (Zhang97ivc).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:208\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:_\bC_\ba_\bu_\bc_\bh_\by\n-Implementation of the \"Cauchy\" robust error model (Lee2013IROS).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:246\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:_\bT_\bu_\bk_\be_\by\n-Implementation of the \"Tukey\" robust error model (Zhang97ivc).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:280\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:_\bW_\be_\bl_\bs_\bc_\bh\n-Implementation of the \"Welsch\" robust error model (Zhang97ivc).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:313\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:_\bG_\be_\bm_\ba_\bn_\bM_\bc_\bC_\bl_\bu_\br_\be\n-Implementation of the \"Geman-McClure\" robust error model (Zhang97ivc).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:349\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:_\bD_\bC_\bS\n-DCS implements the Dynamic Covariance Scaling robust error model from the paper\n-Robust Map Optimizati...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:387\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:_\bL_\b2_\bW_\bi_\bt_\bh_\bD_\be_\ba_\bd_\bZ_\bo_\bn_\be\n-L2WithDeadZone implements a standard L2 penalty, but with a dead zone of width\n-2*k,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:426\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\n- * _\bl_\bi_\bn_\be_\ba_\br\n- * L\bLo\bos\bss\bsF\bFu\bun\bnc\bct\bti\bio\bon\bns\bs.\b.h\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/a00734.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00545.html", "comments": ["Files 8% 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/GaussianBayesTree.cpp 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@@ -67,15 +67,15 @@\n
    \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n \n \n
    \n \n-
    GaussianBayesTree.cpp File Reference
    \n+Classes |\n+Namespaces
    \n+
    MixtureFactor.h File Reference
    \n \n
    \n \n-

    Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree. \n+

    Nonlinear Mixture factor of continuous and discrete. \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-Functions

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

    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,27 +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-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\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 N\bNa\bam\bme\bes\bsp\bpa\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-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\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+Nonlinear Mixture factor of continuous and discrete.\n Author\n- Frank Dellaert\n- Richard Roberts\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+ December 2021\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+ * _\bh_\by_\bb_\br_\bi_\bd\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/a00737.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00824.html", "comments": ["Files 3% 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/GaussianConditional-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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n \n
    \n \n-
    GaussianConditional-inl.h File Reference
    \n+
    GaussianConditional.cpp File Reference
    \n
    \n
    \n \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

    Conditional Gaussian Base class.

    \n-
    Author
    Christian Potthast
    \n+
    Author
    Christian Potthast, 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\n-GaussianConditional-inl.h File Reference\n+GaussianConditional.cpp 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 Conditional Gaussian Base class.\n Author\n- Christian Potthast\n+ Christian Potthast, 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+ * _\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/a01028.html", "comments": ["Files 4% 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/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-
    SubgraphPreconditioner.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-
    Date
    Dec 31, 2009
    \n-
    Author
    Frank Dellaert, Yong-Dian Jian
    \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,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-SubgraphPreconditioner.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- Date\n- Dec 31, 2009\n+Graphviz formatter for NonlinearFactorGraph.\n Author\n- Frank Dellaert, Yong-Dian Jian\n+ Frank Dellaert\n+ Date\n+ December, 2021\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+ * _\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/a00755_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01037_source.html", "comments": ["Files 12% 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/NoiseModel.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@@ -72,15 +72,15 @@\n \n
    \n
    \n \n \n
    \n \n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    NoiseModel.h
    \n+
    Values.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/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-
    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+
    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+
    \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-
    82 virtual Vector sigmas() const;
    \n+
    81 // The member to store the values, see just above
    \n+
    82 KeyValueMap values_;
    \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 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+
    84 public:
    \n+
    85
    \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-
    \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+
    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-
    180
    \n-
    181 public:
    \n+
    181 size_t size() const { return values_.size(); }
    \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+
    184 bool empty() const { return values_.empty(); }
    \n+
    185
    \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+
    \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-
    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+
    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 virtual Matrix R() const { return thisR();}
    \n+
    255 void update(Key j, const Value& val);
    \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+
    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-
    \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+
    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-
    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+
    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-
    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+
    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-
    404 Constrained(const Vector& sigmas = Z_1x1);
    \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-
    406 ~Constrained() override {}
    \n-
    407
    \n-
    409 bool isConstrained() const override { return true; }
    \n-
    410
    \n-
    412 bool constrained(size_t i) const;
    \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 const Vector& mu() const { return mu_; }
    \n-
    416
    \n-
    421 static shared_ptr MixedSigmas(const Vector& mu, const Vector& sigmas);
    \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-
    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+
    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-
    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+\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-
    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+
    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-
    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+
    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 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+
    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-
    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-
    Concept check for values that can be used in unit tests.
    \n-
    typedef and functions to augment Eigen's MatrixXd
    \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
    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+
    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+
    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-
    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+
    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,805 +1,668 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-NoiseModel.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-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-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+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_\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-82 virtual Vector sigmas() const;\n+81 // The member to store the values, see just above\n+82 KeyValueMap values_;\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+84 public:\n+85\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-_\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+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-180\n-181 public:\n+_\b1_\b8_\b1 size_t _\bs_\bi_\bz_\be() const { return values_.size(); }\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+_\b1_\b8_\b4 bool _\be_\bm_\bp_\bt_\by() const { return values_.empty(); }\n+185\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+_\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-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+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-_\b2_\b5_\b5 virtual Matrix _\bR() const { return thisR();}\n+255 void update(_\bK_\be_\by j, const _\bV_\ba_\bl_\bu_\be& val);\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+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-_\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+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-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+_\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-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+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-404 _\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd(const Vector& sigmas = Z_1x1);\n+399 template \n+400 class Filtered;\n+401\n+403 template \n+404 class ConstFiltered;\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+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-_\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+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-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+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-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+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-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+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 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+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-_\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-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\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:_\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:_\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:_\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:_\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:_\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- * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\n+ * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\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/a00758.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00776.html", "comments": ["Files 5% 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/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-
    PowerMethod.h File Reference
    \n+Namespaces |\n+Typedefs
    \n+
    AcceleratedPowerMethod.h File Reference
    \n \n
    \n \n-

    Power method for fast eigenvalue and eigenvector computation. \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 Classes

    class  gtsam::PowerMethod< Operator >
     Compute maximum Eigenpair with power method. More...
    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-

    Power method for fast eigenvalue and eigenvector computation.

    \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,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-PowerMethod.h File Reference\n-Power method for fast eigenvalue and eigenvector computation. _\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:_\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:_\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-Power method for fast eigenvalue and eigenvector computation.\n+accelerated power method for fast eigenvalue and eigenvector computation\n Date\n Sept 2020\n Author\n Jing Wu\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+ * _\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/a00761_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00149_source.html", "comments": ["Files 25% 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/base/OptionalJacobian.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+
    OptionalJacobian.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+
    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-
    48 GTSAM_EXPORT std::pair<boost::shared_ptr<GaussianConditional>, boost::shared_ptr<JacobianFactor> >
    \n-
    49 EliminateQR(const GaussianFactorGraph& factors, const Ordering& keys);
    \n+
    43public:
    \n+
    44
    \n+
    47 typedef Eigen::Matrix<double, Rows, Cols> Jacobian;
    \n+
    48
    \n+
    49private:
    \n
    50
    \n-
    \n-
    90 class GTSAM_EXPORT JacobianFactor : public GaussianFactor
    \n-
    91 {
    \n-
    92 public:
    \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-\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-
    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+
    \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-\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-
    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+
    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+
    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-
    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+
    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-
    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+
    \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+
    265
    \n+
    266} // namespace gtsam
    \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-\n-
    A factor with a quadratic error function - a Gaussian.
    \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-
    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+
    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": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,502 +1,321 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-JacobianFactor.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 <_\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+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-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+43public:\n+44\n+_\b4_\b7 typedef Eigen::Matrix _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn;\n+48\n+49private:\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+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_\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-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+_\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-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-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-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+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+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-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+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-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+_\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-_\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-_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\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_\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:_\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_\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- * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\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 * Generated on Tue Jan 9 2024 05:51: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/a00512_source.html", "comments": ["Files 8% 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/SparseEigen.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@@ -72,15 +72,15 @@\n \n
    \n
    \n \n \n
    \n \n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    SparseEigen.h
    \n+
    HybridSmoother.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-
    24#pragma once
    \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+\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+
    Linearized Hybrid factor graph that uses type erasure.
    \n+
    A Bayes net of Gaussian Conditionals indexed by discrete keys.
    \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+
    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-
    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,89 +1,88 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SparseEigen.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-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#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+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_\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_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n+A Bayes net of Gaussian Conditionals indexed by discrete keys.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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- * _\bS_\bp_\ba_\br_\bs_\be_\bE_\bi_\bg_\be_\bn_\b._\bh\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 * Generated on Tue Jan 9 2024 05:51: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_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00956_source.html", "comments": ["Files 8% 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/GaussianBayesTree.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/TangentPreintegration.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-
    GaussianBayesTree.h
    \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-
    20#pragma once
    \n+
    18#pragma once
    \n+
    19
    \n+\n
    21
    \n-\n-\n-\n-\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+
    22namespace gtsam {
    \n+
    23
    \n+
    \n+
    28class GTSAM_EXPORT TangentPreintegration : public PreintegrationBase {
    \n+
    29 protected:
    \n+
    30
    \n+\n+\n+\n+
    38
    \n+
    \n+\n+
    41 resetIntegration();
    \n+
    42 }
    \n
    \n+
    43
    \n+
    44public:
    \n
    47
    \n-
    48 /* ************************************************************************* */
    \n-
    \n-
    50 class GTSAM_EXPORT GaussianBayesTree :
    \n-
    51 public BayesTree<GaussianBayesTreeClique>
    \n-
    52 {
    \n-
    53 private:
    \n-\n+
    53 TangentPreintegration(const boost::shared_ptr<Params>& p,
    \n+\n
    55
    \n-
    56 public:
    \n-
    57 typedef GaussianBayesTree This;
    \n-
    58 typedef boost::shared_ptr<This> shared_ptr;
    \n+
    \n+\n+
    58 }
    \n+
    \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+
    61
    \n+
    65 void resetIntegration() override;
    \n+
    66
    \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+
    71 Vector3 deltaPij() const override { return preintegrated_.segment<3>(3); }
    \n+
    72 Vector3 deltaVij() const override { return preintegrated_.tail<3>(); }
    \n+
    73 Rot3 deltaRij() const override { return Rot3::Expmap(theta()); }
    \n+
    74 NavState deltaXij() const override { return NavState().retract(preintegrated_); }
    \n+
    75
    \n+
    76 const Vector9& preintegrated() const { return preintegrated_; }
    \n+
    77 Vector3 theta() const { return preintegrated_.head<3>(); }
    \n+
    78 const Matrix93& preintegrated_H_biasAcc() const { return preintegrated_H_biasAcc_; }
    \n+
    79 const Matrix93& preintegrated_H_biasOmega() const { return preintegrated_H_biasOmega_; }
    \n+
    80
    \n+
    83 bool equals(const TangentPreintegration& other, double tol) const;
    \n+
    85
    \n+
    88
    \n+
    89 // Update integrated vector on tangent manifold preintegrated with acceleration
    \n+
    90 // Static, functional version.
    \n+
    91 static Vector9 UpdatePreintegrated(const Vector3& a_body,
    \n+
    92 const Vector3& w_body, const double dt,
    \n+
    93 const Vector9& preintegrated,
    \n+
    94 OptionalJacobian<9, 9> A = boost::none,
    \n+
    95 OptionalJacobian<9, 3> B = boost::none,
    \n+
    96 OptionalJacobian<9, 3> C = boost::none);
    \n+
    97
    \n+
    102 void update(const Vector3& measuredAcc, const Vector3& measuredOmega,
    \n+
    103 const double dt, Matrix9* A, Matrix93* B, Matrix93* C) override;
    \n+
    104
    \n+
    108 Vector9 biasCorrectedDelta(const imuBias::ConstantBias& bias_i,
    \n+
    109 OptionalJacobian<9, 6> H = boost::none) const override;
    \n+
    110
    \n+
    111 // Compose the two pre-integrated 9D-vectors zeta01 and zeta02, with derivatives
    \n+
    112 static Vector9 Compose(const Vector9& zeta01, const Vector9& zeta12,
    \n+
    113 double deltaT12,
    \n+
    114 OptionalJacobian<9, 9> H1 = boost::none,
    \n+
    115 OptionalJacobian<9, 9> H2 = boost::none);
    \n+
    116
    \n+
    119 void mergeWith(const TangentPreintegration& pim, Matrix9* H1, Matrix9* H2);
    \n+
    121
    \n+
    \n+
    123 virtual boost::shared_ptr<TangentPreintegration> clone() const {
    \n+
    124 return boost::shared_ptr<TangentPreintegration>();
    \n+
    125 }
    \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-
    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+
    126
    \n+
    128
    \n+
    129private:
    \n+
    131 friend class boost::serialization::access;
    \n+
    132 template<class ARCHIVE>
    \n+
    133 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
    \n+
    134 namespace bs = ::boost::serialization;
    \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+
    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
    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+
    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+
    TangentPreintegration()
    Default constructor for serialization.
    Definition TangentPreintegration.h:40
    \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", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,146 +1,157 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GaussianBayesTree.h\n+TangentPreintegration.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/_\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_\bB_\ba_\bs_\be_\b._\bh>\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-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+22namespace _\bg_\bt_\bs_\ba_\bm {\n+23\n+_\b2_\b8class GTSAM_EXPORT _\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn : public _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be {\n+29 protected:\n+30\n+_\b3_\b5 Vector9 _\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\b_;\n+_\b3_\b6 Matrix93 _\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\b__\bH_\b__\bb_\bi_\ba_\bs_\bA_\bc_\bc_\b_;\n+_\b3_\b7 Matrix93 _\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\b__\bH_\b__\bb_\bi_\ba_\bs_\bO_\bm_\be_\bg_\ba_\b_;\n+38\n+_\b4_\b0 _\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn() {\n+41 resetIntegration();\n+42 }\n+43\n+44public:\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+53 _\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn(const boost::shared_ptr& p,\n+54 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 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+_\b5_\b7 _\b~_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn() override {\n+58 }\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+61\n+65 void resetIntegration() override;\n+66\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+71 Vector3 deltaPij() const override { return preintegrated_.segment<3>(3); }\n+72 Vector3 deltaVij() const override { return preintegrated_.tail<3>(); }\n+73 Rot3 deltaRij() const override { return Rot3::Expmap(theta()); }\n+74 NavState deltaXij() const override { return NavState().retract\n+(preintegrated_); }\n+75\n+76 const Vector9& preintegrated() const { return preintegrated_; }\n+77 Vector3 theta() const { return preintegrated_.head<3>(); }\n+78 const Matrix93& preintegrated_H_biasAcc() const { return\n+preintegrated_H_biasAcc_; }\n+79 const Matrix93& preintegrated_H_biasOmega() const { return\n+preintegrated_H_biasOmega_; }\n+80\n+83 bool equals(const TangentPreintegration& other, double tol) const;\n+85\n+88\n+89 // Update integrated vector on tangent manifold preintegrated with\n+acceleration\n+90 // Static, functional version.\n+91 static Vector9 UpdatePreintegrated(const Vector3& a_body,\n+92 const Vector3& w_body, const double dt,\n+93 const Vector9& preintegrated,\n+94 OptionalJacobian<9, 9> A = boost::none,\n+95 OptionalJacobian<9, 3> B = boost::none,\n+96 OptionalJacobian<9, 3> C = boost::none);\n+97\n+102 void update(const Vector3& measuredAcc, const Vector3& measuredOmega,\n+103 const double dt, Matrix9* A, Matrix93* B, Matrix93* C) override;\n+104\n+108 Vector9 biasCorrectedDelta(const imuBias::ConstantBias& bias_i,\n+109 OptionalJacobian<9, 6> H = boost::none) const override;\n+110\n+111 // Compose the two pre-integrated 9D-vectors zeta01 and zeta02, with\n+derivatives\n+112 static Vector9 Compose(const Vector9& zeta01, const Vector9& zeta12,\n+113 double deltaT12,\n+114 OptionalJacobian<9, 9> H1 = boost::none,\n+115 OptionalJacobian<9, 9> H2 = boost::none);\n+116\n+119 void mergeWith(const TangentPreintegration& pim, Matrix9* H1, Matrix9* H2);\n+121\n+_\b1_\b2_\b3 virtual boost::shared_ptr _\bc_\bl_\bo_\bn_\be() const {\n+124 return boost::shared_ptr();\n+125 }\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_\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+128\n+129private:\n+_\b1_\b3_\b1 friend class boost::serialization::access;\n+132 template\n+133 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+134 namespace bs = ::boost::serialization;\n+135 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be);\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+142 _\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+143};\n+144\n+145}\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_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\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:_\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:_\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_\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:_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn\n+Integrate on the 9D tangent space of the NavState manifold.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TangentPreintegration.h:28\n+_\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_\b:_\b:_\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\b__\bH_\b__\bb_\bi_\ba_\bs_\bO_\bm_\be_\bg_\ba_\b_\n+Matrix93 preintegrated_H_biasOmega_\n+Jacobian of preintegrated_ w.r.t. angular rate bias.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TangentPreintegration.h:37\n+_\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_\b:_\b:_\b~_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn\n+~TangentPreintegration() override\n+Virtual destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TangentPreintegration.h:57\n+_\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_\b:_\b:_\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\b_\n+Vector9 preintegrated_\n+Preintegrated navigation state, as a 9D vector on tangent space at frame i\n+Order is: theta,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TangentPreintegration.h:35\n+_\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_\b:_\b:_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn\n+TangentPreintegration()\n+Default constructor for serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TangentPreintegration.h:40\n+_\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_\b:_\b:_\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\b__\bH_\b__\bb_\bi_\ba_\bs_\bA_\bc_\bc_\b_\n+Matrix93 preintegrated_H_biasAcc_\n+Jacobian of preintegrated_ w.r.t. acceleration bias.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TangentPreintegration.h:36\n+_\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_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+virtual boost::shared_ptr< TangentPreintegration > clone() const\n+Dummy clone for MATLAB.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TangentPreintegration.h:123\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+ * _\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 * Generated on Tue Jan 9 2024 05:51: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/a00929.html", "comments": ["Files 7% 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 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@@ -67,15 +67,15 @@\n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n \n \n
    \n \n-
    GaussianDensity.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    ImuBias.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+\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-

    A Gaussian Density.

    \n-
    Author
    Frank Dellaert
    \n-
    Date
    Jan 21, 2012
    \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,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-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 | _\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-A Gaussian Density.\n- Author\n- Frank Dellaert\n Date\n- Jan 21, 2012\n+ Feb 2, 2012\n+ Author\n+ Vadim Indelman, Stephen Williams\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_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\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/a00785_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01382_source.html", "comments": ["Files 5% 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/symbolic/SymbolicFactor-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-
    GaussianDensity.h
    \n+
    SymbolicFactor-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-
    19// \\callgraph
    \n-
    20#pragma once
    \n-
    21
    \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-
    32 class GTSAM_EXPORT GaussianDensity : public GaussianConditional {
    \n-
    33
    \n-
    34 public:
    \n-
    35
    \n-
    36 typedef boost::shared_ptr<GaussianDensity> shared_ptr;
    \n-
    37
    \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-\n-\n-
    41 }
    \n-
    \n+
    39 EliminateSymbolic(const FactorGraph<FACTOR>& factors, const Ordering& keys)
    \n+
    40 {
    \n+
    41 gttic(EliminateSymbolic);
    \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-
    57
    \n-
    59 void print(const std::string& = "GaussianDensity",
    \n-
    60 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
    \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+
    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
    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+
    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-
    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+
    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,110 +1,120 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GaussianDensity.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// \\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+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-_\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-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+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-_\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-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-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+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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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_\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:_\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:_\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- * _\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_\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 * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00797_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00953_source.html", "comments": ["Files 11% 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/IterativeSolver.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-
    IterativeSolver.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-
    19#pragma once
    \n-
    20
    \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-
    30#include <map>
    \n-
    31
    \n-
    32namespace gtsam {
    \n-
    33
    \n-
    34// Forward declarations
    \n-
    35struct KeyInfoEntry;
    \n-
    36class KeyInfo;
    \n-
    37class GaussianFactorGraph;
    \n-
    38class Values;
    \n-
    39class VectorValues;
    \n-
    40
    \n-
    \n-\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+
    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-
    46public:
    \n-
    47
    \n-
    48 typedef boost::shared_ptr<IterativeOptimizationParameters> shared_ptr;
    \n-
    49 enum Verbosity {
    \n-
    50 SILENT = 0, COMPLEXITY, ERROR
    \n-
    51 } verbosity_;
    \n-
    52
    \n-
    53public:
    \n-
    54
    \n-
    55 IterativeOptimizationParameters(Verbosity v = SILENT) :
    \n-
    56 verbosity_(v) {
    \n-
    57 }
    \n-
    58
    \n-\n-
    60 }
    \n-
    61
    \n-
    62 /* utility */
    \n-
    63 inline Verbosity verbosity() const {
    \n-
    64 return verbosity_;
    \n-
    65 }
    \n-
    66 GTSAM_EXPORT std::string getVerbosity() const;
    \n-
    67 GTSAM_EXPORT void setVerbosity(const std::string &s);
    \n-
    68
    \n-
    69 /* matlab interface */
    \n-
    70 GTSAM_EXPORT void print() const;
    \n-
    71
    \n-
    72 /* virtual print function */
    \n-
    73 GTSAM_EXPORT virtual void print(std::ostream &os) const;
    \n-
    74
    \n-
    75 /* for serialization */
    \n-
    76 friend std::ostream& operator<<(std::ostream &os,
    \n-\n-
    78
    \n-
    79 GTSAM_EXPORT static Verbosity verbosityTranslator(const std::string &s);
    \n-
    80 GTSAM_EXPORT static std::string verbosityTranslator(Verbosity v);
    \n-
    81};
    \n-
    \n-
    82
    \n-
    \n-\n-
    87public:
    \n-
    88 typedef boost::shared_ptr<IterativeSolver> shared_ptr;
    \n-\n-
    90 }
    \n-
    91 virtual ~IterativeSolver() {
    \n-
    92 }
    \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+
    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+
    \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-
    94 /* interface to the nonlinear optimizer, without metadata, damping and initial estimate */
    \n-
    95 GTSAM_EXPORT VectorValues optimize(const GaussianFactorGraph &gfg,
    \n-
    96 boost::optional<const KeyInfo&> = boost::none,
    \n-
    97 boost::optional<const std::map<Key, Vector>&> lambda = boost::none);
    \n-
    98
    \n-
    99 /* interface to the nonlinear optimizer, without initial estimate */
    \n-
    100 GTSAM_EXPORT VectorValues optimize(const GaussianFactorGraph &gfg, const KeyInfo &keyInfo,
    \n-
    101 const std::map<Key, Vector> &lambda);
    \n-
    102
    \n-
    103 /* interface to the nonlinear optimizer that the subclasses have to implement */
    \n-
    104 virtual VectorValues optimize(const GaussianFactorGraph &gfg,
    \n-
    105 const KeyInfo &keyInfo, const std::map<Key, Vector> &lambda,
    \n-
    106 const VectorValues &initial) = 0;
    \n-
    107
    \n-
    108};
    \n-
    \n-
    109
    \n-
    \n-
    114struct GTSAM_EXPORT KeyInfoEntry {
    \n-
    115 size_t index, dim, start;
    \n-
    116 KeyInfoEntry() {
    \n-
    117 }
    \n-
    118 KeyInfoEntry(size_t idx, size_t d, Key start) :
    \n-
    119 index(idx), dim(d), start(start) {
    \n-
    120 }
    \n-
    121};
    \n-
    \n-
    122
    \n-
    \n-
    126class GTSAM_EXPORT KeyInfo: public std::map<Key, KeyInfoEntry> {
    \n-
    127
    \n-
    128public:
    \n-
    129
    \n-
    130 typedef std::map<Key, KeyInfoEntry> Base;
    \n-
    131
    \n-
    132protected:
    \n-
    133
    \n-
    134 Ordering ordering_;
    \n-
    135 size_t numCols_;
    \n-
    136
    \n-
    137 void initialize(const GaussianFactorGraph &fg);
    \n-
    138
    \n-
    139public:
    \n-
    140
    \n-
    \n-\n-
    143 numCols_(0) {
    \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-
    \n-
    145
    \n-
    147 KeyInfo(const GaussianFactorGraph &fg);
    \n-
    148
    \n-
    150 KeyInfo(const GaussianFactorGraph &fg, const Ordering &ordering);
    \n-
    151
    \n-
    \n-
    153 inline size_t numCols() const {
    \n-
    154 return numCols_;
    \n-
    155 }
    \n-
    \n-
    156
    \n-
    \n-
    158 inline const Ordering & ordering() const {
    \n-
    159 return ordering_;
    \n-
    160 }
    \n-
    \n-
    161
    \n-
    163 std::vector<size_t> colSpec() const;
    \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-
    166 VectorValues x0() const;
    \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+
    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-
    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-
    Base class for Iterative Solvers like SubgraphSolver.
    Definition IterativeSolver.h:86
    \n-
    Handy data structure for iterative solvers key to (index, dimension, start)
    Definition IterativeSolver.h:114
    \n-
    Handy data structure for iterative solvers.
    Definition IterativeSolver.h:126
    \n-
    const Ordering & ordering() const
    Return the ordering.
    Definition IterativeSolver.h:158
    \n-
    size_t numCols() const
    Return the total number of columns (scalar variables = sum of dimensions)
    Definition IterativeSolver.h:153
    \n-
    KeyInfo()
    Default Constructor.
    Definition IterativeSolver.h:142
    \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-
    In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
    \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,219 +1,245 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-IterativeSolver.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-19#pragma once\n-20\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\n-24#include \n-25#include \n-26#include \n-27\n-28#include \n-29#include \n-30#include \n-31\n-32namespace _\bg_\bt_\bs_\ba_\bm {\n-33\n-34// Forward declarations\n-35struct KeyInfoEntry;\n-36class KeyInfo;\n-37class GaussianFactorGraph;\n-38class _\bV_\ba_\bl_\bu_\be_\bs;\n-39class _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs;\n-40\n-_\b4_\b4class _\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+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+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-46public:\n-47\n-48 typedef boost::shared_ptr shared_ptr;\n-49 enum Verbosity {\n-50 SILENT = 0, COMPLEXITY, ERROR\n-51 } verbosity_;\n-52\n-53public:\n-54\n-55 _\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(Verbosity v = SILENT) :\n-56 verbosity_(v) {\n-57 }\n-58\n-59 virtual _\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-60 }\n-61\n-62 /* utility */\n-63 inline Verbosity verbosity() const {\n-64 return verbosity_;\n-65 }\n-66 GTSAM_EXPORT std::string getVerbosity() const;\n-67 GTSAM_EXPORT void setVerbosity(const std::string &s);\n-68\n-69 /* matlab interface */\n-70 GTSAM_EXPORT void print() const;\n-71\n-72 /* virtual print function */\n-73 GTSAM_EXPORT virtual void _\bp_\br_\bi_\bn_\bt(std::ostream &os) const;\n-74\n-75 /* for serialization */\n-76 friend std::ostream& operator<<(std::ostream &os,\n-77 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 &p);\n-78\n-79 GTSAM_EXPORT static Verbosity verbosityTranslator(const std::string &s);\n-80 GTSAM_EXPORT static std::string verbosityTranslator(Verbosity v);\n-81};\n-82\n-_\b8_\b6class _\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br {\n-87public:\n-88 typedef boost::shared_ptr shared_ptr;\n-89 _\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br() {\n-90 }\n-91 virtual _\b~_\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br() {\n-92 }\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+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+_\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-94 /* interface to the nonlinear optimizer, without metadata, damping and\n-initial estimate */\n-95 GTSAM_EXPORT _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs optimize(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg,\n-96 boost::optional = boost::none,\n-97 boost::optional&> lambda = boost::none);\n-98\n-99 /* interface to the nonlinear optimizer, without initial estimate */\n-100 GTSAM_EXPORT _\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, const\n-_\bK_\be_\by_\bI_\bn_\bf_\bo &keyInfo,\n-101 const std::map &lambda);\n-102\n-103 /* interface to the nonlinear optimizer that the subclasses have to\n-implement */\n-104 virtual _\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-105 const _\bK_\be_\by_\bI_\bn_\bf_\bo &keyInfo, const std::map &lambda,\n-106 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &initial) = 0;\n-107\n-108};\n-109\n-_\b1_\b1_\b4struct GTSAM_EXPORT _\bK_\be_\by_\bI_\bn_\bf_\bo_\bE_\bn_\bt_\br_\by {\n-115 size_t index, dim, start;\n-116 _\bK_\be_\by_\bI_\bn_\bf_\bo_\bE_\bn_\bt_\br_\by() {\n-117 }\n-118 _\bK_\be_\by_\bI_\bn_\bf_\bo_\bE_\bn_\bt_\br_\by(size_t idx, size_t d, _\bK_\be_\by start) :\n-119 index(idx), dim(d), start(start) {\n-120 }\n-121};\n-122\n-_\b1_\b2_\b6class GTSAM_EXPORT _\bK_\be_\by_\bI_\bn_\bf_\bo: public std::map {\n-127\n-128public:\n-129\n-130 typedef std::map Base;\n-131\n-132protected:\n-133\n-134 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg ordering_;\n-135 size_t numCols_;\n-136\n-137 void initialize(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &fg);\n-138\n-139public:\n-140\n-_\b1_\b4_\b2 _\bK_\be_\by_\bI_\bn_\bf_\bo() :\n-143 numCols_(0) {\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\n-147 _\bK_\be_\by_\bI_\bn_\bf_\bo(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &fg);\n-148\n-150 _\bK_\be_\by_\bI_\bn_\bf_\bo(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &fg, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &ordering);\n-151\n-_\b1_\b5_\b3 inline size_t _\bn_\bu_\bm_\bC_\bo_\bl_\bs() const {\n-154 return numCols_;\n-155 }\n-156\n-_\b1_\b5_\b8 inline const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg & _\bo_\br_\bd_\be_\br_\bi_\bn_\bg() const {\n-159 return ordering_;\n-160 }\n-161\n-163 std::vector colSpec() const;\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-166 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs x0() const;\n 167\n-169 Vector x0vector() const;\n-170\n-171};\n-172\n-173} // \\ namespace gtsam\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+_\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:_\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:_\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:_\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:_\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_\bE_\bn_\bt_\br_\by\n-Handy data structure for iterative solvers key to (index, dimension, start)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn IterativeSolver.h:114\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:_\bK_\be_\by_\bI_\bn_\bf_\bo_\b:_\b:_\bo_\br_\bd_\be_\br_\bi_\bn_\bg\n-const Ordering & ordering() const\n-Return the ordering.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn IterativeSolver.h:158\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bI_\bn_\bf_\bo_\b:_\b:_\bn_\bu_\bm_\bC_\bo_\bl_\bs\n-size_t numCols() const\n-Return the total number of columns (scalar variables = sum of dimensions)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn IterativeSolver.h:153\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bI_\bn_\bf_\bo_\b:_\b:_\bK_\be_\by_\bI_\bn_\bf_\bo\n-KeyInfo()\n-Default Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn IterativeSolver.h:142\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-_\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:_\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- * _\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\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/a00812.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00884.html", "comments": ["Files 6% 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/AcceleratedPowerMethod.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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n-
    AcceleratedPowerMethod.h File Reference
    \n+Macros
    \n+
    KalmanFilter.h File Reference
    \n
    \n
    \n \n-

    accelerated power method for fast eigenvalue and eigenvector computation \n+

    Simple linear Kalman filter. \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::AcceleratedPowerMethod< Operator >
     Compute maximum Eigenpair with accelerated power method. 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+\n+\n

    \n-Typedefs

    \n-using gtsam::Sparse = Eigen::SparseMatrix< double >
     

    \n+Macros

    \n+#define KALMANFILTER_DEFAULT_FACTORIZATION   QR
     
    \n

    Detailed Description

    \n-

    accelerated power method for fast eigenvalue and eigenvector computation

    \n-
    Date
    Sept 2020
    \n-
    Author
    Jing Wu
    \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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,31 +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\n-AcceleratedPowerMethod.h File Reference\n-accelerated power method for fast eigenvalue and eigenvector computation\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 | _\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-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+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-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+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-accelerated power method for fast eigenvalue and eigenvector computation\n+Simple linear Kalman filter.\n+Implemented using factor graphs, i.e., does Cholesky-based SRIF, really.\n Date\n- Sept 2020\n+ Sep 3, 2011\n Author\n- Jing Wu\n+ Stephen Williams\n+ Frank Dellaert\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+ * _\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/a00812_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00923_source.html", "comments": ["Files 14% 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/AcceleratedPowerMethod.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/PreintegrationParams.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-
    AcceleratedPowerMethod.h
    \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-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+
    17#pragma once
    \n+
    18
    \n+\n+
    20#include <boost/make_shared.hpp>
    \n
    21
    \n-\n+
    22namespace gtsam {
    \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+
    \n+\n+\n+\n+\n+
    32 Vector3 n_gravity;
    \n+
    33
    \n+
    \n+\n+\n+
    37 accelerometerCovariance(I_3x3),
    \n+
    38 integrationCovariance(I_3x3),
    \n+
    39 use2ndOrderCoriolis(false),
    \n+
    40 n_gravity(0, 0, -1) {}
    \n+
    \n+
    41
    \n+
    \n+
    44 PreintegrationParams(const Vector3& n_gravity)
    \n+\n+
    46 accelerometerCovariance(I_3x3),
    \n+
    47 integrationCovariance(I_3x3),
    \n+
    48 use2ndOrderCoriolis(false),
    \n+
    49 n_gravity(n_gravity) {}
    \n+
    \n+
    50
    \n+
    51 // Default Params for a Z-down navigation frame, such as NED: gravity points along positive Z-axis
    \n+
    52 static boost::shared_ptr<PreintegrationParams> MakeSharedD(double g = 9.81) {
    \n+
    53 return boost::shared_ptr<PreintegrationParams>(new PreintegrationParams(Vector3(0, 0, g)));
    \n+
    54 }
    \n+
    55
    \n+
    56 // Default Params for a Z-up navigation frame, such as ENU: gravity points along negative Z-axis
    \n+
    57 static boost::shared_ptr<PreintegrationParams> MakeSharedU(double g = 9.81) {
    \n+
    58 return boost::shared_ptr<PreintegrationParams>(new PreintegrationParams(Vector3(0, 0, -g)));
    \n+
    59 }
    \n+
    60
    \n+
    61 void print(const std::string& s="") const override;
    \n+
    62 bool equals(const PreintegratedRotationParams& other, double tol) const override;
    \n+
    63
    \n+
    64 void setAccelerometerCovariance(const Matrix3& cov) { accelerometerCovariance = cov; }
    \n+
    65 void setIntegrationCovariance(const Matrix3& cov) { integrationCovariance = cov; }
    \n+
    66 void setUse2ndOrderCoriolis(bool flag) { use2ndOrderCoriolis = flag; }
    \n+
    67
    \n+
    68 const Matrix3& getAccelerometerCovariance() const { return accelerometerCovariance; }
    \n+
    69 const Matrix3& getIntegrationCovariance() const { return integrationCovariance; }
    \n+
    70 const Vector3& getGravity() const { return n_gravity; }
    \n+
    71 bool getUse2ndOrderCoriolis() const { return use2ndOrderCoriolis; }
    \n+
    72
    \n+
    73protected:
    \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+
    76 friend class boost::serialization::access;
    \n+
    77 template<class ARCHIVE>
    \n+
    78 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
    \n+
    79 namespace bs = ::boost::serialization;
    \n+
    80 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(PreintegratedRotationParams);
    \n+
    81 ar & BOOST_SERIALIZATION_NVP(accelerometerCovariance);
    \n+
    82 ar & BOOST_SERIALIZATION_NVP(integrationCovariance);
    \n+
    83 ar & BOOST_SERIALIZATION_NVP(use2ndOrderCoriolis);
    \n+
    84 ar & BOOST_SERIALIZATION_NVP(n_gravity);
    \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+
    87#ifdef GTSAM_USE_QUATERNIONS
    \n+
    88 // Align if we are using Quaternions
    \n+
    89public:
    \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
    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+
    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+
    Vector3 n_gravity
    Gravity vector in nav frame.
    Definition PreintegrationParams.h:32
    \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", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-us-ascii\n+utf-8\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,186 +1,151 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-AcceleratedPowerMethod.h\n+PreintegrationParams.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+17#pragma once\n+18\n+19#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+20#include \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+22namespace _\bg_\bt_\bs_\ba_\bm {\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+_\b2_\b6struct GTSAM_EXPORT _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs: _\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+_\b2_\b9 Matrix3 _\ba_\bc_\bc_\be_\bl_\be_\br_\bo_\bm_\be_\bt_\be_\br_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be;\n+_\b3_\b0 Matrix3 _\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be;\n+_\b3_\b1 bool _\bu_\bs_\be_\b2_\bn_\bd_\bO_\br_\bd_\be_\br_\bC_\bo_\br_\bi_\bo_\bl_\bi_\bs;\n+_\b3_\b2 Vector3 _\bn_\b__\bg_\br_\ba_\bv_\bi_\bt_\by;\n+33\n+_\b3_\b5 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs()\n+36 : _\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+37 accelerometerCovariance(I_3x3),\n+38 integrationCovariance(I_3x3),\n+39 use2ndOrderCoriolis(false),\n+40 n_gravity(0, 0, -1) {}\n+41\n+_\b4_\b4 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs(const Vector3& n_gravity)\n+45 : _\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+46 accelerometerCovariance(I_3x3),\n+47 integrationCovariance(I_3x3),\n+48 use2ndOrderCoriolis(false),\n+49 n_gravity(n_gravity) {}\n+50\n+51 // Default Params for a Z-down navigation frame, such as NED: gravity points\n+along positive Z-axis\n+52 static boost::shared_ptr MakeSharedD(double g = 9.81)\n+{\n+53 return boost::shared_ptr(new _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n+(Vector3(0, 0, g)));\n+54 }\n+55\n+56 // Default Params for a Z-up navigation frame, such as ENU: gravity points\n+along negative Z-axis\n+57 static boost::shared_ptr MakeSharedU(double g = 9.81)\n+{\n+58 return boost::shared_ptr(new PreintegrationParams\n+(Vector3(0, 0, -g)));\n+59 }\n+60\n+61 void _\bp_\br_\bi_\bn_\bt(const std::string& s=\"\") const override;\n+62 bool equals(const PreintegratedRotationParams& other, double tol) const\n+override;\n+63\n+64 void setAccelerometerCovariance(const Matrix3& cov)\n+{ accelerometerCovariance = cov; }\n+65 void setIntegrationCovariance(const Matrix3& cov) { integrationCovariance =\n+cov; }\n+66 void setUse2ndOrderCoriolis(bool flag) { use2ndOrderCoriolis = flag; }\n+67\n+68 const Matrix3& getAccelerometerCovariance() const { return\n+accelerometerCovariance; }\n+69 const Matrix3& getIntegrationCovariance() const { return\n+integrationCovariance; }\n+70 const Vector3& getGravity() const { return n_gravity; }\n+71 bool getUse2ndOrderCoriolis() const { return use2ndOrderCoriolis; }\n+72\n+73protected:\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+_\b7_\b6 friend class boost::serialization::access;\n+77 template\n+78 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+79 namespace bs = ::boost::serialization;\n+80 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_\bP_\ba_\br_\ba_\bm_\bs);\n+81 ar & BOOST_SERIALIZATION_NVP(accelerometerCovariance);\n+82 ar & BOOST_SERIALIZATION_NVP(integrationCovariance);\n+83 ar & BOOST_SERIALIZATION_NVP(use2ndOrderCoriolis);\n+84 ar & BOOST_SERIALIZATION_NVP(n_gravity);\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+87#ifdef GTSAM_USE_QUATERNIONS\n+88 // Align if we are using Quaternions\n+89public:\n+90 _\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+91#endif\n+92};\n+93\n+94} // 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_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\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:_\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:_\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_\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_\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:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\ba_\bc_\bc_\be_\bl_\be_\br_\bo_\bm_\be_\bt_\be_\br_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be\n+Matrix3 accelerometerCovariance\n+Continuous-time \"Covariance\" of accelerometer The units for stddev are \u00cf\u0083 = m/\n+s\u00c2\u00b2/\u00e2\u0088\u009aHz.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationParams.h:29\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_\b:_\b:_\bu_\bs_\be_\b2_\bn_\bd_\bO_\br_\bd_\be_\br_\bC_\bo_\br_\bi_\bo_\bl_\bi_\bs\n+bool use2ndOrderCoriolis\n+Whether to use second order Coriolis integration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationParams.h:31\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_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n+PreintegrationParams()\n+Default constructor for serialization only.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationParams.h:35\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_\b:_\b:_\bn_\b__\bg_\br_\ba_\bv_\bi_\bt_\by\n+Vector3 n_gravity\n+Gravity vector in nav frame.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationParams.h:32\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_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n+PreintegrationParams(const Vector3 &n_gravity)\n+The Params constructor insists on getting the navigation frame gravity vector\n+For convenience,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationParams.h:44\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_\b:_\b:_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be\n+Matrix3 integrationCovariance\n+continuous-time \"Covariance\" describing integration uncertainty\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationParams.h:30\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+ * _\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 * Generated on Tue Jan 9 2024 05:51: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/a00806_source.html", "comments": ["Files 0% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n \n
    \n
    linearAlgorithms-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+\n \n
    23
    \n
    24#include <boost/optional.hpp>
    \n
    25#include <boost/shared_ptr.hpp>
    \n
    26
    \n
    27namespace gtsam
    \n
    28{
    \n@@ -251,16 +251,16 @@\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+
    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
    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@@ -281,13 +281,13 @@\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": "@@ -168,18 +168,18 @@\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+_\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"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00824_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00650_source.html", "comments": ["Files 9% 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/inference/Conditional-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-
    JacobianFactor-inl.h
    \n+
    Conditional-inst.h
    \n
    \n
    \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#pragma once
    \n
    20
    \n-\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-
    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-
    Exceptions that may be thrown by linear solver components.
    \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+
    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
    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+
    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-
    • gtsam
    • linear
    • JacobianFactor-inl.h
    • \n+
    • gtsam
    • inference
    • Conditional-inst.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,183 +1,167 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-JacobianFactor-inl.h\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// \\callgraph\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+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-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-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-_\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+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+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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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- * _\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+ * _\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 * Generated on Tue Jan 9 2024 05:51: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_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01247_source.html", "comments": ["Files 27% 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/slam/dataset.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+
    dataset.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-
    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-
    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+
    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-
    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+
    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-
    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-
    223 }
    \n-
    \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-
    \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+
    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-
    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-
    288
    \n-
    289 return result;
    \n-
    290 }
    \n-
    \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-
    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-
    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-
    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-
    384} // \\namespace gtsam
    \n-
    \n-
    \n-
    \n-
    \n-
    typedef and functions to augment Eigen's VectorXd
    \n-
    A thin wrapper around std::vector that uses a custom allocator.
    \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+
    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+
    Convenience functions for serializing data structures via boost.serialization.
    \n+
    Concept check for values that can be used in unit tests.
    \n+
    Typedefs for easier changing of types.
    \n+
    Calibration used by Bundler.
    \n+
    Base class for all pinhole cameras.
    \n+
    2D Pose
    \n+
    3D Pose
    \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
    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-
    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-
    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+
    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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,468 +1,295 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-VectorValues.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 6 * Authors: Frank Dellaert, 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-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-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+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-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+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-_\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-223 }\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-_\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+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-_\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-288\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-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-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-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-384} // \\namespace gtsam\n-_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-typedef and functions to augment Eigen's VectorXd\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-_\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+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+_\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+_\bt_\by_\bp_\be_\bs_\b._\bh\n+Typedefs for easier changing of types.\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+_\bP_\bo_\bs_\be_\b2_\b._\bh\n+2D Pose\n+_\bP_\bo_\bs_\be_\b3_\b._\bh\n+3D Pose\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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_\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\n- * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+ * _\bs_\bl_\ba_\bm\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/a00842.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00452.html", "comments": ["Files 8% 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/SubgraphBuilder.h 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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n \n
    \n \n-
    SubgraphBuilder.h File Reference
    \n+
    Similarity3.h File Reference
    \n
    \n
    \n \n-

    Go to the source code of this file.

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

    \n Classes

    class  gtsam::Subgraph
    class  gtsam::Similarity3
     3D similarity transform More...
     
    struct  gtsam::Subgraph::Edge
    struct  gtsam::Similarity3::ChartAtOrigin
     Chart at the origin. More...
     
    struct  gtsam::SubgraphBuilderParameters
    struct  gtsam::traits< Similarity3 >
     
    class  gtsam::SubgraphBuilder
    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+\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+template<>
    Matrix gtsam::wedge< Similarity3 > (const Vector &xi)
     
    \n

    Detailed Description

    \n-
    Date
    Dec 31, 2009
    \n-
    Author
    Frank Dellaert, Yong-Dian Jian
    \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,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+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_\bu_\bb_\bg_\br_\ba_\bp_\bh\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_\bu_\bb_\bg_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bd_\bg_\be\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:_\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+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- 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+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- _\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+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- Date\n- Dec 31, 2009\n+Implementation of Similarity3 transform.\n Author\n- Frank Dellaert, Yong-Dian Jian\n+ Paul Drews\n+ John Lambert\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+ * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\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/a00848_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00323_source.html", "comments": ["Files 5% 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/geometry/SO3.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+
    SO3.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-
    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+
    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
    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+
    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
    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-
    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+
    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
    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-
    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+
    \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+
    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-
    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+
    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-
    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+
    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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,228 +1,266 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GaussianBayesNet.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-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-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+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 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+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 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-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+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 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-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+_\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+_\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+_\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:_\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:_\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:_\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:_\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\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+ * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\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/a00854.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01265.html", "comments": ["Files 6% 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/Scatter.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/EssentialMatrixConstraint.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-
    Scatter.cpp File Reference
    \n+
    EssentialMatrixConstraint.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-
    Author
    Richard Roberts
    \n+
    Author
    Frank Dellaert
    \n
    \n-Frank Dellaert
    \n-
    Date
    June 2015
    \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,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-Scatter.cpp File Reference\n+EssentialMatrixConstraint.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 Frank Dellaert\n+ Pablo Alcantarilla\n Date\n- June 2015\n+ Jan 5, 2014\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+ * _\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._\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/a00878_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00740_source.html", "comments": ["Files 7% 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/GaussianEliminationTree.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+
    GaussianEliminationTree.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-
    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-
    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+
    \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+
    63}
    \n+\n+
    Linear Factor Graph where all factors are Gaussians.
    \n+
    Chordal Bayes Net, the result of eliminating a factor graph.
    \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+
    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+
    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-
    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+
    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,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GaussianJunctionTree.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@@ -16,62 +16,77 @@\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/_\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-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-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+_\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+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_\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_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n+Chordal Bayes Net, the result of eliminating a factor graph.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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_\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+_\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 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+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 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+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 GaussianJunctionTree.h:43\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_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\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/a00881_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01226_source.html", "comments": ["Files 10% 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/sfm/TranslationRecovery.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+
    TranslationRecovery.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-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/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+
    19#include <gtsam/geometry/Unit3.h>
    \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+
    30
    \n+
    31// Set up an optimization problem for the unknown translations Ti in the world
    \n+
    32// coordinate frame, given the known camera attitudes wRi with respect to the
    \n+
    33// world frame, and a set of (noisy) translation directions of type Unit3,
    \n+
    34// w_aZb. The measurement equation is
    \n+
    35// w_aZb = Unit3(Tb - Ta) (1)
    \n+
    36// i.e., w_aZb is the translation direction from frame A to B, in world
    \n+
    37// coordinates. Although Unit3 instances live on a manifold, following
    \n+
    38// Wilson14eccv_1DSfM.pdf error we compute the *chordal distance* in the
    \n+
    39// ambient world coordinate frame.
    \n+
    40//
    \n+
    41// It is clear that we cannot recover the scale, nor the absolute position,
    \n+
    42// so the gauge freedom in this case is 3 + 1 = 4. We fix these by taking fixing
    \n+
    43// the translations Ta and Tb associated with the first measurement w_aZb,
    \n+
    44// clamping them to their initial values as given to this method. If no initial
    \n+
    45// values are given, we use the origin for Tb and set Tb to make (1) come
    \n+
    46// through, i.e.,
    \n+
    47// Tb = s * wRa * Point3(w_aZb) (2)
    \n+
    48// where s is an arbitrary scale that can be supplied, default 1.0. Hence, two
    \n+
    49// versions are supplied below corresponding to whether we have initial values
    \n+
    50// or not.
    \n+
    \n+\n+
    52 public:
    \n+
    53 using KeyPair = std::pair<Key, Key>;
    \n+
    54 using TranslationEdges = std::vector<BinaryMeasurement<Unit3>>;
    \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+
    56 private:
    \n+
    57 // Translation directions between camera pairs.
    \n+
    58 TranslationEdges relativeTranslations_;
    \n+
    59
    \n+
    60 // Parameters.
    \n+\n+
    62
    \n+
    63 public:
    \n+
    \n+\n+
    70 : lmParams_(lmParams) {}
    \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-
    \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+\n+
    85 const std::vector<BinaryMeasurement<Unit3>> &relativeTranslations) const;
    \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-\n-
    149
    \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+
    102 void addPrior(
    \n+
    103 const std::vector<BinaryMeasurement<Unit3>> &relativeTranslations,
    \n+
    104 const double scale,
    \n+
    105 const std::vector<BinaryMeasurement<Point3>> &betweenTranslations,
    \n+\n+
    107 const SharedNoiseModel &priorNoiseModel =
    \n+
    108 noiseModel::Isotropic::Sigma(3, 0.01)) const;
    \n+
    109
    \n+\n+
    122 const std::vector<BinaryMeasurement<Unit3>> &relativeTranslations,
    \n+
    123 const std::vector<BinaryMeasurement<Point3>> &betweenTranslations,
    \n+
    124 std::mt19937 *rng, const Values &initialValues = Values()) const;
    \n+
    125
    \n+\n+
    137 const std::vector<BinaryMeasurement<Unit3>> &relativeTranslations,
    \n+
    138 const std::vector<BinaryMeasurement<Point3>> &betweenTranslations,
    \n+
    139 const Values &initialValues = Values()) const;
    \n+
    140
    \n+
    159 Values run(
    \n+
    160 const TranslationEdges &relativeTranslations, const double scale = 1.0,
    \n+
    161 const std::vector<BinaryMeasurement<Point3>> &betweenTranslations = {},
    \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 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-
    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-
    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-
    VectorValues represents a collection of vector-valued variables associated each with a unique integer...
    Definition VectorValues.h:74
    \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+
    Definition TranslationRecovery.h:51
    \n+
    NonlinearFactorGraph buildGraph(const std::vector< BinaryMeasurement< Unit3 > > &relativeTranslations) const
    Build the factor graph to do the optimization.
    Definition TranslationRecovery.cpp:99
    \n+
    static TranslationEdges SimulateMeasurements(const Values &poses, const std::vector< KeyPair > &edges)
    Simulate translation direction measurements.
    Definition TranslationRecovery.cpp:216
    \n+
    TranslationRecovery()=default
    Default constructor.
    \n+
    Values run(const TranslationEdges &relativeTranslations, const double scale=1.0, const std::vector< BinaryMeasurement< Point3 > > &betweenTranslations={}, const Values &initialValues=Values()) const
    Build and optimize factor graph.
    Definition TranslationRecovery.cpp:177
    \n+
    void addPrior(const std::vector< BinaryMeasurement< Unit3 > > &relativeTranslations, const double scale, const std::vector< BinaryMeasurement< Point3 > > &betweenTranslations, NonlinearFactorGraph *graph, const SharedNoiseModel &priorNoiseModel=noiseModel::Isotropic::Sigma(3, 0.01)) const
    Add 3 factors to the graph:
    Definition TranslationRecovery.cpp:111
    \n+
    TranslationRecovery(const LevenbergMarquardtParams &lmParams)
    Construct a new Translation Recovery object.
    Definition TranslationRecovery.h:69
    \n+
    Values initializeRandomly(const std::vector< BinaryMeasurement< Unit3 > > &relativeTranslations, const std::vector< BinaryMeasurement< Point3 > > &betweenTranslations, std::mt19937 *rng, const Values &initialValues=Values()) const
    Create random initial translations.
    Definition TranslationRecovery.cpp:137
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,183 +1,177 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-iterative.h\n+TranslationRecovery.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-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 <_\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+19#include \n+20#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+21#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+22#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+23\n+24#include \n+25#include \n+26#include \n+27#include \n+28\n+29namespace _\bg_\bt_\bs_\ba_\bm {\n+30\n+31// Set up an optimization problem for the unknown translations Ti in the\n+world\n+32// coordinate frame, given the known camera attitudes wRi with respect to the\n+33// world frame, and a set of (noisy) translation directions of type Unit3,\n+34// w_aZb. The measurement equation is\n+35// w_aZb = Unit3(Tb - Ta) (1)\n+36// i.e., w_aZb is the translation direction from frame A to B, in world\n+37// coordinates. Although Unit3 instances live on a manifold, following\n+38// Wilson14eccv_1DSfM.pdf error we compute the *chordal distance* in the\n+39// ambient world coordinate frame.\n+40//\n+41// It is clear that we cannot recover the scale, nor the absolute position,\n+42// so the gauge freedom in this case is 3 + 1 = 4. We fix these by taking\n+fixing\n+43// the translations Ta and Tb associated with the first measurement w_aZb,\n+44// clamping them to their initial values as given to this method. If no\n+initial\n+45// values are given, we use the origin for Tb and set Tb to make (1) come\n+46// through, i.e.,\n+47// Tb = s * wRa * Point3(w_aZb) (2)\n+48// where s is an arbitrary scale that can be supplied, default 1.0. Hence,\n+two\n+49// versions are supplied below corresponding to whether we have initial\n+values\n+50// or not.\n+_\b5_\b1class _\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by {\n+52 public:\n+53 using KeyPair = std::pair;\n+54 using TranslationEdges = std::vector>;\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+56 private:\n+57 // Translation directions between camera pairs.\n+58 TranslationEdges relativeTranslations_;\n+59\n+60 // Parameters.\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 lmParams_;\n+62\n+63 public:\n+_\b6_\b9 _\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by(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 &lmParams)\n+70 : lmParams_(lmParams) {}\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+_\b7_\b5 _\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by() = default;\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+84 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bb_\bu_\bi_\bl_\bd_\bG_\br_\ba_\bp_\bh(\n+85 const std::vector<_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b<_\bU_\bn_\bi_\bt_\b3_\b>> &relativeTranslations) const;\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#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-_\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+102 void _\ba_\bd_\bd_\bP_\br_\bi_\bo_\br(\n+103 const std::vector<_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b<_\bU_\bn_\bi_\bt_\b3_\b>> &relativeTranslations,\n+104 const double scale,\n+105 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+106 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh *graph,\n+107 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &priorNoiseModel =\n+108 _\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(3, 0.01)) const;\n+109\n+121 _\bV_\ba_\bl_\bu_\be_\bs _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bR_\ba_\bn_\bd_\bo_\bm_\bl_\by(\n+122 const std::vector<_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b<_\bU_\bn_\bi_\bt_\b3_\b>> &relativeTranslations,\n+123 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+124 std::mt19937 *rng, const _\bV_\ba_\bl_\bu_\be_\bs &initialValues = _\bV_\ba_\bl_\bu_\be_\bs()) const;\n+125\n+136 _\bV_\ba_\bl_\bu_\be_\bs _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bR_\ba_\bn_\bd_\bo_\bm_\bl_\by(\n+137 const std::vector<_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b<_\bU_\bn_\bi_\bt_\b3_\b>> &relativeTranslations,\n+138 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+139 const _\bV_\ba_\bl_\bu_\be_\bs &initialValues = _\bV_\ba_\bl_\bu_\be_\bs()) const;\n+140\n+159 _\bV_\ba_\bl_\bu_\be_\bs _\br_\bu_\bn(\n+160 const TranslationEdges &relativeTranslations, const double scale = 1.0,\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+_\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:_\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:_\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:_\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:_\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_\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:_\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:_\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:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TranslationRecovery.h:51\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by_\b:_\b:_\bb_\bu_\bi_\bl_\bd_\bG_\br_\ba_\bp_\bh\n+NonlinearFactorGraph buildGraph(const std::vector< BinaryMeasurement< Unit3 > >\n+&relativeTranslations) const\n+Build the factor graph to do the optimization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TranslationRecovery.cpp:99\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by_\b:_\b:_\bS_\bi_\bm_\bu_\bl_\ba_\bt_\be_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+static TranslationEdges SimulateMeasurements(const Values &poses, const std::\n+vector< KeyPair > &edges)\n+Simulate translation direction measurements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TranslationRecovery.cpp:216\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by\n+TranslationRecovery()=default\n+Default constructor.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by_\b:_\b:_\br_\bu_\bn\n+Values run(const TranslationEdges &relativeTranslations, const double\n+scale=1.0, const std::vector< BinaryMeasurement< Point3 > >\n+&betweenTranslations={}, const Values &initialValues=Values()) const\n+Build and optimize factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TranslationRecovery.cpp:177\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by_\b:_\b:_\ba_\bd_\bd_\bP_\br_\bi_\bo_\br\n+void addPrior(const std::vector< BinaryMeasurement< Unit3 > >\n+&relativeTranslations, const double scale, const std::vector<\n+BinaryMeasurement< Point3 > > &betweenTranslations, NonlinearFactorGraph\n+*graph, const SharedNoiseModel &priorNoiseModel=noiseModel::Isotropic::Sigma(3,\n+0.01)) const\n+Add 3 factors to the graph:\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TranslationRecovery.cpp:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by\n+TranslationRecovery(const LevenbergMarquardtParams &lmParams)\n+Construct a new Translation Recovery object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TranslationRecovery.h:69\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bR_\ba_\bn_\bd_\bo_\bm_\bl_\by\n+Values initializeRandomly(const std::vector< BinaryMeasurement< Unit3 > >\n+&relativeTranslations, const std::vector< BinaryMeasurement< Point3 > >\n+&betweenTranslations, std::mt19937 *rng, const Values &initialValues=Values())\n+const\n+Create random initial translations.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TranslationRecovery.cpp:137\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+ * _\bs_\bf_\bm\n+ * _\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\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/a00890_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00734_source.html", "comments": ["Files 1% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n
    \n
    \n
    \n \n \n
    \n \n
    15 * @date Jan 31, 2012
    \n
    16 * @author Yong-Dian Jian
    \n
    17 * @author Sungtae An
    \n
    18 */
    \n
    19
    \n
    20#pragma once
    \n
    21
    \n-\n+\n
    23#include <string>
    \n
    24
    \n
    25namespace gtsam {
    \n
    26
    \n
    27class GaussianFactorGraph;
    \n
    28class KeyInfo;
    \n
    29class Preconditioner;
    \n@@ -218,15 +218,15 @@\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+
    Implementation of Conjugate Gradient solver for a linear system.
    \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"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00893_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00515_source.html", "comments": ["Files 9% 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/RegularHessianFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridValues.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-
    RegularHessianFactor.h
    \n+
    HybridValues.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#include <vector>
    \n-
    24
    \n-
    25namespace gtsam {
    \n+
    18#pragma once
    \n+
    19
    \n+\n+\n+\n+
    23#include <gtsam/inference/Key.h>
    \n+\n+\n
    26
    \n-
    27template<size_t D>
    \n-
    \n-\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-
    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-
    43 }
    \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+
    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-
    67 template<typename KEYS>
    \n-
    \n-\n-\n-\n-
    71 checkInvariants();
    \n-
    72 }
    \n-
    \n-
    73
    \n-
    \n-\n-
    76 : HessianFactor(jf) {}
    \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-\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+
    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-
    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+
    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-
    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-
    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+
    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
    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+
    \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
    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+
    \n+\n+
    145 discrete_.insert(values);
    \n+
    146 return *this;
    \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+
    \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
    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+\n+
    200 continuous_.update(values.continuous());
    \n+
    201 discrete_.update(values.discrete());
    \n+
    202 return *this;
    \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-
    215
    \n-
    216}
    \n+
    213
    \n
    217
    \n-
    JacobianFactor class with fixed sized blcoks.
    \n-
    Contains the HessianFactor class, a general quadratic factor.
    \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+
    \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+
    specialized key for discrete variables
    \n+\n+
    An assignment from labels to a discrete value index (size_t)
    \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
    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-
    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-
    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+
    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+
    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
    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,356 +1,392 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-RegularHessianFactor.h\n+HybridValues.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-24\n-25namespace _\bg_\bt_\bs_\ba_\bm {\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-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-29\n-30public:\n-31\n-32 typedef Eigen::Matrix VectorD;\n-33 typedef Eigen::Matrix MatrixD;\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-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+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-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+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 _\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+_\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-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+_\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-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-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+_\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 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+_\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 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+_\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 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+_\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 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+_\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 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+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-_\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+_\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+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_\bK_\be_\by_\b._\bh\n+specialized key for discrete variables\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+_\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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:_\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:_\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:_\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- * _\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+ * _\bh_\by_\bb_\br_\bi_\bd\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/a00914.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00356.html", "comments": ["Files 8% 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.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity3.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-
    AttitudeFactor.cpp File Reference
    \n+Namespaces |\n+Functions
    \n+
    Similarity3.cpp File Reference
    \n
    \n
    \n \n-

    Implementation file for Attitude factor. \n+

    Implementation of Similarity3 transform. \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 Similarity3 &p)
     
    \n

    Detailed Description

    \n-

    Implementation file for Attitude factor.

    \n-
    Author
    Frank Dellaert
    \n-
    Date
    January 28, 2014
    \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,22 +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-AttitudeFactor.cpp File Reference\n-Implementation file for Attitude factor. _\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+Similarity3.cpp File Reference\n+Implementation of Similarity3 transform. _\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 _\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 file for Attitude factor.\n+Implementation of Similarity3 transform.\n Author\n- Frank Dellaert\n- Date\n- January 28, 2014\n+ Paul Drews\n+ John Lambert\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._\bc_\bp_\bp\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 * Generated on Tue Jan 9 2024 05:51: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/a01307.html", "comments": ["Files 5% 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/ScenarioRunner.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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n-
    ScenarioRunner.h File Reference
    \n+
    SmartProjectionFactor.h File Reference
    \n
    \n
    \n \n-

    Simple class to test navigation scenarios. \n+

    Smart factor on cameras (pose + calibration) \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::ScenarioRunner
    class  gtsam::SmartProjectionFactor< CAMERA >
     SmartProjectionFactor: triangulates point and keeps an estimate of it around. More...
     
    class  gtsam::CombinedScenarioRunner
    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-

    Simple class to test navigation scenarios.

    \n-
    Author
    Frank Dellaert
    \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,26 +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-ScenarioRunner.h File Reference\n-Simple class to test navigation scenarios. _\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:_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\bR_\bu_\bn_\bn_\be_\br\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-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+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-Simple class to test navigation scenarios.\n+Smart factor on cameras (pose + calibration)\n Author\n+ Luca Carlone\n+ Zsolt Kira\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_\bR_\bu_\bn_\bn_\be_\br_\b._\bh\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 * Generated on Tue Jan 9 2024 05:51: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/a01022_source.html", "comments": ["Files 10% 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/ScenarioRunner.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@@ -72,15 +72,15 @@\n
    \n
    \n
    \n \n \n
    \n \n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    ScenarioRunner.h
    \n+
    DoglegOptimizerImpl.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-\n-\n-\n-\n+
    17#pragma once
    \n+
    18
    \n+
    19#include <iomanip>
    \n+
    20
    \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-
    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-
    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+
    \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+
    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-\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-
    Simple class to test navigation scenarios.
    \n-\n-\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+
    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
    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-
    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+
    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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,207 +1,232 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ScenarioRunner.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#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+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-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-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+_\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-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-_\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+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+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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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\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+ * _\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 * Generated on Tue Jan 9 2024 05:51: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/a00731.html", "comments": ["Files 11% 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 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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n \n \n
    \n \n-
    AHRSFactor.h File Reference
    \n+
    GaussianFactor.cpp File Reference
    \n
    \n
    \n \n-

    Go to the source code of this file.

    \n+

    A factor with a quadratic error function - a Gaussian. \n+More...

    \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

    Detailed Description

    \n-
    Author
    Krunal Chande
    \n-
    \n-Luca Carlone
    \n-
    \n-Frank Dellaert
    \n-
    Date
    July 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,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-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\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 *\b**\b**\b**\b**\b* D\bDe\bet\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 Author\n- Krunal Chande\n- Luca Carlone\n- Frank Dellaert\n- Date\n- July 2014\n+ Fan Jiang\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+ * _\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 * Generated on Tue Jan 9 2024 05:51: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/a00917_source.html", "comments": ["Files 4% 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/navigation/PreintegratedRotation.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+
    PreintegratedRotation.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/* GTSAM includes */
    \n-\n-\n-\n+
    22#pragma once
    \n+
    23
    \n+\n+
    25#include <gtsam/base/Matrix.h>
    \n
    26
    \n
    27namespace gtsam {
    \n
    28
    \n-
    \n-\n-
    35
    \n-
    36 protected:
    \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 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+
    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
    \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+
    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-
    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+
    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 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+
    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-
    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+
    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
    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+
    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-
    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-
    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+
    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,267 +1,253 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-AHRSFactor.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-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+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 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+_\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-_\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+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 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+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-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+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 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+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-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+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-_\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:_\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:_\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:_\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:_\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:_\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- * _\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br_\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/a00944.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00953.html", "comments": ["Files 2% similar despite different names"], "unified_diff": "@@ -67,15 +67,15 @@\n
    \n
    \n
    \n \n \n
    \n \n \n
    ImuBias.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@@ -126,13 +126,13 @@\n
    Date
    Feb 2, 2012
    \n
    Author
    Vadim Indelman, Stephen Williams
    \n
    \n \n \n
    \n \n
    \n \n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00959_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00326_source.html", "comments": ["Files 8% 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/NavState.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@@ -72,15 +72,15 @@\n \n
    \n
    \n \n \n
    \n \n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    NavState.h
    \n+
    Cal3Fisheye.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-
    23#include <gtsam/base/Manifold.h>
    \n+
    20#pragma once
    \n+
    21
    \n+
    22#include <gtsam/geometry/Cal3.h>
    \n+\n
    24
    \n-
    25namespace gtsam {
    \n+
    25#include <boost/shared_ptr.hpp>
    \n
    26
    \n-
    28typedef Vector3 Velocity3;
    \n-
    29
    \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-
    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+
    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-
    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+
    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-
    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-
    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+
    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-
    163 Vector9 localCoordinates(const NavState& g, //
    \n-
    164 OptionalJacobian<9, 9> H1 = boost::none, OptionalJacobian<9, 9> H2 =
    \n-
    165 boost::none) const;
    \n+
    \n+
    163 inline Cal3Fisheye retract(const Vector& d) const {
    \n+
    164 return Cal3Fisheye(vector() + d);
    \n+
    165 }
    \n+
    \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+
    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-
    typedef and functions to augment Eigen's VectorXd
    \n-
    Base class and basic functions for Manifold types.
    \n-
    3D Pose
    \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
    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+
    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 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+
    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,253 +1,224 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-NavState.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-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+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-25namespace _\bg_\bt_\bs_\ba_\bm {\n+25#include \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-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+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+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-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+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-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-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+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-163 Vector9 localCoordinates(const NavState& g, //\n-164 OptionalJacobian<9, 9> H1 = boost::none, OptionalJacobian<9, 9> H2 =\n-165 boost::none) const;\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-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+_\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-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+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-_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-typedef and functions to augment Eigen's VectorXd\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+_\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:_\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:_\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+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:_\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_\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- * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh\n+ * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\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/a00974.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00947.html", "comments": ["Files 9% 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 File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/CombinedImuFactor.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-
    AttitudeFactor.h File Reference
    \n+Namespaces |\n+Typedefs
    \n+
    CombinedImuFactor.h File Reference
    \n \n
    \n \n-

    Header file for Attitude factor. \n-More...

    \n-\n-

    Go to the source code of this file.

    \n+

    Go to the source code of this file.

    \n

    \n Classes

    class  gtsam::imuBias::ConstantBias
     
    struct  gtsam::traits< imuBias::ConstantBias >
     
    \n \n-\n-\n+\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::AttitudeFactor
     Base class for prior on attitude Example: More...
    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
     PreintegratedCombinedMeasurements integrates the IMU measurements (rotation rates and accelerations) and the corresponding covariance matrix. More...
     
    class  gtsam::Rot3AttitudeFactor
     Version of AttitudeFactor for Rot3. More...
    class  gtsam::CombinedImuFactor
     CombinedImuFactor is a 6-ways factor involving previous state (pose and velocity of the vehicle, as well as bias at previous time step), and current state (pose, velocity, bias at current time step). More...
     
    struct  gtsam::traits< Rot3AttitudeFactor >
     traits More...
    struct  gtsam::traits< PreintegrationCombinedParams >
     
    class  gtsam::Pose3AttitudeFactor
     Version of AttitudeFactor for Pose3. More...
    struct  gtsam::traits< PreintegratedCombinedMeasurements >
     
    struct  gtsam::traits< Pose3AttitudeFactor >
     traits More...
    struct  gtsam::traits< CombinedImuFactor >
     
    \n \n \n \n \n+

    \n Namespaces

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

    \n+Typedefs

    \n+typedef ManifoldPreintegration gtsam::PreintegrationType
     
    \n

    Detailed Description

    \n-

    Header file for Attitude factor.

    \n-
    Author
    Frank Dellaert
    \n-
    Date
    January 28, 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
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,39 +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-AttitudeFactor.h File Reference\n-Header file for Attitude 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+CombinedImuFactor.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:_\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+struct \u00a0 _\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\n+\u00a0 _\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: Usage: Create just a single Params\n+ and 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:_\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+ _\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 integrates the IMU measurements\n+\u00a0 (rotation rates and accelerations) and the corresponding covariance\n+ matrix. _\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_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br\n+ _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br is a 6-ways factor involving previous state (pose\n+\u00a0 and velocity of the vehicle, as well as bias at previous time step),\n+ and current state (pose, velocity, bias at current time step). _\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+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_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs_\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+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_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\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+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\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+typedef _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPr\bre\bei\bin\bnt\bte\beg\bgr\bra\bat\bti\bio\bon\bnT\bTy\byp\bpe\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-Header file for Attitude factor.\n Author\n+ Luca Carlone\n+ Stephen Williams\n+ Richard Roberts\n+ Vadim Indelman\n+ David Jensen\n Frank Dellaert\n- Date\n- January 28, 2014\n+ Varun Agrawal\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+ * _\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/a00974_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01331_source.html", "comments": ["Files 19% 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/slam/SmartFactorParams.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+
    SmartFactorParams.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+
    20#pragma once
    \n+
    21
    \n+\n
    23
    \n
    24namespace gtsam {
    \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+
    \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+\n+\n+
    46
    \n+
    49 TriangulationParameters triangulation;
    \n+\n+
    52
    \n+\n+\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+
    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-
    \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+
    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-
    \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-
    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-
    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+
    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-
    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-
    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-
    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+
    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,332 +1,188 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-AttitudeFactor.h\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 * 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+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_\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+_\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+_\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 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-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+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\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+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\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-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-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+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:_\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:_\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+_\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 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+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:122\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+ * _\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/a00977_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00068_source.html", "comments": ["Files 16% 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/TangentPreintegration.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@@ -72,15 +72,15 @@\n \n
    \n
    \n \n \n
    \n \n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    TangentPreintegration.h
    \n+
    FastSet.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-
    21
    \n-
    22namespace gtsam {
    \n-
    23
    \n-
    \n-
    28class GTSAM_EXPORT TangentPreintegration : public PreintegrationBase {
    \n-
    29 protected:
    \n-
    30
    \n-\n-\n-\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-
    \n-\n-
    41 resetIntegration();
    \n-
    42 }
    \n-
    \n-
    43
    \n-
    44public:
    \n-
    47
    \n-
    53 TangentPreintegration(const boost::shared_ptr<Params>& p,
    \n-\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-
    \n-\n-
    58 }
    \n-
    \n-
    59
    \n-
    61
    \n-
    65 void resetIntegration() override;
    \n-
    66
    \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-
    71 Vector3 deltaPij() const override { return preintegrated_.segment<3>(3); }
    \n-
    72 Vector3 deltaVij() const override { return preintegrated_.tail<3>(); }
    \n-
    73 Rot3 deltaRij() const override { return Rot3::Expmap(theta()); }
    \n-
    74 NavState deltaXij() const override { return NavState().retract(preintegrated_); }
    \n-
    75
    \n-
    76 const Vector9& preintegrated() const { return preintegrated_; }
    \n-
    77 Vector3 theta() const { return preintegrated_.head<3>(); }
    \n-
    78 const Matrix93& preintegrated_H_biasAcc() const { return preintegrated_H_biasAcc_; }
    \n-
    79 const Matrix93& preintegrated_H_biasOmega() const { return preintegrated_H_biasOmega_; }
    \n-
    80
    \n-
    83 bool equals(const TangentPreintegration& other, double tol) const;
    \n-
    85
    \n-
    88
    \n-
    89 // Update integrated vector on tangent manifold preintegrated with acceleration
    \n-
    90 // Static, functional version.
    \n-
    91 static Vector9 UpdatePreintegrated(const Vector3& a_body,
    \n-
    92 const Vector3& w_body, const double dt,
    \n-
    93 const Vector9& preintegrated,
    \n-
    94 OptionalJacobian<9, 9> A = boost::none,
    \n-
    95 OptionalJacobian<9, 3> B = boost::none,
    \n-
    96 OptionalJacobian<9, 3> C = boost::none);
    \n-
    97
    \n-
    102 void update(const Vector3& measuredAcc, const Vector3& measuredOmega,
    \n-
    103 const double dt, Matrix9* A, Matrix93* B, Matrix93* C) override;
    \n-
    104
    \n-
    108 Vector9 biasCorrectedDelta(const imuBias::ConstantBias& bias_i,
    \n-
    109 OptionalJacobian<9, 6> H = boost::none) const override;
    \n-
    110
    \n-
    111 // Compose the two pre-integrated 9D-vectors zeta01 and zeta02, with derivatives
    \n-
    112 static Vector9 Compose(const Vector9& zeta01, const Vector9& zeta12,
    \n-
    113 double deltaT12,
    \n-
    114 OptionalJacobian<9, 9> H1 = boost::none,
    \n-
    115 OptionalJacobian<9, 9> H2 = boost::none);
    \n-
    116
    \n-
    119 void mergeWith(const TangentPreintegration& pim, Matrix9* H1, Matrix9* H2);
    \n-
    121
    \n-
    \n-
    123 virtual boost::shared_ptr<TangentPreintegration> clone() const {
    \n-
    124 return boost::shared_ptr<TangentPreintegration>();
    \n-
    125 }
    \n-
    \n-
    126
    \n-
    128
    \n-
    129private:
    \n-
    131 friend class boost::serialization::access;
    \n-
    132 template<class ARCHIVE>
    \n-
    133 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
    \n-
    134 namespace bs = ::boost::serialization;
    \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-
    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+
    \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+
    117
    \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+
    Concept check for values that can be used in unit tests.
    \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-
    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-
    TangentPreintegration()
    Default constructor for serialization.
    Definition TangentPreintegration.h:40
    \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+
    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,157 +1,176 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-TangentPreintegration.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-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/_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b._\bh>\n-21\n-22namespace _\bg_\bt_\bs_\ba_\bm {\n-23\n-_\b2_\b8class GTSAM_EXPORT _\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn : public _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be {\n-29 protected:\n-30\n-_\b3_\b5 Vector9 _\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\b_;\n-_\b3_\b6 Matrix93 _\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\b__\bH_\b__\bb_\bi_\ba_\bs_\bA_\bc_\bc_\b_;\n-_\b3_\b7 Matrix93 _\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\b__\bH_\b__\bb_\bi_\ba_\bs_\bO_\bm_\be_\bg_\ba_\b_;\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-_\b4_\b0 _\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn() {\n-41 resetIntegration();\n-42 }\n-43\n-44public:\n-47\n-53 _\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn(const boost::shared_ptr& p,\n-54 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+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-_\b5_\b7 _\b~_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn() override {\n-58 }\n-59\n-61\n-65 void resetIntegration() override;\n-66\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-71 Vector3 deltaPij() const override { return preintegrated_.segment<3>(3); }\n-72 Vector3 deltaVij() const override { return preintegrated_.tail<3>(); }\n-73 Rot3 deltaRij() const override { return Rot3::Expmap(theta()); }\n-74 NavState deltaXij() const override { return NavState().retract\n-(preintegrated_); }\n-75\n-76 const Vector9& preintegrated() const { return preintegrated_; }\n-77 Vector3 theta() const { return preintegrated_.head<3>(); }\n-78 const Matrix93& preintegrated_H_biasAcc() const { return\n-preintegrated_H_biasAcc_; }\n-79 const Matrix93& preintegrated_H_biasOmega() const { return\n-preintegrated_H_biasOmega_; }\n-80\n-83 bool equals(const TangentPreintegration& other, double tol) const;\n-85\n-88\n-89 // Update integrated vector on tangent manifold preintegrated with\n-acceleration\n-90 // Static, functional version.\n-91 static Vector9 UpdatePreintegrated(const Vector3& a_body,\n-92 const Vector3& w_body, const double dt,\n-93 const Vector9& preintegrated,\n-94 OptionalJacobian<9, 9> A = boost::none,\n-95 OptionalJacobian<9, 3> B = boost::none,\n-96 OptionalJacobian<9, 3> C = boost::none);\n-97\n-102 void update(const Vector3& measuredAcc, const Vector3& measuredOmega,\n-103 const double dt, Matrix9* A, Matrix93* B, Matrix93* C) override;\n-104\n-108 Vector9 biasCorrectedDelta(const imuBias::ConstantBias& bias_i,\n-109 OptionalJacobian<9, 6> H = boost::none) const override;\n-110\n-111 // Compose the two pre-integrated 9D-vectors zeta01 and zeta02, with\n-derivatives\n-112 static Vector9 Compose(const Vector9& zeta01, const Vector9& zeta12,\n-113 double deltaT12,\n-114 OptionalJacobian<9, 9> H1 = boost::none,\n-115 OptionalJacobian<9, 9> H2 = boost::none);\n-116\n-119 void mergeWith(const TangentPreintegration& pim, Matrix9* H1, Matrix9* H2);\n-121\n-_\b1_\b2_\b3 virtual boost::shared_ptr _\bc_\bl_\bo_\bn_\be() const {\n-124 return boost::shared_ptr();\n-125 }\n-126\n-128\n-129private:\n-_\b1_\b3_\b1 friend class boost::serialization::access;\n-132 template\n-133 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-134 namespace bs = ::boost::serialization;\n-135 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be);\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-142 _\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-143};\n-144\n-145}\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_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b._\bh\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+_\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_\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:_\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_\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:_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn\n-Integrate on the 9D tangent space of the NavState manifold.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TangentPreintegration.h:28\n-_\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_\b:_\b:_\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\b__\bH_\b__\bb_\bi_\ba_\bs_\bO_\bm_\be_\bg_\ba_\b_\n-Matrix93 preintegrated_H_biasOmega_\n-Jacobian of preintegrated_ w.r.t. angular rate bias.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TangentPreintegration.h:37\n-_\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_\b:_\b:_\b~_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn\n-~TangentPreintegration() override\n-Virtual destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TangentPreintegration.h:57\n-_\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_\b:_\b:_\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\b_\n-Vector9 preintegrated_\n-Preintegrated navigation state, as a 9D vector on tangent space at frame i\n-Order is: theta,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TangentPreintegration.h:35\n-_\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_\b:_\b:_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn\n-TangentPreintegration()\n-Default constructor for serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TangentPreintegration.h:40\n-_\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_\b:_\b:_\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\b__\bH_\b__\bb_\bi_\ba_\bs_\bA_\bc_\bc_\b_\n-Matrix93 preintegrated_H_biasAcc_\n-Jacobian of preintegrated_ w.r.t. acceleration bias.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TangentPreintegration.h:36\n-_\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_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-virtual boost::shared_ptr< TangentPreintegration > clone() const\n-Dummy clone for MATLAB.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TangentPreintegration.h:123\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- * _\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_\bs_\be\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/a00980_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01358_source.html", "comments": ["Files 18% 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/MagFactor.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@@ -72,15 +72,15 @@\n \n
    \n
    \n \n \n
    \n \n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    MagFactor.h
    \n+
    SymbolicConditional.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/geometry/Rot2.h>
    \n-
    23#include <gtsam/geometry/Rot3.h>
    \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-
    \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+
    \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-
    \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+
    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-
    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-
    \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-
    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+
    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+
    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-
    121};
    \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-
    \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-
    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+
    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+
    Concept check for values that can be used in unit tests.
    \n+
    Typedefs for easier changing of types.
    \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+
    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-
    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+
    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+
    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+
    boost::shared_ptr< This > shared_ptr
    Overriding the shared_ptr typedef.
    Definition SymbolicFactor.h:48
    \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,244 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-MagFactor.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 6 * Authors: Frank Dellaert, 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+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_\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+_\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 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+_\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-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+_\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+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-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+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 _\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-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+_\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+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-_\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+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+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n+_\bt_\by_\bp_\be_\bs_\b._\bh\n+Typedefs for easier changing of types.\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_\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:_\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:_\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:_\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:_\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:_\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\n- * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\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 * Generated on Tue Jan 9 2024 05:51: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/a00371.js", "comments": ["Files 27% similar despite different names"], "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,14 +1,11 @@\n-var a01055 = [\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\", \"a01055.html#a51881c20dd5ecdd129cb993ea8374846\", null],\n- [\"linearExpression\", \"a01055.html#a794029fe8dfc03f67a8cb64ad05d47c9\", null],\n- [\"operator*\", \"a01055.html#a3db519caa1b7e43412c9a7e13acf8329\", null],\n- [\"operator*\", \"a01055.html#a405f3793afc2cc3173c3fbdecadb162a\", null],\n- [\"operator+\", \"a01055.html#a589e3ff8cd71e5a17ee1dcfae8b2df26\", null],\n- [\"operator-\", \"a01055.html#a9512eb02324210895442f2bf8268902d\", null]\n+var a00371 = [\n+ [\"gtsam::Range< Point3, Point3 >\", \"a03152.html\", null],\n+ [\"Point3\", \"a00371.html#aaa8ed89fd60ea4601d9de63c4811525b\", null],\n+ [\"cross\", \"a00371.html#a86bf6ed2ffb0ecc42a7deb8922f4ca4f\", null],\n+ [\"distance3\", \"a00371.html#aa42f7ec660b7353de39f9c86a26711cc\", null],\n+ [\"dot\", \"a00371.html#a7dc820e4e47218768f104b43a184a1bd\", null],\n+ [\"mean\", \"a00371.html#a300205092710091b8745c0a145da20a1\", null],\n+ [\"means\", \"a00371.html#a57f778b84bc6106471006421d289b832\", null],\n+ [\"norm3\", \"a00371.html#ac37b6f807985ffd25217e33f6136fe58\", null],\n+ [\"normalize\", \"a00371.html#abb52bb00c68909fc1147e5d112e8c2ae\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01067_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01058_source.html", "comments": ["Files 8% 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/GaussNewtonOptimizer.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@@ -72,15 +72,15 @@\n
    \n
    \n
    \n
    \n \n
    \n \n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    GaussNewtonOptimizer.h
    \n+
    ExtendedKalmanFilter.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
    \n-
    23namespace gtsam {
    \n+
    19// \\callgraph
    \n+
    20#pragma once
    \n+
    21
    \n+\n+\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+
    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-
    95}
    \n-
    Base class and parameters for nonlinear optimization algorithms.
    \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-
    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+
    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+
    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,111 +1,141 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GaussNewtonOptimizer.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-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+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-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+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-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+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-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+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:_\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+_\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 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+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- * _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\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/a01076_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01193_source.html", "comments": ["Files 6% 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/DoglegOptimizer.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-
    DoglegOptimizer.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, 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-
    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+
    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+
    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-
    40 double deltaInitial;
    \n-\n-
    42
    \n-
    43 DoglegParams() :
    \n-
    44 deltaInitial(1.0), verbosityDL(SILENT) {}
    \n-
    45
    \n-
    46 ~DoglegParams() override {}
    \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 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-
    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+
    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-
    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-
    112 GaussianFactorGraph::shared_ptr iterate() override;
    \n-
    113
    \n-
    115 const DoglegParams& params() const { return params_; }
    \n-
    116
    \n-
    118 double getDelta() const;
    \n-
    119
    \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+
    \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
    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 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+
    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-DoglegOptimizer.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, 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-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+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+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-_\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+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 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-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+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-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-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-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 double getDelta() const;\n-119\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+_\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+_\bK_\be_\by_\b._\bh\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:_\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:_\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:_\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- * _\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+ * _\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/a01079.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00275.html", "comments": ["Files 14% 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/LevenbergMarquardtParams.cpp 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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n \n \n
    \n \n-
    LevenbergMarquardtParams.cpp File Reference
    \n+Namespaces |\n+Functions
    \n+
    Cal3.cpp File Reference
    \n \n
    \n \n-

    Parameters for Levenberg-Marquardt trust-region scheme. \n+

    Common code for all calibration models. \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 Cal3 &cal)
     
    \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+

    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,24 +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-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 | _\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+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-Parameters for Levenberg-Marquardt trust-region scheme.\n+Common code for all calibration models.\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_\bP_\ba_\br_\ba_\bm_\bs_\b._\bc_\bp_\bp\n+ * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\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/a01085.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01340.html", "comments": ["Files 8% 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/LevenbergMarquardtOptimizer.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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n-
    LevenbergMarquardtOptimizer.h File Reference
    \n+
    BoundingConstraint.h File Reference
    \n
    \n
    \n \n-

    A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme. \n+

    Provides partially implemented constraints to implement bounds. \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::LevenbergMarquardtOptimizer
     This class performs Levenberg-Marquardt nonlinear optimization. More...
    struct  gtsam::BoundingConstraint1< VALUE >
     Unary inequality constraint forcing a scalar to be greater/less than a fixed threshold. 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-

    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+

    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,30 +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-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+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:_\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+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:_\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-A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.\n+Provides partially implemented constraints to implement bounds.\n Author\n- Richard Roberts\n- Frank Dellaert\n- Luca Carlone\n- Date\n- Feb 26, 2012\n+ Alex Cunningham\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+ * _\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 * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01088_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00530_source.html", "comments": ["Files 9% 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/WhiteNoiseFactor.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-
    WhiteNoiseFactor.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-
    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+
    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+
    34
    \n+\n+
    37
    \n+\n+
    40
    \n+\n+
    43 int reorderCounter_;
    \n
    44
    \n-
    45 double z_;
    \n-
    46
    \n-
    47 Key meanKey_;
    \n-
    48 Key precisionKey_;
    \n-
    49
    \n-
    50 typedef NonlinearFactor Base;
    \n+\n+
    47
    \n+
    48 public:
    \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+\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+
    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 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-
    96 WhiteNoiseFactor(double z, Key meanKey, Key precisionKey) :
    \n-
    97 Base(), z_(z), meanKey_(meanKey), precisionKey_(precisionKey) {
    \n-
    98 }
    \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-
    \n-
    105 ~WhiteNoiseFactor() override {
    \n-
    106 }
    \n-
    \n+
    105 void print(const std::string& s = "",
    \n+
    106 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
    \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+
    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-
    122
    \n-
    \n-
    124 size_t dim() const override {
    \n-
    125 return 2;
    \n-
    126 }
    \n-
    \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-
    \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-
    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+
    129};
    \n+
    130
    \n+
    131} // namespace gtsam
    \n+
    \n+
    \n+\n+
    Nonlinear hybrid factor graph that uses type erasure.
    \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::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 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-
    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,204 +1,191 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-WhiteNoiseFactor.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-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+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+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 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+_\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-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+_\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+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 _\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_\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-_\b1_\b0_\b5 _\b~_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br() override {\n-106 }\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-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+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-122\n-_\b1_\b2_\b4 size_t _\bd_\bi_\bm() const override {\n-125 return 2;\n-126 }\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-_\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-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+129};\n+130\n+131} // namespace gtsam\n+_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM_\b._\bh\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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:_\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_\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+ * _\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/a01100_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01073_source.html", "comments": ["Files 2% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n \n
    \n
    nonlinearExceptions.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@@ -117,15 +117,15 @@\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+
    23#include <gtsam/inference/Key.h>
    \n
    24
    \n
    25namespace gtsam {
    \n
    26
    \n
    \n
    33 class MarginalizeNonleafException : public std::exception {
    \n
    34 Key key_;
    \n
    35 KeyFormatter formatter_;
    \n@@ -144,23 +144,23 @@\n
    48ISAM2::update().\\n";
    \n
    49 return what_.c_str();
    \n
    50 }
    \n
    51 };
    \n
    \n
    52
    \n
    53}
    \n-\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
    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"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01121_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00677_source.html", "comments": ["Files 21% 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/LevenbergMarquardtParams.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@@ -72,15 +72,15 @@\n
    \n
    \n
    \n \n \n
    \n \n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    LevenbergMarquardtParams.h
    \n+
    LabeledSymbol.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
    \n-
    26namespace gtsam {
    \n-
    27
    \n-
    28class LevenbergMarquardtOptimizer;
    \n-
    29
    \n+
    20#pragma once
    \n+
    21
    \n+
    22#include <functional>
    \n+\n+
    24
    \n+
    25namespace gtsam {
    \n+
    26
    \n
    \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+
    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-
    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+
    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-
    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+
    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 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+
    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+
    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-
    155
    \n-
    157};
    \n-
    \n-
    158
    \n-
    159}
    \n-
    Factor Graph consisting of non-linear factors.
    \n-
    Parameters for nonlinear optimization.
    \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+
    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
    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-
    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+
    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+
    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+
    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,247 +1,189 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-LevenbergMarquardtParams.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 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-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+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-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+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-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+_\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 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+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+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-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+_\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+_\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-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_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph consisting of non-linear factors.\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+_\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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:_\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:_\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- * _\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+ * _\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 * Generated on Tue Jan 9 2024 05:51: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/a01109.html", "comments": ["Files 9% 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/GaussNewtonOptimizer.cpp 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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n \n
    \n \n-
    GaussNewtonOptimizer.cpp File Reference
    \n+
    Marginals.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
    Author
    Richard Roberts
    \n-
    Date
    Feb 26, 2012
    \n+
    Date
    May 14, 2012
    \n
    \n \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +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-GaussNewtonOptimizer.cpp File Reference\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 Author\n Richard Roberts\n Date\n- Feb 26, 2012\n+ May 14, 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._\bc_\bp_\bp\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/a01139_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01133_source.html", "comments": ["Files 15% 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.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@@ -72,15 +72,15 @@\n \n
    \n
    \n \n \n
    \n \n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    ISAM2-impl.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-
    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+
    25#pragma once
    \n+
    26
    \n+
    27#include <utility>
    \n+
    28#include <boost/bind/bind.hpp>
    \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-
    38#include <algorithm>
    \n-
    39#include <limits>
    \n-
    40#include <string>
    \n-
    41#include <utility>
    \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+
    40 _ValuesKeyValuePair(Key _key, ValueType& _value) : key(_key), value(_value) {}
    \n+
    41 };
    \n+
    \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+
    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// 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+
    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
    \n-
    71/* ************************************************************************* */
    \n+
    70 // partial specialized version for ValueType == Value
    \n+
    71 template<class CastedKeyValuePairType, class KeyValuePairType>
    \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+
    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-
    \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+
    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 // 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+
    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-
    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+
    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 // 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+
    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 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+
    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 // 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+
    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 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+
    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 // 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+
    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 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+
    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 // 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-
    The junction tree, template bodies.
    \n-\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+
    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-
    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+
    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 \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,689 +1,525 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\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+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-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+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-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-38#include \n-39#include \n-40#include \n-41#include \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+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-43namespace _\bg_\bt_\bs_\ba_\bm {\n-44\n-45/* *************************************************************************\n+43 /* *************************************************************************\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+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+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+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-_\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+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-_\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+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 // 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+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-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+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 // 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+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\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+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 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+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 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+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 }\n+274#endif\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+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 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+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 } 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+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 // 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+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 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+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 // 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-_\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-_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\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-_\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+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:_\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 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:_\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-_\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+ * 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/a01142_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01145_source.html", "comments": ["Files 24% 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/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-
    ISAM2.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// \\callgraph
    \n-
    20
    \n-
    21#pragma once
    \n-
    22
    \n-\n-\n-\n-\n-\n-\n-
    29
    \n-
    30#include <vector>
    \n+
    27#pragma once
    \n+
    28
    \n+\n+\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+
    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-
    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-
    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-
    Specialized iSAM2 Clique.
    \n-
    Class that stores extra params for ISAM2::update()
    \n-
    Factor Graph consisting of non-linear factors.
    \n-
    Class that stores detailed iSAM2 result.
    \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+
    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< FactorIndex > FactorIndices
    Define collection types:
    Definition Factor.h:34
    \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+
    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,373 +1,265 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\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+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// \\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-30#include \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-_\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+34/* *************************************************************************\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 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-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_\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-_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b._\bh\n-Class that stores detailed iSAM2 result.\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+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:_\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:_\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:_\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+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 * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bI_\bS_\bA_\bM_\b2_\b._\bh\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/a01145.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00389.html", "comments": ["Files 6% 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.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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n \n
    \n \n-
    NonlinearISAM.cpp File Reference
    \n+
    SOn-inl.h 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

    Detailed Description

    \n-
    Date
    Jan 19, 2010
    \n-
    Author
    Viorela Ila and Richard Roberts
    \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,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-NonlinearISAM.cpp File Reference\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 *\b**\b**\b**\b**\b* D\bDe\bet\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+Template implementations for SO(n)\n Author\n- Viorela Ila and Richard Roberts\n+ Frank Dellaert\n+ Date\n+ March 2019\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._\bc_\bp_\bp\n+ * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\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/a01148.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00350.html", "comments": ["Files 10% 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 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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n-
    ExpressionFactorGraph.h File Reference
    \n+
    PinholeCamera.h File Reference
    \n
    \n
    \n \n-

    Factor graph that supports adding ExpressionFactors directly. \n+

    Base class for all pinhole 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::ExpressionFactorGraph
     Factor graph that supports adding ExpressionFactors directly. More...
    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 >
     
    \n \n \n \n \n

    \n Namespaces

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

    Detailed Description

    \n-

    Factor graph that supports adding ExpressionFactors directly.

    \n-
    Author
    Frank Dellaert
    \n-
    Date
    December 2014
    \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,27 +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-ExpressionFactorGraph.h File Reference\n-Factor graph that supports adding ExpressionFactors directly. _\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:_\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+ 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 \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 that supports adding ExpressionFactors directly.\n+Base class for all pinhole cameras.\n Author\n- Frank Dellaert\n+ Yong-Dian Jian\n Date\n- December 2014\n+ Jan 27, 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_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\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 * Generated on Tue Jan 9 2024 05:51: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_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01001_source.html", "comments": ["Files 6% 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/expressionTesting.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@@ -72,15 +72,15 @@\n
    \n
    \n
    \n \n \n
    \n \n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    expressionTesting.h
    \n+
    ExpressionFactorGraph.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/nonlinear/ExpressionFactor.h>
    \n-\n-
    24#include <gtsam/base/Testable.h>
    \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-
    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+
    \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+
    48
    \n+
    50};
    \n+
    \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-
    static shared_ptr Create(size_t dim)
    Create a unit covariance noise model.
    Definition NoiseModel.h:597
    \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-
    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+
    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,74 +1,76 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-expressionTesting.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-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+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-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+_\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+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:_\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:_\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_\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_\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- * _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bT_\be_\bs_\bt_\bi_\bn_\bg_\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/a01160.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01097.html", "comments": ["Files 0% similar despite different names"], "unified_diff": "@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    NonlinearConjugateGradientOptimizer.h File Reference
    \n
    \n
    \n \n

    Simple non-linear optimizer that solves using non-preconditioned CG. \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::NonlinearConjugateGradientOptimizer
     An implementation of the nonlinear CG method using the template below. More...
     
    \n@@ -139,13 +139,13 @@\n
    Author
    Yong-Dian Jian
    \n
    Date
    June 11, 2012
    \n \n \n \n
    \n \n
    \n \n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01160_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00428_source.html", "comments": ["Files 25% 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/geometry/Quaternion.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+
    Quaternion.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 <boost/tuple/tuple.hpp>
    \n-
    24
    \n-
    25namespace gtsam {
    \n-
    26
    \n-
    \n-\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+
    26#define QUATERNION_TYPE Eigen::Quaternion<_Scalar,_Options>
    \n+
    27
    \n+
    28namespace gtsam {
    \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+
    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+
    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 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+
    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-
    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+
    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
    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+
    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+
    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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,298 +1,214 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-NonlinearConjugateGradientOptimizer.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/_\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+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+26#define QUATERNION_TYPE Eigen::Quaternion<_Scalar,_Options>\n+27\n+28namespace _\bg_\bt_\bs_\ba_\bm {\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+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 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+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+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+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 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+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-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+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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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\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+ * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\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/a01172_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00416_source.html", "comments": ["Files 11% 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/LinearContainerFactor.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-
    LinearContainerFactor.h
    \n+
    Cal3_S2.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+
    22#pragma once
    \n+
    23
    \n+
    24#include <gtsam/geometry/Cal3.h>
    \n+\n+
    26
    \n+
    27namespace gtsam {
    \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+
    \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-
    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 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-
    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+
    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+
    \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+
    79 Point2 calibrate(const Point2& p, OptionalJacobian<2, 5> Dcal = boost::none,
    \n+
    80 OptionalJacobian<2, 2> Dp = boost::none) const;
    \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+
    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+
    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-
    106 GaussianFactor::shared_ptr negateToGaussian() const;
    \n-
    107
    \n-
    111 NonlinearFactor::shared_ptr negateToNonlinear() const;
    \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-
    \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+
    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+
    126 Vector5 localCoordinates(const Cal3_S2& T2) const {
    \n+
    127 return T2.vector() - vector();
    \n+
    128 }
    \n+
    \n+
    129
    \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-
    147 boost::shared_ptr<JacobianFactor> toJacobian() const;
    \n+
    146template <>
    \n+
    147struct traits<Cal3_S2> : public internal::Manifold<Cal3_S2> {};
    \n
    148
    \n-
    150 boost::shared_ptr<HessianFactor> toHessian() const;
    \n+
    149template <>
    \n+
    150struct traits<const Cal3_S2> : public internal::Manifold<Cal3_S2> {};
    \n
    151
    \n-
    156 static NonlinearFactorGraph ConvertLinearGraph(const GaussianFactorGraph& linear_graph,
    \n-
    157 const Values& linearizationPoint = Values());
    \n-
    158
    \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+
    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-
    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+
    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-
    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-
    Definition NonlinearFactorGraph.h:55
    \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+
    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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,185 +1,186 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-LinearContainerFactor.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-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+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-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+_\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-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 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-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+43\n+_\b4_\b5 _\bC_\ba_\bl_\b3_\b__\bS_\b2() = default;\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+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-_\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+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+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-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+_\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-_\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+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_\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+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-147 boost::shared_ptr toJacobian() const;\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-150 boost::shared_ptr toHessian() const;\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-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-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+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:_\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:_\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:_\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-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:_\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_\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+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- * _\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_\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/a01187.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00782.html", "comments": ["Files 13% 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/TranslationRecovery.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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n-
    TranslationRecovery.h File Reference
    \n+
    GaussianBayesTree.h File Reference
    \n
    \n
    \n \n-

    Recovering translations in an epipolar graph when rotations are given. \n+

    Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree. \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 Classes

    class  gtsam::TranslationRecovery
    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...
     
    \n \n \n \n \n

    \n Namespaces

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

    Detailed Description

    \n-

    Recovering translations in an epipolar graph when rotations are given.

    \n-
    Author
    Frank Dellaert, Akshay Krishnan
    \n-
    Date
    March 2020
    \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,26 +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-TranslationRecovery.h File Reference\n-Recovering translations in an epipolar graph when rotations are given. _\bM_\bo_\br_\be_\b._\b._\b.\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-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by\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 \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-Recovering translations in an epipolar graph when rotations are given.\n+Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.\n+GaussianBayesTree\n Author\n- Frank Dellaert, Akshay Krishnan\n- Date\n- March 2020\n+ Frank Dellaert\n+ Richard Roberts\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._\bh\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 * Generated on Tue Jan 9 2024 05:51: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_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00371_source.html", "comments": ["Files 13% 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/TranslationRecovery.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@@ -72,15 +72,15 @@\n \n
    \n
    \n \n \n
    \n \n
    No Matches
    \n
    \n \n \n \n \n
    \n-
    TranslationRecovery.h
    \n+
    Point3.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-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-
    19#include <gtsam/geometry/Unit3.h>
    \n-\n-\n-\n+
    20// \\callgraph
    \n+
    21
    \n+
    22#pragma once
    \n
    23
    \n-
    24#include <map>
    \n-
    25#include <set>
    \n-
    26#include <utility>
    \n-
    27#include <vector>
    \n-
    28
    \n-
    29namespace gtsam {
    \n-
    30
    \n-
    31// Set up an optimization problem for the unknown translations Ti in the world
    \n-
    32// coordinate frame, given the known camera attitudes wRi with respect to the
    \n-
    33// world frame, and a set of (noisy) translation directions of type Unit3,
    \n-
    34// w_aZb. The measurement equation is
    \n-
    35// w_aZb = Unit3(Tb - Ta) (1)
    \n-
    36// i.e., w_aZb is the translation direction from frame A to B, in world
    \n-
    37// coordinates. Although Unit3 instances live on a manifold, following
    \n-
    38// Wilson14eccv_1DSfM.pdf error we compute the *chordal distance* in the
    \n-
    39// ambient world coordinate frame.
    \n-
    40//
    \n-
    41// It is clear that we cannot recover the scale, nor the absolute position,
    \n-
    42// so the gauge freedom in this case is 3 + 1 = 4. We fix these by taking fixing
    \n-
    43// the translations Ta and Tb associated with the first measurement w_aZb,
    \n-
    44// clamping them to their initial values as given to this method. If no initial
    \n-
    45// values are given, we use the origin for Tb and set Tb to make (1) come
    \n-
    46// through, i.e.,
    \n-
    47// Tb = s * wRa * Point3(w_aZb) (2)
    \n-
    48// where s is an arbitrary scale that can be supplied, default 1.0. Hence, two
    \n-
    49// versions are supplied below corresponding to whether we have initial values
    \n-
    50// or not.
    \n-
    \n-\n-
    52 public:
    \n-
    53 using KeyPair = std::pair<Key, Key>;
    \n-
    54 using TranslationEdges = std::vector<BinaryMeasurement<Unit3>>;
    \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+
    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-
    56 private:
    \n-
    57 // Translation directions between camera pairs.
    \n-
    58 TranslationEdges relativeTranslations_;
    \n-
    59
    \n-
    60 // Parameters.
    \n-\n-
    62
    \n-
    63 public:
    \n-
    \n-\n-
    70 : lmParams_(lmParams) {}
    \n-
    \n-
    71
    \n-\n-
    76
    \n-\n-
    85 const std::vector<BinaryMeasurement<Unit3>> &relativeTranslations) const;
    \n-
    86
    \n-
    102 void addPrior(
    \n-
    103 const std::vector<BinaryMeasurement<Unit3>> &relativeTranslations,
    \n-
    104 const double scale,
    \n-
    105 const std::vector<BinaryMeasurement<Point3>> &betweenTranslations,
    \n-\n-
    107 const SharedNoiseModel &priorNoiseModel =
    \n-
    108 noiseModel::Isotropic::Sigma(3, 0.01)) const;
    \n-
    109
    \n-\n-
    122 const std::vector<BinaryMeasurement<Unit3>> &relativeTranslations,
    \n-
    123 const std::vector<BinaryMeasurement<Point3>> &betweenTranslations,
    \n-
    124 std::mt19937 *rng, const Values &initialValues = Values()) const;
    \n-
    125
    \n-\n-
    137 const std::vector<BinaryMeasurement<Unit3>> &relativeTranslations,
    \n-
    138 const std::vector<BinaryMeasurement<Point3>> &betweenTranslations,
    \n-
    139 const Values &initialValues = Values()) const;
    \n-
    140
    \n-
    159 Values run(
    \n-
    160 const TranslationEdges &relativeTranslations, const double scale = 1.0,
    \n-
    161 const std::vector<BinaryMeasurement<Point3>> &betweenTranslations = {},
    \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 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+
    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+
    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-
    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-
    Definition TranslationRecovery.h:51
    \n-
    NonlinearFactorGraph buildGraph(const std::vector< BinaryMeasurement< Unit3 > > &relativeTranslations) const
    Build the factor graph to do the optimization.
    Definition TranslationRecovery.cpp:99
    \n-
    static TranslationEdges SimulateMeasurements(const Values &poses, const std::vector< KeyPair > &edges)
    Simulate translation direction measurements.
    Definition TranslationRecovery.cpp:216
    \n-
    TranslationRecovery()=default
    Default constructor.
    \n-
    Values run(const TranslationEdges &relativeTranslations, const double scale=1.0, const std::vector< BinaryMeasurement< Point3 > > &betweenTranslations={}, const Values &initialValues=Values()) const
    Build and optimize factor graph.
    Definition TranslationRecovery.cpp:177
    \n-
    void addPrior(const std::vector< BinaryMeasurement< Unit3 > > &relativeTranslations, const double scale, const std::vector< BinaryMeasurement< Point3 > > &betweenTranslations, NonlinearFactorGraph *graph, const SharedNoiseModel &priorNoiseModel=noiseModel::Isotropic::Sigma(3, 0.01)) const
    Add 3 factors to the graph:
    Definition TranslationRecovery.cpp:111
    \n-
    TranslationRecovery(const LevenbergMarquardtParams &lmParams)
    Construct a new Translation Recovery object.
    Definition TranslationRecovery.h:69
    \n-
    Values initializeRandomly(const std::vector< BinaryMeasurement< Unit3 > > &relativeTranslations, const std::vector< BinaryMeasurement< Point3 > > &betweenTranslations, std::mt19937 *rng, const Values &initialValues=Values()) const
    Create random initial translations.
    Definition TranslationRecovery.cpp:137
    \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,177 +1,140 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-TranslationRecovery.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-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-19#include \n-20#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-21#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-22#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+20// \\callgraph\n+21\n+22#pragma once\n 23\n-24#include \n-25#include \n-26#include \n-27#include \n-28\n-29namespace _\bg_\bt_\bs_\ba_\bm {\n-30\n-31// Set up an optimization problem for the unknown translations Ti in the\n-world\n-32// coordinate frame, given the known camera attitudes wRi with respect to the\n-33// world frame, and a set of (noisy) translation directions of type Unit3,\n-34// w_aZb. The measurement equation is\n-35// w_aZb = Unit3(Tb - Ta) (1)\n-36// i.e., w_aZb is the translation direction from frame A to B, in world\n-37// coordinates. Although Unit3 instances live on a manifold, following\n-38// Wilson14eccv_1DSfM.pdf error we compute the *chordal distance* in the\n-39// ambient world coordinate frame.\n-40//\n-41// It is clear that we cannot recover the scale, nor the absolute position,\n-42// so the gauge freedom in this case is 3 + 1 = 4. We fix these by taking\n-fixing\n-43// the translations Ta and Tb associated with the first measurement w_aZb,\n-44// clamping them to their initial values as given to this method. If no\n-initial\n-45// values are given, we use the origin for Tb and set Tb to make (1) come\n-46// through, i.e.,\n-47// Tb = s * wRa * Point3(w_aZb) (2)\n-48// where s is an arbitrary scale that can be supplied, default 1.0. Hence,\n-two\n-49// versions are supplied below corresponding to whether we have initial\n-values\n-50// or not.\n-_\b5_\b1class _\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by {\n-52 public:\n-53 using KeyPair = std::pair;\n-54 using TranslationEdges = std::vector>;\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+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-56 private:\n-57 // Translation directions between camera pairs.\n-58 TranslationEdges relativeTranslations_;\n-59\n-60 // Parameters.\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 lmParams_;\n-62\n-63 public:\n-_\b6_\b9 _\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by(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 &lmParams)\n-70 : lmParams_(lmParams) {}\n-71\n-_\b7_\b5 _\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by() = default;\n-76\n-84 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bb_\bu_\bi_\bl_\bd_\bG_\br_\ba_\bp_\bh(\n-85 const std::vector<_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b<_\bU_\bn_\bi_\bt_\b3_\b>> &relativeTranslations) const;\n-86\n-102 void _\ba_\bd_\bd_\bP_\br_\bi_\bo_\br(\n-103 const std::vector<_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b<_\bU_\bn_\bi_\bt_\b3_\b>> &relativeTranslations,\n-104 const double scale,\n-105 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-106 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh *graph,\n-107 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &priorNoiseModel =\n-108 _\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(3, 0.01)) const;\n-109\n-121 _\bV_\ba_\bl_\bu_\be_\bs _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bR_\ba_\bn_\bd_\bo_\bm_\bl_\by(\n-122 const std::vector<_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b<_\bU_\bn_\bi_\bt_\b3_\b>> &relativeTranslations,\n-123 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-124 std::mt19937 *rng, const _\bV_\ba_\bl_\bu_\be_\bs &initialValues = _\bV_\ba_\bl_\bu_\be_\bs()) const;\n-125\n-136 _\bV_\ba_\bl_\bu_\be_\bs _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bR_\ba_\bn_\bd_\bo_\bm_\bl_\by(\n-137 const std::vector<_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b<_\bU_\bn_\bi_\bt_\b3_\b>> &relativeTranslations,\n-138 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-139 const _\bV_\ba_\bl_\bu_\be_\bs &initialValues = _\bV_\ba_\bl_\bu_\be_\bs()) const;\n-140\n-159 _\bV_\ba_\bl_\bu_\be_\bs _\br_\bu_\bn(\n-160 const TranslationEdges &relativeTranslations, const double scale = 1.0,\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-_\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+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+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:_\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_\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:_\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:_\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:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TranslationRecovery.h:51\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by_\b:_\b:_\bb_\bu_\bi_\bl_\bd_\bG_\br_\ba_\bp_\bh\n-NonlinearFactorGraph buildGraph(const std::vector< BinaryMeasurement< Unit3 > >\n-&relativeTranslations) const\n-Build the factor graph to do the optimization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TranslationRecovery.cpp:99\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by_\b:_\b:_\bS_\bi_\bm_\bu_\bl_\ba_\bt_\be_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-static TranslationEdges SimulateMeasurements(const Values &poses, const std::\n-vector< KeyPair > &edges)\n-Simulate translation direction measurements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TranslationRecovery.cpp:216\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by\n-TranslationRecovery()=default\n-Default constructor.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by_\b:_\b:_\br_\bu_\bn\n-Values run(const TranslationEdges &relativeTranslations, const double\n-scale=1.0, const std::vector< BinaryMeasurement< Point3 > >\n-&betweenTranslations={}, const Values &initialValues=Values()) const\n-Build and optimize factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TranslationRecovery.cpp:177\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by_\b:_\b:_\ba_\bd_\bd_\bP_\br_\bi_\bo_\br\n-void addPrior(const std::vector< BinaryMeasurement< Unit3 > >\n-&relativeTranslations, const double scale, const std::vector<\n-BinaryMeasurement< Point3 > > &betweenTranslations, NonlinearFactorGraph\n-*graph, const SharedNoiseModel &priorNoiseModel=noiseModel::Isotropic::Sigma(3,\n-0.01)) const\n-Add 3 factors to the graph:\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TranslationRecovery.cpp:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by\n-TranslationRecovery(const LevenbergMarquardtParams &lmParams)\n-Construct a new Translation Recovery object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TranslationRecovery.h:69\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bR_\ba_\bn_\bd_\bo_\bm_\bl_\by\n-Values initializeRandomly(const std::vector< BinaryMeasurement< Unit3 > >\n-&relativeTranslations, const std::vector< BinaryMeasurement< Point3 > >\n-&betweenTranslations, std::mt19937 *rng, const Values &initialValues=Values())\n-const\n-Create random initial translations.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TranslationRecovery.cpp:137\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- * _\bs_\bf_\bm\n- * _\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by_\b._\bh\n+ * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\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/a01190_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00500_source.html", "comments": ["Files 4% 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/TranslationFactor.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-
    TranslationFactor.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-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-
    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+
    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+\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-
    3D Point
    \n-\n-
    Non-linear factor base classes.
    \n+
    Factor graph with utilities for hybrid factors.
    \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+
    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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,113 +1,109 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-TranslationFactor.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-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-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+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+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-_\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+_\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:_\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:_\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\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+ * _\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/a01202_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00968_source.html", "comments": ["Files 26% 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/navigation/Scenario.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+
    Scenario.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+
    18#pragma once
    \n+\n+\n+
    21
    \n+
    22namespace gtsam {
    \n+
    23
    \n+
    \n+
    25class Scenario {
    \n+
    26 public:
    \n+
    28 virtual ~Scenario() {}
    \n
    29
    \n-
    30namespace gtsam {
    \n+
    30 // Quantities a Scenario needs to specify:
    \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+
    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-
    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+
    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-
    94
    \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-
    \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+
    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-
    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+
    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-
    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+
    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+
    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
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,248 +1,213 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SfmTrack.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-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+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+_\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-30namespace _\bg_\bt_\bs_\ba_\bm {\n+30 // Quantities a Scenario needs to specify:\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+_\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-_\b4_\b8 std::vector _\bs_\bi_\bf_\bt_\bI_\bn_\bd_\bi_\bc_\be_\bs;\n-49\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-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+_\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+}\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-_\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+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+_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh\n+Navigation state composing of attitude, position, and velocity.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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:_\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:_\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:_\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\n- * _\bs_\bf_\bm\n- * _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b._\bh\n+ * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\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/a01217.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01232.js", "comments": ["Files 25% similar despite different names"], "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,12 +1,10 @@\n-var a01217 = [\n- [\"gtsam::traits< SfmData >\", \"a04708.html\", null],\n- [\"SfmCamera\", \"a01217.html#acab0207730cf78822bdf274b50739d31\", null],\n- [\"gtsam2openGL\", \"a01217.html#ad632ed56581bf174eef379bbe272a06a\", null],\n- [\"gtsam2openGL\", \"a01217.html#aaff07ef70e6161c4d1d2bd7546ff91e6\", null],\n- [\"initialCamerasAndPointsEstimate\", \"a01217.html#aba34ed4a103d9057536ee5cac27cfdef\", null],\n- [\"initialCamerasEstimate\", \"a01217.html#ad8b55993353cbab0fde06b872783fe92\", null],\n- [\"openGL2gtsam\", \"a01217.html#ade6eca65dc0168a65f641961ca97924c\", null],\n- [\"readBal\", \"a01217.html#a710ec0322f4a2c0883841b58516b7a6a\", null],\n- [\"writeBAL\", \"a01217.html#a43c2c2ead4fddd79d9c3f9a5bfa764ae\", null],\n- [\"writeBALfromValues\", \"a01217.html#a4a2433812cf34ee359e3ec99f4f5bcc4\", null]\n+var a01232 = [\n+ [\"gtsam2openGL\", \"a01232.html#ad632ed56581bf174eef379bbe272a06a\", null],\n+ [\"gtsam2openGL\", \"a01232.html#aaff07ef70e6161c4d1d2bd7546ff91e6\", null],\n+ [\"initialCamerasAndPointsEstimate\", \"a01232.html#aba34ed4a103d9057536ee5cac27cfdef\", null],\n+ [\"initialCamerasEstimate\", \"a01232.html#ad8b55993353cbab0fde06b872783fe92\", null],\n+ [\"openGL2gtsam\", \"a01232.html#ade6eca65dc0168a65f641961ca97924c\", null],\n+ [\"readBal\", \"a01232.html#a710ec0322f4a2c0883841b58516b7a6a\", null],\n+ [\"writeBAL\", \"a01232.html#a43c2c2ead4fddd79d9c3f9a5bfa764ae\", null],\n+ [\"writeBALfromValues\", \"a01232.html#a4a2433812cf34ee359e3ec99f4f5bcc4\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01235.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00671.html", "comments": ["Files 10% 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/FrobeniusFactor.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-
    FrobeniusFactor.cpp File Reference
    \n+
    BayesTree-inst.h File Reference
    \n
    \n
    \n \n-

    Various factors that minimize some Frobenius norm. \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

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

    Various factors that minimize some Frobenius norm.

    \n-
    Date
    March 2019
    \n-
    Author
    Frank Dellaert
    \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,29 +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-Various factors that minimize some Frobenius norm. _\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-_\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+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-Various factors that minimize some Frobenius norm.\n- Date\n- March 2019\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- * _\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+ * _\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/a01259.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01406.html", "comments": ["Files 13% 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.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/precompiled_header.cpp 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- \n-
    EssentialMatrixConstraint.cpp File Reference
    \n+
    precompiled_header.cpp File Reference
    \n
    \n
    \n-\n-\n-\n-\n-\n-

    \n-Namespaces

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

    We need exactly one compilation unit that includes the precompiled headers. \n+More...

    \n

    Detailed Description

    \n-
    Author
    Frank Dellaert
    \n-
    \n-Pablo Alcantarilla
    \n-
    Date
    Jan 5, 2014
    \n+

    We need exactly one compilation unit that includes the precompiled headers.

    \n+
    Author
    Frank Dellaert
    \n+
    Date
    November 2018
    \n
    \n
    \n \n
    \n \n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,21 +1,17 @@\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-EssentialMatrixConstraint.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+precompiled_header.cpp File Reference\n+We need exactly one compilation unit that includes the precompiled headers.\n+_\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+We need exactly one compilation unit that includes the precompiled headers.\n Author\n Frank Dellaert\n- Pablo Alcantarilla\n Date\n- Jan 5, 2014\n+ November 2018\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._\bc_\bp_\bp\n+ * _\bp_\br_\be_\bc_\bo_\bm_\bp_\bi_\bl_\be_\bd_\b__\bh_\be_\ba_\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/a01265_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01052_source.html", "comments": ["Files 10% 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/JacobianFactorQR.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-
    JacobianFactorQR.h
    \n+
    GraphvizFormatting.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+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+
    11
    \n+
    19#pragma once
    \n+
    20
    \n+\n
    22
    \n-
    23 typedef RegularJacobianFactor<D> Base;
    \n-
    24 typedef Eigen::Matrix<double, ZDim, D> MatrixZD;
    \n-
    25
    \n-
    26public:
    \n+
    23namespace gtsam {
    \n+
    24
    \n+
    25class Values;
    \n+
    26class Value;
    \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+
    \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+
    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
    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::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+
    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,129 +1,110 @@\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+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-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#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+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 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+23namespace _\bg_\bt_\bs_\ba_\bm {\n+24\n+25class _\bV_\ba_\bl_\bu_\be_\bs;\n+26class Value;\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+_\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+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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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:_\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 JacobianFactorQR.h:31\n-_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh\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- * _\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+ * _\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/a01268.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00149.html", "comments": ["Files 19% 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/SmartFactorBase.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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n-
    SmartFactorBase.h File Reference
    \n+
    OptionalJacobian.h File Reference
    \n
    \n
    \n \n-

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

    Special class for optional Jacobian arguments. \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

    class  gtsam::SmartFactorBase< CAMERA >
     Base class for smart factors. More...
    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-

    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+

    Special class for optional Jacobian arguments.

    \n+
    Author
    Frank Dellaert
    \n
    \n-Chris Beall
    \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,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-SmartFactorBase.h File Reference\n-Base class to create smart factors on poses or cameras. _\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:_\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:_\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-Base class to create smart factors on poses or cameras.\n+Special class for optional Jacobian arguments.\n Author\n- Luca Carlone\n- Antoni Rosinol\n- Zsolt Kira\n Frank Dellaert\n- Chris Beall\n+ Natesh Srinivasan\n+ Date\n+ Nov 28, 2014\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+ * _\bb_\ba_\bs_\be\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/a01289_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00698_source.html", "comments": ["Files 6% 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/inference/ISAM.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+
    ISAM.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-
    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+
    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-
    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+
    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-
    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+
    77} // namespace gtsam
    \n+
    Included from all GTSAM files.
    \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+
    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,77 +1,90 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-lago.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-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+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-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+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-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-_\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+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-_\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:_\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- * _\bs_\bl_\ba_\bm\n- * _\bl_\ba_\bg_\bo_\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/a01313.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00962.html", "comments": ["Files 15% 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/SmartProjectionPoseFactor.h 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@@ -67,15 +67,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n \n \n
    \n \n-
    SmartProjectionPoseFactor.h File Reference
    \n+Namespaces |\n+Functions
    \n+
    ImuFactor.cpp File Reference
    \n \n
    \n-\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-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+\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-

    Smart factor on poses, assuming camera calibration is fixed.

    \n-
    Author
    Luca Carlone
    \n+
    Author
    Luca Carlone
    \n+
    \n+Stephen Williams
    \n+
    \n+Richard Roberts
    \n+
    \n+Vadim Indelman
    \n
    \n-Chris Beall
    \n+David Jensen \n
    \n-Zsolt Kira
    \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-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- 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+_\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+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-Smart factor on poses, assuming camera calibration is fixed.\n Author\n Luca Carlone\n- Chris Beall\n- Zsolt Kira\n+ Stephen Williams\n+ Richard Roberts\n+ Vadim Indelman\n+ David Jensen\n+ Frank Dellaert\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+ * _\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 * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01328_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00491_source.html", "comments": ["Files 18% 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/InitializePose.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-
    InitializePose.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
    \n-\n-\n-\n-\n-\n+
    20#pragma once
    \n+
    21
    \n+
    22#include <gtsam/base/Testable.h>
    \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+
    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-
    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+
    42
    \n+\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-
    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-
    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+
    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+
    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+
    Linearized Hybrid factor graph that uses type erasure.
    \n+
    Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.
    \n+
    Incremental update functionality (iSAM) for BayesTree.
    \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+
    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,124 +1,99 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-InitializePose.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\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+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-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+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-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+42\n+44 _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM();\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-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 // 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+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+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_\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_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.\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\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:_\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_\bl_\ba_\bm\n- * _\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bP_\bo_\bs_\be_\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/a01346_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00845_source.html", "comments": ["Files 5% 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/SymbolicISAM.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianISAM.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-
    SymbolicISAM.h
    \n+
    GaussianISAM.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-
    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+\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+\n+
    31 typedef GaussianISAM This;
    \n+
    32 typedef boost::shared_ptr<This> shared_ptr;
    \n+
    33
    \n+
    36
    \n+\n+
    39
    \n+
    41 GaussianISAM(const GaussianBayesTree& bayesTree);
    \n+
    42
    \n+
    44
    \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
    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 that represents the connectivity between variables but is not associated with any probab...
    Definition SymbolicBayesTree.h:51
    \n-
    Definition SymbolicISAM.h:27
    \n+
    A Bayes tree representing a Gaussian density.
    Definition GaussianBayesTree.h:52
    \n+
    Definition GaussianISAM.h:28
    \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-SymbolicISAM.h\n+GaussianISAM.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,47 +16,60 @@\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+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/_\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_\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+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+_\b2_\b7 class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM : public _\bI_\bS_\bA_\bM\n+28 {\n+29 public:\n+30 typedef _\bI_\bS_\bA_\bM_\b<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b> _\bB_\ba_\bs_\be;\n+31 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM _\bT_\bh_\bi_\bs;\n+32 typedef boost::shared_ptr shared_ptr;\n+33\n+36\n+38 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM();\n+39\n+41 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be& bayesTree);\n+42\n+44\n+45 };\n+46\n+48 template <>\n+_\b4_\b9 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+50\n+51}\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\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_\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:_\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:_\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:_\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_\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\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+ * _\bl_\bi_\bn_\be_\ba_\br\n+ * _\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/a01355_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00245_source.html", "comments": ["Files 9% 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/SymbolicJunctionTree.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-
    SymbolicJunctionTree.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
    19#pragma once
    \n
    20
    \n-\n-\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-
    65 SymbolicJunctionTree(const SymbolicEliminationTree& eliminationTree);
    \n-
    66 };
    \n-
    \n-
    67
    \n-\n-
    70}
    \n-
    The junction tree.
    \n-\n-\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+
    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-
    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+
    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,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SymbolicJunctionTree.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@@ -16,64 +16,76 @@\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_\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+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-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-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_\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_\bT_\br_\be_\be_\b._\bh\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+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_\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 _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing 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_\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+_\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 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+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 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+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- * _\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+ * _\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/a01361_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01370_source.html", "comments": ["Files 1% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
    \n
    \n \n \n
    \n \n
    \n
    \n \n
    \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 SymbolicEliminationTree :
    \n
    28 public EliminationTree<SymbolicBayesNet, SymbolicFactorGraph>
    \n
    29 {
    \n@@ -153,17 +153,17 @@\n
    63template<>
    \n
    \n
    64struct traits<SymbolicEliminationTree> : public Testable<SymbolicEliminationTree> {
    \n
    65};
    \n
    \n
    66
    \n
    67} //\\ namespace gtsam
    \n-\n-\n-\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@@ -173,13 +173,13 @@\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"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01403_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01244_source.html", "comments": ["Files 24% 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/precompiled_header.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-
    precompiled_header.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-
    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-
    26#include <gtsam/base/chartTesting.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-
    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-
    55#include <gtsam/base/VectorSpace.h>
    \n-\n-
    57
    \n-
    58
    \n-
    Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained Cholesky.
    \n-
    Base class and basic functions for Lie types.
    \n-
    Provides additional testing facilities for common data structures.
    \n-
    Special class for optional Jacobian arguments.
    \n-
    Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.
    \n-
    The base class for any variable that can be optimized or used in a factor.
    \n-\n-
    An easy way to control which allocator is used for Fast* collections.
    \n-
    typedef and functions to augment Eigen's VectorXd
    \n-
    A thin wrapper around std::map that uses boost's fast_pool_allocator.
    \n-
    Provides convenient mappings of common member functions for testing.
    \n-
    Concept check for values that can be used in unit tests.
    \n-
    A faster implementation for DSF, which uses vector rather than btree.
    \n-
    Timing utilities.
    \n-
    Group product of two Lie Groups.
    \n-
    Concept check class for variable types with Group properties.
    \n-
    A thin wrapper around std::vector that uses a custom allocator.
    \n-
    Base class and basic functions for Manifold types.
    \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-
    A matrix with column blocks of pre-defined sizes.
    \n-
    Typedefs for easier changing of types.
    \n-
    Global debugging flags.
    \n-
    Convenience functions for serializing data structures via boost.serialization.
    \n-
    Access to matrices via blocks of pre-defined sizes.
    \n-
    typedef and functions to augment Eigen's MatrixXd
    \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+
    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+
    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,115 +1,116 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-precompiled_header.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// 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 <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n-26#include \n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\b._\bh>\n-28#include \n-29#include \n-30#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bd_\be_\bb_\bu_\bg_\b._\bh>\n-31#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bD_\bS_\bF_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-32#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-33#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh>\n-34#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh>\n-35#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b._\bh>\n-36#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-37#include \n-38#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bG_\br_\bo_\bu_\bp_\b._\bh>\n-39#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n-40#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bl_\bi_\be_\bP_\br_\bo_\bx_\bi_\be_\bs_\b._\bh>\n-41#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n-42#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n-43#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-44#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b._\bh>\n-45#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-46#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_\bT_\be_\bs_\bt_\bH_\be_\bl_\bp_\be_\br_\bs_\b._\bh>\n-47#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-48#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-49#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\bA_\bs_\bs_\be_\br_\bt_\bi_\bo_\bn_\bs_\b._\bh>\n-50#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-51#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh>\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-_\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_\b._\bh\n-Base class and basic functions for Lie 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-_\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-_\bV_\ba_\bl_\bu_\be_\b._\bh\n-The base class for any variable that can be optimized or used in a factor.\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-_\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-_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-typedef and functions to augment Eigen's VectorXd\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-_\bl_\bi_\be_\bP_\br_\bo_\bx_\bi_\be_\bs_\b._\bh\n-Provides convenient mappings of common member functions for testing.\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_\bS_\bF_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-A faster implementation for DSF, which uses vector rather than btree.\n-_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n-Timing utilities.\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-_\bG_\br_\bo_\bu_\bp_\b._\bh\n-Concept check class for variable types with Group properties.\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_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n-Base class and basic functions for Manifold types.\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-_\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-_\bt_\by_\bp_\be_\bs_\b._\bh\n-Typedefs for easier changing of types.\n-_\bd_\be_\bb_\bu_\bg_\b._\bh\n-Global debugging flags.\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-_\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-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\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+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:_\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- * _\bp_\br_\be_\bc_\bo_\bm_\bp_\bi_\bl_\be_\bd_\b__\bh_\be_\ba_\bd_\be_\br_\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"}]}]}]}]}]}