> So is this a bug, or is there some subtle aspect of the set { ... }
> constuction that I'm misusing?

Oy, that's cute!  The second matrix index lives in Zmod(5), and behaves as such:

sage: wA = matrix(QuadraticField(2),5,{(j,mod(j+1,5)):1 for j in range(5)})
sage: wA.dict()
{(0, 1): 1, (1, 2): 1, (3, 4): 1, (2, 3): 1, (4, 0): 1}
sage: for key in wA.dict():
....:     print key, map(parent, key)
....:
(0, 1) [<type 'int'>, Ring of integers modulo 5]
(1, 2) [<type 'int'>, Ring of integers modulo 5]
(3, 4) [<type 'int'>, Ring of integers modulo 5]
(2, 3) [<type 'int'>, Ring of integers modulo 5]
(4, 0) [<type 'int'>, Ring of integers modulo 5]

and so when _list() goes to build the flattened list, its arithmetic
here doesn't hold:

     v[i*self._ncols + j] = x

For example (diagnostic print statements mine):

sage: wA
nrows 5 ncols 5 with parents <type 'int'> <type 'int'>
[((0, 1), 1), ((1, 2), 1), ((3, 4), 1), ((2, 3), 1), ((4, 0), 1)]
i is 0 with parent <type 'int'>
j is 1 with parent Ring of integers modulo 5
x is 1 with parent Number Field in a with defining polynomial x^2 - 2
0 1 1
v is now [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0]
i is 1 with parent <type 'int'>
j is 2 with parent Ring of integers modulo 5
x is 1 with parent Number Field in a with defining polynomial x^2 - 2
1 2 2
v is now [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0]
i is 3 with parent <type 'int'>
j is 4 with parent Ring of integers modulo 5
x is 1 with parent Number Field in a with defining polynomial x^2 - 2
3 4 4
v is now [0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0]
i is 2 with parent <type 'int'>
j is 3 with parent Ring of integers modulo 5
x is 1 with parent Number Field in a with defining polynomial x^2 - 2
2 3 3
v is now [0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0]
i is 4 with parent <type 'int'>
j is 0 with parent Ring of integers modulo 5
x is 1 with parent Number Field in a with defining polynomial x^2 - 2
4 0 0
v is now [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
computing rows: nr 5 nc 5
[1 1 1 1 1]
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]
sage:

I don't know if there's a use case for generic (i.e. non-int) indices
or not.  I've never needed them myself, but maybe there's a reason we
don't __index__/int the inputs?

In the meantime,

    matrix(QuadraticField(2),5,{(j,int(mod(j+1,5))):1 for j in range(5)})

should work.



Doug

-- 
To post to this group, send an email to sage-devel@googlegroups.com
To unsubscribe from this group, send an email to 
sage-devel+unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org

Reply via email to