Skip to content

Commit

Permalink
Merge pull request #203 from hannes14/lift_rest
Browse files Browse the repository at this point in the history
changed lift: also return a rest
  • Loading branch information
fieker committed Mar 6, 2020
2 parents 9f85c21 + b513827 commit c23b7f3
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 23 deletions.
38 changes: 20 additions & 18 deletions deps/src/ideals.cpp
Expand Up @@ -187,10 +187,12 @@ void singular_define_ideals(jlcxx::Module & Singular)
Singular.method("id_Lift", [](ideal m, ideal sm, ring o) {
const ring origin = currRing;
rChangeCurrRing(o);
ideal res = idLift(m, sm, NULL, FALSE, FALSE);
res->rank = IDELEMS(m);
ideal rest;
ideal res = idLift(m, sm, &rest, FALSE, FALSE);
rest->rank = m->rank;
res->rank = IDELEMS(m);
rChangeCurrRing(origin);
return res;
return std::make_tuple(res, rest);
});

Singular.method("id_Modulo", [](ideal a, ideal b, ring o) {
Expand Down Expand Up @@ -228,14 +230,14 @@ void singular_define_ideals(jlcxx::Module & Singular)
Singular.method("id_vdim", [](ideal I, ring r) {
const ring origin = currRing;
rChangeCurrRing(r);
int n=scMult0Int(I, r->qideal);
rChangeCurrRing(origin);
return n;
int n=scMult0Int(I, r->qideal);
rChangeCurrRing(origin);
return n;
});

Singular.method("id_kbase", [](ideal I, ring r) {
ideal res;
const ring origin = currRing;
const ring origin = currRing;
rChangeCurrRing(r);
res = scKBase(-1, I, r->qideal);
rChangeCurrRing(origin);
Expand All @@ -255,19 +257,19 @@ void singular_define_ideals(jlcxx::Module & Singular)
const ring origin = currRing;
rChangeCurrRing(pr);
ideal I = maMapIdeal(map_id, pr, im_id, im, reinterpret_cast<nMapFunc>(cf_map));
rChangeCurrRing(origin);
return I;
rChangeCurrRing(origin);
return I;
});
Singular.method("idMinBase", [](ideal I, ring r) {
const ring origin = currRing;
rChangeCurrRing(r);
ideal J = idMinBase(I);
rChangeCurrRing(origin);
return J;
rChangeCurrRing(origin);
return J;
});
Singular.method("scIndIndset", [](ideal I, ring r, jlcxx::ArrayRef<int> a, bool all) {
const ring origin = currRing;
rChangeCurrRing(r);
rChangeCurrRing(r);
lists L = scIndIndset(I, all, r->qideal);
int n = rVar(r);
int m = lSize(L);
Expand All @@ -292,21 +294,21 @@ void singular_define_ideals(jlcxx::Module & Singular)
a.push_back(content[j]);
}
}
rChangeCurrRing(origin);
rChangeCurrRing(origin);
});
Singular.method("scDimInt", [](ideal I, ring R) {
const ring origin = currRing;
rChangeCurrRing(R);
rChangeCurrRing(R);
int k = scDimInt(I, R->qideal);
rChangeCurrRing(origin);
return k;
rChangeCurrRing(origin);
return k;
});
Singular.method("fglmzero", [](ideal Isrc, ring Rsrc, ring Rdest ) {
const ring origin = currRing;
rChangeCurrRing(Rdest);
ideal Idest = NULL;
bool c = fglmzero(Rsrc, Isrc, Rdest, Idest, FALSE, FALSE);
rChangeCurrRing(origin);
return Idest;
rChangeCurrRing(origin);
return Idest;
});
}
10 changes: 6 additions & 4 deletions src/module/module.jl
Expand Up @@ -258,13 +258,15 @@ end

@doc Markdown.doc"""
lift(M::smodule, SM::smodule)
> represents the generators of SM in terms of the generators of M
> (Matrix(SM) = Matrix(M)*matrix(result))
> represents the generators of SM in terms of the generators of M.
> Returns result, rest
> (Matrix(SM) = (Matrix(M)-Matrix(rest))*matrix(result))
> If SM is in M, rest is the null module
"""
function lift(M::smodule, SM::smodule)
R = base_ring(M)
ptr = libSingular.id_Lift(M.ptr, SM.ptr, R.ptr)
return Module(R, ptr)
ptr,rest_ptr = libSingular.id_Lift(M.ptr, SM.ptr, R.ptr)
return Module(R, ptr),Module(R,rest_ptr)
end

###############################################################################
Expand Down
3 changes: 2 additions & 1 deletion test/module/smodule-test.jl
Expand Up @@ -170,9 +170,10 @@ end
A = Singular.Module(R, v1, v2)
B = Singular.Module(R, v1)

M = lift(A,B)
M,r = lift(A,B)

@test M[1] == vector(R,R(1),R(0))
@test iszero(r[1])
end

@testset "smodule.eliminate..." begin
Expand Down

0 comments on commit c23b7f3

Please sign in to comment.