Files
tinygrad/test/external/fuzz_symbolic.py
George Hotz 8b7ecd63bb Remove Zeroview (#748)
* no zeroview start

* closer

* stride mask

* st tests pass, delete ZeroView

* byebye zv

* close to working

* not contiguous with mask

* subtract, don't add

* mask on view

* ugh, that shouldn't have been in there

* shape merge

* bugfixes

* fuzzer + 4 fuzzer failures

* fuzzer for symbolic

* more fuzzing and nothing

* that fuzzer doesn't hit either

* fixes padding...ugh

* no more offsets

* working

* rewrite load and store

* all checks

* fix idxs

* progress

* bugfix

* float4_axis

* works

* cleanups

* complex valids_okay
2023-04-17 08:21:46 -07:00

51 lines
1.3 KiB
Python

import random
from tinygrad.shape.symbolic import Variable
def add_v(expr, rng=None):
if rng is None: rng = random.randint(0,2)
return expr + v[rng], rng
def div(expr, rng=None):
if rng is None: rng = random.randint(1,9)
return expr // rng, rng
def mul(expr, rng=None):
if rng is None: rng = random.randint(-4,4)
return expr * rng, rng
def mod(expr, rng=None):
if rng is None: rng = random.randint(1,9)
return expr % rng, rng
def add_num(expr, rng=None):
if rng is None: rng = random.randint(-4,4)
return expr + rng, rng
if __name__ == "__main__":
ops = [add_v, div, mul, add_num]
while 1:
u1 = Variable("v1", 0, 2)
u2 = Variable("v2", 0, 3)
u3 = Variable("v3", 0, 4)
v = [u1,u2,u3]
tape = [random.choice(ops) for _ in range(20)]
expr = Variable.num(0)
rngs = []
for t in tape:
expr, rng = t(expr)
print(t.__name__, rng)
rngs.append(rng)
print(expr)
for v1 in range(u1.min, u1.max+1):
for v2 in range(u2.min, u2.max+1):
for v3 in range(u3.min, u3.max+1):
v = [v1,v2,v3]
rn = 0
for t,r in zip(tape, rngs):
rn, _ = t(rn, r)
num = eval(expr.render())
assert num == rn, f"mismatch at {v1} {v2} {v3}, {num} != {rn}"
#print(v1, v2, v3, num, rn)