Skip to content

Commit 4e2e586

Browse files
nathan-skydioaaron-skydio
authored andcommitted
[SymForce] More arguments passed through OptimizationProblem and Factor
GitOrigin-RevId: 762c17b53dba60f844525b6d55e53d3cb7c81e81
1 parent ff6cd01 commit 4e2e586

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

symforce/opt/factor.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,11 @@ def _initialize(
147147
self.name = self.codegen.name
148148

149149
def generate(
150-
self, optimized_keys: T.Sequence[str], output_dir: T.Openable = None, namespace: str = None
150+
self,
151+
optimized_keys: T.Sequence[str],
152+
output_dir: T.Openable = None,
153+
namespace: str = None,
154+
sparse_linearization: bool = False,
151155
) -> T.Dict[str, T.Any]:
152156
"""
153157
Generates the code needed to construct a NumericFactor from this Factor.
@@ -170,6 +174,7 @@ def generate(
170174
custom_jacobian=self.custom_jacobian_func(optimized_keys)
171175
if self.custom_jacobian_func is not None
172176
else None,
177+
sparse_linearization=sparse_linearization,
173178
)
174179

175180
output_data = codegen_with_linearization.generate_function(

symforce/opt/optimization_problem.py

+20-3
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,14 @@ def optimized_keys(self) -> T.List[str]:
9393
for value in optimized_values
9494
]
9595

96-
def generate(self, output_dir: T.Openable, namespace: str, name: str) -> None:
96+
def generate(
97+
self,
98+
output_dir: T.Openable,
99+
namespace: str,
100+
name: str,
101+
sparse_linearization: bool = False,
102+
config: codegen_config.CppConfig = None,
103+
) -> None:
97104
"""
98105
Generate everything needed to optimize `problem` in C++. This currently assumes there is
99106
only one factor generated for the optimization problem.
@@ -102,11 +109,21 @@ def generate(self, output_dir: T.Openable, namespace: str, name: str) -> None:
102109
output_dir: Directory in which to output the generated files.
103110
namespace: Namespace used in each generated file.
104111
name: Name of the generated factor.
112+
sparse_linearization: Whether the generated factors should use sparse jacobians/hessians
113+
config: C++ code configuration used with the linearization functions generated for each
114+
factor.
105115
"""
106-
factors = self.make_symbolic_factors(name=name, config=codegen_config.CppConfig())
116+
if config is None:
117+
config = codegen_config.CppConfig()
118+
119+
# Generate the C++ code for the residual linearization function
120+
factors = self.make_symbolic_factors(name=name, config=config)
107121
for factor in factors:
108122
output_data = factor.generate(
109-
optimized_keys=self.optimized_keys(), output_dir=output_dir, namespace=namespace
123+
optimized_keys=self.optimized_keys(),
124+
output_dir=output_dir,
125+
namespace=namespace,
126+
sparse_linearization=sparse_linearization,
110127
)
111128
logger.info(
112129
"Generated function `{}` in directory `{}`".format(

0 commit comments

Comments
 (0)