Skip to content

Commit 735b759

Browse files
committed
Fix evaluation when the input involves only constants
1 parent 32334f1 commit 735b759

2 files changed

Lines changed: 50 additions & 5 deletions

File tree

src/rag-subroutines.mm

Lines changed: 49 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1129,6 +1129,36 @@
11291129
return sols;
11301130
end proc:
11311131
1132+
ConstantSolveFamily:=proc(Equations, FamPositive, FamNotNull, Inequalities, Inequations)
1133+
local i;
1134+
for i from 1 to nops(Equations) do
1135+
if sign(Equations[i]) <> 0 then
1136+
return [];
1137+
end if;
1138+
end do;
1139+
for i from 1 to nops(FamPositive) do
1140+
if sign(FamPositive[i]) <= 0 then
1141+
return [];
1142+
end if;
1143+
end do;
1144+
for i from 1 to nops(Inequalities) do
1145+
if sign(Inequalities[i]) <= 0 then
1146+
return [];
1147+
end if;
1148+
end do;
1149+
for i from 1 to nops(FamNotNull) do
1150+
if sign(FamNotNull[i]) = 0 then
1151+
return [];
1152+
end if;
1153+
end do;
1154+
for i from 1 to nops(Inequations) do
1155+
if sign(Inequations[i]) = 0 then
1156+
return [];
1157+
end if;
1158+
end do;
1159+
return [[]];
1160+
end proc:
1161+
11321162
UnivariateSolveFamily:=proc(Equations, Fam, Inequalities, Inequations, vars)
11331163
local g, upol, f, uroots, i, sq, sols, q, newpol, p, mid;
11341164
g:=0:
@@ -1674,6 +1704,9 @@
16741704
Fam:=[op(FamPositive), op(FamNotNull)]:
16751705
Fam:=sort(Fam, (a, b)->degree(a)<=degree(b)):
16761706
sols:=[];
1707+
if nops(vars) = 0 then
1708+
return ConstantSolveFamily(Equations, FamPositive, FamNotNull, Inequalities, Inequations);
1709+
end if;
16771710
if nops(vars) = 1 then
16781711
return UnivariateSolveFamily(Equations, FamPositive, Inequalities, Inequations, vars);
16791712
end if;
@@ -1858,7 +1891,7 @@
18581891
SemiAlgebraicSolve:=proc(Equations, Inequalities, Inequations, opts:={})
18591892
local newsols, _toStudy, l, i, pol, boo, vars, _Studied, singminors, pt, _c,
18601893
midsols, verb, sols, lsigns, _l, nc, isempty, oldvars, newvars,
1861-
newopts, oldnewvars, npos;
1894+
newopts, oldnewvars, npos, NewEquations;
18621895
18631896
if type(subs(opts, "verb"), integer) then
18641897
verb:=subs(opts, "verb");
@@ -1872,11 +1905,22 @@
18721905
isempty:=0:
18731906
end if;
18741907
1908+
if member(0, Inequations) or member(0, Inequalities) or
1909+
member(-1, map(sign, map(_pol->if degree(_pol)=0 then _pol fi, Inequalities))) then
1910+
return [];
1911+
end if;
1912+
1913+
if nops(select(_pol -> type(_pol, constant) and _pol <> 0, Equations)) > 0 then
1914+
return [];
1915+
end if;
1916+
1917+
NewEquations := select(_pol -> not type(_pol, constant), Equations):
1918+
18751919
vars:=[op(indets([op(Equations), op(Inequalities), op(Inequations)]))];
18761920
sols := [];
18771921
lsigns:={}:
1878-
if nops(Equations) > 0 then
1879-
sols := PointsPerComponentsAlgebraic(Equations, Inequalities, Inequations, opts);
1922+
if nops(NewEquations) > 0 then
1923+
sols := PointsPerComponentsAlgebraic(NewEquations, Inequalities, Inequations, opts);
18801924
if isempty>=1 and nops(sols) > 0 then
18811925
return sols;
18821926
end if;
@@ -1920,7 +1964,7 @@
19201964
end if;
19211965
end if;
19221966
1923-
newsols:=SemiAlgebraicSolveIterateOnFamilies(Equations, _toStudy, Inequalities,
1967+
newsols:=SemiAlgebraicSolveIterateOnFamilies(NewEquations, _toStudy, Inequalities,
19241968
Inequations, vars, newopts);
19251969
19261970
midsols:=map(pt->map(_c->lhs(_c)=(rhs(_c)[1]+rhs(_c)[2])/2, pt), newsols):
@@ -1966,7 +2010,7 @@
19662010
end if;
19672011
end if;
19682012
1969-
newsols:=SemiAlgebraicSolveIterateOnFamilies(Equations, _toStudy, Inequalities,
2013+
newsols:=SemiAlgebraicSolveIterateOnFamilies(NewEquations, _toStudy, Inequalities,
19702014
Inequations, vars, newopts);
19712015
midsols:=map(pt->map(_c->lhs(_c)=(rhs(_c)[1]+rhs(_c)[2])/2, pt), newsols):
19722016
lsigns:=lsigns union convert(map(l->map(sign, l), map(pt->subs(pt,Inequations), midsols)), set):

src/rag.mm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
ModularLimits, LimitsDeformedCriticalPoints, CriticalPointsSingular,
5252
SplitSystem_cstr, SplitSystem, CriticalPoints, ExactSolSelection,
5353
GenerateCriticalPointsFamilies, FamCriticalPoints, UnivariateSolveFamily,
54+
ConstantSolveFamily,
5455
AdmissibleSolutions, GenerateDeformedFamilies_eps,
5556
OLDGenerateDeformedFamilies_eps, ConstrainedValues, UnboundedComponents,
5657
DegenerateDeformedSystem, InfiniteBranches, ZeroDimBoundaries, SolveFamily,

0 commit comments

Comments
 (0)