Source code for symforce.codegen.backends.rust.rust_config
# ----------------------------------------------------------------------------# SymForce - Copyright 2022, Skydio, Inc.# This source code is under the Apache 2.0 license found in the LICENSE file.# ----------------------------------------------------------------------------fromdataclassesimportdataclassfrompathlibimportPathfromsympy.printing.codeprinterimportCodePrinterfromsymforceimporttypingasTfromsymforce.codegen.backends.rustimportrust_code_printerfromsymforce.codegen.codegen_configimportCodegenConfigCURRENT_DIR=Path(__file__).parent
[docs]@dataclassclassRustConfig(CodegenConfig):""" Code generation config for the Rust backend. Args: doc_comment_line_prefix: Prefix applied to each line in a docstring line_length: Maximum allowed line length in docstrings; used for formatting docstrings. scala_type: The scalar type to use (float or double) use_eigen_types: Use eigen_lcm types for vectors instead of lists render_template_config: Configuration for template rendering, see RenderTemplateConfig for more information cse_optimizations: Optimizations argument to pass to :func:`sf.cse <symforce.symbolic.cse>` zero_epsilon_behavior: What should codegen do if a default epsilon is not set? normalize_results: Should function outputs be explicitly projected onto the manifold before returning? """doc_comment_line_prefix:str="///"line_length:int=100scalar_type:rust_code_printer.ScalarType=rust_code_printer.ScalarType.DOUBLEuse_eigen_types:bool=False
[docs]@staticmethoddefformat_matrix_accessor(key:str,i:int,j:int,*,shape:T.Tuple[int,int])->str:""" Format accessor for matrix types. Assumes matrices are row-major. """RustConfig._assert_indices_in_bounds(i,j,shape)ifshape[1]==1:returnf"{key}[{i}]"ifshape[0]==1:returnf"{key}[{j}]"returnf"{key}[({i}, {j})]"
[docs]@staticmethoddefformat_eigen_lcm_accessor(key:str,i:int)->str:""" Format accessor for eigen_lcm types. """raiseNotImplementedError("Rust does not support eigen_lcm")