Interleave

The interleave operation creates a state that alternates between parent states’ values in a round-robin fashion.

from statetracker import Manager, State, interleave

with Manager():
    A = State(num_values=3, name="A")
    B = State(num_values=3, name="B")

    C = interleave([A, B])  # 6 values

    for value in C:
        print(f"C={value}, A={A.value}, B={B.value}")
C=0, A=0, B=None
C=1, A=None, B=0
C=2, A=1, B=None
C=3, A=None, B=1
C=4, A=2, B=None
C=5, A=None, B=2

The values alternate: A’s value 0, B’s value 0, A’s value 1, B’s value 1, etc.

Warning

All states passed to interleave() must have the same num_values.

Combining Operations

Operations can be freely combined to create complex iteration patterns:

from statetracker import Manager, State, stack, shuffle, split

with Manager():
    # Create base states for different conditions
    control = State(num_values=10, name="control")
    treatment = State(num_values=10, name="treatment")

    # Stack them (20 values total)
    all_samples = stack([control, treatment])

    # Shuffle for randomization
    randomized = shuffle(all_samples, seed=42)

    # Split into train/test
    train, test = split(randomized, [0.8, 0.2])

    print(f"Train set: {train.num_values} samples")
    print(f"Test set: {test.num_values} samples")
Train set: 16 samples
Test set: 4 samples