1 | initial version |

You have almost everything, just the interface to matrices. I put the following into a file `mat.py`

and within Sage, I evaluated `%attach mat.py`

.

```
M = FiniteEnumeratedSet({1, 2})
P0 = cartesian_product([M]*2)
P1 = P0.list()
P2 = cartesian_product([M]*4)
P3 = [p for p in P2 if p[0] <= p[1]]
C = P1 + P3 #len(C) total columns
R = P1*3 #len(R) total rows
d = {}
for (row, pair) in enumerate(R):
for (col, quad) in enumerate(C):
if pair == quad:
d[(row, col)] = -1
elif len(quad) == 4 and (pair == (quad[0], quad[2]) or pair == (quad[1], quad[3])):
d[(row, col)] = 1
m = matrix(d)
```

Try `list(enumerate(R))`

to see what `enumerate`

does, if it's not familiar. `d`

is a dictionary with entries keyed by pairs `(row, col)`

, and `matrix(d)`

produces the corresponding matrix, with zeroes for any unspecified entries.

2 | No.2 Revision |

You have almost everything, just missing the interface to matrices. I put the following into a file `mat.py`

and within Sage, I evaluated `%attach mat.py`

.

```
M = FiniteEnumeratedSet({1, 2})
P0 = cartesian_product([M]*2)
P1 = P0.list()
P2 = cartesian_product([M]*4)
P3 = [p for p in P2 if p[0] <= p[1]]
C = P1 + P3 #len(C) total columns
R = P1*3 #len(R) total rows
d = {}
for (row, pair) in enumerate(R):
for (col, quad) in enumerate(C):
if pair == quad:
d[(row, col)] = -1
elif len(quad) == 4 and (pair == (quad[0], quad[2]) or pair == (quad[1], quad[3])):
d[(row, col)] = 1
m = matrix(d)
```

Try `list(enumerate(R))`

to see what `enumerate`

does, if it's not familiar. `d`

is a dictionary with entries keyed by pairs `(row, col)`

, and `matrix(d)`

produces the corresponding matrix, with zeroes for any unspecified entries.

3 | No.3 Revision |

You have almost everything, just missing the interface to matrices. I put the following into a file `mat.py`

and within Sage, I evaluated `%attach mat.py`

.

```
M = FiniteEnumeratedSet({1, 2})
P0 = cartesian_product([M]*2)
P1 = P0.list()
P2 = cartesian_product([M]*4)
P3 = [p for p in P2 if p[0] <= p[1]]
C = P1 + P3 #len(C) total columns
R = P1*3 #len(R) total rows
d = {}
for (row, pair) in enumerate(R):
for (col, quad) in enumerate(C):
if pair == quad:
d[(row, col)] = -1
elif len(quad) == 4 and (pair == (quad[0], quad[2]) or pair == (quad[1], quad[3])):
d[(row, col)] = 1
m = matrix(d)
```

Try `list(enumerate(R))`

to see what `enumerate`

does, if it's not familiar. `d`

is a dictionary with entries keyed by pairs `(row, col)`

, and `matrix(d)`

produces the corresponding matrix, with zeroes for any unspecified entries.

Note that with your code, `R`

has the same thing repeated three times, so the matrix has the same rows repeated three times over. If I replace `R`

with just `P1`

, then here is the transpose of that matrix, with rows and columns labeled:

```
(1,1) (1,2) (2,1) (2,2)
(1, 1) [-1 0 0 0]
(1, 2) [ 0 -1 0 0]
(2, 1) [ 0 0 -1 0]
(2, 2) [ 0 0 0 -1]
(1, 1, 1, 1) [ 1 0 0 0]
(1, 1, 1, 2) [ 1 1 0 0]
(1, 1, 2, 1) [ 1 1 0 0]
(1, 1, 2, 2) [ 0 1 0 0]
(1, 2, 1, 1) [ 1 0 1 0]
(1, 2, 1, 2) [ 1 0 0 1]
(1, 2, 2, 1) [ 0 1 1 0]
(1, 2, 2, 2) [ 0 1 0 1]
(2, 2, 1, 1) [ 0 0 1 0]
(2, 2, 1, 2) [ 0 0 0 1]
```

How does this differ from what you're looking for?

Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.