On Thursday, August 21, 2014 8:52:36 AM UTC-7, juaninf wrote:
> q = 2
> nvars = 2
> k.<t> = GF(2^q)
> Xi = []
> xij = []
> for i in range(nvars):
> Xi.append(var('X'+str(i)))
> for j in range(q):
> xij.append(var('x'+str(i)+''+str(j)))
>
You never use these as "var", so it would probably be better to just create
them as strings, i.e., just delete the "var".
Note that the second line gets problematic once you go to 11: what does
x111 mean? Is it x_{1,11} or is it x_{11,1}?
Xi.append(t)
> P = PolynomialRing(k,names=Xi)
> R = PolynomialRing(k,names=xij)
> S = PolynomialRing(R,'t')
> p = P.random_element(degree=2)
> subsvar = [sum((t^i*R.gen(i+q*j) for i in range(q))) for j in
> range(nvars)]
> subsvar.append(t)
> p = p(subsvar)
>
you now have two objects called "t": the generator of k over GF(2) and a
polynomial variable in P as well as S. That could cause some trouble.
Anyway, the following seems to do what you ask, but I doubt it is what you
need. Shouldn't R and S be defined over GF(2) instead of over k?
sum([S(a.polynomial())*b for a,b in p(subsvar)])
Also, it sort of "happens" to work, because apparently sage prefers to map
the variable "t" you get from a.polynomial() (which lives in GF(2)['t']) to
the polynomial variable t in S rather than to the generator t of k over
GF(2). There's really no good reason why sage should choose one or the
other.
If instead you *don't* append 't' to Xi and do:
sage: P = PolynomialRing(k,names=Xi)
sage: R = PolynomialRing(GF(2),names=xij)
sage: S = PolynomialRing(R,'t')
sage: p = P.random_element(degree=2)
sage: subsvar = [sum((t^i*R.gen(i+q*j) for i in range(q))) for j in
range(nvars)]
sage: sum([S(a.polynomial())*R(b) for a,b in p(subsvar)])
there is no ambiguity, you do end up with a polynomial in
GF(2)[x00,...,x11][t], and I think the efficiency isn't so bad (there may
be implementation inefficiencies, but the work done here is roughly what
needs to happen anyway). Note the key step of "lifting" an element of k to
an element in GF(2)['t']. Also note that you have to explicitly push the
monomial b into R.
If this is not efficient enough, you should probably go all the way and do
the requisite manipulations on {exponent-vector: coefficient} dictionaries.
In that case you might want to write the loops in specialized cython too.
--
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/d/optout.