symforce.codegen.codegen_config module#

class ZeroEpsilonBehavior(value)[source]#

Bases: Enum

Options for what to do when attempting to generate code with the default epsilon set to 0

FAIL = 0#
WARN = 1#
ALLOW = 2#
class RenderTemplateConfig(autoformat=True, custom_preamble='')[source]#

Bases: object

Arguments to template_util.render_template

  • autoformat (bool) – Run a code formatter on the generated code. [This option is deprecated - future versions of SymForce will always autoformat generated code]

  • custom_preamble (str) – An optional string to be prepended on the front of the rendered template

autoformat: bool = True#
custom_preamble: str = ''#
class CodegenConfig(doc_comment_line_prefix, line_length, use_eigen_types, render_template_config=<factory>, cse_optimizations=None, zero_epsilon_behavior=<factory>, normalize_results=True)[source]#

Bases: object

Base class for backend-specific arguments for code generation.

  • doc_comment_line_prefix (str) – Prefix applied to each line in a docstring, e.g. “ * “ for C++ block-style docstrings

  • line_length (int) – Maximum allowed line length in docstrings; used for formatting docstrings.

  • use_eigen_types (bool) – Use eigen_lcm types for vectors instead of lists

  • render_template_config (RenderTemplateConfig) – Configuration for template rendering, see RenderTemplateConfig for more information

  • cse_optimizations (Literal['basic'] | ~typing.Sequence[~typing.Tuple[~typing.Callable, ~typing.Callable]] | None) – Optimizations argument to pass to sf.cse

  • zero_epsilon_behavior (ZeroEpsilonBehavior) – What should codegen do if a default epsilon is not set?

  • normalize_results (bool) – Should function outputs be explicitly projected onto the manifold before returning?

doc_comment_line_prefix: str#
line_length: int#
use_eigen_types: bool#
render_template_config: RenderTemplateConfig#
cse_optimizations: Literal['basic'] | Sequence[Tuple[Callable, Callable]] | None = None#
zero_epsilon_behavior: ZeroEpsilonBehavior#
normalize_results: bool = True#
abstract classmethod backend_name()[source]#

String name for the backend. This should match the directory name in codegen/backends and will be used to namespace by backend in generated code.

Return type:


abstract classmethod template_dir()[source]#

Directory for jinja templates.

Return type:


abstract templates_to_render(generated_file_name)[source]#

Given a single symbolic function’s filename, provide one or more Jinja templates to render and the relative output paths where they should go.


generated_file_name (str) –

Return type:

List[Tuple[str, str]]

abstract printer()[source]#

Return an instance of the code printer to use for this language.

Return type:


static format_data_accessor(prefix, index)[source]#

Format data for accessing a data array in code.

  • prefix (str) –

  • index (int) –

Return type:


abstract format_matrix_accessor(key, i, j, *, shape)[source]#

Format accessor for 2D matrices.

Raises an index exception if either of the following is false:

0 <= i < shape[0]
0 <= j < shape[1]
Return type:


abstract static format_eigen_lcm_accessor(key, i)[source]#

Format accessor for eigen_lcm types.

Return type:



Derived classes may override this to customize the “template data” dict. This dict is passed to jinja at code-generation time.


data (Dict[str, Any]) – Dict passed by Codegen. The function should modify this in-place.

Return type: