Open cod3monk opened 7 years ago
The problem lies with the symbolic comparison of expressions. We will need a comparison function capable of comparing two sympy expressions, assuming that any non-loop-counter variables are of same size, larger than indices and positive:
imprt sympy
M = sympy.Symbol(name='M', positive=True, integer=True)
N = sympy.Symbol(name='N', positive=True, integer=True)
k = sympy.Symbol(name='k', positive=True, integer=True)
i = sympy.Symbol(name='i', positive=True, integer=True)
assert compare(M*M, M) > 0, "M*M > M"
assert compare(2*M, M) > 0, "2*M > M"
assert compare(N*M, M) > 0, "N*M > M"
assert compare(N*(k-1), N*k) < 0, "N*(k-1) < N*k"
assert compare(N*M*i+N*(k-1), N*M*i+N*k) < 0, "N*M*i+N*(k-1), N*M*i+N*k"
assert compare(N*M*(i+1) + N*(k-1), N*M*i+N*k) > 0, "N*M*(i+1)+N*(k-1) > N*M*i+N*k"
try:
compare(N*(i-1), N*k) > 0
assert False, "N*(i-1) uncomparable with N*k"
except ValueError:
pass
try:
compare(M*k, N*(k+1))
assert False, "M*k uncomparable with N*(k+1)"
except ValueError:
pass
Allow loading of machine model from current machine, as well as from file.