Dear Sage Developers,
the Elias bound of coding theory is wrongly implemented. Compare
sage: elias_upper_bound(10,2,8,algorithm="gap"), elias_upper_bound(10,2,8)
(4, 120)
Looking at the relevant piece of code
else:
def ff(n,d,w,q):
return r*n*d*q**n/((w**2-2*r*n*w+r*n*d)*volume_hamming(n,q,w));
def get_list(n,d,q):
I = []
for i in range(1,int(r*n)+1):
if i**2-2*r*n*i+r*n*d>0:
I.append(i)
return I
I = get_list(n,d,q)
bnd = min([ff(n,d,w,q) for w in I])
return int(bnd)
reveals the mistake: The `return I' is one tab too deep, it has to get
executed after the for loop is finished.
One other note, which also refers to the otherwise correct algorithm="gap"
version: Something like elias_upper_bound(10,2,1) yields an error because
for these parameters the Elias bound is not defined. Wouldn't it be better
to return some trivial but true result in this case, like q^n?
Yet another question: Does the above example, where two functions get
defined but each of them gets used only at one place, follow certain coding
conventions? As a work around, I implemented the Elias bound as
t = n*(1-1/q)
lr = [(r,r^2-2*t*r+t*d) for r in [1..floor(t)]]
lv = [t*d*q^n/z/volume_hamming(n,q,r) for (r,z) in lr if z > 0]
return q^n if len(lv) == 0 else floor(min(lv))
which looks cleaner to me.
Best wishes,
Peter M.
--
You received this message because you are subscribed to the Google Groups
"sage-support" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-support.
For more options, visit https://groups.google.com/groups/opt_out.