-
Notifications
You must be signed in to change notification settings - Fork 2
/
development.html
962 lines (926 loc) · 105 KB
/
development.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
<!doctype html>
<html class="no-js" lang="en" data-content_root="">
<head><meta charset="utf-8"/>
<meta name="viewport" content="width=device-width,initial-scale=1"/>
<meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta property="og:title" content="Development Guide" />
<meta property="og:type" content="website" />
<meta property="og:url" content="development.html" />
<meta property="og:site_name" content="symforce" />
<meta property="og:description" content="Guide for how to build, configure, and develop SymForce. Organization: SymForce aims to follow Python standards. The core symforce package lives in the equivalently named subdirectory at the top le..." />
<meta property="og:image" content="https://symforce.org/docs/static/images/symforce_banner.png" />
<meta property="og:image:alt" content="symforce" />
<meta name="description" content="Guide for how to build, configure, and develop SymForce. Organization: SymForce aims to follow Python standards. The core symforce package lives in the equivalently named subdirectory at the top le..." />
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="SymPy Tutorial" href="tutorials/sympy_tutorial.html" /><link rel="prev" title="SymForce Home" href="index.html" />
<link rel="shortcut icon" href="_static/favicon.ico"/><!-- Generated with Sphinx 7.1.2 and Furo 2024.01.29 -->
<title>Development Guide - SymForce</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=a746c00c" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=135e06be" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=36a5483c" />
<link rel="stylesheet" type="text/css" href="_static/css/custom.css?v=1ddbf0f8" />
<style>
body {
--color-code-background: #f8f8f8;
--color-code-foreground: black;
}
@media not print {
body[data-theme="dark"] {
--color-code-background: #202020;
--color-code-foreground: #d0d0d0;
}
@media (prefers-color-scheme: dark) {
body:not([data-theme="light"]) {
--color-code-background: #202020;
--color-code-foreground: #d0d0d0;
}
}
}
</style></head>
<body>
<script>
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
</script>
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<symbol id="svg-toc" viewBox="0 0 24 24">
<title>Contents</title>
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
</svg>
</symbol>
<symbol id="svg-menu" viewBox="0 0 24 24">
<title>Menu</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
<line x1="3" y1="12" x2="21" y2="12"></line>
<line x1="3" y1="6" x2="21" y2="6"></line>
<line x1="3" y1="18" x2="21" y2="18"></line>
</svg>
</symbol>
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
<title>Expand</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
<polyline points="9 18 15 12 9 6"></polyline>
</svg>
</symbol>
<symbol id="svg-sun" viewBox="0 0 24 24">
<title>Light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</symbol>
<symbol id="svg-moon" viewBox="0 0 24 24">
<title>Dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
</svg>
</symbol>
<symbol id="svg-sun-half" viewBox="0 0 24 24">
<title>Auto light/dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<circle cx="12" cy="12" r="9" />
<path d="M13 12h5" />
<path d="M13 15h4" />
<path d="M13 18h1" />
<path d="M13 9h4" />
<path d="M13 6h1" />
</svg>
</symbol>
</svg>
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
<label class="overlay sidebar-overlay" for="__navigation">
<div class="visually-hidden">Hide navigation sidebar</div>
</label>
<label class="overlay toc-overlay" for="__toc">
<div class="visually-hidden">Hide table of contents sidebar</div>
</label>
<div class="page">
<header class="mobile-header">
<div class="header-left">
<label class="nav-overlay-icon" for="__navigation">
<div class="visually-hidden">Toggle site navigation sidebar</div>
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
</label>
</div>
<div class="header-center">
<a href="index.html"><div class="brand">SymForce</div></a>
</div>
<div class="header-right">
<div class="theme-toggle-container theme-toggle-header">
<button class="theme-toggle">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button>
</div>
<label class="toc-overlay-icon toc-header-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label>
</div>
</header>
<aside class="sidebar-drawer">
<div class="sidebar-container">
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
<div class="sidebar-logo-container">
<img class="sidebar-logo only-light" src="_static/images/symforce vertical dark.svg" alt="Light Logo"/>
<img class="sidebar-logo only-dark" src="_static/images/symforce vertical.svg" alt="Dark Logo"/>
</div>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
<input type="hidden" name="check_keywords" value="yes">
<input type="hidden" name="area" value="default">
</form>
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
<ul class="current">
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Development Guide</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Tutorials</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="tutorials/sympy_tutorial.html">SymPy Tutorial</a></li>
<li class="toctree-l1"><a class="reference internal" href="tutorials/geometry_tutorial.html">Geometry Tutorial</a></li>
<li class="toctree-l1"><a class="reference internal" href="tutorials/ops_tutorial.html">Ops Tutorial</a></li>
<li class="toctree-l1"><a class="reference internal" href="tutorials/cameras_tutorial.html">Cameras Tutorial</a></li>
<li class="toctree-l1"><a class="reference internal" href="tutorials/values_tutorial.html">Values Tutorial</a></li>
<li class="toctree-l1"><a class="reference internal" href="tutorials/codegen_tutorial.html">Codegen Tutorial</a></li>
<li class="toctree-l1"><a class="reference internal" href="tutorials/optimization_tutorial.html">Optimization Tutorial</a></li>
<li class="toctree-l1"><a class="reference internal" href="tutorials/epsilon_tutorial.html">Epsilon Tutorial</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Examples</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="examples/bundle_adjustment/README.html">Bundle Adjustment</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples/bundle_adjustment_fixed_size/README.html">Fixed Size Bundle Adjustment</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples/bundle_adjustment_in_the_large/README.html">Bundle-Adjustment-in-the-Large</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples/custom_factor_generation/README.html">Custom Factor Generation</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples/robot_2d_localization/README.html">Robot 2D Localization</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples/robot_3d_localization/README.html">Robot 3D Localization</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">symforce Reference</span></p>
<ul>
<li class="toctree-l1 has-children"><a class="reference internal" href="api/symforce.html">symforce package</a><input class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><div class="visually-hidden">Toggle navigation of symforce package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l2 has-children"><a class="reference internal" href="api/symforce.benchmarks.html">symforce.benchmarks package</a><input class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><div class="visually-hidden">Toggle navigation of symforce.benchmarks package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l3 has-children"><a class="reference internal" href="api/symforce.benchmarks.inverse_compose_jacobian.html">symforce.benchmarks.inverse_compose_jacobian package</a><input class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" role="switch" type="checkbox"/><label for="toctree-checkbox-3"><div class="visually-hidden">Toggle navigation of symforce.benchmarks.inverse_compose_jacobian package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.benchmarks.inverse_compose_jacobian.generate_inverse_compose_jacobian.html">symforce.benchmarks.inverse_compose_jacobian.generate_inverse_compose_jacobian module</a></li>
</ul>
</li>
<li class="toctree-l3 has-children"><a class="reference internal" href="api/symforce.benchmarks.matrix_multiplication.html">symforce.benchmarks.matrix_multiplication package</a><input class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" role="switch" type="checkbox"/><label for="toctree-checkbox-4"><div class="visually-hidden">Toggle navigation of symforce.benchmarks.matrix_multiplication package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.benchmarks.matrix_multiplication.generate_matrix_multiplication_benchmark.html">symforce.benchmarks.matrix_multiplication.generate_matrix_multiplication_benchmark module</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.benchmarks.robot_3d_localization.html">symforce.benchmarks.robot_3d_localization package</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.benchmarks.run_benchmarks.html">symforce.benchmarks.run_benchmarks module</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="api/symforce.cam.html">symforce.cam package</a><input class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" role="switch" type="checkbox"/><label for="toctree-checkbox-5"><div class="visually-hidden">Toggle navigation of symforce.cam package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.cam.atan_camera_cal.html">symforce.cam.atan_camera_cal module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.cam.camera.html">symforce.cam.camera module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.cam.camera_cal.html">symforce.cam.camera_cal module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.cam.camera_util.html">symforce.cam.camera_util module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.cam.double_sphere_camera_cal.html">symforce.cam.double_sphere_camera_cal module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.cam.equirectangular_camera_cal.html">symforce.cam.equirectangular_camera_cal module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.cam.linear_camera_cal.html">symforce.cam.linear_camera_cal module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.cam.polynomial_camera_cal.html">symforce.cam.polynomial_camera_cal module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.cam.posed_camera.html">symforce.cam.posed_camera module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.cam.spherical_camera_cal.html">symforce.cam.spherical_camera_cal module</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="api/symforce.codegen.html">symforce.codegen package</a><input class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" role="switch" type="checkbox"/><label for="toctree-checkbox-6"><div class="visually-hidden">Toggle navigation of symforce.codegen package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l3 has-children"><a class="reference internal" href="api/symforce.codegen.backends.html">symforce.codegen.backends package</a><input class="toctree-checkbox" id="toctree-checkbox-7" name="toctree-checkbox-7" role="switch" type="checkbox"/><label for="toctree-checkbox-7"><div class="visually-hidden">Toggle navigation of symforce.codegen.backends package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l4 has-children"><a class="reference internal" href="api/symforce.codegen.backends.cpp.html">symforce.codegen.backends.cpp package</a><input class="toctree-checkbox" id="toctree-checkbox-8" name="toctree-checkbox-8" role="switch" type="checkbox"/><label for="toctree-checkbox-8"><div class="visually-hidden">Toggle navigation of symforce.codegen.backends.cpp package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l5"><a class="reference internal" href="api/symforce.codegen.backends.cpp.cpp_code_printer.html">symforce.codegen.backends.cpp.cpp_code_printer module</a></li>
<li class="toctree-l5"><a class="reference internal" href="api/symforce.codegen.backends.cpp.cpp_config.html">symforce.codegen.backends.cpp.cpp_config module</a></li>
</ul>
</li>
<li class="toctree-l4 has-children"><a class="reference internal" href="api/symforce.codegen.backends.cuda.html">symforce.codegen.backends.cuda package</a><input class="toctree-checkbox" id="toctree-checkbox-9" name="toctree-checkbox-9" role="switch" type="checkbox"/><label for="toctree-checkbox-9"><div class="visually-hidden">Toggle navigation of symforce.codegen.backends.cuda package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l5"><a class="reference internal" href="api/symforce.codegen.backends.cuda.cuda_code_printer.html">symforce.codegen.backends.cuda.cuda_code_printer module</a></li>
<li class="toctree-l5"><a class="reference internal" href="api/symforce.codegen.backends.cuda.cuda_config.html">symforce.codegen.backends.cuda.cuda_config module</a></li>
</ul>
</li>
<li class="toctree-l4 has-children"><a class="reference internal" href="api/symforce.codegen.backends.python.html">symforce.codegen.backends.python package</a><input class="toctree-checkbox" id="toctree-checkbox-10" name="toctree-checkbox-10" role="switch" type="checkbox"/><label for="toctree-checkbox-10"><div class="visually-hidden">Toggle navigation of symforce.codegen.backends.python package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l5"><a class="reference internal" href="api/symforce.codegen.backends.python.python_code_printer.html">symforce.codegen.backends.python.python_code_printer module</a></li>
<li class="toctree-l5"><a class="reference internal" href="api/symforce.codegen.backends.python.python_config.html">symforce.codegen.backends.python.python_config module</a></li>
</ul>
</li>
<li class="toctree-l4 has-children"><a class="reference internal" href="api/symforce.codegen.backends.pytorch.html">symforce.codegen.backends.pytorch package</a><input class="toctree-checkbox" id="toctree-checkbox-11" name="toctree-checkbox-11" role="switch" type="checkbox"/><label for="toctree-checkbox-11"><div class="visually-hidden">Toggle navigation of symforce.codegen.backends.pytorch package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l5"><a class="reference internal" href="api/symforce.codegen.backends.pytorch.pytorch_code_printer.html">symforce.codegen.backends.pytorch.pytorch_code_printer module</a></li>
<li class="toctree-l5"><a class="reference internal" href="api/symforce.codegen.backends.pytorch.pytorch_config.html">symforce.codegen.backends.pytorch.pytorch_config module</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.codegen.cam_package_codegen.html">symforce.codegen.cam_package_codegen module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.codegen.codegen.html">symforce.codegen.codegen module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.codegen.codegen_config.html">symforce.codegen.codegen_config module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.codegen.codegen_util.html">symforce.codegen.codegen_util module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.codegen.format_util.html">symforce.codegen.format_util module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.codegen.geo_factors_codegen.html">symforce.codegen.geo_factors_codegen module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.codegen.geo_package_codegen.html">symforce.codegen.geo_package_codegen module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.codegen.lcm_types_codegen.html">symforce.codegen.lcm_types_codegen module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.codegen.ops_codegen_util.html">symforce.codegen.ops_codegen_util module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.codegen.similarity_index.html">symforce.codegen.similarity_index module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.codegen.slam_factors_codegen.html">symforce.codegen.slam_factors_codegen module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.codegen.sym_util_package_codegen.html">symforce.codegen.sym_util_package_codegen module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.codegen.template_util.html">symforce.codegen.template_util module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.codegen.types_package_codegen.html">symforce.codegen.types_package_codegen module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.codegen.values_codegen.html">symforce.codegen.values_codegen module</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="api/symforce.examples.html">symforce.examples package</a><input class="toctree-checkbox" id="toctree-checkbox-12" name="toctree-checkbox-12" role="switch" type="checkbox"/><label for="toctree-checkbox-12"><div class="visually-hidden">Toggle navigation of symforce.examples package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.examples.bundle_adjustment.html">symforce.examples.bundle_adjustment package</a></li>
<li class="toctree-l3 has-children"><a class="reference internal" href="api/symforce.examples.bundle_adjustment_fixed_size.html">symforce.examples.bundle_adjustment_fixed_size package</a><input class="toctree-checkbox" id="toctree-checkbox-13" name="toctree-checkbox-13" role="switch" type="checkbox"/><label for="toctree-checkbox-13"><div class="visually-hidden">Toggle navigation of symforce.examples.bundle_adjustment_fixed_size package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.examples.bundle_adjustment_fixed_size.build_values.html">symforce.examples.bundle_adjustment_fixed_size.build_values module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.examples.bundle_adjustment_fixed_size.generate_fixed_problem.html">symforce.examples.bundle_adjustment_fixed_size.generate_fixed_problem module</a></li>
</ul>
</li>
<li class="toctree-l3 has-children"><a class="reference internal" href="api/symforce.examples.bundle_adjustment_in_the_large.html">symforce.examples.bundle_adjustment_in_the_large package</a><input class="toctree-checkbox" id="toctree-checkbox-14" name="toctree-checkbox-14" role="switch" type="checkbox"/><label for="toctree-checkbox-14"><div class="visually-hidden">Toggle navigation of symforce.examples.bundle_adjustment_in_the_large package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.examples.bundle_adjustment_in_the_large.bundle_adjustment_in_the_large.html">symforce.examples.bundle_adjustment_in_the_large.bundle_adjustment_in_the_large module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.examples.bundle_adjustment_in_the_large.download_dataset.html">symforce.examples.bundle_adjustment_in_the_large.download_dataset module</a></li>
</ul>
</li>
<li class="toctree-l3 has-children"><a class="reference internal" href="api/symforce.examples.custom_factor_generation.html">symforce.examples.custom_factor_generation package</a><input class="toctree-checkbox" id="toctree-checkbox-15" name="toctree-checkbox-15" role="switch" type="checkbox"/><label for="toctree-checkbox-15"><div class="visually-hidden">Toggle navigation of symforce.examples.custom_factor_generation package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.examples.custom_factor_generation.factor_residuals.html">symforce.examples.custom_factor_generation.factor_residuals module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.examples.custom_factor_generation.generate_factors.html">symforce.examples.custom_factor_generation.generate_factors module</a></li>
</ul>
</li>
<li class="toctree-l3 has-children"><a class="reference internal" href="api/symforce.examples.robot_2d_localization.html">symforce.examples.robot_2d_localization package</a><input class="toctree-checkbox" id="toctree-checkbox-16" name="toctree-checkbox-16" role="switch" type="checkbox"/><label for="toctree-checkbox-16"><div class="visually-hidden">Toggle navigation of symforce.examples.robot_2d_localization package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.examples.robot_2d_localization.plotting.html">symforce.examples.robot_2d_localization.plotting module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.examples.robot_2d_localization.robot_2d_localization.html">symforce.examples.robot_2d_localization.robot_2d_localization module</a></li>
</ul>
</li>
<li class="toctree-l3 has-children"><a class="reference internal" href="api/symforce.examples.robot_3d_localization.html">symforce.examples.robot_3d_localization package</a><input class="toctree-checkbox" id="toctree-checkbox-17" name="toctree-checkbox-17" role="switch" type="checkbox"/><label for="toctree-checkbox-17"><div class="visually-hidden">Toggle navigation of symforce.examples.robot_3d_localization package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.examples.robot_3d_localization.plotting.html">symforce.examples.robot_3d_localization.plotting module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.examples.robot_3d_localization.robot_3d_localization.html">symforce.examples.robot_3d_localization.robot_3d_localization module</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="api/symforce.geo.html">symforce.geo package</a><input class="toctree-checkbox" id="toctree-checkbox-18" name="toctree-checkbox-18" role="switch" type="checkbox"/><label for="toctree-checkbox-18"><div class="visually-hidden">Toggle navigation of symforce.geo package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l3 has-children"><a class="reference internal" href="api/symforce.geo.unsupported.html">symforce.geo.unsupported package</a><input class="toctree-checkbox" id="toctree-checkbox-19" name="toctree-checkbox-19" role="switch" type="checkbox"/><label for="toctree-checkbox-19"><div class="visually-hidden">Toggle navigation of symforce.geo.unsupported package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.geo.unsupported.pose2_se2.html">symforce.geo.unsupported.pose2_se2 module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.geo.unsupported.pose3_se3.html">symforce.geo.unsupported.pose3_se3 module</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.geo.complex.html">symforce.geo.complex module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.geo.dual_quaternion.html">symforce.geo.dual_quaternion module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.geo.matrix.html">symforce.geo.matrix module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.geo.pose2.html">symforce.geo.pose2 module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.geo.pose3.html">symforce.geo.pose3 module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.geo.quaternion.html">symforce.geo.quaternion module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.geo.rot2.html">symforce.geo.rot2 module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.geo.rot3.html">symforce.geo.rot3 module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.geo.unit3.html">symforce.geo.unit3 module</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="api/symforce.internal.html">symforce.internal package</a><input class="toctree-checkbox" id="toctree-checkbox-20" name="toctree-checkbox-20" role="switch" type="checkbox"/><label for="toctree-checkbox-20"><div class="visually-hidden">Toggle navigation of symforce.internal package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.internal.symbolic.html">symforce.internal.symbolic module</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="api/symforce.ops.html">symforce.ops package</a><input class="toctree-checkbox" id="toctree-checkbox-21" name="toctree-checkbox-21" role="switch" type="checkbox"/><label for="toctree-checkbox-21"><div class="visually-hidden">Toggle navigation of symforce.ops package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l3 has-children"><a class="reference internal" href="api/symforce.ops.impl.html">symforce.ops.impl package</a><input class="toctree-checkbox" id="toctree-checkbox-22" name="toctree-checkbox-22" role="switch" type="checkbox"/><label for="toctree-checkbox-22"><div class="visually-hidden">Toggle navigation of symforce.ops.impl package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.ops.impl.abstract_storage_ops.html">symforce.ops.impl.abstract_storage_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.ops.impl.abstract_vector_group_ops.html">symforce.ops.impl.abstract_vector_group_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.ops.impl.abstract_vector_lie_group_ops.html">symforce.ops.impl.abstract_vector_lie_group_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.ops.impl.array_lie_group_ops.html">symforce.ops.impl.array_lie_group_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.ops.impl.array_storage_ops.html">symforce.ops.impl.array_storage_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.ops.impl.class_group_ops.html">symforce.ops.impl.class_group_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.ops.impl.class_lie_group_ops.html">symforce.ops.impl.class_lie_group_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.ops.impl.class_storage_ops.html">symforce.ops.impl.class_storage_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.ops.impl.databuffer_storage_ops.html">symforce.ops.impl.databuffer_storage_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.ops.impl.dataclass_group_ops.html">symforce.ops.impl.dataclass_group_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.ops.impl.dataclass_lie_group_ops.html">symforce.ops.impl.dataclass_lie_group_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.ops.impl.dataclass_storage_ops.html">symforce.ops.impl.dataclass_storage_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.ops.impl.nonetype_lie_group_ops.html">symforce.ops.impl.nonetype_lie_group_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.ops.impl.scalar_lie_group_ops.html">symforce.ops.impl.scalar_lie_group_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.ops.impl.sequence_group_ops.html">symforce.ops.impl.sequence_group_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.ops.impl.sequence_lie_group_ops.html">symforce.ops.impl.sequence_lie_group_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.ops.impl.sequence_storage_ops.html">symforce.ops.impl.sequence_storage_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.ops.impl.sym_class_lie_group_ops.html">symforce.ops.impl.sym_class_lie_group_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.ops.impl.vector_class_lie_group_ops.html">symforce.ops.impl.vector_class_lie_group_ops module</a></li>
</ul>
</li>
<li class="toctree-l3 has-children"><a class="reference internal" href="api/symforce.ops.interfaces.html">symforce.ops.interfaces package</a><input class="toctree-checkbox" id="toctree-checkbox-23" name="toctree-checkbox-23" role="switch" type="checkbox"/><label for="toctree-checkbox-23"><div class="visually-hidden">Toggle navigation of symforce.ops.interfaces package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.ops.interfaces.group.html">symforce.ops.interfaces.group module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.ops.interfaces.lie_group.html">symforce.ops.interfaces.lie_group module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.ops.interfaces.storage.html">symforce.ops.interfaces.storage module</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.ops.group_ops.html">symforce.ops.group_ops module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.ops.lie_group_ops.html">symforce.ops.lie_group_ops module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.ops.ops.html">symforce.ops.ops module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.ops.storage_ops.html">symforce.ops.storage_ops module</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="api/symforce.opt.html">symforce.opt package</a><input class="toctree-checkbox" id="toctree-checkbox-24" name="toctree-checkbox-24" role="switch" type="checkbox"/><label for="toctree-checkbox-24"><div class="visually-hidden">Toggle navigation of symforce.opt package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l3 has-children"><a class="reference internal" href="api/symforce.opt.objectives.html">symforce.opt.objectives package</a><input class="toctree-checkbox" id="toctree-checkbox-25" name="toctree-checkbox-25" role="switch" type="checkbox"/><label for="toctree-checkbox-25"><div class="visually-hidden">Toggle navigation of symforce.opt.objectives package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.opt.objectives.min_max_barrier_objective.html">symforce.opt.objectives.min_max_barrier_objective module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.opt.objectives.norm_barrier_objective.html">symforce.opt.objectives.norm_barrier_objective module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.opt.objectives.prior_value_objective.html">symforce.opt.objectives.prior_value_objective module</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.opt.barrier_functions.html">symforce.opt.barrier_functions module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.opt.factor.html">symforce.opt.factor module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.opt.noise_models.html">symforce.opt.noise_models module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.opt.numeric_factor.html">symforce.opt.numeric_factor module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.opt.objective.html">symforce.opt.objective module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.opt.optimization_problem.html">symforce.opt.optimization_problem module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.opt.optimizer.html">symforce.opt.optimizer module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.opt.optimizer_params.html">symforce.opt.optimizer_params module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.opt.residual_block.html">symforce.opt.residual_block module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.opt.sub_problem.html">symforce.opt.sub_problem module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.opt.timestep_sub_problem.html">symforce.opt.timestep_sub_problem module</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="api/symforce.slam.html">symforce.slam package</a><input class="toctree-checkbox" id="toctree-checkbox-26" name="toctree-checkbox-26" role="switch" type="checkbox"/><label for="toctree-checkbox-26"><div class="visually-hidden">Toggle navigation of symforce.slam package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l3 has-children"><a class="reference internal" href="api/symforce.slam.imu_preintegration.html">symforce.slam.imu_preintegration package</a><input class="toctree-checkbox" id="toctree-checkbox-27" name="toctree-checkbox-27" role="switch" type="checkbox"/><label for="toctree-checkbox-27"><div class="visually-hidden">Toggle navigation of symforce.slam.imu_preintegration package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.slam.imu_preintegration.generate.html">symforce.slam.imu_preintegration.generate module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.slam.imu_preintegration.manifold_symbolic.html">symforce.slam.imu_preintegration.manifold_symbolic module</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="api/symforce.test_util.html">symforce.test_util package</a><input class="toctree-checkbox" id="toctree-checkbox-28" name="toctree-checkbox-28" role="switch" type="checkbox"/><label for="toctree-checkbox-28"><div class="visually-hidden">Toggle navigation of symforce.test_util package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l3 has-children"><a class="reference internal" href="api/symforce.test_util.random_expressions.html">symforce.test_util.random_expressions package</a><input class="toctree-checkbox" id="toctree-checkbox-29" name="toctree-checkbox-29" role="switch" type="checkbox"/><label for="toctree-checkbox-29"><div class="visually-hidden">Toggle navigation of symforce.test_util.random_expressions package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.test_util.random_expressions.op_probabilities.html">symforce.test_util.random_expressions.op_probabilities module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api/symforce.test_util.random_expressions.unary_binary_expression_gen.html">symforce.test_util.random_expressions.unary_binary_expression_gen module</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.test_util.backend_coverage_expressions.html">symforce.test_util.backend_coverage_expressions module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.test_util.cam_cal_test_mixin.html">symforce.test_util.cam_cal_test_mixin module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.test_util.cam_test_mixin.html">symforce.test_util.cam_test_mixin module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.test_util.epsilon_handling.html">symforce.test_util.epsilon_handling module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.test_util.group_ops_test_mixin.html">symforce.test_util.group_ops_test_mixin module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.test_util.lie_group_ops_test_mixin.html">symforce.test_util.lie_group_ops_test_mixin module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.test_util.storage_ops_test_mixin.html">symforce.test_util.storage_ops_test_mixin module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.test_util.test_case.html">symforce.test_util.test_case module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.test_util.test_case_mixin.html">symforce.test_util.test_case_mixin module</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="api/symforce.values.html">symforce.values package</a><input class="toctree-checkbox" id="toctree-checkbox-30" name="toctree-checkbox-30" role="switch" type="checkbox"/><label for="toctree-checkbox-30"><div class="visually-hidden">Toggle navigation of symforce.values package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.values.attr_accessor.html">symforce.values.attr_accessor module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.values.generated_key_selection.html">symforce.values.generated_key_selection module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.values.index_entry.html">symforce.values.index_entry module</a></li>
<li class="toctree-l3"><a class="reference internal" href="api/symforce.values.values.html">symforce.values.values module</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="api/symforce.cc_sym.html">symforce.cc_sym module</a></li>
<li class="toctree-l2"><a class="reference internal" href="api/symforce.databuffer.html">symforce.databuffer module</a></li>
<li class="toctree-l2"><a class="reference internal" href="api/symforce.jacobian_helpers.html">symforce.jacobian_helpers module</a></li>
<li class="toctree-l2"><a class="reference internal" href="api/symforce.logic.html">symforce.logic module</a></li>
<li class="toctree-l2"><a class="reference internal" href="api/symforce.notebook_util.html">symforce.notebook_util module</a></li>
<li class="toctree-l2"><a class="reference internal" href="api/symforce.path_util.html">symforce.path_util module</a></li>
<li class="toctree-l2"><a class="reference internal" href="api/symforce.python_util.html">symforce.python_util module</a></li>
<li class="toctree-l2"><a class="reference internal" href="api/symforce.symbolic.html">symforce.symbolic module</a></li>
<li class="toctree-l2"><a class="reference internal" href="api/symforce.type_helpers.html">symforce.type_helpers module</a></li>
<li class="toctree-l2"><a class="reference internal" href="api/symforce.typing.html">symforce.typing module</a></li>
<li class="toctree-l2"><a class="reference internal" href="api/symforce.typing_util.html">symforce.typing_util module</a></li>
<li class="toctree-l2"><a class="reference internal" href="api/symforce.util.html">symforce.util module</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">sym Python Reference</span></p>
<ul>
<li class="toctree-l1 has-children"><a class="reference internal" href="api-gen-py/sym.html">sym package</a><input class="toctree-checkbox" id="toctree-checkbox-31" name="toctree-checkbox-31" role="switch" type="checkbox"/><label for="toctree-checkbox-31"><div class="visually-hidden">Toggle navigation of sym package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l2 has-children"><a class="reference internal" href="api-gen-py/sym.ops.html">sym.ops package</a><input class="toctree-checkbox" id="toctree-checkbox-32" name="toctree-checkbox-32" role="switch" type="checkbox"/><label for="toctree-checkbox-32"><div class="visually-hidden">Toggle navigation of sym.ops package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l3 has-children"><a class="reference internal" href="api-gen-py/sym.ops.atan_camera_cal.html">sym.ops.atan_camera_cal package</a><input class="toctree-checkbox" id="toctree-checkbox-33" name="toctree-checkbox-33" role="switch" type="checkbox"/><label for="toctree-checkbox-33"><div class="visually-hidden">Toggle navigation of sym.ops.atan_camera_cal package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.atan_camera_cal.camera_ops.html">sym.ops.atan_camera_cal.camera_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.atan_camera_cal.group_ops.html">sym.ops.atan_camera_cal.group_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.atan_camera_cal.lie_group_ops.html">sym.ops.atan_camera_cal.lie_group_ops module</a></li>
</ul>
</li>
<li class="toctree-l3 has-children"><a class="reference internal" href="api-gen-py/sym.ops.double_sphere_camera_cal.html">sym.ops.double_sphere_camera_cal package</a><input class="toctree-checkbox" id="toctree-checkbox-34" name="toctree-checkbox-34" role="switch" type="checkbox"/><label for="toctree-checkbox-34"><div class="visually-hidden">Toggle navigation of sym.ops.double_sphere_camera_cal package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.double_sphere_camera_cal.camera_ops.html">sym.ops.double_sphere_camera_cal.camera_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.double_sphere_camera_cal.group_ops.html">sym.ops.double_sphere_camera_cal.group_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.double_sphere_camera_cal.lie_group_ops.html">sym.ops.double_sphere_camera_cal.lie_group_ops module</a></li>
</ul>
</li>
<li class="toctree-l3 has-children"><a class="reference internal" href="api-gen-py/sym.ops.equirectangular_camera_cal.html">sym.ops.equirectangular_camera_cal package</a><input class="toctree-checkbox" id="toctree-checkbox-35" name="toctree-checkbox-35" role="switch" type="checkbox"/><label for="toctree-checkbox-35"><div class="visually-hidden">Toggle navigation of sym.ops.equirectangular_camera_cal package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.equirectangular_camera_cal.camera_ops.html">sym.ops.equirectangular_camera_cal.camera_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.equirectangular_camera_cal.group_ops.html">sym.ops.equirectangular_camera_cal.group_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.equirectangular_camera_cal.lie_group_ops.html">sym.ops.equirectangular_camera_cal.lie_group_ops module</a></li>
</ul>
</li>
<li class="toctree-l3 has-children"><a class="reference internal" href="api-gen-py/sym.ops.linear_camera_cal.html">sym.ops.linear_camera_cal package</a><input class="toctree-checkbox" id="toctree-checkbox-36" name="toctree-checkbox-36" role="switch" type="checkbox"/><label for="toctree-checkbox-36"><div class="visually-hidden">Toggle navigation of sym.ops.linear_camera_cal package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.linear_camera_cal.camera_ops.html">sym.ops.linear_camera_cal.camera_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.linear_camera_cal.group_ops.html">sym.ops.linear_camera_cal.group_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.linear_camera_cal.lie_group_ops.html">sym.ops.linear_camera_cal.lie_group_ops module</a></li>
</ul>
</li>
<li class="toctree-l3 has-children"><a class="reference internal" href="api-gen-py/sym.ops.polynomial_camera_cal.html">sym.ops.polynomial_camera_cal package</a><input class="toctree-checkbox" id="toctree-checkbox-37" name="toctree-checkbox-37" role="switch" type="checkbox"/><label for="toctree-checkbox-37"><div class="visually-hidden">Toggle navigation of sym.ops.polynomial_camera_cal package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.polynomial_camera_cal.camera_ops.html">sym.ops.polynomial_camera_cal.camera_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.polynomial_camera_cal.group_ops.html">sym.ops.polynomial_camera_cal.group_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.polynomial_camera_cal.lie_group_ops.html">sym.ops.polynomial_camera_cal.lie_group_ops module</a></li>
</ul>
</li>
<li class="toctree-l3 has-children"><a class="reference internal" href="api-gen-py/sym.ops.pose2.html">sym.ops.pose2 package</a><input class="toctree-checkbox" id="toctree-checkbox-38" name="toctree-checkbox-38" role="switch" type="checkbox"/><label for="toctree-checkbox-38"><div class="visually-hidden">Toggle navigation of sym.ops.pose2 package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.pose2.group_ops.html">sym.ops.pose2.group_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.pose2.lie_group_ops.html">sym.ops.pose2.lie_group_ops module</a></li>
</ul>
</li>
<li class="toctree-l3 has-children"><a class="reference internal" href="api-gen-py/sym.ops.pose3.html">sym.ops.pose3 package</a><input class="toctree-checkbox" id="toctree-checkbox-39" name="toctree-checkbox-39" role="switch" type="checkbox"/><label for="toctree-checkbox-39"><div class="visually-hidden">Toggle navigation of sym.ops.pose3 package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.pose3.group_ops.html">sym.ops.pose3.group_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.pose3.lie_group_ops.html">sym.ops.pose3.lie_group_ops module</a></li>
</ul>
</li>
<li class="toctree-l3 has-children"><a class="reference internal" href="api-gen-py/sym.ops.rot2.html">sym.ops.rot2 package</a><input class="toctree-checkbox" id="toctree-checkbox-40" name="toctree-checkbox-40" role="switch" type="checkbox"/><label for="toctree-checkbox-40"><div class="visually-hidden">Toggle navigation of sym.ops.rot2 package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.rot2.group_ops.html">sym.ops.rot2.group_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.rot2.lie_group_ops.html">sym.ops.rot2.lie_group_ops module</a></li>
</ul>
</li>
<li class="toctree-l3 has-children"><a class="reference internal" href="api-gen-py/sym.ops.rot3.html">sym.ops.rot3 package</a><input class="toctree-checkbox" id="toctree-checkbox-41" name="toctree-checkbox-41" role="switch" type="checkbox"/><label for="toctree-checkbox-41"><div class="visually-hidden">Toggle navigation of sym.ops.rot3 package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.rot3.group_ops.html">sym.ops.rot3.group_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.rot3.lie_group_ops.html">sym.ops.rot3.lie_group_ops module</a></li>
</ul>
</li>
<li class="toctree-l3 has-children"><a class="reference internal" href="api-gen-py/sym.ops.spherical_camera_cal.html">sym.ops.spherical_camera_cal package</a><input class="toctree-checkbox" id="toctree-checkbox-42" name="toctree-checkbox-42" role="switch" type="checkbox"/><label for="toctree-checkbox-42"><div class="visually-hidden">Toggle navigation of sym.ops.spherical_camera_cal package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.spherical_camera_cal.camera_ops.html">sym.ops.spherical_camera_cal.camera_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.spherical_camera_cal.group_ops.html">sym.ops.spherical_camera_cal.group_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.spherical_camera_cal.lie_group_ops.html">sym.ops.spherical_camera_cal.lie_group_ops module</a></li>
</ul>
</li>
<li class="toctree-l3 has-children"><a class="reference internal" href="api-gen-py/sym.ops.unit3.html">sym.ops.unit3 package</a><input class="toctree-checkbox" id="toctree-checkbox-43" name="toctree-checkbox-43" role="switch" type="checkbox"/><label for="toctree-checkbox-43"><div class="visually-hidden">Toggle navigation of sym.ops.unit3 package</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.unit3.group_ops.html">sym.ops.unit3.group_ops module</a></li>
<li class="toctree-l4"><a class="reference internal" href="api-gen-py/sym.ops.unit3.lie_group_ops.html">sym.ops.unit3.lie_group_ops module</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-py/sym.atan_camera_cal.html">sym.atan_camera_cal module</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-py/sym.double_sphere_camera_cal.html">sym.double_sphere_camera_cal module</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-py/sym.equirectangular_camera_cal.html">sym.equirectangular_camera_cal module</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-py/sym.linear_camera_cal.html">sym.linear_camera_cal module</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-py/sym.polynomial_camera_cal.html">sym.polynomial_camera_cal module</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-py/sym.pose2.html">sym.pose2 module</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-py/sym.pose3.html">sym.pose3 module</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-py/sym.rot2.html">sym.rot2 module</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-py/sym.rot3.html">sym.rot3 module</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-py/sym.spherical_camera_cal.html">sym.spherical_camera_cal module</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-py/sym.unit3.html">sym.unit3 module</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">sym C++ Reference</span></p>
<ul>
<li class="toctree-l1 has-children"><a class="reference internal" href="api-gen-cpp/classlist.html">Class list</a><input class="toctree-checkbox" id="toctree-checkbox-44" name="toctree-checkbox-44" role="switch" type="checkbox"/><label for="toctree-checkbox-44"><div class="visually-hidden">Toggle navigation of Class list</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/class/classsym_1_1ATANCameraCal.html">Class sym::ATANCameraCal</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/class/classsym_1_1Camera.html">Class sym::Camera</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/class/classsym_1_1DoubleSphereCameraCal.html">Class sym::DoubleSphereCameraCal</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/class/classsym_1_1EquirectangularCameraCal.html">Class sym::EquirectangularCameraCal</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/class/classsym_1_1LinearCameraCal.html">Class sym::LinearCameraCal</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/class/classsym_1_1PolynomialCameraCal.html">Class sym::PolynomialCameraCal</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/class/classsym_1_1Pose2.html">Class sym::Pose2</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/class/classsym_1_1Pose3.html">Class sym::Pose3</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/class/classsym_1_1PosedCamera.html">Class sym::PosedCamera</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/class/classsym_1_1Rot2.html">Class sym::Rot2</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/class/classsym_1_1Rot3.html">Class sym::Rot3</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/class/classsym_1_1SphericalCameraCal.html">Class sym::SphericalCameraCal</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/class/classsym_1_1Unit3.html">Class sym::Unit3</a></li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="api-gen-cpp/filelist.html">File list</a><input class="toctree-checkbox" id="toctree-checkbox-45" name="toctree-checkbox-45" role="switch" type="checkbox"/><label for="toctree-checkbox-45"><div class="visually-hidden">Toggle navigation of File list</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/atan__camera__cal_2group__ops_8cc.html">File group_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/atan__camera__cal_2group__ops_8h.html">File group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/atan__camera__cal_2lie__group__ops_8cc.html">File lie_group_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/atan__camera__cal_2lie__group__ops_8h.html">File lie_group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/atan__camera__cal_2storage__ops_8cc.html">File storage_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/atan__camera__cal_2storage__ops_8h.html">File storage_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/atan__camera__cal_8cc.html">File atan_camera_cal.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/atan__camera__cal_8h.html">File atan_camera_cal.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/atan__reprojection__delta_8h.html">File atan_reprojection_delta.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/between__factor__matrix31_8h.html">File between_factor_matrix31.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/between__factor__pose2_8h.html">File between_factor_pose2.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/between__factor__pose3_8h.html">File between_factor_pose3.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/between__factor__pose3__position_8h.html">File between_factor_pose3_position.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/between__factor__pose3__rotation_8h.html">File between_factor_pose3_rotation.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/between__factor__pose3__translation__norm_8h.html">File between_factor_pose3_translation_norm.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/between__factor__rot2_8h.html">File between_factor_rot2.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/between__factor__rot3_8h.html">File between_factor_rot3.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/camera_8h.html">File camera.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/double__sphere__camera__cal_2group__ops_8cc.html">File group_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/double__sphere__camera__cal_2group__ops_8h.html">File group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/double__sphere__camera__cal_2lie__group__ops_8cc.html">File lie_group_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/double__sphere__camera__cal_2lie__group__ops_8h.html">File lie_group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/double__sphere__camera__cal_2storage__ops_8cc.html">File storage_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/double__sphere__camera__cal_2storage__ops_8h.html">File storage_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/double__sphere__camera__cal_8cc.html">File double_sphere_camera_cal.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/double__sphere__camera__cal_8h.html">File double_sphere_camera_cal.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/double__sphere__reprojection__delta_8h.html">File double_sphere_reprojection_delta.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/epsilon_8cc.html">File epsilon.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/epsilon_8h.html">File epsilon.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/equirectangular__camera__cal_2group__ops_8cc.html">File group_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/equirectangular__camera__cal_2group__ops_8h.html">File group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/equirectangular__camera__cal_2lie__group__ops_8cc.html">File lie_group_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/equirectangular__camera__cal_2lie__group__ops_8h.html">File lie_group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/equirectangular__camera__cal_2storage__ops_8cc.html">File storage_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/equirectangular__camera__cal_2storage__ops_8h.html">File storage_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/equirectangular__camera__cal_8cc.html">File equirectangular_camera_cal.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/equirectangular__camera__cal_8h.html">File equirectangular_camera_cal.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/equirectangular__reprojection__delta_8h.html">File equirectangular_reprojection_delta.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/group__ops_8h.html">File group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/imu__manifold__preintegration__update_8h.html">File imu_manifold_preintegration_update.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/imu__manifold__preintegration__update__auto__derivative_8h.html">File imu_manifold_preintegration_update_auto_derivative.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/internal__imu__factor_8h.html">File internal_imu_factor.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/internal__imu__unit__gravity__factor_8h.html">File internal_imu_unit_gravity_factor.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/internal__imu__with__gravity__factor_8h.html">File internal_imu_with_gravity_factor.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/inverse__range__landmark__atan__gnc__factor_8h.html">File inverse_range_landmark_atan_gnc_factor.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/inverse__range__landmark__double__sphere__gnc__factor_8h.html">File inverse_range_landmark_double_sphere_gnc_factor.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/inverse__range__landmark__equirectangular__gnc__factor_8h.html">File inverse_range_landmark_equirectangular_gnc_factor.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/inverse__range__landmark__linear__gnc__factor_8h.html">File inverse_range_landmark_linear_gnc_factor.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/inverse__range__landmark__polynomial__gnc__factor_8h.html">File inverse_range_landmark_polynomial_gnc_factor.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/inverse__range__landmark__prior__factor_8h.html">File inverse_range_landmark_prior_factor.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/inverse__range__landmark__spherical__gnc__factor_8h.html">File inverse_range_landmark_spherical_gnc_factor.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/lie__group__ops_8h.html">File lie_group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/linear__camera__cal_2group__ops_8cc.html">File group_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/linear__camera__cal_2group__ops_8h.html">File group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/linear__camera__cal_2lie__group__ops_8cc.html">File lie_group_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/linear__camera__cal_2lie__group__ops_8h.html">File lie_group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/linear__camera__cal_2storage__ops_8cc.html">File storage_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/linear__camera__cal_2storage__ops_8h.html">File storage_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/linear__camera__cal_8cc.html">File linear_camera_cal.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/linear__camera__cal_8h.html">File linear_camera_cal.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/linear__reprojection__delta_8h.html">File linear_reprojection_delta.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/matrix_2group__ops_8cc.html">File group_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/matrix_2group__ops_8h.html">File group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/matrix_2lie__group__ops_8cc.html">File lie_group_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/matrix_2lie__group__ops_8h.html">File lie_group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/matrix_2storage__ops_8cc.html">File storage_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/matrix_2storage__ops_8h.html">File storage_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/polynomial__camera__cal_2group__ops_8cc.html">File group_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/polynomial__camera__cal_2group__ops_8h.html">File group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/polynomial__camera__cal_2lie__group__ops_8cc.html">File lie_group_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/polynomial__camera__cal_2lie__group__ops_8h.html">File lie_group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/polynomial__camera__cal_2storage__ops_8cc.html">File storage_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/polynomial__camera__cal_2storage__ops_8h.html">File storage_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/polynomial__camera__cal_8cc.html">File polynomial_camera_cal.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/polynomial__camera__cal_8h.html">File polynomial_camera_cal.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/polynomial__reprojection__delta_8h.html">File polynomial_reprojection_delta.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/pose2_2group__ops_8cc.html">File group_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/pose2_2group__ops_8h.html">File group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/pose2_2lie__group__ops_8cc.html">File lie_group_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/pose2_2lie__group__ops_8h.html">File lie_group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/pose2_2storage__ops_8cc.html">File storage_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/pose2_2storage__ops_8h.html">File storage_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/pose2_8cc.html">File pose2.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/pose2_8h.html">File pose2.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/pose3_2group__ops_8cc.html">File group_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/pose3_2group__ops_8h.html">File group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/pose3_2lie__group__ops_8cc.html">File lie_group_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/pose3_2lie__group__ops_8h.html">File lie_group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/pose3_2storage__ops_8cc.html">File storage_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/pose3_2storage__ops_8h.html">File storage_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/pose3_8cc.html">File pose3.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/pose3_8h.html">File pose3.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/posed__camera_8h.html">File posed_camera.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/prior__factor__matrix31_8h.html">File prior_factor_matrix31.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/prior__factor__pose2_8h.html">File prior_factor_pose2.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/prior__factor__pose3_8h.html">File prior_factor_pose3.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/prior__factor__pose3__position_8h.html">File prior_factor_pose3_position.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/prior__factor__pose3__rotation_8h.html">File prior_factor_pose3_rotation.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/prior__factor__rot2_8h.html">File prior_factor_rot2.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/prior__factor__rot3_8h.html">File prior_factor_rot3.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/roll__forward__state_8h.html">File roll_forward_state.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/rot2_2group__ops_8cc.html">File group_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/rot2_2group__ops_8h.html">File group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/rot2_2lie__group__ops_8cc.html">File lie_group_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/rot2_2lie__group__ops_8h.html">File lie_group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/rot2_2storage__ops_8cc.html">File storage_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/rot2_2storage__ops_8h.html">File storage_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/rot2_8cc.html">File rot2.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/rot2_8h.html">File rot2.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/rot3_2group__ops_8cc.html">File group_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/rot3_2group__ops_8h.html">File group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/rot3_2lie__group__ops_8cc.html">File lie_group_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/rot3_2lie__group__ops_8h.html">File lie_group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/rot3_2storage__ops_8cc.html">File storage_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/rot3_2storage__ops_8h.html">File storage_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/rot3_8cc.html">File rot3.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/rot3_8h.html">File rot3.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/scalar_2group__ops_8cc.html">File group_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/scalar_2group__ops_8h.html">File group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/scalar_2lie__group__ops_8cc.html">File lie_group_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/scalar_2lie__group__ops_8h.html">File lie_group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/scalar_2storage__ops_8cc.html">File storage_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/scalar_2storage__ops_8h.html">File storage_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/spherical__camera__cal_2group__ops_8cc.html">File group_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/spherical__camera__cal_2group__ops_8h.html">File group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/spherical__camera__cal_2lie__group__ops_8cc.html">File lie_group_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/spherical__camera__cal_2lie__group__ops_8h.html">File lie_group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/spherical__camera__cal_2storage__ops_8cc.html">File storage_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/spherical__camera__cal_2storage__ops_8h.html">File storage_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/spherical__camera__cal_8cc.html">File spherical_camera_cal.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/spherical__camera__cal_8h.html">File spherical_camera_cal.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/spherical__reprojection__delta_8h.html">File spherical_reprojection_delta.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/storage__ops_8h.html">File storage_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/type__ops_8h.html">File type_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/typedefs_8h.html">File typedefs.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/unit3_2group__ops_8cc.html">File group_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/unit3_2group__ops_8h.html">File group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/unit3_2lie__group__ops_8cc.html">File lie_group_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/unit3_2lie__group__ops_8h.html">File lie_group_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/unit3_2storage__ops_8cc.html">File storage_ops.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/unit3_2storage__ops_8h.html">File storage_ops.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/unit3_8cc.html">File unit3.cc</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-gen-cpp/file/unit3_8h.html">File unit3.h</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">opt C++ Reference</span></p>
<ul>
<li class="toctree-l1 has-children"><a class="reference internal" href="api-cpp/classlist.html">Class list</a><input class="toctree-checkbox" id="toctree-checkbox-46" name="toctree-checkbox-46" role="switch" type="checkbox"/><label for="toctree-checkbox-46"><div class="visually-hidden">Toggle navigation of Class list</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/class/classsym_1_1DenseCholeskySolver.html">Class sym::DenseCholeskySolver</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/class/classsym_1_1DenseLinearizer.html">Class sym::DenseLinearizer</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/class/classsym_1_1EigenSparseSolver.html">Class sym::EigenSparseSolver</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/class/classsym_1_1Factor.html">Class sym::Factor</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/class/classsym_1_1GncOptimizer.html">Class sym::GncOptimizer</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/class/classsym_1_1ImuFactor.html">Class sym::ImuFactor</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/class/classsym_1_1ImuPreintegrator.html">Class sym::ImuPreintegrator</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/class/classsym_1_1ImuWithGravityDirectionFactor.html">Class sym::ImuWithGravityDirectionFactor</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/class/classsym_1_1ImuWithGravityFactor.html">Class sym::ImuWithGravityFactor</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/class/classsym_1_1Interpolator.html">Class sym::Interpolator</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/class/classsym_1_1Key.html">Class sym::Key</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/class/classsym_1_1LevenbergMarquardtSolver.html">Class sym::LevenbergMarquardtSolver</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/class/classsym_1_1Linearizer.html">Class sym::Linearizer</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/class/classsym_1_1Optimizer.html">Class sym::Optimizer</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/class/classsym_1_1SparseCholeskySolver.html">Class sym::SparseCholeskySolver</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/class/classsym_1_1SparseSchurSolver.html">Class sym::SparseSchurSolver</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/class/classsym_1_1Values.html">Class sym::Values</a></li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="api-cpp/filelist.html">File list</a><input class="toctree-checkbox" id="toctree-checkbox-47" name="toctree-checkbox-47" role="switch" type="checkbox"/><label for="toctree-checkbox-47"><div class="visually-hidden">Toggle navigation of File list</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/file/assert_8h.html">File assert.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/file/dense__cholesky__solver_8h.html">File dense_cholesky_solver.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/file/dense__linearizer_8h.html">File dense_linearizer.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/file/dump__graph_8h.html">File dump_graph.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/file/eigen__sparse__solver_8h.html">File eigen_sparse_solver.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/file/factor_8h.html">File factor.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/file/gnc__optimizer_8h.html">File gnc_optimizer.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/file/imu__factor_8h.html">File imu_factor.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/file/imu__preintegrator_8h.html">File imu_preintegrator.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/file/key_8h.html">File key.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/file/levenberg__marquardt__solver_8h.html">File levenberg_marquardt_solver.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/file/linearization_8h.html">File linearization.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/file/linearizer_8h.html">File linearizer.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/file/optimization__stats_8h.html">File optimization_stats.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/file/optimizer_8h.html">File optimizer.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/file/optional_8h.html">File optional.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/file/preintegrated__imu__measurements_8h.html">File preintegrated_imu_measurements.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/file/sparse__cholesky__solver_8h.html">File sparse_cholesky_solver.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/file/sparse__schur__solver_8h.html">File sparse_schur_solver.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/file/templates_8h.html">File templates.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/file/tic__toc_8h.html">File tic_toc.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/file/util_8h.html">File util.h</a></li>
<li class="toctree-l2"><a class="reference internal" href="api-cpp/file/values_8h.html">File values.h</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Project Links</span></p>
<ul>
<li class="toctree-l1"><a class="reference external" href="https://github.com/symforce-org/symforce">GitHub</a></li>
<li class="toctree-l1"><a class="reference external" href="https://pypi.org/project/symforce">PyPI</a></li>
</ul>
</div>
</div>
</div>
</div>
</aside>
<div class="main">
<div class="content">
<div class="article-container">
<a href="#" class="back-to-top muted-link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
</svg>
<span>Back to top</span>
</a>
<div class="content-icon-container">
<div class="theme-toggle-container theme-toggle-content">
<button class="theme-toggle">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button>
</div>
<label class="toc-overlay-icon toc-content-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label>
</div>
<article role="main">
<section id="development-guide">
<h1>Development Guide<a class="headerlink" href="#development-guide" title="Permalink to this heading">#</a></h1>
<p>Guide for how to build, configure, and develop SymForce.</p>
<section id="organization">
<h2>Organization<a class="headerlink" href="#organization" title="Permalink to this heading">#</a></h2>
<p>SymForce aims to follow Python <a class="reference external" href="https://docs.python-guide.org/writing/structure/">standards</a>. The core <code class="docutils literal notranslate"><span class="pre">symforce</span></code> package lives in the equivalently named subdirectory at the top level. Tests, documentation, etc live at the top level outside of the core package.
To import <code class="docutils literal notranslate"><span class="pre">symforce</span></code> add the top level to the Python path.</p>
<p>See the <a class="reference external" href="/api/symforce.html">module reference</a> for the core package structure.</p>
</section>
<section id="build">
<h2>Build<a class="headerlink" href="#build" title="Permalink to this heading">#</a></h2>
<p>SymForce is primarily written in Python and C++, and is Python 3.8+ and C++14 compatible. The build
system is CMake for the C++ components, and optionally pip / setuptools on top for Python packaging.
See the Build section on the <a class="reference external" href="/index.html#build-from-source">Homepage</a> for build instructions.</p>
</section>
<section id="additional-useful-commands">
<h2>Additional useful commands<a class="headerlink" href="#additional-useful-commands" title="Permalink to this heading">#</a></h2>
<p>SymForce also has a top level Makefile which is not used by the build, but provides some high
level commands for development:</p>
<div class="table-wrapper docutils container">
<table class="docutils align-default">
<tbody>
<tr class="row-odd"><td><p>Run tests which update (most) generated code</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">test_update</span></code></p></td>
</tr>
<tr class="row-even"><td><p>Run tests which update all generated code</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">test_update_all</span></code></p></td>
</tr>
<tr class="row-odd"><td><p>Run tests and open coverage report</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">coverage_open</span></code></p></td>
</tr>
<tr class="row-even"><td><p>Build docs</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">docs</span></code></p></td>
</tr>
<tr class="row-odd"><td><p>Build docs + open in browser</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">docs_open</span></code></p></td>
</tr>
<tr class="row-even"><td><p>Run the code formatter (black, clang-format)</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">format</span></code></p></td>
</tr>
<tr class="row-odd"><td><p>Check types with mypy</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">check_types</span></code></p></td>
</tr>
<tr class="row-even"><td><p>Check formatting and types</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">lint</span></code></p></td>
</tr>
</tbody>
</table>
</div>
</section>
<section id="documentation">
<h2>Documentation<a class="headerlink" href="#documentation" title="Permalink to this heading">#</a></h2>
<p>This documentation is built with <a class="reference external" href="https://www.sphinx-doc.org/">Sphinx</a>, including automatic parsing of the code to generate a module reference using <a class="reference external" href="https://www.sphinx-doc.org/en/master/man/sphinx-apidoc.html">sphinx-apidoc</a>. The code uses <a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/extensions/example_google.html">Google Style</a> docstrings to annotate all modules, classes, and functions. Docs pages are <code class="docutils literal notranslate"><span class="pre">.rst</span></code> files in <code class="docutils literal notranslate"><span class="pre">docs</span></code>, and the Sphinx config file is <code class="docutils literal notranslate"><span class="pre">docs/conf.py</span></code>.</p>
<p>There are sample <a class="reference external" href="https://jupyter.org/">Jupyter</a> notebooks in <code class="docutils literal notranslate"><span class="pre">notebooks</span></code>, The tutorial notebooks are built into these docs using <a class="reference external" href="https://nbsphinx.readthedocs.io/en/0.5.1/">nbsphinx</a>, for example the <a class="reference external" href="/tutorials/sympy_tutorial.html">SymPy Tutorial</a>.</p>
</section>
<section id="logging">
<h2>Logging<a class="headerlink" href="#logging" title="Permalink to this heading">#</a></h2>
<p>SymForce uses the <a class="reference external" href="https://docs.python.org/3.8/library/logging.html">logging</a> module. You can import and use the logger like this:</p>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">symforce</span> <span class="kn">import</span> <span class="n">logger</span>
<span class="gp">>>> </span><span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s1">'houston, we have a problem'</span><span class="p">)</span>
<span class="go">codegen_test.test_codegen_cpp():126 WARNING -- houston, we have a problem</span>
</pre></div>
</div>
<p>You can configure the log level using <a class="reference internal" href="api/symforce.html#symforce.set_log_level" title="symforce.set_log_level"><code class="xref py py-func docutils literal notranslate"><span class="pre">symforce.set_log_level()</span></code></a> or by setting the <code class="docutils literal notranslate"><span class="pre">SYMFORCE_LOGLEVEL</span></code> environment variable. The default is <code class="docutils literal notranslate"><span class="pre">logging.INFO</span></code>.</p>
</section>
<section id="testing-and-coverage">
<h2>Testing and Coverage<a class="headerlink" href="#testing-and-coverage" title="Permalink to this heading">#</a></h2>
<p>SymForce is heavily tested, targeting close to 100% code coverage.
Tests live in <code class="docutils literal notranslate"><span class="pre">test</span></code> and use <a class="reference external" href="https://docs.python.org/3.8/library/unittest.html">unittest</a>. Additionally, <a class="reference external" href="https://coverage.readthedocs.io/en/coverage-5.0.4/">coverage.py</a> is used to run tests while measuring code coverage. The generated coverage report also provides a great view into what methods need to be tested and what code is potentially unused.</p>
<div class="line-block">
<div class="line">Run a specific test: <code class="docutils literal notranslate"><span class="pre">python</span> <span class="pre">test/symforce_codegen_test.py</span></code></div>
<div class="line">Run with debug level output: <code class="docutils literal notranslate"><span class="pre">SYMFORCE_LOGLEVEL=DEBUG</span> <span class="pre">python</span> <span class="pre">test/symforce_codegen_test.py</span></code></div>
<div class="line">Run all Python and C++ tests after building with cmake: <code class="docutils literal notranslate"><span class="pre">cd</span> <span class="pre">build;</span> <span class="pre">ctest</span></code></div>
<div class="line">Run all Python tests, without a cmake build (tests cannot be run in the same interpreter): <code class="docutils literal notranslate"><span class="pre">ls</span> <span class="pre">test/*_test.py</span> <span class="pre">|</span> <span class="pre">xargs</span> <span class="pre">-n1</span> <span class="pre">-P</span> <span class="pre">$(nproc)</span> <span class="pre">python</span></code></div>
</div>
<p>When debugging a specific test, the use of <a class="reference external" href="https://pypi.org/project/ipdb/">ipdb</a> is highly recommended, as is reproducing the most minimal example of the issue in a notebook.</p>
</section>
<section id="formatting">
<h2>Formatting<a class="headerlink" href="#formatting" title="Permalink to this heading">#</a></h2>
<p>Symforce uses the <a class="reference external" href="https://github.com/astral-sh/ruff">Ruff</a> formatter for Python code.</p>
<p>Running <code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">format</span></code> will format the entire codebase. It’s recommended to develop with <a class="reference external" href="https://code.visualstudio.com/">VSCode</a> and integrate black or ruff.</p>
</section>
<section id="templates">
<h2>Templates<a class="headerlink" href="#templates" title="Permalink to this heading">#</a></h2>
<p>Much of the core functionality of SymForce is in generating code using the <a class="reference external" href="https://jinja.palletsprojects.com/en/3.0.x/">Jinja</a> template language. It’s relatively simple and easy to use - you pass it a template file in any language and a python dictionary of data, and it spits out the rendered code.</p>
<p>For example template files, see <a class="reference external" href="https://github.com/symforce-org/symforce/blob/main/symforce/codegen/backends/cpp/templates">symforce/codegen/backends/cpp/templates</a>.</p>
</section>
<section id="symbolic-api">
<h2>Symbolic API<a class="headerlink" href="#symbolic-api" title="Permalink to this heading">#</a></h2>
<p>SymForce uses the <a class="reference external" href="https://www.sympy.org/en/index.html">SymPy</a> API, but supports two implementations of it. The SymPy implementation is pure Python, whereas the <a class="reference external" href="https://github.com/symengine/symengine">SymEngine</a> implementation is wrapped C++. It can be 100-200 times faster for many operations, but is less fully featured and requires a C++ build.</p>
<p>To set the symbolic API, you can either use <a class="reference internal" href="api/symforce.html#symforce.set_symbolic_api" title="symforce.set_symbolic_api"><code class="xref py py-func docutils literal notranslate"><span class="pre">symforce.set_symbolic_api()</span></code></a> before any other imports, or use the <code class="docutils literal notranslate"><span class="pre">SYMFORCE_SYMBOLIC_API</span></code> environment variable with the options <code class="docutils literal notranslate"><span class="pre">sympy</span></code> or <code class="docutils literal notranslate"><span class="pre">symengine</span></code>. By default SymEngine will be used if found, otherwise SymPy.</p>
</section>
<section id="building-wheels">
<h2>Building wheels<a class="headerlink" href="#building-wheels" title="Permalink to this heading">#</a></h2>
<p>You should be able to build Python wheels of symforce the standard ways. We recommend using
<code class="docutils literal notranslate"><span class="pre">build</span></code>, i.e. running <code class="docutils literal notranslate"><span class="pre">python3</span> <span class="pre">-m</span> <span class="pre">build</span> <span class="pre">--wheel</span></code> from the <code class="docutils literal notranslate"><span class="pre">symforce</span></code> directory. By default,
this will build a wheel that includes local dependencies on the <code class="docutils literal notranslate"><span class="pre">skymarshal</span></code> and <code class="docutils literal notranslate"><span class="pre">symforce-sym</span></code>
packages (which are separate Python packages from <code class="docutils literal notranslate"><span class="pre">symforce</span></code> itself). For distribution, you’ll
typically want to set the environment variable <code class="docutils literal notranslate"><span class="pre">SYMFORCE_REWRITE_LOCAL_DEPENDENCIES=True</span></code> when
building, and also run <code class="docutils literal notranslate"><span class="pre">python3</span> <span class="pre">-m</span> <span class="pre">build</span> <span class="pre">--wheel</span> <span class="pre">third_party/skymarshal</span></code> and
<code class="docutils literal notranslate"><span class="pre">python3</span> <span class="pre">-m</span> <span class="pre">build</span> <span class="pre">--wheel</span> <span class="pre">gen/python</span></code> to build wheels for those packages separately.</p>
<p>For SymForce releases, all of this is handled by the <code class="docutils literal notranslate"><span class="pre">build_wheels</span></code> GitHub Actions workflow. This
workflow is currently run manually on a commit, and produces a <code class="docutils literal notranslate"><span class="pre">symforce-wheels.zip</span></code> artifact with
wheels (and sdists) for distribution (e.g. on PyPI). It doesn’t upload them to PyPI - to do that
(after verifying that the built wheels work as expected) you should download and unzip the archive,
and upload to PyPI with <code class="docutils literal notranslate"><span class="pre">python</span> <span class="pre">-m</span> <span class="pre">twine</span> <span class="pre">upload</span> <span class="pre">[--repository</span> <span class="pre">testpypi]</span> <span class="pre">--verbose</span> <span class="pre">*</span></code>.</p>
</section>
<section id="adding-new-types">
<h2>Adding new types<a class="headerlink" href="#adding-new-types" title="Permalink to this heading">#</a></h2>
<p>To add a new geo or cam type to SymForce:</p>
<ol class="arabic simple">
<li><p>Add a symbolic implementation of your type, to either the <a class="reference internal" href="api/symforce.geo.html#module-symforce.geo" title="symforce.geo"><code class="xref py py-mod docutils literal notranslate"><span class="pre">symforce.geo</span></code></a> or
<a class="reference internal" href="api/symforce.cam.html#module-symforce.cam" title="symforce.cam"><code class="xref py py-mod docutils literal notranslate"><span class="pre">symforce.cam</span></code></a> module. Add an import of your type in the <code class="docutils literal notranslate"><span class="pre">__init__.py</span></code> file for the
module.</p></li>
<li><p>For geo types, you should add it to the <code class="docutils literal notranslate"><span class="pre">notebooks/storage_D_tangent.ipynb</span></code> and
<code class="docutils literal notranslate"><span class="pre">notebooks/tangent_D_storage.ipynb</span></code> notebooks, and use the results there for your symbolic
implementation.</p></li>
<li><p>Create a test of your symbolic type, for example <code class="docutils literal notranslate"><span class="pre">test/geo_rot3_test.py</span></code> or
<code class="docutils literal notranslate"><span class="pre">test/cam_linear_test.py</span></code>.</p></li>
<li><p>For geo types, register their numerical equivalents in <code class="docutils literal notranslate"><span class="pre">ops/__init__.py</span></code></p></li>
<li><p>Add any custom methods you’d like on the runtime numerical classes to the corresponding file in
the <code class="docutils literal notranslate"><span class="pre">custom_methods</span></code> directory for each backend language</p></li>
<li><p>For geo types, add them to the <code class="docutils literal notranslate"><span class="pre">"Test</span> <span class="pre">implicit</span> <span class="pre">construction"</span></code> and <code class="docutils literal notranslate"><span class="pre">"Test</span> <span class="pre">lie</span> <span class="pre">group</span> <span class="pre">ops"</span></code> test
cases in <code class="docutils literal notranslate"><span class="pre">test/symforce_values_test.cc</span></code></p></li>
</ol>
</section>
</section>
</article>
</div>
<footer>
<div class="related-pages">
<a class="next-page" href="tutorials/sympy_tutorial.html">
<div class="page-info">
<div class="context">
<span>Next</span>
</div>
<div class="title">SymPy Tutorial</div>
</div>
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
</a>
<a class="prev-page" href="index.html">
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
<div class="page-info">
<div class="context">
<span>Previous</span>
</div>
<div class="title">Home</div>
</div>
</a>
</div>
<div class="bottom-of-page">
<div class="left-details">
<div class="copyright">
Copyright © 2022, Skydio, Inc
</div>
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
<a href="https://github.com/pradyunsg/furo">Furo</a>
</div>
<div class="right-details">
</div>
</div>
</footer>
</div>
<aside class="toc-drawer">
<div class="toc-sticky toc-scroll">
<div class="toc-title-container">
<span class="toc-title">
On this page
</span>
</div>
<div class="toc-tree-container">
<div class="toc-tree">
<ul>
<li><a class="reference internal" href="#">Development Guide</a><ul>
<li><a class="reference internal" href="#organization">Organization</a></li>
<li><a class="reference internal" href="#build">Build</a></li>
<li><a class="reference internal" href="#additional-useful-commands">Additional useful commands</a></li>
<li><a class="reference internal" href="#documentation">Documentation</a></li>
<li><a class="reference internal" href="#logging">Logging</a></li>
<li><a class="reference internal" href="#testing-and-coverage">Testing and Coverage</a></li>
<li><a class="reference internal" href="#formatting">Formatting</a></li>
<li><a class="reference internal" href="#templates">Templates</a></li>
<li><a class="reference internal" href="#symbolic-api">Symbolic API</a></li>
<li><a class="reference internal" href="#building-wheels">Building wheels</a></li>
<li><a class="reference internal" href="#adding-new-types">Adding new types</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</aside>
</div>
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=1bc1ca25"></script>
<script src="_static/doctools.js?v=888ff710"></script>
<script src="_static/sphinx_highlight.js?v=4825356b"></script>
<script src="_static/scripts/furo.js?v=32e29ea5"></script>
<script src="_static/clipboard.min.js?v=a7894cd8"></script>
<script src="_static/copybutton.js?v=c89b5d42"></script>
<script crossorigin="anonymous" integrity="sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=" src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js"></script>
</body>
</html>