void-packages/srcpkgs/sagemath/patches/35619-maxima_5.46.0.patch
Gonzalo Tornaría 2e2ae571d3 sagemath: patch and rebuild for maxima 5.47.0
Also:
 - patch for singular 4.3.2p2
 - patch for numpy 1.25.0
 - patch for setuptools 68.0.0
2023-06-26 12:04:24 -04:00

587 lines
23 KiB
Diff

diff --git a/build/pkgs/ecl/dependencies b/build/pkgs/ecl/dependencies
index cda6316bf5a..51a953403e9 100644
--- a/build/pkgs/ecl/dependencies
+++ b/build/pkgs/ecl/dependencies
@@ -1,4 +1,4 @@
-$(MP_LIBRARY) readline gc libffi
+$(MP_LIBRARY) readline gc libffi info
----------
All lines of this file are ignored except the first.
diff --git a/build/pkgs/ecl/spkg-configure.m4 b/build/pkgs/ecl/spkg-configure.m4
index ae1e0ac5e1a..7dbcfa6377b 100644
--- a/build/pkgs/ecl/spkg-configure.m4
+++ b/build/pkgs/ecl/spkg-configure.m4
@@ -35,10 +35,7 @@ SAGE_SPKG_CONFIGURE([ecl], [
AC_SUBST(SAGE_ECL_CONFIG, [$ECL_CONFIG])
fi
- # Maxima cannot yet be provided by the system, so we always use
+ # Kenzo cannot yet be provided by the system, so we always use
# the SAGE_LOCAL path for now.
- AC_SUBST(SAGE_MAXIMA_FAS, ['${prefix}'/lib/ecl/maxima.fas])
-
- # Likewise for the optional Kenzo SPKG
AC_SUBST(SAGE_KENZO_FAS, ['${prefix}'/lib/ecl/kenzo.fas])
])
diff --git a/build/pkgs/ecl/spkg-install.in b/build/pkgs/ecl/spkg-install.in
index ee1667aec16..72083337942 100644
--- a/build/pkgs/ecl/spkg-install.in
+++ b/build/pkgs/ecl/spkg-install.in
@@ -31,18 +31,6 @@ cp "$SAGE_ROOT"/config/config.* src
if [ x"$SAGE_SPKG_INSTALL_DOCS" != xyes ] ; then
ECL_CONFIGURE="$ECL_CONFIGURE --enable-manual=no"
-else
- # ECL 2020 needs modern makeinfo
- command -v texi2any >/dev/null 2>&1
- if [ $? -ne 0 ]; then # texi2any not found -> makeinfo too old, if present
- ECL_CONFIGURE="$ECL_CONFIGURE --enable-manual=no"
- else
- if makeinfo -c foo 2>&1 | grep -q invalid; then
- # makeinfo found but does not support all options that ecl
- # likes to use
- ECL_CONFIGURE="$ECL_CONFIGURE --enable-manual=no"
- fi
- fi
fi
sdh_configure $SAGE_CONFIGURE_GMP \
diff --git a/build/pkgs/giac/spkg-configure.m4 b/build/pkgs/giac/spkg-configure.m4
index 5859e35f12e..53e3a8301cd 100644
--- a/build/pkgs/giac/spkg-configure.m4
+++ b/build/pkgs/giac/spkg-configure.m4
@@ -5,7 +5,7 @@ SAGE_SPKG_CONFIGURE([giac], [
m4_pushdef([GIAC_MAX_VERSION], [1.9.999])
AC_CACHE_CHECK([for giac >= ]GIAC_MIN_VERSION[, <= ]GIAC_MAX_VERSION, [ac_cv_path_GIAC], [
AC_PATH_PROGS_FEATURE_CHECK([GIAC], [giac], [
- giac_version=$($ac_path_GIAC --version 2> /dev/null | tail -1)
+ giac_version=$($ac_path_GIAC --version 2> /dev/null | tail -n 1)
AS_IF([test -n "$giac_version"], [
AX_COMPARE_VERSION([$giac_version], [ge], GIAC_MIN_VERSION, [
AX_COMPARE_VERSION([$giac_version], [le], GIAC_MAX_VERSION, [
diff --git a/build/pkgs/info/distros/fedora.txt b/build/pkgs/info/distros/fedora.txt
index 283aa462f74..c0d8f74e0ad 100644
--- a/build/pkgs/info/distros/fedora.txt
+++ b/build/pkgs/info/distros/fedora.txt
@@ -1 +1 @@
-texinfo
+texinfo info
diff --git a/build/pkgs/info/spkg-configure.m4 b/build/pkgs/info/spkg-configure.m4
index 0980a4b8ef8..85fe1ea4731 100644
--- a/build/pkgs/info/spkg-configure.m4
+++ b/build/pkgs/info/spkg-configure.m4
@@ -1,4 +1,14 @@
SAGE_SPKG_CONFIGURE([info], [
AC_PATH_PROG(INFO, info)
- AS_IF([test -z "${INFO}"], [sage_spkg_install_info=yes])
+ AS_IF([test -z "${INFO}"], [sage_spkg_install_info=yes
+ ], [
+ dnl very old makeinfo are not texi2any, newer are symlinks to texi2any
+ AC_PATH_PROG(TEXI2ANY, texi2any)
+ AS_IF([test -z "${TEXI2ANY}"], [sage_spkg_install_info=yes
+ ], [
+ AS_IF([makeinfo -c foo 2>&1 | grep -q invalid], [
+ dnl makeinfo found, but too old, and does not support all options that ecl likes to use
+ sage_spkg_install_info=yes])
+ ])
+ ])
])
diff --git a/build/pkgs/info/spkg-install.in b/build/pkgs/info/spkg-install.in
index 8086e4b2ec8..3ea8c053669 100644
--- a/build/pkgs/info/spkg-install.in
+++ b/build/pkgs/info/spkg-install.in
@@ -1,2 +1,2 @@
-cd src/info
+cd src
sdh_make_install
diff --git a/build/pkgs/info/type b/build/pkgs/info/type
index 134d9bc32d5..a6a7b9cd726 100644
--- a/build/pkgs/info/type
+++ b/build/pkgs/info/type
@@ -1 +1 @@
-optional
+standard
diff --git a/build/pkgs/maxima/checksums.ini b/build/pkgs/maxima/checksums.ini
index a804c7b831f..0f594389fe6 100644
--- a/build/pkgs/maxima/checksums.ini
+++ b/build/pkgs/maxima/checksums.ini
@@ -1,5 +1,5 @@
tarball=maxima-VERSION.tar.gz
-sha1=ed15d5285794413ba94412079eca3d0fa55a47bf
-md5=9b9ae1dace55b1386739dabaa9122e60
-cksum=1765409766
+sha1=1010594e6d6082bbd8efaac1b7756ec1721a4ed5
+md5=3c01f1daa6936e11d8713fef7751d3fe
+cksum=2420393096
upstream_url=https://sourceforge.net/projects/maxima/files/Maxima-source/VERSION-source/maxima-VERSION.tar.gz/download
diff --git a/build/pkgs/maxima/dependencies b/build/pkgs/maxima/dependencies
index fffb89e2050..55c7e0d8d14 100644
--- a/build/pkgs/maxima/dependencies
+++ b/build/pkgs/maxima/dependencies
@@ -1,4 +1,4 @@
-ecl
+ecl info
----------
All lines of this file are ignored except the first.
diff --git a/build/pkgs/maxima/distros/arch.txt b/build/pkgs/maxima/distros/arch.txt
index 6400290f44d..6ac052fa62b 100644
--- a/build/pkgs/maxima/distros/arch.txt
+++ b/build/pkgs/maxima/distros/arch.txt
@@ -1 +1 @@
-maxima-ecl
+maxima-fas
diff --git a/build/pkgs/maxima/distros/cygwin.txt b/build/pkgs/maxima/distros/cygwin.txt
new file mode 100644
index 00000000000..f5fe3fdc6cb
--- /dev/null
+++ b/build/pkgs/maxima/distros/cygwin.txt
@@ -0,0 +1 @@
+maxima
diff --git a/build/pkgs/maxima/distros/freebsd.txt b/build/pkgs/maxima/distros/freebsd.txt
new file mode 100644
index 00000000000..766a71b5074
--- /dev/null
+++ b/build/pkgs/maxima/distros/freebsd.txt
@@ -0,0 +1 @@
+math/maxima
diff --git a/build/pkgs/maxima/distros/gentoo.txt b/build/pkgs/maxima/distros/gentoo.txt
new file mode 100644
index 00000000000..85fb33f1610
--- /dev/null
+++ b/build/pkgs/maxima/distros/gentoo.txt
@@ -0,0 +1,2 @@
+sci-mathematics/maxima[ecls]
+
diff --git a/build/pkgs/maxima/package-version.txt b/build/pkgs/maxima/package-version.txt
index 83476624dc0..5681375f3be 100644
--- a/build/pkgs/maxima/package-version.txt
+++ b/build/pkgs/maxima/package-version.txt
@@ -1 +1 @@
-5.45.0.p0
+5.46.0
diff --git a/build/pkgs/maxima/patches/matrixexp.patch b/build/pkgs/maxima/patches/matrixexp.patch
deleted file mode 100644
index 5c8527c33bf..00000000000
--- a/build/pkgs/maxima/patches/matrixexp.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-diff --git a/share/linearalgebra/matrixexp.lisp b/share/linearalgebra/matrixexp.lisp
-index 218bf35..f2fd468 100644
---- a/share/linearalgebra/matrixexp.lisp
-+++ b/share/linearalgebra/matrixexp.lisp
-@@ -138,8 +138,8 @@
- (print `(ratvars = ,$ratvars gcd = '$gcd algebraic = ,$algebraic))
- (print `(ratfac = ,$ratfac))
- (merror "Unable to find the spectrum")))
--
-- (setq res ($fullratsimp (ncpower (sub (mult z ($ident n)) mat) -1) z))
-+
-+ (setq res ($fullratsimp ($invert_by_lu (sub (mult z ($ident n)) mat) '$crering) z))
- (setq m (length sp))
- (dotimes (i m)
- (setq zi (nth i sp))
diff --git a/build/pkgs/maxima/patches/maxima.system.patch b/build/pkgs/maxima/patches/maxima.system.patch
deleted file mode 100644
index 74db62e7f9f..00000000000
--- a/build/pkgs/maxima/patches/maxima.system.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-diff --git a/src/maxima.system b/src/maxima.system
-index 76f2452..cf25f51 100644
---- a/src/maxima.system
-+++ b/src/maxima.system
-@@ -1,5 +1,8 @@
- ;;; -*- Lisp -*-
-
-+(require :cmp)
-+(setf c::*compile-in-constants* t)
-+
- (in-package :cl-user)
-
- (pushnew :cl *features*)
-@@ -75,6 +78,11 @@
- ;; Convert dir/foo.fas to dir/foo.o
- (make-pathname :type "o" :defaults p))
- files)))
-+ (c::build-fasl "binary-ecl/maxima" :lisp-files obj
-+ :ld-flags
-+ (let ((x (symbol-value (find-symbol "*AUTOCONF-LD-FLAGS*"
-+ (find-package "MAXIMA")))))
-+ (if (and x (not (string= x ""))) (list x))))
- (c::build-program "binary-ecl/maxima" :lisp-files obj
- :ld-flags
- (let ((x (symbol-value (find-symbol "*AUTOCONF-LD-FLAGS*"
diff --git a/build/pkgs/maxima/spkg-configure.m4 b/build/pkgs/maxima/spkg-configure.m4
new file mode 100644
index 00000000000..86de8c1dfc1
--- /dev/null
+++ b/build/pkgs/maxima/spkg-configure.m4
@@ -0,0 +1,46 @@
+SAGE_SPKG_CONFIGURE([maxima], [
+ m4_pushdef([SAGE_MAXIMA_MINVER],["5.45.0"])dnl this version and higher allowed
+ SAGE_SPKG_DEPCHECK([ecl], [
+ dnl First check for the "maxima" executable in the user's PATH, because
+ dnl we still use pexpect to communicate with it in a few places.
+ AC_CACHE_CHECK([for Maxima >= $SAGE_MAXIMA_MINVER], [ac_cv_path_MAXIMA], [
+ AC_PATH_PROGS_FEATURE_CHECK([MAXIMA], [maxima], [
+ maxima_version=`$ac_path_MAXIMA --version 2>&1 | tail -n 1\
+ | $SED -n -e 's/Maxima *\([[0-9]]*\.[[0-9]]*\.[[0-9]]*\)/\1/p'`
+ AS_IF([test -n "$maxima_version"], [
+ AX_COMPARE_VERSION([$maxima_version], [ge], [SAGE_MAXIMA_MINVER], [
+ ac_cv_path_MAXIMA="$ac_path_MAXIMA"
+ ac_path_MAXIMA_found=:
+ ])
+ ])
+ ])
+ ])
+ SAGE_MAXIMA="$ac_cv_path_MAXIMA"
+ AS_IF([test -z "${SAGE_MAXIMA}"], [
+ sage_spkg_install_maxima=yes
+ ],[
+ dnl If we have the executable, check also for the ECL library.
+ AC_MSG_CHECKING([if ECL can "require" the maxima module])
+ AS_IF([ecl --eval "(require 'maxima)" --eval "(quit)" \
+ >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD], [
+ AC_MSG_RESULT(yes)
+ ], [
+ AC_MSG_RESULT(no)
+ sage_spkg_install_maxima=yes
+ ])
+ ])
+ ])
+ m4_popdef([SAGE_MAXIMA_MINVER])
+],[],[],[
+ # post-check
+ AS_IF([test x$sage_spkg_install_maxima = xyes], [
+ dnl Leaving this variable empty will tell sagelib to load
+ dnl the maxima library (within ECL) by name instead of by
+ dnl absolute path.
+ SAGE_MAXIMA='${prefix}'/bin/maxima
+ SAGE_MAXIMA_FAS='${prefix}'/lib/ecl/maxima.fas
+ ])
+
+ AC_SUBST(SAGE_MAXIMA, "${SAGE_MAXIMA}")
+ AC_SUBST(SAGE_MAXIMA_FAS, "${SAGE_MAXIMA_FAS}")
+])
diff --git a/build/pkgs/maxima/spkg-install.in b/build/pkgs/maxima/spkg-install.in
index 3ae6382f9ba..cdb6fbf2069 100644
--- a/build/pkgs/maxima/spkg-install.in
+++ b/build/pkgs/maxima/spkg-install.in
@@ -28,28 +28,6 @@ echo
echo "Now configuring Maxima..."
sdh_configure --enable-ecl git_found=false
-# Note the following is regression in maxima build system
-# see https://sourceforge.net/p/maxima/bugs/3278/
-# and https://sourceforge.net/p/maxima/bugs/2878/
-# For the previous time it was fixed.
-#---------------------------------------------------------------
-# Touching html and info file to avoid to regenerate them.
-# This must be done after configuration since the timestamp need
-# to be later than include-maxima.texi which is generated at
-# configuration time
-for i in doc/info/*.html ; do
- touch "${i}"
-done
-touch doc/info/maxima.info*
-# Maxima 5.44.0 build_html.sh is not compatible with makeinfo 4.8
-# (which is /usr/bin/makeinfo on macOS). #30063
-# Do not build the HTML docs unless the user asks for it,
-# in which case it is their problem to install a better
-# makeinfo version.
-if [[ "$SAGE_SPKG_INSTALL_DOCS" != yes ]] ; then
-touch doc/info/maxima_toc.html interfaces/xmaxima/doc/xmaxima.html
-fi
-
#---------------------------------------------------------------
sdh_make
diff --git a/build/pkgs/tox/spkg-configure.m4 b/build/pkgs/tox/spkg-configure.m4
index 7d8ade4c14b..5a260439cdd 100644
--- a/build/pkgs/tox/spkg-configure.m4
+++ b/build/pkgs/tox/spkg-configure.m4
@@ -5,7 +5,7 @@ SAGE_SPKG_CONFIGURE([tox], [
m4_pushdef([TOX4_MIN_VERSION], [4.0.15])
AC_CACHE_CHECK([for tox 3 >= ]TOX3_MIN_VERSION[ or tox 4 >= ]TOX4_MIN_VERSION, [ac_cv_path_TOX], [
AC_PATH_PROGS_FEATURE_CHECK([TOX], [tox], [
- tox_version=$($ac_path_TOX --version 2> /dev/null | tail -1)
+ tox_version=$($ac_path_TOX --version 2> /dev/null | tail -n 1)
AS_IF([test -n "$tox_version"], [
AX_COMPARE_VERSION([$tox_version], [lt], [4], [
AX_COMPARE_VERSION([$tox_version], [ge], TOX3_MIN_VERSION, [
diff --git a/pkgs/sage-conf/_sage_conf/_conf.py.in b/pkgs/sage-conf/_sage_conf/_conf.py.in
index d66bdb3d264..f2e197b45ed 100644
--- a/pkgs/sage-conf/_sage_conf/_conf.py.in
+++ b/pkgs/sage-conf/_sage_conf/_conf.py.in
@@ -9,9 +9,11 @@ VERSION = "@PACKAGE_VERSION@"
SAGE_LOCAL = "@prefix@"
SAGE_ROOT = "@SAGE_ROOT@"
-MAXIMA = "@prefix@/bin/maxima"
+# The path to the standalone maxima executable.
+MAXIMA = "@SAGE_MAXIMA@".replace('${prefix}', SAGE_LOCAL)
-# Delete this line if your ECL can load maxima without further prodding.
+# Set this to the empty string if your ECL can load maxima without
+# further prodding.
MAXIMA_FAS = "@SAGE_MAXIMA_FAS@".replace('${prefix}', SAGE_LOCAL)
# Delete this line if your ECL can load Kenzo without further prodding.
diff --git a/src/bin/sage-env b/src/bin/sage-env
index a7da60df28f..13b54fa7e92 100644
--- a/src/bin/sage-env
+++ b/src/bin/sage-env
@@ -440,9 +440,6 @@ if [ -d "$DOT_SAGE" ] ; then
fi
fi
-if [ -n "$SAGE_LOCAL" ]; then
- export MAXIMA_PREFIX="$SAGE_LOCAL"
-fi
export MAXIMA_USERDIR="$DOT_SAGE/maxima"
if [ -n "$SAGE_LOCAL" ]; then
diff --git a/src/sage/calculus/calculus.py b/src/sage/calculus/calculus.py
index dae380180ac..ee8f632e94c 100644
--- a/src/sage/calculus/calculus.py
+++ b/src/sage/calculus/calculus.py
@@ -136,10 +136,11 @@
[ 1/2*(e^(2*sqrt(x)) + 1)*e^(x - sqrt(x)) 1/2*(x*e^(2*sqrt(x)) - x)*sqrt(x)*e^(x - sqrt(x))]
[ 1/2*(e^(2*sqrt(x)) - 1)*e^(x - sqrt(x))/x^(3/2) 1/2*(e^(2*sqrt(x)) + 1)*e^(x - sqrt(x))]
-And complex exponentiation works now::
+Complex exponentiation works, but may require a patched version of
+maxima (:trac:`32898`) for now::
sage: M = i*matrix([[pi]])
- sage: e^M
+ sage: e^M # not tested, requires patched maxima
[-1]
sage: M = i*matrix([[pi,0],[0,2*pi]])
sage: e^M
@@ -1186,8 +1187,18 @@ def limit(ex, dir=None, taylor=False, algorithm='maxima', **argv):
e
sage: f.limit(x=5)
7776/3125
- sage: f.limit(x=1.2)
+
+ Domain to real, a regression in 5.46.0, see https://sf.net/p/maxima/bugs/4138 ::
+
+ sage: maxima_calculus.eval("domain:real")
+ ...
+ sage: f.limit(x=1.2).n()
2.06961575467...
+ sage: maxima_calculus.eval("domain:complex");
+ ...
+
+ Otherwise, it works ::
+
sage: f.limit(x=I, taylor=True)
(-I + 1)^I
sage: f(x=1.2)
@@ -1215,7 +1226,7 @@ def limit(ex, dir=None, taylor=False, algorithm='maxima', **argv):
With this example, Maxima is looking for a LOT of information::
sage: assume(a>0)
- sage: limit(x^a,x=0)
+ sage: limit(x^a,x=0) # random - maxima 5.46.0 does not need extra assumption
Traceback (most recent call last):
...
ValueError: Computation failed since Maxima requested additional
@@ -1224,7 +1235,7 @@ def limit(ex, dir=None, taylor=False, algorithm='maxima', **argv):
more details)
Is a an integer?
sage: assume(a,'integer')
- sage: limit(x^a, x=0)
+ sage: limit(x^a, x=0) # random - maxima 5.46.0 does not need extra assumption
Traceback (most recent call last):
...
ValueError: Computation failed since Maxima requested additional
@@ -2251,10 +2262,10 @@ def symbolic_expression_from_maxima_string(x, equals_sub=False, maxima=maxima):
True
sage: sefms("x # 3") == SR(x != 3)
True
- sage: solve([x != 5], x)
- [[x - 5 != 0]]
+ sage: solve([x != 5], x) in [[[x - 5 != 0]], [[x < 5], [5 < x]]]
+ True
sage: solve([2*x==3, x != 5], x)
- [[x == (3/2), (-7/2) != 0]]
+ [[x == (3/2)...
Make sure that we don't accidentally pick up variables in the maxima namespace (:trac:`8734`)::
diff --git a/src/sage/functions/exp_integral.py b/src/sage/functions/exp_integral.py
index e6c888c64b6..f314e525145 100644
--- a/src/sage/functions/exp_integral.py
+++ b/src/sage/functions/exp_integral.py
@@ -601,8 +601,8 @@ class Function_log_integral_offset(BuiltinFunction):
1/log(x)
sage: f.integrate(x)
-x*log_integral(2) + x*log_integral(x) - Ei(2*log(x))
- sage: Li(x).integrate(x,2.0,4.5)
- -2.5*log_integral(2) + 5.799321147411334
+ sage: Li(x).integrate(x,2.0,4.5).n(digits=10)
+ 3.186411697
sage: N(f.integrate(x,2.0,3.0)) # abs tol 1e-15
0.601621785860587
diff --git a/src/sage/interfaces/expect.py b/src/sage/interfaces/expect.py
index 68ae715e4c3..84adf0341b5 100644
--- a/src/sage/interfaces/expect.py
+++ b/src/sage/interfaces/expect.py
@@ -620,7 +620,7 @@ def quit(self, verbose=False):
sage: a = maxima('y')
sage: maxima.quit(verbose=True)
- Exiting Maxima with PID ... running .../bin/maxima...
+ Exiting Maxima with PID ... running ...maxima...
sage: a._check_valid()
Traceback (most recent call last):
...
diff --git a/src/sage/interfaces/maxima.py b/src/sage/interfaces/maxima.py
index 27b1e98a6ac..4829560f98b 100644
--- a/src/sage/interfaces/maxima.py
+++ b/src/sage/interfaces/maxima.py
@@ -622,11 +622,6 @@ def _start(self):
sage: m.is_running()
True
- Test that we can use more than 256MB RAM (see :trac:`6772`)::
-
- sage: a = maxima(10)^(10^5)
- sage: b = a^600 # long time -- about 10-15 seconds
-
"""
Expect._start(self)
self._sendline(r":lisp (defun tex-derivative (x l r) (tex (if $derivabbrev (tex-dabbrev x) (tex-d x '\\partial)) l r lop rop ))")
@@ -634,9 +629,6 @@ def _start(self):
# Don't use ! for factorials (#11539)
self._sendline(":lisp (remprop 'mfactorial 'grind)")
- # Remove limit on the max heapsize (since otherwise it defaults
- # to 256MB with ECL).
- self._sendline(":lisp (ext:set-limit 'ext:heap-size 0)")
self._eval_line('0;')
# set random seed
diff --git a/src/sage/interfaces/maxima_lib.py b/src/sage/interfaces/maxima_lib.py
index c263ac65f02..bba8504aa92 100644
--- a/src/sage/interfaces/maxima_lib.py
+++ b/src/sage/interfaces/maxima_lib.py
@@ -934,8 +934,15 @@ def sr_limit(self, expr, v, a, dir=None):
e
sage: limit(f,x = 5)
7776/3125
- sage: limit(f,x = 1.2)
+
+ Domain to real, a regression in 5.46.0, see https://sf.net/p/maxima/bugs/4138 ::
+
+ sage: maxima_calculus.eval("domain:real")
+ ...
+ sage: limit(f,x = 1.2).n()
2.06961575467...
+ sage: maxima_calculus.eval("domain:complex");
+ ...
sage: var('a')
a
sage: limit(x^a,x=0)
@@ -947,7 +954,7 @@ def sr_limit(self, expr, v, a, dir=None):
for more details)
Is a positive, negative or zero?
sage: assume(a>0)
- sage: limit(x^a,x=0)
+ sage: limit(x^a,x=0) # random - not needed for maxima 5.46.0
Traceback (most recent call last):
...
ValueError: Computation failed ...
diff --git a/src/sage/matrix/matrix2.pyx b/src/sage/matrix/matrix2.pyx
index e2e6449dfa9..15914b0be3e 100644
--- a/src/sage/matrix/matrix2.pyx
+++ b/src/sage/matrix/matrix2.pyx
@@ -15425,9 +15425,10 @@ cdef class Matrix(Matrix1):
TESTS:
- Check that sparse matrices are handled correctly (:trac:`28935`)::
+ Sparse matrices are handled correctly (:trac:`28935`), but may
+ require a patched version of maxima (:trac:`32898`) for now::
- sage: matrix.diagonal([0], sparse=True).exp()
+ sage: matrix.diagonal([0], sparse=True).exp() # not tested, requires patched maxima
[1]
sage: matrix.zero(CBF, 2, sparse=True).exp()
[1.000000000000000 0]
diff --git a/src/sage/matrix/matrix_symbolic_dense.pyx b/src/sage/matrix/matrix_symbolic_dense.pyx
index 19ca5c85cb2..58a25e002f6 100644
--- a/src/sage/matrix/matrix_symbolic_dense.pyx
+++ b/src/sage/matrix/matrix_symbolic_dense.pyx
@@ -402,7 +402,8 @@ cdef class Matrix_symbolic_dense(Matrix_generic_dense):
[1/2*(e^(2*x) + 1)*e^(-x) 1/2*(e^(2*x) - 1)*e^(-x)]
[1/2*(e^(2*x) - 1)*e^(-x) 1/2*(e^(2*x) + 1)*e^(-x)]
- Exp works on 0x0 and 1x1 matrices::
+ Exponentiation works on 0x0 and 1x1 matrices, but the 1x1 example
+ requires a patched version of maxima (:trac:`32898`) for now::
sage: m = matrix(SR,0,[]); m
[]
@@ -410,7 +411,7 @@ cdef class Matrix_symbolic_dense(Matrix_generic_dense):
[]
sage: m = matrix(SR,1,[2]); m
[2]
- sage: m.exp()
+ sage: m.exp() # not tested, requires patched maxima
[e^2]
Commuting matrices `m, n` have the property that
@@ -451,7 +452,6 @@ cdef class Matrix_symbolic_dense(Matrix_generic_dense):
[ 0 1/2*(e^(2*x) + 1)*e^(-x) 1/2*(e^(2*x) - 1)*e^(-x) 0]
[ 0 1/2*(e^(2*x) - 1)*e^(-x) 1/2*(e^(2*x) + 1)*e^(-x) 0]
[1/2*(e^(2*x) - 1)*e^(-x) 0 0 1/2*(e^(2*x) + 1)*e^(-x)]
-
"""
if not self.is_square():
raise ValueError("exp only defined on square matrices")
diff --git a/src/sage/symbolic/integration/integral.py b/src/sage/symbolic/integration/integral.py
index c82e9ed73c3..e84ad357ee2 100644
--- a/src/sage/symbolic/integration/integral.py
+++ b/src/sage/symbolic/integration/integral.py
@@ -741,14 +741,14 @@ def integrate(expression, v=None, a=None, b=None, algorithm=None, hold=False):
sage: _ = var('x,y')
sage: f = log(x^2+y^2)
- sage: res = integral(f,x,0.0001414, 1.); res
+ sage: res = integral(f,x,1414/10^7, 1); res
Traceback (most recent call last):
...
- ValueError: Computation failed since Maxima requested additional constraints; using the 'assume' command before evaluation *may* help (example of legal syntax is 'assume(50015104*y^2-50015103>0)', see `assume?` for more details)
- Is 50015104*y^2-50015103 positive, negative or zero?
+ ValueError: Computation failed since Maxima requested additional constraints; using the 'assume' command before evaluation *may* help ...
+ Is ... positive, negative or zero?
sage: assume(y>1)
- sage: res = integral(f,x,0.0001414, 1.); res
- 2*y*arctan(1.0/y) - 2*y*arctan(0.0001414/y) + 1.0*log(1.0*y^2 + 1.0) - 0.0001414*log(1.0*y^2 + 1.9993959999999997e-08) - 1.9997172
+ sage: res = integral(f,x,1414/10^7, 1); res
+ -2*y*arctan(707/5000000/y) + 2*y*arctan(1/y) + log(y^2 + 1) - 707/5000000*log(y^2 + 499849/25000000000000) - 4999293/2500000
sage: nres = numerical_integral(f.subs(y=2), 0.0001414, 1.); nres
(1.4638323264144..., 1.6251803529759...e-14)
sage: res.subs(y=2).n()
diff --git a/src/sage/symbolic/relation.py b/src/sage/symbolic/relation.py
index 94813315181..a72ab547c76 100644
--- a/src/sage/symbolic/relation.py
+++ b/src/sage/symbolic/relation.py
@@ -1787,8 +1787,8 @@ def solve_ineq_fourier(ineq, vars=None):
sage: y = var('y')
sage: solve_ineq_fourier([x+y<9,x-y>4],[x,y])
[[y + 4 < x, x < -y + 9, y < (5/2)]]
- sage: solve_ineq_fourier([x+y<9,x-y>4],[y,x])
- [[y < min(x - 4, -x + 9)]]
+ sage: solve_ineq_fourier([x+y<9,x-y>4],[y,x])[0][0](x=42)
+ y < -33
sage: solve_ineq_fourier([x^2>=0])
[[x < +Infinity]]