From classes and objects to trialsThree paths converge in experiments: model classes are compiled via schema and compiler; configured objects are laid out via schema and layout; observed data becomes sources whose rows are generated per replication. Class path — compiled once per class Instance path — laid out per experiment Input path — rows per replication Model classes Model classes class Shop(cb.Model) schema schema ClassSchema.of(cls) compiler compiler views · handles · njit CompiledClass CompiledClass callbacks + dispatch table Configured objects Configured objects shop = Shop(); shop.x = … schema schema Assembly.of(root) layout layout TrialImageLayout experiments experiments design · seeds · bind · run libcimba_py libcimba_py trial blocks · all cores Observed data Observed data arrays · panels cimba.inputs cimba.inputs sources: dist · trace · … row generation row generation vectorized, per replication results → analysis results → analysis read through objects callback addresses RecordLayout rows (shared by all points) outputs · captures · cursors Compiled code never sees instances or sources; structure and data never trigger recompilation.