Orders and Polytropes: Matrix Algebras from Valuations
Loading necessary packages
[4]:
using Pkg;
Pkg.status()
using Oscar;
Status `~/.julia/environments/v1.6/Project.toml`
[c52e3926] Atom v0.12.32
[7810ee48] Dory v0.1.0 `/Users/maazouz/Dropbox/Dory#master`
[7073ff75] IJulia v1.23.2
[c8e1da08] IterTools v1.3.0
[e5e0dc1b] Juno v0.8.4
[2edaba10] Nemo v0.22.1
[f1435218] Oscar v0.5.2
[d720cf60] Polymake v0.5.6
[7ef55214] pAdicSolver v0.1.0 `/Users/maazouz/Dropbox/pAdicSolver#padicSolvers`
[5]:
versioninfo()
Julia Version 1.6.2
Commit 1b93d53fc4 (2021-07-14 15:36 UTC)
Platform Info:
OS: macOS (x86_64-apple-darwin18.7.0)
CPU: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-11.0.1 (ORCJIT, skylake)
Defining functions
[4]:
#### Function that returns the inequalities defining the polytrope region P_d.
function polytropeRegionInequalities(d)
N = d*(d-1)*(d-1) + 2*d
Ineq = zeros(Integer,(N,1 + d*d))
row = 1
for i in 1:d
for j in 1:d
for k in 1:d
if i != j && j != k
Ineq[row,1 + (i-1)*d + j] = 1;
Ineq[row,1 + (j-1)*d + k] = 1;
Ineq[row,1 + (i-1)*d + k] = -1;
row = row + 1;
end
end
end
end;
for i in 1:d
Ineq[row,1 + (i-1)*d + i ] = 1
row = row + 1
Ineq[row,1 + (i-1)*d + i] = -1
row = row + 1
end;
return Ineq;
end;
#### Function that returns the inequalities defining the truncated polytrope region P_d(M).
function truncatedPolytropeRegionInequalities(M)
d = size(M)[1]
N = d*(d-1)*(d-1) + 2*d + d*(d-1)
Ineq = zeros(Integer,(N,1 + d*d))
row = 1
for i in 1:d
for j in 1:d
for k in 1:d
if i != j && j != k
Ineq[row,1 + (i-1)*d + j] = 1;
Ineq[row,1 + (j-1)*d + k] = 1;
Ineq[row,1 + (i-1)*d + k] = -1;
row = row + 1;
end
end
end
end;
for i in 1:d
Ineq[row,1 + (i-1)*d + i ] = 1;
row = row + 1;
Ineq[row,1 + (i-1)*d + i] = -1;
row = row + 1;
end;
for i in 1:d
for j in 1:d
if i!= j
Ineq[row, 1] = M[i,j];
Ineq[row, 1 + (i-1)*d + j] = -1;
row = row + 1;
end;
end;
end;
return Ineq;
end;
#### Function that returns the inequalities defining the semigroup of fractional ideals .
function SemiGroupInequalities(M)
d = size(M)[1];
N = 2*d*d*(d-1)
Ineq = zeros(Integer,(N + 2,1 + d*d))
row = 1
for i in 1:d
for j in 1:d
for k in 1:d
if k != j
Ineq[row,1] = M[k,j];
Ineq[row,1 + (i-1)*d + j] = -1;
Ineq[row,1 + (i-1)*d + k] = 1;
row = row + 1
end
if k != i
Ineq[row,1] = M[i,k];
Ineq[row,1 + (i-1)*d + j] = -1;
Ineq[row,1 + (k-1)*d + j] = 1;
row = row + 1
end
end
end
end
Ineq[N+1,2] = 1
Ineq[N+2,2] = -1
return Ineq;
end;
#### Function that returns the inequalities defining the polytrope Q_M defined by M.
function QMInequalities(M)
d = size(M)[1];
N = d*(d-1)
Ineq = zeros(Integer,(N + 2, 1 + d))
row = 1
for i in 1:d
for j in 1:d
if i != j
Ineq[row,1] = M[i,j];
Ineq[row,1 + i] = 1;
Ineq[row,1 + j] = -1;
row = row + 1
end
end
end
Ineq[N+1,2] = 1
Ineq[N+2,2] = -1
return Ineq;
end;
#### Tropical Min multiplication
function tropMultiply(A,B)
d = size(A)[1];
C = zeros(Rational,(d,d))
for i in 1:d
for j in 1:d
C[i,j] = minimum(A[i,:] + B[:,j])
end
end
return C
end;
#### Multiplication in the semigroup \mathcal{Q}_M
function tropMultiplyHomotethy(A,B)
d = size(A)[1];
C = zeros(Rational,(d,d))
for i in 1:d
for j in 1:d
C[i,j] = minimum(A[i,:] + B[:,j])
end
end
return C - C[1,1]*ones(Rational, (d,d))
end;
#### Pseudo inverse in the semigroup \mathcal{Q}_M
function invert(M,N)
d = size(M)[1]
invN = zeros(Rational, (d,d))
for i in 1:d
for j in 1:d
a = maximum(M[:,j] - N[:,i])
b = maximum(M[i,:] - N[j,:])
invN[i,j] = max(a,b)
end
end
return invN;
end;
#### Inverse closure of ideals
function idealClosure(M,N)
return invert(M,invert(M,N));
end;
#### Computing inverse closed ideals and invertible ideals in the semigroup \mathcal{Q}_M.
function findGandS(M,L)
N = size(L)[1]
d = size(M)[1]
points = []
for i in 1:N
points = append!(points, [ transpose( reshape(L[i,:],(d,d)) ) ] )
end
closed = []
group = []
for N in points
cloN = idealClosure(M,N)
if(N == cloN)
closed = append!(closed,[N])
end
end
d = size(M)[1]
OneMatrix = ones(Rational, (d,d))
for N in closed
for A in closed
NA = tropMultiplyHomotethy(N, A);
AN = tropMultiplyHomotethy(A, N);
if( NA == M && AN == M)
group = append!(group,[N]);
break;
end;
end;
end;
return group, closed
end;
#### Describing G as a group of permutations to determine its structure using GAP.
function GroupAsPermutations(G)
group = Array{PermGroupElem}([])
for g in G
elem = Array{Int64}([])
for h in G
gh = tropMultiplyHomotethy(g,h)
index = findall(==(gh), G)
elem = append!(elem,index)
end
group = append!(group,[cperm(elem)])
end
return group
end;
Examples
Fractional ideals semi group \(\mathcal{Q}_M\) closed ideals and maximal subgroup elements \(\mathcal{G}_M\).
d = 2:
Example 1
The semigroup \(\mathcal{Q}_{M_1}\) and the group \(\mathcal{G}_{M_1}\) where \(M_1 = \begin{bmatrix}0&1\\1&0\end{bmatrix}\)
[5]:
M = [0 1;
1 0]
d = size(M)[1]
SemiGroupIneq = SemiGroupInequalities(M);
P = Oscar.Polymake.polytope.Polytope(INEQUALITIES=SemiGroupIneq);
L = P.LATTICE_POINTS_GENERATORS[1][:, 2:d*d + 1];
G , S = findGandS(M,L);
n = size(G)[1]
gens = GroupAsPermutations(G)
Sn = symmetric_group(n)
H = sub(Sn,gens)[1]
println("Groups elements")
for g in G
println(" ", g, "\n")end
println("\n \n Inverse closed fractional ideals")
for s in S
println(" ", s, "\n")
end
println("\n\n Small group identification", small_group_identification(H))
Groups elements
Polymake.Integer[0 -1; -1 0]
Polymake.Integer[0 1; 1 0]
Inverse closed fractional ideals
Polymake.Integer[0 -1; -1 0]
Polymake.Integer[0 0; 0 0]
Polymake.Integer[0 1; 1 0]
Small group identification(2, 1)
Example 2
The semigroup \(\mathcal{Q}_{M}\) and the group \(\mathcal{G}_{M}\) where \(M=\begin{bmatrix}0&3\\2&0\end{bmatrix}\)
[13]:
M = [0 3;
2 0]
d = size(M)[1]
SemiGroupIneq = SemiGroupInequalities(M);
P = Oscar.Polymake.polytope.Polytope(INEQUALITIES=SemiGroupIneq);
L = P.LATTICE_POINTS_GENERATORS[1][:, 2:d*d + 1];
G , S = findGandS(M,L);
n = size(G)[1]
gens = GroupAsPermutations(G)
Sn = symmetric_group(n)
H = sub(Sn,gens)[1]
println("Groups elements")
for g in G
println(" ", g, "\n")end
println("\n \n Inverse closed fractional ideals")
for s in S
println(" ", s, "\n")
end
println("\n\n Small group identification", small_group_identification(H))
Groups elements
Polymake.Integer[0 -2; -3 0]
Polymake.Integer[0 3; 2 0]
Inverse closed fractional ideals
Polymake.Integer[0 -2; -3 0]
Polymake.Integer[0 -1; -2 0]
Polymake.Integer[0 0; -1 0]
Polymake.Integer[0 1; 0 0]
Polymake.Integer[0 2; 1 0]
Polymake.Integer[0 3; 2 0]
Small group identification(2, 1)
d = 3:
Example 3
The semigroup \(\mathcal{Q}_{M_3}\) and the group \(\mathcal{G}_{M_3}\) where \(M_3 = \begin{bmatrix}0&1&1\\1&0&1\\1&1&0\end{bmatrix}\)
[18]:
M = [0 1 1;
1 0 1;
1 1 0];
d = size(M)[1];
SemiGroupIneq = SemiGroupInequalities(M);
P = Oscar.Polymake.polytope.Polytope(INEQUALITIES=SemiGroupIneq);
L = P.LATTICE_POINTS_GENERATORS[1][:, 2:d*d + 1];
G , S = findGandS(M,L);
n = size(G)[1];
gens = GroupAsPermutations(G);
Sn = symmetric_group(n);
H = sub(Sn,gens)[1];
println("Groups elements")
for g in G
println(" ", g, "\n")end
println("\n \n Inverse closed fractional ideals")
for s in S
println(" ", s, "\n")
end
#println("\n\n Small group identification", small_group_identification(H))
Groups elements
Polymake.Integer[0 -1 0; -1 0 0; 0 0 -1]
Polymake.Integer[0 -1 0; 0 0 -1; -1 0 0]
Polymake.Integer[0 0 -1; -1 0 0; 0 -1 0]
Polymake.Integer[0 0 -1; 0 -1 0; -1 0 0]
Polymake.Integer[0 1 1; 1 0 1; 1 1 0]
Polymake.Integer[0 1 1; 1 1 0; 1 0 1]
Inverse closed fractional ideals
Polymake.Integer[0 -1 -1; -1 0 0; 0 -1 -1]
Polymake.Integer[0 -1 -1; 0 -1 -1; -1 0 0]
Polymake.Integer[0 -1 -1; 0 0 0; 0 0 0]
Polymake.Integer[0 -1 0; -1 0 -1; -1 0 -1]
Polymake.Integer[0 -1 0; -1 0 0; 0 0 -1]
Polymake.Integer[0 -1 0; 0 -1 0; 0 0 0]
Polymake.Integer[0 -1 0; 0 0 -1; -1 0 0]
Polymake.Integer[0 -1 0; 0 0 0; 0 -1 0]
Polymake.Integer[0 -1 0; 0 0 0; 0 0 0]
Polymake.Integer[0 0 -1; -1 -1 0; -1 -1 0]
Polymake.Integer[0 0 -1; -1 0 0; 0 -1 0]
Polymake.Integer[0 0 -1; 0 -1 0; -1 0 0]
Polymake.Integer[0 0 -1; 0 0 -1; 0 0 0]
Polymake.Integer[0 0 -1; 0 0 0; 0 0 -1]
Polymake.Integer[0 0 -1; 0 0 0; 0 0 0]
Polymake.Integer[0 0 0; -1 -1 0; 0 0 0]
Polymake.Integer[0 0 0; -1 0 -1; 0 0 0]
Polymake.Integer[0 0 0; -1 0 0; -1 0 0]
Polymake.Integer[0 0 0; -1 0 0; 0 0 0]
Polymake.Integer[0 0 0; 0 -1 -1; 0 0 0]
Polymake.Integer[0 0 0; 0 -1 0; 0 -1 0]
Polymake.Integer[0 0 0; 0 -1 0; 0 0 0]
Polymake.Integer[0 0 0; 0 0 -1; 0 0 -1]
Polymake.Integer[0 0 0; 0 0 -1; 0 0 0]
Polymake.Integer[0 0 0; 0 0 0; -1 -1 0]
Polymake.Integer[0 0 0; 0 0 0; -1 0 -1]
Polymake.Integer[0 0 0; 0 0 0; -1 0 0]
Polymake.Integer[0 0 0; 0 0 0; 0 -1 -1]
Polymake.Integer[0 0 0; 0 0 0; 0 -1 0]
Polymake.Integer[0 0 0; 0 0 0; 0 0 -1]
Polymake.Integer[0 0 0; 0 0 0; 0 0 0]
Polymake.Integer[0 0 1; 0 0 1; 1 1 0]
Polymake.Integer[0 0 1; 1 1 0; 0 0 1]
Polymake.Integer[0 0 1; 1 1 1; 1 1 1]
Polymake.Integer[0 1 0; 0 1 0; 1 0 1]
Polymake.Integer[0 1 0; 1 0 1; 0 1 0]
Polymake.Integer[0 1 0; 1 1 1; 1 1 1]
Polymake.Integer[0 1 1; 0 1 1; 1 1 1]
Polymake.Integer[0 1 1; 1 0 0; 1 0 0]
Polymake.Integer[0 1 1; 1 0 1; 1 1 0]
Polymake.Integer[0 1 1; 1 1 0; 1 0 1]
Polymake.Integer[0 1 1; 1 1 1; 0 1 1]
Polymake.Integer[0 1 1; 1 1 1; 1 1 1]
Example 4
The semigroup \(\mathcal{Q}_{M}\) and the group \(\mathcal{G}_{M}\) where \(M = \begin{bmatrix}0&1&1\\0&0&1\\0&0&0\end{bmatrix}\)
[15]:
M = [0 1 1;
0 0 1;
0 0 0];
d = size(M)[1];
SemiGroupIneq = SemiGroupInequalities(M);
P = Oscar.Polymake.polytope.Polytope(INEQUALITIES=SemiGroupIneq);
L = P.LATTICE_POINTS_GENERATORS[1][:, 2:d*d + 1];
G , S = findGandS(M,L);
n = size(G)[1];
gens = GroupAsPermutations(G);
Sn = symmetric_group(n);
H = sub(Sn,gens)[1];
println("Groups elements")
for g in G
println(" ", g, "\n")end
println("\n \n Inverse closed fractional ideals")
for s in S
println(" ", s, "\n")
end
println("\n\n Small group identification", small_group_identification(H))
Groups elements
Polymake.Integer[0 0 0; -1 0 0; -1 -1 0]
Polymake.Integer[0 0 1; 0 0 0; -1 0 0]
Polymake.Integer[0 1 1; 0 0 1; 0 0 0]
Inverse closed fractional ideals
Polymake.Integer[0 0 0; -1 -1 0; -1 -1 0]
Polymake.Integer[0 0 0; -1 0 0; -1 -1 -1]
Polymake.Integer[0 0 0; -1 0 0; -1 -1 0]
Polymake.Integer[0 0 0; 0 0 0; -1 0 0]
Polymake.Integer[0 0 1; -1 0 0; -1 0 0]
Polymake.Integer[0 0 1; 0 0 0; -1 -1 0]
Polymake.Integer[0 0 1; 0 0 0; -1 0 0]
Polymake.Integer[0 0 1; 0 0 1; 0 0 0]
Polymake.Integer[0 1 1; 0 0 0; 0 0 0]
Polymake.Integer[0 1 1; 0 0 1; -1 0 0]
Polymake.Integer[0 1 1; 0 0 1; 0 0 0]
Polymake.Integer[0 1 1; 0 1 1; 0 0 1]
Small group identification(3, 1)
d = 4:
Example 5
The semigroup \(\mathcal{Q}_{M}\) and the group \(\mathcal{G}_{M}\) where \(M = \begin{bmatrix}0&1&1&1\\0&0&1&1\\0&0&0&1\\0&0&0&0\end{bmatrix}\)
[16]:
M = [0 1 1 1;
0 0 1 1;
0 0 0 1;
0 0 0 0]
d = size(M)[1];
SemiGroupIneq = SemiGroupInequalities(M);
P = Oscar.Polymake.polytope.Polytope(INEQUALITIES=SemiGroupIneq);
L = P.LATTICE_POINTS_GENERATORS[1][:, 2:d*d + 1];
G , S = findGandS(M,L);
n = size(G)[1];
gens = GroupAsPermutations(G);
Sn = symmetric_group(n);
H = sub(Sn,gens)[1];
println("Groups elements")
for g in G
println(" ", g, "\n")end
println("\n \n Inverse closed fractional ideals")
for s in S
println(" ", s, "\n")
end
println("\n\n Small group identification", small_group_identification(H))
Groups elements
Polymake.Integer[0 0 0 0; -1 0 0 0; -1 -1 0 0; -1 -1 -1 0]
Polymake.Integer[0 0 0 1; 0 0 0 0; -1 0 0 0; -1 -1 0 0]
Polymake.Integer[0 0 1 1; 0 0 0 1; 0 0 0 0; -1 0 0 0]
Polymake.Integer[0 1 1 1; 0 0 1 1; 0 0 0 1; 0 0 0 0]
Inverse closed fractional ideals
Polymake.Integer[0 0 0 0; -1 -1 -1 0; -1 -1 -1 0; -1 -1 -1 0]
Polymake.Integer[0 0 0 0; -1 -1 0 0; -1 -1 -1 0; -1 -1 -1 0]
Polymake.Integer[0 0 0 0; -1 -1 0 0; -1 -1 0 0; -1 -1 -1 0]
Polymake.Integer[0 0 0 0; -1 0 0 0; -1 -1 -1 -1; -1 -1 -1 -1]
Polymake.Integer[0 0 0 0; -1 0 0 0; -1 -1 -1 0; -1 -1 -1 -1]
Polymake.Integer[0 0 0 0; -1 0 0 0; -1 -1 -1 0; -1 -1 -1 0]
Polymake.Integer[0 0 0 0; -1 0 0 0; -1 -1 0 0; -1 -1 -1 -1]
Polymake.Integer[0 0 0 0; -1 0 0 0; -1 -1 0 0; -1 -1 -1 0]
Polymake.Integer[0 0 0 0; -1 0 0 0; -1 0 0 0; -1 -1 0 0]
Polymake.Integer[0 0 0 0; 0 0 0 0; -1 0 0 0; -1 -1 -1 -1]
Polymake.Integer[0 0 0 0; 0 0 0 0; -1 0 0 0; -1 -1 -1 0]
Polymake.Integer[0 0 0 0; 0 0 0 0; -1 0 0 0; -1 -1 0 0]
Polymake.Integer[0 0 0 0; 0 0 0 0; 0 0 0 0; -1 0 0 0]
Polymake.Integer[0 0 0 1; -1 -1 0 0; -1 -1 0 0; -1 -1 0 0]
Polymake.Integer[0 0 0 1; -1 0 0 0; -1 -1 0 0; -1 -1 0 0]
Polymake.Integer[0 0 0 1; -1 0 0 0; -1 0 0 0; -1 -1 0 0]
Polymake.Integer[0 0 0 1; 0 0 0 0; -1 -1 -1 0; -1 -1 -1 0]
Polymake.Integer[0 0 0 1; 0 0 0 0; -1 -1 0 0; -1 -1 -1 0]
Polymake.Integer[0 0 0 1; 0 0 0 0; -1 -1 0 0; -1 -1 0 0]
Polymake.Integer[0 0 0 1; 0 0 0 0; -1 0 0 0; -1 -1 -1 0]
Polymake.Integer[0 0 0 1; 0 0 0 0; -1 0 0 0; -1 -1 0 0]
Polymake.Integer[0 0 0 1; 0 0 0 0; 0 0 0 0; -1 0 0 0]
Polymake.Integer[0 0 0 1; 0 0 0 1; 0 0 0 0; -1 -1 -1 0]
Polymake.Integer[0 0 0 1; 0 0 0 1; 0 0 0 0; -1 -1 0 0]
Polymake.Integer[0 0 0 1; 0 0 0 1; 0 0 0 0; -1 0 0 0]
Polymake.Integer[0 0 0 1; 0 0 0 1; 0 0 0 1; 0 0 0 0]
Polymake.Integer[0 0 1 1; -1 0 0 0; -1 0 0 0; -1 0 0 0]
Polymake.Integer[0 0 1 1; 0 0 0 0; -1 0 0 0; -1 0 0 0]
Polymake.Integer[0 0 1 1; 0 0 0 0; 0 0 0 0; -1 0 0 0]
Polymake.Integer[0 0 1 1; 0 0 0 1; -1 -1 0 0; -1 -1 0 0]
Polymake.Integer[0 0 1 1; 0 0 0 1; -1 0 0 0; -1 -1 0 0]
Polymake.Integer[0 0 1 1; 0 0 0 1; -1 0 0 0; -1 0 0 0]
Polymake.Integer[0 0 1 1; 0 0 0 1; 0 0 0 0; -1 -1 0 0]
Polymake.Integer[0 0 1 1; 0 0 0 1; 0 0 0 0; -1 0 0 0]
Polymake.Integer[0 0 1 1; 0 0 0 1; 0 0 0 1; 0 0 0 0]
Polymake.Integer[0 0 1 1; 0 0 1 1; 0 0 0 1; -1 -1 0 0]
Polymake.Integer[0 0 1 1; 0 0 1 1; 0 0 0 1; -1 0 0 0]
Polymake.Integer[0 0 1 1; 0 0 1 1; 0 0 0 1; 0 0 0 0]
Polymake.Integer[0 0 1 1; 0 0 1 1; 0 0 1 1; 0 0 0 1]
Polymake.Integer[0 1 1 1; 0 0 0 0; 0 0 0 0; 0 0 0 0]
Polymake.Integer[0 1 1 1; 0 0 0 1; 0 0 0 0; 0 0 0 0]
Polymake.Integer[0 1 1 1; 0 0 0 1; 0 0 0 1; 0 0 0 0]
Polymake.Integer[0 1 1 1; 0 0 1 1; -1 0 0 0; -1 0 0 0]
Polymake.Integer[0 1 1 1; 0 0 1 1; 0 0 0 0; -1 0 0 0]
Polymake.Integer[0 1 1 1; 0 0 1 1; 0 0 0 0; 0 0 0 0]
Polymake.Integer[0 1 1 1; 0 0 1 1; 0 0 0 1; -1 0 0 0]
Polymake.Integer[0 1 1 1; 0 0 1 1; 0 0 0 1; 0 0 0 0]
Polymake.Integer[0 1 1 1; 0 0 1 1; 0 0 1 1; 0 0 0 1]
Polymake.Integer[0 1 1 1; 0 1 1 1; 0 0 1 1; -1 0 0 0]
Polymake.Integer[0 1 1 1; 0 1 1 1; 0 0 1 1; 0 0 0 0]
Polymake.Integer[0 1 1 1; 0 1 1 1; 0 0 1 1; 0 0 0 1]
Polymake.Integer[0 1 1 1; 0 1 1 1; 0 1 1 1; 0 0 1 1]
Small group identification(4, 1)
Example 6: warning: It might take a long time to finish the computation!
The semigroup \(\mathcal{Q}_{M}\) and the group \(\mathcal{G}_{M}\) where $M =
$
[ ]:
M = [0 1 1 1;
1 0 1 1;
1 1 0 1;
1 1 1 0]
d = size(M)[1];
SemiGroupIneq = SemiGroupInequalities(M);
P = Oscar.Polymake.polytope.Polytope(INEQUALITIES=SemiGroupIneq);
L = P.LATTICE_POINTS_GENERATORS[1][:, 2:d*d + 1];
G , S = findGandS(M,L);
n = size(G)[1];
gens = GroupAsPermutations(G);
Sn = symmetric_group(n);
H = sub(Sn,gens)[1];
println("Groups elements")
for g in G
println(" ", g, "\n")end
println("\n \n Inverse closed fractional ideals")
for s in S
println(" ", s, "\n")
end
println("\n\n Small group identification", small_group_identification(H))
Polytrope Region \(\mathcal{P}_d\) and truncated region \(\mathcal{P}_d(M)\)
d = 2
Example 1
[19]:
M = [0 1;
1 0];
d = size(M)[1];
P_dIneqs = polytropeRegionInequalities(d);
P_dMIneqs = truncatedPolytropeRegionInequalities(M);
P_d = Oscar.Polymake.polytope.Cone(INEQUALITIES=P_dIneqs);
P_dM = Oscar.Polymake.polytope.Polytope(INEQUALITIES=P_dMIneqs);
println("The polytrope region P_2 has f_vector: ",P_d.F_VECTOR)
println("\n \n")
println("The truncated polytrope region P_2(M) has f_vector: ",P_dM.F_VECTOR)
The polytrope region P_2 has f_vector: pm::Vector<pm::Integer>
The truncated polytrope region P_2(M) has f_vector: pm::Vector<pm::Integer>
3 4
d = 3:
Example 2
[23]:
M = [0 1 1;
1 0 1;
1 1 0];
d = size(M)[1];
P_dIneqs = polytropeRegionInequalities(d);
P_dMIneqs = truncatedPolytropeRegionInequalities(M);
P_d = Oscar.Polymake.polytope.Cone(INEQUALITIES=P_dIneqs);
P_dF_VECTOR = P_d.F_VECTOR;
P_dRays = P_d.RAYS;
P_dM = Oscar.Polymake.polytope.Polytope(INEQUALITIES=P_dMIneqs);
P_dMF_VECTOR = P_dM.F_VECTOR;
P_dMLatticePoints = P_dM.LATTICE_POINTS_GENERATORS[1][:, 2:d*d + 1];
println("The polytrope region P_3 has f_vector: ",P_dF_VECTOR)
println("\n \n")
println("The polytrope region P_3 has rays: ",P_dRays)
println("\n \n")
println("The truncated polytrope region P_3(M) has f_vector: ",P_dMF_VECTOR)
println("\n \n")
println("The truncated polytrope region P_3(M) has lattice points: ",P_dMLatticePoints)
The polytrope region P_3 has f_vector: pm::Vector<pm::Integer>
5 9 6
The polytrope region P_3 has rays: pm::Matrix<pm::Rational>
0 0 1 2 0 0 1 -1 0 0
0 0 0 1 0 0 1 0 0 0
0 0 1 1 0 0 1 -1 0 0
0 0 1 1 0 0 0 0 0 0
0 0 1 1 0 0 1 0 0 0
The truncated polytrope region P_3(M) has f_vector: pm::Vector<pm::Integer>
36 132 199 151 60 12
The truncated polytrope region P_3(M) has lattice points: pm::Matrix<pm::Integer>
0 -1 -1 1 0 0 1 0 0
0 -1 0 1 0 1 0 -1 0
0 -1 0 1 0 1 1 0 0
0 0 -1 0 0 -1 1 1 0
0 0 -1 1 0 0 1 1 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 1 0
0 0 0 1 0 0 1 0 0
0 0 0 1 0 0 1 1 0
0 0 0 1 0 1 0 0 0
0 0 0 1 0 1 1 0 0
0 0 0 1 0 1 1 1 0
0 0 1 0 0 1 -1 -1 0
0 0 1 0 0 1 0 0 0
0 0 1 0 0 1 1 1 0
0 0 1 1 0 1 0 -1 0
0 0 1 1 0 1 0 0 0
0 0 1 1 0 1 1 0 0
0 0 1 1 0 1 1 1 0
0 1 0 -1 0 -1 0 1 0
0 1 0 0 0 -1 1 1 0
0 1 0 0 0 0 0 1 0
0 1 0 0 0 0 1 1 0
0 1 0 1 0 0 1 1 0
0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 1 1 0
0 1 1 -1 0 0 -1 0 0
0 1 1 -1 0 0 0 1 0
0 1 1 0 0 0 0 0 0
0 1 1 0 0 0 0 1 0
0 1 1 0 0 0 1 1 0
0 1 1 0 0 1 -1 0 0
0 1 1 0 0 1 0 0 0
0 1 1 0 0 1 0 1 0
0 1 1 0 0 1 1 1 0
0 1 1 1 0 0 1 0 0
0 1 1 1 0 0 1 1 0
0 1 1 1 0 1 0 0 0
0 1 1 1 0 1 0 1 0
0 1 1 1 0 1 1 0 0
0 1 1 1 0 1 1 1 0
Example 3
[24]:
M = [0 1 1;
0 0 1;
0 0 0];
d = size(M)[1];
P_dIneqs = polytropeRegionInequalities(d);
P_dMIneqs = truncatedPolytropeRegionInequalities(M);
P_d = Oscar.Polymake.polytope.Cone(INEQUALITIES=P_dIneqs);
P_dF_VECTOR = P_d.F_VECTOR;
P_dRays = P_d.RAYS;
P_dM = Oscar.Polymake.polytope.Polytope(INEQUALITIES=P_dMIneqs);
P_dMF_VECTOR = P_dM.F_VECTOR;
P_dMLatticePoints = P_dM.LATTICE_POINTS_GENERATORS[1][:, 2:d*d + 1];
println("The polytrope region P_3 has f_vector: ",P_dF_VECTOR)
println("\n \n")
println("The polytrope region P_3 has rays: ",P_dRays)
println("\n \n")
println("The truncated polytrope region P_3(M) has f_vector: ",P_dMF_VECTOR)
println("\n \n")
println("The truncated polytrope region P_3(M) has lattice points: ",P_dMLatticePoints)
The polytrope region P_3 has f_vector: pm::Vector<pm::Integer>
5 9 6
The polytrope region P_3 has rays: pm::Matrix<pm::Rational>
0 0 1 2 0 0 1 -1 0 0
0 0 0 1 0 0 1 0 0 0
0 0 1 1 0 0 1 -1 0 0
0 0 1 1 0 0 0 0 0 0
0 0 1 1 0 0 1 0 0 0
The truncated polytrope region P_3(M) has f_vector: pm::Vector<pm::Integer>
8 27 49 51 30 9
The truncated polytrope region P_3(M) has lattice points: pm::Matrix<pm::Integer>
0 0 0 0 0 0 0 0 0
0 0 1 0 0 1 -1 -1 0
0 0 1 0 0 1 0 0 0
0 1 1 -1 0 0 -1 0 0
0 1 1 0 0 0 0 0 0
0 1 1 0 0 1 -1 0 0
0 1 1 0 0 1 0 0 0
d = 4:
Example 4
[25]:
M = [0 1 1 1;
0 0 1 1;
0 0 0 1;
0 0 0 0];
d = size(M)[1];
P_dIneqs = polytropeRegionInequalities(d);
P_dMIneqs = truncatedPolytropeRegionInequalities(M);
P_d = Oscar.Polymake.polytope.Cone(INEQUALITIES=P_dIneqs);
P_dF_VECTOR = P_d.F_VECTOR;
P_dRays = P_d.RAYS;
P_dM = Oscar.Polymake.polytope.Polytope(INEQUALITIES=P_dMIneqs);
P_dMF_VECTOR = P_dM.F_VECTOR;
P_dMLatticePoints = P_dM.LATTICE_POINTS_GENERATORS[1][:, 2:d*d + 1];
println("The polytrope region P_3 has f_vector: ",P_dF_VECTOR)
println("\n \n")
println("The polytrope region P_3 has rays: ",P_dRays)
println("\n \n")
println("The truncated polytrope region P_3(M) has f_vector: ",P_dMF_VECTOR)
println("\n \n")
println("The truncated polytrope region P_3(M) has lattice points: ",P_dMLatticePoints)
The polytrope region P_3 has f_vector: pm::Vector<pm::Integer>
37 327 1140 1902 1680 808 204 24
The polytrope region P_3 has rays: pm::Matrix<pm::Rational>
0 0 1 1 1 0 0 0 0 0 1 0 0 1 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 1 1 1 -1 0 0 0 0 1 0 0 0 1 1 0
0 0 1 1 1 -1 0 0 0 0 1 0 1 -1 0 0 0
0 0 1 1 1 -1 0 0 0 0 1 0 0 0 1 0 0
0 0 1 1 1 -1 0 0 0 0 1 0 1 0 1 0 0
0 0 1 1 0 0 0 0 0 0 1 0 0 1 2 1 0
0 0 1 1 1 0 0 0 0 0 1 0 1 0 1 1 0
0 0 1 1 1 0 0 0 0 0 1 0 1 0 1 0 0
0 0 1 1 1 0 0 0 0 0 1 0 0 0 1 1 0
0 0 1 1/2 1 -1/2 0 0 0 0 1 0 1/2 -1/2 1/2 0 0
0 0 1 0 1 0 0 0 0 0 1 0 1 0 1 0 0
0 0 1 1 0 0 0 0 0 0 1 0 0 0 1 1 0
0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0
0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0
0 0 1 1 1 0 0 0 0 0 1 0 1 0 0 0 0
0 0 1 1 0 0 0 0 0 0 1 0 0 1 1 1 0
0 0 1 0 0 0 0 0 0 0 1 0 0 1 1 1 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1 0 1/2 0 1/2 0 0
0 0 1 1 1 0 0 0 0 0 1 0 0 0 1 0 0
0 0 1 1 1 -1/2 0 0 0 0 1/2 0 1/2 -1/2 1/2 0 0
0 0 1 1 0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1/2 0 0 0 1 1/2 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1/2 0 1/2 0 1/2 1/2 0
0 0 1 1 1/2 -1/2 0 0 0 0 1/2 0 0 0 1/2 1/2 0
0 0 1 1/2 1 -1/2 0 0 0 0 1/2 0 1/2 -1/2 1/2 0 0
0 0 1 1/2 1 -1/2 0 0 0 0 1/2 0 1/2 -1/2 0 0 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1/2 0 0 0 1/2 0 0
0 0 1 1/2 1/2 0 0 0 0 0 1/2 0 1/2 0 1/2 0 0
0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0
0 0 1 1/2 1 -1/2 0 0 0 0 1/2 0 1/2 0 1/2 0 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1/2 0 1/2 0 1/2 0 0
0 0 1 1/2 1/2 0 0 0 0 0 1/2 0 0 0 1/2 1/2 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1/2 0 0 0 1/2 1/2 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1/2 0 1/2 -1/2 1/2 0 0
The truncated polytrope region P_3(M) has f_vector: pm::Vector<pm::Integer>
41 481 2674 8573 17473 23827 22264 14310 6233 1772 306 28
The truncated polytrope region P_3(M) has lattice points: pm::Matrix<pm::Integer>
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 1 0 0 0 1 -1 -1 -1 0
0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0
0 0 1 1 0 0 1 1 -1 -1 0 0 -1 -1 0 0
0 0 1 1 0 0 1 1 0 0 0 0 0 0 0 0
0 0 1 1 0 0 1 1 0 0 0 1 -1 -1 0 0
0 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0
0 1 1 1 -1 0 0 0 -1 0 0 0 -1 0 0 0
0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 0 0 0 1 0 0 0 1 -1 0 0 0
0 1 1 1 0 0 0 1 0 0 0 1 0 0 0 0
0 1 1 1 0 0 1 1 -1 0 0 0 -1 0 0 0
0 1 1 1 0 0 1 1 0 0 0 0 0 0 0 0
0 1 1 1 0 0 1 1 0 0 0 1 -1 0 0 0
0 1 1 1 0 0 1 1 0 0 0 1 0 0 0 0
Example 5
[27]:
M = [0 1 1 1;
1 0 1 1;
1 1 0 1;
1 1 1 0];
d = size(M)[1];
P_dIneqs = polytropeRegionInequalities(d);
P_dMIneqs = truncatedPolytropeRegionInequalities(M);
P_d = Oscar.Polymake.polytope.Cone(INEQUALITIES=P_dIneqs);
P_dF_VECTOR = P_d.F_VECTOR;
P_dRays = P_d.RAYS;
P_dM = Oscar.Polymake.polytope.Polytope(INEQUALITIES=P_dMIneqs);
P_dMF_VECTOR = P_dM.F_VECTOR;
P_dMLatticePoints = P_dM.LATTICE_POINTS_GENERATORS[1][:, 2:d*d + 1];
println("The polytrope region P_4 has f_vector: ",P_dF_VECTOR)
println("\n \n")
println("The polytrope region P_4 has rays: ",P_dRays)
println("\n \n")
println("The truncated polytrope region P_4(M) has f_vector: ",P_dMF_VECTOR)
println("\n \n")
println("The truncated polytrope region P_4(M) has lattice points: ",P_dMLatticePoints)
The polytrope region P_4 has f_vector: pm::Vector<pm::Integer>
37 327 1140 1902 1680 808 204 24
The polytrope region P_4 has rays: pm::Matrix<pm::Rational>
0 0 1 1 1 0 0 0 0 0 1 0 0 1 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 1 1 1 -1 0 0 0 0 1 0 0 0 1 1 0
0 0 1 1 1 -1 0 0 0 0 1 0 1 -1 0 0 0
0 0 1 1 1 -1 0 0 0 0 1 0 0 0 1 0 0
0 0 1 1 1 -1 0 0 0 0 1 0 1 0 1 0 0
0 0 1 1 0 0 0 0 0 0 1 0 0 1 2 1 0
0 0 1 1 1 0 0 0 0 0 1 0 1 0 1 1 0
0 0 1 1 1 0 0 0 0 0 1 0 1 0 1 0 0
0 0 1 1 1 0 0 0 0 0 1 0 0 0 1 1 0
0 0 1 1/2 1 -1/2 0 0 0 0 1 0 1/2 -1/2 1/2 0 0
0 0 1 0 1 0 0 0 0 0 1 0 1 0 1 0 0
0 0 1 1 0 0 0 0 0 0 1 0 0 0 1 1 0
0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0
0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0
0 0 1 1 1 0 0 0 0 0 1 0 1 0 0 0 0
0 0 1 1 0 0 0 0 0 0 1 0 0 1 1 1 0
0 0 1 0 0 0 0 0 0 0 1 0 0 1 1 1 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1 0 1/2 0 1/2 0 0
0 0 1 1 1 0 0 0 0 0 1 0 0 0 1 0 0
0 0 1 1 1 -1/2 0 0 0 0 1/2 0 1/2 -1/2 1/2 0 0
0 0 1 1 0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1/2 0 0 0 1 1/2 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1/2 0 1/2 0 1/2 1/2 0
0 0 1 1 1/2 -1/2 0 0 0 0 1/2 0 0 0 1/2 1/2 0
0 0 1 1/2 1 -1/2 0 0 0 0 1/2 0 1/2 -1/2 1/2 0 0
0 0 1 1/2 1 -1/2 0 0 0 0 1/2 0 1/2 -1/2 0 0 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1/2 0 0 0 1/2 0 0
0 0 1 1/2 1/2 0 0 0 0 0 1/2 0 1/2 0 1/2 0 0
0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0
0 0 1 1/2 1 -1/2 0 0 0 0 1/2 0 1/2 0 1/2 0 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1/2 0 1/2 0 1/2 0 0
0 0 1 1/2 1/2 0 0 0 0 0 1/2 0 0 0 1/2 1/2 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1/2 0 0 0 1/2 1/2 0
0 0 1 1/2 1/2 -1/2 0 0 0 0 1/2 0 1/2 -1/2 1/2 0 0
The truncated polytrope region P_4(M) has f_vector: pm::Vector<pm::Integer>
960 15612 82755 219299 341638 337275 218454 93894 26643 4892 558 36
The truncated polytrope region P_4(M) has lattice points: pm::Matrix<pm::Integer>
0 -1 -1 -1 1 0 0 0 1 0 0 0 1 0 0 0
0 -1 -1 0 1 0 0 1 1 0 0 1 0 -1 -1 0
0 -1 -1 0 1 0 0 1 1 0 0 1 1 0 0 0
0 -1 0 -1 1 0 1 0 0 -1 0 -1 1 0 1 0
0 -1 0 -1 1 0 1 0 1 0 0 0 1 0 1 0
0 -1 0 0 1 0 1 1 0 -1 0 0 0 -1 0 0
0 -1 0 0 1 0 1 1 0 -1 0 0 1 0 1 0
0 -1 0 0 1 0 1 1 1 0 0 0 1 0 0 0
0 -1 0 0 1 0 1 1 1 0 0 0 1 0 1 0
0 -1 0 0 1 0 1 1 1 0 0 1 0 -1 0 0
0 -1 0 0 1 0 1 1 1 0 0 1 1 0 0 0
0 -1 0 0 1 0 1 1 1 0 0 1 1 0 1 0
0 0 -1 -1 0 0 -1 -1 1 1 0 0 1 1 0 0
0 0 -1 -1 1 0 0 0 1 1 0 0 1 1 0 0
0 0 -1 0 0 0 -1 0 1 1 0 1 0 0 -1 0
0 0 -1 0 0 0 -1 0 1 1 0 1 1 1 0 0
0 0 -1 0 1 0 0 0 1 1 0 1 1 0 0 0
0 0 -1 0 1 0 0 0 1 1 0 1 1 1 0 0
0 0 -1 0 1 0 0 1 1 1 0 1 0 0 -1 0
0 0 -1 0 1 0 0 1 1 1 0 1 1 0 0 0
0 0 -1 0 1 0 0 1 1 1 0 1 1 1 0 0
0 0 0 -1 0 0 0 -1 0 0 0 -1 1 1 1 0
0 0 0 -1 0 0 0 -1 1 1 0 0 1 1 1 0
0 0 0 -1 1 0 0 0 1 0 0 0 1 1 1 0
0 0 0 -1 1 0 0 0 1 1 0 0 1 1 1 0
0 0 0 -1 1 0 1 0 0 0 0 -1 1 1 1 0
0 0 0 -1 1 0 1 0 1 0 0 0 1 1 1 0
0 0 0 -1 1 0 1 0 1 1 0 0 1 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 0 0 0 1 1 0 0 1 1 0 0
0 0 0 0 0 0 0 0 1 1 0 0 1 1 1 0
0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0
0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 0
0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 0
0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0
0 0 0 0 1 0 0 0 1 0 0 0 1 1 1 0
0 0 0 0 1 0 0 0 1 1 0 0 1 1 0 0
0 0 0 0 1 0 0 0 1 1 0 0 1 1 1 0
0 0 0 0 1 0 0 0 1 1 0 1 1 0 0 0
0 0 0 0 1 0 0 0 1 1 0 1 1 1 0 0
0 0 0 0 1 0 0 0 1 1 0 1 1 1 1 0
0 0 0 0 1 0 0 1 1 0 0 1 0 0 0 0
0 0 0 0 1 0 0 1 1 0 0 1 1 0 0 0
0 0 0 0 1 0 0 1 1 0 0 1 1 1 1 0
0 0 0 0 1 0 0 1 1 1 0 1 0 0 0 0
0 0 0 0 1 0 0 1 1 1 0 1 1 0 0 0
0 0 0 0 1 0 0 1 1 1 0 1 1 1 0 0
0 0 0 0 1 0 0 1 1 1 0 1 1 1 1 0
0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0
0 0 0 0 1 0 1 0 0 0 0 0 1 1 1 0
0 0 0 0 1 0 1 0 1 0 0 0 1 0 1 0
0 0 0 0 1 0 1 0 1 0 0 0 1 1 1 0
0 0 0 0 1 0 1 0 1 1 0 0 1 1 1 0
0 0 0 0 1 0 1 0 1 1 0 1 1 0 1 0
0 0 0 0 1 0 1 0 1 1 0 1 1 1 1 0
0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0
0 0 0 0 1 0 1 1 0 0 0 0 1 0 1 0
0 0 0 0 1 0 1 1 0 0 0 0 1 1 1 0
0 0 0 0 1 0 1 1 1 0 0 0 1 0 0 0
0 0 0 0 1 0 1 1 1 0 0 0 1 0 1 0
0 0 0 0 1 0 1 1 1 0 0 0 1 1 1 0
0 0 0 0 1 0 1 1 1 0 0 1 0 0 0 0
0 0 0 0 1 0 1 1 1 0 0 1 1 0 0 0
0 0 0 0 1 0 1 1 1 0 0 1 1 0 1 0
0 0 0 0 1 0 1 1 1 0 0 1 1 1 1 0
0 0 0 0 1 0 1 1 1 1 0 0 1 1 0 0
0 0 0 0 1 0 1 1 1 1 0 0 1 1 1 0
0 0 0 0 1 0 1 1 1 1 0 1 0 0 0 0
0 0 0 0 1 0 1 1 1 1 0 1 1 0 0 0
0 0 0 0 1 0 1 1 1 1 0 1 1 0 1 0
0 0 0 0 1 0 1 1 1 1 0 1 1 1 0 0
0 0 0 0 1 0 1 1 1 1 0 1 1 1 1 0
0 0 0 1 0 0 0 1 0 0 0 1 -1 -1 -1 0
0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0
0 0 0 1 0 0 0 1 0 0 0 1 1 1 1 0
0 0 0 1 0 0 0 1 1 1 0 1 0 0 -1 0
0 0 0 1 0 0 0 1 1 1 0 1 0 0 0 0
0 0 0 1 0 0 0 1 1 1 0 1 1 1 0 0
0 0 0 1 0 0 0 1 1 1 0 1 1 1 1 0
0 0 0 1 1 0 0 1 1 0 0 1 0 -1 -1 0
0 0 0 1 1 0 0 1 1 0 0 1 0 0 0 0
0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 0
0 0 0 1 1 0 0 1 1 0 0 1 1 1 1 0
0 0 0 1 1 0 0 1 1 1 0 1 0 0 -1 0
0 0 0 1 1 0 0 1 1 1 0 1 0 0 0 0
0 0 0 1 1 0 0 1 1 1 0 1 1 0 0 0
0 0 0 1 1 0 0 1 1 1 0 1 1 1 0 0
0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 0
0 0 0 1 1 0 1 1 0 0 0 1 0 -1 0 0
0 0 0 1 1 0 1 1 0 0 0 1 0 0 0 0
0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 0
0 0 0 1 1 0 1 1 0 0 0 1 1 1 1 0
0 0 0 1 1 0 1 1 1 0 0 1 0 -1 0 0
0 0 0 1 1 0 1 1 1 0 0 1 0 0 0 0
0 0 0 1 1 0 1 1 1 0 0 1 1 0 0 0
0 0 0 1 1 0 1 1 1 0 0 1 1 0 1 0
0 0 0 1 1 0 1 1 1 0 0 1 1 1 1 0
0 0 0 1 1 0 1 1 1 1 0 1 0 0 0 0
0 0 0 1 1 0 1 1 1 1 0 1 1 0 0 0
0 0 0 1 1 0 1 1 1 1 0 1 1 0 1 0
0 0 0 1 1 0 1 1 1 1 0 1 1 1 0 0
0 0 0 1 1 0 1 1 1 1 0 1 1 1 1 0
0 0 1 0 0 0 1 0 -1 -1 0 -1 0 0 1 0
0 0 1 0 0 0 1 0 0 0 0 -1 1 1 1 0
0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0
0 0 1 0 0 0 1 0 0 0 0 0 1 1 1 0
0 0 1 0 0 0 1 0 1 1 0 0 1 1 1 0
0 0 1 0 0 0 1 0 1 1 0 1 0 0 1 0
0 0 1 0 0 0 1 0 1 1 0 1 1 1 1 0
0 0 1 0 1 0 1 0 0 -1 0 -1 1 0 1 0
0 0 1 0 1 0 1 0 0 0 0 -1 1 1 1 0
0 0 1 0 1 0 1 0 0 0 0 0 1 0 1 0
0 0 1 0 1 0 1 0 0 0 0 0 1 1 1 0
0 0 1 0 1 0 1 0 1 0 0 0 1 0 1 0
0 0 1 0 1 0 1 0 1 0 0 0 1 1 1 0
0 0 1 0 1 0 1 0 1 1 0 0 1 1 1 0
0 0 1 0 1 0 1 0 1 1 0 1 1 0 1 0
0 0 1 0 1 0 1 0 1 1 0 1 1 1 1 0
0 0 1 0 1 0 1 1 0 -1 0 0 0 0 1 0
0 0 1 0 1 0 1 1 0 -1 0 0 1 0 1 0
0 0 1 0 1 0 1 1 0 0 0 0 0 0 1 0
0 0 1 0 1 0 1 1 0 0 0 0 1 0 1 0
0 0 1 0 1 0 1 1 0 0 0 0 1 1 1 0
0 0 1 0 1 0 1 1 1 0 0 0 1 0 1 0
0 0 1 0 1 0 1 1 1 0 0 0 1 1 1 0
0 0 1 0 1 0 1 1 1 0 0 1 0 0 1 0
0 0 1 0 1 0 1 1 1 0 0 1 1 0 1 0
0 0 1 0 1 0 1 1 1 0 0 1 1 1 1 0
0 0 1 0 1 0 1 1 1 1 0 0 1 1 1 0
0 0 1 0 1 0 1 1 1 1 0 1 0 0 1 0
0 0 1 0 1 0 1 1 1 1 0 1 1 0 1 0
0 0 1 0 1 0 1 1 1 1 0 1 1 1 1 0
0 0 1 1 0 0 1 1 -1 -1 0 0 -1 -1 0 0
0 0 1 1 0 0 1 1 -1 -1 0 0 0 0 1 0
0 0 1 1 0 0 1 1 0 0 0 0 0 0 0 0
0 0 1 1 0 0 1 1 0 0 0 0 0 0 1 0
0 0 1 1 0 0 1 1 0 0 0 0 1 1 1 0
0 0 1 1 0 0 1 1 0 0 0 1 -1 -1 0 0
0 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0
0 0 1 1 0 0 1 1 0 0 0 1 0 0 1 0
0 0 1 1 0 0 1 1 0 0 0 1 1 1 1 0
0 0 1 1 0 0 1 1 1 1 0 0 1 1 0 0
0 0 1 1 0 0 1 1 1 1 0 0 1 1 1 0
0 0 1 1 0 0 1 1 1 1 0 1 0 0 0 0
0 0 1 1 0 0 1 1 1 1 0 1 0 0 1 0
0 0 1 1 0 0 1 1 1 1 0 1 1 1 0 0
0 0 1 1 0 0 1 1 1 1 0 1 1 1 1 0
0 0 1 1 1 0 1 1 0 -1 0 0 0 -1 0 0
0 0 1 1 1 0 1 1 0 -1 0 0 0 0 1 0
0 0 1 1 1 0 1 1 0 -1 0 0 1 0 1 0
0 0 1 1 1 0 1 1 0 0 0 0 0 0 0 0
0 0 1 1 1 0 1 1 0 0 0 0 0 0 1 0
0 0 1 1 1 0 1 1 0 0 0 0 1 0 1 0
0 0 1 1 1 0 1 1 0 0 0 0 1 1 1 0
0 0 1 1 1 0 1 1 0 0 0 1 0 -1 0 0
0 0 1 1 1 0 1 1 0 0 0 1 0 0 0 0
0 0 1 1 1 0 1 1 0 0 0 1 0 0 1 0
0 0 1 1 1 0 1 1 0 0 0 1 1 0 1 0
0 0 1 1 1 0 1 1 0 0 0 1 1 1 1 0
0 0 1 1 1 0 1 1 1 0 0 0 1 0 0 0
0 0 1 1 1 0 1 1 1 0 0 0 1 0 1 0
0 0 1 1 1 0 1 1 1 0 0 0 1 1 1 0
0 0 1 1 1 0 1 1 1 0 0 1 0 -1 0 0
0 0 1 1 1 0 1 1 1 0 0 1 0 0 0 0
0 0 1 1 1 0 1 1 1 0 0 1 0 0 1 0
0 0 1 1 1 0 1 1 1 0 0 1 1 0 0 0
0 0 1 1 1 0 1 1 1 0 0 1 1 0 1 0
0 0 1 1 1 0 1 1 1 0 0 1 1 1 1 0
0 0 1 1 1 0 1 1 1 1 0 0 1 1 0 0
0 0 1 1 1 0 1 1 1 1 0 0 1 1 1 0
0 0 1 1 1 0 1 1 1 1 0 1 0 0 0 0
0 0 1 1 1 0 1 1 1 1 0 1 0 0 1 0
0 0 1 1 1 0 1 1 1 1 0 1 1 0 0 0
0 0 1 1 1 0 1 1 1 1 0 1 1 0 1 0
0 0 1 1 1 0 1 1 1 1 0 1 1 1 0 0
0 0 1 1 1 0 1 1 1 1 0 1 1 1 1 0
0 1 0 0 -1 0 -1 -1 0 1 0 0 0 1 0 0
0 1 0 0 0 0 -1 -1 1 1 0 0 1 1 0 0
0 1 0 0 0 0 -1 0 1 1 0 1 0 1 0 0
0 1 0 0 0 0 -1 0 1 1 0 1 1 1 0 0
0 1 0 0 0 0 0 -1 0 1 0 0 1 1 1 0
0 1 0 0 0 0 0 -1 1 1 0 0 1 1 1 0
0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0
0 1 0 0 0 0 0 0 0 1 0 0 1 1 1 0
0 1 0 0 0 0 0 0 1 1 0 0 1 1 0 0
0 1 0 0 0 0 0 0 1 1 0 0 1 1 1 0
0 1 0 0 0 0 0 0 1 1 0 1 0 1 0 0
0 1 0 0 0 0 0 0 1 1 0 1 1 1 0 0
0 1 0 0 0 0 0 0 1 1 0 1 1 1 1 0
0 1 0 0 1 0 0 0 1 1 0 0 1 1 0 0
0 1 0 0 1 0 0 0 1 1 0 0 1 1 1 0
0 1 0 0 1 0 0 0 1 1 0 1 1 1 0 0
0 1 0 0 1 0 0 0 1 1 0 1 1 1 1 0
0 1 0 0 1 0 0 1 1 1 0 1 0 1 0 0
0 1 0 0 1 0 0 1 1 1 0 1 1 1 0 0
0 1 0 0 1 0 0 1 1 1 0 1 1 1 1 0
0 1 0 0 1 0 1 0 0 1 0 0 1 1 1 0
0 1 0 0 1 0 1 0 1 1 0 0 1 1 1 0
0 1 0 0 1 0 1 0 1 1 0 1 1 1 1 0
0 1 0 0 1 0 1 1 0 1 0 0 0 1 0 0
0 1 0 0 1 0 1 1 0 1 0 0 1 1 1 0
0 1 0 0 1 0 1 1 1 1 0 0 1 1 0 0
0 1 0 0 1 0 1 1 1 1 0 0 1 1 1 0
0 1 0 0 1 0 1 1 1 1 0 1 0 1 0 0
0 1 0 0 1 0 1 1 1 1 0 1 1 1 0 0
0 1 0 0 1 0 1 1 1 1 0 1 1 1 1 0
0 1 0 1 -1 0 -1 0 0 1 0 1 -1 0 -1 0
0 1 0 1 -1 0 -1 0 0 1 0 1 0 1 0 0
0 1 0 1 0 0 -1 0 1 1 0 1 0 0 -1 0
0 1 0 1 0 0 -1 0 1 1 0 1 0 1 0 0
0 1 0 1 0 0 -1 0 1 1 0 1 1 1 0 0
0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0
0 1 0 1 0 0 0 0 0 1 0 1 0 1 0 0
0 1 0 1 0 0 0 0 0 1 0 1 1 1 1 0
0 1 0 1 0 0 0 0 1 1 0 1 0 0 0 0
0 1 0 1 0 0 0 0 1 1 0 1 0 1 0 0
0 1 0 1 0 0 0 0 1 1 0 1 1 1 0 0
0 1 0 1 0 0 0 0 1 1 0 1 1 1 1 0
0 1 0 1 0 0 0 1 0 1 0 1 -1 0 -1 0
0 1 0 1 0 0 0 1 0 1 0 1 0 0 0 0
0 1 0 1 0 0 0 1 0 1 0 1 0 1 0 0
0 1 0 1 0 0 0 1 0 1 0 1 1 1 1 0
0 1 0 1 0 0 0 1 1 1 0 1 0 0 -1 0
0 1 0 1 0 0 0 1 1 1 0 1 0 0 0 0
0 1 0 1 0 0 0 1 1 1 0 1 0 1 0 0
0 1 0 1 0 0 0 1 1 1 0 1 1 1 0 0
0 1 0 1 0 0 0 1 1 1 0 1 1 1 1 0
0 1 0 1 1 0 0 0 1 1 0 1 1 0 0 0
0 1 0 1 1 0 0 0 1 1 0 1 1 1 0 0
0 1 0 1 1 0 0 0 1 1 0 1 1 1 1 0
0 1 0 1 1 0 0 1 1 1 0 1 0 0 -1 0
0 1 0 1 1 0 0 1 1 1 0 1 0 0 0 0
0 1 0 1 1 0 0 1 1 1 0 1 0 1 0 0
0 1 0 1 1 0 0 1 1 1 0 1 1 0 0 0
0 1 0 1 1 0 0 1 1 1 0 1 1 1 0 0
0 1 0 1 1 0 0 1 1 1 0 1 1 1 1 0
0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0
0 1 0 1 1 0 1 0 0 1 0 1 1 1 1 0
0 1 0 1 1 0 1 0 1 1 0 1 1 0 1 0
0 1 0 1 1 0 1 0 1 1 0 1 1 1 1 0
0 1 0 1 1 0 1 1 0 1 0 1 0 0 0 0
0 1 0 1 1 0 1 1 0 1 0 1 0 1 0 0
0 1 0 1 1 0 1 1 0 1 0 1 1 0 1 0
0 1 0 1 1 0 1 1 0 1 0 1 1 1 1 0
0 1 0 1 1 0 1 1 1 1 0 1 0 0 0 0
0 1 0 1 1 0 1 1 1 1 0 1 0 1 0 0
0 1 0 1 1 0 1 1 1 1 0 1 1 0 0 0
0 1 0 1 1 0 1 1 1 1 0 1 1 0 1 0
0 1 0 1 1 0 1 1 1 1 0 1 1 1 0 0
0 1 0 1 1 0 1 1 1 1 0 1 1 1 1 0
0 1 1 0 -1 0 0 -1 -1 0 0 -1 0 1 1 0
0 1 1 0 -1 0 0 -1 0 1 0 0 0 1 1 0
0 1 1 0 0 0 0 -1 0 0 0 -1 1 1 1 0
0 1 1 0 0 0 0 -1 0 1 0 0 1 1 1 0
0 1 1 0 0 0 0 -1 1 1 0 0 1 1 1 0
0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0
0 1 1 0 0 0 0 0 0 0 0 0 1 1 1 0
0 1 1 0 0 0 0 0 0 1 0 0 0 1 1 0
0 1 1 0 0 0 0 0 0 1 0 0 1 1 1 0
0 1 1 0 0 0 0 0 1 1 0 0 1 1 1 0
0 1 1 0 0 0 0 0 1 1 0 1 0 1 1 0
0 1 1 0 0 0 0 0 1 1 0 1 1 1 1 0
0 1 1 0 0 0 1 0 -1 0 0 -1 0 1 1 0
0 1 1 0 0 0 1 0 0 0 0 -1 1 1 1 0
0 1 1 0 0 0 1 0 0 0 0 0 0 1 1 0
0 1 1 0 0 0 1 0 0 0 0 0 1 1 1 0
0 1 1 0 0 0 1 0 0 1 0 0 0 1 1 0
0 1 1 0 0 0 1 0 0 1 0 0 1 1 1 0
0 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0
0 1 1 0 0 0 1 0 1 1 0 1 0 1 1 0
0 1 1 0 0 0 1 0 1 1 0 1 1 1 1 0
0 1 1 0 1 0 0 0 1 0 0 0 1 1 1 0
0 1 1 0 1 0 0 0 1 1 0 0 1 1 1 0
0 1 1 0 1 0 0 0 1 1 0 1 1 1 1 0
0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0
0 1 1 0 1 0 0 1 1 0 0 1 1 1 1 0
0 1 1 0 1 0 0 1 1 1 0 1 0 1 1 0
0 1 1 0 1 0 0 1 1 1 0 1 1 1 1 0
0 1 1 0 1 0 1 0 0 0 0 -1 1 1 1 0
0 1 1 0 1 0 1 0 0 0 0 0 1 1 1 0
0 1 1 0 1 0 1 0 0 1 0 0 1 1 1 0
0 1 1 0 1 0 1 0 1 0 0 0 1 1 1 0
0 1 1 0 1 0 1 0 1 1 0 0 1 1 1 0
0 1 1 0 1 0 1 0 1 1 0 1 1 1 1 0
0 1 1 0 1 0 1 1 0 0 0 0 0 1 1 0
0 1 1 0 1 0 1 1 0 0 0 0 1 1 1 0
0 1 1 0 1 0 1 1 0 1 0 0 0 1 1 0
0 1 1 0 1 0 1 1 0 1 0 0 1 1 1 0
0 1 1 0 1 0 1 1 1 0 0 0 1 1 1 0
0 1 1 0 1 0 1 1 1 0 0 1 0 1 1 0
0 1 1 0 1 0 1 1 1 0 0 1 1 1 1 0
0 1 1 0 1 0 1 1 1 1 0 0 1 1 1 0
0 1 1 0 1 0 1 1 1 1 0 1 0 1 1 0
0 1 1 0 1 0 1 1 1 1 0 1 1 1 1 0
0 1 1 1 -1 0 0 0 -1 0 0 0 -1 0 0 0
0 1 1 1 -1 0 0 0 -1 0 0 0 0 1 1 0
0 1 1 1 -1 0 0 0 0 1 0 0 0 1 0 0
0 1 1 1 -1 0 0 0 0 1 0 0 0 1 1 0
0 1 1 1 -1 0 0 0 0 1 0 1 -1 0 0 0
0 1 1 1 -1 0 0 0 0 1 0 1 0 1 0 0
0 1 1 1 -1 0 0 0 0 1 0 1 0 1 1 0
0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 0
0 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0
0 1 1 1 0 0 0 0 0 1 0 0 0 1 0 0
0 1 1 1 0 0 0 0 0 1 0 0 0 1 1 0
0 1 1 1 0 0 0 0 0 1 0 0 1 1 1 0
0 1 1 1 0 0 0 0 0 1 0 1 0 0 0 0
0 1 1 1 0 0 0 0 0 1 0 1 0 1 0 0
0 1 1 1 0 0 0 0 0 1 0 1 0 1 1 0
0 1 1 1 0 0 0 0 0 1 0 1 1 1 1 0
0 1 1 1 0 0 0 0 1 1 0 0 1 1 0 0
0 1 1 1 0 0 0 0 1 1 0 0 1 1 1 0
0 1 1 1 0 0 0 0 1 1 0 1 0 0 0 0
0 1 1 1 0 0 0 0 1 1 0 1 0 1 0 0
0 1 1 1 0 0 0 0 1 1 0 1 0 1 1 0
0 1 1 1 0 0 0 0 1 1 0 1 1 1 0 0
0 1 1 1 0 0 0 0 1 1 0 1 1 1 1 0
0 1 1 1 0 0 0 1 0 0 0 1 -1 0 0 0
0 1 1 1 0 0 0 1 0 0 0 1 0 0 0 0
0 1 1 1 0 0 0 1 0 0 0 1 0 1 1 0
0 1 1 1 0 0 0 1 0 0 0 1 1 1 1 0
0 1 1 1 0 0 0 1 0 1 0 1 -1 0 0 0
0 1 1 1 0 0 0 1 0 1 0 1 0 0 0 0
0 1 1 1 0 0 0 1 0 1 0 1 0 1 0 0
0 1 1 1 0 0 0 1 0 1 0 1 0 1 1 0
0 1 1 1 0 0 0 1 0 1 0 1 1 1 1 0
0 1 1 1 0 0 0 1 1 1 0 1 0 0 0 0
0 1 1 1 0 0 0 1 1 1 0 1 0 1 0 0
0 1 1 1 0 0 0 1 1 1 0 1 0 1 1 0
0 1 1 1 0 0 0 1 1 1 0 1 1 1 0 0
0 1 1 1 0 0 0 1 1 1 0 1 1 1 1 0
0 1 1 1 0 0 1 0 -1 0 0 0 0 0 1 0
0 1 1 1 0 0 1 0 -1 0 0 0 0 1 1 0
0 1 1 1 0 0 1 0 0 0 0 0 0 0 1 0
0 1 1 1 0 0 1 0 0 0 0 0 0 1 1 0
0 1 1 1 0 0 1 0 0 0 0 0 1 1 1 0
0 1 1 1 0 0 1 0 0 1 0 0 0 1 1 0
0 1 1 1 0 0 1 0 0 1 0 0 1 1 1 0
0 1 1 1 0 0 1 0 0 1 0 1 0 0 1 0
0 1 1 1 0 0 1 0 0 1 0 1 0 1 1 0
0 1 1 1 0 0 1 0 0 1 0 1 1 1 1 0
0 1 1 1 0 0 1 0 1 1 0 0 1 1 1 0
0 1 1 1 0 0 1 0 1 1 0 1 0 0 1 0
0 1 1 1 0 0 1 0 1 1 0 1 0 1 1 0
0 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0
0 1 1 1 0 0 1 1 -1 0 0 0 -1 0 0 0
0 1 1 1 0 0 1 1 -1 0 0 0 0 0 1 0
0 1 1 1 0 0 1 1 -1 0 0 0 0 1 1 0
0 1 1 1 0 0 1 1 0 0 0 0 0 0 0 0
0 1 1 1 0 0 1 1 0 0 0 0 0 0 1 0
0 1 1 1 0 0 1 1 0 0 0 0 0 1 1 0
0 1 1 1 0 0 1 1 0 0 0 0 1 1 1 0
0 1 1 1 0 0 1 1 0 0 0 1 -1 0 0 0
0 1 1 1 0 0 1 1 0 0 0 1 0 0 0 0
0 1 1 1 0 0 1 1 0 0 0 1 0 0 1 0
0 1 1 1 0 0 1 1 0 0 0 1 0 1 1 0
0 1 1 1 0 0 1 1 0 0 0 1 1 1 1 0
0 1 1 1 0 0 1 1 0 1 0 0 0 1 0 0
0 1 1 1 0 0 1 1 0 1 0 0 0 1 1 0
0 1 1 1 0 0 1 1 0 1 0 0 1 1 1 0
0 1 1 1 0 0 1 1 0 1 0 1 -1 0 0 0
0 1 1 1 0 0 1 1 0 1 0 1 0 0 0 0
0 1 1 1 0 0 1 1 0 1 0 1 0 0 1 0
0 1 1 1 0 0 1 1 0 1 0 1 0 1 0 0
0 1 1 1 0 0 1 1 0 1 0 1 0 1 1 0
0 1 1 1 0 0 1 1 0 1 0 1 1 1 1 0
0 1 1 1 0 0 1 1 1 1 0 0 1 1 0 0
0 1 1 1 0 0 1 1 1 1 0 0 1 1 1 0
0 1 1 1 0 0 1 1 1 1 0 1 0 0 0 0
0 1 1 1 0 0 1 1 1 1 0 1 0 0 1 0
0 1 1 1 0 0 1 1 1 1 0 1 0 1 0 0
0 1 1 1 0 0 1 1 1 1 0 1 0 1 1 0
0 1 1 1 0 0 1 1 1 1 0 1 1 1 0 0
0 1 1 1 0 0 1 1 1 1 0 1 1 1 1 0
0 1 1 1 1 0 0 0 1 0 0 0 1 0 0 0
0 1 1 1 1 0 0 0 1 0 0 0 1 1 1 0
0 1 1 1 1 0 0 0 1 1 0 0 1 1 0 0
0 1 1 1 1 0 0 0 1 1 0 0 1 1 1 0
0 1 1 1 1 0 0 0 1 1 0 1 1 0 0 0
0 1 1 1 1 0 0 0 1 1 0 1 1 1 0 0
0 1 1 1 1 0 0 0 1 1 0 1 1 1 1 0
0 1 1 1 1 0 0 1 1 0 0 1 0 0 0 0
0 1 1 1 1 0 0 1 1 0 0 1 0 1 1 0
0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 0
0 1 1 1 1 0 0 1 1 0 0 1 1 1 1 0
0 1 1 1 1 0 0 1 1 1 0 1 0 0 0 0
0 1 1 1 1 0 0 1 1 1 0 1 0 1 0 0
0 1 1 1 1 0 0 1 1 1 0 1 0 1 1 0
0 1 1 1 1 0 0 1 1 1 0 1 1 0 0 0
0 1 1 1 1 0 0 1 1 1 0 1 1 1 0 0
0 1 1 1 1 0 0 1 1 1 0 1 1 1 1 0
0 1 1 1 1 0 1 0 0 0 0 0 1 0 1 0
0 1 1 1 1 0 1 0 0 0 0 0 1 1 1 0
0 1 1 1 1 0 1 0 0 1 0 0 1 1 1 0
0 1 1 1 1 0 1 0 0 1 0 1 1 0 1 0
0 1 1 1 1 0 1 0 0 1 0 1 1 1 1 0
0 1 1 1 1 0 1 0 1 0 0 0 1 0 1 0
0 1 1 1 1 0 1 0 1 0 0 0 1 1 1 0
0 1 1 1 1 0 1 0 1 1 0 0 1 1 1 0
0 1 1 1 1 0 1 0 1 1 0 1 1 0 1 0
0 1 1 1 1 0 1 0 1 1 0 1 1 1 1 0
0 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0
0 1 1 1 1 0 1 1 0 0 0 0 0 0 1 0
0 1 1 1 1 0 1 1 0 0 0 0 0 1 1 0
0 1 1 1 1 0 1 1 0 0 0 0 1 0 1 0
0 1 1 1 1 0 1 1 0 0 0 0 1 1 1 0
0 1 1 1 1 0 1 1 0 0 0 1 0 0 0 0
0 1 1 1 1 0 1 1 0 0 0 1 0 0 1 0
0 1 1 1 1 0 1 1 0 0 0 1 0 1 1 0
0 1 1 1 1 0 1 1 0 0 0 1 1 0 1 0
0 1 1 1 1 0 1 1 0 0 0 1 1 1 1 0
0 1 1 1 1 0 1 1 0 1 0 0 0 1 0 0
0 1 1 1 1 0 1 1 0 1 0 0 0 1 1 0
0 1 1 1 1 0 1 1 0 1 0 0 1 1 1 0
0 1 1 1 1 0 1 1 0 1 0 1 0 0 0 0
0 1 1 1 1 0 1 1 0 1 0 1 0 0 1 0
0 1 1 1 1 0 1 1 0 1 0 1 0 1 0 0
0 1 1 1 1 0 1 1 0 1 0 1 0 1 1 0
0 1 1 1 1 0 1 1 0 1 0 1 1 0 1 0
0 1 1 1 1 0 1 1 0 1 0 1 1 1 1 0
0 1 1 1 1 0 1 1 1 0 0 0 1 0 0 0
0 1 1 1 1 0 1 1 1 0 0 0 1 0 1 0
0 1 1 1 1 0 1 1 1 0 0 0 1 1 1 0
0 1 1 1 1 0 1 1 1 0 0 1 0 0 0 0
0 1 1 1 1 0 1 1 1 0 0 1 0 0 1 0
0 1 1 1 1 0 1 1 1 0 0 1 0 1 1 0
0 1 1 1 1 0 1 1 1 0 0 1 1 0 0 0
0 1 1 1 1 0 1 1 1 0 0 1 1 0 1 0
0 1 1 1 1 0 1 1 1 0 0 1 1 1 1 0
0 1 1 1 1 0 1 1 1 1 0 0 1 1 0 0
0 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0
0 1 1 1 1 0 1 1 1 1 0 1 0 0 0 0
0 1 1 1 1 0 1 1 1 1 0 1 0 0 1 0
0 1 1 1 1 0 1 1 1 1 0 1 0 1 0 0
0 1 1 1 1 0 1 1 1 1 0 1 0 1 1 0
0 1 1 1 1 0 1 1 1 1 0 1 1 0 0 0
0 1 1 1 1 0 1 1 1 1 0 1 1 0 1 0
0 1 1 1 1 0 1 1 1 1 0 1 1 1 0 0
0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0
Example 6: Warning: F_vector computation takes a long time!!
[ ]:
d = 5
P_dIneqs = polytropeRegionInequalities(d);
P_d = Oscar.Polymake.polytope.Cone(INEQUALITIES=P_dIneqs);
P_dF_VECTOR = P_d.F_VECTOR;
P_dRays = P_d.RAYS;
println("The polytrope region P_5 has f_vector: ",P_dF_VECTOR)
println("\n \n")
println("The polytrope region P_5 has rays: ",P_dRays)