You can subscribe to this list here.
| 2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(20) |
Dec
(17) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2002 |
Jan
(39) |
Feb
(21) |
Mar
(33) |
Apr
(135) |
May
(53) |
Jun
(88) |
Jul
(47) |
Aug
(59) |
Sep
(207) |
Oct
(40) |
Nov
(7) |
Dec
(26) |
| 2003 |
Jan
(49) |
Feb
(39) |
Mar
(117) |
Apr
(50) |
May
(62) |
Jun
(6) |
Jul
(19) |
Aug
(24) |
Sep
(11) |
Oct
(11) |
Nov
(49) |
Dec
(9) |
| 2004 |
Jan
(29) |
Feb
(123) |
Mar
(32) |
Apr
(53) |
May
(52) |
Jun
(19) |
Jul
(33) |
Aug
(10) |
Sep
(76) |
Oct
(86) |
Nov
(171) |
Dec
(163) |
| 2005 |
Jan
(147) |
Feb
(121) |
Mar
(120) |
Apr
(126) |
May
(120) |
Jun
(213) |
Jul
(76) |
Aug
(79) |
Sep
(140) |
Oct
(83) |
Nov
(156) |
Dec
(202) |
| 2006 |
Jan
(181) |
Feb
(171) |
Mar
(157) |
Apr
(98) |
May
(96) |
Jun
(97) |
Jul
(193) |
Aug
(76) |
Sep
(130) |
Oct
(63) |
Nov
(196) |
Dec
(253) |
| 2007 |
Jan
(256) |
Feb
(293) |
Mar
(276) |
Apr
(258) |
May
(181) |
Jun
(91) |
Jul
(108) |
Aug
(69) |
Sep
(107) |
Oct
(179) |
Nov
(137) |
Dec
(121) |
| 2008 |
Jan
(124) |
Feb
(129) |
Mar
(192) |
Apr
(201) |
May
(90) |
Jun
(86) |
Jul
(115) |
Aug
(142) |
Sep
(49) |
Oct
(91) |
Nov
(95) |
Dec
(218) |
| 2009 |
Jan
(230) |
Feb
(149) |
Mar
(118) |
Apr
(72) |
May
(77) |
Jun
(68) |
Jul
(102) |
Aug
(72) |
Sep
(89) |
Oct
(76) |
Nov
(125) |
Dec
(86) |
| 2010 |
Jan
(75) |
Feb
(90) |
Mar
(89) |
Apr
(121) |
May
(111) |
Jun
(66) |
Jul
(75) |
Aug
(66) |
Sep
(66) |
Oct
(166) |
Nov
(121) |
Dec
(73) |
| 2011 |
Jan
(74) |
Feb
|
Mar
|
Apr
(14) |
May
(22) |
Jun
(31) |
Jul
(53) |
Aug
(37) |
Sep
(23) |
Oct
(25) |
Nov
(31) |
Dec
(28) |
| 2012 |
Jan
(18) |
Feb
(11) |
Mar
(32) |
Apr
(17) |
May
(48) |
Jun
(37) |
Jul
(23) |
Aug
(54) |
Sep
(15) |
Oct
(11) |
Nov
(19) |
Dec
(22) |
| 2013 |
Jan
(11) |
Feb
(32) |
Mar
(24) |
Apr
(37) |
May
(31) |
Jun
(14) |
Jul
(26) |
Aug
(33) |
Sep
(40) |
Oct
(21) |
Nov
(36) |
Dec
(84) |
| 2014 |
Jan
(23) |
Feb
(20) |
Mar
(27) |
Apr
(24) |
May
(31) |
Jun
(27) |
Jul
(34) |
Aug
(26) |
Sep
(21) |
Oct
(45) |
Nov
(23) |
Dec
(73) |
| 2015 |
Jan
(33) |
Feb
(8) |
Mar
(24) |
Apr
(45) |
May
(27) |
Jun
(19) |
Jul
(21) |
Aug
(51) |
Sep
(43) |
Oct
(29) |
Nov
(61) |
Dec
(86) |
| 2016 |
Jan
(99) |
Feb
(52) |
Mar
(80) |
Apr
(61) |
May
(24) |
Jun
(23) |
Jul
(36) |
Aug
(30) |
Sep
(41) |
Oct
(43) |
Nov
(27) |
Dec
(46) |
| 2017 |
Jan
(57) |
Feb
(34) |
Mar
(40) |
Apr
(31) |
May
(78) |
Jun
(49) |
Jul
(72) |
Aug
(33) |
Sep
(26) |
Oct
(82) |
Nov
(69) |
Dec
(29) |
| 2018 |
Jan
(43) |
Feb
(9) |
Mar
|
Apr
(40) |
May
(34) |
Jun
(49) |
Jul
(45) |
Aug
(8) |
Sep
(51) |
Oct
(75) |
Nov
(103) |
Dec
(80) |
| 2019 |
Jan
(153) |
Feb
(78) |
Mar
(47) |
Apr
(48) |
May
(63) |
Jun
(54) |
Jul
(10) |
Aug
(7) |
Sep
(17) |
Oct
(24) |
Nov
(29) |
Dec
(17) |
| 2020 |
Jan
(22) |
Feb
(74) |
Mar
(47) |
Apr
(48) |
May
(12) |
Jun
(44) |
Jul
(13) |
Aug
(18) |
Sep
(26) |
Oct
(36) |
Nov
(25) |
Dec
(23) |
| 2021 |
Jan
(28) |
Feb
(25) |
Mar
(58) |
Apr
(76) |
May
(72) |
Jun
(70) |
Jul
(25) |
Aug
(67) |
Sep
(17) |
Oct
(24) |
Nov
(30) |
Dec
(30) |
| 2022 |
Jan
(51) |
Feb
(39) |
Mar
(72) |
Apr
(65) |
May
(30) |
Jun
(72) |
Jul
(129) |
Aug
(44) |
Sep
(45) |
Oct
(30) |
Nov
(48) |
Dec
(275) |
| 2023 |
Jan
(235) |
Feb
(232) |
Mar
(68) |
Apr
(16) |
May
(52) |
Jun
(87) |
Jul
(143) |
Aug
(32) |
Sep
(26) |
Oct
(15) |
Nov
(20) |
Dec
(74) |
| 2024 |
Jan
(119) |
Feb
(32) |
Mar
(64) |
Apr
(68) |
May
(30) |
Jun
(50) |
Jul
(37) |
Aug
(32) |
Sep
(10) |
Oct
(27) |
Nov
(47) |
Dec
(36) |
| 2025 |
Jan
(94) |
Feb
(68) |
Mar
(79) |
Apr
(66) |
May
(46) |
Jun
(21) |
Jul
(134) |
Aug
(134) |
Sep
(53) |
Oct
(24) |
Nov
(69) |
Dec
(68) |
| 2026 |
Jan
(48) |
Feb
(49) |
Mar
(56) |
Apr
(155) |
May
(4) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: kjak <kj...@us...> - 2026-05-02 21:18:45
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, master has been updated
via e4af414f7894f7cef000551bae51ef84b80e592d (commit)
from 5c6a1042934d43dd9b9e4aba8589592524e8c0e6 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit e4af414f7894f7cef000551bae51ef84b80e592d
Author: Kris Katterjohn <kat...@gm...>
Date: Sat May 2 17:16:14 2026 -0400
Fix bug #4724: xreduce with init arg and declared nary function
xreduce has not been passing a given init arg to functions declare'd
nary:
(%i1) declare (fnary, nary)$
(%i2) xreduce (fnary, [], 0); /* wrong: should be fnary(0) */
(%o2) fnary()
(%i3) xreduce (fnary, [1, 2], 0); /* wrong: should be fnary(0,1,2) */
(%o3) fnary(1,2)
No problems with the test suite, share test suite or rtest_translator.
Many new tests have been added to rtestnset.mac.
diff --git a/ChangeLog b/ChangeLog
index 884e44daf..f398fc10f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,7 @@ Bug fixes for numbered bugs:
----------------------------
* \#4585 Taylor polynomials involving tangent & a quotient
* \#4634 Divergent integral simplifies to -1/4 with simplify_sum
+ # \#4724 xreduce with init arg and declared nary function
* \#4729 rtest_limit.mac: Problem 230 (line 866)
Bug fixes for unnumbered bugs:
diff --git a/src/nset.lisp b/src/nset.lisp
index 3ad507557..efa0f6aa6 100644
--- a/src/nset.lisp
+++ b/src/nset.lisp
@@ -1173,8 +1173,10 @@
(funcall opfn s)))
(op-props
- ($apply f ($listify s)))
-
+ (setq s (require-list-or-set s '$xreduce))
+ (unless (eq init 'no-init)
+ (setq s (cons init s)))
+ ($apply f (cons '(mlist) s)))
(t
(rl-reduce f ($listify s) nil init '$xreduce)))))
diff --git a/tests/rtestnset.mac b/tests/rtestnset.mac
index 72c63730d..777e91f3c 100644
--- a/tests/rtestnset.mac
+++ b/tests/rtestnset.mac
@@ -2004,3 +2004,174 @@ true;
is (S1 = apply(op(S1), args(S1)));
true;
+/* Tests related to bug #4724: xreduce with init arg and declared nary function */
+
+/* In the tests below:
+ *
+ * * foo is not nary
+ * * fnary is declare'd nary
+ * * "and" is nary and handled specially by xreduce
+ */
+
+(kill (foo, fnary),
+ declare (fnary, nary),
+ 0)$
+0$
+
+/* Empty list and no init arg */
+
+errcatch (lreduce (foo, []))$
+[]$
+
+errcatch (lreduce (fnary, []))$
+[]$
+
+errcatch (lreduce ("and", []))$
+[]$
+
+errcatch (rreduce (foo, []))$
+[]$
+
+errcatch (rreduce (fnary, []))$
+[]$
+
+errcatch (rreduce ("and", []))$
+[]$
+
+errcatch (xreduce (foo, []))$
+[]$
+
+xreduce (fnary, [])$
+fnary ()$
+
+xreduce ("and", [])$
+true$
+
+errcatch (tree_reduce (foo, []))$
+[]$
+
+errcatch (tree_reduce (fnary, []))$
+[]$
+
+errcatch (tree_reduce ("and", []))$
+[]$
+
+/* Empty list and init arg */
+
+lreduce (foo, [], 13)$
+13$
+
+lreduce (fnary, [], 13)$
+13$
+
+lreduce ("and", [], 13)$
+13$
+
+rreduce (foo, [], 13)$
+13$
+
+rreduce (fnary, [], 13)$
+13$
+
+rreduce ("and", [], 13)$
+13$
+
+xreduce (foo, [], 13)$
+13$
+
+xreduce (fnary, [], 13)$
+fnary (13)$
+
+xreduce ("and", [], 13)$
+13$
+
+tree_reduce (foo, [], 13)$
+13$
+
+tree_reduce (fnary, [], 13)$
+13$
+
+tree_reduce ("and", [], 13)$
+13$
+
+/* Nonempty list and no init arg */
+
+lreduce (foo, [1, 2, 3, 4])$
+foo (foo (foo (1, 2), 3), 4)$
+
+lreduce (fnary, [1, 2, 3, 4])$
+fnary (1, 2, 3, 4)$
+
+lreduce ("and", [1, 2, 3, 4])$
+1 and 2 and 3 and 4$
+
+rreduce (foo, [1, 2, 3, 4])$
+foo (1, foo (2, foo (3, 4)))$
+
+rreduce (fnary, [1, 2, 3, 4])$
+fnary (1, 2, 3, 4)$
+
+rreduce ("and", [1, 2, 3, 4])$
+1 and 2 and 3 and 4$
+
+xreduce (foo, [1, 2, 3, 4])$
+foo (foo (foo (1, 2), 3), 4)$
+
+xreduce (fnary, [1, 2, 3, 4])$
+fnary (1, 2, 3, 4)$
+
+xreduce ("and", [1, 2, 3, 4])$
+1 and 2 and 3 and 4$
+
+tree_reduce (foo, [1, 2, 3, 4])$
+foo(foo (1, 2), foo (3, 4))$
+
+tree_reduce (fnary, [1, 2, 3, 4])$
+fnary (1, 2, 3, 4)$
+
+tree_reduce ("and", [1, 2, 3, 4])$
+1 and 2 and 3 and 4$
+
+/* Nonempty list and init arg */
+
+lreduce (foo, [1, 2, 3, 4], 13)$
+foo (foo (foo (foo (13, 1), 2), 3), 4)$
+
+lreduce (fnary, [1, 2, 3, 4], 13)$
+fnary (13, 1, 2, 3, 4)$
+
+lreduce ("and", [1, 2, 3, 4], 13)$
+13 and 1 and 2 and 3 and 4$
+
+rreduce (foo, [1, 2, 3, 4], 13)$
+foo (1, foo (2, foo (3, foo (4, 13))))$
+
+rreduce (fnary, [1, 2, 3, 4], 13)$
+fnary (1, 2, 3, 4, 13)$
+
+rreduce ("and", [1, 2, 3, 4], 13)$
+1 and 2 and 3 and 4 and 13$
+
+xreduce (foo, [1, 2, 3, 4], 13)$
+foo (foo (foo (foo (13, 1), 2), 3), 4)$
+
+xreduce (fnary, [1, 2, 3, 4], 13)$
+fnary (13, 1, 2, 3, 4)$
+
+xreduce ("and", [1, 2, 3, 4], 13)$
+13 and 1 and 2 and 3 and 4$
+
+tree_reduce (foo, [1, 2, 3, 4], 13)$
+foo(foo (foo (13, 1), foo (2, 3)), 4)$
+
+tree_reduce (fnary, [1, 2, 3, 4], 13)$
+fnary (13, 1, 2, 3, 4)$
+
+tree_reduce ("and", [1, 2, 3, 4], 13)$
+13 and 1 and 2 and 3 and 4$
+
+(kill (fnary), 0)$
+0$
+
+/* End of tests related to bug #4724 */
+
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 1 +
src/nset.lisp | 6 +-
tests/rtestnset.mac | 171 ++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 176 insertions(+), 2 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: kjak <kj...@us...> - 2026-05-02 17:51:09
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, master has been updated
via 5c6a1042934d43dd9b9e4aba8589592524e8c0e6 (commit)
from 2d2cce0907a9bb2e537e71c99cc6e5f870e5ebf7 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 5c6a1042934d43dd9b9e4aba8589592524e8c0e6
Author: Kris Katterjohn <kat...@gm...>
Date: Sat May 2 13:48:59 2026 -0400
Fix lisp errors occurring during some Maxima WNA errors
(WNA-ERR SYMBOL) has been broken so it's been easy to get lisp errors
instead of Maxima WNA errors:
(%i1) diff ();
<lisp error>
(%i2) part ();
<lisp error>
(%i3) subvar ();
<lisp error>
(%i4) qput ();
<lisp error>
Etc.
See also commit 0f2c90f7.
No problems with the test suite, share test suite or rtest_translator.
diff --git a/src/defmfun-check.lisp b/src/defmfun-check.lisp
index 6a3e52af4..48c0ecfc4 100644
--- a/src/defmfun-check.lisp
+++ b/src/defmfun-check.lisp
@@ -887,9 +887,9 @@
;;
;; Otherwise, EXPR must be a symbol and a generic message is printed.
;; (This is for backward compatibility for existing uses of WNA-ERR.)
-(defun wna-err (exprs &optional required-arg-count (pretty-name (caar exprs)))
+(defun wna-err (exprs &optional required-arg-count pretty-name)
(if required-arg-count
- (let ((op pretty-name)
+ (let ((op (or pretty-name (caar exprs)))
(actual-count (length (rest exprs))))
(merror (intl:gettext "~M: expected exactly ~M arguments but got ~M: ~M")
op required-arg-count actual-count (list* '(mlist) (rest exprs))))
-----------------------------------------------------------------------
Summary of changes:
src/defmfun-check.lisp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: willisbl <wil...@us...> - 2026-05-02 12:00:07
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, master has been updated
via 2d2cce0907a9bb2e537e71c99cc6e5f870e5ebf7 (commit)
from 74ac5c2367b5bee526f6a76cf8914d9861409f0a (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 2d2cce0907a9bb2e537e71c99cc6e5f870e5ebf7
Author: Barton Willis <wi...@un...>
Date: Sat May 2 06:59:51 2026 -0500
Add fix for bug \#4729 to ChangeLog.
diff --git a/ChangeLog b/ChangeLog
index 1f49ab4a0..884e44daf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,7 @@ Bug fixes for numbered bugs:
----------------------------
* \#4585 Taylor polynomials involving tangent & a quotient
* \#4634 Divergent integral simplifies to -1/4 with simplify_sum
+ * \#4729 rtest_limit.mac: Problem 230 (line 866)
Bug fixes for unnumbered bugs:
-----------------------------
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 1 +
1 file changed, 1 insertion(+)
hooks/post-receive
--
Maxima CAS
|
|
From: willisbl <wil...@us...> - 2026-05-02 11:53:43
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, master has been updated
via 74ac5c2367b5bee526f6a76cf8914d9861409f0a (commit)
from 03401a35c91287e66ed7265cc7d0138c876739e7 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 74ac5c2367b5bee526f6a76cf8914d9861409f0a
Author: Barton Willis <wi...@un...>
Date: Sat May 2 06:53:29 2026 -0500
Fix \#4729: premature float evaluation in intsubs (rtest_limit.mac problem 230)
Locally bind $float to nil inside intsubs to prevent unintended floating evaluation. This eliminates the inaccurate result in problem rtest_limit 230 (line 866).
Adjust the expected result of rtest_limit 230 (line 866).
No unexpected testsuite or share testsuite failures with either SBCL 2.4.7 and Clozure CL 1.13.1.
diff --git a/src/defint.lisp b/src/defint.lisp
index 1f3d09f8b..879bb45e0 100644
--- a/src/defint.lisp
+++ b/src/defint.lisp
@@ -930,7 +930,8 @@ in the interval of integration.")
;; the integral has a discontinuity at x=0.
;;
(defun intsubs (e a b ivar)
- (let ((edges (cond ((not $intanalysis)
+ (let (($float nil)
+ (edges (cond ((not $intanalysis)
'$no) ;don't do any checking.
(t (discontinuities-in-interval
(let (($algebraic t))
diff --git a/tests/rtest_limit.mac b/tests/rtest_limit.mac
index d04881b93..9840c92ce 100644
--- a/tests/rtest_limit.mac
+++ b/tests/rtest_limit.mac
@@ -863,8 +863,8 @@ integrate(x^3/(exp(x)-1),x,0,inf);
%pi^4/15$
-block([numer : true,ratprint : false], integrate(x^3/(exp(x)-1),x,0,inf));
- 6.493939402266837$
+block([numer : true], integrate(x^3/(exp(x)-1),x,0,inf));
+6.493939402266828$
/* #3142 limit((x^(1/x) - 1)*sqrt(x), x, inf) => inf */
limit((x^(1/x) - 1)*sqrt(x), x, inf);
-----------------------------------------------------------------------
Summary of changes:
src/defint.lisp | 3 ++-
tests/rtest_limit.mac | 4 ++--
2 files changed, 4 insertions(+), 3 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: willisbl <wil...@us...> - 2026-04-30 09:44:23
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, master has been updated
via 03401a35c91287e66ed7265cc7d0138c876739e7 (commit)
from b66fd686cc51a56abcdd5a865f33d6ae936e96df (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 03401a35c91287e66ed7265cc7d0138c876739e7
Author: Barton Willis <wi...@un...>
Date: Thu Apr 30 04:44:08 2026 -0500
simp-set: avoid destructive modification by stable-sort
Since stable-sort may mutate its input, insert `copy-list`.
Stavros Macrakis and David Scherfgen contributed to this patch.
No unexpected testsuite or share testsuite failures with ether SBCL 2.4.7 or Clozure 1.13.1.
diff --git a/src/nset.lisp b/src/nset.lisp
index d9970b8ed..3ad507557 100644
--- a/src/nset.lisp
+++ b/src/nset.lisp
@@ -1,4 +1,4 @@
-;; Copyright 2002-2003 by
+;; Copyright 2002-2003, 2026 by
;; Stavros Macrakis (mac...@al...) and
;; Barton Willis (wi...@un...)
@@ -120,7 +120,9 @@
(defun simp-set (a yy z)
(declare (ignore yy))
- (setq a (if z (cdr a) (mapcar #'(lambda (x) (simplifya x nil)) (cdr a))))
+ (setq a (if z
+ (copy-list (cdr a))
+ (mapcar #'(lambda (x) (simplifya x nil)) (cdr a))))
(setq a (sorted-remove-duplicates (stable-sort a '$orderlessp)));FIXME consider a total order function with #'sort
`(($set simp) ,@a))
-----------------------------------------------------------------------
Summary of changes:
src/nset.lisp | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: dauti <da...@us...> - 2026-04-29 22:02:56
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, master has been updated
via b66fd686cc51a56abcdd5a865f33d6ae936e96df (commit)
via daf3ddf660e87ed89564d28072cffcd8edd6df31 (commit)
from 5276650f17110adf1c9cc61e9e5412225592045f (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit b66fd686cc51a56abcdd5a865f33d6ae936e96df
Author: Wolfgang Dautermann <da...@us...>
Date: Thu Apr 30 00:02:29 2026 +0200
Windows installer: Update SBCL.
diff --git a/crosscompile-windows/sbcl/CMakeLists.txt b/crosscompile-windows/sbcl/CMakeLists.txt
index eaac3688a..0a80efc87 100644
--- a/crosscompile-windows/sbcl/CMakeLists.txt
+++ b/crosscompile-windows/sbcl/CMakeLists.txt
@@ -11,8 +11,8 @@
# updated setup-file automatically.
if(BUILD_64BIT)
- set(SBCLVERSION "2.6.3")
- set(SBCL_MD5 "1cdd33f5fe55e75cd7f6fe3b517fe2d9")
+ set(SBCLVERSION "2.6.4")
+ set(SBCL_MD5 "859347c9282bce27a8fe26c6b7a0c4d1")
set(SBCL_INSTALLERNAME "sbcl-${SBCLVERSION}-x86-64-windows-binary.msi")
else()
set(SBCLVERSION "2.3.2")
commit daf3ddf660e87ed89564d28072cffcd8edd6df31
Author: Wolfgang Dautermann <da...@us...>
Date: Thu Apr 30 00:01:48 2026 +0200
Windows installer: Build ECL with ASDF.
diff --git a/crosscompile-windows/ecl/CMakeLists.txt b/crosscompile-windows/ecl/CMakeLists.txt
index da804edb6..0b950c312 100644
--- a/crosscompile-windows/ecl/CMakeLists.txt
+++ b/crosscompile-windows/ecl/CMakeLists.txt
@@ -25,8 +25,8 @@ ExternalProject_Add(ecl
PATCH_COMMAND rm -rf "${CMAKE_CURRENT_BINARY_DIR}/ecl-prefix/src/ecl/src/gmp"
COMMAND cp -a "${CMAKE_BINARY_DIR}/gmplib/gmplib-prefix/src/gmplib" "${CMAKE_CURRENT_BINARY_DIR}/ecl-prefix/src/ecl/src/gmp"
COMMAND cp ${CMAKE_SOURCE_DIR}/ecl/strm_os.d ${CMAKE_BINARY_DIR}/ecl/ecl-prefix/src/ecl/src/c/streams/strm_os.d
- CONFIGURE_COMMAND ECL_TO_RUN=${CMAKE_BINARY_DIR}/ecl-native-root/bin/ecl ./configure --build=x86_64-pc-linux-gnu --host=x86_64-w64-mingw32 --prefix=${CMAKE_BINARY_DIR}/ecl-cross-root --with-cross-config=${CMAKE_BINARY_DIR}/ecl/ecl-prefix/src/ecl/src/util/x86_64-w64-mingw32.cross_config --enable-gmp=included --with-cmp=yes --with-bytecmp=no --with-asdf=no
- BUILD_COMMAND make
+ CONFIGURE_COMMAND ECL_TO_RUN=${CMAKE_BINARY_DIR}/ecl-native-root/bin/ecl ./configure --build=x86_64-pc-linux-gnu --host=x86_64-w64-mingw32 --prefix=${CMAKE_BINARY_DIR}/ecl-cross-root --with-cross-config=${CMAKE_BINARY_DIR}/ecl/ecl-prefix/src/ecl/src/util/x86_64-w64-mingw32.cross_config --enable-gmp=included --with-cmp=yes --with-bytecmp=no
+ BUILD_COMMAND make APPDATA=C:/temp
INSTALL_COMMAND make install
COMMAND ${CMAKE_COMMAND} -E copy "${MINGW_LIBSTDCPP}" "${CMAKE_BINARY_DIR}/ecl-cross-root"
COMMAND ${CMAKE_COMMAND} -E copy "${MINGW_LIBGCC}" "${CMAKE_BINARY_DIR}/ecl-cross-root"
-----------------------------------------------------------------------
Summary of changes:
crosscompile-windows/ecl/CMakeLists.txt | 4 ++--
crosscompile-windows/sbcl/CMakeLists.txt | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2026-04-29 21:27:03
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, rtoy-split-misc-module has been updated
via ed8652fc1d3e1b13985886da5597d3a06b55e3d5 (commit)
via f398d7307c1555b2479f0071bd3f14cd4c9ccb23 (commit)
from 23d99a94ed29ae85b88345739e32c4e1df65ed00 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit ed8652fc1d3e1b13985886da5597d3a06b55e3d5
Author: Raymond Toy <toy...@gm...>
Date: Wed Apr 29 14:26:34 2026 -0700
Update asdf with corresponding changes from maxima.system.
diff --git a/src/maxima.asd b/src/maxima.asd
index f6bfe3b7e..ab4558082 100644
--- a/src/maxima.asd
+++ b/src/maxima.asd
@@ -899,24 +899,84 @@
destructuring-let errset other-macros
rat-macros declarations fundamental-macros
numerical-utilities m2-pattern-matcher random)
+ :components ((:file "bbsort")
+ (:file "mdot"
+ :depends-on ("bbsort"))
+ (:file "asum"
+ :depends-on ("mdot"))
+ (:file "series"
+ :depends-on ("asum"))
+ (:file "pade")
+ (:file "combin"
+ :depends-on ("asum" "series"))
+ (:file "sumprod-core"
+ :depends-on ("asum" "combin"))
+ ;; This file should probably in the special-functions-misc
+ ;; module, but things break if it gets moved.
+ (:file "conjugate")))
+ (:module number-theory
+ :pathname ""
+ :depends-on (globals defmfun compatibility-macros1
+ reader utility-macros commands
+ destructuring-let errset other-macros
+ rat-macros declarations fundamental-macros
+ numerical-utilities
+ m2-pattern-matcher miscellaneous)
+ :components ((:file "numth")))
+ (:module special-functions-misc
+ :pathname ""
+ :depends-on (globals defmfun compatibility-macros1
+ reader utility-macros commands
+ destructuring-let errset other-macros
+ rat-macros declarations fundamental-macros
+ numerical-utilities
+ m2-pattern-matcher sets)
+ ;; These files are completely independent of each other.
+ :components ((:file "hstep")
+ (:file "sinc")
+ (:file "maxmin")))
+ (:module sets
+ :pathname ""
+ :depends-on (globals defmfun compatibility-macros1
+ reader utility-macros commands
+ destructuring-let errset other-macros
+ rat-macros declarations fundamental-macros
+ numerical-utilities
+ m2-pattern-matcher
+ random miscellaneous)
+ :components ((:file "nset")))
+ (:module expression-utils
+ :pathname ""
+ :depends-on (globals defmfun compatibility-macros1
+ reader utility-macros commands
+ destructuring-let errset other-macros
+ rat-macros declarations fundamental-macros
+ numerical-utilities
+ m2-pattern-matcher
+ miscellaneous)
+ ;; These files are completely independent of each other.
:components ((:file "scs")
- (:file "asum")
- (:file "fortra")
(:file "optim")
- (:file "marray")
- (:file "mdot")
- (:file "series")
- (:file "numth")
- (:file "pade")
(:file "homog")
- (:file "combin")
- ;; nset needs $random.
- (:file "nset")
- (:file "maxmin")
- (:file "conjugate")
- (:file "hstep")
- (:file "sinc")
(:file "mstuff")))
+ (:module fortran-output
+ :pathname ""
+ :depends-on (globals defmfun compatibility-macros1
+ reader utility-macros commands
+ destructuring-let errset other-macros
+ rat-macros declarations fundamental-macros
+ numerical-utilities
+ m2-pattern-matcher)
+ :components ((:file "fortra")))
+ (:module arrays
+ :pathname ""
+ :depends-on (globals defmfun compatibility-macros1
+ reader utility-macros commands
+ destructuring-let errset other-macros
+ rat-macros declarations fundamental-macros
+ numerical-utilities
+ m2-pattern-matcher)
+ :components ((:file "marray")))
(:module polynomial
:pathname ""
:depends-on (defmfun)
commit f398d7307c1555b2479f0071bd3f14cd4c9ccb23
Author: Raymond Toy <toy...@gm...>
Date: Wed Apr 29 14:26:16 2026 -0700
Fix a comment. There are no long any cycles
diff --git a/src/maxima.system b/src/maxima.system
index 4f098e00b..21f60fd0c 100644
--- a/src/maxima.system
+++ b/src/maxima.system
@@ -1085,7 +1085,7 @@
"rat-macros" "declarations" "fundamental-macros"
"numerical-utilities"
"m2-pattern-matcher")
- ;; No cycles between files except for the one between asum and combin.
+ ;; No cycles between files.
:components
((:file "bbsort")
(:file "mdot"
-----------------------------------------------------------------------
Summary of changes:
src/maxima.asd | 88 ++++++++++++++++++++++++++++++++++++++++++++++---------
src/maxima.system | 2 +-
2 files changed, 75 insertions(+), 15 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2026-04-29 21:18:59
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, rtoy-split-misc-module has been updated
via 23d99a94ed29ae85b88345739e32c4e1df65ed00 (commit)
via bc5b05b4a5fb59efba6e0bd23f1769ee2bf67d7c (commit)
via 44e54e7b8497a7dc0dfb47125035673126dcfbf4 (commit)
from 2e1451ca87cae0d47a7bfabd97afd611e17bd038 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 23d99a94ed29ae85b88345739e32c4e1df65ed00
Author: Raymond Toy <toy...@gm...>
Date: Wed Apr 29 14:18:21 2026 -0700
Rename sumprod.lisp to sumprod-core.lisp
I think this name fits better. Update maxima.system with the new file
name.
diff --git a/src/maxima.system b/src/maxima.system
index 1cfc0b441..4f098e00b 100644
--- a/src/maxima.system
+++ b/src/maxima.system
@@ -1097,7 +1097,7 @@
(:file "pade")
(:file "combin"
:depends-on ("asum" "series"))
- (:file "sumprod"
+ (:file "sumprod-core"
:depends-on ("asum" "combin"))
;; This file should probably in the special-functions-misc
;; module, but things break if it gets moved.
diff --git a/src/sumprod.lisp b/src/sumprod-core.lisp
similarity index 100%
rename from src/sumprod.lisp
rename to src/sumprod-core.lisp
commit bc5b05b4a5fb59efba6e0bd23f1769ee2bf67d7c
Author: Raymond Toy <toy...@gm...>
Date: Wed Apr 29 14:17:02 2026 -0700
Forgot to add new file sumprod.lisp
diff --git a/src/sumprod.lisp b/src/sumprod.lisp
new file mode 100644
index 000000000..053d1f2bf
--- /dev/null
+++ b/src/sumprod.lisp
@@ -0,0 +1,479 @@
+;;; -*- Mode: Lisp; Package: Maxima; Syntax: Common-Lisp; Base: 10 -*- ;;;;
+;;;
+;;; This file is part of the Maxima computer algebra project
+;;; (https://sourceforge.net/projects/maxima/)
+;;; SPDX-License-Identifier: GPL-2.0-or-later
+;;;
+;;; Maxima is copyrighted by its authors and licensed under the GNU
+;;; General Public License. This program is distributed WITHOUT ANY
+;;; WARRANTY. See COPYING and AUTHORS for details.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(in-package :maxima)
+
+(defun simpsum (x y z)
+ (let (($ratsimpexpons t))
+ (setq y (maybe-simplifya (sum-arg x) z)))
+ (simpsum1 y (sum-index x) (maybe-simplifya (sum-lower x) z)
+ (maybe-simplifya (sum-upper x) z)))
+
+; This function was SIMPSUM1 until the sum/product code was revised Nov 2005.
+; The revised code punts back to this function since this code knows
+; some simplifications not handled by the revised code. -- Robert Dodier
+
+(defun simpsum1-save (exp i lo hi)
+ (cond ((not (symbolp i)) (merror (intl:gettext "sum: index must be a symbol; found ~M") i))
+ ((equal lo hi) (mbinding ((list i) (list hi)) (meval exp)))
+ ((and (atom exp)
+ (not (eq exp i))
+ (getl '%sum '($outative $linear)))
+ (freesum exp lo hi 1))
+ ((null $simpsum) (list (get '%sum 'msimpind) exp i lo hi))
+ ((and (or (eq lo '$minf)
+ (alike1 lo '((mtimes simp) -1 $inf)))
+ (equal hi '$inf))
+ (let ((pos-part (simpsum2 exp i 0 '$inf))
+ (neg-part (simpsum2 (maxima-substitute (m- i) i exp) i 1 '$inf)))
+ (cond
+ ((or (eq neg-part '$und)
+ (eq pos-part '$und))
+ '$und)
+ ((eq pos-part '$inf)
+ (if (eq neg-part '$minf) '$und '$inf))
+ ((eq pos-part '$minf)
+ (if (eq neg-part '$inf) '$und '$minf))
+ ((or (eq neg-part '$inf) (eq neg-part '$minf))
+ neg-part)
+ (t (m+ neg-part pos-part)))))
+ ((or (eq lo '$minf)
+ (alike1 lo '((mtimes simp) -1 '$inf)))
+ (simpsum2 (maxima-substitute (m- i) i exp) i (m- hi) '$inf))
+ (t (simpsum2 exp i lo hi))))
+
+(defun simpsum1 (e k lo hi)
+ (with-new-context (context)
+ (let ((acc 0) (n) (sgn) ($prederror nil) (i (gensym)) (ex))
+ (setq lo ($ratdisrep lo))
+ (setq hi ($ratdisrep hi))
+
+ (setq n ($limit (add 1 (sub hi lo))))
+ (setq sgn ($sign n))
+
+ (if (not (eq t (csign lo))) (mfuncall '$assume `((mgeqp) ,i ,lo)))
+ (if (not (eq t (csign hi))) (mfuncall '$assume `((mgeqp) ,hi ,i)))
+
+ (setq ex (subst i k e))
+ (setq ex (subst i k ex)) ; Why substitute again?
+
+ (setq acc
+ (cond ((and (eq n '$inf) ($freeof i ex))
+ (setq sgn (csign ex))
+ (cond ((eq sgn '$pos) '$inf)
+ ((eq sgn '$neg) '$minf)
+ ((eq sgn '$zero) 0)
+ (t `((%sum simp) ,ex ,i ,lo ,hi))))
+
+ ((and (mbagp e) $listarith)
+ (simplifya
+ `((,(caar e)) ,@(mapcar #'(lambda (s) (mfuncall '$sum s k lo hi)) (margs e))) t))
+
+ ((or (eq sgn '$neg) (eq sgn '$zero) (eq sgn '$nz)) 0)
+
+ ((like ex 0) 0)
+
+ (($freeof i ex) (mult n ex))
+
+ ((and (integerp n) (eq sgn '$pos) $simpsum)
+ (dotimes (j n acc)
+ (setq acc (add acc (resimplify (subst (add j lo) i ex))))))
+
+ (t
+ `((%sum simp) ,(subst k i ex) ,k ,lo ,hi))))
+
+ (setq acc (subst k i acc))
+
+ ;; If expression is still a summation,
+ ;; punt to previous simplification code.
+
+ (if (and $simpsum (op-equalp acc '%sum))
+ (let* ((args (cdr acc)) (e (first args)) (i (second args)) (i0 (third args)) (i1 (fourth args)))
+ (setq acc (simpsum1-save e i i0 i1))))
+
+ ; If the expression is no longer a %sum, resimplify.
+ ; Ordering of expressions may change due to the gensym -> index substitution.
+ (unless (op-equalp acc '%sum)
+ (setq acc (resimplify acc)))
+
+ acc)))
+
+(defun simpprod1 (e k lo hi)
+ (with-new-context (context)
+ (let ((acc 1) (n) (sgn) ($prederror nil) (i (gensym)) (ex) (ex-mag) (realp))
+
+ (setq lo ($ratdisrep lo))
+ (setq hi ($ratdisrep hi))
+ (setq n ($limit (add 1 (sub hi lo))))
+ (setq sgn ($sign n))
+
+ (if (not (eq t (csign lo))) (mfuncall '$assume `((mgeqp) ,i ,lo)))
+ (if (not (eq t (csign hi))) (mfuncall '$assume `((mgeqp) ,hi ,i)))
+
+ (setq ex (subst i k e))
+ (setq ex (subst i k ex)) ; Why substitute again?
+
+ (setq acc
+ (cond
+ ((like ex 1) 1)
+
+ ((and (eq n '$inf) ($freeof i ex))
+ (setq ex-mag (mfuncall '$cabs ex))
+ (setq realp (mfuncall '$imagpart ex))
+ (setq realp (mevalp `((mequal) 0 ,realp)))
+
+ (cond ((eq t (mevalp `((mlessp) ,ex-mag 1))) 0)
+ ((and (eq realp t) (eq t (mevalp `((mgreaterp) ,ex 1)))) '$inf)
+ ((eq t (mevalp `((mgreaterp) ,ex-mag 1))) '$infinity)
+ ((eq t (mevalp `((mequal) 1 ,ex-mag))) '$und)
+ (t `((%product) ,e ,k ,lo ,hi))))
+
+ ((or (eq sgn '$neg) (eq sgn '$zero) (eq sgn '$nz))
+ 1)
+
+ ((and (mbagp e) $listarith)
+ (simplifya
+ `((,(caar e)) ,@(mapcar #'(lambda (s) (mfuncall '$product s k lo hi)) (margs e))) t))
+
+ (($freeof i ex) (power ex n))
+
+ ((and (integerp n) (eq sgn '$pos) $simpproduct)
+ (dotimes (j n acc)
+ (setq acc (mult acc (resimplify (subst (add j lo) i ex))))))
+
+ (t
+ `((%product simp) ,(subst k i ex) ,k ,lo ,hi))))
+
+ ;; Hmm, this is curious... don't call existing product simplifications
+ ;; if index range is infinite -- what's up with that??
+
+ (if (and $simpproduct (op-equalp acc '%product) (not (like n '$inf)))
+ (let* ((args (cdr acc)) (e (first args)) (i (second args)) (i0 (third args)) (i1 (fourth args)))
+ (setq acc (simpprod1-save e i i0 i1))))
+
+ (setq acc (subst k i acc))
+
+ ; If the expression is no longer a %product, resimplify.
+ ; Ordering of expressions may change due to the gensym -> index substitution.
+ (unless (op-equalp acc '%product)
+ (setq acc (resimplify acc)))
+
+ acc)))
+
+; This function was SIMPPROD1 until the sum/product code was revised Nov 2005.
+; The revised code punts back to this function since this code knows
+; some simplifications not handled by the revised code. -- Robert Dodier
+
+(defun simpprod1-save (exp i lo hi)
+ (let (u)
+ (cond ((not (symbolp i)) (merror (intl:gettext "product: index must be a symbol; found ~M") i))
+ ((alike1 lo hi)
+ (let ((valist (list i)))
+ (mbinding (valist (list hi))
+ (meval exp))))
+ ((eq ($sign (setq u (m- hi lo))) '$neg)
+ (cond ((eq ($sign (add2 u 1)) '$zero) 1)
+ (t (merror (intl:gettext "product: lower bound ~M greater than upper bound ~M") lo hi))))
+ ((atom exp)
+ (cond ((null (eq exp i))
+ (power* exp (list '(mplus) hi 1 (list '(mtimes) -1 lo))))
+ ((let ((lot (asksign lo)))
+ (cond ((equal lot '$zero) 0)
+ ((eq lot '$positive)
+ (m// (list '(mfactorial) hi)
+ (list '(mfactorial) (list '(mplus) lo -1))))
+ ((m* (list '(mfactorial)
+ (list '(mabs) lo))
+ (cond ((member (asksign hi) '($zero $positive) :test #'eq)
+ 0)
+ (t (prog1
+ (m^ -1 (m+ hi lo 1))
+ (setq hi (list '(mabs) hi)))))
+ (list '(mfactorial) hi))))))))
+ ((list '(%product simp) exp i lo hi)))))
+
+;; Summation stuff
+
+(defun simpsum2 (exp i lo hi)
+ (prog (*plus *times $simpsum u)
+ (setq *plus (list 0) *times 1)
+ (when (or (and (eq hi '$inf) (eq lo '$minf))
+ (equal 0 (m+ hi lo)))
+ (setq $simpsum t lo 0)
+ (setq *plus (cons (m* -1 *times (maxima-substitute 0 i exp)) *plus))
+ (setq exp (m+ exp (maxima-substitute (m- i) i exp))))
+ (cond ((eq ($sign (setq u (m- hi lo))) '$neg)
+ (if (equal u -1)
+ (return 0)
+ (merror (intl:gettext "sum: lower bound ~M greater than upper bound ~M") lo hi)))
+ ((free exp i)
+ (return (m+l (cons (freesum exp lo hi *times) *plus))))
+
+ ((progn (multiple-value-setq (exp *plus) (sumsum exp i lo hi *plus *times)) exp)
+ (setq exp (m* *times (dosum (cadr exp) (caddr exp)
+ (cadddr exp) (cadr (cdddr exp)) t :evaluate-summand nil))))
+ (t (return (m+l *plus))))
+ (return (m+l (cons exp *plus)))))
+
+(let (combin-sum combin-usum)
+ (defun adsum (e)
+ (push (simplify e) combin-sum))
+ (defun adusum (e)
+ (push (simplify e) combin-usum))
+
+ (defun fpolysum (e lo hi poly-var) ;returns *combin-ans*
+ ;; Sums of polynomials using
+ ;; bernpoly(x+1, n) - bernpoly(x, n) = n*x^(n-1)
+ ;; which implies
+ ;; sum(k^n, k, A, B) = 1/(n+1)*(bernpoly(B+1, n+1) - bernpoly(A, n+1))
+ ;;
+ ;; fpoly1 returns 1/(n+1)*(bernpoly(foo+1, n+1) - bernpoly(0, n+1)) for each power
+ ;; in the polynomial e
+ (labels
+ ((fpoly1 (e lo)
+ (cond ((smono e poly-var)
+ (fpoly2 *a *n e lo))
+ ((eq (caar e) 'mplus)
+ (cons '(mplus) (mapcar #'(lambda (x) (fpoly1 x lo)) (cdr e))))
+ (t (adusum e) 0)))
+ (fpoly2 (a n e lo)
+ (cond ((null (and (integerp n) (> n -1))) (adusum e) 0)
+ ((equal n 0)
+ (m* (cond ((signp e lo)
+ (m1+ 'foo))
+ (t 'foo))
+ a))
+ (($ratsimp
+ (m* a (list '(rat) 1 (1+ n))
+ (m- ($bernpoly (m+ 'foo 1) (1+ n))
+ (ftake '%bern (1+ n)))))))))
+ (let ((a (fpoly1 (setq e ($expand ($ratdisrep ($rat e poly-var)))) lo))
+ ($prederror))
+ (cond ((null a) 0)
+ ((member lo '(0 1))
+ (maxima-substitute hi 'foo a))
+ (t
+ (list '(mplus) (maxima-substitute hi 'foo a)
+ (list '(mtimes) -1 (maxima-substitute (list '(mplus) lo -1) 'foo a))))))))
+
+ (defun fbino (e y lo hi poly-var)
+ ;; fbino can do these sums:
+ ;; a) sum(binomial(n,k),k,0,n) -> 2^n
+ ;; b) sum(binomial(n-k,k,k,0,n) -> fib(n+1)
+ ;; c) sum(binomial(n,2k),k,0,n) -> 2^(n-1)
+ ;; d) sum(binomial(a+k,b),k,l,h) -> binomial(h+a+1,b+1) - binomial(l+a,b+1)
+ ;; e=binomial(n,d)
+ (prog (n d l h)
+ ;; check that n and d are linear in poly-var
+ (when (null (setq n (m2 (cadr e) (list 'n 'linear* poly-var))))
+ (return (adusum e)))
+ (setq n (cdr (assoc 'n n :test #'eq)))
+ (when (null (setq d (m2 (caddr e) (list 'd 'linear* poly-var))))
+ (return (adusum e)))
+ (setq d (cdr (assoc 'd d :test #'eq)))
+
+ ;; binomial(a+b*k,c+b*k) -> binomial(a+b*k, a-c)
+ (when (equal (cdr n) (cdr d))
+ (setq d (cons (m- (car n) (car d)) 0)))
+
+ (cond
+ ;; substitute k with -k in sum(binomial(a+b*k, c-d*k))
+ ;; and sum(binomial(a-b*k,c))
+ ((and (numberp (cdr d))
+ (or (minusp (cdr d))
+ (and (zerop (cdr d))
+ (numberp (cdr n))
+ (minusp (cdr n)))))
+ (rplacd d (- (cdr d)))
+ (rplacd n (- (cdr n)))
+ (setq l (m- hi)
+ h (m- lo)))
+ (t (setq l lo h hi)))
+
+ (cond
+
+ ;; sum(binomial(a+k,c),k,l,h)
+ ((and (equal 0 (cdr d)) (equal 1 (cdr n)))
+ (adsum (m* y (m- (list '(%binomial) (m+ h (car n) 1) (m+ (car d) 1))
+ (list '(%binomial) (m+ l (car n)) (m+ (car d) 1))))))
+
+ ;; sum(binomial(n,k),k,0,n)=2^n
+ ((and (equal 1 (cdr d)) (equal 0 (cdr n)))
+ ;; sum(binomial(n,k+c),k,l,h)=sum(binomial(n,k+c+l),k,0,h-l)
+ (let ((h1 (m- h l))
+ (c (m+ (car d) l)))
+ (if (and (integerp (m- (car n) h1))
+ (integerp c))
+ (progn
+ (adsum (m* y (m^ 2 (car n))))
+ (when (member (asksign (m- (m+ h1 c) (car n))) '($zero $negative) :test #'eq)
+ (adsum (m* -1 y (dosum (list '(%binomial) (car n) poly-var)
+ poly-var (m+ h1 c 1) (car n) t :evaluate-summand nil))))
+ (when (> c 0)
+ (adsum (m* -1 y (dosum (list '(%binomial) (car n) poly-var)
+ poly-var 0 (m- c 1) t :evaluate-summand nil)))))
+ (adusum e))))
+
+ ;; sum(binomial(b-k,k),k,0,floor(b/2))=fib(b+1)
+ ((and (equal -1 (cdr n)) (equal 1 (cdr d)))
+ ;; sum(binomial(a-k,b+k),k,l,h)=sum(binomial(a+b-k,k),k,l+b,h+b)
+ (let ((h1 (m+ h (car d)))
+ (l1 (m+ l (car d)))
+ (a1 (m+ (car n) (car d))))
+ ;; sum(binomial(a1-k,k),k,0,floor(a1/2))=fib(a1+1)
+ ;; we only do sums with h>floor(a1/2)
+ (if (and (integerp l1)
+ (member (asksign (m- h1 (m// a1 2))) '($zero $positive) :test #'eq))
+ (progn
+ (adsum (m* y ($fib (m+ a1 1))))
+ (when (> l1 0)
+ (adsum (m* -1 y (dosum (list '(%binomial) (m- a1 poly-var) poly-var)
+ poly-var 0 (m- l1 1) t :evaluate-summand nil)))))
+ (adusum e))))
+
+ ;; sum(binomial(n,2*k),k,0,floor(n/2))=2^(n-1)
+ ;; sum(binomial(n,2*k+1),k,0,floor((n-1)/2))=2^(n-1)
+ ((and (equal 0 (cdr n)) (equal 2 (cdr d)))
+ ;; sum(binomial(a,2*k+b),k,l,h)=sum(binomial(a,2*k),k,l+b/2,h+b/2), b even
+ ;; sum(binomial(a,2*k+b),k,l,h)=sum(binomial(a,2*k+1),k,l+(b-1)/2,h+(b-1)/2), b odd
+ (let ((a (car n))
+ (r1 (if (oddp (car d)) 1 0))
+ (l1 (if (oddp (car d))
+ (m+ l (truncate (1- (car d)) 2))
+ (m+ l (truncate (car d) 2)))))
+ (when (and (integerp l1)
+ (member (asksign (m- a hi)) '($zero $positive) :test #'eq))
+ (adsum (m* y (m^ 2 (m- a 1))))
+ (when (> l1 0)
+ (adsum (m* -1 y (dosum (list '(%binomial) a (m+ poly-var poly-var r1))
+ poly-var 0 (m- l1 1) t :evaluate-summand nil)))))))
+
+ ;; other sums we can't do
+ (t
+ (adusum e)))))
+
+ (defun isum (e lo poly-var)
+ (labels
+ ((isum-giveup (e)
+ (cond ((atom e) nil)
+ ((eq (caar e) 'mexpt)
+ (not (or (free (cadr e) poly-var)
+ (ratp (caddr e) poly-var))))
+ ((member (caar e) '(mplus mtimes) :test #'eq)
+ (some #'identity (mapcar #'isum-giveup (cdr e))))
+ (t)))
+ (isum1 (e lo)
+ (cond ((free e poly-var)
+ (unless (eq (asksign e) '$zero)
+ (throw 'isumout 'divergent)))
+ ((ratp e poly-var)
+ (adsum (ipolysum e lo)))
+ ((eq (caar e) 'mplus)
+ (mapc #'(lambda (x) (isum1 x lo)) (cdr e)))
+ ( (isgeo e lo))
+ ((adusum e))))
+ (ipolysum (e lo)
+ (ipoly1 ($expand e) lo))
+ (ipoly1 (e lo)
+ (cond ((smono e poly-var)
+ (ipoly2 *a *n lo (asksign (simplify (list '(mplus) *n 1)))))
+ ((mplusp e)
+ (cons '(mplus) (mapcar #'(lambda (x) (ipoly1 x lo)) (cdr e))))
+ (t (adusum e)
+ 0)))
+ (ipoly2 (a n lo sign)
+ (cond ((member (asksign lo) '($zero $negative) :test #'eq)
+ (throw 'isumout 'divergent)))
+ (unless (equal lo 1)
+ (let (($simpsum t))
+ (adsum `((%sum)
+ ((mtimes) ,a -1 ((mexpt) ,poly-var ,n))
+ ,poly-var 1 ((mplus) -1 ,lo)))))
+ (cond ((eq sign '$negative)
+ (list '(mtimes) a ($zeta (meval (list '(mtimes) -1 n)))))
+ ((throw 'isumout 'divergent))))
+ (isgeo (e lo)
+ (let ((r ($ratsimp (div* (maxima-substitute (list '(mplus) poly-var 1) poly-var e) e))))
+ (and (free r poly-var)
+ (isgeo1 (maxima-substitute lo poly-var e)
+ r (asksign (simplify (list '(mplus) (list '(mabs) r) -1)))))))
+ (isgeo1 (a r sign)
+ (cond ((eq sign '$positive)
+ (throw 'isumout 'divergent))
+ ((eq sign '$zero)
+ (throw 'isumout 'divergent))
+ ((eq sign '$negative)
+ (adsum (list '(mtimes) a
+ (list '(mexpt) (list '(mplus) 1 (list '(mtimes) -1 r)) -1)))))))
+ (cond ((isum-giveup e)
+ (setq combin-sum nil combin-usum (list e)))
+ ((eq (catch 'isumout (isum1 e lo)) 'divergent)
+ (merror (intl:gettext "sum: sum is divergent."))))))
+
+ (defun sumsum (e poly-var lo hi *plus *times)
+ (setf combin-sum nil)
+ (setf combin-usum nil)
+ (labels
+ ((finite-sum (e y lo hi)
+ (cond ((null e))
+ ((free e poly-var)
+ (adsum (m* y e (m+ hi 1 (m- lo)))))
+ ((poly? e poly-var)
+ (adsum (m* y (fpolysum e lo hi poly-var))))
+ ((eq (caar e) '%binomial) (fbino e y lo hi poly-var))
+ ((eq (caar e) 'mplus)
+ (mapc #'(lambda (q) (finite-sum q y lo hi)) (cdr e)))
+ ((and (or (mtimesp e) (mexptp e) (mplusp e))
+ (fsgeo e y lo hi)))
+ (t
+ (adusum e)
+ nil)))
+ (fsgeo (e y lo hi)
+ (let ((r ($ratsimp (div* (maxima-substitute (list '(mplus) poly-var 1) poly-var e) e))))
+ (cond ((equal r 1)
+ (adsum
+ (list '(mtimes)
+ (list '(mplus) 1 hi (list '(mtimes) -1 lo))
+ (maxima-substitute lo poly-var e))))
+ ((free r poly-var)
+ (adsum
+ (list '(mtimes) y
+ (maxima-substitute 0 poly-var e)
+ (list '(mplus)
+ (list '(mexpt) r (list '(mplus) hi 1))
+ (list '(mtimes) -1 (list '(mexpt) r lo)))
+ (list '(mexpt) (list '(mplus) r -1) -1))))))))
+ (cond ((eq hi '$inf)
+ (cond (*infsumsimp
+ (isum e lo poly-var))
+ ((setq combin-usum (list e)))))
+ ((finite-sum e 1 lo hi)))
+ (cond ((eq combin-sum nil)
+ (return-from sumsum (list '(%sum) e poly-var lo hi))))
+ (setq *plus
+ (nconc (mapcar
+ #'(lambda (q) (simptimes (list '(mtimes) *times q) 1 nil))
+ combin-sum)
+ *plus))
+ (values (and combin-usum (setq combin-usum (list '(%sum) (simplus (cons '(plus) combin-usum) 1 t) poly-var lo hi)))
+ *plus))))
+
+;; Is this guy actually looking at the value of its middle arg?
+
+(defun simpprod (x y z)
+ (let (($ratsimpexpons t))
+ (cond ((equal y 1)
+ (setq y (maybe-simplifya (cadr x) z)))
+ ((setq y (simptimes (list '(mexpt) (cadr x) y) 1 z)))))
+ (simpprod1 y (caddr x)
+ (maybe-simplifya (cadddr x) z)
+ (maybe-simplifya (cadr (cdddr x)) z)))
+
commit 44e54e7b8497a7dc0dfb47125035673126dcfbf4
Author: Raymond Toy <toy...@gm...>
Date: Wed Apr 29 14:13:21 2026 -0700
Break the cycle between asum and combin
combin defines some summation routines that asum and combin called.
To fix this cycle, move the core summation routines out of asum and
combin into the new file sumprod.lisp. (Product functions were moved
too.)
Update maxima.system appropriately.
diff --git a/src/asum.lisp b/src/asum.lisp
index 133af793c..8aa698a58 100644
--- a/src/asum.lisp
+++ b/src/asum.lisp
@@ -422,45 +422,6 @@
ans)
(t `((%lsum) ,form ,ind ,lis)))))
-(defun simpsum (x y z)
- (let (($ratsimpexpons t))
- (setq y (maybe-simplifya (sum-arg x) z)))
- (simpsum1 y (sum-index x) (maybe-simplifya (sum-lower x) z)
- (maybe-simplifya (sum-upper x) z)))
-
-; This function was SIMPSUM1 until the sum/product code was revised Nov 2005.
-; The revised code punts back to this function since this code knows
-; some simplifications not handled by the revised code. -- Robert Dodier
-
-(defun simpsum1-save (exp i lo hi)
- (cond ((not (symbolp i)) (merror (intl:gettext "sum: index must be a symbol; found ~M") i))
- ((equal lo hi) (mbinding ((list i) (list hi)) (meval exp)))
- ((and (atom exp)
- (not (eq exp i))
- (getl '%sum '($outative $linear)))
- (freesum exp lo hi 1))
- ((null $simpsum) (list (get '%sum 'msimpind) exp i lo hi))
- ((and (or (eq lo '$minf)
- (alike1 lo '((mtimes simp) -1 $inf)))
- (equal hi '$inf))
- (let ((pos-part (simpsum2 exp i 0 '$inf))
- (neg-part (simpsum2 (maxima-substitute (m- i) i exp) i 1 '$inf)))
- (cond
- ((or (eq neg-part '$und)
- (eq pos-part '$und))
- '$und)
- ((eq pos-part '$inf)
- (if (eq neg-part '$minf) '$und '$inf))
- ((eq pos-part '$minf)
- (if (eq neg-part '$inf) '$und '$minf))
- ((or (eq neg-part '$inf) (eq neg-part '$minf))
- neg-part)
- (t (m+ neg-part pos-part)))))
- ((or (eq lo '$minf)
- (alike1 lo '((mtimes simp) -1 '$inf)))
- (simpsum2 (maxima-substitute (m- i) i exp) i (m- hi) '$inf))
- (t (simpsum2 exp i lo hi))))
-
;; DOSUM, MEVALSUMARG, DO%SUM -- general principles
;; - evaluate the summand/productand
@@ -548,156 +509,6 @@
(list (mevalsumarg (car l) ind low hi)
ind (meval (caddr l)) (meval (cadddr l))))))
-(defun simpsum1 (e k lo hi)
- (with-new-context (context)
- (let ((acc 0) (n) (sgn) ($prederror nil) (i (gensym)) (ex))
- (setq lo ($ratdisrep lo))
- (setq hi ($ratdisrep hi))
-
- (setq n ($limit (add 1 (sub hi lo))))
- (setq sgn ($sign n))
-
- (if (not (eq t (csign lo))) (mfuncall '$assume `((mgeqp) ,i ,lo)))
- (if (not (eq t (csign hi))) (mfuncall '$assume `((mgeqp) ,hi ,i)))
-
- (setq ex (subst i k e))
- (setq ex (subst i k ex)) ; Why substitute again?
-
- (setq acc
- (cond ((and (eq n '$inf) ($freeof i ex))
- (setq sgn (csign ex))
- (cond ((eq sgn '$pos) '$inf)
- ((eq sgn '$neg) '$minf)
- ((eq sgn '$zero) 0)
- (t `((%sum simp) ,ex ,i ,lo ,hi))))
-
- ((and (mbagp e) $listarith)
- (simplifya
- `((,(caar e)) ,@(mapcar #'(lambda (s) (mfuncall '$sum s k lo hi)) (margs e))) t))
-
- ((or (eq sgn '$neg) (eq sgn '$zero) (eq sgn '$nz)) 0)
-
- ((like ex 0) 0)
-
- (($freeof i ex) (mult n ex))
-
- ((and (integerp n) (eq sgn '$pos) $simpsum)
- (dotimes (j n acc)
- (setq acc (add acc (resimplify (subst (add j lo) i ex))))))
-
- (t
- `((%sum simp) ,(subst k i ex) ,k ,lo ,hi))))
-
- (setq acc (subst k i acc))
-
- ;; If expression is still a summation,
- ;; punt to previous simplification code.
-
- (if (and $simpsum (op-equalp acc '%sum))
- (let* ((args (cdr acc)) (e (first args)) (i (second args)) (i0 (third args)) (i1 (fourth args)))
- (setq acc (simpsum1-save e i i0 i1))))
-
- ; If the expression is no longer a %sum, resimplify.
- ; Ordering of expressions may change due to the gensym -> index substitution.
- (unless (op-equalp acc '%sum)
- (setq acc (resimplify acc)))
-
- acc)))
-
-(defun simpprod1 (e k lo hi)
- (with-new-context (context)
- (let ((acc 1) (n) (sgn) ($prederror nil) (i (gensym)) (ex) (ex-mag) (realp))
-
- (setq lo ($ratdisrep lo))
- (setq hi ($ratdisrep hi))
- (setq n ($limit (add 1 (sub hi lo))))
- (setq sgn ($sign n))
-
- (if (not (eq t (csign lo))) (mfuncall '$assume `((mgeqp) ,i ,lo)))
- (if (not (eq t (csign hi))) (mfuncall '$assume `((mgeqp) ,hi ,i)))
-
- (setq ex (subst i k e))
- (setq ex (subst i k ex)) ; Why substitute again?
-
- (setq acc
- (cond
- ((like ex 1) 1)
-
- ((and (eq n '$inf) ($freeof i ex))
- (setq ex-mag (mfuncall '$cabs ex))
- (setq realp (mfuncall '$imagpart ex))
- (setq realp (mevalp `((mequal) 0 ,realp)))
-
- (cond ((eq t (mevalp `((mlessp) ,ex-mag 1))) 0)
- ((and (eq realp t) (eq t (mevalp `((mgreaterp) ,ex 1)))) '$inf)
- ((eq t (mevalp `((mgreaterp) ,ex-mag 1))) '$infinity)
- ((eq t (mevalp `((mequal) 1 ,ex-mag))) '$und)
- (t `((%product) ,e ,k ,lo ,hi))))
-
- ((or (eq sgn '$neg) (eq sgn '$zero) (eq sgn '$nz))
- 1)
-
- ((and (mbagp e) $listarith)
- (simplifya
- `((,(caar e)) ,@(mapcar #'(lambda (s) (mfuncall '$product s k lo hi)) (margs e))) t))
-
- (($freeof i ex) (power ex n))
-
- ((and (integerp n) (eq sgn '$pos) $simpproduct)
- (dotimes (j n acc)
- (setq acc (mult acc (resimplify (subst (add j lo) i ex))))))
-
- (t
- `((%product simp) ,(subst k i ex) ,k ,lo ,hi))))
-
- ;; Hmm, this is curious... don't call existing product simplifications
- ;; if index range is infinite -- what's up with that??
-
- (if (and $simpproduct (op-equalp acc '%product) (not (like n '$inf)))
- (let* ((args (cdr acc)) (e (first args)) (i (second args)) (i0 (third args)) (i1 (fourth args)))
- (setq acc (simpprod1-save e i i0 i1))))
-
- (setq acc (subst k i acc))
-
- ; If the expression is no longer a %product, resimplify.
- ; Ordering of expressions may change due to the gensym -> index substitution.
- (unless (op-equalp acc '%product)
- (setq acc (resimplify acc)))
-
- acc)))
-
-; This function was SIMPPROD1 until the sum/product code was revised Nov 2005.
-; The revised code punts back to this function since this code knows
-; some simplifications not handled by the revised code. -- Robert Dodier
-
-(defun simpprod1-save (exp i lo hi)
- (let (u)
- (cond ((not (symbolp i)) (merror (intl:gettext "product: index must be a symbol; found ~M") i))
- ((alike1 lo hi)
- (let ((valist (list i)))
- (mbinding (valist (list hi))
- (meval exp))))
- ((eq ($sign (setq u (m- hi lo))) '$neg)
- (cond ((eq ($sign (add2 u 1)) '$zero) 1)
- (t (merror (intl:gettext "product: lower bound ~M greater than upper bound ~M") lo hi))))
- ((atom exp)
- (cond ((null (eq exp i))
- (power* exp (list '(mplus) hi 1 (list '(mtimes) -1 lo))))
- ((let ((lot (asksign lo)))
- (cond ((equal lot '$zero) 0)
- ((eq lot '$positive)
- (m// (list '(mfactorial) hi)
- (list '(mfactorial) (list '(mplus) lo -1))))
- ((m* (list '(mfactorial)
- (list '(mabs) lo))
- (cond ((member (asksign hi) '($zero $positive) :test #'eq)
- 0)
- (t (prog1
- (m^ -1 (m+ hi lo 1))
- (setq hi (list '(mabs) hi)))))
- (list '(mfactorial) hi))))))))
- ((list '(%product simp) exp i lo hi)))))
-
;; multiplication of sums
diff --git a/src/combin.lisp b/src/combin.lisp
index fe4b44ca7..cfd8659c5 100644
--- a/src/combin.lisp
+++ b/src/combin.lisp
@@ -1105,272 +1105,6 @@
(l ll (cdr l)))
((null l) (list (list '(mlist) p2 p1) (list '(mlist) q2 q1)))))
-;; Summation stuff
-
-(defun simpsum2 (exp i lo hi)
- (prog (*plus *times $simpsum u)
- (setq *plus (list 0) *times 1)
- (when (or (and (eq hi '$inf) (eq lo '$minf))
- (equal 0 (m+ hi lo)))
- (setq $simpsum t lo 0)
- (setq *plus (cons (m* -1 *times (maxima-substitute 0 i exp)) *plus))
- (setq exp (m+ exp (maxima-substitute (m- i) i exp))))
- (cond ((eq ($sign (setq u (m- hi lo))) '$neg)
- (if (equal u -1)
- (return 0)
- (merror (intl:gettext "sum: lower bound ~M greater than upper bound ~M") lo hi)))
- ((free exp i)
- (return (m+l (cons (freesum exp lo hi *times) *plus))))
-
- ((progn (multiple-value-setq (exp *plus) (sumsum exp i lo hi *plus *times)) exp)
- (setq exp (m* *times (dosum (cadr exp) (caddr exp)
- (cadddr exp) (cadr (cdddr exp)) t :evaluate-summand nil))))
- (t (return (m+l *plus))))
- (return (m+l (cons exp *plus)))))
-
-(let (combin-sum combin-usum)
- (defun adsum (e)
- (push (simplify e) combin-sum))
- (defun adusum (e)
- (push (simplify e) combin-usum))
-
- (defun fpolysum (e lo hi poly-var) ;returns *combin-ans*
- ;; Sums of polynomials using
- ;; bernpoly(x+1, n) - bernpoly(x, n) = n*x^(n-1)
- ;; which implies
- ;; sum(k^n, k, A, B) = 1/(n+1)*(bernpoly(B+1, n+1) - bernpoly(A, n+1))
- ;;
- ;; fpoly1 returns 1/(n+1)*(bernpoly(foo+1, n+1) - bernpoly(0, n+1)) for each power
- ;; in the polynomial e
- (labels
- ((fpoly1 (e lo)
- (cond ((smono e poly-var)
- (fpoly2 *a *n e lo))
- ((eq (caar e) 'mplus)
- (cons '(mplus) (mapcar #'(lambda (x) (fpoly1 x lo)) (cdr e))))
- (t (adusum e) 0)))
- (fpoly2 (a n e lo)
- (cond ((null (and (integerp n) (> n -1))) (adusum e) 0)
- ((equal n 0)
- (m* (cond ((signp e lo)
- (m1+ 'foo))
- (t 'foo))
- a))
- (($ratsimp
- (m* a (list '(rat) 1 (1+ n))
- (m- ($bernpoly (m+ 'foo 1) (1+ n))
- (ftake '%bern (1+ n)))))))))
- (let ((a (fpoly1 (setq e ($expand ($ratdisrep ($rat e poly-var)))) lo))
- ($prederror))
- (cond ((null a) 0)
- ((member lo '(0 1))
- (maxima-substitute hi 'foo a))
- (t
- (list '(mplus) (maxima-substitute hi 'foo a)
- (list '(mtimes) -1 (maxima-substitute (list '(mplus) lo -1) 'foo a))))))))
-
- (defun fbino (e y lo hi poly-var)
- ;; fbino can do these sums:
- ;; a) sum(binomial(n,k),k,0,n) -> 2^n
- ;; b) sum(binomial(n-k,k,k,0,n) -> fib(n+1)
- ;; c) sum(binomial(n,2k),k,0,n) -> 2^(n-1)
- ;; d) sum(binomial(a+k,b),k,l,h) -> binomial(h+a+1,b+1) - binomial(l+a,b+1)
- ;; e=binomial(n,d)
- (prog (n d l h)
- ;; check that n and d are linear in poly-var
- (when (null (setq n (m2 (cadr e) (list 'n 'linear* poly-var))))
- (return (adusum e)))
- (setq n (cdr (assoc 'n n :test #'eq)))
- (when (null (setq d (m2 (caddr e) (list 'd 'linear* poly-var))))
- (return (adusum e)))
- (setq d (cdr (assoc 'd d :test #'eq)))
-
- ;; binomial(a+b*k,c+b*k) -> binomial(a+b*k, a-c)
- (when (equal (cdr n) (cdr d))
- (setq d (cons (m- (car n) (car d)) 0)))
-
- (cond
- ;; substitute k with -k in sum(binomial(a+b*k, c-d*k))
- ;; and sum(binomial(a-b*k,c))
- ((and (numberp (cdr d))
- (or (minusp (cdr d))
- (and (zerop (cdr d))
- (numberp (cdr n))
- (minusp (cdr n)))))
- (rplacd d (- (cdr d)))
- (rplacd n (- (cdr n)))
- (setq l (m- hi)
- h (m- lo)))
- (t (setq l lo h hi)))
-
- (cond
-
- ;; sum(binomial(a+k,c),k,l,h)
- ((and (equal 0 (cdr d)) (equal 1 (cdr n)))
- (adsum (m* y (m- (list '(%binomial) (m+ h (car n) 1) (m+ (car d) 1))
- (list '(%binomial) (m+ l (car n)) (m+ (car d) 1))))))
-
- ;; sum(binomial(n,k),k,0,n)=2^n
- ((and (equal 1 (cdr d)) (equal 0 (cdr n)))
- ;; sum(binomial(n,k+c),k,l,h)=sum(binomial(n,k+c+l),k,0,h-l)
- (let ((h1 (m- h l))
- (c (m+ (car d) l)))
- (if (and (integerp (m- (car n) h1))
- (integerp c))
- (progn
- (adsum (m* y (m^ 2 (car n))))
- (when (member (asksign (m- (m+ h1 c) (car n))) '($zero $negative) :test #'eq)
- (adsum (m* -1 y (dosum (list '(%binomial) (car n) poly-var)
- poly-var (m+ h1 c 1) (car n) t :evaluate-summand nil))))
- (when (> c 0)
- (adsum (m* -1 y (dosum (list '(%binomial) (car n) poly-var)
- poly-var 0 (m- c 1) t :evaluate-summand nil)))))
- (adusum e))))
-
- ;; sum(binomial(b-k,k),k,0,floor(b/2))=fib(b+1)
- ((and (equal -1 (cdr n)) (equal 1 (cdr d)))
- ;; sum(binomial(a-k,b+k),k,l,h)=sum(binomial(a+b-k,k),k,l+b,h+b)
- (let ((h1 (m+ h (car d)))
- (l1 (m+ l (car d)))
- (a1 (m+ (car n) (car d))))
- ;; sum(binomial(a1-k,k),k,0,floor(a1/2))=fib(a1+1)
- ;; we only do sums with h>floor(a1/2)
- (if (and (integerp l1)
- (member (asksign (m- h1 (m// a1 2))) '($zero $positive) :test #'eq))
- (progn
- (adsum (m* y ($fib (m+ a1 1))))
- (when (> l1 0)
- (adsum (m* -1 y (dosum (list '(%binomial) (m- a1 poly-var) poly-var)
- poly-var 0 (m- l1 1) t :evaluate-summand nil)))))
- (adusum e))))
-
- ;; sum(binomial(n,2*k),k,0,floor(n/2))=2^(n-1)
- ;; sum(binomial(n,2*k+1),k,0,floor((n-1)/2))=2^(n-1)
- ((and (equal 0 (cdr n)) (equal 2 (cdr d)))
- ;; sum(binomial(a,2*k+b),k,l,h)=sum(binomial(a,2*k),k,l+b/2,h+b/2), b even
- ;; sum(binomial(a,2*k+b),k,l,h)=sum(binomial(a,2*k+1),k,l+(b-1)/2,h+(b-1)/2), b odd
- (let ((a (car n))
- (r1 (if (oddp (car d)) 1 0))
- (l1 (if (oddp (car d))
- (m+ l (truncate (1- (car d)) 2))
- (m+ l (truncate (car d) 2)))))
- (when (and (integerp l1)
- (member (asksign (m- a hi)) '($zero $positive) :test #'eq))
- (adsum (m* y (m^ 2 (m- a 1))))
- (when (> l1 0)
- (adsum (m* -1 y (dosum (list '(%binomial) a (m+ poly-var poly-var r1))
- poly-var 0 (m- l1 1) t :evaluate-summand nil)))))))
-
- ;; other sums we can't do
- (t
- (adusum e)))))
-
- (defun isum (e lo poly-var)
- (labels
- ((isum-giveup (e)
- (cond ((atom e) nil)
- ((eq (caar e) 'mexpt)
- (not (or (free (cadr e) poly-var)
- (ratp (caddr e) poly-var))))
- ((member (caar e) '(mplus mtimes) :test #'eq)
- (some #'identity (mapcar #'isum-giveup (cdr e))))
- (t)))
- (isum1 (e lo)
- (cond ((free e poly-var)
- (unless (eq (asksign e) '$zero)
- (throw 'isumout 'divergent)))
- ((ratp e poly-var)
- (adsum (ipolysum e lo)))
- ((eq (caar e) 'mplus)
- (mapc #'(lambda (x) (isum1 x lo)) (cdr e)))
- ( (isgeo e lo))
- ((adusum e))))
- (ipolysum (e lo)
- (ipoly1 ($expand e) lo))
- (ipoly1 (e lo)
- (cond ((smono e poly-var)
- (ipoly2 *a *n lo (asksign (simplify (list '(mplus) *n 1)))))
- ((mplusp e)
- (cons '(mplus) (mapcar #'(lambda (x) (ipoly1 x lo)) (cdr e))))
- (t (adusum e)
- 0)))
- (ipoly2 (a n lo sign)
- (cond ((member (asksign lo) '($zero $negative) :test #'eq)
- (throw 'isumout 'divergent)))
- (unless (equal lo 1)
- (let (($simpsum t))
- (adsum `((%sum)
- ((mtimes) ,a -1 ((mexpt) ,poly-var ,n))
- ,poly-var 1 ((mplus) -1 ,lo)))))
- (cond ((eq sign '$negative)
- (list '(mtimes) a ($zeta (meval (list '(mtimes) -1 n)))))
- ((throw 'isumout 'divergent))))
- (isgeo (e lo)
- (let ((r ($ratsimp (div* (maxima-substitute (list '(mplus) poly-var 1) poly-var e) e))))
- (and (free r poly-var)
- (isgeo1 (maxima-substitute lo poly-var e)
- r (asksign (simplify (list '(mplus) (list '(mabs) r) -1)))))))
- (isgeo1 (a r sign)
- (cond ((eq sign '$positive)
- (throw 'isumout 'divergent))
- ((eq sign '$zero)
- (throw 'isumout 'divergent))
- ((eq sign '$negative)
- (adsum (list '(mtimes) a
- (list '(mexpt) (list '(mplus) 1 (list '(mtimes) -1 r)) -1)))))))
- (cond ((isum-giveup e)
- (setq combin-sum nil combin-usum (list e)))
- ((eq (catch 'isumout (isum1 e lo)) 'divergent)
- (merror (intl:gettext "sum: sum is divergent."))))))
-
- (defun sumsum (e poly-var lo hi *plus *times)
- (setf combin-sum nil)
- (setf combin-usum nil)
- (labels
- ((finite-sum (e y lo hi)
- (cond ((null e))
- ((free e poly-var)
- (adsum (m* y e (m+ hi 1 (m- lo)))))
- ((poly? e poly-var)
- (adsum (m* y (fpolysum e lo hi poly-var))))
- ((eq (caar e) '%binomial) (fbino e y lo hi poly-var))
- ((eq (caar e) 'mplus)
- (mapc #'(lambda (q) (finite-sum q y lo hi)) (cdr e)))
- ((and (or (mtimesp e) (mexptp e) (mplusp e))
- (fsgeo e y lo hi)))
- (t
- (adusum e)
- nil)))
- (fsgeo (e y lo hi)
- (let ((r ($ratsimp (div* (maxima-substitute (list '(mplus) poly-var 1) poly-var e) e))))
- (cond ((equal r 1)
- (adsum
- (list '(mtimes)
- (list '(mplus) 1 hi (list '(mtimes) -1 lo))
- (maxima-substitute lo poly-var e))))
- ((free r poly-var)
- (adsum
- (list '(mtimes) y
- (maxima-substitute 0 poly-var e)
- (list '(mplus)
- (list '(mexpt) r (list '(mplus) hi 1))
- (list '(mtimes) -1 (list '(mexpt) r lo)))
- (list '(mexpt) (list '(mplus) r -1) -1))))))))
- (cond ((eq hi '$inf)
- (cond (*infsumsimp
- (isum e lo poly-var))
- ((setq combin-usum (list e)))))
- ((finite-sum e 1 lo hi)))
- (cond ((eq combin-sum nil)
- (return-from sumsum (list '(%sum) e poly-var lo hi))))
- (setq *plus
- (nconc (mapcar
- #'(lambda (q) (simptimes (list '(mtimes) *times q) 1 nil))
- combin-sum)
- *plus))
- (values (and combin-usum (setq combin-usum (list '(%sum) (simplus (cons '(plus) combin-usum) 1 t) poly-var lo hi)))
- *plus))))
-
;; product routines
(defmspec $product (l)
@@ -1378,17 +1112,6 @@
(setq l (cdr l))
(dosum (car l) (cadr l) (meval (caddr l)) (meval (cadddr l)) nil :evaluate-summand t))
-;; Is this guy actually looking at the value of its middle arg?
-
-(defun simpprod (x y z)
- (let (($ratsimpexpons t))
- (cond ((equal y 1)
- (setq y (maybe-simplifya (cadr x) z)))
- ((setq y (simptimes (list '(mexpt) (cadr x) y) 1 z)))))
- (simpprod1 y (caddr x)
- (maybe-simplifya (cadddr x) z)
- (maybe-simplifya (cadr (cdddr x)) z)))
-
(defmfun $taytorat (e)
(cond ((mbagp e) (cons (car e) (mapcar #'$taytorat (cdr e))))
((or (atom e) (not (member 'trunc (cdar e) :test #'eq))) (ratf e))
diff --git a/src/maxima.system b/src/maxima.system
index 2870fba3f..1cfc0b441 100644
--- a/src/maxima.system
+++ b/src/maxima.system
@@ -1097,6 +1097,8 @@
(:file "pade")
(:file "combin"
:depends-on ("asum" "series"))
+ (:file "sumprod"
+ :depends-on ("asum" "combin"))
;; This file should probably in the special-functions-misc
;; module, but things break if it gets moved.
(:file "conjugate")))
-----------------------------------------------------------------------
Summary of changes:
src/asum.lisp | 189 --------------------
src/combin.lisp | 277 -----------------------------
src/maxima.system | 2 +
src/sumprod-core.lisp | 479 ++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 481 insertions(+), 466 deletions(-)
create mode 100644 src/sumprod-core.lisp
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2026-04-29 20:49:57
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, rtoy-split-misc-module has been updated
via 2e1451ca87cae0d47a7bfabd97afd611e17bd038 (commit)
via 540a753306c8ff70475740c51a8577a3f4c64361 (commit)
from bdb9651e1505b2d84592294540742d72a54f3263 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 2e1451ca87cae0d47a7bfabd97afd611e17bd038
Author: Raymond Toy <toy...@gm...>
Date: Wed Apr 29 13:48:34 2026 -0700
Break cycle between asum and mdot
Move the function bbsort1 from asum to a new file, bbsort.lisp. This
breaks the cycle. The only cycle left is asum and combin. Leave a
comment about that. Update file dependencies accordingly.
diff --git a/src/asum.lisp b/src/asum.lisp
index 0dc3eb129..133af793c 100644
--- a/src/asum.lisp
+++ b/src/asum.lisp
@@ -1017,19 +1017,6 @@
e)
(t (neg e)))))
-(defun bbsort1 (l)
- (prog (sl sl1 antisym-sign)
- (if (or (null l) (null (cdr l))) (return (values l antisym-sign))
- (setq sl (list nil (car l))))
- loop (setq l (cdr l))
- (if (null l) (return (values (nreverse (cdr sl)) antisym-sign)))
- (setq sl1 sl)
- loop1(cond ((null (cdr sl1)) (rplacd sl1 (cons (car l) nil)))
- ((alike1 (car l) (cadr sl1)) (return (values 0 nil)))
- ((great (car l) (cadr sl1)) (rplacd sl1 (cons (car l) (cdr sl1))))
- (t (setq antisym-sign (not antisym-sign) sl1 (cdr sl1)) (go loop1)))
- (go loop)))
-
(setq opers (cons '$nary opers)
*opers-list (cons '($nary . nary1) *opers-list))
diff --git a/src/bbsort.lisp b/src/bbsort.lisp
new file mode 100644
index 000000000..a1022723f
--- /dev/null
+++ b/src/bbsort.lisp
@@ -0,0 +1,26 @@
+;;; -*- Mode: Lisp; Package: Maxima; Syntax: Common-Lisp; Base: 10 -*- ;;;;
+;;;
+;;; This file is part of the Maxima computer algebra project
+;;; (https://sourceforge.net/projects/maxima/)
+;;; SPDX-License-Identifier: GPL-2.0-or-later
+;;;
+;;; Maxima is copyrighted by its authors and licensed under the GNU
+;;; General Public License. This program is distributed WITHOUT ANY
+;;; WARRANTY. See COPYING and AUTHORS for details.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(in-package :maxima)
+
+(defun bbsort1 (l)
+ (prog (sl sl1 antisym-sign)
+ (if (or (null l) (null (cdr l))) (return (values l antisym-sign))
+ (setq sl (list nil (car l))))
+ loop (setq l (cdr l))
+ (if (null l) (return (values (nreverse (cdr sl)) antisym-sign)))
+ (setq sl1 sl)
+ loop1(cond ((null (cdr sl1)) (rplacd sl1 (cons (car l) nil)))
+ ((alike1 (car l) (cadr sl1)) (return (values 0 nil)))
+ ((great (car l) (cadr sl1)) (rplacd sl1 (cons (car l) (cdr sl1))))
+ (t (setq antisym-sign (not antisym-sign) sl1 (cdr sl1)) (go loop1)))
+ (go loop)))
+
diff --git a/src/maxima.system b/src/maxima.system
index e8db4107e..2870fba3f 100644
--- a/src/maxima.system
+++ b/src/maxima.system
@@ -1085,10 +1085,13 @@
"rat-macros" "declarations" "fundamental-macros"
"numerical-utilities"
"m2-pattern-matcher")
+ ;; No cycles between files except for the one between asum and combin.
:components
- ((:file "asum")
+ ((:file "bbsort")
(:file "mdot"
- :depends-on ("asum"))
+ :depends-on ("bbsort"))
+ (:file "asum"
+ :depends-on ("mdot"))
(:file "series"
:depends-on ("asum"))
(:file "pade")
commit 540a753306c8ff70475740c51a8577a3f4c64361
Author: Raymond Toy <toy...@gm...>
Date: Wed Apr 29 13:35:42 2026 -0700
Add comment to special-functions-misc and expression-utils
The files in each module are independent of every other file in the
same module. Add a comment to that effect.
diff --git a/src/maxima.system b/src/maxima.system
index b0090e2a5..e8db4107e 100644
--- a/src/maxima.system
+++ b/src/maxima.system
@@ -1097,11 +1097,6 @@
;; This file should probably in the special-functions-misc
;; module, but things break if it gets moved.
(:file "conjugate")))
- (:module series-expansion
- :source-pathname ""
- :components
- ((:file "series")
- (:file "pade")))
(:module number-theory
:source-pathname ""
:depends-on ("globals" "defmfun" "compatibility-macros1"
@@ -1120,6 +1115,7 @@
"rat-macros" "declarations" "fundamental-macros"
"numerical-utilities"
"m2-pattern-matcher" "sets")
+ ;; These files are completely independent of each other.
:components
((:file "hstep")
(:file "sinc")
@@ -1144,6 +1140,7 @@
"numerical-utilities"
"m2-pattern-matcher"
"miscellaneous")
+ ;; These files are completely independent of each other.
:components
((:file "scs")
(:file "optim")
-----------------------------------------------------------------------
Summary of changes:
src/asum.lisp | 13 -------------
src/bbsort.lisp | 26 ++++++++++++++++++++++++++
src/maxima.system | 14 +++++++-------
3 files changed, 33 insertions(+), 20 deletions(-)
create mode 100644 src/bbsort.lisp
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2026-04-29 20:27:29
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, rtoy-split-misc-module has been created
at bdb9651e1505b2d84592294540742d72a54f3263 (commit)
- Log -----------------------------------------------------------------
commit bdb9651e1505b2d84592294540742d72a54f3263
Author: Raymond Toy <toy...@gm...>
Date: Wed Apr 29 13:26:46 2026 -0700
Update per-file dependencies for modified modules
diff --git a/src/maxima.system b/src/maxima.system
index 638dc7ddc..b0090e2a5 100644
--- a/src/maxima.system
+++ b/src/maxima.system
@@ -1087,10 +1087,13 @@
"m2-pattern-matcher")
:components
((:file "asum")
- (:file "combin")
- (:file "mdot")
- (:file "series")
+ (:file "mdot"
+ :depends-on ("asum"))
+ (:file "series"
+ :depends-on ("asum"))
(:file "pade")
+ (:file "combin"
+ :depends-on ("asum" "series"))
;; This file should probably in the special-functions-misc
;; module, but things break if it gets moved.
(:file "conjugate")))
commit cdb8562ea48b3c6e14b79f5b86861c24fa4082f1
Author: Raymond Toy <toy...@gm...>
Date: Wed Apr 29 13:06:29 2026 -0700
Split miscellaneous module into new modules
Many files from the miscellaneous module have been moved to new
modules. These include:
* arrays - marray
* fortran-output - fortra
* expression-utils - scs, optim, mstuff, homog
* sets - nset
* number-theory - numth
* special-functions-misc - hstep, sinc, maxmin
Miscellaneous keeps asum, mdot, series, pade, conjugate.
We tried moving conjugate to special-functions-misc, but that causes
failures in the testsuite. Didn't figure out why, so we left it in
miscellaneious for now.
Testsuite passes.
diff --git a/src/maxima.system b/src/maxima.system
index 313d87cf1..638dc7ddc 100644
--- a/src/maxima.system
+++ b/src/maxima.system
@@ -682,7 +682,7 @@
(:module numeric-bigfloat
:source-pathname ""
:depends-on ("globals" "defmfun" #-gcl "package"
- #+gcl "proclaim")
+ #+gcl "proclaim")
:components
((:file "numeric")))
(:module server
@@ -1084,27 +1084,88 @@
"destructuring-let" "errset" "other-macros"
"rat-macros" "declarations" "fundamental-macros"
"numerical-utilities"
- "m2-pattern-matcher"
- "random")
+ "m2-pattern-matcher")
:components
- ((:file "scs")
- (:file "asum")
- (:file "fortra")
- (:file "optim")
- (:file "marray")
+ ((:file "asum")
+ (:file "combin")
(:file "mdot")
(:file "series")
- (:file "numth")
(:file "pade")
- (:file "homog")
- (:file "combin")
- ;; nset needs $random.
- (:file "nset")
- (:file "maxmin")
- (:file "conjugate")
- (:file "hstep")
+ ;; This file should probably in the special-functions-misc
+ ;; module, but things break if it gets moved.
+ (:file "conjugate")))
+ (:module series-expansion
+ :source-pathname ""
+ :components
+ ((:file "series")
+ (:file "pade")))
+ (:module number-theory
+ :source-pathname ""
+ :depends-on ("globals" "defmfun" "compatibility-macros1"
+ "reader" "utility-macros" "commands"
+ "destructuring-let" "errset" "other-macros"
+ "rat-macros" "declarations" "fundamental-macros"
+ "numerical-utilities"
+ "m2-pattern-matcher" "miscellaneous")
+ :components
+ ((:file "numth")))
+ (:module special-functions-misc
+ :source-pathname ""
+ :depends-on ("globals" "defmfun" "compatibility-macros1"
+ "reader" "utility-macros" "commands"
+ "destructuring-let" "errset" "other-macros"
+ "rat-macros" "declarations" "fundamental-macros"
+ "numerical-utilities"
+ "m2-pattern-matcher" "sets")
+ :components
+ ((:file "hstep")
(:file "sinc")
+ (:file "maxmin")))
+ (:module sets
+ :source-pathname ""
+ :depends-on ("globals" "defmfun" "compatibility-macros1"
+ "reader" "utility-macros" "commands"
+ "destructuring-let" "errset" "other-macros"
+ "rat-macros" "declarations" "fundamental-macros"
+ "numerical-utilities"
+ "m2-pattern-matcher"
+ "random" "miscellaneous")
+ :components
+ ((:file "nset")))
+ (:module expression-utils
+ :source-pathname ""
+ :depends-on ("globals" "defmfun" "compatibility-macros1"
+ "reader" "utility-macros" "commands"
+ "destructuring-let" "errset" "other-macros"
+ "rat-macros" "declarations" "fundamental-macros"
+ "numerical-utilities"
+ "m2-pattern-matcher"
+ "miscellaneous")
+ :components
+ ((:file "scs")
+ (:file "optim")
+ (:file "homog")
(:file "mstuff")))
+ (:module fortran-output
+ :source-pathname ""
+ :depends-on ("globals" "defmfun" "compatibility-macros1"
+ "reader" "utility-macros" "commands"
+ "destructuring-let" "errset" "other-macros"
+ "rat-macros" "declarations" "fundamental-macros"
+ "numerical-utilities"
+ "m2-pattern-matcher")
+ :components
+ ((:file "fortra")))
+ (:module arrays
+ :source-pathname ""
+ :depends-on ("globals" "defmfun" "compatibility-macros1"
+ "reader" "utility-macros" "commands"
+ "destructuring-let" "errset" "other-macros"
+ "rat-macros" "declarations" "fundamental-macros"
+ "numerical-utilities"
+ "m2-pattern-matcher")
+ :components
+ ((:file "marray")))
(:module polynomial
:source-pathname ""
:depends-on ("defmfun")
-----------------------------------------------------------------------
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2026-04-29 15:50:11
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, master has been updated
via 5276650f17110adf1c9cc61e9e5412225592045f (commit)
from 17f27f703ef9f948ff8e881cb1991d030c203829 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
-----------------------------------------------------------------------
Summary of changes:
{src => share/utils}/sloop.lisp | 0
src/maxima.asd | 3 ---
src/maxima.system | 4 ----
3 files changed, 7 deletions(-)
rename {src => share/utils}/sloop.lisp (100%)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2026-04-29 15:49:48
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, rtoy-remove-sloop has been created
at 5276650f17110adf1c9cc61e9e5412225592045f (commit)
- Log -----------------------------------------------------------------
commit 5276650f17110adf1c9cc61e9e5412225592045f
Author: Raymond Toy <toy...@gm...>
Date: Wed Apr 29 08:48:13 2026 -0700
Remove sloop from defsystem and move it to share
Maxima hasn't used sloop in a long time. Let's remove it from the
defsystems so it's not even compiled anymore. And to make it clear we
don't use it, move sloop.lisp to share/utils in case someone out there
is still using sloop. They can get it from share/utils.
diff --git a/src/sloop.lisp b/share/utils/sloop.lisp
similarity index 100%
rename from src/sloop.lisp
rename to share/utils/sloop.lisp
diff --git a/src/maxima.asd b/src/maxima.asd
index 97e32ade1..f6bfe3b7e 100644
--- a/src/maxima.asd
+++ b/src/maxima.asd
@@ -57,9 +57,6 @@
:pathname ""
:components ((:file "pregexp")
(:file "cl-info")))
- (:module sloop
- :pathname ""
- :components ((:file "sloop")))
(:module declarations
:pathname ""
:depends-on (globals)
diff --git a/src/maxima.system b/src/maxima.system
index 2c5d1ab6d..313d87cf1 100644
--- a/src/maxima.system
+++ b/src/maxima.system
@@ -174,10 +174,6 @@
:components
((:file "pregexp")
(:file "cl-info")))
- (:module sloop
- :source-pathname ""
- :components
- ((:file "sloop")))
(:module declarations
:source-pathname ""
:depends-on ("globals")
-----------------------------------------------------------------------
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2026-04-29 15:47:05
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, rtoy-refactor-common-functions has been created
at b0b399ad96762a69225c9f2005a1643d01bd417e (commit)
- Log -----------------------------------------------------------------
commit b0b399ad96762a69225c9f2005a1643d01bd417e
Author: Raymond Toy <toy...@gm...>
Date: Wed Apr 29 08:46:10 2026 -0700
Apply maxima.system changes to maxima.asd
Plus we also forgot to add nummod as a dependency of
rational-functions.
diff --git a/src/maxima.asd b/src/maxima.asd
index e4d708ccb..b9728dd97 100644
--- a/src/maxima.asd
+++ b/src/maxima.asd
@@ -601,7 +601,7 @@
compatibility-macros1 ifactor factoring
compatibility-macros declarations destructuring-let
fundamental-macros prerequisites utilities
- simp-utilities)
+ simp-utilities nummod)
;; Compile-time deps have no cross-file macros nor cross-file
;; specials. However, there are lots of mutually recursive calls
;; among the files. Pretty hard to fix this.
@@ -662,7 +662,7 @@
:pathname ""
:depends-on (globals defmfun trigonometry algebraic-database
utility-macros reader fundamental-macros other-macros
- prerequisites numerical-utilities)
+ prerequisites numerical-utilities nummod)
;; Module is a clean DAG at every level: function calls, macros,
;; special-variable references.
:components ((:file "bessel")
@@ -671,7 +671,7 @@
:pathname ""
:depends-on (globals defmfun trigonometry algebraic-database
utility-macros reader fundamental-macros other-macros
- prerequisites numerical-utilities)
+ prerequisites numerical-utilities nummod)
:components ((:file "ellipt")))
(:module numerical-functions
:pathname ""
@@ -694,7 +694,7 @@
:pathname ""
:depends-on (globals defmfun declarations destructuring-let
fundamental-macros prerequisites
- rat-macros utilities)
+ rat-macros utilities nummod)
;; Module is a clean DAG at every level: function calls,
;; macros, special-variable references.
:components ((:file "spgcd")
@@ -724,13 +724,24 @@
;; Variable predicates like FREEVAR, VARP.
:depends-on (simp-utilities)
:components ((:file "var-predicate")))
+ (:module nummod
+ :pathname ""
+ :depends-on (globals defmfun compatibility-macros
+ compatibility-macros1 rat-macros
+ fundamental-macros prerequisites
+ simp-utilities algebraic-database
+ commands rational-functions
+ simplification utilities
+ limits numeric-bigfloat)
+ :components
+ ((:file "nummod")))
(:module hypergeometric
:pathname ""
;; Simplification and evaluation of hypergeometric functions.
:depends-on (compatibility-macros1 declarations defmfun errset globals
miscellaneous other-macros prerequisites
utility-macros m2-pattern-matcher
- variable-predicates)
+ variable-predicates nummod)
;; Module is a clean DAG at every level: function calls, macros,
;; special-variable references.
:components
@@ -796,7 +807,7 @@
:depends-on (globals defmfun compatibility-macros declarations
errset fundamental-macros other-macros
prerequisites utility-macros taylor-series
- m2-pattern-matcher)
+ m2-pattern-matcher nummod)
;; Compile-time deps form a DAG. Runtime cycle trigi <->
;; trigo is structural (trigi calls trigo:trigexpand for
;; forward simplification, trigo calls trigi for shared
@@ -883,7 +894,7 @@
(:file "mdebug")))
(:module gamma-expint
:pathname ""
- :depends-on (numerical-utilities m2-pattern-matcher)
+ :depends-on (numerical-utilities m2-pattern-matcher nummod)
;; Module is a clean DAG at every level: function calls, macros,
;; special-variable references.
:components ((:file "expintegral")
@@ -901,7 +912,7 @@
reader utility-macros commands
destructuring-let errset other-macros
rat-macros declarations fundamental-macros
- numerical-utilities m2-pattern-matcher random)
+ numerical-utilities m2-pattern-matcher random nummod)
:components ((:file "scs")
(:file "asum")
(:file "fortra")
diff --git a/src/maxima.system b/src/maxima.system
index 05fb41c9b..d28063d83 100644
--- a/src/maxima.system
+++ b/src/maxima.system
@@ -748,7 +748,7 @@
"compatibility-macros1" "ifactor" "factoring"
"compatibility-macros" "declarations" "destructuring-let"
"fundamental-macros" "prerequisites" "utilities"
- "simp-utilities")
+ "simp-utilities" "nummod")
;; Compile-time deps ahve no cross-file macros nor
;; cross-file specials. However, there's lots of mutually
;; recursive calls amlong the files. Pretty hard to fix this.
commit 5ae01a6eac46186eb13527b1aeb2cf1469ac91c2
Author: Raymond Toy <toy...@gm...>
Date: Wed Apr 29 08:41:35 2026 -0700
Update dependencies for new nummod module
These modules now depend on nummod:
* bessel-functions — bessel.lisp uses $floor (12 sites)
* trigonometry — trigi.lisp, trigo.lisp use $ceiling, $floor, $mod (9
sites)
* miscellaneous — asum.lisp, combin.lisp, conjugate.lisp use $floor,
$ceiling, $mod, $charfun (8 sites)
* gamma-expint — gamma.lisp uses $floor (6 sites)
* elliptic-functions — ellipt.lisp uses %round (3 sites)
* gcd — ezgcd.lisp references $mod symbol (1 site, in (let (($gcd
'$mod)) ...)) rational-functions — rat3c.lisp references $mod
symbol (1 site, in (eq $gcd '$mod))
* hypergeometric — internal historical use; should declare it for
documentation even though nummod was previously a sibling file in
the same module
diff --git a/src/maxima.system b/src/maxima.system
index c00b0c6c0..05fb41c9b 100644
--- a/src/maxima.system
+++ b/src/maxima.system
@@ -812,7 +812,7 @@
:depends-on ("globals" "defmfun" "trigonometry" "algebraic-database"
"utility-macros" "reader"
"fundamental-macros" "other-macros" "prerequisites"
- "numerical-utilities")
+ "numerical-utilities" "nummod")
;; Module is a clean DAG at every level: function calls, macros,
;; special-variable references.
:components
@@ -823,7 +823,7 @@
:depends-on ("globals" "defmfun" "trigonometry" "algebraic-database"
"utility-macros" "reader"
"fundamental-macros" "other-macros" "prerequisites"
- "numerical-utilities")
+ "numerical-utilities" "nummod")
:components
((:file "ellipt")))
(:module numerical-functions
@@ -850,7 +850,7 @@
:source-pathname ""
:depends-on ("globals" "defmfun" "declarations" "destructuring-let"
"fundamental-macros" "prerequisites"
- "rat-macros" "utilities")
+ "rat-macros" "utilities" "nummod")
;; Module is a clean DAG at every level: function calls,
;; macros, special-variable references.
:components
@@ -902,7 +902,8 @@
"miscellaneous" "other-macros" "prerequisites" "utility-macros"
"m2-pattern-matcher"
"variable-predicates"
- "simplification")
+ "simplification"
+ "nummod")
:components
((:file "hyp")
;; There is a cycle between hypergeometric and nfloat. nfloat
@@ -971,7 +972,8 @@
"errset" "fundamental-macros" "other-macros"
"prerequisites" "utility-macros"
"taylor-series"
- "m2-pattern-matcher")
+ "m2-pattern-matcher"
+ "nummod")
;; Compile-time deps form a DAG. Runtime cycle trigi <->
;; trigo is structural (trigi calls trigo:trigexpand for
;; forward simplification, trigo calls trigi for shared
@@ -1074,7 +1076,7 @@
(:file "mdebug")))
(:module gamma-expint
:source-pathname ""
- :depends-on ("numerical-utilities" "m2-pattern-matcher")
+ :depends-on ("numerical-utilities" "m2-pattern-matcher" "nummod")
;; Module is a clean DAG at every level: function calls, macros,
;; special-variable references.
:components
@@ -1097,7 +1099,8 @@
"rat-macros" "declarations" "fundamental-macros"
"numerical-utilities"
"m2-pattern-matcher"
- "random")
+ "random"
+ "nummod")
:components
((:file "scs")
(:file "asum")
commit ab6e5293404a884369c3c368b79907576d1516cc
Author: Raymond Toy <toy...@gm...>
Date: Wed Apr 29 08:37:50 2026 -0700
nummod can be its own module
Because we moved bind-fpprec out, nummod can be its own module instead
of being in hypergeometric.
diff --git a/src/maxima.system b/src/maxima.system
index 48b7334c1..c00b0c6c0 100644
--- a/src/maxima.system
+++ b/src/maxima.system
@@ -885,22 +885,30 @@
:depends-on ("simp-utilities")
:components
((:file "var-predicate")))
+ (:module nummod :source-pathname ""
+ :depends-on ("globals" "defmfun" "compatibility-macros"
+ "compatibility-macros1" "rat-macros"
+ "fundamental-macros" "prerequisites"
+ "simp-utilities" "algebraic-database"
+ "commands" "rational-functions"
+ "simplification" "utilities"
+ "limits" "numeric-bigfloat")
+ :components
+ ((:file "nummod")))
(:module hypergeometric
:source-pathname ""
;; Simplification and evaluation of hypergeometric functions.
:depends-on ("compatibility-macros1" "declarations" "defmfun" "errset" "globals"
"miscellaneous" "other-macros" "prerequisites" "utility-macros"
"m2-pattern-matcher"
- "variable-predicates")
- ;; Module is a clean DAG at every level: function calls, macros,
- ;; special-variable references.
+ "variable-predicates"
+ "simplification")
:components
((:file "hyp")
- ;; Note: nummod uses apply-reflection-rule from trigi.
- ;; This should be updated.
- (:file "nummod")
- (:file "hypergeometric"
- :depends-on ("nummod"))
+ ;; There is a cycle between hypergeometric and nfloat. nfloat
+ ;; calls hypergeometric-by-series in hypergeometric. Not easy
+ ;; to move things around to break this circular dependency.
+ (:file "hypergeometric")
(:file "nfloat"
;; Comment in nfloat says hypergeometric needs to
;; be loaded first.
commit e6eaa464aa52a30ff57f892bdf802d5de05186b3
Author: Raymond Toy <toy...@gm...>
Date: Wed Apr 29 07:49:31 2026 -0700
Move apply-reflection-simp and bind-fpprec
apply-reflection-simp is used in lots of places but is defined in
trigi.lisp. It seems better to be in simp.lisp so that random files
don't depend on trigi.lisp.
Likewise, bind-fpprec was defined in nummod, but is also used in a few
other places. Since is deals just with bfloats, it's a lot more
natural to put it in bfloat.lisp instead of nummod.
diff --git a/src/bfloat.lisp b/src/bfloat.lisp
index b8476abfc..6cfd9a137 100644
--- a/src/bfloat.lisp
+++ b/src/bfloat.lisp
@@ -72,6 +72,13 @@
*bfmhalf* (list (car *bigfloatone*) (- (cadr *bigfloatone*)) 0))
q)
+;; Set fpprec to the given VAL and update the values of the bfloat constants.
+(defmacro bind-fpprec (val &body exprs)
+ `(let (fpprec *bigfloatzero* *bigfloatone* *bfhalf* *bfmhalf*)
+ (let (($fpprec (fpprec1 nil ,val)))
+ ,@exprs)))
+
+
;; FPSCAN is called by lexical scan when a
;; bigfloat is encountered. For example, 12.01B-3
;; would be the result of (FPSCAN '(/1 /2) '(/0 /1) '(/- /3))
diff --git a/src/nummod.lisp b/src/nummod.lisp
index 197009563..321fc97c0 100644
--- a/src/nummod.lisp
+++ b/src/nummod.lisp
@@ -95,11 +95,6 @@
;; For an example, see pretty-good-floor-or-ceiling. Code courtesy of Stavros Macrakis.
-(defmacro bind-fpprec (val &body exprs)
- `(let (fpprec *bigfloatzero* *bigfloatone* *bfhalf* *bfmhalf*)
- (let (($fpprec (fpprec1 nil ,val)))
- ,@exprs)))
-
;; Return true if the expression can be formed using rational numbers, logs, mplus, mexpt, or mtimes.
(defun use-radcan-p (e)
diff --git a/src/simp.lisp b/src/simp.lisp
index 2a8415eb4..4fe965d70 100644
--- a/src/simp.lisp
+++ b/src/simp.lisp
@@ -3309,3 +3309,10 @@
(let ((term (if (equal pow 1) var (power var pow))))
(if (memalike term (cdr e)) ($delete term e 1) 0)))
(t 0))))
+
+;; If OP has a reflection-rule, apply it.
+(defun apply-reflection-simp (op x &optional (b t))
+ (let ((f (get op 'reflection-rule)))
+ (if (and b f (great (neg x) x)) (funcall f op x) nil)))
+
+
diff --git a/src/trigi.lisp b/src/trigi.lisp
index 7e335fa7e..a42871eef 100644
--- a/src/trigi.lisp
+++ b/src/trigi.lisp
@@ -378,10 +378,6 @@
;; could cause an infinite loop. I could protect against this possibility with
;; (and b f (great (neg x) x) (not (great x (neg x))).
-(defun apply-reflection-simp (op x &optional (b t))
- (let ((f (get op 'reflection-rule)))
- (if (and b f (great (neg x) x)) (funcall f op x) nil)))
-
(defun taylorize (op x)
(if ($taylorp x)
(mfuncall '$apply '$taylor `((mlist) ((,op) ,($ratdisrep x)) ,@(cdr ($taylorinfo x)))) nil))
commit 5e1428d484eca5d3ece313f182c1803c31228ea1
Author: Raymond Toy <toy...@gm...>
Date: Wed Apr 29 07:40:58 2026 -0700
Forgot to update files that depended on "float"
Need to be renamed to "bfloat", obviously.
diff --git a/src/maxima.asd b/src/maxima.asd
index 9308c2373..e4d708ccb 100644
--- a/src/maxima.asd
+++ b/src/maxima.asd
@@ -534,7 +534,7 @@
(:file "bfloat"
:depends-on ("logarc" "rpart"))
(:file "csimp2"
- :depends-on ("csimp" "float" "rpart"))
+ :depends-on ("csimp" "bfloat" "rpart"))
(:file "zero"
:depends-on ("rpart"))
(:file "halfangle"
diff --git a/src/maxima.system b/src/maxima.system
index b8a4087bf..48b7334c1 100644
--- a/src/maxima.system
+++ b/src/maxima.system
@@ -678,7 +678,7 @@
(:file "bfloat"
:depends-on ("logarc" "rpart"))
(:file "csimp2"
- :depends-on ("csimp" "float" "rpart"))
+ :depends-on ("csimp" "bfloat" "rpart"))
(:file "zero"
:depends-on ("rpart"))
(:file "halfangle"
commit 530eefaa986606a010555adff15025648dba2cba
Author: Raymond Toy <toy...@gm...>
Date: Wed Apr 29 07:36:14 2026 -0700
Rename float.lisp to bfloat.lisp
float.lisp is really about bfloat numbers in Maxima. Change the name
to bfloat to show what it's really about.
Update defsystems appropriately.
This change was suggested by Stavros and makes a lot of sense to me,
especially because we have other files named "float-foo" that really
are about standard Lisp floats, not bfloats.
diff --git a/src/float.lisp b/src/bfloat.lisp
similarity index 100%
rename from src/float.lisp
rename to src/bfloat.lisp
diff --git a/src/maxima.asd b/src/maxima.asd
index 97e32ade1..9308c2373 100644
--- a/src/maxima.asd
+++ b/src/maxima.asd
@@ -531,7 +531,7 @@
(:file "logarc")
(:file "rpart"
:depends-on ("logarc"))
- (:file "float"
+ (:file "bfloat"
:depends-on ("logarc" "rpart"))
(:file "csimp2"
:depends-on ("csimp" "float" "rpart"))
diff --git a/src/maxima.system b/src/maxima.system
index 2c5d1ab6d..b8a4087bf 100644
--- a/src/maxima.system
+++ b/src/maxima.system
@@ -675,7 +675,7 @@
(:file "logarc")
(:file "rpart"
:depends-on ("logarc"))
- (:file "float"
+ (:file "bfloat"
:depends-on ("logarc" "rpart"))
(:file "csimp2"
:depends-on ("csimp" "float" "rpart"))
-----------------------------------------------------------------------
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2026-04-29 14:32:58
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, master has been updated
via 17f27f703ef9f948ff8e881cb1991d030c203829 (commit)
from 08273f153cce38e9bf1fafd1abe12ab8deda19de (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 17f27f703ef9f948ff8e881cb1991d030c203829
Author: Raymond Toy <toy...@gm...>
Date: Wed Apr 29 07:31:19 2026 -0700
Neatly indent maxima.system and maxima.asd
Use the elisp code I sent to the mailing list on Apr 28, 2026. I just
applied the reformat function to each of the defsystem forms. No
other changes, so this is mostly a white-space change.
diff --git a/src/maxima.asd b/src/maxima.asd
index f1da790ab..97e32ade1 100644
--- a/src/maxima.asd
+++ b/src/maxima.asd
@@ -30,40 +30,50 @@
:licence "GPL"
;;:serial t
:components
- ((:module package :pathname ""
- :components (#-gcl (:file "maxima-package")
- #+ecl (:file "ecl-port")
- (:file "autoconf-variables" :depends-on ("maxima-package"))))
- (:module float-format :pathname ""
- :components
- ((:file "float-format")))
- (:module intl :pathname ""
- :components
- (
- ;; Some versions of CMUCL already have a compatible version of
- ;; INTL, so skip it if we have it.
- #+#.(cl:if (cl:and (cl:member :cmu cl:*features*) (cl:find-package '#:intl)) '(or) '(and))
- (:file "intl")))
- (:module globals :pathname ""
- :depends-on (intl compatibility-macros1)
- :components
- ((:file "globals")))
- (:module info :pathname ""
- :components ((:file "pregexp")
- (:file "cl-info")))
- (:module sloop :pathname ""
- :components ((:file "sloop")))
- (:module declarations :pathname ""
- :depends-on (globals)
- :components ((:file "lmdcls")))
- (:module destructuring-let :pathname ""
- :components ((:file "letmac")))
+ ((:module package
+ :pathname ""
+ :components (#-gcl (:file "maxima-package")
+ #+ecl (:file "ecl-port")
+ (:file "autoconf-variables"
+ :depends-on ("maxima-package"))))
+ (:module float-format
+ :pathname ""
+ :components
+ ((:file "float-format")))
+ (:module intl
+ :pathname ""
+ :components
+ (
+ ;; Some versions of CMUCL already have a compatible version of
+ ;; INTL, so skip it if we have it.
+ #+#.(cl:if (cl:and (cl:member :cmu cl:*features*) (cl:find-package '#:intl)) '(or) '(and))
+ (:file "intl")))
+ (:module globals
+ :pathname ""
+ :depends-on (intl compatibility-macros1)
+ :components
+ ((:file "globals")))
+ (:module info
+ :pathname ""
+ :components ((:file "pregexp")
+ (:file "cl-info")))
+ (:module sloop
+ :pathname ""
+ :components ((:file "sloop")))
+ (:module declarations
+ :pathname ""
+ :depends-on (globals)
+ :components ((:file "lmdcls")))
+ (:module destructuring-let
+ :pathname ""
+ :components ((:file "letmac")))
;; Contains macros and conditions related to maxima errors.
;; Without this, there would be a circular dependency utilities ->
;; i-o -> utilities because of the error macros.
- (:module errset :pathname ""
- :components
- ((:file "errset")))
+ (:module errset
+ :pathname ""
+ :components
+ ((:file "errset")))
;; This is a critical dependency so that we read floats
;; with the correct type. And transitively, everything
;; that depends on compatibility-macros1 will have the
@@ -72,820 +82,884 @@
;; It appears as if any module that has literal floats
;; depends on compatibility-macros1, so they all implicitly
;; depend on float-format.
- (:module compatibility-macros1 :pathname ""
- :depends-on (float-format)
- :components ((:file "generr")
- (:file "clmacs")))
- (:module defmfun :pathname ""
- :depends-on (globals)
- :components ((:file "defmfun-check")))
- (:module float-properties :pathname ""
- :depends-on (defmfun)
- :components ((:file "float-properties")))
- (:module compatibility-macros :pathname ""
- :depends-on (defmfun compatibility-macros1)
- :components (#+gcl (:file "gcl-compat")
- (:file "commac")))
- (:module prerequisites :pathname ""
- :depends-on (defmfun compatibility-macros1)
- :components ((:file "mormac")
- (:file "compat")))
- (:module maxima-language-compiler-macros :pathname ""
- :depends-on (defmfun compatibility-macros1 declarations
- prerequisites compatibility-macros)
- :components ((:file "transm")))
- (:module command-line :pathname ""
- :depends-on (defmfun getopt)
- :components ((:file "command-line")))
- (:module getopt :pathname ""
- :depends-on (defmfun)
- :components ((:file "getopt")))
- (:module fundamental-macros :pathname ""
- :depends-on (globals defmfun compatibility-macros1
- declarations prerequisites
- compatibility-macros)
- ;; Module is a clean DAG at every level: function calls,
- ;; macros, special-variable references.
- :components ((:file "defcal")
- (:file "maxmac")))
- (:module utility-macros :pathname ""
- :depends-on (defmfun compatibility-macros compatibility-macros1
- prerequisites errset)
- :components ((:file "mforma")))
- (:module simp-utilities :pathname ""
- ;; There are other dependencies. We call $ratdisrep,
- ;; $outofpois, $ratsimp and others. These are all
- ;; function calls. Can't really do anything about that.
- ;; and can't depend on those modules because that causes a
- ;; circular dependency.
- :depends-on (prerequisites defmfun)
- ;; Module is a clean DAG at every level.
- :components
- ((:file "mopers")
- (:file "opers"
- :depends-on ("mopers"))
- (:file "simp-utils"
- :depends-on ("mopers"))
- (:file "mutils"
- :depends-on ("simp-utils"))
- (:file "simp"
- :depends-on ("simp-utils" "opers" "mopers" "mutils"))))
- (:module nformat :pathname ""
- ;; poisson-series just to get $outofpois defined before its use.
- :depends-on (float-properties simp-utilities poisson-series)
- :components ((:file "nforma")))
- (:module basic-utilities :pathname ""
- ;; Note: this depends on merror which causes a circular
- ;; dependency.
- :depends-on (simp-utilities fundamental-macros nformat)
- ;; Module is a clean DAG at every level: function calls,
- ;; macros, special-variable references.
- :components ((:file "opr-util")
- (:file "basic-util")))
- (:module m2-pattern-matcher :pathname ""
- :depends-on (simp-utilities)
- ;; Module is a clean DAG at every level: function calls,
- ;; macros, special-variable references.
- :components ((:file "schatc")
- (:file "schatc-util")))
+ (:module compatibility-macros1
+ :pathname ""
+ :depends-on (float-format)
+ :components ((:file "generr")
+ (:file "clmacs")))
+ (:module defmfun
+ :pathname ""
+ :depends-on (globals)
+ :components ((:file "defmfun-check")))
+ (:module float-properties
+ :pathname ""
+ :depends-on (defmfun)
+ :components ((:file "float-properties")))
+ (:module compatibility-macros
+ :pathname ""
+ :depends-on (defmfun compatibility-macros1)
+ :components (#+gcl (:file "gcl-compat")
+ (:file "commac")))
+ (:module prerequisites
+ :pathname ""
+ :depends-on (defmfun compatibility-macros1)
+ :components ((:file "mormac")
+ (:file "compat")))
+ (:module maxima-language-compiler-macros
+ :pathname ""
+ :depends-on (defmfun compatibility-macros1 declarations
+ prerequisites compatibility-macros)
+ :components ((:file "transm")))
+ (:module command-line
+ :pathname ""
+ :depends-on (defmfun getopt)
+ :components ((:file "command-line")))
+ (:module getopt
+ :pathname ""
+ :depends-on (defmfun)
+ :components ((:file "getopt")))
+ (:module fundamental-macros
+ :pathname ""
+ :depends-on (globals defmfun compatibility-macros1
+ declarations prerequisites
+ compatibility-macros)
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
+ :components ((:file "defcal")
+ (:file "maxmac")))
+ (:module utility-macros
+ :pathname ""
+ :depends-on (defmfun compatibility-macros compatibility-macros1
+ prerequisites errset)
+ :components ((:file "mforma")))
+ (:module simp-utilities
+ :pathname ""
+ ;; There are other dependencies. We call $ratdisrep,
+ ;; $outofpois, $ratsimp and others. These are all
+ ;; function calls. Can't really do anything about that.
+ ;; and can't depend on those modules because that causes a
+ ;; circular dependency.
+ :depends-on (prerequisites defmfun)
+ ;; Module is a clean DAG at every level.
+ :components
+ ((:file "mopers")
+ (:file "opers"
+ :depends-on ("mopers"))
+ (:file "simp-utils"
+ :depends-on ("mopers"))
+ (:file "mutils"
+ :depends-on ("simp-utils"))
+ (:file "simp"
+ :depends-on ("simp-utils" "opers" "mopers" "mutils"))))
+ (:module nformat
+ :pathname ""
+ ;; poisson-series just to get $outofpois defined before its use.
+ :depends-on (float-properties simp-utilities poisson-series)
+ :components ((:file "nforma")))
+ (:module basic-utilities
+ :pathname ""
+ ;; Note: this depends on merror which causes a circular
+ ;; dependency.
+ :depends-on (simp-utilities fundamental-macros nformat)
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
+ :components ((:file "opr-util")
+ (:file "basic-util")))
+ (:module m2-pattern-matcher
+ :pathname ""
+ :depends-on (simp-utilities)
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
+ :components ((:file "schatc")
+ (:file "schatc-util")))
;; This contains the reader macro #$...$ so we want to compile this
;; as early as possible before anything uses it.
- (:module reader :pathname ""
- :depends-on (globals defmfun compatibility-macros compatibility-macros1
- declarations fundamental-macros prerequisites
- utility-macros simp-utilities)
- :components ((:file "nparse")))
- (:module other-macros :pathname ""
- :depends-on (defmfun compatibility-macros1 declarations
- prerequisites utility-macros)
- ;; Module is a clean DAG at every level.
- :components ((:file "mrgmac")
- (:file "rzmac")
- (:file "strmac")
- (:file "displm")
- (:file "safe-recursion")))
- (:module rat-macros :pathname ""
- :depends-on (defmfun compatibility-macros declarations
- fundamental-macros prerequisites)
- :components ((:file "ratmac")
- (:file "mhayat")))
+ (:module reader
+ :pathname ""
+ :depends-on (globals defmfun compatibility-macros compatibility-macros1
+ declarations fundamental-macros prerequisites
+ utility-macros simp-utilities)
+ :components ((:file "nparse")))
+ (:module other-macros
+ :pathname ""
+ :depends-on (defmfun compatibility-macros1 declarations
+ prerequisites utility-macros)
+ ;; Module is a clean DAG at every level.
+ :components ((:file "mrgmac")
+ (:file "rzmac")
+ (:file "strmac")
+ (:file "displm")
+ (:file "safe-recursion")))
+ (:module rat-macros
+ :pathname ""
+ :depends-on (defmfun compatibility-macros declarations
+ fundamental-macros prerequisites)
+ :components ((:file "ratmac")
+ (:file "mhayat")))
#+gcl (:file "optimize") ; jfa check this
- (:module utilities :pathname ""
- :depends-on (globals defmfun utility-macros compatibility-macros
- compatibility-macros1 declarations
- fundamental-macros prerequisites)
- ;; Module is a clean DAG at every level: function calls,
- ;; macros, special-variable references.
- :components ((:file "utils")
- (:file "sumcon")
- (:file "sublis")
- (:file "merror")
- (:file "mformt")
- (:file "mutils-fn")
- (:file "outmis")
- (:file "ar")))
- (:module commands :pathname ""
- :depends-on (globals defmfun compatibility-macros compatibility-macros1
- declarations fundamental-macros prerequisites
- utility-macros simp-utilities basic-utilities)
- :components ((:file "comm")
- (:file "comm2")))
- (:module evaluator :pathname ""
- :depends-on (globals defmfun utility-macros compatibility-macros
- compatibility-macros1 declarations
- destructuring-let fundamental-macros
- prerequisites utilities commands simp-utilities)
- ;; There are no circular dependencies among these files.
- :components ((:file "mmacro")
- (:file "mlisp" :depends-on ("mmacro"))
- (:file "buildq" :depends-on ("mlisp"))))
+ (:module utilities
+ :pathname ""
+ :depends-on (globals defmfun utility-macros compatibility-macros
+ compatibility-macros1 declarations
+ fundamental-macros prerequisites)
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
+ :components ((:file "utils")
+ (:file "sumcon")
+ (:file "sublis")
+ (:file "merror")
+ (:file "mformt")
+ (:file "mutils-fn")
+ (:file "outmis")
+ (:file "ar")))
+ (:module commands
+ :pathname ""
+ :depends-on (globals defmfun compatibility-macros compatibility-macros1
+ declarations fundamental-macros prerequisites
+ utility-macros simp-utilities basic-utilities)
+ :components ((:file "comm")
+ (:file "comm2")))
+ (:module evaluator
+ :pathname ""
+ :depends-on (globals defmfun utility-macros compatibility-macros
+ compatibility-macros1 declarations
+ destructuring-let fundamental-macros
+ prerequisites utilities commands simp-utilities)
+ ;; There are no circular dependencies among these files.
+ :components ((:file "mmacro")
+ (:file "mlisp"
+ :depends-on ("mmacro"))
+ (:file "buildq"
+ :depends-on ("mlisp"))))
;; The free versions of Allegro and Lispworks have a heap limit.
;; Let's not compile these routines so that we can at least
;; get the rest of maxima built.
(:module numerical
- :depends-on (defmfun)
- ;; Compile-time deps form a DAG.
- :components
- (
- (:module packages :pathname ""
- :components
- ((:file "f2cl-lib-package")
- (:file "slatec")))
- (:module f2cl-lib :pathname ""
- :depends-on (packages)
- :components ((:file "f2cl-lib")))
- (:module slatec
- :pathname "slatec"
- :depends-on (f2cl-lib packages)
- #+(or allegro-cl-trial lispworks-personal-edition) :load-only
- #+(or allegro-cl-trial lispworks-personal-edition) t
- :components
- (
- (:file "fdump")
- (:file "j4save")
- (:file "initds"
- :depends-on ("xermsg"))
- (:file "xgetua")
- (:file "xermsg"
- :depends-on ("fdump" "j4save" "xercnt" "xerhlt" "xerprn" "xersve"))
- (:file "xercnt")
- (:file "xerhlt")
- (:file "xerprn"
- :depends-on ("xgetua"))
- (:file "xersve"
- :depends-on ("j4save"))
- (:file "dcsevl"
- :depends-on ("xermsg"))
+ :depends-on (defmfun)
+ ;; Compile-time deps form a DAG.
+ :components
+ (
+ (:module packages
+ :pathname ""
+ :components
+ ((:file "f2cl-lib-package")
+ (:file "slatec")))
+ (:module f2cl-lib
+ :pathname ""
+ :depends-on (packages)
+ :components ((:file "f2cl-lib")))
+ (:module slatec
+ :pathname "slatec"
+ :depends-on (f2cl-lib packages)
+ #+(or allegro-cl-trial lispworks-personal-edition) :load-only
+ #+(or allegro-cl-trial lispworks-personal-edition) t
+ :components
+ (
+ (:file "fdump")
+ (:file "j4save")
+ (:file "initds"
+ :depends-on ("xermsg"))
+ (:file "xgetua")
+ (:file "xermsg"
+ :depends-on ("fdump" "j4save" "xercnt" "xerhlt" "xerprn" "xersve"))
+ (:file "xercnt")
+ (:file "xerhlt")
+ (:file "xerprn"
+ :depends-on ("xgetua"))
+ (:file "xersve"
+ :depends-on ("j4save"))
+ (:file "dcsevl"
+ :depends-on ("xermsg"))
- ;; Gamma function
- (:file "d9lgmc"
- :depends-on ("dcsevl" "initds" "xermsg"))
- (:file "dgamlm"
- :depends-on ("xermsg"))
- (:file "dgamma"
- :depends-on ("d9lgmc" "dcsevl" "dgamlm" "initds" "xermsg"))
- (:file "dgamln")
- (:file "dlngam"
- :depends-on ("d9lgmc" "dgamma" "xermsg"))
+ ;; Gamma function
+ (:file "d9lgmc"
+ :depends-on ("dcsevl" "initds" "xermsg"))
+ (:file "dgamlm"
+ :depends-on ("xermsg"))
+ (:file "dgamma"
+ :depends-on ("d9lgmc" "dcsevl" "dgamlm" "initds" "xermsg"))
+ (:file "dgamln")
+ (:file "dlngam"
+ :depends-on ("d9lgmc" "dgamma" "xermsg"))
- ;; Bessel J functions
- (:file "d9b0mp"
- :depends-on ("dcsevl" "initds" "xermsg"))
- (:file "d9b1mp"
- :depends-on ("dcsevl" "initds" "xermsg"))
- (:file "dbesj0"
- :depends-on ("d9b0mp" "dcsevl" "initds"))
- (:file "dbesj1"
- :depends-on ("d9b1mp" "dcsevl" "initds" "xermsg"))
- (:file "djairy")
- (:file "dasyjy")
- (:file "dbesj"
- :depends-on ("dasyjy" "djairy" "dlngam" "xermsg"))
- ;; Bessel I functions
- (:file "dbsi0e"
- :depends-on ("dcsevl" "initds"))
- (:file "dbsi1e"
- :depends-on ("dcsevl" "initds" "xermsg"))
- (:file "dbesi0"
- :depends-on ("dbsi0e" "dcsevl" "initds" "xermsg"))
- (:file "dbesi1"
- :depends-on ("dbsi1e" "dcsevl" "initds" "xermsg"))
- (:file "dasyik")
- (:file "dbesi"
- :depends-on ("dasyik" "dlngam" "xermsg"))
- (:file "zbesi"
- :depends-on ("zabs" "zbinu"))
+ ;; Bessel J functions
+ (:file "d9b0mp"
+ :depends-on ("dcsevl" "initds" "xermsg"))
+ (:file "d9b1mp"
+ :depends-on ("dcsevl" "initds" "xermsg"))
+ (:file "dbesj0"
+ :depends-on ("d9b0mp" "dcsevl" "initds"))
+ (:file "dbesj1"
+ :depends-on ("d9b1mp" "dcsevl" "initds" "xermsg"))
+ (:file "djairy")
+ (:file "dasyjy")
+ (:file "dbesj"
+ :depends-on ("dasyjy" "djairy" "dlngam" "xermsg"))
+ ;; Bessel I functions
+ (:file "dbsi0e"
+ :depends-on ("dcsevl" "initds"))
+ (:file "dbsi1e"
+ :depends-on ("dcsevl" "initds" "xermsg"))
+ (:file "dbesi0"
+ :depends-on ("dbsi0e" "dcsevl" "initds" "xermsg"))
+ (:file "dbesi1"
+ :depends-on ("dbsi1e" "dcsevl" "initds" "xermsg"))
+ (:file "dasyik")
+ (:file "dbesi"
+ :depends-on ("dasyik" "dlngam" "xermsg"))
+ (:file "zbesi"
+ :depends-on ("zabs" "zbinu"))
- ;; Bessel J function for complex
- ;; arg and real order.
+ ;; Bessel J function for complex
+ ;; arg and real order.
- (:file "zabs")
- (:file "zacai"
- :depends-on ("zabs" "zasyi" "zbknu" "zmlri" "zs1s2" "zseri"))
- (:file "zairy"
- :depends-on ("zabs" "zacai" "zbknu" "zexp" "zsqrt"))
- (:file "zasyi"
- :depends-on ("zabs" "zdiv" "zexp" "zmlt" "zsqrt"))
- (:file "zbesj"
- :depends-on ("zabs" "zbinu"))
- (:file "zbinu"
- :depends-on ("zabs" "zasyi" "zbuni" "zmlri" "zseri" "zuoik" "zwrsk"))
- (:file "zbknu"
- :depends-on ("dgamln" "zabs" "zdiv" "zexp" "zkscl"
- "zlog" "zmlt" "zshch" "zsqrt" "zuchk"))
- (:file "zbuni"
- :depends-on ("zabs" "zuni1" "zuni2"))
- (:file "zdiv")
- (:file "zexp")
- (:file "zkscl"
- :depends-on ("zabs" "zlog" "zuchk"))
- (:file "zlog"
- :depends-on ("zabs"))
- (:file "zmlri"
- :depends-on ("dgamln" "zabs" "zexp" "zlog" "zmlt"))
- (:file "zmlt")
- (:file "zrati"
- :depends-on ("zabs" "zdiv"))
- (:file "zs1s2"
- :depends-on ("zabs" "zexp" "zlog"))
- (:file "zseri"
- :depends-on ("dgamln" "zabs" "zdiv" "zlog" "zmlt" "zuchk"))
- (:file "zshch")
- (:file "zsqrt" :depends-on ("zabs"))
- (:file "zuchk")
- (:file "zunhj"
- :depends-on ("zabs" "zdiv" "zlog" "zsqrt"))
- (:file "zuni1"
- :depends-on ("zabs" "zuchk" "zunik" "zuoik"))
- (:file "zuni2"
- :depends-on ("zabs" "zairy" "zuchk" "zunhj" "zuoik"))
- (:file "zunik"
- :depends-on ("zdiv" "zlog" "zsqrt"))
- (:file "zuoik"
- :depends-on ("zabs" "zlog" "zuchk" "zunhj" "zunik"))
- (:file "zwrsk"
- :depends-on ("zabs" "zbknu" "zrati"))
+ (:file "zabs")
+ (:file "zacai"
+ :depends-on ("zabs" "zasyi" "zbknu" "zmlri" "zs1s2" "zseri"))
+ (:file "zairy"
+ :depends-on ("zabs" "zacai" "zbknu" "zexp" "zsqrt"))
+ (:file "zasyi"
+ :depends-on ("zabs" "zdiv" "zexp" "zmlt" "zsqrt"))
+ (:file "zbesj"
+ :depends-on ("zabs" "zbinu"))
+ (:file "zbinu"
+ :depends-on ("zabs" "zasyi" "zbuni" "zmlri" "zseri" "zuoik" "zwrsk"))
+ (:file "zbknu"
+ :depends-on ("dgamln" "zabs" "zdiv" "zexp" "zkscl"
+ "zlog" "zmlt" "zshch" "zsqrt" "zuchk"))
+ (:file "zbuni"
+ :depends-on ("zabs" "zuni1" "zuni2"))
+ (:file "zdiv")
+ (:file "zexp")
+ (:file "zkscl"
+ :depends-on ("zabs" "zlog" "zuchk"))
+ (:file "zlog"
+ :depends-on ("zabs"))
+ (:file "zmlri"
+ :depends-on ("dgamln" "zabs" "zexp" "zlog" "zmlt"))
+ (:file "zmlt")
+ (:file "zrati"
+ :depends-on ("zabs" "zdiv"))
+ (:file "zs1s2"
+ :depends-on ("zabs" "zexp" "zlog"))
+ (:file "zseri"
+ :depends-on ("dgamln" "zabs" "zdiv" "zlog" "zmlt" "zuchk"))
+ (:file "zshch")
+ (:file "zsqrt"
+ :depends-on ("zabs"))
+ (:file "zuchk")
+ (:file "zunhj"
+ :depends-on ("zabs" "zdiv" "zlog" "zsqrt"))
+ (:file "zuni1"
+ :depends-on ("zabs" "zuchk" "zunik" "zuoik"))
+ (:file "zuni2"
+ :depends-on ("zabs" "zairy" "zuchk" "zunhj" "zuoik"))
+ (:file "zunik"
+ :depends-on ("zdiv" "zlog" "zsqrt"))
+ (:file "zuoik"
+ :depends-on ("zabs" "zlog" "zuchk" "zunhj" "zunik"))
+ (:file "zwrsk"
+ :depends-on ("zabs" "zbknu" "zrati"))
- ;; Bessel Y functions
- (:file "dbesy0"
- :depends-on ("d9b0mp" "dbesj0" "dcsevl" "initds" "xermsg"))
- (:file "dbesy1"
- :depends-on ("d9b1mp" "dbesj1" "dcsevl" "initds" "xermsg"))
- (:file "dbesy"
- :depends-on ("dasyjy" "dbesy0" "dbesy1" "dbsynu" "dyairy" "xermsg"))
- (:file "dbsynu"
- :depends-on ("dgamma" "xermsg"))
- (:file "dyairy")
+ ;; Bessel Y functions
+ (:file "dbesy0"
+ :depends-on ("d9b0mp" "dbesj0" "dcsevl" "initds" "xermsg"))
+ (:file "dbesy1"
+ :depends-on ("d9b1mp" "dbesj1" "dcsevl" "initds" "xermsg"))
+ (:file "dbesy"
+ :depends-on ("dasyjy" "dbesy0" "dbesy1" "dbsynu" "dyairy" "xermsg"))
+ (:file "dbsynu"
+ :depends-on ("dgamma" "xermsg"))
+ (:file "dyairy")
- (:file "zbesy"
- :depends-on ("zbesh"))
- (:file "zbesh"
- :depends-on ("zabs" "zacon" "zbknu" "zbunk" "zuoik"))
- (:file "zacon"
- :depends-on ("zabs" "zbinu" "zbknu" "zmlt" "zs1s2"))
- (:file "zbunk"
- :depends-on ("zunk1" "zunk2"))
- (:file "zunk1"
- :depends-on ("zabs" "zs1s2" "zuchk" "zunik"))
- (:file "zunk2"
- :depends-on ("zabs" "zairy" "zs1s2" "zuchk" "zunhj"))
+ (:file "zbesy"
+ :depends-on ("zbesh"))
+ (:file "zbesh"
+ :depends-on ("zabs" "zacon" "zbknu" "zbunk" "zuoik"))
+ (:file "zacon"
+ :depends-on ("zabs" "zbinu" "zbknu" "zmlt" "zs1s2"))
+ (:file "zbunk"
+ :depends-on ("zunk1" "zunk2"))
+ (:file "zunk1"
+ :depends-on ("zabs" "zs1s2" "zuchk" "zunik"))
+ (:file "zunk2"
+ :depends-on ("zabs" "zairy" "zs1s2" "zuchk" "zunhj"))
- ;; Bessel K functions
- (:file "dbesk0"
- :depends-on ("dbesi0" "dbsk0e" "dcsevl" "initds" "xermsg"))
- (:file "dbsk0e"
- :depends-on ("dbesi0" "dcsevl" "initds" "xermsg"))
- (:file "dbesk1"
- :depends-on ("dbesi1" "dbsk1e" "dcsevl" "initds" "xermsg"))
- (:file "dbsk1e"
- :depends-on ("dbesi1" "dcsevl" "initds" "xermsg"))
- (:file "dbesk"
- :depends-on ("dasyik" "dbesk0" "dbesk1" "dbsk0e" "dbsk1e" "dbsknu" "xermsg"))
- (:file "dbsknu"
- :depends-on ("dgamma" "xermsg"))
- (:file "zbesk"
- :depends-on ("zabs" "zacon" "zbknu" "zbunk" "zuoik"))
+ ;; Bessel K functions
+ (:file "dbesk0"
+ :depends-on ("dbesi0" "dbsk0e" "dcsevl" "initds" "xermsg"))
+ (:file "dbsk0e"
+ :depends-on ("dbesi0" "dcsevl" "initds" "xermsg"))
+ (:file "dbesk1"
+ :depends-on ("dbesi1" "dbsk1e" "dcsevl" "initds" "xermsg"))
+ (:file "dbsk1e"
+ :depends-on ("dbesi1" "dcsevl" "initds" "xermsg"))
+ (:file "dbesk"
+ :depends-on ("dasyik" "dbesk0" "dbesk1" "dbsk0e" "dbsk1e" "dbsknu" "xermsg"))
+ (:file "dbsknu"
+ :depends-on ("dgamma" "xermsg"))
+ (:file "zbesk"
+ :depends-on ("zabs" "zacon" "zbknu" "zbunk" "zuoik"))
- ;; Airy functions
- (:file "d9aimp"
- :depends-on ("dcsevl" "initds" "xermsg"))
- (:file "daie"
- :depends-on ("d9aimp" "dcsevl" "initds"))
- (:file "dai"
- :depends-on ("d9aimp" "daie" "dcsevl" "initds" "xermsg"))
- (:file "dbie"
- :depends-on ("d9aimp" "dcsevl" "initds"))
- (:file "dbi"
- :depends-on ("d9aimp" "dbie" "dcsevl" "initds" "xermsg"))
- (:file "zbiry"
- :depends-on ("zabs" "zbinu" "zdiv" "zsqrt"))
- ;; Error functions
- (:file "derf"
- :depends-on ("dcsevl" "derfc" "initds"))
- (:file "derfc"
- :depends-on ("dcsevl" "initds" "xermsg"))
- ;; Exponential integrals
- (:file "de1"
- :depends-on ("dcsevl" "initds" "xermsg"))
- (:file "dei"
- :depends-on ("de1"))
- (:file "dspenc"
- :depends-on ("d9upak"))
- (:file "d9upak")))
- (:module quadpack
- :pathname "slatec"
- #+(or allegro-cl-trial lispworks-personal-edition) :load-only
- #+(or allegro-cl-trial lispworks-personal-edition) t
- :components
- (
- ;; Support
- (:file "dqwgtf")
- (:file "dqcheb")
- (:file "dqk15w")
- (:file "dqwgts")
- (:file "dqwgtc")
- (:file "dgtsl")
- ;; Core integration routines
- (:file "dqk15")
- (:file "dqk31")
- (:file "dqk41")
- (:file "dqk51")
- (:file "dqk61")
- (:file "dqk21")
- (:file "dqk15i")
- (:file "dqelg")
- (:file "dqpsrt")
- (:file "dqc25s"
- :depends-on ("dqcheb" "dqk15w"))
- (:file "dqmomo")
- (:file "dqc25c"
- :depends-on ("dqcheb"
- "dqk15w"))
- (:file "dqc25f"
- :depends-on ("dgtsl"
- "dqcheb"
- "dqk15w"
- "dqwgtf"))
- ;; Basic integrators
- (:file "dqage"
- :depends-on ("dqk15"
- "dqk31"
- "dqk41"
- "dqk51"
- "dqk61"
- "dqk21"
- "dqpsrt"))
- (:file "dqagie"
- :depends-on ("dqelg"
- "dqk15i"
- "dqpsrt"))
- (:file "dqagp"
- :depends-on ("dqagpe"))
- (:file "dqagpe"
- :depends-on ("dqelg"
- "dqpsrt"
- "dqk21"))
- (:file "dqagse"
- :depends-on ("dqk21"
- "dqelg"
- "dqpsrt"))
- (:file "dqawfe"
- :depends-on ("dqagie"
- "dqawoe"
- "dqelg"))
- (:file "dqawoe"
- :depends-on ("dqc25f"
- "dqpsrt"
- "dqelg"))
- (:file "dqawse"
- :depends-on ("dqc25s"
- "dqmomo"
- "dqpsrt"))
- (:file "dqawce"
- :depends-on ("dqc25c"
- "dqpsrt"))
- ;; Simplified interface routines
- (:file "dqng")
- (:file "dqag"
- :depends-on ("dqage"))
- (:file "dqags"
- :depends-on ("dqagse"))
- (:file "dqagi"
- :depends-on ("dqagie"))
- (:file "dqawf"
- :depends-on ("dqawfe"))
- (:file "dqawo"
- :depends-on ("dqawoe"))
- (:file "dqaws"
- :depends-on ("dqawse"))
- (:file "dqawc"
- :depends-on ("dqawce"))
- ;; Maxima interface
- (:file "quadpack")))))
- (:module simplification :pathname ""
- :depends-on (globals defmfun reader utility-macros compatibility-macros
- compatibility-macros1 declarations destructuring-let
- fundamental-macros i-o other-macros prerequisites
- numerical-utilities simp-utilities)
- ;; Module is a clean DAG at every level: function calls, macros,
- ;; special-variable references.
- :components
- ((:file "simp-fn")
- (:file "csimp")
- (:file "logarc")
- (:file "rpart"
- :depends-on ("logarc"))
- (:file "float"
- :depends-on ("logarc" "rpart"))
- (:file "csimp2"
- :depends-on ("csimp" "float" "rpart"))
- (:file "zero"
- :depends-on ("rpart"))
- (:file "halfangle"
- :depends-on ("rpart"))))
- (:module numeric-bigfloat :pathname ""
- :depends-on (globals defmfun package)
- :components ((:file "numeric")))
- (:module server :pathname ""
- :depends-on (defmfun)
- :components ((:file "server")))
- (:module i-o :pathname ""
- :depends-on (globals defmfun compatibility-macros compatibility-macros1
- declarations fundamental-macros other-macros
- prerequisites utilities utility-macros
- evaluator)
- ;; Module is a clean DAG at every level: function calls, macros,
- ;; special-variable references.
- :components
- ((:file "prompt-util")
- (:file "suprv1"
- :depends-on ("prompt-util"))
- (:file "macsys"
- :depends-on ("prompt-util" "suprv1"))
- (:file "testsuite")
- (:file "mload"
- :depends-on ("prompt-util" "suprv1" "macsys" "testsuite"))
- (:file "mactex"
- :depends-on ("prompt-util" "suprv1"))
- (:file "dskfn"
- :depends-on ("prompt-util" "suprv1"))))
- (:module factoring :pathname ""
- :depends-on (globals defmfun compatibility-macros compatibility-macros1
- declarations fundamental-macros other-macros
- prerequisites rat-macros utilities)
- ;; Compile-time deps form a DAG. Runtime cycle by design:
- ;; factor <-> algfac (7+7 calls) -- factor's general
- ;; factoring dispatches to algfac for algebraic
- ;; extensions; algfac uses factor's primitives. Several
- ;; declare-top specials in factor.lisp (var, res, trl*,
- ;; ind, alc, *xn, split*) are mutated cross-file.
- :components
- ((:file "factor")
- (:file "lesfac"
- :depends-on ("factor"))
- (:file "ufact"
- :depends-on ("factor"))
- (:file "result"
- :depends-on ("factor" "lesfac" "ufact"))
- (:file "algfac"
- :depends-on ("factor" "result"))
- (:file "nalgfa"
- :depends-on ("factor" "result"))))
- (:module ifactor :pathname ""
- :depends-on (defmfun prerequisites rat-macros utility-macros)
- :components ((:file "ifactor")))
- (:module rational-functions :pathname ""
- :depends-on (globals defmfun rat-macros other-macros
- compatibility-macros1 ifactor factoring
- compatibility-macros declarations destructuring-let
- fundamental-macros prerequisites utilities
- simp-utilities)
- ;; Compile-time deps have no cross-file macros nor cross-file
- ;; specials. However, there are lots of mutually recursive calls
- ;; among the files. Pretty hard to fix this.
- :components
- ((:file "rat3a")
- (:file "rat3b")
- (:file "rat3d")
- (:file "rat3c")
- (:file "rat3e")
- (:file "nrat4")
- (:file "ratout")))
- (:module maxima-language-compiler :pathname ""
- :depends-on (globals defmfun maxima-language-compiler-macros evaluator
- compatibility-macros compatibility-macros1
- declarations destructuring-let fundamental-macros
- i-o prerequisites)
- ;; Compile-time deps form a DAG. Three small runtime
- ;; cycles remain, all between transl (the translator core)
- ;; and its tightly-coupled helpers: trans2 (array
- ;; dispatch), trutil (defvar pushing), trmode (mode
- ;; system).
- :components
- ((:file "transl")
- (:file "transs"
- :depends-on ("transl"))
- (:file "trans1")
- (:file "trans2"
- :depends-on ("transl"))
- (:file "trans3"
- :depends-on ("transl"))
- (:file "trans4"
- :depends-on ("trprop"))
- (:file "trans5"
- :depends-on ("transl"))
- (:file "transf")
- (:file "troper"
- :depends-on ("transl"))
- (:file "trutil"
- :depends-on ("transl"))
- (:file "trmode"
- :depends-on ("transl"))
- (:file "trdata")
- (:file "trpred")
- (:file "transq")
- (:file "acall")
- (:file "fcall")
- (:file "evalw")
- (:file "trprop")
- (:file "mdefun")))
- (:module numerical-utilities :pathname ""
- :depends-on (simp-utilities ; for add/mul/sub
- globals ; $numer, errorsw
- utilities) ; merror
- :components ((:file "numerical-utils")))
- (:module bessel-functions :pathname ""
- :depends-on (globals defmfun trigonometry algebraic-database
- utility-macros reader fundamental-macros other-macros
- prerequisites numerical-utilities)
- ;; Module is a clean DAG at every level: function calls, macros,
- ;; special-variable references.
- :components ((:file "bessel")
- (:file "airy")))
- (:module elliptic-functions :pathname ""
- :depends-on (globals defmfun trigonometry algebraic-database
- utility-macros reader fundamental-macros other-macros
- prerequisites numerical-utilities)
- :components ((:file "ellipt")))
- (:module numerical-functions :pathname ""
- :depends-on (globals defmfun algebraic-database
- utility-macros reader fundamental-macros other-macros
- prerequisites)
- :components ((:file "intpol")))
- (:module display :pathname ""
- :depends-on (globals defmfun compatibility-macros1 declarations
- fundamental-macros prerequisites simp-utilities)
- ;; Module is a clean DAG at every level: function calls, macros,
- ;; special-variable references.
- :components ((:file "mgrind")
- (:file "grind"
- :depends-on ("mgrind"))
- (:file "displa"
- :depends-on ("mgrind" "grind"))))
- (:module gcd :pathname ""
- :depends-on (globals defmfun declarations destructuring-let
- fundamental-macros prerequisites
- rat-macros utilities)
- ;; Module is a clean DAG at every level: function calls,
- ;; macros, special-variable references.
- :components ((:file "spgcd")
- (:file "ezgcd")))
- (:module documentation :pathname ""
- :depends-on (globals defmfun fundamental-macros)
- :components ((:file "verify-html-index")
- (:file "macdes"
- :depends-on ("verify-html-index"))))
- (:module algebraic-database :pathname ""
- :depends-on (globals defmfun compatibility-macros1 declarations
- evaluator fundamental-macros other-macros
- prerequisites utility-macros)
- ;; Compile-time deps form a DAG. Two runtime cycles are
- ;; structural: compar <-> db (sign/comparison logic vs the
- ;; fact database) and askp <-> compar (interactive
- ;; integer/parity queries vs the predicates that prompt
- ;; them).
- :components ((:file "inmis")
- (:file "db")
- (:file "compar")
- (:file "askp")))
- (:module variable-predicates :pathname ""
- ;; Variable predicates like FREEVAR, VARP.
- :depends-on (simp-utilities)
- :components ((:file "var-predicate")))
- (:module hypergeometric :pathname ""
- ;; Simplification and evaluation of hypergeometric functions.
- :depends-on (compatibility-macros1 declarations defmfun errset globals
- miscellaneous other-macros prerequisites
- utility-macros m2-pattern-matcher
- variable-predicates)
- ;; Module is a clean DAG at every level: function calls, macros,
- ;; special-variable references.
- :components
- ((:file "hyp")
- ;; Note: nummod uses apply-reflection-rule from trigi.
- ;; This should be updated.
- (:file "nummod")
- (:file "hypergeometric"
- :depends-on ("nummod"))
- (:file "nfloat"
- ;; Comment in nfloat says hypergeometric needs to
- ;; be loaded first.
- :depends-on ("hypergeometric"))))
- (:module integration :pathname ""
- :depends-on (globals defmfun compatibility-macros declarations
- destructuring-let errset fundamental-macros
- prerequisites rat-macros utility-macros
- m2-pattern-matcher variable-predicates)
- ;; Compile-time deps form a DAG. Runtime: risch.lisp and
- ;; sin.lisp are mutually recursive by design -- risch's
- ;; hypertrigint1 falls back to sin's sinint when Risch
- ;; can't make progress, and sin's integrate1 dispatches to
- ;; risch's rischint. The cycle is structural; not broken.
- ;;
- ;; This could be fixed by moving lots of code around to a
- ;; separate file.
- :components
- ((:file "sin-util")
- (:file "sinint")
- (:file "risch"
- :depends-on ("sinint"))
- (:file "irinte"
- :depends-on ("sin-util"))
- (:file "sin"
- :depends-on ("sin-util" "irinte"))))
- (:module taylor-series :pathname ""
- :depends-on (globals defmfun compatibility-macros
- compatibility-macros1 declarations
- destructuring-let fundamental-macros
- other-macros prerequisites rat-macros errset
- simp-utilities)
- :components ((:file "hayat")))
- (:module definite-integration :pathname ""
- :depends-on (globals defmfun declarations destructuring-let
- fundamental-macros other-macros
- prerequisites hypergeometric
- m2-pattern-matcher variable-predicates)
- ;; Module is a clean DAG at every level: function calls, macros,
- ;; special-variable references.
- :components
- ((:file "residu")
- (:file "defint"
- :depends-on ("residu"))
- (:file "hypgeo"
- :depends-on ("residu"))
- (:file "laplac"
- :depends-on ("defint" "hypgeo" "residu"))))
- (:module trigonometry :pathname ""
- :depends-on (globals defmfun compatibility-macros declarations
- errset fundamental-macros other-macros
- prerequisites utility-macros taylor-series
- m2-pattern-matcher)
- ;; Compile-time deps form a DAG. Runtime cycle trigi <->
- ;; trigo is structural (trigi calls trigo:trigexpand for
- ;; forward simplification, trigo calls trigi for shared
- ;; eval/reflection helpers).
- :components ((:file "trigi")
- (:file "trigo")
- (:file "trgred")))
- (:module special-functions :pathname ""
- :depends-on (globals defmfun reader utility-macros
- other-macros rat-macros numerical-utilities)
- :components ((:file "specfn")))
- (:module matrix-algebra :pathname ""
- :depends-on (globals defmfun compatibility-macros compatibility-macros1
- declarations fundamental-macros
- maxima-language-compiler-macros prerequisites
- utility-macros destructuring-let utilities)
- ;; Module is a clean DAG at every level: function calls, macros,
- ;; special-variable references.
- :components ((:file "mat")
- (:file "matrix" :depends-on ("mat"))
- (:file "linnew" :depends-on ("mat" "matrix"))))
- (:module determinants :pathname ""
- :depends-on (globals defmfun declarations
- maxima-language-compiler-macros prerequisites)
- ;; Module is a clean DAG at every level: function calls,
- ;; macros, special-variable references.
- :components ((:file "sprdet")
- (:file "newinv")
- (:file "newdet")))
- (:module pattern-matching :pathname ""
- :depends-on (globals defmfun compatibility-macros1 declarations
- evaluator fundamental-macros prerequisites
- rat-macros simp-utilities)
- ;; Module is a clean DAG at every level: function calls,
- ;; macros, special-variable references.
- :components ((:file "matcom")
- (:file "matrun")
- (:file "nisimp")))
- (:module limits :pathname ""
- :depends-on (globals defmfun compatibility-macros1 declarations
- destructuring-let errset fundamental-macros
- other-macros prerequisites utilities utility-macros)
- ;; Compile-time deps form a DAG. Runtime cycle limit <->
- ;; tlimit is structural (mutual dispatch between limit and
- ;; Taylor-limit).
- :components ((:file "tlimit")
- (:file "limit")))
- (:module solve :pathname ""
- :depends-on (globals defmfun compatibility-macros1 compatibility-macros
- declarations fundamental-macros other-macros
- prerequisites rat-macros utilities utility-macros)
- ;; Compile-time deps form a DAG. Two runtime call cycles
- ;; remain by design: solve <-> psolve (cubic/quartic
- ;; formulas tightly coupled to solve's display
- ;; machinery), and solve <-> algsys (univariate vs
- ;; system-of-equations dispatchers calling each other).
- ;; sqrtdenest, polyrz, and cpoly are leaves, called from
- ;; algsys.
- :components
- ((:file "sqrtdenest")
- (:file "polyrz")
- (:file "cpoly")
- (:file "solve")
- (:file "psolve"
- :depends-on ("solve"))
- (:file "algsys"
- :depends-on ("solve" "sqrtdenest" "polyrz" "cpoly"))))
- (:module debugging :pathname ""
- :depends-on (globals defmfun compatibility-macros1 compatibility-macros
- declarations fundamental-macros prerequisites
- utility-macros)
- ;; Module is a clean DAG at every level: function calls,
- ;; macros, special-variable references.
- :components ((:file "mtrace")
- (:file "mdebug")))
- (:module gamma-expint :pathname ""
- :depends-on (numerical-utilities m2-pattern-matcher)
- ;; Module is a clean DAG at every level: function calls, macros,
- ;; special-variable references.
- :components ((:file "expintegral")
- (:file "gamma"
- :depends-on ("expintegral"))
- (:file "plasma")))
- (:module random :pathname ""
- ;; Mersenne Twister random-number implementation.
- :depends-on (globals utilities)
- :components ((:file "rand-mt19937")))
- (:module miscellaneous :pathname ""
- :depends-on (globals defmfun compatibility-macros1
- reader utility-macros commands
- destructuring-let errset other-macros
- rat-macros declarations fundamental-macros
- numerical-utilities m2-pattern-matcher random)
- :components ((:file "scs")
- (:file "asum")
- (:file "fortra")
- (:file "optim")
- (:file "marray")
- (:file "mdot")
- (:file "series")
- (:file "numth")
- (:file "pade")
- (:file "homog")
- (:file "combin")
- ;; nset needs $random.
- (:file "nset")
- (:file "maxmin")
- (:file "conjugate")
- (:file "hstep")
- (:file "sinc")
- (:file "mstuff")))
- (:module polynomial :pathname ""
- :depends-on (defmfun)
- :components ((:file "polynomialp")))
- (:module poisson-series :pathname ""
- :depends-on (defmfun declarations fundamental-macros prerequisites)
- ;; Module is a clean DAG at every level: function calls, macros,
- ;; special-variable references.
- :components ((:file "pois2")
- (:file "pois3"
- :depends-on ("pois2"))))
- (:module translated-packages :pathname ""
- :depends-on (globals maxima-language-compiler-macros compatibility-macros1
- defmfun declarations errset miscellaneous
- other-macros prerequisites utility-macros)
- ;; Module is a clean DAG at every level: function calls,
- ;; macros, special-variable references.
- :components ((:file "desoln")
- (:file "elim")
- (:file "invert")
- (:file "todd-coxeter")
- (:file "plot")))
- (:module graphics-drivers :pathname ""
- :depends-on (defmfun)
- ;; Module is a clean DAG at every level: function calls,
- ;; macros, special-variable references.
- :components ((:file "plotcolors")
- (:file "gnuplot_def")
- (:file "xmaxima_def")
- (:file "geomview_def")))
- (:module final :pathname ""
- :depends-on (globals defmfun compatibility-macros1)
- ;; These are not compiled, for whatever reason
- :components ((:file "autol")
- (:file "max_ext")
- (:file "../lisp-utils/defsystem") ;; some share packages use defsystem
- (:file "init-cl"))))
+ ;; Airy functions
+ (:file "d9aimp"
+ :depends-on ("dcsevl" "initds" "xermsg"))
+ (:file "daie"
+ :depends-on ("d9aimp" "dcsevl" "initds"))
+ (:file "dai"
+ :depends-on ("d9aimp" "daie" "dcsevl" "initds" "xermsg"))
+ (:file "dbie"
+ :depends-on ("d9aimp" "dcsevl" "initds"))
+ (:file "dbi"
+ :depends-on ("d9aimp" "dbie" "dcsevl" "initds" "xermsg"))
+ (:file "zbiry"
+ :depends-on ("zabs" "zbinu" "zdiv" "zsqrt"))
+ ;; Error functions
+ (:file "derf"
+ :depends-on ("dcsevl" "derfc" "initds"))
+ (:file "derfc"
+ :depends-on ("dcsevl" "initds" "xermsg"))
+ ;; Exponential integrals
+ (:file "de1"
+ :depends-on ("dcsevl" "initds" "xermsg"))
+ (:file "dei"
+ :depends-on ("de1"))
+ (:file "dspenc"
+ :depends-on ("d9upak"))
+ (:file "d9upak")))
+ (:module quadpack
+ :pathname "slatec"
+ #+(or allegro-cl-trial lispworks-personal-edition) :load-only
+ #+(or allegro-cl-trial lispworks-personal-edition) t
+ :components
+ (
+ ;; Support
+ (:file "dqwgtf")
+ (:file "dqcheb")
+ (:file "dqk15w")
+ (:file "dqwgts")
+ (:file "dqwgtc")
+ (:file "dgtsl")
+ ;; Core integration routines
+ (:file "dqk15")
+ (:file "dqk31")
+ (:file "dqk41")
+ (:file "dqk51")
+ (:file "dqk61")
+ (:file "dqk21")
+ (:file "dqk15i")
+ (:file "dqelg")
+ (:file "dqpsrt")
+ (:file "dqc25s"
+ :depends-on ("dqcheb" "dqk15w"))
+ (:file "dqmomo")
+ (:file "dqc25c"
+ :depends-on ("dqcheb"
+ "dqk15w"))
+ (:file "dqc25f"
+ :depends-on ("dgtsl"
+ "dqcheb"
+ "dqk15w"
+ "dqwgtf"))
+ ;; Basic integrators
+ (:file "dqage"
+ :depends-on ("dqk15"
+ "dqk31"
+ "dqk41"
+ "dqk51"
+ "dqk61"
+ "dqk21"
+ "dqpsrt"))
+ (:file "dqagie"
+ :depends-on ("dqelg"
+ "dqk15i"
+ "dqpsrt"))
+ (:file "dqagp"
+ :depends-on ("dqagpe"))
+ (:file "dqagpe"
+ :depends-on ("dqelg"
+ "dqpsrt"
+ "dqk21"))
+ (:file "dqagse"
+ :depends-on ("dqk21"
+ "dqelg"
+ "dqpsrt"))
+ (:file "dqawfe"
+ :depends-on ("dqagie"
+ "dqawoe"
+ "dqelg"))
+ (:file "dqawoe"
+ :depends-on ("dqc25f"
+ "dqpsrt"
+ "dqelg"))
+ (:file "dqawse"
+ :depends-on ("dqc25s"
+ "dqmomo"
+ "dqpsrt"))
+ (:file "dqawce"
+ :depends-on ("dqc25c"
+ "dqpsrt"))
+ ;; Simplified interface routines
+ (:file "dqng")
+ (:file "dqag"
+ :depends-on ("dqage"))
+ (:file "dqags"
+ :depends-on ("dqagse"))
+ (:file "dqagi"
+ :depends-on ("dqagie"))
+ (:file "dqawf"
+ :depends-on ("dqawfe"))
+ (:file "dqawo"
+ :depends-on ("dqawoe"))
+ (:file "dqaws"
+ :depends-on ("dqawse"))
+ (:file "dqawc"
+ :depends-on ("dqawce"))
+ ;; Maxima interface
+ (:file "quadpack")))))
+ (:module simplification
+ :pathname ""
+ :depends-on (globals defmfun reader utility-macros compatibility-macros
+ compatibility-macros1 declarations destructuring-let
+ fundamental-macros i-o other-macros prerequisites
+ numerical-utilities simp-utilities)
+ ;; Module is a clean DAG at every level: function calls, macros,
+ ;; special-variable references.
+ :components
+ ((:file "simp-fn")
+ (:file "csimp")
+ (:file "logarc")
+ (:file "rpart"
+ :depends-on ("logarc"))
+ (:file "float"
+ :depends-on ("logarc" "rpart"))
+ (:file "csimp2"
+ :depends-on ("csimp" "float" "rpart"))
+ (:file "zero"
+ :depends-on ("rpart"))
+ (:file "halfangle"
+ :depends-on ("rpart"))))
+ (:module numeric-bigfloat
+ :pathname ""
+ :depends-on (globals defmfun package)
+ :components ((:file "numeric")))
+ (:module server
+ :pathname ""
+ :depends-on (defmfun)
+ :components ((:file "server")))
+ (:module i-o
+ :pathname ""
+ :depends-on (globals defmfun compatibility-macros compatibility-macros1
+ declarations fundamental-macros other-macros
+ prerequisites utilities utility-macros
+ evaluator)
+ ;; Module is a clean DAG at every level: function calls, macros,
+ ;; special-variable references.
+ :components
+ ((:file "prompt-util")
+ (:file "suprv1"
+ :depends-on ("prompt-util"))
+ (:file "macsys"
+ :depends-on ("prompt-util" "suprv1"))
+ (:file "testsuite")
+ (:file "mload"
+ :depends-on ("prompt-util" "suprv1" "macsys" "testsuite"))
+ (:file "mactex"
+ :depends-on ("prompt-util" "suprv1"))
+ (:file "dskfn"
+ :depends-on ("prompt-util" "suprv1"))))
+ (:module factoring
+ :pathname ""
+ :depends-on (globals defmfun compatibility-macros compatibility-macros1
+ declarations fundamental-macros other-macros
+ prerequisites rat-macros utilities)
+ ;; Compile-time deps form a DAG. Runtime cycle by design:
+ ;; factor <-> algfac (7+7 calls) -- factor's general
+ ;; factoring dispatches to algfac for algebraic
+ ;; extensions; algfac uses factor's primitives. Several
+ ;; declare-top specials in factor.lisp (var, res, trl*,
+ ;; ind, alc, *xn, split*) are mutated cross-file.
+ :components
+ ((:file "factor")
+ (:file "lesfac"
+ :depends-on ("factor"))
+ (:file "ufact"
+ :depends-on ("factor"))
+ (:file "result"
+ :depends-on ("factor" "lesfac" "ufact"))
+ (:file "algfac"
+ :depends-on ("factor" "result"))
+ (:file "nalgfa"
+ :depends-on ("factor" "result"))))
+ (:module ifactor
+ :pathname ""
+ :depends-on (defmfun prerequisites rat-macros utility-macros)
+ :components ((:file "ifactor")))
+ (:module rational-functions
+ :pathname ""
+ :depends-on (globals defmfun rat-macros other-macros
+ compatibility-macros1 ifactor factoring
+ compatibility-macros declarations destructuring-let
+ fundamental-macros prerequisites utilities
+ simp-utilities)
+ ;; Compile-time deps have no cross-file macros nor cross-file
+ ;; specials. However, there are lots of mutually recursive calls
+ ;; among the files. Pretty hard to fix this.
+ :components
+ ((:file "rat3a")
+ (:file "rat3b")
+ (:file "rat3d")
+ (:file "rat3c")
+ (:file "rat3e")
+ (:file "nrat4")
+ (:file "ratout")))
+ (:module maxima-language-compiler
+ :pathname ""
+ :depends-on (globals defmfun maxima-language-compiler-macros evaluator
+ compatibility-macros compatibility-macros1
+ declarations destructuring-let fundamental-macros
+ i-o prerequisites)
+ ;; Compile-time deps form a DAG. Three small runtime
+ ;; cycles remain, all between transl (the translator core)
+ ;; and its tightly-coupled helpers: trans2 (array
+ ;; dispatch), trutil (defvar pushing), trmode (mode
+ ;; system).
+ :components
+ ((:file "transl")
+ (:file "transs"
+ :depends-on ("transl"))
+ (:file "trans1")
+ (:file "trans2"
+ :depends-on ("transl"))
+ (:file "trans3"
+ :depends-on ("transl"))
+ (:file "trans4"
+ :depends-on ("trprop"))
+ (:file "trans5"
+ :depends-on ("transl"))
+ (:file "transf")
+ (:file "troper"
+ :depends-on ("transl"))
+ (:file "trutil"
+ :depends-on ("transl"))
+ (:file "trmode"
+ :depends-on ("transl"))
+ (:file "trdata")
+ (:file "trpred")
+ (:file "transq")
+ (:file "acall")
+ (:file "fcall")
+ (:file "evalw")
+ (:file "trprop")
+ (:file "mdefun")))
+ (:module numerical-utilities
+ :pathname ""
+ :depends-on (simp-utilities ; for add/mul/sub
+ globals ; $numer, errorsw
+ utilities) ; merror
+ :components ((:file "numerical-utils")))
+ (:module bessel-functions
+ :pathname ""
+ :depends-on (globals defmfun trigonometry algebraic-database
+ utility-macros reader fundamental-macros other-macros
+ prerequisites numerical-utilities)
+ ;; Module is a clean DAG at every level: function calls, macros,
+ ;; special-variable references.
+ :components ((:file "bessel")
+ (:file "airy")))
+ (:module elliptic-functions
+ :pathname ""
+ :depends-on (globals defmfun trigonometry algebraic-database
+ utility-macros reader fundamental-macros other-macros
+ prerequisites numerical-utilities)
+ :components ((:file "ellipt")))
+ (:module numerical-functions
+ :pathname ""
+ :depends-on (globals defmfun algebraic-database
+ utility-macros reader fundamental-macros other-macros
+ prerequisites)
+ :components ((:file "intpol")))
+ (:module display
+ :pathname ""
+ :depends-on (globals defmfun compatibility-macros1 declarations
+ fundamental-macros prerequisites simp-utilities)
+ ;; Module is a clean DAG at every level: function calls, macros,
+ ;; special-variable references.
+ :components ((:file "mgrind")
+ (:file "grind"
+ :depends-on ("mgrind"))
+ (:file "displa"
+ :depends-on ("mgrind" "grind"))))
+ (:module gcd
+ :pathname ""
+ :depends-on (globals defmfun declarations destructuring-let
+ fundamental-macros prerequisites
+ rat-macros utilities)
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
+ :components ((:file "spgcd")
+ (:file "ezgcd")))
+ (:module documentation
...
[truncated message content] |
|
From: tomasriker <tom...@us...> - 2026-04-29 09:49:07
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, master has been updated
via 08273f153cce38e9bf1fafd1abe12ab8deda19de (commit)
via c29ab4613c53eee2324cb49883f0d3aeb635f30e (commit)
via 27e8b3f366d62130bbe6296b653d59044b9881f5 (commit)
from 62fd1db87d31526ad82c2210f75371a04da9c3a3 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 08273f153cce38e9bf1fafd1abe12ab8deda19de
Merge: c29ab4613 62fd1db87
Author: David Scherfgen <d.s...@go...>
Date: Wed Apr 29 11:40:37 2026 +0200
Merge branch 'master' of https://git.code.sf.net/p/maxima/code
commit c29ab4613c53eee2324cb49883f0d3aeb635f30e
Author: David Scherfgen <d.s...@go...>
Date: Sat Apr 25 15:33:51 2026 +0200
APPARENTLY-A-DIRECTORY-P: make check more accurate
A path looks like a directory when its directory part is non-NIL and
it has an empty name and type.
diff --git a/src/mload.lisp b/src/mload.lisp
index 75c4a624d..f9c7937a6 100644
--- a/src/mload.lisp
+++ b/src/mload.lisp
@@ -639,9 +639,17 @@
(let ((foo (ignore-errors (probe-file name))))
(if foo (not (apparently-a-directory-p foo)))))
+(defun pathname-component-present-p (value)
+ "Return T iff VALUE represents a present, meaningful pathname component.
+ NIL, :UNSPECIFIC and the empty string mean the component is absent."
+ (not (member value '(nil :unspecific "") :test #'equal)))
+
(defun apparently-a-directory-p (path)
- #+allegro (excl:file-directory-p path)
- #-allegro (member (pathname-name path) '(nil :unspecific) :test #'eq))
+ "Return T iff PATH looks like a directory, i.e. has a non-NIL directory
+ and an absent name and type component."
+ (and (pathname-directory path)
+ (not (pathname-component-present-p (pathname-name path)))
+ (not (pathname-component-present-p (pathname-type path)))))
;; We keep these here in case we want to optimize the search. To
;; speed things up, we might want to support search lists like
commit 27e8b3f366d62130bbe6296b653d59044b9881f5
Author: David Scherfgen <d.s...@go...>
Date: Sat Apr 25 15:27:56 2026 +0200
FILE-MTIME: clarify CLISP behavior in comment
diff --git a/src/mload.lisp b/src/mload.lisp
index a220814e1..75c4a624d 100644
--- a/src/mload.lisp
+++ b/src/mload.lisp
@@ -714,7 +714,8 @@
(defun file-mtime (path)
"Returns the modification time of the file/directory PATH."
#+clisp
- ;; CLISP's FILE-WRITE-DATE only works for regular files, not directories.
+ ;; CLISP's FILE-WRITE-DATE (on UNIX) only works for regular files,
+ ;; not directories.
(nth-value 2 (ext:probe-pathname path))
#-clisp
(file-write-date path))
-----------------------------------------------------------------------
Summary of changes:
src/mload.lisp | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2026-04-28 14:37:50
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, master has been updated
via 62fd1db87d31526ad82c2210f75371a04da9c3a3 (commit)
via bf59d4a700e1d4daa7c3f42525f16e63607f5316 (commit)
via 04920876377f40bcc6c1dc07deb5617318bd5e0b (commit)
via 0464fe3f180e2a401f1a54a4b60834249abe8d0b (commit)
via c848b6d4a104a3950fdbbcfc0ef5432a7bf791dc (commit)
via 3538c1e5d50d46d30c927dca585c1422f23c206a (commit)
via b79fbf5a456108e05e1679b432a1cc904134a7b4 (commit)
via 426b0eb5f0d48f9239674a6b11af3a35d6bfa10c (commit)
via adbf6be29f7fb482b8bead7ad73c89792c951724 (commit)
via e2fe63ab2fee84a82abd160612c3c843377f6472 (commit)
via 5ce616cd7569a18015f0dd7c918a8f5c6d32080a (commit)
via 928cc063573c9bf175ccf9eac02c7abf681f7f36 (commit)
via ecb45b5004b8b08ea112f8996da45142ba24cb03 (commit)
via e379afb446be0dc5dcdbc30c6b2e7ac25cfc4df8 (commit)
via 2fa43aac082a79f93d9a9509e71b25f3b3852adc (commit)
via 2acb006939a0403a72cb7f5af0c019d1dc8248e6 (commit)
via 424a7370c7f9302d1ee3f16120dff31efac72198 (commit)
via e1299a8ffad18a827344aad03415626f54f9d52d (commit)
via 743ea60215d27b59a733214043b748d9f230de3c (commit)
via 73c36c9a0ffcc022256fe1aeca4942a521627539 (commit)
via 9033050868ec90151a9fa444c6244035bd89644b (commit)
via 41b7dfa26a34c7444afad1be9b6bb99b01146c06 (commit)
via 318e8b592a04090ec0e03c29766ab2ebd155970f (commit)
via c10d4b24de7a5794396a6b3100637f03d0f68788 (commit)
via d0701a957e157541fbe4f91bef3864766366066e (commit)
via b8498170b991939e9026a0f60a6b0abaccf79791 (commit)
via 978ecdbac88d6fc17c461b2978fccc2e7583a6b5 (commit)
via 6b355aa746de09f649378c78680d156cf52e8f52 (commit)
via b0ff042bf7d0c2ef3ba5e0a469677915ef718d67 (commit)
via b44a4e14c437d7057201d59e50847e9cf8f6a9e4 (commit)
via 422be532bfcf818d246db96774a0f9fd1bc0ca31 (commit)
via 258628fe88a2237edab8312d11f42b073f1118df (commit)
via 9995a7a7036d1b6e0e4ae81549214f338e5db505 (commit)
via fcd9a9018ba263edceb47c7848a5c40dffff11ce (commit)
from 6dac3c3e0ff74f340b072872f906f57b02a6e272 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 62fd1db87d31526ad82c2210f75371a04da9c3a3
Merge: 6dac3c3e0 bf59d4a70
Author: Raymond Toy <toy...@gm...>
Date: Tue Apr 28 07:37:19 2026 -0700
Merge branch 'rtoy-break-dependency-cycles-2'
-----------------------------------------------------------------------
Summary of changes:
src/basic-util.lisp | 204 +++++++++
src/comm.lisp | 219 +---------
src/displa.lisp | 33 --
src/ellipt.lisp | 28 --
src/float-properties.lisp | 34 ++
src/float.lisp | 33 --
src/grind.lisp | 539 +----------------------
src/halfangle.lisp | 69 +++
src/hypergeometric.lisp | 21 +-
src/logarc.lisp | 53 +--
src/macsys.lisp | 106 -----
src/mat.lisp | 10 +
src/matrix.lisp | 6 -
src/maxima.asd | 923 ++++++++++++++++++++++++----------------
src/maxima.system | 274 +++++++++---
src/{grind.lisp => mgrind.lisp} | 529 +++++++++++------------
src/mlisp.lisp | 94 +++-
src/mload.lisp | 43 ++
src/mmacro.lisp | 85 ----
src/mutils-fn.lisp | 8 +-
src/nfloat.lisp | 2 +-
src/numerical-utils.lisp | 84 ++--
src/opr-util.lisp | 36 ++
src/prompt-util.lisp | 108 +++++
src/simp-fn.lisp | 8 +-
src/simp-utils.lisp | 16 +
src/suprv1.lisp | 41 +-
src/trigi.lisp | 6 -
28 files changed, 1706 insertions(+), 1906 deletions(-)
create mode 100644 src/basic-util.lisp
create mode 100644 src/halfangle.lisp
copy src/{grind.lisp => mgrind.lisp} (80%)
create mode 100644 src/opr-util.lisp
create mode 100644 src/prompt-util.lisp
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2026-04-28 13:56:48
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, rtoy-break-dependency-cycles-2 has been updated
via bf59d4a700e1d4daa7c3f42525f16e63607f5316 (commit)
from 04920876377f40bcc6c1dc07deb5617318bd5e0b (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit bf59d4a700e1d4daa7c3f42525f16e63607f5316
Author: Raymond Toy <toy...@gm...>
Date: Tue Apr 28 06:52:13 2026 -0700
Init *read-default-float-format* in system files
It's really important that *read-default-float-format* to double-float
while compiling the lisp files so that all literal floats are treated
as double-floats. If not, the testsuite will fail.
Previously, this was set in float-format.lisp and we depended on the
module dependencies would ensure that. That's not always easy.
Instead, we use :initially-do to set the *read-default-float-format*
in maxima.system. For maxima.asd, we can just set it in that file.
We leave the setting in float-format.lisp, but remove the comments in
maxima.system and maxima.asd about this critical dependency. It's no
handled in a better way that guarantees the setting when building
maxima.
diff --git a/src/maxima.asd b/src/maxima.asd
index 7fa4325bd..f1da790ab 100644
--- a/src/maxima.asd
+++ b/src/maxima.asd
@@ -16,6 +16,9 @@
(export '*maxima-build-time*)
(eval-when (:compile-toplevel :load-toplevel :execute)
+ ;; All Lisp files MUST be compiled with this so that every literal
+ ;; number is read as a double-float.
+ (setf cl:*read-default-float-format* 'cl:double-float)
(unless (find-package :maxima.system)
(defpackage :maxima.system
(:use :common-lisp :asdf))))
@@ -31,12 +34,6 @@
:components (#-gcl (:file "maxima-package")
#+ecl (:file "ecl-port")
(:file "autoconf-variables" :depends-on ("maxima-package"))))
- ;; Very important module to set the float format correctly so that
- ;; all literal floats numbers have the desired type.
- ;;
- ;; NOTE: For any new module that's added that has literal floats,
- ;; make sure it depends on float-format or, transitively,
- ;; compatibility-macros1.
(:module float-format :pathname ""
:components
((:file "float-format")))
diff --git a/src/maxima.system b/src/maxima.system
index 07ed1a5c9..dbbc5a0f0 100644
--- a/src/maxima.system
+++ b/src/maxima.system
@@ -115,6 +115,10 @@
(mk:defsystem "maxima"
:source-extension "lisp"
:binary-pathname (maxima-binary-pathname)
+ :initially-do (progn
+ ;; All Lisp files MUST be compiled with this so that
+ ;; every literal number is read as a double-float.
+ (setf cl:*read-default-float-format* 'cl:double-float))
#+ecl :compiler-options #+ecl (:system-p t)
#+ecl :compiler #+ecl do-compile-ecl
:components
@@ -144,12 +148,6 @@
#-(or ecl abcl lispworks) (:private-file "autoconf-variables")
#+(or ecl abcl lispworks) (:file "autoconf-variables")
))
- ;; Very important module to set the float format correctly so that
- ;; all literal floats numbers have the desired type.
- ;;
- ;; NOTE: For any new module that's added that has literal floats,
- ;; make sure it depends on float-format or, transitively,
- ;; compatibility-macros1.
(:module float-format :source-pathname ""
:components
(:file "float-format"))
-----------------------------------------------------------------------
Summary of changes:
src/maxima.asd | 9 +++------
src/maxima.system | 10 ++++------
2 files changed, 7 insertions(+), 12 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2026-04-27 23:12:48
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, rtoy-break-dependency-cycles-2 has been updated
via 04920876377f40bcc6c1dc07deb5617318bd5e0b (commit)
from 0464fe3f180e2a401f1a54a4b60834249abe8d0b (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 04920876377f40bcc6c1dc07deb5617318bd5e0b
Author: Raymond Toy <toy...@gm...>
Date: Mon Apr 27 16:11:57 2026 -0700
Update maxima.asd with maxima.system changes
Include comments about the components if they are a DAG or not.
diff --git a/src/maxima.asd b/src/maxima.asd
index b4eed26a7..7fa4325bd 100644
--- a/src/maxima.asd
+++ b/src/maxima.asd
@@ -23,14 +23,14 @@
(in-package :maxima.system)
(defsystem :maxima
- :description "Maxima is a symbolic computation program."
- :licence "GPL"
+ :description "Maxima is a symbolic computation program."
+ :licence "GPL"
;;:serial t
:components
((:module package :pathname ""
- :components (#-gcl(:file "maxima-package")
- #+ecl (:file "ecl-port")
- (:file "autoconf-variables" :depends-on ("maxima-package"))))
+ :components (#-gcl (:file "maxima-package")
+ #+ecl (:file "ecl-port")
+ (:file "autoconf-variables" :depends-on ("maxima-package"))))
;; Very important module to set the float format correctly so that
;; all literal floats numbers have the desired type.
;;
@@ -40,10 +40,6 @@
(:module float-format :pathname ""
:components
((:file "float-format")))
- (:module globals :pathname ""
- :depends-on (intl compatibility-macros1)
- :components
- ((:file "globals")))
(:module intl :pathname ""
:components
(
@@ -51,14 +47,18 @@
;; INTL, so skip it if we have it.
#+#.(cl:if (cl:and (cl:member :cmu cl:*features*) (cl:find-package '#:intl)) '(or) '(and))
(:file "intl")))
+ (:module globals :pathname ""
+ :depends-on (intl compatibility-macros1)
+ :components
+ ((:file "globals")))
(:module info :pathname ""
:components ((:file "pregexp")
- (:file "cl-info")))
+ (:file "cl-info")))
(:module sloop :pathname ""
:components ((:file "sloop")))
(:module declarations :pathname ""
:depends-on (globals)
- :components ((:file "lmdcls")))
+ :components ((:file "lmdcls")))
(:module destructuring-let :pathname ""
:components ((:file "letmac")))
;; Contains macros and conditions related to maxima errors.
@@ -73,31 +73,29 @@
;; correct float type.
;;
;; It appears as if any module that has literal floats
- ;; depends on compability-macors1, so they all implicitly
+ ;; depends on compatibility-macros1, so they all implicitly
;; depend on float-format.
(:module compatibility-macros1 :pathname ""
:depends-on (float-format)
:components ((:file "generr")
- (:file "clmacs")))
+ (:file "clmacs")))
(:module defmfun :pathname ""
:depends-on (globals)
- :components
- ((:file "defmfun-check")))
+ :components ((:file "defmfun-check")))
(:module float-properties :pathname ""
:depends-on (defmfun)
- :components
- ((:file "float-properties")))
+ :components ((:file "float-properties")))
(:module compatibility-macros :pathname ""
:depends-on (defmfun compatibility-macros1)
:components (#+gcl (:file "gcl-compat")
- (:file "commac")))
+ (:file "commac")))
(:module prerequisites :pathname ""
:depends-on (defmfun compatibility-macros1)
- :components ((:file "mormac")
+ :components ((:file "mormac")
(:file "compat")))
(:module maxima-language-compiler-macros :pathname ""
:depends-on (defmfun compatibility-macros1 declarations
- prerequisites compatibility-macros)
+ prerequisites compatibility-macros)
:components ((:file "transm")))
(:module command-line :pathname ""
:depends-on (defmfun getopt)
@@ -107,65 +105,109 @@
:components ((:file "getopt")))
(:module fundamental-macros :pathname ""
:depends-on (globals defmfun compatibility-macros1
- declarations prerequisites compatibility-macros)
- :components ((:file "defcal")
+ declarations prerequisites
+ compatibility-macros)
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
+ :components ((:file "defcal")
(:file "maxmac")))
(:module utility-macros :pathname ""
:depends-on (defmfun compatibility-macros compatibility-macros1
- prerequisites errset)
- :components ((:file "mopers")
- (:file "mforma")))
- ;; This contains the reader macro #$...$ so we want io compile this
+ prerequisites errset)
+ :components ((:file "mforma")))
+ (:module simp-utilities :pathname ""
+ ;; There are other dependencies. We call $ratdisrep,
+ ;; $outofpois, $ratsimp and others. These are all
+ ;; function calls. Can't really do anything about that.
+ ;; and can't depend on those modules because that causes a
+ ;; circular dependency.
+ :depends-on (prerequisites defmfun)
+ ;; Module is a clean DAG at every level.
+ :components
+ ((:file "mopers")
+ (:file "opers"
+ :depends-on ("mopers"))
+ (:file "simp-utils"
+ :depends-on ("mopers"))
+ (:file "mutils"
+ :depends-on ("simp-utils"))
+ (:file "simp"
+ :depends-on ("simp-utils" "opers" "mopers" "mutils"))))
+ (:module nformat :pathname ""
+ ;; poisson-series just to get $outofpois defined before its use.
+ :depends-on (float-properties simp-utilities poisson-series)
+ :components ((:file "nforma")))
+ (:module basic-utilities :pathname ""
+ ;; Note: this depends on merror which causes a circular
+ ;; dependency.
+ :depends-on (simp-utilities fundamental-macros nformat)
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
+ :components ((:file "opr-util")
+ (:file "basic-util")))
+ (:module m2-pattern-matcher :pathname ""
+ :depends-on (simp-utilities)
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
+ :components ((:file "schatc")
+ (:file "schatc-util")))
+ ;; This contains the reader macro #$...$ so we want to compile this
;; as early as possible before anything uses it.
(:module reader :pathname ""
:depends-on (globals defmfun compatibility-macros compatibility-macros1
- declarations fundamental-macros prerequisites utility-macros)
- :components
- ((:file "nparse")))
+ declarations fundamental-macros prerequisites
+ utility-macros simp-utilities)
+ :components ((:file "nparse")))
(:module other-macros :pathname ""
:depends-on (defmfun compatibility-macros1 declarations
- prerequisites utility-macros)
- :components ((:file "mrgmac")
- (:file "rzmac")
- (:file "strmac")
+ prerequisites utility-macros)
+ ;; Module is a clean DAG at every level.
+ :components ((:file "mrgmac")
+ (:file "rzmac")
+ (:file "strmac")
(:file "displm")
(:file "safe-recursion")))
(:module rat-macros :pathname ""
- :depends-on (defmfun compatibility-macros declarations fundamental-macros
- prerequisites)
- :components ((:file "ratmac")
+ :depends-on (defmfun compatibility-macros declarations
+ fundamental-macros prerequisites)
+ :components ((:file "ratmac")
(:file "mhayat")))
- #+gcl (:file "optimize") ; jfa check this
+ #+gcl (:file "optimize") ; jfa check this
(:module utilities :pathname ""
:depends-on (globals defmfun utility-macros compatibility-macros
- compatibility-macros1 declarations fundamental-macros
- prerequisites)
- :components ((:file "opers")
- (:file "utils")
- (:file "sumcon")
- (:file "sublis")
- (:file "merror")
- (:file "mformt")
- (:file "mutils")
- (:file "outmis")
+ compatibility-macros1 declarations
+ fundamental-macros prerequisites)
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
+ :components ((:file "utils")
+ (:file "sumcon")
+ (:file "sublis")
+ (:file "merror")
+ (:file "mformt")
+ (:file "mutils-fn")
+ (:file "outmis")
(:file "ar")))
-
(:module commands :pathname ""
:depends-on (globals defmfun compatibility-macros compatibility-macros1
declarations fundamental-macros prerequisites
- utility-macros)
+ utility-macros simp-utilities basic-utilities)
:components ((:file "comm")
(:file "comm2")))
(:module evaluator :pathname ""
:depends-on (globals defmfun utility-macros compatibility-macros
- compatibility-macros1 declarations destructuring-let
- fundamental-macros prerequisites utilities commands)
- :components ((:file "mlisp")
- (:file "mmacro")
- (:file "buildq")))
-
+ compatibility-macros1 declarations
+ destructuring-let fundamental-macros
+ prerequisites utilities commands simp-utilities)
+ ;; There are no circular dependencies among these files.
+ :components ((:file "mmacro")
+ (:file "mlisp" :depends-on ("mmacro"))
+ (:file "buildq" :depends-on ("mlisp"))))
+ ;; The free versions of Allegro and Lispworks have a heap limit.
+ ;; Let's not compile these routines so that we can at least
+ ;; get the rest of maxima built.
(:module numerical
:depends-on (defmfun)
+ ;; Compile-time deps form a DAG.
:components
(
(:module packages :pathname ""
@@ -175,183 +217,188 @@
(:module f2cl-lib :pathname ""
:depends-on (packages)
:components ((:file "f2cl-lib")))
- (:module slatec
+ (:module slatec
+ :pathname "slatec"
:depends-on (f2cl-lib packages)
+ #+(or allegro-cl-trial lispworks-personal-edition) :load-only
+ #+(or allegro-cl-trial lispworks-personal-edition) t
:components
(
(:file "fdump")
(:file "j4save")
(:file "initds"
- :depends-on ("xermsg"))
+ :depends-on ("xermsg"))
(:file "xgetua")
(:file "xermsg"
- :depends-on ("fdump" "j4save" "xercnt" "xerhlt" "xerprn" "xersve"))
+ :depends-on ("fdump" "j4save" "xercnt" "xerhlt" "xerprn" "xersve"))
(:file "xercnt")
(:file "xerhlt")
(:file "xerprn"
- :depends-on ("xgetua"))
+ :depends-on ("xgetua"))
(:file "xersve"
- :depends-on ("j4save"))
+ :depends-on ("j4save"))
(:file "dcsevl"
- :depends-on ("xermsg"))
-
+ :depends-on ("xermsg"))
+
;; Gamma function
(:file "d9lgmc"
- :depends-on ("dcsevl" "initds" "xermsg"))
+ :depends-on ("dcsevl" "initds" "xermsg"))
(:file "dgamlm"
- :depends-on ("xermsg"))
+ :depends-on ("xermsg"))
(:file "dgamma"
- :depends-on ("d9lgmc" "dcsevl" "dgamlm" "initds" "xermsg"))
+ :depends-on ("d9lgmc" "dcsevl" "dgamlm" "initds" "xermsg"))
(:file "dgamln")
(:file "dlngam"
- :depends-on ("d9lgmc" "dgamma" "xermsg"))
-
+ :depends-on ("d9lgmc" "dgamma" "xermsg"))
+
;; Bessel J functions
(:file "d9b0mp"
- :depends-on ("dcsevl" "initds" "xermsg"))
+ :depends-on ("dcsevl" "initds" "xermsg"))
(:file "d9b1mp"
- :depends-on ("dcsevl" "initds" "xermsg"))
+ :depends-on ("dcsevl" "initds" "xermsg"))
(:file "dbesj0"
- :depends-on ("d9b0mp" "dcsevl" "initds"))
+ :depends-on ("d9b0mp" "dcsevl" "initds"))
(:file "dbesj1"
- :depends-on ("d9b1mp" "dcsevl" "initds" "xermsg"))
+ :depends-on ("d9b1mp" "dcsevl" "initds" "xermsg"))
(:file "djairy")
(:file "dasyjy")
(:file "dbesj"
- :depends-on ("dasyjy" "djairy" "dlngam" "xermsg"))
+ :depends-on ("dasyjy" "djairy" "dlngam" "xermsg"))
;; Bessel I functions
(:file "dbsi0e"
- :depends-on ("dcsevl" "initds"))
+ :depends-on ("dcsevl" "initds"))
(:file "dbsi1e"
- :depends-on ("dcsevl" "initds" "xermsg"))
+ :depends-on ("dcsevl" "initds" "xermsg"))
(:file "dbesi0"
- :depends-on ("dbsi0e" "dcsevl" "initds" "xermsg"))
+ :depends-on ("dbsi0e" "dcsevl" "initds" "xermsg"))
(:file "dbesi1"
- :depends-on ("dbsi1e" "dcsevl" "initds" "xermsg"))
+ :depends-on ("dbsi1e" "dcsevl" "initds" "xermsg"))
(:file "dasyik")
(:file "dbesi"
- :depends-on ("dasyik" "dlngam" "xermsg"))
+ :depends-on ("dasyik" "dlngam" "xermsg"))
(:file "zbesi"
- :depends-on ("zabs" "zbinu"))
-
+ :depends-on ("zabs" "zbinu"))
+
;; Bessel J function for complex
;; arg and real order.
(:file "zabs")
(:file "zacai"
- :depends-on ("zabs" "zasyi" "zbknu" "zmlri" "zs1s2" "zseri"))
+ :depends-on ("zabs" "zasyi" "zbknu" "zmlri" "zs1s2" "zseri"))
(:file "zairy"
- :depends-on ("zabs" "zacai" "zbknu" "zexp" "zsqrt"))
+ :depends-on ("zabs" "zacai" "zbknu" "zexp" "zsqrt"))
(:file "zasyi"
- :depends-on ("zabs" "zdiv" "zexp" "zmlt" "zsqrt"))
+ :depends-on ("zabs" "zdiv" "zexp" "zmlt" "zsqrt"))
(:file "zbesj"
- :depends-on ("zabs" "zbinu"))
+ :depends-on ("zabs" "zbinu"))
(:file "zbinu"
- :depends-on ("zabs" "zasyi" "zbuni" "zmlri" "zseri" "zuoik" "zwrsk"))
+ :depends-on ("zabs" "zasyi" "zbuni" "zmlri" "zseri" "zuoik" "zwrsk"))
(:file "zbknu"
- :depends-on ("dgamln" "zabs" "zdiv" "zexp" "zkscl"
- "zlog" "zmlt" "zshch" "zsqrt" "zuchk"))
+ :depends-on ("dgamln" "zabs" "zdiv" "zexp" "zkscl"
+ "zlog" "zmlt" "zshch" "zsqrt" "zuchk"))
(:file "zbuni"
- :depends-on ("zabs" "zuni1" "zuni2"))
+ :depends-on ("zabs" "zuni1" "zuni2"))
(:file "zdiv")
(:file "zexp")
(:file "zkscl"
- :depends-on ("zabs" "zlog" "zuchk"))
+ :depends-on ("zabs" "zlog" "zuchk"))
(:file "zlog"
- :depends-on ("zabs"))
+ :depends-on ("zabs"))
(:file "zmlri"
- :depends-on ("dgamln" "zabs" "zexp" "zlog" "zmlt"))
+ :depends-on ("dgamln" "zabs" "zexp" "zlog" "zmlt"))
(:file "zmlt")
(:file "zrati"
- :depends-on ("zabs" "zdiv"))
+ :depends-on ("zabs" "zdiv"))
(:file "zs1s2"
- :depends-on ("zabs" "zexp" "zlog"))
+ :depends-on ("zabs" "zexp" "zlog"))
(:file "zseri"
- :depends-on ("dgamln" "zabs" "zdiv" "zlog" "zmlt" "zuchk"))
+ :depends-on ("dgamln" "zabs" "zdiv" "zlog" "zmlt" "zuchk"))
(:file "zshch")
(:file "zsqrt" :depends-on ("zabs"))
(:file "zuchk")
(:file "zunhj"
- :depends-on ("zabs" "zdiv" "zlog" "zsqrt"))
+ :depends-on ("zabs" "zdiv" "zlog" "zsqrt"))
(:file "zuni1"
- :depends-on ("zabs" "zuchk" "zunik" "zuoik"))
+ :depends-on ("zabs" "zuchk" "zunik" "zuoik"))
(:file "zuni2"
- :depends-on ("zabs" "zairy" "zuchk" "zunhj" "zuoik"))
+ :depends-on ("zabs" "zairy" "zuchk" "zunhj" "zuoik"))
(:file "zunik"
- :depends-on ("zdiv" "zlog" "zsqrt"))
+ :depends-on ("zdiv" "zlog" "zsqrt"))
(:file "zuoik"
- :depends-on ("zabs" "zlog" "zuchk" "zunhj" "zunik"))
+ :depends-on ("zabs" "zlog" "zuchk" "zunhj" "zunik"))
(:file "zwrsk"
- :depends-on ("zabs" "zbknu" "zrati"))
-
+ :depends-on ("zabs" "zbknu" "zrati"))
+
;; Bessel Y functions
(:file "dbesy0"
- :depends-on ("d9b0mp" "dbesj0" "dcsevl" "initds" "xermsg"))
+ :depends-on ("d9b0mp" "dbesj0" "dcsevl" "initds" "xermsg"))
(:file "dbesy1"
- :depends-on ("d9b1mp" "dbesj1" "dcsevl" "initds" "xermsg"))
+ :depends-on ("d9b1mp" "dbesj1" "dcsevl" "initds" "xermsg"))
(:file "dbesy"
- :depends-on ("dasyjy" "dbesy0" "dbesy1" "dbsynu" "dyairy" "xermsg"))
+ :depends-on ("dasyjy" "dbesy0" "dbesy1" "dbsynu" "dyairy" "xermsg"))
(:file "dbsynu"
- :depends-on ("dgamma" "xermsg"))
+ :depends-on ("dgamma" "xermsg"))
(:file "dyairy")
-
+
(:file "zbesy"
- :depends-on ("zbesh"))
+ :depends-on ("zbesh"))
(:file "zbesh"
- :depends-on ("zabs" "zacon" "zbknu" "zbunk" "zuoik"))
+ :depends-on ("zabs" "zacon" "zbknu" "zbunk" "zuoik"))
(:file "zacon"
- :depends-on ("zabs" "zbinu" "zbknu" "zmlt" "zs1s2"))
+ :depends-on ("zabs" "zbinu" "zbknu" "zmlt" "zs1s2"))
(:file "zbunk"
- :depends-on ("zunk1" "zunk2"))
+ :depends-on ("zunk1" "zunk2"))
(:file "zunk1"
- :depends-on ("zabs" "zs1s2" "zuchk" "zunik"))
+ :depends-on ("zabs" "zs1s2" "zuchk" "zunik"))
(:file "zunk2"
- :depends-on ("zabs" "zairy" "zs1s2" "zuchk" "zunhj"))
+ :depends-on ("zabs" "zairy" "zs1s2" "zuchk" "zunhj"))
;; Bessel K functions
(:file "dbesk0"
- :depends-on ("dbesi0" "dbsk0e" "dcsevl" "initds" "xermsg"))
+ :depends-on ("dbesi0" "dbsk0e" "dcsevl" "initds" "xermsg"))
(:file "dbsk0e"
- :depends-on ("dbesi0" "dcsevl" "initds" "xermsg"))
+ :depends-on ("dbesi0" "dcsevl" "initds" "xermsg"))
(:file "dbesk1"
- :depends-on ("dbesi1" "dbsk1e" "dcsevl" "initds" "xermsg"))
+ :depends-on ("dbesi1" "dbsk1e" "dcsevl" "initds" "xermsg"))
(:file "dbsk1e"
- :depends-on ("dbesi1" "dcsevl" "initds" "xermsg"))
+ :depends-on ("dbesi1" "dcsevl" "initds" "xermsg"))
(:file "dbesk"
- :depends-on ("dasyik" "dbesk0" "dbesk1" "dbsk0e" "dbsk1e" "dbsknu" "xermsg"))
+ :depends-on ("dasyik" "dbesk0" "dbesk1" "dbsk0e" "dbsk1e" "dbsknu" "xermsg"))
(:file "dbsknu"
- :depends-on ("dgamma" "xermsg"))
+ :depends-on ("dgamma" "xermsg"))
(:file "zbesk"
- :depends-on ("zabs" "zacon" "zbknu" "zbunk" "zuoik"))
-
+ :depends-on ("zabs" "zacon" "zbknu" "zbunk" "zuoik"))
+
;; Airy functions
(:file "d9aimp"
- :depends-on ("dcsevl" "initds" "xermsg"))
+ :depends-on ("dcsevl" "initds" "xermsg"))
(:file "daie"
- :depends-on ("d9aimp" "dcsevl" "initds"))
+ :depends-on ("d9aimp" "dcsevl" "initds"))
(:file "dai"
- :depends-on ("d9aimp" "daie" "dcsevl" "initds" "xermsg"))
+ :depends-on ("d9aimp" "daie" "dcsevl" "initds" "xermsg"))
(:file "dbie"
- :depends-on ("d9aimp" "dcsevl" "initds"))
+ :depends-on ("d9aimp" "dcsevl" "initds"))
(:file "dbi"
- :depends-on ("d9aimp" "dbie" "dcsevl" "initds" "xermsg"))
+ :depends-on ("d9aimp" "dbie" "dcsevl" "initds" "xermsg"))
(:file "zbiry"
- :depends-on ("zabs" "zbinu" "zdiv" "zsqrt"))
+ :depends-on ("zabs" "zbinu" "zdiv" "zsqrt"))
;; Error functions
(:file "derf"
- :depends-on ("dcsevl" "derfc" "initds"))
+ :depends-on ("dcsevl" "derfc" "initds"))
(:file "derfc"
- :depends-on ("dcsevl" "initds" "xermsg"))
+ :depends-on ("dcsevl" "initds" "xermsg"))
;; Exponential integrals
(:file "de1"
- :depends-on ("dcsevl" "initds" "xermsg"))
+ :depends-on ("dcsevl" "initds" "xermsg"))
(:file "dei"
- :depends-on ("de1"))
+ :depends-on ("de1"))
(:file "dspenc"
- :depends-on ("d9upak"))
+ :depends-on ("d9upak"))
(:file "d9upak")))
(:module quadpack
- :pathname "slatec/"
+ :pathname "slatec"
+ #+(or allegro-cl-trial lispworks-personal-edition) :load-only
+ #+(or allegro-cl-trial lispworks-personal-edition) t
:components
(
;; Support
@@ -372,86 +419,93 @@
(:file "dqelg")
(:file "dqpsrt")
(:file "dqc25s"
- :depends-on ("dqcheb" "dqk15w"))
+ :depends-on ("dqcheb" "dqk15w"))
(:file "dqmomo")
(:file "dqc25c"
- :depends-on ("dqcheb"
- "dqk15w"))
+ :depends-on ("dqcheb"
+ "dqk15w"))
(:file "dqc25f"
- :depends-on ("dgtsl"
- "dqcheb"
- "dqk15w"
- "dqwgtf"))
+ :depends-on ("dgtsl"
+ "dqcheb"
+ "dqk15w"
+ "dqwgtf"))
;; Basic integrators
(:file "dqage"
- :depends-on ("dqk15"
- "dqk31"
- "dqk41"
- "dqk51"
- "dqk61"
- "dqk21"
- "dqpsrt"))
+ :depends-on ("dqk15"
+ "dqk31"
+ "dqk41"
+ "dqk51"
+ "dqk61"
+ "dqk21"
+ "dqpsrt"))
(:file "dqagie"
- :depends-on ("dqelg"
- "dqk15i"
- "dqpsrt"))
+ :depends-on ("dqelg"
+ "dqk15i"
+ "dqpsrt"))
(:file "dqagp"
- :depends-on ("dqagpe"))
+ :depends-on ("dqagpe"))
(:file "dqagpe"
- :depends-on ("dqelg"
- "dqpsrt"
- "dqk21"
- ))
+ :depends-on ("dqelg"
+ "dqpsrt"
+ "dqk21"))
(:file "dqagse"
- :depends-on ("dqk21"
- "dqelg"
- "dqpsrt"))
+ :depends-on ("dqk21"
+ "dqelg"
+ "dqpsrt"))
(:file "dqawfe"
- :depends-on ("dqagie"
- "dqawoe"
- "dqelg"))
+ :depends-on ("dqagie"
+ "dqawoe"
+ "dqelg"))
(:file "dqawoe"
- :depends-on ("dqc25f"
- "dqpsrt"
- "dqelg"))
+ :depends-on ("dqc25f"
+ "dqpsrt"
+ "dqelg"))
(:file "dqawse"
- :depends-on ("dqc25s"
- "dqmomo"
- "dqpsrt"))
+ :depends-on ("dqc25s"
+ "dqmomo"
+ "dqpsrt"))
(:file "dqawce"
- :depends-on ("dqc25c"
- "dqpsrt"))
+ :depends-on ("dqc25c"
+ "dqpsrt"))
;; Simplified interface routines
(:file "dqng")
(:file "dqag"
- :depends-on ("dqage"))
+ :depends-on ("dqage"))
(:file "dqags"
- :depends-on ("dqagse"))
+ :depends-on ("dqagse"))
(:file "dqagi"
- :depends-on ("dqagie"))
+ :depends-on ("dqagie"))
(:file "dqawf"
- :depends-on ("dqawfe"))
+ :depends-on ("dqawfe"))
(:file "dqawo"
- :depends-on ("dqawoe"))
+ :depends-on ("dqawoe"))
(:file "dqaws"
- :depends-on ("dqawse"))
+ :depends-on ("dqawse"))
(:file "dqawc"
- :depends-on ("dqawce"))
+ :depends-on ("dqawce"))
;; Maxima interface
- (:file "quadpack")
- )
- )))
+ (:file "quadpack")))))
(:module simplification :pathname ""
:depends-on (globals defmfun reader utility-macros compatibility-macros
compatibility-macros1 declarations destructuring-let
- fundamental-macros i-o other-macros prerequisites)
- :components ((:file "simp")
- (:file "float")
- (:file "csimp")
- (:file "csimp2")
- (:file "zero")
- (:file "logarc")
- (:file "rpart")))
+ fundamental-macros i-o other-macros prerequisites
+ numerical-utilities simp-utilities)
+ ;; Module is a clean DAG at every level: function calls, macros,
+ ;; special-variable references.
+ :components
+ ((:file "simp-fn")
+ (:file "csimp")
+ (:file "logarc")
+ (:file "rpart"
+ :depends-on ("logarc"))
+ (:file "float"
+ :depends-on ("logarc" "rpart"))
+ (:file "csimp2"
+ :depends-on ("csimp" "float" "rpart"))
+ (:file "zero"
+ :depends-on ("rpart"))
+ (:file "halfangle"
+ :depends-on ("rpart"))))
(:module numeric-bigfloat :pathname ""
:depends-on (globals defmfun package)
:components ((:file "numeric")))
@@ -463,252 +517,378 @@
declarations fundamental-macros other-macros
prerequisites utilities utility-macros
evaluator)
- :components ((:file "macsys")
- (:file "testsuite")
- (:file "mload")
- (:file "suprv1")
- (:file "mactex")
- (:file "dskfn")))
+ ;; Module is a clean DAG at every level: function calls, macros,
+ ;; special-variable references.
+ :components
+ ((:file "prompt-util")
+ (:file "suprv1"
+ :depends-on ("prompt-util"))
+ (:file "macsys"
+ :depends-on ("prompt-util" "suprv1"))
+ (:file "testsuite")
+ (:file "mload"
+ :depends-on ("prompt-util" "suprv1" "macsys" "testsuite"))
+ (:file "mactex"
+ :depends-on ("prompt-util" "suprv1"))
+ (:file "dskfn"
+ :depends-on ("prompt-util" "suprv1"))))
(:module factoring :pathname ""
:depends-on (globals defmfun compatibility-macros compatibility-macros1
declarations fundamental-macros other-macros
prerequisites rat-macros utilities)
- :components ((:file "lesfac")
- (:file "factor")
- (:file "algfac")
- (:file "nalgfa")
- (:file "ufact")
- (:file "result")))
+ ;; Compile-time deps form a DAG. Runtime cycle by design:
+ ;; factor <-> algfac (7+7 calls) -- factor's general
+ ;; factoring dispatches to algfac for algebraic
+ ;; extensions; algfac uses factor's primitives. Several
+ ;; declare-top specials in factor.lisp (var, res, trl*,
+ ;; ind, alc, *xn, split*) are mutated cross-file.
+ :components
+ ((:file "factor")
+ (:file "lesfac"
+ :depends-on ("factor"))
+ (:file "ufact"
+ :depends-on ("factor"))
+ (:file "result"
+ :depends-on ("factor" "lesfac" "ufact"))
+ (:file "algfac"
+ :depends-on ("factor" "result"))
+ (:file "nalgfa"
+ :depends-on ("factor" "result"))))
(:module ifactor :pathname ""
:depends-on (defmfun prerequisites rat-macros utility-macros)
:components ((:file "ifactor")))
-
(:module rational-functions :pathname ""
- :depends-on (globals defmfun rat-macros other-macros
- compatibility-macros1 ifactor factoring
+ :depends-on (globals defmfun rat-macros other-macros
+ compatibility-macros1 ifactor factoring
compatibility-macros declarations destructuring-let
- fundamental-macros prerequisites utilities)
- :components ((:file "rat3a")
- (:file "rat3b")
- (:file "rat3d")
- (:file "rat3c")
- (:file "rat3e")
- (:file "nrat4")
- (:file "ratout")))
-
+ fundamental-macros prerequisites utilities
+ simp-utilities)
+ ;; Compile-time deps have no cross-file macros nor cross-file
+ ;; specials. However, there are lots of mutually recursive calls
+ ;; among the files. Pretty hard to fix this.
+ :components
+ ((:file "rat3a")
+ (:file "rat3b")
+ (:file "rat3d")
+ (:file "rat3c")
+ (:file "rat3e")
+ (:file "nrat4")
+ (:file "ratout")))
(:module maxima-language-compiler :pathname ""
:depends-on (globals defmfun maxima-language-compiler-macros evaluator
compatibility-macros compatibility-macros1
declarations destructuring-let fundamental-macros
i-o prerequisites)
- :components ((:file "transl")
- (:file "transs")
- (:file "trans1")
- (:file "trans2")
- (:file "trans3")
- (:file "trans4")
- (:file "trans5")
- (:file "transf")
- (:file "troper")
- (:file "trutil")
- (:file "trmode")
- (:file "trdata")
- (:file "trpred")
- (:file "transq")
- (:file "acall")
- (:file "fcall")
- (:file "evalw")
- (:file "trprop")
- (:file "mdefun"))
- :depends-on (maxima-language-compiler-macros compatibility-macros))
-
- (:module pattern-matching :pathname ""
- :depends-on (globals defmfun compatibility-macros1
- declarations evaluator
- fundamental-macros prerequisites
- rat-macros)
- :components ((:file "schatc")
- (:file "matcom")
- (:file "matrun")
- (:file "nisimp")))
-
- (:module trigonometry :pathname ""
- :depends-on (globals pattern-matching defmfun
- compatibility-macros declarations
- errset fundamental-macros other-macros
- prerequisites utility-macros)
- :components ((:file "trigi")
- (:file "trigo")
- (:file "trgred")))
-
+ ;; Compile-time deps form a DAG. Three small runtime
+ ;; cycles remain, all between transl (the translator core)
+ ;; and its tightly-coupled helpers: trans2 (array
+ ;; dispatch), trutil (defvar pushing), trmode (mode
+ ;; system).
+ :components
+ ((:file "transl")
+ (:file "transs"
+ :depends-on ("transl"))
+ (:file "trans1")
+ (:file "trans2"
+ :depends-on ("transl"))
+ (:file "trans3"
+ :depends-on ("transl"))
+ (:file "trans4"
+ :depends-on ("trprop"))
+ (:file "trans5"
+ :depends-on ("transl"))
+ (:file "transf")
+ (:file "troper"
+ :depends-on ("transl"))
+ (:file "trutil"
+ :depends-on ("transl"))
+ (:file "trmode"
+ :depends-on ("transl"))
+ (:file "trdata")
+ (:file "trpred")
+ (:file "transq")
+ (:file "acall")
+ (:file "fcall")
+ (:file "evalw")
+ (:file "trprop")
+ (:file "mdefun")))
+ (:module numerical-utilities :pathname ""
+ :depends-on (simp-utilities ; for add/mul/sub
+ globals ; $numer, errorsw
+ utilities) ; merror
+ :components ((:file "numerical-utils")))
+ (:module bessel-functions :pathname ""
+ :depends-on (globals defmfun trigonometry algebraic-database
+ utility-macros reader fundamental-macros other-macros
+ prerequisites numerical-utilities)
+ ;; Module is a clean DAG at every level: function calls, macros,
+ ;; special-variable references.
+ :components ((:file "bessel")
+ (:file "airy")))
+ (:module elliptic-functions :pathname ""
+ :depends-on (globals defmfun trigonometry algebraic-database
+ utility-macros reader fundamental-macros other-macros
+ prerequisites numerical-utilities)
+ :components ((:file "ellipt")))
+ (:module numerical-functions :pathname ""
+ :depends-on (globals defmfun algebraic-database
+ utility-macros reader fundamental-macros other-macros
+ prerequisites)
+ :components ((:file "intpol")))
(:module display :pathname ""
:depends-on (globals defmfun compatibility-macros1 declarations
- fundamental-macros prerequisites)
- :components ((:file "displa")
- (:file "nforma")
- (:file "grind")))
-
+ fundamental-macros prerequisites simp-utilities)
+ ;; Module is a clean DAG at every level: function calls, macros,
+ ;; special-variable references.
+ :components ((:file "mgrind")
+ (:file "grind"
+ :depends-on ("mgrind"))
+ (:file "displa"
+ :depends-on ("mgrind" "grind"))))
(:module gcd :pathname ""
:depends-on (globals defmfun declarations destructuring-let
- fundamental-macros prerequisites
+ fundamental-macros prerequisites
rat-macros utilities)
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
:components ((:file "spgcd")
- (:file "ezgcd")))
+ (:file "ezgcd")))
(:module documentation :pathname ""
:depends-on (globals defmfun fundamental-macros)
- :components ((:file "macdes")
- (:file "verify-html-index")))
+ :components ((:file "verify-html-index")
+ (:file "macdes"
+ :depends-on ("verify-html-index"))))
(:module algebraic-database :pathname ""
:depends-on (globals defmfun compatibility-macros1 declarations
evaluator fundamental-macros other-macros
prerequisites utility-macros)
- :components ((:file "inmis")
- (:file "db")
- (:file "compar")
- (:file "askp"))) ;does this belong here?
- (:module numerical-functions :pathname ""
- :depends-on (globals defmfun trigonometry algebraic-database
- utility-macros reader
- fundamental-macros other-macros prerequisites)
- :components ((:file "bessel")
- (:file "ellipt")
- (:file "airy"
- :depends-on ("ellipt"))
- (:file "plasma")
- (:file "intpol")))
-
+ ;; Compile-time deps form a DAG. Two runtime cycles are
+ ;; structural: compar <-> db (sign/comparison logic vs the
+ ;; fact database) and askp <-> compar (interactive
+ ;; integer/parity queries vs the predicates that prompt
+ ;; them).
+ :components ((:file "inmis")
+ (:file "db")
+ (:file "compar")
+ (:file "askp")))
+ (:module variable-predicates :pathname ""
+ ;; Variable predicates like FREEVAR, VARP.
+ :depends-on (simp-utilities)
+ :components ((:file "var-predicate")))
+ (:module hypergeometric :pathname ""
+ ;; Simplification and evaluation of hypergeometric functions.
+ :depends-on (compatibility-macros1 declarations defmfun errset globals
+ miscellaneous other-macros prerequisites
+ utility-macros m2-pattern-matcher
+ variable-predicates)
+ ;; Module is a clean DAG at every level: function calls, macros,
+ ;; special-variable references.
+ :components
+ ((:file "hyp")
+ ;; Note: nummod uses apply-reflection-rule from trigi.
+ ;; This should be updated.
+ (:file "nummod")
+ (:file "hypergeometric"
+ :depends-on ("nummod"))
+ (:file "nfloat"
+ ;; Comment in nfloat says hypergeometric needs to
+ ;; be loaded first.
+ :depends-on ("hypergeometric"))))
(:module integration :pathname ""
- :depends-on (globals defmfun pattern-matching
- compatibility-macros declarations
+ :depends-on (globals defmfun compatibility-macros declarations
destructuring-let errset fundamental-macros
- prerequisites rat-macros utility-macros)
- :components ((:file "sinint")
- (:file "sin")
- (:file "risch")))
+ prerequisites rat-macros utility-macros
+ m2-pattern-matcher variable-predicates)
+ ;; Compile-time deps form a DAG. Runtime: risch.lisp and
+ ;; sin.lisp are mutually recursive by design -- risch's
+ ;; hypertrigint1 falls back to sin's sinint when Risch
+ ;; can't make progress, and sin's integrate1 dispatches to
+ ;; risch's rischint. The cycle is structural; not broken.
+ ;;
+ ;; This could be fixed by moving lots of code around to a
+ ;; separate file.
+ :components
+ ((:file "sin-util")
+ (:file "sinint")
+ (:file "risch"
+ :depends-on ("sinint"))
+ (:file "irinte"
+ :depends-on ("sin-util"))
+ (:file "sin"
+ :depends-on ("sin-util" "irinte"))))
(:module taylor-series :pathname ""
:depends-on (globals defmfun compatibility-macros
compatibility-macros1 declarations
destructuring-let fundamental-macros
- other-macros prerequisites rat-macros errset)
+ other-macros prerequisites rat-macros errset
+ simp-utilities)
:components ((:file "hayat")))
(:module definite-integration :pathname ""
:depends-on (globals defmfun declarations destructuring-let
fundamental-macros other-macros
- prerequisites)
- :components ((:file "defint")
- (:file "residu")))
+ prerequisites hypergeometric
+ m2-pattern-matcher variable-predicates)
+ ;; Module is a clean DAG at every level: function calls, macros,
+ ;; special-variable references.
+ :components
+ ((:file "residu")
+ (:file "defint"
+ :depends-on ("residu"))
+ (:file "hypgeo"
+ :depends-on ("residu"))
+ (:file "laplac"
+ :depends-on ("defint" "hypgeo" "residu"))))
+ (:module trigonometry :pathname ""
+ :depends-on (globals defmfun compatibility-macros declarations
+ errset fundamental-macros other-macros
+ prerequisites utility-macros taylor-series
+ m2-pattern-matcher)
+ ;; Compile-time deps form a DAG. Runtime cycle trigi <->
+ ;; trigo is structural (trigi calls trigo:trigexpand for
+ ;; forward simplification, trigo calls trigi for shared
+ ;; eval/reflection helpers).
+ :components ((:file "trigi")
+ (:file "trigo")
+ (:file "trgred")))
(:module special-functions :pathname ""
:depends-on (globals defmfun reader utility-macros
- other-macros rat-macros)
+ other-macros rat-macros numerical-utilities)
:components ((:file "specfn")))
(:module matrix-algebra :pathname ""
- :depends-on (globals defmfun compatibility-macros
- compatibility-macros1 declarations
- fundamental-macros
- maxima-language-compiler-macros
- prerequisites utility-macros
- destructuring-let utilities)
- :components ((:file "mat")
- (:file "linnew")
- (:file "matrix")))
+ :depends-on (globals defmfun compatibility-macros compatibility-macros1
+ declarations fundamental-macros
+ maxima-language-compiler-macros prerequisites
+ utility-macros destructuring-let utilities)
+ ;; Module is a clean DAG at every level: function calls, macros,
+ ;; special-variable references.
+ :components ((:file "mat")
+ (:file "matrix" :depends-on ("mat"))
+ (:file "linnew" :depends-on ("mat" "matrix"))))
(:module determinants :pathname ""
:depends-on (globals defmfun declarations
- maxima-language-compiler-macros
- prerequisites)
- :components ((:file "sprdet")
- (:file "newinv")
- (:file "newdet")))
+ maxima-language-compiler-macros prerequisites)
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
+ :components ((:file "sprdet")
+ (:file "newinv")
+ (:file "newdet")))
+ (:module pattern-matching :pathname ""
+ :depends-on (globals defmfun compatibility-macros1 declarations
+ evaluator fundamental-macros prerequisites
+ rat-macros simp-utilities)
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
+ :components ((:file "matcom")
+ (:file "matrun")
+ (:file "nisimp")))
(:module limits :pathname ""
- :depends-on (globals defmfun compatibility-macros1
- declarations destructuring-let
- errset fundamental-macros
- other-macros prerequisites
- utilities utility-macros)
- :components ((:file "tlimit")
- (:file "limit")))
+ :depends-on (globals defmfun compatibility-macros1 declarations
+ destructuring-let errset fundamental-macros
+ other-macros prerequisites utilities utility-macros)
+ ;; Compile-time deps form a DAG. Runtime cycle limit <->
+ ;; tlimit is structural (mutual dispatch between limit and
+ ;; Taylor-limit).
+ :components ((:file "tlimit")
+ (:file "limit")))
(:module solve :pathname ""
:depends-on (globals defmfun compatibility-macros1 compatibility-macros
- declarations fundamental-macros
- other-macros prerequisites rat-macros
- utilities utility-macros)
- :components ((:file "solve")
- (:file "psolve")
- (:file "algsys")
- (:file "sqrtdenest")
- (:file "polyrz")
- (:file "cpoly")))
+ declarations fundamental-macros other-macros
+ prerequisites rat-macros utilities utility-macros)
+ ;; Compile-time deps form a DAG. Two runtime call cycles
+ ;; remain by design: solve <-> psolve (cubic/quartic
+ ;; formulas tightly coupled to solve's display
+ ;; machinery), and solve <-> algsys (univariate vs
+ ;; system-of-equations dispatchers calling each other).
+ ;; sqrtdenest, polyrz, and cpoly are leaves, called from
+ ;; algsys.
+ :components
+ ((:file "sqrtdenest")
+ (:file "polyrz")
+ (:file "cpoly")
+ (:file "solve")
+ (:file "psolve"
+ :depends-on ("solve"))
+ (:file "algsys"
+ :depends-on ("solve" "sqrtdenest" "polyrz" "cpoly"))))
(:module debugging :pathname ""
:depends-on (globals defmfun compatibility-macros1 compatibility-macros
- declarations fundamental-macros
- prerequisites utility-macros)
+ declarations fundamental-macros prerequisites
+ utility-macros)
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
:components ((:file "mtrace")
- (:file "mdebug")))
+ (:file "mdebug")))
+ (:module gamma-expint :pathname ""
+ :depends-on (numerical-utilities m2-pattern-matcher)
+ ;; Module is a clean DAG at every level: function calls, macros,
+ ;; special-variable references.
+ :components ((:file "expintegral")
+ (:file "gamma"
+ :depends-on ("expintegral"))
+ (:file "plasma")))
+ (:module random :pathname ""
+ ;; Mersenne Twister random-number implementation.
+ :depends-on (globals utilities)
+ :components ((:file "rand-mt19937")))
(:module miscellaneous :pathname ""
- :depends-on (globals defmfun pattern-matching compatibility-macros1
+ :depends-on (globals defmfun compatibility-macros1
reader utility-macros commands
destructuring-let errset other-macros
- rat-macros declarations fundamental-macros)
- :components ((:file "scs")
- (:file "asum")
- (:file "fortra")
- (:file "optim")
- (:file "marray")
- (:file "mdot")
- (:file "irinte")
- (:file "series")
+ rat-macros declarations fundamental-macros
+ numerical-utilities m2-pattern-matcher random)
+ :components ((:file "scs")
+ (:file "asum")
+ (:file "fortra")
+ (:file "optim")
+ (:file "marray")
+ (:file "mdot")
+ (:file "series")
(:file "numth")
- (:file "laplac")
- (:file "pade")
- (:file "homog")
- (:file "combin")
- (:file "nset")
- (:file "rand-mt19937")
- (:file "maxmin")
- (:file "nummod")
- (:file "conjugate")
- (:file "expintegral")
- (:file "gamma")
- (:file "hstep")
- (:file "sinc")
- (:file "mstuff")))
+ (:file "pade")
+ (:file "homog")
+ (:file "combin")
+ ;; nset needs $random.
+ (:file "nset")
+ (:file "maxmin")
+ (:file "conjugate")
+ (:file "hstep")
+ (:file "sinc")
+ (:file "mstuff")))
(:module polynomial :pathname ""
:depends-on (defmfun)
- :components
- ((:file "polynomialp")))
+ :components ((:file "polynomialp")))
(:module poisson-series :pathname ""
- :depends-on (defmfun declarations fundamental-macros
- prerequisites)
- :components ((:file "pois2")
- (:file "pois3")))
+ :depends-on (defmfun declarations fundamental-macros prerequisites)
+ ;; Module is a clean DAG at every level: function calls, macros,
+ ;; special-variable references.
+ :components ((:file "pois2")
+ (:file "pois3"
+ :depends-on ("pois2"))))
(:module translated-packages :pathname ""
- :depends-on (globals maxima-language-compiler-macros
- compatibility-macros1
- defmfun declarations errset
- miscellaneous other-macros prerequisites
- utility-macros)
- :components
- ((:file "desoln")
- (:file "elim")
- (:file "invert")
- (:file "hypgeo")
- (:file "hyp")
- (:file "hypergeometric")
- (:file "nfloat")
- (:file "todd-coxeter")
- (:file "plot")))
+ :depends-on (globals maxima-language-compiler-macros compatibility-macros1
+ defmfun declarations errset miscellaneous
+ other-macros prerequisites utility-macros)
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
+ :components ((:file "desoln")
+ (:file "elim")
+ (:file "invert")
+ (:file "todd-coxeter")
+ (:file "plot")))
(:module graphics-drivers :pathname ""
:depends-on (defmfun)
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
:components ((:file "plotcolors")
(:file "gnuplot_def")
- (:file "xmaxima_def")
+ (:file "xmaxima_def")
(:file "geomview_def")))
-
(:module final :pathname ""
:depends-on (globals defmfun compatibility-macros1)
;; These are not compiled, for whatever reason
:components ((:file "autol")
- (:file "max_ext")
- (:file "../lisp-utils/defsystem") ;; some share packages use defsystem
- (:file "init-cl"))))
+ (:file "max_ext")
+ (:file "../lisp-utils/defsystem") ;; some share packages use defsystem
+ (:file "init-cl"))))
;;:serial t
:depends-on ())
-----------------------------------------------------------------------
Summary of changes:
src/maxima.asd | 914 ++++++++++++++++++++++++++++++++++-----------------------
1 file changed, 547 insertions(+), 367 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2026-04-27 18:59:39
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, rtoy-break-dependency-cycles-2 has been updated
via 0464fe3f180e2a401f1a54a4b60834249abe8d0b (commit)
from c848b6d4a104a3950fdbbcfc0ef5432a7bf791dc (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 0464fe3f180e2a401f1a54a4b60834249abe8d0b
Author: Raymond Toy <toy...@gm...>
Date: Mon Apr 27 11:58:45 2026 -0700
Move rand-mt19937 to new random module
Cleans up miscellaneous module a little by making it one file smaller.
Dependencies updated. Note that nset needs $random so we
miscellaneous module gets updated dependency too.
diff --git a/src/maxima.system b/src/maxima.system
index dd4ce57a5..07ed1a5c9 100644
--- a/src/maxima.system
+++ b/src/maxima.system
@@ -1009,13 +1009,19 @@
:depends-on ("expintegral"))
(:file "plasma")))
+ (:module random :source-pathname ""
+ ;; Mersenne Twister random-number implementation.
+ :depends-on ("globals" "utilities")
+ :components
+ ((:file "rand-mt19937")))
(:module miscellaneous :source-pathname ""
:depends-on ("globals" "defmfun" "compatibility-macros1"
"reader" "utility-macros" "commands"
"destructuring-let" "errset" "other-macros"
"rat-macros" "declarations" "fundamental-macros"
"numerical-utilities"
- "m2-pattern-matcher")
+ "m2-pattern-matcher"
+ "random")
:components
((:file "scs")
(:file "asum")
@@ -1028,8 +1034,8 @@
(:file "pade")
(:file "homog")
(:file "combin")
+ ;; nset needs $random.
(:file "nset")
- (:file "rand-mt19937")
(:file "maxmin")
(:file "conjugate")
(:file "hstep")
-----------------------------------------------------------------------
Summary of changes:
src/maxima.system | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2026-04-27 17:47:17
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, rtoy-break-dependency-cycles-2 has been updated
via c848b6d4a104a3950fdbbcfc0ef5432a7bf791dc (commit)
from 3538c1e5d50d46d30c927dca585c1422f23c206a (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit c848b6d4a104a3950fdbbcfc0ef5432a7bf791dc
Author: Raymond Toy <toy...@gm...>
Date: Mon Apr 27 10:42:48 2026 -0700
Move nummod from miscellaneous to hypergeometric module
nummod defines the macro bind-fpprec which is used only in
hypergeometric.lisp and nfloat.lisp. It makes sense to move to the
hypergeometric module.
Testsuite passes.
Note that bind-fpprec should probably move somewhere else. Maybe
float.lisp or something. Also nummod uses apply-reflection-rule from
trigi.lisp. We should move apply-reflection-rule to simp.lisp or
something; it's used in lots of different files in different packages.
(Other reflection-related functions should move too.)
diff --git a/src/maxima.system b/src/maxima.system
index bb2389d51..dd4ce57a5 100644
--- a/src/maxima.system
+++ b/src/maxima.system
@@ -844,7 +844,11 @@
;; special-variable references.
:components
((:file "hyp")
- (:file "hypergeometric")
+ ;; Note: nummod uses apply-reflection-rule from trigi.
+ ;; This should be updated.
+ (:file "nummod")
+ (:file "hypergeometric"
+ :depends-on ("nummod"))
(:file "nfloat"
;; Comment in nfloat says hypergeometric needs to
;; be loaded first.
@@ -1004,6 +1008,7 @@
(:file "gamma"
:depends-on ("expintegral"))
(:file "plasma")))
+
(:module miscellaneous :source-pathname ""
:depends-on ("globals" "defmfun" "compatibility-macros1"
"reader" "utility-macros" "commands"
@@ -1026,7 +1031,6 @@
(:file "nset")
(:file "rand-mt19937")
(:file "maxmin")
- (:file "nummod")
(:file "conjugate")
(:file "hstep")
(:file "sinc")
-----------------------------------------------------------------------
Summary of changes:
src/maxima.system | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: willisbl <wil...@us...> - 2026-04-27 15:34:05
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, master has been updated
via 6dac3c3e0ff74f340b072872f906f57b02a6e272 (commit)
from b83d81fd3f579276ab00509e85f7d0a259b32daa (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 6dac3c3e0ff74f340b072872f906f57b02a6e272
Author: Barton Willis <wi...@un...>
Date: Mon Apr 27 10:33:54 2026 -0500
Unify definition of *large-positive-number* and replace hardcoded literals
• Remove the duplicate definition of *large-positive-number* from limit.lisp.
• Keep the definition in tlimit.lisp and set its value to 10^8.
• Replace all occurrences of the literal 100000000 in assume calls by *large-positive-number* to avoid magic numbers and ensure consistency.
For background discussion and rationale, see: https://sourceforge.net/p/maxima/mailman/maxima-discuss/thread/7612e629-d4d2-402d-9d0c-1af68a712e5e%40gmail.com/#msg59326645
Tested with SBCL 2.4.7 and Clozure CL 1.13.1 with no unexpected failures in the testsuite or share testsuite.
diff --git a/src/limit.lisp b/src/limit.lisp
index 8e2cee65b..eee165e00 100644
--- a/src/limit.lisp
+++ b/src/limit.lisp
@@ -56,10 +56,7 @@
#+nil
(unless (boundp 'integer-info) (setq integer-info ()))
-;; For limits toward infinity for the gruntz code, we assume that the limit
-;; variable exceeds *large-positive-number*. This value matches the value
-;; that the limit code uses for the same purpose.
-(defmvar *large-positive-number* (expt 10 8))
+
;; Don't ask sign questions about $ind.
(putprop '$ind t 'internal)
@@ -278,8 +275,8 @@
(defun limit-context (var val direction) ;Only works on entry!
(cond (limit-top
- (assume '((mgreaterp) lim-epsilon 0))
- (assume '((mgreaterp) prin-inf 100000000))
+ (assume (ftake 'mgreaterp 'lim-epsilon 0))
+ (assume (ftake 'mgreaterp 'prin-inf *large-positive-number*))
(setq *limit-assumptions* (make-limit-assumptions var val direction))
(setq limit-top ()))
(t ()))
@@ -292,13 +289,16 @@
((and (not (infinityp val)) (null direction))
())
((eq val '$inf)
- `(,(assume `((mgreaterp) ,var 100000000)) ,@new-assumptions))
+ (cons (assume (ftake 'mgreaterp var *large-positive-number*)) new-assumptions))
+
((eq val '$minf)
- `(,(assume `((mgreaterp) -100000000 ,var)) ,@new-assumptions))
+ (cons (assume (ftake 'mgreaterp (- *large-positive-number*) var)) new-assumptions))
+
((eq direction '$plus)
- `(,(assume `((mgreaterp) ,var 0)) ,@new-assumptions)) ;All limits around 0
+ (cons (assume (ftake 'mgreaterp var 0)) new-assumptions)) ;All limits around 0
+
((eq direction '$minus)
- `(,(assume `((mgreaterp) 0 ,var)) ,@new-assumptions))
+ (cons (assume (ftake 'mgreaterp 0 var)) new-assumptions))
(t
()))))
@@ -308,8 +308,8 @@
(do ((assumption-list *limit-assumptions* (cdr assumption-list)))
((null assumption-list) t)
(forget (car assumption-list)))
- (forget '((mgreaterp) lim-epsilon 0))
- (forget '((mgreaterp) prin-inf 100000000))
+ (forget (ftake 'mgreaterp 'lim-epsilon 0))
+ (forget (ftake 'mgreaterp 'prin-inf *large-positive-number*))
(cond ((and (not (null *integer-info*))
(not limitp))
(do ((list *integer-info* (cdr list)))
diff --git a/src/tlimit.lisp b/src/tlimit.lisp
index 1be08976e..1cef71321 100644
--- a/src/tlimit.lisp
+++ b/src/tlimit.lisp
@@ -44,8 +44,8 @@
(defvar *already-processed-limits* nil)
(defmvar *max-limit-depth* 8) ; magic number = 8 for no particular reason
-;; For limits toward `inf`, assume that the limit variable exceeds `*large-positive-number*`
-(defmvar *large-positive-number* 4398046511104) ; 2^42 for no particular reason
+;; For limits toward `inf`, assume that the limit variable exceeds *large-positive-number*.
+(defmvar *large-positive-number* (expt 10 8))
;; TOP LEVEL FUNCTION(S): $TLIMIT $TLDEFINT
(declaim (special limit-using-taylor))
-----------------------------------------------------------------------
Summary of changes:
src/limit.lisp | 24 ++++++++++++------------
src/tlimit.lisp | 4 ++--
2 files changed, 14 insertions(+), 14 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: <ap...@us...> - 2026-04-27 02:12:33
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, master has been updated
via b83d81fd3f579276ab00509e85f7d0a259b32daa (commit)
from 1395beb5692e9c9f816bc45d068b56101f7cdeae (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit b83d81fd3f579276ab00509e85f7d0a259b32daa
Author: Robert Dodier <rob...@so...>
Date: Sun Apr 26 17:52:43 2026 -0700
Fix minor bug (incorrect width) in pretty printer output for 'product(...).
The product symbol for Unicode output is wider at the top than the
bottom. Take that into account when figuring placement of the various
elements.
Fixes SF bug #4711: "Pretty-printer slightly incorrect output for 'product(...)"
diff --git a/src/displa.lisp b/src/displa.lisp
index 97c9d4fac..5ca697f2c 100644
--- a/src/displa.lisp
+++ b/src/displa.lisp
@@ -531,8 +531,9 @@
(update-heights height depth)
(return result)))))
-(defun dsumprod (form result d-form symbol-w symbol-h symbol-d)
- (prog (str to dummy (w 0) (h 0) (d 0) dummy2 (lsum (eq (caar form) '%lsum)))
+(defun dsumprod (form result d-form symbol-w-above symbol-w-below symbol-h symbol-d)
+ (prog (str to dummy (w 0) (h 0) (d 0) dummy2 (lsum (eq (caar form) '%lsum)) w1)
+ ;; format the variable
(setq dummy2 (dimension (caddr form) nil 'mparen 'mequal nil 0)
w width
h height
@@ -541,27 +542,30 @@
(setq str " in " to "")
(setq str " = " to (cadr (cdddr form))))
(push-string str dummy2)
+ ;; format the lower limit
(setq dummy2 (dimension (cadddr form) dummy2 'mequal 'mparen nil 0)
w (+ (length str) w width)
h (max h height)
d (max d depth))
+ ;; format the upper limit
(setq dummy (dimension to nil 'mparen 'mparen nil 0))
(unless (checkfit (max w width))
(return (dimension-function form result)))
- (setq dummy2 (cons (cons (- symbol-w) (cons (- (+ symbol-d h)) dummy2)) (cons d-form result)))
- (cond ((> width symbol-w)
- (setq symbol-w 0))
+ (setq dummy2 (cons (cons (- symbol-w-below) (cons (- (+ symbol-d h)) dummy2)) (cons d-form result)))
+ (cond ((> width symbol-w-below)
+ (setq w1 0))
(t
- (setq symbol-w (truncate (- symbol-w width) 2)
- width (+ symbol-w width))))
- (setq dummy (cons (cons (- symbol-w w) (cons (+ symbol-h depth) dummy)) dummy2)
+ (setq w1 (truncate (- symbol-w-below width) 2)
+ width (+ w1 width))))
+ (setq dummy (cons (cons (- w1 w) (cons (+ symbol-h depth) dummy)) dummy2)
w (max w width)
d (+ symbol-d h d)
h (+ symbol-h height depth))
(update-heights h d)
+ ;; format the expression
(setq dummy (dimension (cadr form) (cons (list (1+ (- w width)) 0) dummy)
(caar form) rop w right)
- width (+ 1 w width)
+ width (+ 1 w width (truncate (- symbol-w-above symbol-w-below) 2))
height (max h height)
depth (max d depth))
(return dummy)))
@@ -604,7 +608,10 @@
(displa-def %product dim-%product 115.)
(defun dim-%product (form result)
- (dsumprod form result '(d-prodsign) 5 3 1))
+ (let
+ ((symbol-width-above (if $display2d_unicode 7 5))
+ (symbol-width-below 5))
+ (dsumprod form result '(d-prodsign) symbol-width-above symbol-width-below 3 1)))
(displa-def rat dim-rat "/")
(displa-def %rat dim-rat "/")
@@ -974,10 +981,10 @@
(displa-def %lsum dim-%lsum 110.)
(defun dim-%lsum (form result)
- (dsumprod form result '(d-sumsign) 4 3 2))
+ (dsumprod form result '(d-sumsign) 4 4 3 2))
(defun dim-%sum (form result)
- (dsumprod form result '(d-sumsign) 4 3 2))
+ (dsumprod form result '(d-sumsign) 4 4 3 2))
(defun dim-%limit (form result)
(prog ((w 0) (h 0) (d 0) dummy)
diff --git a/tests/rtest_unicode_display.mac b/tests/rtest_unicode_display.mac
index 35f9a409d..ea863b667 100644
--- a/tests/rtest_unicode_display.mac
+++ b/tests/rtest_unicode_display.mac
@@ -121,7 +121,7 @@ block ([display2d_unicode: true], print_string_2d (product((x^i+1)^2.5,i,1,inf)/
│ │ (x + 1)
│ │
i = 1
- ─────────────────
+──────────────────
2
x + 1
"$
@@ -862,44 +862,44 @@ print_string_2d_unicode(matrix(ee1));
";
print_string_2d_unicode(transpose(matrix(ee1)));
-"┌ ┐
-│ ⌠ │
-│ ⎮ │
-│ ⎮ f(u) du │
-│ ⎮ │
-│ ⌡ │
-│ │
-│ 1 │
-│ ⌠ │
-│ ⎮ │
-│ ⎮ f(u) du │
-│ ⎮ │
-│ ⌡ │
-│ 0 │
-│ │
-│ m │
-│ ____ │
-│ ╲ │
-│ ⟩ g │
-│ ╱ k │
-│ ‾‾‾‾ │
-│ k = 1 │
-│ │
-│ │
-│ ____ │
-│ ╲ 2 │
-│ ⟩ v │
-│ ╱ k │
-│ ‾‾‾‾ │
-│ k in L │
-│ │
-│ inf │
-│ ─┬───┬─ │
-│ │ │ │
-│ │ │ N │
-│ │ │ i │
-│ i = 1 │
-└ ┘
+"┌ ┐
+│ ⌠ │
+│ ⎮ │
+│ ⎮ f(u) du │
+│ ⎮ │
+│ ⌡ │
+│ │
+│ 1 │
+│ ⌠ │
+│ ⎮ │
+│ ⎮ f(u) du │
+│ ⎮ │
+│ ⌡ │
+│ 0 │
+│ │
+│ m │
+│ ____ │
+│ ╲ │
+│ ⟩ g │
+│ ╱ k │
+│ ‾‾‾‾ │
+│ k = 1 │
+│ │
+│ │
+│ ____ │
+│ ╲ 2 │
+│ ⟩ v │
+│ ╱ k │
+│ ‾‾‾‾ │
+│ k in L │
+│ │
+│ inf │
+│ ─┬───┬─ │
+│ │ │ │
+│ │ │ N │
+│ │ │ i │
+│ i = 1 │
+└ ┘
";
(ee2:[e5,e6b,e7,e8a,e8b],print_string_2d_unicode(ee2));
@@ -1296,37 +1296,37 @@ block ([linel: 140], print_string_2d_unicode (matrix (ee1, ee2, ee4, ee5)));
│ ⌡ ⌡ ‾‾‾‾ ‾‾‾‾ i = 1 │
│ 0 k = 1 k in L │
│ │
-│ ┌ ┐ │
-│ │ y │ │
-│ │ 1 │ │
-│ │ │ │
-│ │ y │ │
-│ │ 2 │ │
-│ │ │ │
-│ │ y │ │
-│ │ 3 │ │
-│ │ │ │
-│ │ y │ │
-│ │ 4 │ │
-│ │ │ │
-│ 6 │ │ y │ │
-│ ∂ 1 │ │ 1 │ ┌ ┐ │ 5 │ │
-│ ─────────── (h(u , v , w )) ───────────│ │─────│ │ y y y y y y y y y y │ │ │ │
-│ 3 2 i j k 1 │ │ n │ │ 1 2 3 4 5 6 7 8 9 10 │ │ y │ │
-│ ∂u ∂v ∂w ─────── + 1│ │p │ └ ┘ │ 6 │ │
-│ i j k f(u, v) │ │ q │ │ │ │
-│ │(u = 0), (v = 1) │ r │ │ y │ │
-│ │ s │ │ 7 │ │
-│ │ 0│ │ │ │
-│ │ y │ │
-│ │ 8 │ │
-│ │ │ │
-│ │ y │ │
-│ │ 9 │ │
-│ │ │ │
-│ │ y │ │
-│ │ 10 │ │
-│ └ ┘ │
+│ ┌ ┐ │
+│ │ y │ │
+│ │ 1 │ │
+│ │ │ │
+│ │ y │ │
+│ │ 2 │ │
+│ │ │ │
+│ │ y │ │
+│ │ 3 │ │
+│ │ │ │
+│ │ y │ │
+│ │ 4 │ │
+│ │ │ │
+│ 6 │ │ y │ │
+│ ∂ 1 │ │ 1 │ ┌ ┐ │ 5 │ │
+│ ─────────── (h(u , v , w )) ───────────│ │─────│ │ y y y y y y y y y y │ │ │ │
+│ 3 2 i j k 1 │ │ n │ │ 1 2 3 4 5 6 7 8 9 10 │ │ y │ │
+│ ∂u ∂v ∂w ─────── + 1│ │p │ └ ┘ │ 6 │ │
+│ i j k f(u, v) │ │ q │ │ │ │
+│ │(u = 0), (v = 1) │ r │ │ y │ │
+│ │ s │ │ 7 │ │
+│ │ 0│ │ │ │
+│ │ y │ │
+│ │ 8 │ │
+│ │ │ │
+│ │ y │ │
+│ │ 9 │ │
+│ │ │ │
+│ │ y │ │
+│ │ 10 │ │
+│ └ ┘ │
│ │
│ baz╗ quux═══╗ │
│ foo bar╗ ║ n║ ║ 1 ║ y │
@@ -1338,9 +1338,9 @@ block ([linel: 140], print_string_2d_unicode (matrix (ee1, ee2, ee4, ee5)));
│ │
│ 3 2 2 3 │
│ - y + 3 x y - 3 x y + x - 1 │
-│ l k l k l k │ │
-│ ───────────────────────────────── FOO BAR BAZ u│ │
-│ 456 │u = 0 │
+│ l k l k l k │ │
+│ ───────────────────────────────── FOO BAR BAZ u│ │
+│ 456 │u = 0 │
│ 1234 - ────────── │
│ 3 │
│ (a - b ) │
@@ -1578,3 +1578,41 @@ print_string_2d_unicode ('diff(f,x,4,y,2));
4 2
∂x ∂y
";
+
+/* tests for SF bug #4711: "Pretty-printer slightly incorrect output for 'product(...)"
+ * which is also covered by tests involving 'product(...) expressions above
+ */
+
+print_string_2d_unicode (matrix ([box (1/(123456+a)), box('product(g(u),u,1, inf))], [box(h(z)), box([1])]));
+"┌ ┐
+│ ╔═══════════╗ │
+│ ║ inf ║ │
+│ ╔══════════╗ ║─┬───┬─ ║ │
+│ ║ 1 ║ ║ │ │ ║ │
+│ ║──────────║ ║ │ │ g(u)║ │
+│ ║a + 123456║ ║ │ │ ║ │
+│ ╚══════════╝ ║ u = 1 ║ │
+│ ╚═══════════╝ │
+│ │
+│ ╔════╗ ╔═══╗ │
+│ ║h(z)║ ║[1]║ │
+│ ╚════╝ ╚═══╝ │
+└ ┘
+";
+
+print_string_2d_unicode (matrix ([box(h(z)), box([1])], [box (1/(123456+a)), box('product(g(u),u,1, inf))]));
+"┌ ┐
+│ ╔════╗ ╔═══╗ │
+│ ║h(z)║ ║[1]║ │
+│ ╚════╝ ╚═══╝ │
+│ │
+│ ╔═══════════╗ │
+│ ║ inf ║ │
+│ ╔══════════╗ ║─┬───┬─ ║ │
+│ ║ 1 ║ ║ │ │ ║ │
+│ ║──────────║ ║ │ │ g(u)║ │
+│ ║a + 123456║ ║ │ │ ║ │
+│ ╚══════════╝ ║ u = 1 ║ │
+│ ╚═══════════╝ │
+└ ┘
+";
-----------------------------------------------------------------------
Summary of changes:
src/displa.lisp | 31 ++++---
tests/rtest_unicode_display.mac | 184 ++++++++++++++++++++++++----------------
2 files changed, 130 insertions(+), 85 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2026-04-26 23:21:42
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, rtoy-break-dependency-cycles-2 has been updated
via 3538c1e5d50d46d30c927dca585c1422f23c206a (commit)
from b79fbf5a456108e05e1679b432a1cc904134a7b4 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 3538c1e5d50d46d30c927dca585c1422f23c206a
Author: Raymond Toy <toy...@gm...>
Date: Sun Apr 26 16:19:55 2026 -0700
Add/update comments about intra-module dependency
For each module add a comment about the components if they are
completely cycle-free. For the ones that aren't add a brief comment
about what is cycle-free and what causes a cycle.
diff --git a/src/maxima.system b/src/maxima.system
index 8797a4dad..bb2389d51 100644
--- a/src/maxima.system
+++ b/src/maxima.system
@@ -234,6 +234,8 @@
:depends-on ("globals" "defmfun" "compatibility-macros1"
"declarations" "prerequisites"
"compatibility-macros")
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
:components
((:file "defcal")
(:file "maxmac")))
@@ -249,6 +251,7 @@
;; and can't depend on those modules because that causes a
;; circular dependency.
:depends-on ("prerequisites" "defmfun")
+ ;; Module is a clean DAG at every level.
:components
((:file "mopers")
(:file "opers"
@@ -268,11 +271,15 @@
;; Note: this depends on merror which causes a circular
;; dependency.
:depends-on ("simp-utilities" "fundamental-macros" "nformat")
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
:components
((:file "opr-util")
(:file "basic-util")))
(:module m2-pattern-matcher :source-pathname ""
:depends-on ("simp-utilities")
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
:components
((:file "schatc")
(:file "schatc-util")))
@@ -288,7 +295,7 @@
(:module other-macros :source-pathname ""
:depends-on ("defmfun" "compatibility-macros1" "declarations"
"prerequisites" "utility-macros")
- ;; These files appear to be independent of each other.
+ ;; Module is a clean DAG at every level.
:components
((:file "mrgmac")
(:file "rzmac")
@@ -306,6 +313,8 @@
:depends-on ("globals" "defmfun" "utility-macros" "compatibility-macros"
"compatibility-macros1" "declarations" "fundamental-macros"
"prerequisites")
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
:components
((:file "utils")
(:file "sumcon")
@@ -339,6 +348,7 @@
;; get the rest of maxima built.
(:module numerical
:depends-on ("defmfun")
+ ;; Compile-time deps form a DAG.
:components
((:module packages :source-pathname ""
:components
@@ -759,7 +769,8 @@
"utility-macros" "reader"
"fundamental-macros" "other-macros" "prerequisites"
"numerical-utilities")
- ;; These files are mutually independent.
+ ;; Module is a clean DAG at every level: function calls, macros,
+ ;; special-variable references.
:components
((:file "bessel")
(:file "airy")))
@@ -780,7 +791,8 @@
:depends-on ("globals" "defmfun" "compatibility-macros1" "declarations"
"fundamental-macros" "prerequisites"
"simp-utilities")
- ;; No circular dependencies between these files.
+ ;; Module is a clean DAG at every level: function calls, macros,
+ ;; special-variable references.
:components
((:file "mgrind") ; grinding/sizing utilities
(:file "grind" ; Linear display
@@ -791,6 +803,8 @@
:depends-on ("globals" "defmfun" "declarations" "destructuring-let"
"fundamental-macros" "prerequisites"
"rat-macros" "utilities")
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
:components
((:file "spgcd")
(:file "ezgcd")))
@@ -804,6 +818,11 @@
:depends-on ("globals" "defmfun" "compatibility-macros1" "declarations"
"evaluator" "fundamental-macros" "other-macros"
"prerequisites" "utility-macros")
+ ;; Compile-time deps form a DAG. Two runtime cycles are
+ ;; structural: compar <-> db (sign/comparison logic vs the
+ ;; fact database) and askp <-> compar (interactive
+ ;; integer/parity queries vs the predicates that prompt
+ ;; them).
:components
((:file "inmis")
(:file "db")
@@ -821,6 +840,8 @@
"miscellaneous" "other-macros" "prerequisites" "utility-macros"
"m2-pattern-matcher"
"variable-predicates")
+ ;; Module is a clean DAG at every level: function calls, macros,
+ ;; special-variable references.
:components
((:file "hyp")
(:file "hypergeometric")
@@ -866,10 +887,8 @@
"hypergeometric"
"m2-pattern-matcher"
"variable-predicates")
- ;; xref analysis confirms compile-time dependencies form a
- ;; DAG (no defmacro is used cross-file). residu is the
- ;; leaf; defint depends on it (function calls); laplac
- ;; depends on defint and hypgeo. No cycles.
+ ;; Module is a clean DAG at every level: function calls, macros,
+ ;; special-variable references.
:components
((:file "residu")
(:file "defint"
@@ -885,6 +904,10 @@
"prerequisites" "utility-macros"
"taylor-series"
"m2-pattern-matcher")
+ ;; Compile-time deps form a DAG. Runtime cycle trigi <->
+ ;; trigo is structural (trigi calls trigo:trigexpand for
+ ;; forward simplification, trigo calls trigi for shared
+ ;; eval/reflection helpers).
:components
((:file "trigi")
(:file "trigo")
@@ -902,8 +925,8 @@
"maxima-language-compiler-macros"
"prerequisites" "utility-macros"
"destructuring-let" "utilities")
- ;; Now circular dependencies; all functions defined before
- ;; use.
+ ;; Module is a clean DAG at every level: function calls, macros,
+ ;; special-variable references.
:components
((:file "mat")
(:file "matrix" :depends-on ("mat"))
@@ -912,6 +935,8 @@
:depends-on ("globals" "defmfun" "declarations"
"maxima-language-compiler-macros"
"prerequisites")
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
:components
((:file "sprdet")
(:file "newinv")
@@ -922,6 +947,8 @@
"fundamental-macros" "prerequisites"
"rat-macros"
"simp-utilities")
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
:components
((:file "matcom")
(:file "matrun")
@@ -932,8 +959,9 @@
"errset" "fundamental-macros"
"other-macros" "prerequisites"
"utilities" "utility-macros")
- ;; These 2 files are coupled. Hard to separate out
- ;; without moving lots and lots of things around.
+ ;; Compile-time deps form a DAG. Runtime cycle limit <->
+ ;; tlimit is structural (mutual dispatch between limit and
+ ;; Taylor-limit).
:components ((:file "tlimit")
(:file "limit")))
(:module solve :source-pathname ""
@@ -962,17 +990,20 @@
:depends-on ("globals" "defmfun" "compatibility-macros1" "compatibility-macros"
"declarations" "fundamental-macros"
"prerequisites" "utility-macros")
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
:components
((:file "mtrace")
(:file "mdebug")))
(:module gamma-expint :source-pathname ""
- :depends-on ("numerical-utilities" "m2-pattern-matcher")
- ;; No circular dependencies among the files here.
- :components
- ((:file "expintegral")
- (:file "gamma"
- :depends-on ("expintegral"))
- (:file "plasma")))
+ :depends-on ("numerical-utilities" "m2-pattern-matcher")
+ ;; Module is a clean DAG at every level: function calls, macros,
+ ;; special-variable references.
+ :components
+ ((:file "expintegral")
+ (:file "gamma"
+ :depends-on ("expintegral"))
+ (:file "plasma")))
(:module miscellaneous :source-pathname ""
:depends-on ("globals" "defmfun" "compatibility-macros1"
"reader" "utility-macros" "commands"
@@ -1007,6 +1038,8 @@
(:module poisson-series :source-pathname ""
:depends-on ("defmfun" "declarations" "fundamental-macros"
"prerequisites")
+ ;; Module is a clean DAG at every level: function calls, macros,
+ ;; special-variable references.
:components
((:file "pois2")
(:file "pois3"
@@ -1017,6 +1050,8 @@
"defmfun" "declarations" "errset"
"miscellaneous" "other-macros" "prerequisites"
"utility-macros")
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
:components
((:file "desoln")
(:file "elim")
@@ -1025,6 +1060,8 @@
(:file "plot")))
(:module graphics-drivers :source-pathname ""
:depends-on ("defmfun")
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
:components
((:file "plotcolors")
(:file "gnuplot_def")
@@ -1037,6 +1074,8 @@
;; at runtime are not part of the final executable if they aren't.
;; compiled.
#-ecl :load-only #-ecl t
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
:components
((:file "autol")
(:file "max_ext")
-----------------------------------------------------------------------
Summary of changes:
src/maxima.system | 75 ++++++++++++++++++++++++++++++++++++++++++-------------
1 file changed, 57 insertions(+), 18 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2026-04-26 22:43:13
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, rtoy-break-dependency-cycles-2 has been updated
via b79fbf5a456108e05e1679b432a1cc904134a7b4 (commit)
from 426b0eb5f0d48f9239674a6b11af3a35d6bfa10c (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit b79fbf5a456108e05e1679b432a1cc904134a7b4
Author: Raymond Toy <toy...@gm...>
Date: Sun Apr 26 15:41:08 2026 -0700
Document the cycles in rational-functions and translator
Add a comment documenting (very briefly) the cycles in the
rationa-functions module and the maxima-language-compiler module.
These cycles are hard to break and probably not worth it now. As long
as the files stay in their respective modules, this dependency is
manageable.
diff --git a/src/maxima.system b/src/maxima.system
index 3c95ff07a..8797a4dad 100644
--- a/src/maxima.system
+++ b/src/maxima.system
@@ -698,6 +698,9 @@
"compatibility-macros" "declarations" "destructuring-let"
"fundamental-macros" "prerequisites" "utilities"
"simp-utilities")
+ ;; Compile-time deps ahve no cross-file macros nor
+ ;; cross-file specials. However, there's lots of mutually
+ ;; recursive calls amlong the files. Pretty hard to fix this.
:components
((:file "rat3a")
(:file "rat3b")
@@ -711,6 +714,11 @@
"compatibility-macros" "compatibility-macros1"
"declarations" "destructuring-let" "fundamental-macros"
"i-o" "prerequisites")
+ ;; Compile-time deps form a DAG. Three small runtime
+ ;; cycles remain, all between transl (the translator core)
+ ;; and its tightly-coupled helpers: trans2 (array
+ ;; dispatch), trutil (defvar pushing), trmode (mode
+ ;; system).
:components
((:file "transl")
(:file "transs"
-----------------------------------------------------------------------
Summary of changes:
src/maxima.system | 8 ++++++++
1 file changed, 8 insertions(+)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2026-04-26 21:15:24
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, rtoy-break-dependency-cycles-2 has been updated
via 426b0eb5f0d48f9239674a6b11af3a35d6bfa10c (commit)
from adbf6be29f7fb482b8bead7ad73c89792c951724 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 426b0eb5f0d48f9239674a6b11af3a35d6bfa10c
Author: Raymond Toy <toy...@gm...>
Date: Sun Apr 26 14:14:05 2026 -0700
Break cycle between logarc and rpart
Move halfangle, halfangleaux, halfangleaux-factor from logarc.lisp
to a new file halfangle.lisp. These half-angle functions are
called from trigi/trigo, not from logarc itself, but they used
rpart's $realpart/$imagpart -- which combined with rpart's call to
logarc formed the cycle.
Component order becomes logarc -> rpart -> halfangle. The
simplification module now has no cycle.
diff --git a/src/halfangle.lisp b/src/halfangle.lisp
new file mode 100644
index 000000000..5404a90a8
--- /dev/null
+++ b/src/halfangle.lisp
@@ -0,0 +1,69 @@
+;;; -*- Mode: Lisp; Package: Maxima; Syntax: Common-Lisp; Base: 10 -*- ;;;;
+;;;
+;;; This file is part of the Maxima computer algebra project
+;;; (https://sourceforge.net/projects/maxima/)
+;;; SPDX-License-Identifier: GPL-2.0-or-later
+;;;
+;;; Maxima is copyrighted by its authors and licensed under the GNU
+;;; General Public License. This program is distributed WITHOUT ANY
+;;; WARRANTY. See COPYING and AUTHORS for details.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;
+;;; Half-angle simplification, called from trigi and trigo. Split out
+;;; from logarc so that the half-angle code's dependence on rpart's
+;;; $realpart / $imagpart does not create a cycle with rpart's call to
+;;; logarc.
+
+(in-package :maxima)
+(macsyma-module halfangle)
+
+(defun halfangle (f a)
+ (and (mtimesp a)
+ (ratnump (cadr a))
+ (equal (caddr (cadr a)) 2)
+ (halfangleaux f (mul 2 a))))
+
+(defun halfangleaux (f a) ;; f=function; a=twice argument
+ (let ((sw (member f '(%cos %cot %coth %cosh) :test #'eq)))
+ (cond ((member f '(%sin %cos) :test #'eq)
+ (mul (halfangleaux-factor f a)
+ (power (div (add 1 (porm sw (take '(%cos) a))) 2) 1//2)))
+ ((member f '(%tan %cot) :test #'eq)
+ (div (add 1 (porm sw (take '(%cos) a))) (take '(%sin) a)))
+ ((member f '(%sinh %cosh) :test #'eq)
+ (mul (halfangleaux-factor f a)
+ (power (div (add (take '(%cosh) a) (porm sw 1)) 2) 1//2)))
+ ((member f '(%tanh %coth) :test #'eq)
+ (div (add (take '(%cosh) a) (porm sw 1)) (take '(%sinh) a)))
+ ((member f '(%sec %csc %sech %csch) :test #'eq)
+ (inv (halfangleaux (get f 'recip) a))))))
+
+(defun halfangleaux-factor (f a)
+ (cond
+ ((member f '(%sin %cos))
+ (let ((arg (div (if (eq f '%sin)
+ ($realpart a)
+ (add ($realpart a) '$%pi))
+ (mul 2 '$%pi))))
+ (mul
+ (power -1 (simplify (list '($floor) arg)))
+ (sub 1
+ (mul
+ (add 1
+ (power -1 (add (simplify (list '($floor) arg))
+ (simplify (list '($floor) (mul -1 arg))))))
+ (simplify (list '($unit_step) (mul -1 ($imagpart a)))))))))
+ ((member f '(%sinh %cosh))
+ (let ((arg (div (add ($imagpart a) '$%pi) (mul 2 '$%pi)))
+ (fac (if (eq f '%sinh)
+ (div (power (power a 2) (div 1 2)) a)
+ 1)))
+ (mul fac
+ (power -1 (simplify (list '($floor) arg)))
+ (sub 1
+ (mul
+ (add 1
+ (power -1 (add (simplify (list '($floor) arg))
+ (simplify (list '($floor) (mul -1 arg))))))
+ (simplify (list '($unit_step) ($realpart a))))))))
+ (t 1)))
diff --git a/src/logarc.lisp b/src/logarc.lisp
index c9c175a4f..b5905911b 100644
--- a/src/logarc.lisp
+++ b/src/logarc.lisp
@@ -11,7 +11,7 @@
(in-package :maxima)
(macsyma-module logarc)
-;;; Logarc and Halfangles
+;;; Logarithmic form of inverse-trig and trig functions.
(defmfun $logarc (exp)
(cond ((atom exp) exp)
@@ -65,54 +65,3 @@
(logarc '%atan2 (list (partial-logarc (second e) l)
(partial-logarc (third e) l))))
(t (recur-apply #'(lambda (q) (partial-logarc q l)) e))))
-
-(defun halfangle (f a)
- (and (mtimesp a)
- (ratnump (cadr a))
- (equal (caddr (cadr a)) 2)
- (halfangleaux f (mul 2 a))))
-
-(defun halfangleaux (f a) ;; f=function; a=twice argument
- (let ((sw (member f '(%cos %cot %coth %cosh) :test #'eq)))
- (cond ((member f '(%sin %cos) :test #'eq)
- (mul (halfangleaux-factor f a)
- (power (div (add 1 (porm sw (take '(%cos) a))) 2) 1//2)))
- ((member f '(%tan %cot) :test #'eq)
- (div (add 1 (porm sw (take '(%cos) a))) (take '(%sin) a)))
- ((member f '(%sinh %cosh) :test #'eq)
- (mul (halfangleaux-factor f a)
- (power (div (add (take '(%cosh) a) (porm sw 1)) 2) 1//2)))
- ((member f '(%tanh %coth) :test #'eq)
- (div (add (take '(%cosh) a) (porm sw 1)) (take '(%sinh) a)))
- ((member f '(%sec %csc %sech %csch) :test #'eq)
- (inv (halfangleaux (get f 'recip) a))))))
-
-(defun halfangleaux-factor (f a)
- (cond
- ((member f '(%sin %cos))
- (let ((arg (div (if (eq f '%sin)
- ($realpart a)
- (add ($realpart a) '$%pi))
- (mul 2 '$%pi))))
- (mul
- (power -1 (simplify (list '($floor) arg)))
- (sub 1
- (mul
- (add 1
- (power -1 (add (simplify (list '($floor) arg))
- (simplify (list '($floor) (mul -1 arg))))))
- (simplify (list '($unit_step) (mul -1 ($imagpart a)))))))))
- ((member f '(%sinh %cosh))
- (let ((arg (div (add ($imagpart a) '$%pi) (mul 2 '$%pi)))
- (fac (if (eq f '%sinh)
- (div (power (power a 2) (div 1 2)) a)
- 1)))
- (mul fac
- (power -1 (simplify (list '($floor) arg)))
- (sub 1
- (mul
- (add 1
- (power -1 (add (simplify (list '($floor) arg))
- (simplify (list '($floor) (mul -1 arg))))))
- (simplify (list '($unit_step) ($realpart a))))))))
- (t 1)))
diff --git a/src/maxima.system b/src/maxima.system
index 648597785..3c95ff07a 100644
--- a/src/maxima.system
+++ b/src/maxima.system
@@ -622,14 +622,22 @@
"fundamental-macros" "i-o" "other-macros" "prerequisites"
"numerical-utilities"
"simp-utilities")
+ ;; Module is a clean DAG at every level: function calls,
+ ;; macros, special-variable references.
:components
((:file "simp-fn")
- (:file "float")
(:file "csimp")
- (:file "csimp2")
- (:file "zero")
(:file "logarc")
- (:file "rpart")))
+ (:file "rpart"
+ :depends-on ("logarc"))
+ (:file "float"
+ :depends-on ("logarc" "rpart"))
+ (:file "csimp2"
+ :depends-on ("csimp" "float" "rpart"))
+ (:file "zero"
+ :depends-on ("rpart"))
+ (:file "halfangle"
+ :depends-on ("rpart"))))
(:module numeric-bigfloat :source-pathname ""
:depends-on ("globals" "defmfun" #-gcl "package"
#+gcl "proclaim")
-----------------------------------------------------------------------
Summary of changes:
src/halfangle.lisp | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
src/logarc.lisp | 53 +----------------------------------------
src/maxima.system | 16 +++++++++----
3 files changed, 82 insertions(+), 56 deletions(-)
create mode 100644 src/halfangle.lisp
hooks/post-receive
--
Maxima CAS
|