From d5e6d98ac32d70eabdf8bc450b304dbbe1899f7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Tue, 21 Jan 2025 10:17:27 +0100 Subject: [PATCH 1/3] Refactor tricky indexing with common function --- src/lp.jl | 2 +- src/matrix.jl | 4 ++++ src/nash.jl | 6 +++--- src/redund.jl | 4 ++-- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/lp.jl b/src/lp.jl index dcbd5dc..47c24cf 100644 --- a/src/lp.jl +++ b/src/lp.jl @@ -172,7 +172,7 @@ function print_lpoutput(m::HMatrix, print_solution::Bool=false) for i in 0:P.d-1 C_i = unsafe_load(P.C, i+1) Col_i = unsafe_load(P.Col, i+1) - idx = unsafe_load(Q.inequality, C_i-Q.lastdv+1) + idx = unsafe_load_inequality(m, C_i) print(" y_$(idx)=") temp1 = extractbigint(unsafe_load(Q.Lcm, Col_i+1)) * (-1) temp1 *= extractbigint(unsafe_load(unsafe_load(P.A, 1), Col_i+1)) diff --git a/src/matrix.jl b/src/matrix.jl index 286bed7..611c1c9 100644 --- a/src/matrix.jl +++ b/src/matrix.jl @@ -55,6 +55,10 @@ function initmatrix(M::Matrix{Rational{BigInt}}, linset, Hrep::Bool) (P, Q) end +function unsafe_load_inequality(m::Matrix, idx) + Q = unsafe_load(m.Q) + return unsafe_load(Q.inequality, idx - Q.lastdv + 1) +end function fillmatrix(inequality::Bool, P::Ptr{Clrs_dic}, Q::Ptr{Clrs_dat}, itr::Polyhedra.ElemIt, offset::Int) for (i, item) in enumerate(itr) diff --git a/src/nash.jl b/src/nash.jl index 801f7ec..5e7857f 100644 --- a/src/nash.jl +++ b/src/nash.jl @@ -120,9 +120,9 @@ function nash2_main(hr1::HMatrix, hr2::HMatrix, linindex::Vector{Clong}) for i in (unsafe_load(Q1).lastdv+1):(unsafe_load(P1).m) Row_i = unsafe_load(unsafe_load(P1).Row, i+1) if !iszero(extractbigintat(unsafe_load(A1, Row_i+1), 1)) - j = unsafe_load( - unsafe_load(Q1).inequality, - unsafe_load(unsafe_load(P1).B, i+1)-unsafe_load(Q1).lastdv+1 + j = unsafe_load_inequality( + hr1, + unsafe_load(unsafe_load(P1).B, i+1), ) if ((unsafe_load(Q1).nlinearity == 0) || (j < unsafe_load(unsafe_load(Q1).linearity, 1))) diff --git a/src/redund.jl b/src/redund.jl index 197dc5c..de4278f 100644 --- a/src/redund.jl +++ b/src/redund.jl @@ -27,7 +27,7 @@ function redund(m::RepMatrix) redset = BitSet() for index in (lastdv + 1):(m_A + d) - ineq = unsafe_load(unsafe_load(m.Q).inequality, index - lastdv + 1) # the input inequality number corr. to this index + ineq = unsafe_load_inequality(m, index) # the input inequality number corr. to this index status = checkindex(m, index) if :redundant == checkindex(m, index) @@ -46,7 +46,7 @@ function redundi(m::RepMatrix, ineq::Int) d = unsafe_load(m.P).d lastdv = unsafe_load(m.Q).lastdv - index = lastdv + findfirst(i -> ineq == unsafe_load(unsafe_load(m.Q).inequality, i - lastdv + 1), (lastdv + 1):(m_A + d)) + index = lastdv + findfirst(i -> ineq == unsafe_load_inequality(m, i), (lastdv + 1):(m_A + d)) :redundant == checkindex(m, index) end From e9412a97e75a73ed7cc999550e8ccc7e60306bdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Tue, 21 Jan 2025 10:18:03 +0100 Subject: [PATCH 2/3] Make it internal --- src/lp.jl | 2 +- src/matrix.jl | 2 +- src/nash.jl | 2 +- src/redund.jl | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lp.jl b/src/lp.jl index 47c24cf..a820f07 100644 --- a/src/lp.jl +++ b/src/lp.jl @@ -172,7 +172,7 @@ function print_lpoutput(m::HMatrix, print_solution::Bool=false) for i in 0:P.d-1 C_i = unsafe_load(P.C, i+1) Col_i = unsafe_load(P.Col, i+1) - idx = unsafe_load_inequality(m, C_i) + idx = _unsafe_load_inequality(m, C_i) print(" y_$(idx)=") temp1 = extractbigint(unsafe_load(Q.Lcm, Col_i+1)) * (-1) temp1 *= extractbigint(unsafe_load(unsafe_load(P.A, 1), Col_i+1)) diff --git a/src/matrix.jl b/src/matrix.jl index 611c1c9..191f3cf 100644 --- a/src/matrix.jl +++ b/src/matrix.jl @@ -55,7 +55,7 @@ function initmatrix(M::Matrix{Rational{BigInt}}, linset, Hrep::Bool) (P, Q) end -function unsafe_load_inequality(m::Matrix, idx) +function _unsafe_load_inequality(m::Matrix, idx) Q = unsafe_load(m.Q) return unsafe_load(Q.inequality, idx - Q.lastdv + 1) end diff --git a/src/nash.jl b/src/nash.jl index 5e7857f..1f182ed 100644 --- a/src/nash.jl +++ b/src/nash.jl @@ -120,7 +120,7 @@ function nash2_main(hr1::HMatrix, hr2::HMatrix, linindex::Vector{Clong}) for i in (unsafe_load(Q1).lastdv+1):(unsafe_load(P1).m) Row_i = unsafe_load(unsafe_load(P1).Row, i+1) if !iszero(extractbigintat(unsafe_load(A1, Row_i+1), 1)) - j = unsafe_load_inequality( + j = _unsafe_load_inequality( hr1, unsafe_load(unsafe_load(P1).B, i+1), ) diff --git a/src/redund.jl b/src/redund.jl index de4278f..362322e 100644 --- a/src/redund.jl +++ b/src/redund.jl @@ -27,7 +27,7 @@ function redund(m::RepMatrix) redset = BitSet() for index in (lastdv + 1):(m_A + d) - ineq = unsafe_load_inequality(m, index) # the input inequality number corr. to this index + ineq = _unsafe_load_inequality(m, index) # the input inequality number corr. to this index status = checkindex(m, index) if :redundant == checkindex(m, index) @@ -46,7 +46,7 @@ function redundi(m::RepMatrix, ineq::Int) d = unsafe_load(m.P).d lastdv = unsafe_load(m.Q).lastdv - index = lastdv + findfirst(i -> ineq == unsafe_load_inequality(m, i), (lastdv + 1):(m_A + d)) + index = lastdv + findfirst(i -> ineq == _unsafe_load_inequality(m, i), (lastdv + 1):(m_A + d)) :redundant == checkindex(m, index) end From da3b442a1c19ac4a16dbcdfdf004e51d24cfe378 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Tue, 21 Jan 2025 11:48:16 +0100 Subject: [PATCH 3/3] Fix --- src/matrix.jl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/matrix.jl b/src/matrix.jl index 191f3cf..ab75559 100644 --- a/src/matrix.jl +++ b/src/matrix.jl @@ -55,11 +55,6 @@ function initmatrix(M::Matrix{Rational{BigInt}}, linset, Hrep::Bool) (P, Q) end -function _unsafe_load_inequality(m::Matrix, idx) - Q = unsafe_load(m.Q) - return unsafe_load(Q.inequality, idx - Q.lastdv + 1) -end - function fillmatrix(inequality::Bool, P::Ptr{Clrs_dic}, Q::Ptr{Clrs_dat}, itr::Polyhedra.ElemIt, offset::Int) for (i, item) in enumerate(itr) a = convert(Vector{Rational{BigInt}}, vec(coord(lift(item)))) @@ -180,6 +175,11 @@ Polyhedra.islin(vrep::VMatrix, idx::Polyhedra.VIndex{Rational{BigInt}}) = !(vrep Polyhedra.done(idxs::Polyhedra.Indices{Rational{BigInt}, ElemT, <:RepMatrix}, idx::Polyhedra.Index{Rational{BigInt}, ElemT}) where {ElemT} = idx.value > length(idxs.rep) Base.get(rep::RepMatrix, idx::Polyhedra.Index{Rational{BigInt}}) = Polyhedra.valuetype(idx)(extractrow(rep, idx.value)...) +function _unsafe_load_inequality(m::RepMatrix, idx) + Q = unsafe_load(m.Q) + return unsafe_load(Q.inequality, idx - Q.lastdv + 1) +end + # H-representation #HMatrix{T}(rep::Rep{T}) = HMatrix{polytypefor(T), mytypefor(T)}(rep) # TODO finish this line