You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
25 lines
859 B
25 lines
859 B
import random
|
|
import z3
|
|
from tinygrad import dtypes
|
|
from tinygrad.uop.spec import uops_to_z3, z3_cdiv
|
|
from tinygrad.uop.ops import UOp
|
|
from tinygrad.uop.decompositions import fast_idiv
|
|
random.seed(42)
|
|
|
|
powers_of_two = [2**i for i in range(64)]
|
|
if __name__ == "__main__":
|
|
for i in range(10_000):
|
|
if i % 1000 == 0:
|
|
print(f"Progress: {i}")
|
|
dt = random.choice(dtypes.ints)
|
|
u = UOp.variable('x', random.randint(dt.min, 0), random.randint(1, dt.max), dtype=dt)
|
|
d = random.randint(1, max(1, u.arg[2]))
|
|
if d in powers_of_two: continue
|
|
expr = fast_idiv(None, u, d)
|
|
if expr is None: continue
|
|
|
|
solver = z3.Solver()
|
|
z3_expr, x =uops_to_z3(solver, expr, u)
|
|
|
|
if solver.check(z3_expr != z3_cdiv(x, d)) == z3.sat:
|
|
assert False, f"Failed: {expr.render()} != x//{d} at x={solver.model()}\nx={u}\nd={d}\n{z3_expr=}\n{x/d=}"
|
|
|