monty 0.0.21

A sandboxed, snapshotable Python interpreter written in Rust.
Documentation
# === Basic for loop ===
result = []
for i in range(5):
    result.append(i)
assert result == [0, 1, 2, 3, 4]

# === Tuple unpacking in for loop ===
pairs = [(1, 2), (3, 4), (5, 6)]
sums = []
for a, b in pairs:
    sums.append(a + b)
assert sums == [3, 7, 11]

# === Triple unpacking ===
triples = [(1, 2, 3), (4, 5, 6)]
products = []
for a, b, c in triples:
    products.append(a * b * c)
assert products == [6, 120]

# === Nested tuple unpacking ===
nested = [((1, 2), 3), ((4, 5), 6)]
results = []
for (a, b), c in nested:
    results.append(a + b + c)
assert results == [6, 15]

# === Deep nested unpacking ===
deep = [((1, 2), (3, 4)), ((5, 6), (7, 8))]
sums = []
for (a, b), (c, d) in deep:
    sums.append(a + b + c + d)
assert sums == [10, 26]

# === Mixed depth unpacking ===
mixed = [(1, (2, 3)), (4, (5, 6))]
results = []
for a, (b, c) in mixed:
    results.append(a + b + c)
assert results == [6, 15]

# === Unpacking with else clause ===
pairs = [(1, 2), (3, 4)]
total = 0
for a, b in pairs:
    total += a + b
else:
    total += 100
assert total == 110

# === Enumerate with unpacking ===
items = ['a', 'b', 'c']
result = []
for i, val in enumerate(items):
    result.append((i, val))
assert result == [(0, 'a'), (1, 'b'), (2, 'c')]

# === Dict items unpacking ===
d = {'x': 1, 'y': 2}
keys = []
vals = []
for k, v in d.items():
    keys.append(k)
    vals.append(v)
assert sorted(keys) == ['x', 'y']
assert sorted(vals) == [1, 2]