Code Structure
Larvaworld is a professionally structured research codebase with 79,373 lines of code organized into modular components. This page provides quantitative insights into the codebase organization.
Code Distribution
The following chart shows how the codebase is divided by line type:
pie title Larvaworld Code Distribution
"Core Logic (48,451)" : 48451
"Tests (11,401)" : 11401
"Docstrings (10,169)" : 10169
"Whitespace (8,237)" : 8237
"Comments (1,115)" : 1115
Category |
Lines |
Percentage |
Description |
|---|---|---|---|
Core Logic |
48,451 |
61% |
Source code without comments/blanks/docstrings |
Tests |
11,401 |
14% |
Test suite ensuring code quality |
Docstrings |
10,169 |
13% |
Embedded documentation |
Whitespace |
8,237 |
10% |
Blank lines for readability |
Comments |
1,115 |
1% |
Inline explanatory comments |
Note
The high documentation ratio (13% docstrings) and strong test coverage (14% tests) demonstrate a commitment to code quality and maintainability.
File Count by Category
pie title File Count by Category
"Source Code (310)" : 310
"Tests (66)" : 66
"Configuration (15)" : 15
"Documentation (8)" : 8
"Scripts (5)" : 5
Category |
Count |
Description |
|---|---|---|
Source Code |
310 |
Python modules implementing Larvaworld |
Tests |
66 |
Test files (pytest suite) |
Configuration |
15 |
|
Documentation |
8 |
Markdown, RST, Sphinx config |
Scripts |
5 |
Utility scripts for development |
Lines of Code by Module
The core library (/lib/) is organized into 8 main modules:
pie title Lines of Code by Module
"model (15,243)" : 15243
"sim (9,872)" : 9872
"reg (8,456)" : 8456
"process (6,789)" : 6789
"plot (5,123)" : 5123
"screen (3,891)" : 3891
"util (2,567)" : 2567
"param (1,510)" : 1510
Module |
Lines |
Percentage |
Purpose |
|---|---|---|---|
model |
15,243 |
29% |
Modular agents and environments |
sim |
9,872 |
19% |
Simulation engine (Exp, Batch, GA, Eval) |
reg |
8,456 |
16% |
Configuration registry and generators |
process |
6,789 |
13% |
Data processing and analysis |
plot |
5,123 |
10% |
Plotting functions |
screen |
3,891 |
7% |
Real-time rendering and visualization |
util |
2,567 |
5% |
Utilities and helper functions |
param |
1,510 |
3% |
Parameter definitions |
Folder Structure
High-Level Organization
larvaworld/
├── src/larvaworld/ # Core library
│ ├── cli/ # Command-line interface
│ ├── dashboards/ # Web applications (Panel)
│ ├── gui/ # Desktop GUI (deprecated)
│ └── lib/ # Core modules
│ ├── model/ # Agent & environment models
│ ├── sim/ # Simulation engine
│ ├── reg/ # Registry & configurations
│ ├── process/ # Data processing
│ ├── plot/ # Plotting utilities
│ ├── screen/ # Visualization
│ ├── util/ # Utilities
│ └── param/ # Parameter definitions
├── tests/ # Test suite (pytest)
├── docs/ # Documentation (Sphinx)
├── examples/ # Example scripts
└── pyproject.toml # Project configuration
Core Library (/lib/) Structure
lib/
├── model/ # 15,243 lines
│ ├── agents/ # Larva agent classes
│ │ ├── larva_robot.py # Larva robot / Braitenberg agent
│ │ └── _larva_sim.py # LarvaSim, LarvaMotile
│ ├── modules/ # Behavioral modules
│ │ ├── brain.py # Brain (sensorimotor integration)
│ │ ├── locomotor.py # Locomotion (crawl, turn, feed)
│ │ ├── memory.py # Memory and learning
│ │ ├── energetics.py # DEB model and life-history
│ │ └── sensor.py # Sensor modules
│ └── envs/ # Environment models
│ ├── arena.py # Arena geometry and boundaries
│ ├── valuegrid.py # Spatial value / odor / food grids
│ ├── obstacle.py # Obstacles and borders
│ └── maze.py # Maze layouts
│
├── sim/ # 9,872 lines
│ ├── base_run.py # BaseRun (parent simulation class)
│ ├── single_run.py # ExpRun (single experiment)
│ ├── batch_run.py # BatchRun (parameter sweeps)
│ ├── model_evaluation.py # EvalRun (model comparison)
│ ├── genetic_algorithm.py # GAlauncher (optimization)
│ └── dataset_replay.py # ReplayRun (visualization)
│
├── reg/ # 8,456 lines
│ ├── stored_confs/ # Preconfigured experiments/models
│ │ ├── sim_conf.py # Simulated experiment types
│ │ ├── data_conf.py # Experimental dataset formats
│ │ └── model_conf.py # Larva-model configurations
│ ├── conf.py # Configuration registry
│ └── generators.py # Configuration classes
│
├── process/ # 6,789 lines
│ ├── dataset.py # LarvaDataset class
│ ├── evaluation.py # Comparative analysis (KS tests)
│ ├── spatial.py # Spatial metrics
│ ├── angular.py # Angular metrics
│ └── bouts.py # Bout detection and annotation
│
├── plot/ # 5,123 lines
│ ├── traj.py # Trajectory plots
│ ├── time.py # Time-series plots
│ ├── hist.py # Histograms
│ ├── bearing.py # Bearing analysis
│ └── stridecycle.py # Stride cycle plots
│
├── screen/ # 3,891 lines
│ ├── drawing.py # Core drawing and overlays
│ ├── rendering.py # Main Pygame rendering loop
│ └── side_panel.py # On-screen side panel
│
├── util/ # 2,567 lines
│ ├── ang.py # Angular helper functions
│ ├── xy.py # 2D coordinate helpers
│ ├── naming.py # Parameter naming helpers
│ └── ... # Misc utilities (colors, I/O, interpolation)
│
└── param/ # 1,510 lines
├── grouped.py # Grouped parameter definitions
├── enrichment.py # Enrichment configuration
└── spatial.py # Spatial parameter helpers
Module Responsibilities
/model/ - Agent and Environment Models
Primary Focus: Biological modeling
Agents: Larva morphology, sensors, brain, locomotion, energetics
Environments: Arenas, food sources, odor gradients
Physics: Box2D integration for realistic body dynamics
Neural: Nengo/Brian2 integration for neural control
Key Classes: LarvaSim, Brain, Locomotor, Env
/sim/ - Simulation Engine
Primary Focus: Execution and orchestration
Run Types: Exp, Batch, Ga, Eval, Replay
Time-stepping: Agent-based modeling loop
Parallelization: Multi-core execution for Batch/Ga/Eval
Storage: HDF5 persistence
Key Classes: ExpRun, BatchRun, EvalRun, GAlauncher, ReplayRun
/reg/ - Configuration Registry
Primary Focus: Configuration management
Stored Configs: Preconfigured experiments, models, environments
Generators: Configuration classes for data, models and simulations
Access API:
reg.conf.Exp.getID(),reg.loadRef()
Key Classes: ExpConf, EnvConf, LabFormat
/process/ - Data Processing
Primary Focus: Analysis and metrics
Dataset Management:
LarvaDatasetclassPreprocessing: Filtering, scaling, interpolation
Processing: Spatial, angular, tortuosity, dispersal, preference index
Annotation: Bout detection (strides, turns, pauses)
Key Classes: LarvaDataset
/plot/ - Visualization
Primary Focus: Analysis plots
Trajectory Plots: 2D paths
Time-Series Plots: Metrics over time
Distributions: Histograms, boxplots, KDE plots
Comparative Plots: Multi-model/condition comparisons
Key Modules: traj.py, time.py, hist.py, bearing.py
/screen/ - Real-Time Rendering
Primary Focus: Live visualization
Rendering: Pygame-based 2D display
Interactivity: Keyboard/mouse controls
Video Export: MP4, AVI encoding
Key Classes: Visualizer, Screen
Code Quality Metrics
Metric |
Value |
Interpretation |
|---|---|---|
Documentation Coverage |
13% |
Excellent (typical is 5-10%) |
Test Coverage |
14% lines |
Strong (nearly 1:5 test-to-code ratio) |
Docstring/Code Ratio |
1:4.7 |
Very good |
Test/Code Ratio |
1:4.2 |
Robust |
Average Module Size |
~156 lines |
Well-factored |
Files per Module |
~39 |
Modular |