symforce.opt.numeric_factor module

class NumericFactor(keys, optimized_keys, linearization_function)[source]

Bases: object

A class used to wrap linearization functions such that they can be used by the optimizer.

Parameters:
  • keys (Sequence[str]) – The set of keys that are inputs to the linearization function.

  • optimized_keys (Sequence[str]) – A subset of keys representing the keys which the given linearization function computes the jacobian with respect to.

  • linearization_function (Callable[…, Tuple[ndarray, ndarray, ndarray, ndarray]]) – A function that returns the residual, jacobian, hessian approximation, and right-hand-side used with the levenberg marquardt optimizer.

__init__(keys, optimized_keys, linearization_function)[source]
Parameters:
  • keys (Sequence[str]) –

  • optimized_keys (Sequence[str]) –

  • linearization_function (Callable[…, Tuple[ndarray, ndarray, ndarray, ndarray]]) –

classmethod from_file_python(keys, optimized_keys, output_dir, namespace, name)[source]

Loads a generated python linearization function from a given file. This can be used after generating a linearization function from a symbolic factor as follows:

Create a symbolic factor and generate the linearization function:

output_dir = “my_output_dir” namespace = “my_namespace” name = “my_custom_factor” sym_factor = Factor(

keys=my_keys, residual=my_func, name=name,

) sym_factor.generate(my_optimized_keys, output_dir, namespace)

Load the generated linearization function:
num_factor = NumericFactor.from_file_python(

my_keys, my_optimized_keys, output_dir, namespace, name

)

Parameters:
  • keys (Sequence[str]) – The set of keys that are inputs to the linearization function.

  • optimized_keys (Sequence[str]) – A subset of keys representing the keys which the given linearization function computes the jacobian with respect to.

  • output_dir (Union[str, PathLike]) – The top-level output directory of the linearization function.

  • namespace (str) – The namespace of the linearization function.

  • name (str) – The name of the linearization function.

Return type:

NumericFactor

linearize(inputs)[source]

Evaluates the linearization function for the given inputs. Returns the residual, jacobian, hessian approximation, and right hand side used with the levenberg marquardt optimizer.

Parameters:

inputs (Values) – Values object that does not contain any symbolic members and is ordered the same as the arguments to the linearization function.

Return type:

Tuple[ndarray, ndarray, ndarray, ndarray]

cc_factor(cc_key_map)[source]

Create a C++ Factor from this symbolic Factor, for use with the C++ Optimizer Note that while this is a C++ Factor object, the linearization function may be a compiled C++ function or a Python function passed into C++ through pybind, depending on the language the linearization function was generated in.

Parameters:

cc_key_map (Mapping[str, Key]) – Mapping from Python keys (strings, like returned by Values.keys_recursive()) to C++ keys

Return type:

Factor

Returns:

A C++ wrapped Factor object