From 66c100d3f4548728cc12c138829cab6f9ad7c188 Mon Sep 17 00:00:00 2001 From: Hans Schoenemann Date: Wed, 12 Jun 2024 11:04:27 +0200 Subject: [PATCH 01/12] option handling, fix #808 Some options in Singular are local to the "current ring" (OPT_INTSTRATEGY,OPT_REDTHROUGH,OPT_REDTAIL,OPT_REDTAIL_SYZ). In Singular.jl there is no "current ring": modified ring change to keep tghe current (global) setting of options except the needed changes due to the properties of a ring. --- deps/src/caller.cpp | 13 ++- deps/src/coeffs.cpp | 5 +- deps/src/ideals.cpp | 215 ++++++++++++++++++++---------------- deps/src/ideals.h | 1 + deps/src/rings.cpp | 35 +++--- deps/src/singular.cpp | 16 +-- test/ideal-test.jl | 1 + test/ideal/freealg-test.jl | 25 +++++ test/module/smodule-test.jl | 4 +- 9 files changed, 186 insertions(+), 129 deletions(-) create mode 100644 test/ideal/freealg-test.jl diff --git a/deps/src/caller.cpp b/deps/src/caller.cpp index f99f984f4..38cfe35cb 100644 --- a/deps/src/caller.cpp +++ b/deps/src/caller.cpp @@ -1,4 +1,5 @@ #include "caller.h" +#include "ideals.h" #include #include @@ -252,7 +253,7 @@ jl_value_t * get_julia_type_from_sleftv(leftv ret) jl_value_t * get_ring_content(ring r) { ring save = currRing; - rChangeCurrRing(r); + rChangeCurrRing_wo_options(r); // count elements idhdl h = r->idroot; @@ -283,7 +284,7 @@ jl_value_t * get_ring_content(ring r) nr++; } JL_GC_POP(); - rChangeCurrRing(save); + rChangeCurrRing_wo_options(save); return reinterpret_cast(result); } @@ -409,9 +410,9 @@ jl_value_t * convert_nested_list(void * l_void) void * create_syStrategy_data(syStrategy res, ring o) { const ring origin = currRing; - rChangeCurrRing(o); + rChangeCurrRing_wo_options(o); syStrategy temp = syCopy(res); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return reinterpret_cast(temp); } @@ -489,9 +490,9 @@ void singular_define_caller(jlcxx::Module & Singular) Singular.method("jl_array_to_void", [](jl_value_t * args_val, jl_value_t * types_val, ring R) { auto origin = currRing; - rChangeCurrRing(R); + rChangeCurrRing_wo_options(R); lists l = jl_array_to_list_helper(args_val, types_val); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return (void *)l; }); diff --git a/deps/src/coeffs.cpp b/deps/src/coeffs.cpp index 2fd489e8e..a238d7410 100644 --- a/deps/src/coeffs.cpp +++ b/deps/src/coeffs.cpp @@ -1,4 +1,5 @@ #include "coeffs.h" +#include "ideals.h" auto transExt_helper(coeffs cf, jlcxx::ArrayRef param) { @@ -26,9 +27,9 @@ poly transExt_to_poly(number a, coeffs cf, ring r) ring ext = cf->extRing; nMapFunc nMap = n_SetMap(ext->cf, r->cf); const ring origin = currRing; - rChangeCurrRing(r); + rChangeCurrRing_wo_options(r); poly p = p_PermPoly(NUM((fraction)a), NULL, ext, r, nMap, NULL); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return p; } diff --git a/deps/src/ideals.cpp b/deps/src/ideals.cpp index 00f084b3b..ff643505b 100644 --- a/deps/src/ideals.cpp +++ b/deps/src/ideals.cpp @@ -1,11 +1,38 @@ #include "ideals.h" +void rChangeCurrRing_wo_options(ring R) +{ +#define RING_OPTS (Sy_bit(OPT_REDTAIL) | Sy_bit(OPT_REDTAIL_SYZ)|Sy_bit(OPT_INTSTRATEGY)) + unsigned save_opts=si_opt_1; // save options + rChangeCurrRing(R); + si_opt_1 =save_opts; + if (R!=NULL) + { + if (rField_is_Ring(R) + || rField_is_Q(R) + || (R->cf->extRing!=NULL) + ) + si_opt_1 |= Sy_bit(OPT_INTSTRATEGY); + else + si_opt_1 &= ~Sy_bit(OPT_INTSTRATEGY); + if (R->OrdSgn == -1) + { + si_opt_1 &= ~Sy_bit(OPT_REDTAIL); + si_opt_1 &= ~Sy_bit(OPT_REDTHROUGH); + } + else + { + si_opt_1 |= Sy_bit(OPT_REDTHROUGH); + } + } +} + auto id_sres_helper(sip_sideal * m, int n, ring R) { auto origin = currRing; - rChangeCurrRing(R); + rChangeCurrRing_wo_options(R); syStrategy s = sySchreyer(m, n); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); auto r = s->minres; bool minimal = true; if (r == NULL) @@ -27,9 +54,9 @@ auto qring_simplify_helper(poly p, ring R) auto id_fres_helper(sip_sideal * I, int n, std::string method, ring R) { auto origin = currRing; - rChangeCurrRing(R); + rChangeCurrRing_wo_options(R); syStrategy s = syFrank(I, n, method.c_str()); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); auto r = s->minres; bool minimal = true; if (r == NULL) @@ -43,9 +70,9 @@ auto id_fres_helper(sip_sideal * I, int n, std::string method, ring R) auto id_res_helper(sip_sideal * I, int n, int minimize, ring R) { auto origin = currRing; - rChangeCurrRing(R); + rChangeCurrRing_wo_options(R); syStrategy s = syResolution(I, n, NULL, (BOOLEAN)minimize); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); auto r = s->minres; bool minimal = true; if (r == NULL) @@ -67,11 +94,11 @@ auto id_res_helper(sip_sideal * I, int n, int minimize, ring R) auto id_mres_map_helper(sip_sideal * I, int n, ring R) { auto origin = currRing; - rChangeCurrRing(R); + rChangeCurrRing_wo_options(R); ideal T; syStrategy s = syMres_with_map(I, n, NULL, T); matrix TT = id_Module2Matrix(T, currRing); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); auto r = s->minres; bool minimal = true; if (r == NULL) @@ -92,18 +119,18 @@ auto id_mres_map_helper(sip_sideal * I, int n, ring R) auto id_prune_map_helper(sip_sideal * I, ring R) { auto origin = currRing; - rChangeCurrRing(R); + rChangeCurrRing_wo_options(R); ideal T; ideal s = idMinEmbedding_with_map(I, NULL, T); matrix TT = id_Module2Matrix(T, currRing); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return std::make_tuple(s, TT); } auto id_prune_map_v_helper(sip_sideal * I, jlcxx::ArrayRef a, ring R) { auto origin = currRing; - rChangeCurrRing(R); + rChangeCurrRing_wo_options(R); ideal T; int *v = (int *)omAlloc(I->rank*sizeof(int)); ideal s = idMinEmbedding_with_map_v(I, NULL, T, v); @@ -111,7 +138,7 @@ auto id_prune_map_v_helper(sip_sideal * I, jlcxx::ArrayRef a, ring R) a.push_back(v[j]); omFreeSize(v,I->rank*sizeof(int)); matrix TT = id_Module2Matrix(T, currRing); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return std::make_tuple(s, TT); } @@ -121,9 +148,9 @@ ideal id_Syzygies_internal(ideal m, ring o) intvec * n = NULL; tHomog h = testHomog; const ring origin = currRing; - rChangeCurrRing(o); + rChangeCurrRing_wo_options(o); id = idSyzygies(m, h, &n); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); if (n != NULL) delete n; return id; @@ -145,10 +172,10 @@ auto id_Slimgb_helper(ideal a, ring b, bool complete_reduction = false) const ring origin = currRing; unsigned int save_opt = si_opt_1; si_opt_1 |= crbit; - rChangeCurrRing(b); + rChangeCurrRing_wo_options(b); id = t_rep_gb(b, a, a->rank); + rChangeCurrRing_wo_options(origin); si_opt_1 = save_opt; - rChangeCurrRing(origin); if (n != NULL) delete n; } @@ -163,9 +190,9 @@ auto id_InterRed_helper(ideal a, ring b) if (!idIs0(a)) { const ring origin = currRing; - rChangeCurrRing(b); + rChangeCurrRing_wo_options(b); id = kInterRed(a, b->qideal); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); } else id = idInit(0, a->rank); @@ -188,10 +215,10 @@ auto id_Std_helper(ideal a, ring b, bool complete_reduction = false) const ring origin = currRing; unsigned int save_opt = si_opt_1; si_opt_1 |= crbit; - rChangeCurrRing(b); + rChangeCurrRing_wo_options(b); id = kStd(a, b->qideal, h, &n); + rChangeCurrRing_wo_options(origin); si_opt_1 = save_opt; - rChangeCurrRing(origin); if (n != NULL) delete n; } @@ -208,14 +235,14 @@ auto id_StdHC_helper(ideal a, poly HC, ring b) intvec * n = NULL; tHomog h = testHomog; const ring origin = currRing; - rChangeCurrRing(b); p_Delete(&(b->ppNoether),b); poly NN=p_Copy(HC,b); p_IncrExp(NN,b->N,b); p_Setm(NN,b); + rChangeCurrRing_wo_options(b); b->ppNoether=NN; id = kStd(a, b->qideal, h, &n); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); if (n != NULL) delete n; p_Delete(&(b->ppNoether),b); @@ -239,10 +266,10 @@ auto id_MinStd_helper(ideal a, ring b, bool complete_reduction = false) const ring origin = currRing; unsigned int save_opt = si_opt_1; si_opt_1 |= crbit; - rChangeCurrRing(b); + rChangeCurrRing_wo_options(b); id = kMin_std(a, b->qideal, h, NULL, m); + rChangeCurrRing_wo_options(origin); si_opt_1 = save_opt; - rChangeCurrRing(origin); return std::make_tuple(id, m); } @@ -276,10 +303,10 @@ auto id_StdHilb_helper(ideal a, const ring origin = currRing; unsigned int save_opt = si_opt_1; si_opt_1 |= crbit; - rChangeCurrRing(b); + rChangeCurrRing_wo_options(b); id = kStd(a, b->qideal, h, &n, hilb); + rChangeCurrRing_wo_options(origin); si_opt_1 = save_opt; - rChangeCurrRing(origin); if (n != NULL) delete n; } @@ -311,14 +338,14 @@ auto id_StdHilbWeighted_helper(ideal a, const ring origin = currRing; unsigned int save_opt = si_opt_1; si_opt_1 |= crbit; - rChangeCurrRing(b); + rChangeCurrRing_wo_options(b); id = kStd(a, currRing->qideal, h, &n, // module weights hilb, // hilbert series 0, 0, // syzComp, newIdeal varweights); // weights of vars + rChangeCurrRing_wo_options(origin); si_opt_1 = save_opt; - rChangeCurrRing(origin); if (n != NULL) delete n; } @@ -332,9 +359,9 @@ auto id_StdHilbWeighted_helper(ideal a, auto id_TwoStd_helper(ideal a, ring b) { const ring origin = currRing; - rChangeCurrRing(b); + rChangeCurrRing_wo_options(b); ideal id = twostd(a); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return id; } @@ -414,25 +441,25 @@ void singular_define_ideals(jlcxx::Module & Singular) Singular.method("id_Quotient", [](ideal a, ideal b, bool c, ring d) { const ring origin = currRing; - rChangeCurrRing(d); + rChangeCurrRing_wo_options(d); ideal id = idQuot(a, b, c, TRUE); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return id; }); Singular.method("id_Intersection", [](ideal a, ideal b, ring c) { const ring origin = currRing; - rChangeCurrRing(c); + rChangeCurrRing_wo_options(c); ideal id = idSect(a, b); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return id; }); Singular.method("id_MultSect", [](void * ids, int len, ring r) { const ring origin = currRing; - rChangeCurrRing(r); + rChangeCurrRing_wo_options(r); ideal id = idMultSect(reinterpret_cast(ids), len); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return id; }); @@ -460,75 +487,75 @@ void singular_define_ideals(jlcxx::Module & Singular) Singular.method("id_Eliminate", [](ideal m, poly p, ring o) { const ring origin = currRing; - rChangeCurrRing(o); + rChangeCurrRing_wo_options(o); ideal res = idElimination(m, p); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return res; }); Singular.method("id_DivRem", [](ideal m, ideal sm, ring o) { const ring origin = currRing; - rChangeCurrRing(o); + rChangeCurrRing_wo_options(o); ideal factors; ideal res = idDivRem(sm, m, factors, NULL); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return std::make_tuple(res, factors); }); Singular.method("id_DivRem", [](ideal m, ideal sm, ring o, int flag) { const ring origin = currRing; - rChangeCurrRing(o); + rChangeCurrRing_wo_options(o); ideal factors; ideal res = idDivRem(sm, m, factors, NULL, flag); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return std::make_tuple(res, factors); }); Singular.method("id_DivRem_Unit", [](ideal m, ideal sm, ring o) { const ring origin = currRing; - rChangeCurrRing(o); + rChangeCurrRing_wo_options(o); ideal factors; ideal unit; ideal res = idDivRem(sm, m, factors, &unit); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return std::make_tuple(res, factors, unit); }); Singular.method("id_DivRem_Unit", [](ideal m, ideal sm, ring o, int flag) { const ring origin = currRing; - rChangeCurrRing(o); + rChangeCurrRing_wo_options(o); ideal factors; ideal unit; ideal rest = idDivRem(m, sm, factors, &unit, flag); rest->rank = m->rank; - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return std::make_tuple(rest,factors, unit); }); Singular.method("id_Lift", [](ideal m, ideal sm, ring o) { const ring origin = currRing; - rChangeCurrRing(o); + rChangeCurrRing_wo_options(o); ideal rest; ideal res = idLift(m, sm, &rest, FALSE, FALSE); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return std::make_tuple(res, rest); }); Singular.method("id_Lift", [](ideal m, ideal sm, bool goodShape, bool isSB, bool divide, ring o) { const ring origin = currRing; - rChangeCurrRing(o); + rChangeCurrRing_wo_options(o); ideal rest; matrix unit; ideal res = idLift(m, sm, &rest, BOOLEAN(goodShape), BOOLEAN(isSB), BOOLEAN(divide), &unit, GbDefault); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return std::make_tuple(res, rest, unit); }); Singular.method("id_LiftStd", [](ideal m, ring o, bool complete_reduction = false) { const ring origin = currRing; - rChangeCurrRing(o); + rChangeCurrRing_wo_options(o); matrix ma = mpNew(1, 1); unsigned int crbit; if (complete_reduction) @@ -539,13 +566,13 @@ void singular_define_ideals(jlcxx::Module & Singular) si_opt_1 |= crbit; ideal res = idLiftStd(m, &ma, testHomog, NULL); si_opt_1 = save_opt; - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return std::make_tuple(res, ma); }); Singular.method("id_LiftStdSyz", [](ideal m, ring o, bool complete_reduction = false) { const ring origin = currRing; - rChangeCurrRing(o); + rChangeCurrRing_wo_options(o); matrix ma = mpNew(1, 1); ideal syz = idInit(1, 1); unsigned int crbit; @@ -558,15 +585,15 @@ void singular_define_ideals(jlcxx::Module & Singular) ideal res = idLiftStd(m, &ma, testHomog, &syz); si_opt_1 = save_opt; - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return std::make_tuple(res, ma, syz); }); Singular.method("id_Modulo", [](ideal a, ideal b, ring o) { const ring origin = currRing; - rChangeCurrRing(o); + rChangeCurrRing_wo_options(o); ideal res = idModulo(a, b, testHomog); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return res; }); @@ -574,10 +601,10 @@ void singular_define_ideals(jlcxx::Module & Singular) Singular.method("id_Saturation", [](ideal I, ideal J, ring r) { const ring origin = currRing; - rChangeCurrRing(r); + rChangeCurrRing_wo_options(r); int d; ideal res = idSaturate(I, J, d, TRUE); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return std::make_tuple(res, d); }); @@ -605,56 +632,56 @@ void singular_define_ideals(jlcxx::Module & Singular) Singular.method("id_vdim", [](ideal I, ring r) { const ring origin = currRing; - rChangeCurrRing(r); + rChangeCurrRing_wo_options(r); int n = scMult0Int(I, r->qideal); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return n; }); Singular.method("id_kbase", [](ideal I, ring r) { ideal res; const ring origin = currRing; - rChangeCurrRing(r); + rChangeCurrRing_wo_options(r); res = scKBase(-1, I, r->qideal); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return res; }); Singular.method("id_kbase", [](ideal I, int n, ring r) { ideal res; const ring origin = currRing; - rChangeCurrRing(r); + rChangeCurrRing_wo_options(r); res = scKBase(n, I, r->qideal); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return res; }); Singular.method("id_highcorner", [](ideal I, ring r) { poly h; const ring origin = currRing; - rChangeCurrRing(r); + rChangeCurrRing_wo_options(r); h = iiHighCorner(I, 0); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return h; }); Singular.method("maMapIdeal", [](ideal map_id, ring pr, ideal im_id, ring im, void * cf_map) { const ring origin = currRing; - rChangeCurrRing(pr); + rChangeCurrRing_wo_options(pr); ideal I = maMapIdeal(map_id, pr, im_id, im, reinterpret_cast(cf_map)); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return I; }); Singular.method("idMinBase", [](ideal I, ring r) { const ring origin = currRing; - rChangeCurrRing(r); + rChangeCurrRing_wo_options(r); ideal J = idMinBase(I); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return J; }); Singular.method("scIndIndset", [](ideal I, ring r, jlcxx::ArrayRef a, bool all) { const ring origin = currRing; - rChangeCurrRing(r); + rChangeCurrRing_wo_options(r); lists L = scIndIndset(I, all, r->qideal); int n = rVar(r); int m = lSize(L); @@ -679,23 +706,23 @@ void singular_define_ideals(jlcxx::Module & Singular) a.push_back(content[j]); } } - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); }); Singular.method("scDegree", [](ideal I, ring R) { const ring origin = currRing; - rChangeCurrRing(R); + rChangeCurrRing_wo_options(R); SPrintStart(); scDegree(I, NULL, R->qideal); char * s = SPrintEnd(); s[strlen(s) - 1] = '\0'; std::string res(s); omFree(s); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return res; }); Singular.method("scDegree", [](ideal I, ring R, jlcxx::ArrayRef w) { const ring origin = currRing; - rChangeCurrRing(R); + rChangeCurrRing_wo_options(R); intvec * module_w = to_intvec(w); SPrintStart(); scDegree(I, module_w, R->qideal); @@ -704,41 +731,41 @@ void singular_define_ideals(jlcxx::Module & Singular) s[strlen(s) - 1] = '\0'; std::string res(s); omFree(s); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return res; }); Singular.method("scMultInt", [](ideal I, ring R) { const ring origin = currRing; - rChangeCurrRing(R); + rChangeCurrRing_wo_options(R); int k = scMultInt(I, R->qideal); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return k; }); Singular.method("scDimInt", [](ideal I, ring R) { const ring origin = currRing; - rChangeCurrRing(R); + rChangeCurrRing_wo_options(R); int k = scDimInt(I, R->qideal); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return k; }); Singular.method("scDimIntRing", [](ideal I, ring R) { const ring origin = currRing; - rChangeCurrRing(R); + rChangeCurrRing_wo_options(R); int k = scDimIntRing(I, R->qideal); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return k; }); Singular.method("fglmzero", [](ideal Isrc, ring Rsrc, ring Rdest) { const ring origin = currRing; - rChangeCurrRing(Rdest); + rChangeCurrRing_wo_options(Rdest); ideal Idest = NULL; bool c = fglmzero(Rsrc, Isrc, Rdest, Idest, FALSE, FALSE); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return Idest; }); Singular.method("scHilb", [](ideal I, ring r, jlcxx::ArrayRef a) { const ring origin = currRing; - rChangeCurrRing(r); + rChangeCurrRing_wo_options(r); bigintmat * v = hFirstSeries0b(I, r->qideal, NULL,NULL, r,coeffs_BIGINT); for (int j = 0; j < v->length(); j++) { @@ -746,13 +773,13 @@ void singular_define_ideals(jlcxx::Module & Singular) a.push_back(n_Int(n,coeffs_BIGINT)); } delete v; - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); }); Singular.method("scHilbWeighted", [](ideal I, ring r, jlcxx::ArrayRef weights, jlcxx::ArrayRef a) { intvec * w = to_intvec(weights); const ring origin = currRing; - rChangeCurrRing(r); + rChangeCurrRing_wo_options(r); bigintmat * v = hFirstSeries0b(I, r->qideal, w, NULL,r,coeffs_BIGINT); delete w; for (int j = 0; j < v->length(); j++) @@ -761,7 +788,7 @@ void singular_define_ideals(jlcxx::Module & Singular) a.push_back(n_Int(n,coeffs_BIGINT)); } delete v; - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); }); Singular.method("scHilbWeighted", [](ideal I, ring r, jlcxx::ArrayRef weights, @@ -769,7 +796,7 @@ void singular_define_ideals(jlcxx::Module & Singular) intvec * w = to_intvec(weights); intvec * sh = to_intvec(shifts); const ring origin = currRing; - rChangeCurrRing(r); + rChangeCurrRing_wo_options(r); bigintmat * v = hFirstSeries0b(I, r->qideal, w, sh,r,coeffs_BIGINT); delete sh; delete w; @@ -779,23 +806,23 @@ void singular_define_ideals(jlcxx::Module & Singular) a.push_back(n_Int(n,coeffs_BIGINT)); } delete v; - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); }); Singular.method("scHilbPoly", [](ideal I, ring r, ring Qt) { const ring origin = currRing; - rChangeCurrRing(r); + rChangeCurrRing_wo_options(r); poly h = hFirstSeries0p(I, r->qideal, NULL, r, Qt); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return h; }); Singular.method("scHilbPolyWeighted", [](ideal I, ring r, jlcxx::ArrayRef weights, ring Qt) { intvec * w = to_intvec(weights); const ring origin = currRing; - rChangeCurrRing(r); + rChangeCurrRing_wo_options(r); poly h = hFirstSeries0p(I, r->qideal, w, r, Qt); delete w; - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return h; }); Singular.method("id_Homogen", id_Homogen); diff --git a/deps/src/ideals.h b/deps/src/ideals.h index 8f596d3c2..e437bec11 100644 --- a/deps/src/ideals.h +++ b/deps/src/ideals.h @@ -4,5 +4,6 @@ #include "includes.h" void singular_define_ideals(jlcxx::Module &); +void rChangeCurrRing_wo_options(ring R); #endif diff --git a/deps/src/rings.cpp b/deps/src/rings.cpp index 83e91d6b4..6efeac177 100644 --- a/deps/src/rings.cpp +++ b/deps/src/rings.cpp @@ -1,4 +1,5 @@ #include "rings.h" +#include "ideals.h" auto rDefault_helper(coeffs cf, jlcxx::ArrayRef vars, rRingOrder_t ord) { @@ -176,7 +177,7 @@ ring weylAlgebra(ring r) ring make_qring(ring r, ideal id) { const ring origin = currRing; - rChangeCurrRing(r); + rChangeCurrRing_wo_options(r); coeffs newcf = currRing->cf; @@ -188,7 +189,7 @@ ring make_qring(ring r, ideal id) newcf = n_CoeffRingQuot1(p_GetCoeff(id->m[cpos], currRing), currRing->cf); if (newcf == NULL) { - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return NULL; } } @@ -256,7 +257,7 @@ ring make_qring(ring r, ideal id) } #endif - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return qr; } @@ -478,9 +479,9 @@ void singular_define_rings(jlcxx::Module & Singular) ideal I = idInit(1, 1); const ring origin = currRing; I->m[0] = q; - rChangeCurrRing(r); + rChangeCurrRing_wo_options(r); res = kNF(I, NULL, p, 0, KSTD_NF_LAZY); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); I->m[0] = NULL; id_Delete(&I, r); if (res == NULL) @@ -509,7 +510,7 @@ void singular_define_rings(jlcxx::Module & Singular) Singular.method("singclap_sqrfree", [](spolyrec * p, jlcxx::ArrayRef a, ip_sring * r) { const ring origin = currRing; - rChangeCurrRing(r); + rChangeCurrRing_wo_options(r); intvec * v = NULL; ideal I = singclap_sqrfree(pCopy(p), &v, 0, currRing); int * content = v->ivGetVec(); @@ -517,14 +518,14 @@ void singular_define_rings(jlcxx::Module & Singular) { a.push_back(content[i]); } - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); delete v; return I; }); Singular.method("singclap_factorize", [](spolyrec * p, jlcxx::ArrayRef a, ip_sring * r) { const ring origin = currRing; - rChangeCurrRing(r); + rChangeCurrRing_wo_options(r); intvec * v = NULL; ideal I = singclap_factorize(p_Copy(p, r), &v, 0, r); int * content = v->ivGetVec(); @@ -532,7 +533,7 @@ void singular_define_rings(jlcxx::Module & Singular) { a.push_back(content[i]); } - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); delete v; return I; }); @@ -544,30 +545,30 @@ void singular_define_rings(jlcxx::Module & Singular) Singular.method("p_SetExpVLV_internal", p_SetExpVLV); Singular.method("p_Reduce", [](spolyrec * p, sip_sideal * G, ip_sring * R) { const ring origin = currRing; - rChangeCurrRing(R); + rChangeCurrRing_wo_options(R); poly res = kNF(G, R->qideal, p); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return res; }); Singular.method("p_Reduce", [](sip_sideal * p, sip_sideal * G, ip_sring * R) { const ring origin = currRing; - rChangeCurrRing(R); + rChangeCurrRing_wo_options(R); ideal res = kNF(G, R->qideal, p); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return res; }); Singular.method("p_Reduce", [](spolyrec * p, sip_sideal * G, ip_sring * R, int flag) { const ring origin = currRing; - rChangeCurrRing(R); + rChangeCurrRing_wo_options(R); poly res = kNF(G, R->qideal, p, 0, flag); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return res; }); Singular.method("p_Reduce", [](sip_sideal * p, sip_sideal * G, ip_sring * R, int flag) { const ring origin = currRing; - rChangeCurrRing(R); + rChangeCurrRing_wo_options(R); ideal res = kNF(G, R->qideal, p, 0, flag); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return res; }); diff --git a/deps/src/singular.cpp b/deps/src/singular.cpp index 72b910aed..bb1e10c8e 100644 --- a/deps/src/singular.cpp +++ b/deps/src/singular.cpp @@ -314,9 +314,9 @@ JLCXX_MODULE define_julia_module(jlcxx::Module & Singular) Singular.method("res_Copy", [](syStrategy ra, ring o) { const ring origin = currRing; - rChangeCurrRing(o); + rChangeCurrRing_wo_options(o); syStrategy temp = syCopy(ra); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return temp; }); @@ -330,20 +330,20 @@ JLCXX_MODULE define_julia_module(jlcxx::Module & Singular) Singular.method("syMinimize", [](syStrategy ra, ring o) { const ring origin = currRing; - rChangeCurrRing(o); + rChangeCurrRing_wo_options(o); syStrategy result = syCopy(ra); syMinimize(result); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return result; }); Singular.method("syMinimize_map", [](syStrategy ra, ring o) { const ring origin = currRing; - rChangeCurrRing(o); + rChangeCurrRing_wo_options(o); ideal T=NULL; syMinimize_with_map(ra,T); matrix TT=id_Module2Matrix(T,o); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); return TT; }); @@ -379,11 +379,11 @@ JLCXX_MODULE define_julia_module(jlcxx::Module & Singular) Singular.method("syBetti_internal", [](void * ra, int len, ring o) { const ring origin = currRing; - rChangeCurrRing(o); + rChangeCurrRing_wo_options(o); int dummy; intvec * iv = syBetti(reinterpret_cast(ra), len, &dummy, NULL, FALSE, NULL); - rChangeCurrRing(origin); + rChangeCurrRing_wo_options(origin); int nrows = iv->rows(); int ncols = iv->cols(); auto betti = (int *)malloc(ncols * nrows * sizeof(int)); diff --git a/test/ideal-test.jl b/test/ideal-test.jl index 58379cbc9..0c70e2451 100644 --- a/test/ideal-test.jl +++ b/test/ideal-test.jl @@ -2,3 +2,4 @@ include("ideal/sideal-test.jl") include("ideal/quotient-test.jl") +include("ideal/freealg-test.jl") diff --git a/test/ideal/freealg-test.jl b/test/ideal/freealg-test.jl new file mode 100644 index 000000000..58fccb938 --- /dev/null +++ b/test/ideal/freealg-test.jl @@ -0,0 +1,25 @@ +@testset "freealg" begin + R, (u11,u12,u13,u14, + u21,u22,u23,u24, + u31,u32,u33,u34, + u41,u42,u43,u44) = FreeAlgebra(QQ, ["u11", "u12", "u13", "u14", + "u21", "u22", "u23", "u24", + "u31", "u32", "u33", "u34", + "u41", "u42", "u43", "u44"], 7) + #rs1 = u11 + u12 + u13 + u14 - 1 + rs2 = u21 + u22 + u23 + u24 - 1 + rs3 = u31 + u32 + u33 + u34 - 1 + rs4 = u41 + u42 + u43 + u44 - 1 + cs1 = u11 + u21 + u31 + u41 - 1 + cs2 = u12 + u22 + u32 + u42 - 1 + cs3 = u13 + u23 + u33 + u43 - 1 + cs4 = u14 + u24 + u34 + u44 - 1 + + Singular.libSingular.set_option("OPT_REDTAIL",false) + + J1 = Ideal(R,[rs2,rs3,rs4,cs1,cs2,cs3,cs4]) + J1=std(J1) + + @test J1[7] == u11 + u21 + u31 + u41 - 1 + +end diff --git a/test/module/smodule-test.jl b/test/module/smodule-test.jl index 46c0ffe8a..f15a93dfe 100644 --- a/test/module/smodule-test.jl +++ b/test/module/smodule-test.jl @@ -48,12 +48,12 @@ end v3 = v1 + v2 w1 = vector(R, y, y) - w2 = vector(R, x - y, y^2 - y) + w2 = vector(R, x, y^2) M = Singular.Module(R, v1, v2, v3) MM = Singular.minimal_generating_set(M) - @test MM[1] == w1 && MM[2] == w2 + @test MM[1] == w1 && MM[2] == -v2 end @testset "smodule.manipulation" begin From 0fb8976131f2788c18c3b7f7379be939636ea0f3 Mon Sep 17 00:00:00 2001 From: Hans Schoenemann Date: Thu, 13 Jun 2024 10:12:38 +0200 Subject: [PATCH 02/12] make redTail the default --- deps/src/ideals.cpp | 7 +++++++ deps/src/singular.cpp | 1 + 2 files changed, 8 insertions(+) diff --git a/deps/src/ideals.cpp b/deps/src/ideals.cpp index ff643505b..b1af987ab 100644 --- a/deps/src/ideals.cpp +++ b/deps/src/ideals.cpp @@ -1,9 +1,12 @@ #include "ideals.h" +unsigned si_no_ring_opt; void rChangeCurrRing_wo_options(ring R) { #define RING_OPTS (Sy_bit(OPT_REDTAIL) | Sy_bit(OPT_REDTAIL_SYZ)|Sy_bit(OPT_INTSTRATEGY)) unsigned save_opts=si_opt_1; // save options + if (currRing==NULL) + si_no_ring_opt=si_opt_1; rChangeCurrRing(R); si_opt_1 =save_opts; if (R!=NULL) @@ -25,6 +28,10 @@ void rChangeCurrRing_wo_options(ring R) si_opt_1 |= Sy_bit(OPT_REDTHROUGH); } } + else + { + si_opt_1=si_no_ring_opt; + } } auto id_sres_helper(sip_sideal * m, int n, ring R) diff --git a/deps/src/singular.cpp b/deps/src/singular.cpp index bb1e10c8e..57fb2c0e7 100644 --- a/deps/src/singular.cpp +++ b/deps/src/singular.cpp @@ -118,6 +118,7 @@ JLCXX_MODULE define_julia_module(jlcxx::Module & Singular) Singular.method("siInit", [](const char * path) { siInit(const_cast(path)); WerrorS_callback = WerrorS_and_reset; + si_opt_1|=Sy_bit(OPT_REDTAIL); }); Singular.method("versionString", []() { return const_cast(versionString()); From adf163055a35e0470908b4beccf4dff70edad08a Mon Sep 17 00:00:00 2001 From: Hans Schoenemann Date: Thu, 13 Jun 2024 11:32:00 +0200 Subject: [PATCH 03/12] back to Singular defaults --- deps/src/singular.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/deps/src/singular.cpp b/deps/src/singular.cpp index 57fb2c0e7..bb1e10c8e 100644 --- a/deps/src/singular.cpp +++ b/deps/src/singular.cpp @@ -118,7 +118,6 @@ JLCXX_MODULE define_julia_module(jlcxx::Module & Singular) Singular.method("siInit", [](const char * path) { siInit(const_cast(path)); WerrorS_callback = WerrorS_and_reset; - si_opt_1|=Sy_bit(OPT_REDTAIL); }); Singular.method("versionString", []() { return const_cast(versionString()); From 721c1a80d777d5962a18f9ab70867fdaa9562e15 Mon Sep 17 00:00:00 2001 From: Hans Schoenemann Date: Fri, 14 Jun 2024 10:47:33 +0200 Subject: [PATCH 04/12] set_option("..",bool,ring) --- deps/src/singular.cpp | 66 +++++++++++++++++++++++++++++++++++++++++++ src/ideal/ideal.jl | 8 +++--- src/module/module.jl | 8 +++--- 3 files changed, 74 insertions(+), 8 deletions(-) diff --git a/deps/src/singular.cpp b/deps/src/singular.cpp index bb1e10c8e..d063b81ed 100644 --- a/deps/src/singular.cpp +++ b/deps/src/singular.cpp @@ -206,6 +206,72 @@ JLCXX_MODULE define_julia_module(jlcxx::Module & Singular) } return old_value; }); + // all of the global setters return the previous value + Singular.method("set_option", [](std::string opt, bool value, ring r) { + bool old_value = false; + ring oldring=currRing; + if (r!=NULL) rChangeCurrRing(r); + if (false) + ; + SETTER(si_opt_2, V_QUIET) + SETTER(si_opt_2, V_QRING) + SETTER(si_opt_2, V_SHOW_MEM) + SETTER(si_opt_2, V_YACC) + SETTER(si_opt_2, V_REDEFINE) + SETTER(si_opt_2, V_LOAD_LIB) + SETTER(si_opt_2, V_DEBUG_LIB) + SETTER(si_opt_2, V_LOAD_PROC) + SETTER(si_opt_2, V_DEF_RES) + SETTER(si_opt_2, V_SHOW_USE) + SETTER(si_opt_2, V_IMAP) + SETTER(si_opt_2, V_PROMPT) + SETTER(si_opt_2, V_NSB) + SETTER(si_opt_2, V_CONTENTSB) + SETTER(si_opt_2, V_CANCELUNIT) + SETTER(si_opt_2, V_MODPSOLVSB) + SETTER(si_opt_2, V_UPTORADICAL) + SETTER(si_opt_2, V_FINDMONOM) + SETTER(si_opt_2, V_COEFSTRAT) + SETTER(si_opt_2, V_IDLIFT) + SETTER(si_opt_2, V_LENGTH) + SETTER(si_opt_2, V_ALLWARN) + SETTER(si_opt_2, V_INTERSECT_ELIM) + SETTER(si_opt_2, V_INTERSECT_SYZ) + SETTER(si_opt_2, V_DEG_STOP) + + SETTER(si_opt_1, OPT_PROT) + SETTER(si_opt_1, OPT_REDSB) + SETTER(si_opt_1, OPT_NOT_BUCKETS) + SETTER(si_opt_1, OPT_NOT_SUGAR) + SETTER(si_opt_1, OPT_INTERRUPT) + SETTER(si_opt_1, OPT_SUGARCRIT) + SETTER(si_opt_1, OPT_DEBUG) + SETTER(si_opt_1, OPT_REDTHROUGH) + SETTER(si_opt_1, OPT_NO_SYZ_MINIM) + SETTER(si_opt_1, OPT_RETURN_SB) + SETTER(si_opt_1, OPT_FASTHC) + SETTER(si_opt_1, OPT_OLDSTD) + SETTER(si_opt_1, OPT_STAIRCASEBOUND) + SETTER(si_opt_1, OPT_MULTBOUND) + SETTER(si_opt_1, OPT_DEGBOUND) + SETTER(si_opt_1, OPT_REDTAIL) + SETTER(si_opt_1, OPT_INTSTRATEGY) + SETTER(si_opt_1, OPT_FINDET) + SETTER(si_opt_1, OPT_INFREDTAIL) + SETTER(si_opt_1, OPT_SB_1) + SETTER(si_opt_1, OPT_NOTREGULARITY) + SETTER(si_opt_1, OPT_WEIGHTM) + else + { + std::cerr << "unknown option " << opt << std::endl; + } + if (r!=NULL) + { + r->options=si_opt_1; + rChangeCurrRing(oldring); + } + return old_value; + }); #undef SETTER diff --git a/src/ideal/ideal.jl b/src/ideal/ideal.jl index c5189b985..e2e8e15b0 100644 --- a/src/ideal/ideal.jl +++ b/src/ideal/ideal.jl @@ -847,12 +847,12 @@ from the identity matrix only for local ring orderings. function divrem(I::sideal{S}, G::sideal{S}; complete_reduction::Bool = false) where S <: SPolyUnion check_parent(I, G) R = base_ring(I) - old_redsb=libSingular.set_option("OPT_REDSB",complete_reduction) - old_redtail=libSingular.set_option("OPT_REDTAIL",complete_reduction) + old_redsb=libSingular.set_option("OPT_REDSB",complete_reduction,R.ptr) + old_redtail=libSingular.set_option("OPT_REDTAIL",complete_reduction,R.ptr) ptr_T,ptr_Rest,ptr_U = GC.@preserve I G R libSingular.id_Lift(G.ptr, I.ptr, true, false, true, R.ptr) - libSingular.set_option("OPT_REDSB",old_redsb) - libSingular.set_option("OPT_REDTAIL",old_redtail) + libSingular.set_option("OPT_REDSB",old_redsb,R.ptr) + libSingular.set_option("OPT_REDTAIL",old_redtail,R.ptr) return (smodule{S}(R,ptr_T), sideal{S}(R,ptr_Rest), smodule{S}(R,ptr_U)) end diff --git a/src/module/module.jl b/src/module/module.jl index a2de68882..fd7c9c3b4 100644 --- a/src/module/module.jl +++ b/src/module/module.jl @@ -274,12 +274,12 @@ from the identity matrix only for local ring orderings. function divrem(I::smodule{S}, G::smodule{S}; complete_reduction::Bool = false) where S <: SPolyUnion check_parent(I, G) R = base_ring(I) - old_redsb=libSingular.set_option("OPT_REDSB",complete_reduction) - old_redtail=libSingular.set_option("OPT_REDTAIL",complete_reduction) + old_redsb=libSingular.set_option("OPT_REDSB",complete_reduction,R.ptr) + old_redtail=libSingular.set_option("OPT_REDTAIL",complete_reduction,R.ptr) ptr_T,ptr_Rest,ptr_U = GC.@preserve I G R libSingular.id_Lift(G.ptr, I.ptr, true, false, true, R.ptr) - libSingular.set_option("OPT_REDSB",old_redsb) - libSingular.set_option("OPT_REDTAIL",old_redtail) + libSingular.set_option("OPT_REDSB",old_redsb,R.ptr) + libSingular.set_option("OPT_REDTAIL",old_redtail,R.ptr) return (smodule{S}(R,ptr_T), smodule{S}(R,ptr_Rest), smodule{S}(R,ptr_U)) end From 7f18e68fb5dad034f4019bcce212a63254b86fa9 Mon Sep 17 00:00:00 2001 From: Hans Schoenemann Date: Fri, 14 Jun 2024 12:07:55 +0200 Subject: [PATCH 05/12] only set_option(string,bool,ring) --- deps/src/caller.cpp | 13 +-- deps/src/coeffs.cpp | 5 +- deps/src/ideals.cpp | 222 ++++++++++++++++--------------------- deps/src/ideals.h | 1 - deps/src/rings.cpp | 35 +++--- deps/src/singular.cpp | 16 +-- test/ideal/freealg-test.jl | 2 +- 7 files changed, 128 insertions(+), 166 deletions(-) diff --git a/deps/src/caller.cpp b/deps/src/caller.cpp index 38cfe35cb..f99f984f4 100644 --- a/deps/src/caller.cpp +++ b/deps/src/caller.cpp @@ -1,5 +1,4 @@ #include "caller.h" -#include "ideals.h" #include #include @@ -253,7 +252,7 @@ jl_value_t * get_julia_type_from_sleftv(leftv ret) jl_value_t * get_ring_content(ring r) { ring save = currRing; - rChangeCurrRing_wo_options(r); + rChangeCurrRing(r); // count elements idhdl h = r->idroot; @@ -284,7 +283,7 @@ jl_value_t * get_ring_content(ring r) nr++; } JL_GC_POP(); - rChangeCurrRing_wo_options(save); + rChangeCurrRing(save); return reinterpret_cast(result); } @@ -410,9 +409,9 @@ jl_value_t * convert_nested_list(void * l_void) void * create_syStrategy_data(syStrategy res, ring o) { const ring origin = currRing; - rChangeCurrRing_wo_options(o); + rChangeCurrRing(o); syStrategy temp = syCopy(res); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return reinterpret_cast(temp); } @@ -490,9 +489,9 @@ void singular_define_caller(jlcxx::Module & Singular) Singular.method("jl_array_to_void", [](jl_value_t * args_val, jl_value_t * types_val, ring R) { auto origin = currRing; - rChangeCurrRing_wo_options(R); + rChangeCurrRing(R); lists l = jl_array_to_list_helper(args_val, types_val); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return (void *)l; }); diff --git a/deps/src/coeffs.cpp b/deps/src/coeffs.cpp index a238d7410..2fd489e8e 100644 --- a/deps/src/coeffs.cpp +++ b/deps/src/coeffs.cpp @@ -1,5 +1,4 @@ #include "coeffs.h" -#include "ideals.h" auto transExt_helper(coeffs cf, jlcxx::ArrayRef param) { @@ -27,9 +26,9 @@ poly transExt_to_poly(number a, coeffs cf, ring r) ring ext = cf->extRing; nMapFunc nMap = n_SetMap(ext->cf, r->cf); const ring origin = currRing; - rChangeCurrRing_wo_options(r); + rChangeCurrRing(r); poly p = p_PermPoly(NUM((fraction)a), NULL, ext, r, nMap, NULL); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return p; } diff --git a/deps/src/ideals.cpp b/deps/src/ideals.cpp index b1af987ab..00f084b3b 100644 --- a/deps/src/ideals.cpp +++ b/deps/src/ideals.cpp @@ -1,45 +1,11 @@ #include "ideals.h" -unsigned si_no_ring_opt; -void rChangeCurrRing_wo_options(ring R) -{ -#define RING_OPTS (Sy_bit(OPT_REDTAIL) | Sy_bit(OPT_REDTAIL_SYZ)|Sy_bit(OPT_INTSTRATEGY)) - unsigned save_opts=si_opt_1; // save options - if (currRing==NULL) - si_no_ring_opt=si_opt_1; - rChangeCurrRing(R); - si_opt_1 =save_opts; - if (R!=NULL) - { - if (rField_is_Ring(R) - || rField_is_Q(R) - || (R->cf->extRing!=NULL) - ) - si_opt_1 |= Sy_bit(OPT_INTSTRATEGY); - else - si_opt_1 &= ~Sy_bit(OPT_INTSTRATEGY); - if (R->OrdSgn == -1) - { - si_opt_1 &= ~Sy_bit(OPT_REDTAIL); - si_opt_1 &= ~Sy_bit(OPT_REDTHROUGH); - } - else - { - si_opt_1 |= Sy_bit(OPT_REDTHROUGH); - } - } - else - { - si_opt_1=si_no_ring_opt; - } -} - auto id_sres_helper(sip_sideal * m, int n, ring R) { auto origin = currRing; - rChangeCurrRing_wo_options(R); + rChangeCurrRing(R); syStrategy s = sySchreyer(m, n); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); auto r = s->minres; bool minimal = true; if (r == NULL) @@ -61,9 +27,9 @@ auto qring_simplify_helper(poly p, ring R) auto id_fres_helper(sip_sideal * I, int n, std::string method, ring R) { auto origin = currRing; - rChangeCurrRing_wo_options(R); + rChangeCurrRing(R); syStrategy s = syFrank(I, n, method.c_str()); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); auto r = s->minres; bool minimal = true; if (r == NULL) @@ -77,9 +43,9 @@ auto id_fres_helper(sip_sideal * I, int n, std::string method, ring R) auto id_res_helper(sip_sideal * I, int n, int minimize, ring R) { auto origin = currRing; - rChangeCurrRing_wo_options(R); + rChangeCurrRing(R); syStrategy s = syResolution(I, n, NULL, (BOOLEAN)minimize); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); auto r = s->minres; bool minimal = true; if (r == NULL) @@ -101,11 +67,11 @@ auto id_res_helper(sip_sideal * I, int n, int minimize, ring R) auto id_mres_map_helper(sip_sideal * I, int n, ring R) { auto origin = currRing; - rChangeCurrRing_wo_options(R); + rChangeCurrRing(R); ideal T; syStrategy s = syMres_with_map(I, n, NULL, T); matrix TT = id_Module2Matrix(T, currRing); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); auto r = s->minres; bool minimal = true; if (r == NULL) @@ -126,18 +92,18 @@ auto id_mres_map_helper(sip_sideal * I, int n, ring R) auto id_prune_map_helper(sip_sideal * I, ring R) { auto origin = currRing; - rChangeCurrRing_wo_options(R); + rChangeCurrRing(R); ideal T; ideal s = idMinEmbedding_with_map(I, NULL, T); matrix TT = id_Module2Matrix(T, currRing); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return std::make_tuple(s, TT); } auto id_prune_map_v_helper(sip_sideal * I, jlcxx::ArrayRef a, ring R) { auto origin = currRing; - rChangeCurrRing_wo_options(R); + rChangeCurrRing(R); ideal T; int *v = (int *)omAlloc(I->rank*sizeof(int)); ideal s = idMinEmbedding_with_map_v(I, NULL, T, v); @@ -145,7 +111,7 @@ auto id_prune_map_v_helper(sip_sideal * I, jlcxx::ArrayRef a, ring R) a.push_back(v[j]); omFreeSize(v,I->rank*sizeof(int)); matrix TT = id_Module2Matrix(T, currRing); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return std::make_tuple(s, TT); } @@ -155,9 +121,9 @@ ideal id_Syzygies_internal(ideal m, ring o) intvec * n = NULL; tHomog h = testHomog; const ring origin = currRing; - rChangeCurrRing_wo_options(o); + rChangeCurrRing(o); id = idSyzygies(m, h, &n); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); if (n != NULL) delete n; return id; @@ -179,10 +145,10 @@ auto id_Slimgb_helper(ideal a, ring b, bool complete_reduction = false) const ring origin = currRing; unsigned int save_opt = si_opt_1; si_opt_1 |= crbit; - rChangeCurrRing_wo_options(b); + rChangeCurrRing(b); id = t_rep_gb(b, a, a->rank); - rChangeCurrRing_wo_options(origin); si_opt_1 = save_opt; + rChangeCurrRing(origin); if (n != NULL) delete n; } @@ -197,9 +163,9 @@ auto id_InterRed_helper(ideal a, ring b) if (!idIs0(a)) { const ring origin = currRing; - rChangeCurrRing_wo_options(b); + rChangeCurrRing(b); id = kInterRed(a, b->qideal); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); } else id = idInit(0, a->rank); @@ -222,10 +188,10 @@ auto id_Std_helper(ideal a, ring b, bool complete_reduction = false) const ring origin = currRing; unsigned int save_opt = si_opt_1; si_opt_1 |= crbit; - rChangeCurrRing_wo_options(b); + rChangeCurrRing(b); id = kStd(a, b->qideal, h, &n); - rChangeCurrRing_wo_options(origin); si_opt_1 = save_opt; + rChangeCurrRing(origin); if (n != NULL) delete n; } @@ -242,14 +208,14 @@ auto id_StdHC_helper(ideal a, poly HC, ring b) intvec * n = NULL; tHomog h = testHomog; const ring origin = currRing; + rChangeCurrRing(b); p_Delete(&(b->ppNoether),b); poly NN=p_Copy(HC,b); p_IncrExp(NN,b->N,b); p_Setm(NN,b); - rChangeCurrRing_wo_options(b); b->ppNoether=NN; id = kStd(a, b->qideal, h, &n); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); if (n != NULL) delete n; p_Delete(&(b->ppNoether),b); @@ -273,10 +239,10 @@ auto id_MinStd_helper(ideal a, ring b, bool complete_reduction = false) const ring origin = currRing; unsigned int save_opt = si_opt_1; si_opt_1 |= crbit; - rChangeCurrRing_wo_options(b); + rChangeCurrRing(b); id = kMin_std(a, b->qideal, h, NULL, m); - rChangeCurrRing_wo_options(origin); si_opt_1 = save_opt; + rChangeCurrRing(origin); return std::make_tuple(id, m); } @@ -310,10 +276,10 @@ auto id_StdHilb_helper(ideal a, const ring origin = currRing; unsigned int save_opt = si_opt_1; si_opt_1 |= crbit; - rChangeCurrRing_wo_options(b); + rChangeCurrRing(b); id = kStd(a, b->qideal, h, &n, hilb); - rChangeCurrRing_wo_options(origin); si_opt_1 = save_opt; + rChangeCurrRing(origin); if (n != NULL) delete n; } @@ -345,14 +311,14 @@ auto id_StdHilbWeighted_helper(ideal a, const ring origin = currRing; unsigned int save_opt = si_opt_1; si_opt_1 |= crbit; - rChangeCurrRing_wo_options(b); + rChangeCurrRing(b); id = kStd(a, currRing->qideal, h, &n, // module weights hilb, // hilbert series 0, 0, // syzComp, newIdeal varweights); // weights of vars - rChangeCurrRing_wo_options(origin); si_opt_1 = save_opt; + rChangeCurrRing(origin); if (n != NULL) delete n; } @@ -366,9 +332,9 @@ auto id_StdHilbWeighted_helper(ideal a, auto id_TwoStd_helper(ideal a, ring b) { const ring origin = currRing; - rChangeCurrRing_wo_options(b); + rChangeCurrRing(b); ideal id = twostd(a); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return id; } @@ -448,25 +414,25 @@ void singular_define_ideals(jlcxx::Module & Singular) Singular.method("id_Quotient", [](ideal a, ideal b, bool c, ring d) { const ring origin = currRing; - rChangeCurrRing_wo_options(d); + rChangeCurrRing(d); ideal id = idQuot(a, b, c, TRUE); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return id; }); Singular.method("id_Intersection", [](ideal a, ideal b, ring c) { const ring origin = currRing; - rChangeCurrRing_wo_options(c); + rChangeCurrRing(c); ideal id = idSect(a, b); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return id; }); Singular.method("id_MultSect", [](void * ids, int len, ring r) { const ring origin = currRing; - rChangeCurrRing_wo_options(r); + rChangeCurrRing(r); ideal id = idMultSect(reinterpret_cast(ids), len); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return id; }); @@ -494,75 +460,75 @@ void singular_define_ideals(jlcxx::Module & Singular) Singular.method("id_Eliminate", [](ideal m, poly p, ring o) { const ring origin = currRing; - rChangeCurrRing_wo_options(o); + rChangeCurrRing(o); ideal res = idElimination(m, p); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return res; }); Singular.method("id_DivRem", [](ideal m, ideal sm, ring o) { const ring origin = currRing; - rChangeCurrRing_wo_options(o); + rChangeCurrRing(o); ideal factors; ideal res = idDivRem(sm, m, factors, NULL); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return std::make_tuple(res, factors); }); Singular.method("id_DivRem", [](ideal m, ideal sm, ring o, int flag) { const ring origin = currRing; - rChangeCurrRing_wo_options(o); + rChangeCurrRing(o); ideal factors; ideal res = idDivRem(sm, m, factors, NULL, flag); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return std::make_tuple(res, factors); }); Singular.method("id_DivRem_Unit", [](ideal m, ideal sm, ring o) { const ring origin = currRing; - rChangeCurrRing_wo_options(o); + rChangeCurrRing(o); ideal factors; ideal unit; ideal res = idDivRem(sm, m, factors, &unit); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return std::make_tuple(res, factors, unit); }); Singular.method("id_DivRem_Unit", [](ideal m, ideal sm, ring o, int flag) { const ring origin = currRing; - rChangeCurrRing_wo_options(o); + rChangeCurrRing(o); ideal factors; ideal unit; ideal rest = idDivRem(m, sm, factors, &unit, flag); rest->rank = m->rank; - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return std::make_tuple(rest,factors, unit); }); Singular.method("id_Lift", [](ideal m, ideal sm, ring o) { const ring origin = currRing; - rChangeCurrRing_wo_options(o); + rChangeCurrRing(o); ideal rest; ideal res = idLift(m, sm, &rest, FALSE, FALSE); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return std::make_tuple(res, rest); }); Singular.method("id_Lift", [](ideal m, ideal sm, bool goodShape, bool isSB, bool divide, ring o) { const ring origin = currRing; - rChangeCurrRing_wo_options(o); + rChangeCurrRing(o); ideal rest; matrix unit; ideal res = idLift(m, sm, &rest, BOOLEAN(goodShape), BOOLEAN(isSB), BOOLEAN(divide), &unit, GbDefault); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return std::make_tuple(res, rest, unit); }); Singular.method("id_LiftStd", [](ideal m, ring o, bool complete_reduction = false) { const ring origin = currRing; - rChangeCurrRing_wo_options(o); + rChangeCurrRing(o); matrix ma = mpNew(1, 1); unsigned int crbit; if (complete_reduction) @@ -573,13 +539,13 @@ void singular_define_ideals(jlcxx::Module & Singular) si_opt_1 |= crbit; ideal res = idLiftStd(m, &ma, testHomog, NULL); si_opt_1 = save_opt; - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return std::make_tuple(res, ma); }); Singular.method("id_LiftStdSyz", [](ideal m, ring o, bool complete_reduction = false) { const ring origin = currRing; - rChangeCurrRing_wo_options(o); + rChangeCurrRing(o); matrix ma = mpNew(1, 1); ideal syz = idInit(1, 1); unsigned int crbit; @@ -592,15 +558,15 @@ void singular_define_ideals(jlcxx::Module & Singular) ideal res = idLiftStd(m, &ma, testHomog, &syz); si_opt_1 = save_opt; - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return std::make_tuple(res, ma, syz); }); Singular.method("id_Modulo", [](ideal a, ideal b, ring o) { const ring origin = currRing; - rChangeCurrRing_wo_options(o); + rChangeCurrRing(o); ideal res = idModulo(a, b, testHomog); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return res; }); @@ -608,10 +574,10 @@ void singular_define_ideals(jlcxx::Module & Singular) Singular.method("id_Saturation", [](ideal I, ideal J, ring r) { const ring origin = currRing; - rChangeCurrRing_wo_options(r); + rChangeCurrRing(r); int d; ideal res = idSaturate(I, J, d, TRUE); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return std::make_tuple(res, d); }); @@ -639,56 +605,56 @@ void singular_define_ideals(jlcxx::Module & Singular) Singular.method("id_vdim", [](ideal I, ring r) { const ring origin = currRing; - rChangeCurrRing_wo_options(r); + rChangeCurrRing(r); int n = scMult0Int(I, r->qideal); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return n; }); Singular.method("id_kbase", [](ideal I, ring r) { ideal res; const ring origin = currRing; - rChangeCurrRing_wo_options(r); + rChangeCurrRing(r); res = scKBase(-1, I, r->qideal); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return res; }); Singular.method("id_kbase", [](ideal I, int n, ring r) { ideal res; const ring origin = currRing; - rChangeCurrRing_wo_options(r); + rChangeCurrRing(r); res = scKBase(n, I, r->qideal); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return res; }); Singular.method("id_highcorner", [](ideal I, ring r) { poly h; const ring origin = currRing; - rChangeCurrRing_wo_options(r); + rChangeCurrRing(r); h = iiHighCorner(I, 0); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return h; }); Singular.method("maMapIdeal", [](ideal map_id, ring pr, ideal im_id, ring im, void * cf_map) { const ring origin = currRing; - rChangeCurrRing_wo_options(pr); + rChangeCurrRing(pr); ideal I = maMapIdeal(map_id, pr, im_id, im, reinterpret_cast(cf_map)); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return I; }); Singular.method("idMinBase", [](ideal I, ring r) { const ring origin = currRing; - rChangeCurrRing_wo_options(r); + rChangeCurrRing(r); ideal J = idMinBase(I); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return J; }); Singular.method("scIndIndset", [](ideal I, ring r, jlcxx::ArrayRef a, bool all) { const ring origin = currRing; - rChangeCurrRing_wo_options(r); + rChangeCurrRing(r); lists L = scIndIndset(I, all, r->qideal); int n = rVar(r); int m = lSize(L); @@ -713,23 +679,23 @@ void singular_define_ideals(jlcxx::Module & Singular) a.push_back(content[j]); } } - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); }); Singular.method("scDegree", [](ideal I, ring R) { const ring origin = currRing; - rChangeCurrRing_wo_options(R); + rChangeCurrRing(R); SPrintStart(); scDegree(I, NULL, R->qideal); char * s = SPrintEnd(); s[strlen(s) - 1] = '\0'; std::string res(s); omFree(s); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return res; }); Singular.method("scDegree", [](ideal I, ring R, jlcxx::ArrayRef w) { const ring origin = currRing; - rChangeCurrRing_wo_options(R); + rChangeCurrRing(R); intvec * module_w = to_intvec(w); SPrintStart(); scDegree(I, module_w, R->qideal); @@ -738,41 +704,41 @@ void singular_define_ideals(jlcxx::Module & Singular) s[strlen(s) - 1] = '\0'; std::string res(s); omFree(s); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return res; }); Singular.method("scMultInt", [](ideal I, ring R) { const ring origin = currRing; - rChangeCurrRing_wo_options(R); + rChangeCurrRing(R); int k = scMultInt(I, R->qideal); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return k; }); Singular.method("scDimInt", [](ideal I, ring R) { const ring origin = currRing; - rChangeCurrRing_wo_options(R); + rChangeCurrRing(R); int k = scDimInt(I, R->qideal); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return k; }); Singular.method("scDimIntRing", [](ideal I, ring R) { const ring origin = currRing; - rChangeCurrRing_wo_options(R); + rChangeCurrRing(R); int k = scDimIntRing(I, R->qideal); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return k; }); Singular.method("fglmzero", [](ideal Isrc, ring Rsrc, ring Rdest) { const ring origin = currRing; - rChangeCurrRing_wo_options(Rdest); + rChangeCurrRing(Rdest); ideal Idest = NULL; bool c = fglmzero(Rsrc, Isrc, Rdest, Idest, FALSE, FALSE); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return Idest; }); Singular.method("scHilb", [](ideal I, ring r, jlcxx::ArrayRef a) { const ring origin = currRing; - rChangeCurrRing_wo_options(r); + rChangeCurrRing(r); bigintmat * v = hFirstSeries0b(I, r->qideal, NULL,NULL, r,coeffs_BIGINT); for (int j = 0; j < v->length(); j++) { @@ -780,13 +746,13 @@ void singular_define_ideals(jlcxx::Module & Singular) a.push_back(n_Int(n,coeffs_BIGINT)); } delete v; - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); }); Singular.method("scHilbWeighted", [](ideal I, ring r, jlcxx::ArrayRef weights, jlcxx::ArrayRef a) { intvec * w = to_intvec(weights); const ring origin = currRing; - rChangeCurrRing_wo_options(r); + rChangeCurrRing(r); bigintmat * v = hFirstSeries0b(I, r->qideal, w, NULL,r,coeffs_BIGINT); delete w; for (int j = 0; j < v->length(); j++) @@ -795,7 +761,7 @@ void singular_define_ideals(jlcxx::Module & Singular) a.push_back(n_Int(n,coeffs_BIGINT)); } delete v; - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); }); Singular.method("scHilbWeighted", [](ideal I, ring r, jlcxx::ArrayRef weights, @@ -803,7 +769,7 @@ void singular_define_ideals(jlcxx::Module & Singular) intvec * w = to_intvec(weights); intvec * sh = to_intvec(shifts); const ring origin = currRing; - rChangeCurrRing_wo_options(r); + rChangeCurrRing(r); bigintmat * v = hFirstSeries0b(I, r->qideal, w, sh,r,coeffs_BIGINT); delete sh; delete w; @@ -813,23 +779,23 @@ void singular_define_ideals(jlcxx::Module & Singular) a.push_back(n_Int(n,coeffs_BIGINT)); } delete v; - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); }); Singular.method("scHilbPoly", [](ideal I, ring r, ring Qt) { const ring origin = currRing; - rChangeCurrRing_wo_options(r); + rChangeCurrRing(r); poly h = hFirstSeries0p(I, r->qideal, NULL, r, Qt); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return h; }); Singular.method("scHilbPolyWeighted", [](ideal I, ring r, jlcxx::ArrayRef weights, ring Qt) { intvec * w = to_intvec(weights); const ring origin = currRing; - rChangeCurrRing_wo_options(r); + rChangeCurrRing(r); poly h = hFirstSeries0p(I, r->qideal, w, r, Qt); delete w; - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return h; }); Singular.method("id_Homogen", id_Homogen); diff --git a/deps/src/ideals.h b/deps/src/ideals.h index e437bec11..8f596d3c2 100644 --- a/deps/src/ideals.h +++ b/deps/src/ideals.h @@ -4,6 +4,5 @@ #include "includes.h" void singular_define_ideals(jlcxx::Module &); -void rChangeCurrRing_wo_options(ring R); #endif diff --git a/deps/src/rings.cpp b/deps/src/rings.cpp index 6efeac177..83e91d6b4 100644 --- a/deps/src/rings.cpp +++ b/deps/src/rings.cpp @@ -1,5 +1,4 @@ #include "rings.h" -#include "ideals.h" auto rDefault_helper(coeffs cf, jlcxx::ArrayRef vars, rRingOrder_t ord) { @@ -177,7 +176,7 @@ ring weylAlgebra(ring r) ring make_qring(ring r, ideal id) { const ring origin = currRing; - rChangeCurrRing_wo_options(r); + rChangeCurrRing(r); coeffs newcf = currRing->cf; @@ -189,7 +188,7 @@ ring make_qring(ring r, ideal id) newcf = n_CoeffRingQuot1(p_GetCoeff(id->m[cpos], currRing), currRing->cf); if (newcf == NULL) { - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return NULL; } } @@ -257,7 +256,7 @@ ring make_qring(ring r, ideal id) } #endif - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return qr; } @@ -479,9 +478,9 @@ void singular_define_rings(jlcxx::Module & Singular) ideal I = idInit(1, 1); const ring origin = currRing; I->m[0] = q; - rChangeCurrRing_wo_options(r); + rChangeCurrRing(r); res = kNF(I, NULL, p, 0, KSTD_NF_LAZY); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); I->m[0] = NULL; id_Delete(&I, r); if (res == NULL) @@ -510,7 +509,7 @@ void singular_define_rings(jlcxx::Module & Singular) Singular.method("singclap_sqrfree", [](spolyrec * p, jlcxx::ArrayRef a, ip_sring * r) { const ring origin = currRing; - rChangeCurrRing_wo_options(r); + rChangeCurrRing(r); intvec * v = NULL; ideal I = singclap_sqrfree(pCopy(p), &v, 0, currRing); int * content = v->ivGetVec(); @@ -518,14 +517,14 @@ void singular_define_rings(jlcxx::Module & Singular) { a.push_back(content[i]); } - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); delete v; return I; }); Singular.method("singclap_factorize", [](spolyrec * p, jlcxx::ArrayRef a, ip_sring * r) { const ring origin = currRing; - rChangeCurrRing_wo_options(r); + rChangeCurrRing(r); intvec * v = NULL; ideal I = singclap_factorize(p_Copy(p, r), &v, 0, r); int * content = v->ivGetVec(); @@ -533,7 +532,7 @@ void singular_define_rings(jlcxx::Module & Singular) { a.push_back(content[i]); } - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); delete v; return I; }); @@ -545,30 +544,30 @@ void singular_define_rings(jlcxx::Module & Singular) Singular.method("p_SetExpVLV_internal", p_SetExpVLV); Singular.method("p_Reduce", [](spolyrec * p, sip_sideal * G, ip_sring * R) { const ring origin = currRing; - rChangeCurrRing_wo_options(R); + rChangeCurrRing(R); poly res = kNF(G, R->qideal, p); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return res; }); Singular.method("p_Reduce", [](sip_sideal * p, sip_sideal * G, ip_sring * R) { const ring origin = currRing; - rChangeCurrRing_wo_options(R); + rChangeCurrRing(R); ideal res = kNF(G, R->qideal, p); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return res; }); Singular.method("p_Reduce", [](spolyrec * p, sip_sideal * G, ip_sring * R, int flag) { const ring origin = currRing; - rChangeCurrRing_wo_options(R); + rChangeCurrRing(R); poly res = kNF(G, R->qideal, p, 0, flag); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return res; }); Singular.method("p_Reduce", [](sip_sideal * p, sip_sideal * G, ip_sring * R, int flag) { const ring origin = currRing; - rChangeCurrRing_wo_options(R); + rChangeCurrRing(R); ideal res = kNF(G, R->qideal, p, 0, flag); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return res; }); diff --git a/deps/src/singular.cpp b/deps/src/singular.cpp index d063b81ed..14b369847 100644 --- a/deps/src/singular.cpp +++ b/deps/src/singular.cpp @@ -380,9 +380,9 @@ JLCXX_MODULE define_julia_module(jlcxx::Module & Singular) Singular.method("res_Copy", [](syStrategy ra, ring o) { const ring origin = currRing; - rChangeCurrRing_wo_options(o); + rChangeCurrRing(o); syStrategy temp = syCopy(ra); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return temp; }); @@ -396,20 +396,20 @@ JLCXX_MODULE define_julia_module(jlcxx::Module & Singular) Singular.method("syMinimize", [](syStrategy ra, ring o) { const ring origin = currRing; - rChangeCurrRing_wo_options(o); + rChangeCurrRing(o); syStrategy result = syCopy(ra); syMinimize(result); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return result; }); Singular.method("syMinimize_map", [](syStrategy ra, ring o) { const ring origin = currRing; - rChangeCurrRing_wo_options(o); + rChangeCurrRing(o); ideal T=NULL; syMinimize_with_map(ra,T); matrix TT=id_Module2Matrix(T,o); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); return TT; }); @@ -445,11 +445,11 @@ JLCXX_MODULE define_julia_module(jlcxx::Module & Singular) Singular.method("syBetti_internal", [](void * ra, int len, ring o) { const ring origin = currRing; - rChangeCurrRing_wo_options(o); + rChangeCurrRing(o); int dummy; intvec * iv = syBetti(reinterpret_cast(ra), len, &dummy, NULL, FALSE, NULL); - rChangeCurrRing_wo_options(origin); + rChangeCurrRing(origin); int nrows = iv->rows(); int ncols = iv->cols(); auto betti = (int *)malloc(ncols * nrows * sizeof(int)); diff --git a/test/ideal/freealg-test.jl b/test/ideal/freealg-test.jl index 58fccb938..8f0dbb6b3 100644 --- a/test/ideal/freealg-test.jl +++ b/test/ideal/freealg-test.jl @@ -15,7 +15,7 @@ cs3 = u13 + u23 + u33 + u43 - 1 cs4 = u14 + u24 + u34 + u44 - 1 - Singular.libSingular.set_option("OPT_REDTAIL",false) + Singular.libSingular.set_option("OPT_REDTAIL",false,R.ptr) J1 = Ideal(R,[rs2,rs3,rs4,cs1,cs2,cs3,cs4]) J1=std(J1) From b164106f8fddc769687a677420675cc7e15f4c4a Mon Sep 17 00:00:00 2001 From: Hans Schoenemann Date: Mon, 17 Jun 2024 15:31:02 +0200 Subject: [PATCH 06/12] Update deps/src/singular.cpp Co-authored-by: Max Horn --- deps/src/singular.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/src/singular.cpp b/deps/src/singular.cpp index 14b369847..5cdcf3726 100644 --- a/deps/src/singular.cpp +++ b/deps/src/singular.cpp @@ -207,7 +207,7 @@ JLCXX_MODULE define_julia_module(jlcxx::Module & Singular) return old_value; }); // all of the global setters return the previous value - Singular.method("set_option", [](std::string opt, bool value, ring r) { + Singular.method("set_option", [](std::string opt, bool value, ring r == NULL) { bool old_value = false; ring oldring=currRing; if (r!=NULL) rChangeCurrRing(r); From d5a980ebc155119aed7d8fbdb52f7741595a16ab Mon Sep 17 00:00:00 2001 From: Hans Schoenemann Date: Mon, 17 Jun 2024 16:37:00 +0200 Subject: [PATCH 07/12] implify set_option --- deps/src/singular.cpp | 213 ++++++++++++++++-------------------------- 1 file changed, 80 insertions(+), 133 deletions(-) diff --git a/deps/src/singular.cpp b/deps/src/singular.cpp index 5cdcf3726..6fe5763d5 100644 --- a/deps/src/singular.cpp +++ b/deps/src/singular.cpp @@ -54,6 +54,84 @@ static void WerrorS_and_reset(const char * s) singular_error_log.emplace_back(s); } +#define SETTER(A, B) \ + else if (opt == #B) \ + { \ + old_value = (A & Sy_bit(B)) != 0; \ + A = value ? (A | Sy_bit(B)) : (A & ~Sy_bit(B)); \ + } + +// all of the global setters return the previous value +auto set_option_helper(std::string opt, bool value, ring r) { + bool old_value = false; + ring oldring=currRing; + if (r!=NULL) rChangeCurrRing(r); + if (false) + ; + SETTER(si_opt_2, V_QUIET) + SETTER(si_opt_2, V_QRING) + SETTER(si_opt_2, V_SHOW_MEM) + SETTER(si_opt_2, V_YACC) + SETTER(si_opt_2, V_REDEFINE) + SETTER(si_opt_2, V_LOAD_LIB) + SETTER(si_opt_2, V_DEBUG_LIB) + SETTER(si_opt_2, V_LOAD_PROC) + SETTER(si_opt_2, V_DEF_RES) + SETTER(si_opt_2, V_SHOW_USE) + SETTER(si_opt_2, V_IMAP) + SETTER(si_opt_2, V_PROMPT) + SETTER(si_opt_2, V_NSB) + SETTER(si_opt_2, V_CONTENTSB) + SETTER(si_opt_2, V_CANCELUNIT) + SETTER(si_opt_2, V_MODPSOLVSB) + SETTER(si_opt_2, V_UPTORADICAL) + SETTER(si_opt_2, V_FINDMONOM) + SETTER(si_opt_2, V_COEFSTRAT) + SETTER(si_opt_2, V_IDLIFT) + SETTER(si_opt_2, V_LENGTH) + SETTER(si_opt_2, V_ALLWARN) + SETTER(si_opt_2, V_INTERSECT_ELIM) + SETTER(si_opt_2, V_INTERSECT_SYZ) + SETTER(si_opt_2, V_DEG_STOP) + + SETTER(si_opt_1, OPT_PROT) + SETTER(si_opt_1, OPT_REDSB) + SETTER(si_opt_1, OPT_NOT_BUCKETS) + SETTER(si_opt_1, OPT_NOT_SUGAR) + SETTER(si_opt_1, OPT_INTERRUPT) + SETTER(si_opt_1, OPT_SUGARCRIT) + SETTER(si_opt_1, OPT_DEBUG) + SETTER(si_opt_1, OPT_REDTHROUGH) + SETTER(si_opt_1, OPT_NO_SYZ_MINIM) + SETTER(si_opt_1, OPT_RETURN_SB) + SETTER(si_opt_1, OPT_FASTHC) + SETTER(si_opt_1, OPT_OLDSTD) + SETTER(si_opt_1, OPT_STAIRCASEBOUND) + SETTER(si_opt_1, OPT_MULTBOUND) + SETTER(si_opt_1, OPT_DEGBOUND) + SETTER(si_opt_1, OPT_REDTAIL) + SETTER(si_opt_1, OPT_INTSTRATEGY) + SETTER(si_opt_1, OPT_FINDET) + SETTER(si_opt_1, OPT_INFREDTAIL) + SETTER(si_opt_1, OPT_SB_1) + SETTER(si_opt_1, OPT_NOTREGULARITY) + SETTER(si_opt_1, OPT_WEIGHTM) + else + { + std::cerr << "unknown option " << opt << std::endl; + } + if (r!=NULL) + { + r->options=si_opt_1; + rChangeCurrRing(oldring); + } + return old_value; + } +auto set_option_helper2(std::string opt, bool value) { + return set_option_helper(opt,value,NULL); + } +#undef SETTER + JLCXX_MODULE define_julia_module(jlcxx::Module & Singular) { Singular.add_type("coeffs"); @@ -140,140 +218,9 @@ JLCXX_MODULE define_julia_module(jlcxx::Module & Singular) return ss.str(); }); -#define SETTER(A, B) \ - else if (opt == #B) \ - { \ - old_value = (A & Sy_bit(B)) != 0; \ - A = value ? (A | Sy_bit(B)) : (A & ~Sy_bit(B)); \ - } + Singular.method("set_option", &set_option_helper2); + Singular.method("set_option", &set_option_helper); - // all of the global setters return the previous value - Singular.method("set_option", [](std::string opt, bool value) { - bool old_value = false; - if (false) - ; - SETTER(si_opt_2, V_QUIET) - SETTER(si_opt_2, V_QRING) - SETTER(si_opt_2, V_SHOW_MEM) - SETTER(si_opt_2, V_YACC) - SETTER(si_opt_2, V_REDEFINE) - SETTER(si_opt_2, V_LOAD_LIB) - SETTER(si_opt_2, V_DEBUG_LIB) - SETTER(si_opt_2, V_LOAD_PROC) - SETTER(si_opt_2, V_DEF_RES) - SETTER(si_opt_2, V_SHOW_USE) - SETTER(si_opt_2, V_IMAP) - SETTER(si_opt_2, V_PROMPT) - SETTER(si_opt_2, V_NSB) - SETTER(si_opt_2, V_CONTENTSB) - SETTER(si_opt_2, V_CANCELUNIT) - SETTER(si_opt_2, V_MODPSOLVSB) - SETTER(si_opt_2, V_UPTORADICAL) - SETTER(si_opt_2, V_FINDMONOM) - SETTER(si_opt_2, V_COEFSTRAT) - SETTER(si_opt_2, V_IDLIFT) - SETTER(si_opt_2, V_LENGTH) - SETTER(si_opt_2, V_ALLWARN) - SETTER(si_opt_2, V_INTERSECT_ELIM) - SETTER(si_opt_2, V_INTERSECT_SYZ) - SETTER(si_opt_2, V_DEG_STOP) - - SETTER(si_opt_1, OPT_PROT) - SETTER(si_opt_1, OPT_REDSB) - SETTER(si_opt_1, OPT_NOT_BUCKETS) - SETTER(si_opt_1, OPT_NOT_SUGAR) - SETTER(si_opt_1, OPT_INTERRUPT) - SETTER(si_opt_1, OPT_SUGARCRIT) - SETTER(si_opt_1, OPT_DEBUG) - SETTER(si_opt_1, OPT_REDTHROUGH) - SETTER(si_opt_1, OPT_NO_SYZ_MINIM) - SETTER(si_opt_1, OPT_RETURN_SB) - SETTER(si_opt_1, OPT_FASTHC) - SETTER(si_opt_1, OPT_OLDSTD) - SETTER(si_opt_1, OPT_STAIRCASEBOUND) - SETTER(si_opt_1, OPT_MULTBOUND) - SETTER(si_opt_1, OPT_DEGBOUND) - SETTER(si_opt_1, OPT_REDTAIL) - SETTER(si_opt_1, OPT_INTSTRATEGY) - SETTER(si_opt_1, OPT_FINDET) - SETTER(si_opt_1, OPT_INFREDTAIL) - SETTER(si_opt_1, OPT_SB_1) - SETTER(si_opt_1, OPT_NOTREGULARITY) - SETTER(si_opt_1, OPT_WEIGHTM) - else - { - std::cerr << "unknown option " << opt << std::endl; - } - return old_value; - }); - // all of the global setters return the previous value - Singular.method("set_option", [](std::string opt, bool value, ring r == NULL) { - bool old_value = false; - ring oldring=currRing; - if (r!=NULL) rChangeCurrRing(r); - if (false) - ; - SETTER(si_opt_2, V_QUIET) - SETTER(si_opt_2, V_QRING) - SETTER(si_opt_2, V_SHOW_MEM) - SETTER(si_opt_2, V_YACC) - SETTER(si_opt_2, V_REDEFINE) - SETTER(si_opt_2, V_LOAD_LIB) - SETTER(si_opt_2, V_DEBUG_LIB) - SETTER(si_opt_2, V_LOAD_PROC) - SETTER(si_opt_2, V_DEF_RES) - SETTER(si_opt_2, V_SHOW_USE) - SETTER(si_opt_2, V_IMAP) - SETTER(si_opt_2, V_PROMPT) - SETTER(si_opt_2, V_NSB) - SETTER(si_opt_2, V_CONTENTSB) - SETTER(si_opt_2, V_CANCELUNIT) - SETTER(si_opt_2, V_MODPSOLVSB) - SETTER(si_opt_2, V_UPTORADICAL) - SETTER(si_opt_2, V_FINDMONOM) - SETTER(si_opt_2, V_COEFSTRAT) - SETTER(si_opt_2, V_IDLIFT) - SETTER(si_opt_2, V_LENGTH) - SETTER(si_opt_2, V_ALLWARN) - SETTER(si_opt_2, V_INTERSECT_ELIM) - SETTER(si_opt_2, V_INTERSECT_SYZ) - SETTER(si_opt_2, V_DEG_STOP) - - SETTER(si_opt_1, OPT_PROT) - SETTER(si_opt_1, OPT_REDSB) - SETTER(si_opt_1, OPT_NOT_BUCKETS) - SETTER(si_opt_1, OPT_NOT_SUGAR) - SETTER(si_opt_1, OPT_INTERRUPT) - SETTER(si_opt_1, OPT_SUGARCRIT) - SETTER(si_opt_1, OPT_DEBUG) - SETTER(si_opt_1, OPT_REDTHROUGH) - SETTER(si_opt_1, OPT_NO_SYZ_MINIM) - SETTER(si_opt_1, OPT_RETURN_SB) - SETTER(si_opt_1, OPT_FASTHC) - SETTER(si_opt_1, OPT_OLDSTD) - SETTER(si_opt_1, OPT_STAIRCASEBOUND) - SETTER(si_opt_1, OPT_MULTBOUND) - SETTER(si_opt_1, OPT_DEGBOUND) - SETTER(si_opt_1, OPT_REDTAIL) - SETTER(si_opt_1, OPT_INTSTRATEGY) - SETTER(si_opt_1, OPT_FINDET) - SETTER(si_opt_1, OPT_INFREDTAIL) - SETTER(si_opt_1, OPT_SB_1) - SETTER(si_opt_1, OPT_NOTREGULARITY) - SETTER(si_opt_1, OPT_WEIGHTM) - else - { - std::cerr << "unknown option " << opt << std::endl; - } - if (r!=NULL) - { - r->options=si_opt_1; - rChangeCurrRing(oldring); - } - return old_value; - }); - -#undef SETTER // the "printlevel" system variable in Singular Singular.method("set_printlevel", [](int level) { From 0ca7158c0aca231180c973972ca38d952fa63e03 Mon Sep 17 00:00:00 2001 From: Hans Schoenemann Date: Fri, 28 Jun 2024 09:12:05 +0200 Subject: [PATCH 08/12] fix order of ring change and option setting --- deps/src/ideals.cpp | 39 +++++++++++++++++++-------------------- src/MessyHacks.jl | 22 ++++++++++++++++++++++ test/ideal/sideal-test.jl | 2 +- 3 files changed, 42 insertions(+), 21 deletions(-) diff --git a/deps/src/ideals.cpp b/deps/src/ideals.cpp index 00f084b3b..bb96a12a2 100644 --- a/deps/src/ideals.cpp +++ b/deps/src/ideals.cpp @@ -134,7 +134,7 @@ auto id_Slimgb_helper(ideal a, ring b, bool complete_reduction = false) // bool complete_reduction= false; unsigned int crbit; if (complete_reduction) - auto crbit = Sy_bit(OPT_REDSB); + crbit = Sy_bit(OPT_REDSB); else crbit = 0; ideal id = NULL; @@ -144,11 +144,11 @@ auto id_Slimgb_helper(ideal a, ring b, bool complete_reduction = false) tHomog h = testHomog; const ring origin = currRing; unsigned int save_opt = si_opt_1; - si_opt_1 |= crbit; rChangeCurrRing(b); + si_opt_1 |= crbit; id = t_rep_gb(b, a, a->rank); - si_opt_1 = save_opt; rChangeCurrRing(origin); + si_opt_1 = save_opt; if (n != NULL) delete n; } @@ -187,11 +187,11 @@ auto id_Std_helper(ideal a, ring b, bool complete_reduction = false) tHomog h = testHomog; const ring origin = currRing; unsigned int save_opt = si_opt_1; - si_opt_1 |= crbit; rChangeCurrRing(b); + si_opt_1 |= crbit; id = kStd(a, b->qideal, h, &n); - si_opt_1 = save_opt; rChangeCurrRing(origin); + si_opt_1 = save_opt; if (n != NULL) delete n; } @@ -238,11 +238,11 @@ auto id_MinStd_helper(ideal a, ring b, bool complete_reduction = false) tHomog h = testHomog; const ring origin = currRing; unsigned int save_opt = si_opt_1; - si_opt_1 |= crbit; rChangeCurrRing(b); + si_opt_1 |= crbit; id = kMin_std(a, b->qideal, h, NULL, m); - si_opt_1 = save_opt; rChangeCurrRing(origin); + si_opt_1 = save_opt; return std::make_tuple(id, m); } @@ -275,11 +275,11 @@ auto id_StdHilb_helper(ideal a, tHomog h = testHomog; const ring origin = currRing; unsigned int save_opt = si_opt_1; - si_opt_1 |= crbit; rChangeCurrRing(b); + si_opt_1 |= crbit; id = kStd(a, b->qideal, h, &n, hilb); - si_opt_1 = save_opt; rChangeCurrRing(origin); + si_opt_1 = save_opt; if (n != NULL) delete n; } @@ -310,15 +310,15 @@ auto id_StdHilbWeighted_helper(ideal a, tHomog h = testHomog; const ring origin = currRing; unsigned int save_opt = si_opt_1; - si_opt_1 |= crbit; rChangeCurrRing(b); + si_opt_1 |= crbit; id = kStd(a, currRing->qideal, h, &n, // module weights hilb, // hilbert series 0, 0, // syzComp, newIdeal varweights); // weights of vars - si_opt_1 = save_opt; rChangeCurrRing(origin); + si_opt_1 = save_opt; if (n != NULL) delete n; } @@ -528,37 +528,36 @@ void singular_define_ideals(jlcxx::Module & Singular) Singular.method("id_LiftStd", [](ideal m, ring o, bool complete_reduction = false) { const ring origin = currRing; - rChangeCurrRing(o); - matrix ma = mpNew(1, 1); unsigned int crbit; if (complete_reduction) crbit = Sy_bit(OPT_REDSB); else crbit = 0; unsigned int save_opt = si_opt_1; + rChangeCurrRing(o); + matrix ma = mpNew(1, 1); si_opt_1 |= crbit; ideal res = idLiftStd(m, &ma, testHomog, NULL); - si_opt_1 = save_opt; rChangeCurrRing(origin); + si_opt_1 = save_opt; return std::make_tuple(res, ma); }); Singular.method("id_LiftStdSyz", [](ideal m, ring o, bool complete_reduction = false) { - const ring origin = currRing; - rChangeCurrRing(o); - matrix ma = mpNew(1, 1); - ideal syz = idInit(1, 1); unsigned int crbit; if (complete_reduction) crbit = Sy_bit(OPT_REDSB); else crbit = 0; unsigned int save_opt = si_opt_1; + const ring origin = currRing; + rChangeCurrRing(o); + matrix ma = mpNew(1, 1); + ideal syz = idInit(1, 1); si_opt_1 |= crbit; ideal res = idLiftStd(m, &ma, testHomog, &syz); - si_opt_1 = save_opt; - rChangeCurrRing(origin); + si_opt_1 = save_opt; return std::make_tuple(res, ma, syz); }); diff --git a/src/MessyHacks.jl b/src/MessyHacks.jl index ef5ca3b99..f3290b3e9 100644 --- a/src/MessyHacks.jl +++ b/src/MessyHacks.jl @@ -69,6 +69,28 @@ for (name, str) in [(:with_fastHC, "OPT_FASTHC") end end +function with_redTail(f, flag::Bool, R::PolyRingUnion) + old_flag = libSingular.set_option("OPT_REDTAIL", flag, R.ptr) + local g = nothing + try + g = f() + finally + libSingular.set_option("OPT_REDTAIL", old_flag, R.ptr) + end + return g +end + +function with_redThrough(f, flag::Bool, R::PolyRingUnion) + old_flag = libSingular.set_option("OPT_REDTHROUGH", flag, R.ptr) + local g = nothing + try + g = f() + finally + libSingular.set_option("OPT_REDTHROUGH", old_flag, R.ptr) + end + return g +end + #= messy hack #1: diff --git a/test/ideal/sideal-test.jl b/test/ideal/sideal-test.jl index d5417894e..3721bcf1c 100644 --- a/test/ideal/sideal-test.jl +++ b/test/ideal/sideal-test.jl @@ -396,7 +396,7 @@ end B = slimgb(I, complete_reduction=true) @test isequal(B, Ideal(R, 2y^2 + 3, x^2 + x*y + 1)) || - isequal(B, Ideal(x^2 + x*y + 1, 2y^2 + 3)) + isequal(B, Ideal(R, x^2 + x*y + 1, 2y^2 + 3)) @test B.isGB == true end From b4d7bda5959cbe1b8da70cf75e671186b20221b5 Mon Sep 17 00:00:00 2001 From: Hans Schoenemann Date: Fri, 28 Jun 2024 15:59:27 +0200 Subject: [PATCH 09/12] test with with_redTail --- test/ideal/freealg-test.jl | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/ideal/freealg-test.jl b/test/ideal/freealg-test.jl index 8f0dbb6b3..2af5bd813 100644 --- a/test/ideal/freealg-test.jl +++ b/test/ideal/freealg-test.jl @@ -22,4 +22,9 @@ @test J1[7] == u11 + u21 + u31 + u41 - 1 + J1 = Ideal(R,[rs2,rs3,rs4,cs1,cs2,cs3,cs4]) + J2=with_redTail(false,R) do + return std(J1) + end + @test J2[7] == u11 + u21 + u31 + u41 - 1 end From 8d19fcfb8c7627a37c652965f3bc882a1e2a65de Mon Sep 17 00:00:00 2001 From: Max Horn Date: Fri, 28 Jun 2024 18:59:53 +0200 Subject: [PATCH 10/12] cleanup test --- test/ideal/freealg-test.jl | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/test/ideal/freealg-test.jl b/test/ideal/freealg-test.jl index 2af5bd813..061774034 100644 --- a/test/ideal/freealg-test.jl +++ b/test/ideal/freealg-test.jl @@ -14,17 +14,17 @@ cs2 = u12 + u22 + u32 + u42 - 1 cs3 = u13 + u23 + u33 + u43 - 1 cs4 = u14 + u24 + u34 + u44 - 1 - + Singular.libSingular.set_option("OPT_REDTAIL",false,R.ptr) - + J1 = Ideal(R,[rs2,rs3,rs4,cs1,cs2,cs3,cs4]) - J1=std(J1) - - @test J1[7] == u11 + u21 + u31 + u41 - 1 - - J1 = Ideal(R,[rs2,rs3,rs4,cs1,cs2,cs3,cs4]) - J2=with_redTail(false,R) do - return std(J1) - end + J2 = std(J1) + @test J2[7] == u11 + u21 + u31 + u41 - 1 + + J3 = Ideal(R,[rs2,rs3,rs4,cs1,cs2,cs3,cs4]) + J4 = with_redTail(false,R) do + std(J3) + end + @test J4[7] == u11 + u21 + u31 + u41 - 1 end From 1163fb67133336bacd0d3d743ed9459dc09f00cf Mon Sep 17 00:00:00 2001 From: Max Horn Date: Fri, 28 Jun 2024 19:00:01 +0200 Subject: [PATCH 11/12] resolve some code oddity --- deps/src/singular.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/deps/src/singular.cpp b/deps/src/singular.cpp index 6fe5763d5..f21a4b6cd 100644 --- a/deps/src/singular.cpp +++ b/deps/src/singular.cpp @@ -55,19 +55,17 @@ static void WerrorS_and_reset(const char * s) } #define SETTER(A, B) \ - else if (opt == #B) \ + if (opt == #B) \ { \ old_value = (A & Sy_bit(B)) != 0; \ A = value ? (A | Sy_bit(B)) : (A & ~Sy_bit(B)); \ - } + } else // all of the global setters return the previous value auto set_option_helper(std::string opt, bool value, ring r) { bool old_value = false; ring oldring=currRing; if (r!=NULL) rChangeCurrRing(r); - if (false) - ; SETTER(si_opt_2, V_QUIET) SETTER(si_opt_2, V_QRING) SETTER(si_opt_2, V_SHOW_MEM) @@ -116,7 +114,7 @@ auto set_option_helper(std::string opt, bool value, ring r) { SETTER(si_opt_1, OPT_SB_1) SETTER(si_opt_1, OPT_NOTREGULARITY) SETTER(si_opt_1, OPT_WEIGHTM) - else + // else <--- not needed, already "provided" by SETTER { std::cerr << "unknown option " << opt << std::endl; } From 428dc87ccabbd60603702d4eb916fdd9246c61a8 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Fri, 28 Jun 2024 19:02:53 +0200 Subject: [PATCH 12/12] more cleanup --- src/MessyHacks.jl | 40 +++++++++++++++------------------------- 1 file changed, 15 insertions(+), 25 deletions(-) diff --git a/src/MessyHacks.jl b/src/MessyHacks.jl index f3290b3e9..cade9528e 100644 --- a/src/MessyHacks.jl +++ b/src/MessyHacks.jl @@ -16,13 +16,11 @@ Singular and this is the starting value. """ function with_degBound(f, degb::Integer) old_degb = libSingular.set_degBound(Cint(degb)) - local g = nothing try - g = f() + return f() finally libSingular.set_degBound(old_degb) end - return g end @doc raw""" @@ -35,13 +33,11 @@ bound in Singular and this is the starting value. """ function with_multBound(f, mu::Integer) old_mu = libSingular.set_multBound(Cint(mu)) - local g = nothing try - g = f() + return f() finally libSingular.set_multBound(old_mu) end - return g end for (name, str) in [(:with_fastHC, "OPT_FASTHC") @@ -56,13 +52,11 @@ for (name, str) in [(:with_fastHC, "OPT_FASTHC") @eval begin function ($name)(f, flag::Bool) old_flag = libSingular.set_option($str, flag) - local g = nothing try - g = f() + return f() finally libSingular.set_option($str, old_flag) end - return g end export $name @@ -70,25 +64,21 @@ for (name, str) in [(:with_fastHC, "OPT_FASTHC") end function with_redTail(f, flag::Bool, R::PolyRingUnion) - old_flag = libSingular.set_option("OPT_REDTAIL", flag, R.ptr) - local g = nothing - try - g = f() - finally - libSingular.set_option("OPT_REDTAIL", old_flag, R.ptr) - end - return g + old_flag = libSingular.set_option("OPT_REDTAIL", flag, R.ptr) + try + return f() + finally + libSingular.set_option("OPT_REDTAIL", old_flag, R.ptr) + end end function with_redThrough(f, flag::Bool, R::PolyRingUnion) - old_flag = libSingular.set_option("OPT_REDTHROUGH", flag, R.ptr) - local g = nothing - try - g = f() - finally - libSingular.set_option("OPT_REDTHROUGH", old_flag, R.ptr) - end - return g + old_flag = libSingular.set_option("OPT_REDTHROUGH", flag, R.ptr) + try + return f() + finally + libSingular.set_option("OPT_REDTHROUGH", old_flag, R.ptr) + end end #=