Dear David,
On 08/11/2023 23.09, David Bremner wrote:
David Bremner <da...@tethera.net> writes:
I didn't have a chance to investigate so far, but I am seeing a test
failure with Polymake 4.11 building with Perl 5.36. I will try to build
with 5.38 and report a proper build log.
*** Failed tests ***
/<<PKGBUILDDIR>>/apps/polytope/rules/slack_ideal.rules:29: testcase 1
expected: regular return
got: EXCEPTION: no more rules available to compute 'GENERATORS
That looks like the same as #1052830.
I was able to reproduce this and it comes from a changed return type of
the Singular saturation command. The attached patch should fix this and
work with both old and new Singular versions.
Best,
Benjamin
commit 4ce0549f510d246c8f69c85c509fc2d13d882442
Author: Benjamin Lorenz <lor...@math.tu-berlin.de>
Date: Thu Nov 9 11:15:06 2023 +0100
singular: support new return types for saturation command
This was changed from (ideal, exponent) to just the ideal in singular 4-3-2p5.
To allow older versions we keep using sat but support both return types
instead of switching to the new sat_with_exp.
diff --git a/bundled/singular/apps/ideal/src/singularIdeal.cc b/bundled/singular/apps/ideal/src/singularIdeal.cc
index 4cbc00a6f4..bdade5c29d 100644
--- a/bundled/singular/apps/ideal/src/singularIdeal.cc
+++ b/bundled/singular/apps/ideal/src/singularIdeal.cc
@@ -236,22 +236,24 @@ public:
arg.next->data=(void *)idCopy(J);
// call primdecSY
BOOLEAN res=iiMake_proc(sathdl, nullptr ,&arg);
- if(!res && (iiRETURNEXPR.Typ() == LIST_CMD)){
- lists L = (lists)iiRETURNEXPR.Data();
- SingularIdeal_wrap* result;
- if(L->m[0].Typ() == IDEAL_CMD){
- result = new SingularIdeal_impl((::ideal) (L->m[0].Data()),singRing);
- } else {
- throw std::runtime_error("Something went wrong for the primary decomposition");
+ if(!res) {
+ ::ideal iddata = nullptr;
+ if (iiRETURNEXPR.Typ() == LIST_CMD) {
+ lists L = (lists)iiRETURNEXPR.Data();
+ if(L->m[0].Typ() == IDEAL_CMD)
+ iddata = (::ideal) L->m[0].Data();
+ } else if (iiRETURNEXPR.Typ() == IDEAL_CMD) {
+ iddata = (::ideal) iiRETURNEXPR.Data();
+ }
+ if (iddata != nullptr) {
+ SingularIdeal_wrap* result = new SingularIdeal_impl(iddata, singRing);
+ iiRETURNEXPR.CleanUp();
+ iiRETURNEXPR.Init();
+ return result;
}
- iiRETURNEXPR.CleanUp();
- iiRETURNEXPR.Init();
- return result;
- } else {
- iiRETURNEXPR.Init();
- throw std::runtime_error("Something went wrong for the saturation");
}
-
+ iiRETURNEXPR.Init();
+ throw std::runtime_error("saturation: unable to parse ideal from return value");
}
Array<SingularIdeal_wrap*> primary_decomposition() const