FYI,
Just finished running the independent CAS integration tests using 1.3.11. This has
106812 integrals in total.
I've put plain text file of the initial notes here in case this below gets reformatted.
Here are the content of the above also. Basically Fricas 1.3.11 passed
82,445 and 1.3.10 had passed
82,473. But looking more, I found 18 new exceptions which did not happen before.
These all seem to be same, but I only had time to try two of them. Running the integrals in Fricas 1.3.11 they work. But in sagemath it gives
Heap exhausted during allocation: 4128768 bytes available, 8305312 requested.
Not sure why now this happens, as I am using same sage 10.3 on same PC I used in testing Fricas 1.3.10. And why they work inside 1.3.11 but not in sagemath now.
It could be Fricas 1.3.11 runs with more RAM now than 1.3.10.
I will also post this to sagemath group and see what they say.
--------------------------------------- NOTES----------------------------------------
===========================================
>which fricas
/usr/local/bin/fricas
>fricas --version
FriCAS 1.3.11
based on sbcl 2.4.5
>which sage
/home/me/TMP/sage-10.3/sage
>sage --version
SageMath version 10.3, Release Date: 2024-03-19
>uname -a
Linux me-virtualbox 6.6.32-1-MANJARO #1 SMP PREEMPT_DYNAMIC Mon May 27 03:41:25 UTC 2024 x86_64 GNU/Linux
lsb_release -a
LSB Version: n/a
Distributor ID: ManjaroLinux
Description: Manjaro Linux
Release: 24.0.2
Codename: Wynsdey
grep MemTotal /proc/meminfo
MemTotal: 50189304 kB
Note 1: File 355 has 18 failed integrals due to
"There are no library operations named exp_integral_e "
Data 1.3.11 information about Fricase
-------------------------------------
>sqlite3 cas_integration_tests.db
#total number of integrals
sqlite> select count(*) from main;
106812
#number all failed by Fricas 1.3.11
sqlite> select count(*) from main where fricas_pass=0 or fricas_pass=-1 or fricas_pass=-2;
24367
#number normal failed by Fricas 1.3.11
sqlite> select count(*) from main where fricas_pass=0;
17516
#number timedout failed by Fricas 1.3.11
sqlite> select count(*) from main where fricas_pass=-1;
4498
#number exceptions failed by Fricas 1.3.11
sqlite> select count(*) from main where fricas_pass=-2;
2353
#number passed by Fricas 1.3.11
sqlite> select count(*) from main where fricas_pass=1;
82445
Regression:
This is list of problem numbers which generated Exception
in 1.3.11 not in 1.3.10 (these are -2 code).
============================================================
105424
105425
105431
105432
105508
105509
105725
105726
105803
105804
105976
105977
106138
106139
Here are the above integral commands to try
sqlite> select command_in_fricas from main where rowid=105424;
integrate((x^4-1)*(1+(1+x)^(1/2))^(1/2)/(x^4+1),x, algorithm="fricas")
sqlite> select command_in_fricas from main where rowid=105425;
integrate((x^4-1)*(1+(1+x)^(1/2))^(1/2)/(x^4+1),x, algorithm="fricas")
sqlite> select command_in_fricas from main where rowid=105431;
integrate((x^4-1)*(1+(1+x)^(1/2))^(1/2)/(1+x)^(1/2)/(x^4+1),x, algorithm="fricas")
sqlite> select command_in_fricas from main where rowid=105432;
integrate((x^4-1)*(1+(1+x)^(1/2))^(1/2)/(1+x)^(1/2)/(x^4+1),x, algorithm="fricas")
sqlite> select command_in_fricas from main where rowid=105508;
integrate((x^2-1)/(1+x)^(1/2)/(x^2+1)/(1+(1+x)^(1/2))^(1/2)/(1+(1+(1+x)^(1/2))^(1/2))^(1/2),x, algorithm="fricas")
sqlite> select command_in_fricas from main where rowid=105509;
integrate((x^2-1)/(1+x)^(1/2)/(x^2+1)/(1+(1+x)^(1/2))^(1/2)/(1+(1+(1+x)^(1/2))^(1/2))^(1/2),x, algorithm="fricas")
sqlite> select command_in_fricas from main where rowid=105725;
integrate((1+x)^(1/2)*(x^4-1)*(1+(1+x)^(1/2))^(1/2)/(x^4+1),x, algorithm="fricas")
sqlite> select command_in_fricas from main where rowid=105726;
integrate((1+x)^(1/2)*(x^4-1)*(1+(1+x)^(1/2))^(1/2)/(x^4+1),x, algorithm="fricas")
sqlite> select command_in_fricas from main where rowid=105803;
integrate((x^2-1)/(1+x)^(1/2)/(x^2+1)/(1+(1+(1+x)^(1/2))^(1/2))^(1/2),x, algorithm="fricas")
sqlite> select command_in_fricas from main where rowid=105804;
integrate((x^2-1)/(1+x)^(1/2)/(x^2+1)/(1+(1+(1+x)^(1/2))^(1/2))^(1/2),x, algorithm="fricas")
sqlite> select command_in_fricas from main where rowid=105976;
integrate((x^2-1)/(x^2+1)/(1+(1+x)^(1/2))^(1/2)/(1+(1+(1+x)^(1/2))^(1/2))^(1/2),x, algorithm="fricas")
sqlite> select command_in_fricas from main where rowid=105977;
integrate((x^2-1)/(x^2+1)/(1+(1+x)^(1/2))^(1/2)/(1+(1+(1+x)^(1/2))^(1/2))^(1/2),x, algorithm="fricas")
sqlite> select command_in_fricas from main where rowid=106138;
integrate((x^2-1)/(x^2+1)/(1+(1+(1+x)^(1/2))^(1/2))^(1/2),x, algorithm="fricas")
sqlite> select command_in_fricas from main where rowid=106139;
integrate((x^2-1)/(x^2+1)/(1+(1+(1+x)^(1/2))^(1/2))^(1/2),x, algorithm="fricas")
sqlite>
Now let me try few of the above and see what is going on
--------------------------------------------------------------------
This one works OK in Fricas 1.3.11 but gives exception in sagemath 10.3
integrate((x^4-1)*(1+(1+x)^(1/2))^(1/2)/(x^4+1),x, algorithm="fricas")
>sage
│ SageMath version 10.3, Release Date: 2024-03-19 │
│ Using Python 3.11.1. Type "help()" for help. │
sage: var('x a b c d')
(x, a, b, c, d)
sage: integrate((x^4-1)*(1+(1+x)^(1/2))^(1/2)/(x^4+1),x, algorithm="fricas")
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
Cell In[2], line 1
----> 1 integrate((x**Integer(4)-Integer(1))*(Integer(1)+(Integer(1)+x)**(Integer(1)/Integer(2)))**(Integer(1)/Integer(2))/(x**Integer(4)+Integer(1)),x, algorithm="fricas")
File ~/TMP/sage-10.3/src/sage/misc/functional.py:788, in integral(x, *args, **kwds)
655 """
656 Return an indefinite or definite integral of an object ``x``.
657
(...)
785
786 """
787 if hasattr(x, 'integral'):
--> 788 return x.integral(*args, **kwds)
789 else:
790 from sage.symbolic.ring import SR
File ~/TMP/sage-10.3/src/sage/symbolic/expression.pyx:13268, in sage.symbolic.expression.Expression.integral()
13266 R = SR
13267 return R(integral(f, v, a, b, **kwds))
> 13268 return integral(self, *args, **kwds)
13269
13270 integrate = integral
File ~/TMP/sage-10.3/src/sage/symbolic/integration/integral.py:1062, in integrate(expression, v, a, b, algorithm, hold)
1060 if not integrator:
1061 raise ValueError("Unknown algorithm: %s" % algorithm)
-> 1062 return integrator(expression, v, a, b)
1063 if a is None:
1064 return indefinite_integral(expression, v, hold=hold)
File ~/TMP/sage-10.3/src/sage/symbolic/integration/external.py:207, in fricas_integrator(expression, v, a, b, noPole)
204 else:
205 result = e_fricas.integrate(seg)
--> 207 result = result.sage()
209 if result == "failed":
210 result = expression.integrate(v, a, b, hold=True)
File ~/TMP/sage-10.3/src/sage/interfaces/interface.py:1123, in InterfaceElement.sage(self, *args, **kwds)
1104 def sage(self, *args, **kwds):
1105 """
1106 Attempt to return a Sage version of this object.
1107
(...)
1121 [0 0]
1122 """
-> 1123 return self._sage_(*args, **kwds)
File ~/TMP/sage-10.3/src/sage/interfaces/fricas.py:2067, in FriCASElement._sage_(self)
2062 return FriCASElement._sage_expression(P.get_InputForm(self._name))
2064 if head == "Expression" or head == "Pi":
2065 # we treat Expression Integer and Expression Complex
2066 # Integer just the same
-> 2067 return FriCASElement._sage_expression(P.get_InputForm(self._name))
2069 raise NotImplementedError("the translation of the FriCAS object %s to sage is not yet implemented" % (unparsed_InputForm()))
File ~/TMP/sage-10.3/src/sage/interfaces/fricas.py:817, in FriCAS.get_InputForm(self, var)
807 def get_InputForm(self, var):
808 """
809 Return the ``InputForm`` as a string.
810
(...)
815
816 """
--> 817 return self.get_string('sageprint((%s)::InputForm)' % str(var))
File ~/TMP/sage-10.3/src/sage/interfaces/fricas.py:755, in FriCAS.get_string(self, var)
710 """
711 Return the value of a FriCAS string as a string, without checking
712 that it is a string.
(...)
750
751 """
752 # strip removes leading and trailing whitespace, after that
753 # we can assume that the first and the last character are
754 # double quotes
--> 755 return self.get(str(var)).replace("\n", "").strip()[1:-1]
File ~/TMP/sage-10.3/src/sage/interfaces/fricas.py:707, in FriCAS.get(self, var)
704 else:
705 return "\n".join(line[FRICAS_MULTI_LINE_START:] for line in lines)
--> 707 self._check_errors(var, output)
File ~/TMP/sage-10.3/src/sage/interfaces/fricas.py:566, in FriCAS._check_errors(self, line, output)
564 for old, new in replacements:
565 output = output.replace(old, new)
--> 566 raise RuntimeError("An error occurred when FriCAS evaluated '%s':\n%s" % (line, output))
568 # or even an error
569 if FRICAS_ERROR_IN_LIBRARY_CODE in output:
RuntimeError: An error occurred when FriCAS evaluated 'sageprint((sage2)::InputForm)':
Compiling function sageprint with type InputForm -> String
Heap exhausted during allocation: 4128768 bytes available, 8305312 requested.
Immobile Object Counts
Gen layout fdefn symbol code Boxed Cons Raw Code SmMix Mixed LgRaw LgCode LgMix Waste% Alloc Trig Dirty GCs Mem-age
0 0 0 0 0 0 1065 40 0 0 1974 694 0 1573 4.8 166688416 56166286 - 1 0.0000
1 0 0 0 0 0 26 56 0 0 25 6061 0 0 0.9 200203744 32212254 6118 0 0.6334
2 0 0 0 0 0 22 61 0 0 26 29327 0 0 0.2 962463824 382674606 29389 1 0.3641
3 0 4468 0 4682 53 1475 140 1 14 53 54172 0 12 0.2 1829379008 2000000 54313 0 0.7255
4 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0 0 2000000 0 0 0.0000
5 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0 0 2000000 0 0 0.0000
6 780 25772 24483 26727 277 163 69 5 38 18 0 0 21 3.2 18752384 2000000 11 0 0.0000
Tot 780 30240 24483 31409 330 2751 366 6 52 2096 90254 0 1606 0.5 3177487376 [98.6% of 3221225472 max]
GC control variables:
*GC-INHIBIT* = false
*GC-PENDING* = false
*STOP-FOR-GC-PENDING* = false
Collection trigger variables:
dynamic_space_size = 3221225472
bytes_allocated = 3177487376
auto_gc_trigger = 3195814265
bytes_consed_between_gcs = 161061273
>> System error:
Heap exhausted (no more space for allocation).
4128768 bytes available, 8305312 requested.
PROCEED WITH CAUTION.
------------------------------------------------------
This one also works OK in Fricas 1.3.11 but gives exception in sagemath 10.3
same as above
integrate((x^2-1)/(x^2+1)/(1+(1+x)^(1/2))^(1/2)/(1+(1+(1+x)^(1/2))^(1/2))^(1/2),x, algorithm="fricas")
>sage
SageMath version 10.3, Release Date: 2024-03-19 │
Using Python 3.11.1. Type "help()" for help. │
sage: var('x a b c d')
(x, a, b, c, d)
sage: integrate((x^2-1)/(x^2+1)/(1+(1+x)^(1/2))^(1/2)/(1+(1+(1+x)^(1/2))^(1/2))^(1/2),x, algorithm="fricas")
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
Cell In[2], line 1
----> 1 integrate((x**Integer(2)-Integer(1))/(x**Integer(2)+Integer(1))/(Integer(1)+(Integer(1)+x)**(Integer(1)/Integer(2)))**(Integer(1)/Integer(2))/(Integer(1)+(Integer(1)+(Integer(1)+x)**(Integer(1)/Integer(2)))**(Integer(1)/Integer(2)))**(Integer(1)/Integer(2)),x, algorithm="fricas")
File ~/TMP/sage-10.3/src/sage/misc/functional.py:788, in integral(x, *args, **kwds)
655 """
656 Return an indefinite or definite integral of an object ``x``.
657
(...)
785
786 """
787 if hasattr(x, 'integral'):
--> 788 return x.integral(*args, **kwds)
789 else:
790 from sage.symbolic.ring import SR
File ~/TMP/sage-10.3/src/sage/symbolic/expression.pyx:13268, in sage.symbolic.expression.Expression.integral()
13266 R = SR
13267 return R(integral(f, v, a, b, **kwds))
> 13268 return integral(self, *args, **kwds)
13269
13270 integrate = integral
File ~/TMP/sage-10.3/src/sage/symbolic/integration/integral.py:1062, in integrate(expression, v, a, b, algorithm, hold)
1060 if not integrator:
1061 raise ValueError("Unknown algorithm: %s" % algorithm)
-> 1062 return integrator(expression, v, a, b)
1063 if a is None:
1064 return indefinite_integral(expression, v, hold=hold)
File ~/TMP/sage-10.3/src/sage/symbolic/integration/external.py:207, in fricas_integrator(expression, v, a, b, noPole)
204 else:
205 result = e_fricas.integrate(seg)
--> 207 result = result.sage()
209 if result == "failed":
210 result = expression.integrate(v, a, b, hold=True)
File ~/TMP/sage-10.3/src/sage/interfaces/interface.py:1123, in InterfaceElement.sage(self, *args, **kwds)
1104 def sage(self, *args, **kwds):
1105 """
1106 Attempt to return a Sage version of this object.
1107
(...)
1121 [0 0]
1122 """
-> 1123 return self._sage_(*args, **kwds)
File ~/TMP/sage-10.3/src/sage/interfaces/fricas.py:2067, in FriCASElement._sage_(self)
2062 return FriCASElement._sage_expression(P.get_InputForm(self._name))
2064 if head == "Expression" or head == "Pi":
2065 # we treat Expression Integer and Expression Complex
2066 # Integer just the same
-> 2067 return FriCASElement._sage_expression(P.get_InputForm(self._name))
2069 raise NotImplementedError("the translation of the FriCAS object %s to sage is not yet implemented" % (unparsed_InputForm()))
File ~/TMP/sage-10.3/src/sage/interfaces/fricas.py:817, in FriCAS.get_InputForm(self, var)
807 def get_InputForm(self, var):
808 """
809 Return the ``InputForm`` as a string.
810
(...)
815
816 """
--> 817 return self.get_string('sageprint((%s)::InputForm)' % str(var))
File ~/TMP/sage-10.3/src/sage/interfaces/fricas.py:755, in FriCAS.get_string(self, var)
710 """
711 Return the value of a FriCAS string as a string, without checking
712 that it is a string.
(...)
750
751 """
752 # strip removes leading and trailing whitespace, after that
753 # we can assume that the first and the last character are
754 # double quotes
--> 755 return self.get(str(var)).replace("\n", "").strip()[1:-1]
File ~/TMP/sage-10.3/src/sage/interfaces/fricas.py:707, in FriCAS.get(self, var)
704 else:
705 return "\n".join(line[FRICAS_MULTI_LINE_START:] for line in lines)
--> 707 self._check_errors(var, output)
File ~/TMP/sage-10.3/src/sage/interfaces/fricas.py:566, in FriCAS._check_errors(self, line, output)
564 for old, new in replacements:
565 output = output.replace(old, new)
--> 566 raise RuntimeError("An error occurred when FriCAS evaluated '%s':\n%s" % (line, output))
568 # or even an error
569 if FRICAS_ERROR_IN_LIBRARY_CODE in output:
RuntimeError: An error occurred when FriCAS evaluated 'sageprint((sage2)::InputForm)':
Compiling function sageprint with type InputForm -> String
Heap exhausted during allocation: 129597440 bytes available, 132910384 requested.
Immobile Object Counts
Gen layout fdefn symbol code Boxed Cons Raw Code SmMix Mixed LgRaw LgCode LgMix Waste% Alloc Trig Dirty GCs Mem-age
0 0 0 0 0 0 4 19 0 0 3 3693 0 8114 0.2 387137408 153529214 - 1 0.0000
1 0 0 0 0 0 8 37 0 0 9 1629 0 0 1.0 54596416 32212254 1667 0 0.0000
2 0 0 0 0 0 7 1 0 0 3 9637 0 0 0.1 315796080 348008334 9639 1 0.0000
3 0 4468 0 4682 53 1706 110 1 14 12 44293 0 12 0.1 1512494112 695462510 44404 1 0.4385
4 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0 0 2000000 0 0 0.0000
5 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0 0 2000000 0 0 0.0000
6 780 25772 24483 26727 277 163 69 5 38 18 0 0 21 3.2 18752384 2000000 11 0 0.0000
Tot 780 30240 24483 31409 330 1888 236 6 52 45 59252 0 8147 0.2 2288776400 [71.1% of 3221225472 max]
GC control variables:
*GC-INHIBIT* = false
*GC-PENDING* = true
*STOP-FOR-GC-PENDING* = false
Collection trigger variables:
dynamic_space_size = 3221225472
bytes_allocated = 2288776400
auto_gc_trigger = 2184017225
bytes_consed_between_gcs = 161061273
>> System error:
Heap exhausted (no more space for allocation).
129597440 bytes available, 132910384 requested.
PROCEED WITH CAUTION.
I have not tried all the rest. They all look like same problem.
To compare, this is database of 1.3.10 testing
================================================
#total number of integrals
sqlite> select count(*) from main;
106812
#total failed number of integrals
sqlite> select count(*) from main where fricas_pass=0 or fricas_pass=-1 or fricas_pass=-2;
24339
#total normal failed
sqlite> select count(*) from main where fricas_pass=0;
17523
#number failed due to timeout
sqlite> select count(*) from main where fricas_pass=-1;
4478
#number failed due to exception
sqlite> select count(*) from main where fricas_pass=-2;
2338
#number passed
sqlite> select count(*) from main where fricas_pass=1;
82473