larvaworld.portal.models_architecture.module_inspector_data

Pure data layer for the portal Module Inspector (no Panel/Bokeh).

Builds standalone module instances from moduleDB and steps them per “kind”:

  • “effector” (crawler, turner): step(A_in=<scalar>) with a constant A_in.

  • “feeder”: start_effector() once, then step() (self-oscillator, no input).

  • “sensor” (olfactor, toucher, windsensor, thermosensor): driven by a time-varying stimulus converted to the per-sensor dict input, step(A_in=<dict>).

Determinism:

Initial oscillator phase is randomized by default; after construction this layer sets phi = 0.0 when the attribute exists so repeated traces match for the same parameters (except NeuralOscillator warm-up, which uses stdlib random; tests should seed RNGs and assert structure, not exact floats).

Attributes

INSPECTABLE_MODULES

EXCLUDED_MODES

MODULE_KINDS

EFFECTOR_SIGNALS

CANDIDATE_SIGNALS

FEEDER_SIGNALS

SENSOR_SIGNALS

ALL_SIGNALS

DEFAULT_STEPS

DEFAULT_DT

DEFAULT_A_IN

FALLBACK_INPUT_RANGE

DEFAULT_STIMULUS

Functions

module_kind(→ str)

signals_for_kind(→ tuple[str, Ellipsis])

module_modes(→ tuple[str, Ellipsis])

mode_label(→ str)

default_module_config(→ Any)

Return a copy of the canonical default config for module_id / mode.

build_standalone_module(→ Any)

detect_signals(→ tuple[str, Ellipsis])

module_input_range(→ tuple[float, float])

list_inspectable_modules(...)

stimulus_series(→ list[float])

sensor_gain_keys(→ list[str])

Return the active gain_dict keys of a built sensor instance.

stimulus_to_input(→ dict[str, float])

Map a scalar stimulus onto the sensor input dict.

run_module_trace(...)

Module Contents

larvaworld.portal.models_architecture.module_inspector_data.INSPECTABLE_MODULES: tuple[str, Ellipsis] = ('crawler', 'turner', 'feeder', 'olfactor', 'toucher', 'windsensor', 'thermosensor')
larvaworld.portal.models_architecture.module_inspector_data.EXCLUDED_MODES: frozenset[str]
larvaworld.portal.models_architecture.module_inspector_data.MODULE_KINDS: dict[str, str]
larvaworld.portal.models_architecture.module_inspector_data.EFFECTOR_SIGNALS: tuple[str, Ellipsis] = ('input', 'activation', 'phi', 'output')
larvaworld.portal.models_architecture.module_inspector_data.CANDIDATE_SIGNALS: tuple[str, Ellipsis] = ('input', 'activation', 'phi', 'output')
larvaworld.portal.models_architecture.module_inspector_data.FEEDER_SIGNALS: tuple[str, Ellipsis] = ('phi', 'complete_iteration')
larvaworld.portal.models_architecture.module_inspector_data.SENSOR_SIGNALS: tuple[str, Ellipsis] = ('stimulus', 'output')
larvaworld.portal.models_architecture.module_inspector_data.ALL_SIGNALS: tuple[str, Ellipsis] = ('input', 'activation', 'phi', 'output', 'complete_iteration', 'stimulus')
larvaworld.portal.models_architecture.module_inspector_data.DEFAULT_STEPS: int = 100
larvaworld.portal.models_architecture.module_inspector_data.DEFAULT_DT: float = 0.1
larvaworld.portal.models_architecture.module_inspector_data.DEFAULT_A_IN: float = 0.0
larvaworld.portal.models_architecture.module_inspector_data.FALLBACK_INPUT_RANGE: tuple[float, float]
larvaworld.portal.models_architecture.module_inspector_data.DEFAULT_STIMULUS: larvaworld.portal.models_architecture.module_inspector_models.StimulusSpec
larvaworld.portal.models_architecture.module_inspector_data.module_kind(module_id: str) str
larvaworld.portal.models_architecture.module_inspector_data.signals_for_kind(kind: str) tuple[str, Ellipsis]
larvaworld.portal.models_architecture.module_inspector_data.module_modes(module_id: str) tuple[str, Ellipsis]
larvaworld.portal.models_architecture.module_inspector_data.mode_label(module_id: str, mode: str) str
larvaworld.portal.models_architecture.module_inspector_data.default_module_config(module_id: str, mode: str) Any

Return a copy of the canonical default config for module_id / mode.

MD.module_conf may return a shared default_dict entry; callers must not mutate the returned object without copying. This function always returns an independent copy so portal callers and tests cannot corrupt moduleDB defaults.

larvaworld.portal.models_architecture.module_inspector_data.build_standalone_module(module_id: str, mode: str, conf: Any | None = None, *, dt: float = DEFAULT_DT) Any
larvaworld.portal.models_architecture.module_inspector_data.detect_signals(module: Any, kind: str) tuple[str, Ellipsis]
larvaworld.portal.models_architecture.module_inspector_data.module_input_range(module: Any) tuple[float, float]
larvaworld.portal.models_architecture.module_inspector_data.list_inspectable_modules() tuple[larvaworld.portal.models_architecture.module_inspector_models.ModuleVariantSpec, Ellipsis]
larvaworld.portal.models_architecture.module_inspector_data.stimulus_series(stim: larvaworld.portal.models_architecture.module_inspector_models.StimulusSpec, steps: int, dt: float) list[float]
larvaworld.portal.models_architecture.module_inspector_data.sensor_gain_keys(module: Any) list[str]

Return the active gain_dict keys of a built sensor instance.

larvaworld.portal.models_architecture.module_inspector_data.stimulus_to_input(module_id: str, value: float, baseline: float, *, gain_keys: list[str] | None = None) dict[str, float]

Map a scalar stimulus onto the sensor input dict.

The input keys must match the instance gain_dict keys; otherwise the sensor treats the stimulus as a novel input with gain 0.0 and the output goes flat. When gain_keys is provided (the built module’s active keys), the stimulus follows whatever keys the user configured. Without it, the canonical per-sensor keys are used (backward-compatible default).

larvaworld.portal.models_architecture.module_inspector_data.run_module_trace(module_id: str, mode: str, conf: Any | None = None, *, steps: int = DEFAULT_STEPS, dt: float = DEFAULT_DT, a_in: float = DEFAULT_A_IN, stimulus: larvaworld.portal.models_architecture.module_inspector_models.StimulusSpec | None = None) larvaworld.portal.models_architecture.module_inspector_models.ModuleTraceResult