pyfcstm.render.statement

Statement rendering utilities for operation blocks.

This module renders operation-block statements from either DSL AST nodes or model-layer nodes into target-language text. It is the statement-level counterpart to pyfcstm.render.expr: expression rendering handles single expressions, while this module handles executable assignment and if block structures.

Built-in styles are provided for the main target-language set used by the project:

  • dsl - Render statements back into DSL text

  • c / cpp - Render statements with brace blocks and explicit temporary declarations

  • python - Render statements into Python code suitable for generated runtime methods

  • java / js / ts / rust / go - Render statements into directly usable code for those language families

For Python rendering, callers may pass state_vars so the renderer can distinguish persistent state variables from block-local temporary variables. State variables are emitted as scope["name"] accesses, while temporaries are emitted as local Python names. Temporary variable visibility follows the same branch-local semantics as pyfcstm.simulate.runtime.SimulationRuntime: names created inside one if branch do not leak to the outer scope.

For future static-language backends, the renderer also exposes a minimal temporary-declaration extension interface:

  • declare_temp - Optional template used when a temporary variable first appears

  • temp_type_aliases - Optional mapping from inferred DSL types to target-language types

  • temp_type_fallback - Optional fallback type when inference cannot decide

The built-in defaults follow a convention-over-configuration approach: when a caller selects one of the built-in language names without extra overrides, the renderer should emit broadly usable code for that language in most ordinary toolchains. Custom configuration remains available on top of these defaults.

The module exposes the following public functions:

create_stmt_render_template

pyfcstm.render.statement.create_stmt_render_template(lang_style: str = 'dsl', ext_configs: Dict[str, Any] | None = None) Dict[str, Any][source]

Create a statement-style configuration dictionary.

Parameters:
  • lang_style (str) – Base language style, one of 'dsl', 'c', 'cpp', 'python', 'java', 'js', 'ts', 'rust', or 'go'.

  • ext_configs (Optional[Dict[str, Any]]) – Optional overrides for the built-in style configuration.

Returns:

Statement-style configuration dictionary.

Return type:

Dict[str, Any]

Raises:

KeyError – If lang_style is not recognized.

Example:

>>> style = create_stmt_render_template('python')
>>> style['base_lang']
'python'

fn_stmt_render

pyfcstm.render.statement.fn_stmt_render(node: OperationStatement | OperationalStatement, templates: Dict[str, Any], env: Environment, state_vars: Iterable[str] | None = None, var_types: Mapping[str, Any] | None = None, visible_names: Iterable[str] | None = None, visible_var_types: Mapping[str, Any] | None = None, indent: str = '    ', level: int = 0) str[source]

Render one operation statement with a prepared statement style.

Parameters:
  • node (Union[OperationStatement, dsl_nodes.OperationalStatement]) – Statement node to render.

  • templates (Dict[str, Any]) – Prepared statement-style configuration.

  • env (jinja2.Environment) – Jinja2 environment.

  • state_vars (Optional[Iterable[str]]) – Persistent state variable names.

  • var_types (Optional[Mapping[str, Any]]) – Optional variable type mapping used for static-language extensions.

  • visible_names (Optional[Iterable[str]]) – Visible temporary names before this statement.

  • visible_var_types (Optional[Mapping[str, Any]]) – Visible temporary type mapping before this statement.

  • indent (str, optional) – Indentation unit string, defaults to '    '.

  • level (int, optional) – Initial indentation level, defaults to 0.

Returns:

Rendered statement text.

Return type:

str

fn_stmts_render

pyfcstm.render.statement.fn_stmts_render(nodes: Iterable[OperationStatement | OperationalStatement], templates: Dict[str, Any], env: Environment, state_vars: Iterable[str] | None = None, var_types: Mapping[str, Any] | None = None, visible_names: Iterable[str] | None = None, visible_var_types: Mapping[str, Any] | None = None, indent: str = '    ', level: int = 0, sep: str = '\n') str[source]

Render a sequence of operation statements with a prepared statement style.

Parameters:
  • nodes (Iterable[Union[OperationStatement, dsl_nodes.OperationalStatement]]) – Statement sequence to render.

  • templates (Dict[str, Any]) – Prepared statement-style configuration.

  • env (jinja2.Environment) – Jinja2 environment.

  • state_vars (Optional[Iterable[str]]) – Persistent state variable names.

  • var_types (Optional[Mapping[str, Any]]) – Optional variable type mapping used for static-language extensions.

  • visible_names (Optional[Iterable[str]]) – Visible temporary names before this sequence.

  • visible_var_types (Optional[Mapping[str, Any]]) – Visible temporary type mapping before this sequence.

  • indent (str, optional) – Indentation unit string, defaults to '    '.

  • level (int, optional) – Initial indentation level, defaults to 0.

  • sep (str, optional) – Separator between top-level rendered statements, defaults to newline.

Returns:

Rendered statement sequence.

Return type:

str

render_stmt_node

pyfcstm.render.statement.render_stmt_node(stmt: OperationStatement | OperationalStatement, lang_style: str = 'dsl', ext_configs: Dict[str, Any] | None = None, env: Environment | None = None, state_vars: Iterable[str] | None = None, var_types: Mapping[str, Any] | None = None, visible_names: Iterable[str] | None = None, visible_var_types: Mapping[str, Any] | None = None, indent: str = '    ', level: int = 0) str[source]

Render one statement with a built-in or extended language style.

Parameters:
  • stmt (Union[OperationStatement, dsl_nodes.OperationalStatement]) – Statement node.

  • lang_style (str, optional) – Base language style, defaults to 'dsl'.

  • ext_configs (Optional[Dict[str, Any]]) – Optional style overrides.

  • env (Optional[jinja2.Environment]) – Optional Jinja2 environment.

  • state_vars (Optional[Iterable[str]]) – Persistent state variable names.

  • var_types (Optional[Mapping[str, Any]]) – Optional variable type mapping used for static-language extensions.

  • visible_names (Optional[Iterable[str]]) – Visible temporary names before this statement.

  • visible_var_types (Optional[Mapping[str, Any]]) – Visible temporary type mapping before this statement.

  • indent (str, optional) – Indentation unit string.

  • level (int, optional) – Initial indentation level.

Returns:

Rendered statement text.

Return type:

str

render_stmt_nodes

pyfcstm.render.statement.render_stmt_nodes(stmts: Iterable[OperationStatement | OperationalStatement], lang_style: str = 'dsl', ext_configs: Dict[str, Any] | None = None, env: Environment | None = None, state_vars: Iterable[str] | None = None, var_types: Mapping[str, Any] | None = None, visible_names: Iterable[str] | None = None, visible_var_types: Mapping[str, Any] | None = None, indent: str = '    ', level: int = 0, sep: str = '\n') str[source]

Render a sequence of statements with a built-in or extended language style.

Parameters:
  • stmts (Iterable[Union[OperationStatement, dsl_nodes.OperationalStatement]]) – Statement sequence.

  • lang_style (str, optional) – Base language style, defaults to 'dsl'.

  • ext_configs (Optional[Dict[str, Any]]) – Optional style overrides.

  • env (Optional[jinja2.Environment]) – Optional Jinja2 environment.

  • state_vars (Optional[Iterable[str]]) – Persistent state variable names.

  • var_types (Optional[Mapping[str, Any]]) – Optional variable type mapping used for static-language extensions.

  • visible_names (Optional[Iterable[str]]) – Visible temporary names before this statement sequence.

  • visible_var_types (Optional[Mapping[str, Any]]) – Visible temporary type mapping before this statement sequence.

  • indent (str, optional) – Indentation unit string.

  • level (int, optional) – Initial indentation level.

  • sep (str, optional) – Separator between top-level rendered statements.

Returns:

Rendered statement sequence.

Return type:

str