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
(19) |
|
From: <ap...@us...> - 2025-12-11 07:05:22
|
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 bb307e3ac366da08489246040006a3e00bddd635 (commit)
from f350ddd019079b69da22d3df4691392003f0e34d (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 bb307e3ac366da08489246040006a3e00bddd635
Author: Robert Dodier <rob...@so...>
Date: Wed Dec 10 23:04:17 2025 -0800
Give $BOX the ALIAS property, so that a bare box symbol (not an expression operator) is parsed to MBOX.
This makes e.g. map(box, [e1, e2, e3]) work as expected.
diff --git a/src/comm2.lisp b/src/comm2.lisp
index 089b5300d..e1da8ba48 100644
--- a/src/comm2.lisp
+++ b/src/comm2.lisp
@@ -736,7 +736,14 @@ the hashtable.")
;;;; BOX
+;; Alias makes `box` in input parse to symbol MBOX.
+;; (The MHEADER property is only applied to nonatomic expressions;
+;; the alias property covers `box` as a symbol.)
+
+(defprop $box mbox alias)
+
;; Reverse alias makes MBOX and MLABOX display as box in 1-d output.
+
(defprop mbox $box reversealias)
(defprop mlabox $box reversealias)
-----------------------------------------------------------------------
Summary of changes:
src/comm2.lisp | 7 +++++++
1 file changed, 7 insertions(+)
hooks/post-receive
--
Maxima CAS
|
|
From: <ap...@us...> - 2025-12-11 06:53:27
|
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 f350ddd019079b69da22d3df4691392003f0e34d (commit)
from ee369a0f5d1a40bb26a0dc80b6ce3de0475cd469 (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 f350ddd019079b69da22d3df4691392003f0e34d
Author: Robert Dodier <rob...@so...>
Date: Wed Dec 10 22:52:58 2025 -0800
New flag display_matrix_padding_horizontal to control between-columns padding for matrix display.
Default value is true (spaces between columns and a space
before the first column and after the last column).
When false, omit spaces between, before, and after;
columns are adjacent.
This commit includes a reference manual item and
some examples in tests/test_matrix_display.mac.
diff --git a/doc/info/Matrices.texi.m4 b/doc/info/Matrices.texi.m4
index b30582984..08b7cebda 100644
--- a/doc/info/Matrices.texi.m4
+++ b/doc/info/Matrices.texi.m4
@@ -1622,6 +1622,67 @@ only the matrix elements are displayed.
@end deffn
+@c -----------------------------------------------------------------------------
+@anchor{display_matrix_padding_horizontal}
+@deffn {Option variable} display_matrix_padding_horizontal
+Default value: @code{true}
+
+When @code{display_matrix_padding_horizontal} is @code{true},
+matrices are displayed with spaces between successive columns,
+and a space before the first column and a space after the last column.
+
+When @code{display_matrix_padding_horizontal} is @code{false},
+matrices are not displayed with spaces between successive columns,
+and no space before the first column and no space after the last column.
+Successive columns are immediately adjacent to each other,
+and the first column is immediately adjacent to the left bracket,
+and the last column is immediately adjacent to the right bracket,
+if the brackets are present (see @mref{display_matrix_brackets}).
+
+See also @mrefdot{display_matrix_padding_vertical}
+
+Examples:
+
+@c ===beg===
+@c display_matrix_padding_horizontal;
+@c foo: matrix ([a, b, c], [d, e, f], [g, h, i]);
+@c display_matrix_padding_horizontal: false;
+@c foo;
+@c ===end===
+@example maxima
+@group
+(%i1) display_matrix_padding_horizontal;
+(%o1) true
+(%i2) foo: matrix ([a, b, c], [d, e, f], [g, h, i]);
+ ┌ ┐
+ │ a b c │
+ │ │
+(%o2) │ d e f │
+ │ │
+ │ g h i │
+ └ ┘
+@end group
+@group
+(%i3) display_matrix_padding_horizontal: false;
+(%o3) false
+(%i4) foo;
+ ┌ ┐
+ │abc│
+ │ │
+(%o4) │def│
+ │ │
+ │ghi│
+ └ ┘
+@end group
+@end example
+
+@opencatbox{Categories:}
+@category{Matrices}
+@category{Display flags and variables}
+@closecatbox
+
+@end deffn
+
@c -----------------------------------------------------------------------------
@anchor{display_matrix_padding_vertical}
@deffn {Option variable} display_matrix_padding_vertical
@@ -1634,6 +1695,8 @@ When @code{display_matrix_padding_vertical} is @code{false},
matrices are not displayed with an empty line between successive rows;
successive rows are immediately adjacent to each other.
+See also @mrefdot{display_matrix_padding_horizontal}
+
Examples:
@c ===beg===
diff --git a/src/displa.lisp b/src/displa.lisp
index 10b7bdf73..f3e2ddfe2 100644
--- a/src/displa.lisp
+++ b/src/displa.lisp
@@ -1202,6 +1202,7 @@
(defmvar $display_matrix_brackets t)
(defmvar $display_matrix_padding_vertical t)
+(defmvar $display_matrix_padding_horizontal t)
(defun dim-$matrix (form result)
(prog (dmstr rstr cstr consp cols)
@@ -1221,7 +1222,7 @@
(do ((r (cdr form) (cdr r)) (h1 0) (d1 0))
((or consp (null r))
(setq width 0)
- (do ((cs cstr (cdr cs))) ((null cs)) (setq width (+ 2 (car cs) width)))
+ (do ((cs cstr (cdr cs))) ((null cs)) (setq width (+ (if $display_matrix_padding_horizontal 2 0) (car cs) width)))
(if (display2d-unicode-enabled)
(setq h1 (1+ (+ h1 d1)) depth (truncate h1 2) height (- h1 depth))
(setq h1 (1- (+ h1 d1)) depth (truncate h1 2) height (- h1 depth))))
@@ -1245,7 +1246,7 @@
(defun matout (dmstr cstr rstr result)
(when $display_matrix_brackets (push `(d-matrix left ,height ,depth) result))
- (push #\space result)
+ (when $display_matrix_padding_horizontal (push #\space result))
(do ((d dmstr (cdr d)) (c cstr (cdr c)) (w 0 0))
((null d))
(do ((d (car d) (cdr d)) (r rstr (cdr r))) ((null d))
@@ -1253,7 +1254,7 @@
(rplaca (cdar d) (- (truncate (- (car c) (caar d)) 2) w))
(setq w (truncate (+ (car c) (caar d)) 2))
(rplaca d (cdar d)))
- (setq result (cons (list (+ 2 (- (car c) w)) 0) (nreconc (car d) result))))
+ (setq result (cons (list (+ (if $display_matrix_padding_horizontal 2 (if (cdr c) 0 1)) (- (car c) w)) 0) (nreconc (car d) result))))
(if $display_matrix_brackets
(setq width (+ 2 width))
(when $display2d_unicode
-----------------------------------------------------------------------
Summary of changes:
doc/info/Matrices.texi.m4 | 63 +++++++++++++++++++++++++++++++++++++++++++++++
src/displa.lisp | 7 +++---
2 files changed, 67 insertions(+), 3 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: vttoth <vt...@us...> - 2025-12-11 05:26:04
|
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 ee369a0f5d1a40bb26a0dc80b6ce3de0475cd469 (commit)
from 854c4e4cd0819d2498a09f0a18e79dfc64582d0e (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 ee369a0f5d1a40bb26a0dc80b6ce3de0475cd469
Author: Viktor T. Toth <vt...@vt...>
Date: Thu Dec 11 00:25:34 2025 -0500
Two expected GCL failures in rtest_signum added
diff --git a/src/testsuite.lisp b/src/testsuite.lisp
index 3b54b5a29..72b4a79c5 100644
--- a/src/testsuite.lisp
+++ b/src/testsuite.lisp
@@ -108,7 +108,8 @@
((mlist simp) "rtest_gamma"
#+allegro ((mlist simp) 48 198 663 745))
"rtest_expintegral"
- "rtest_signum"
+ ((mlist simp) "rtest_signum"
+ #+gcl ((mlist simp) 78 79))
"rtest_lambert_w"
((mlist simp) "rtest_elliptic"
#-allegro ((mlist simp) 135)
-----------------------------------------------------------------------
Summary of changes:
src/testsuite.lisp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2025-12-10 23:14:22
|
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 854c4e4cd0819d2498a09f0a18e79dfc64582d0e (commit)
via ce3f0a0a184fe44f540020502d32bb4084e60ee3 (commit)
from ff646590d9341cebf39f658ea86da2b48c61caf4 (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 854c4e4cd0819d2498a09f0a18e79dfc64582d0e
Author: Raymond Toy <toy...@gm...>
Date: Wed Dec 10 15:13:57 2025 -0800
Update Changelog for #4647
diff --git a/ChangeLog b/ChangeLog
index c043af3d2..4fa958860 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -17,7 +17,8 @@ Bug fixes for numbered bugs:
* \#4619: limit(inf = inf) causes stack overflow
* \#4633: integrate(exp(- t) log(t), t, 0, 1) --> integral nounform
* \#4636: signum(ind) is an error
-
+ * \#4647: Maxima error in --preload file causes Lisp error
+
Changes in the Windows installer:
---------------------------------
* Update SBCL
commit ce3f0a0a184fe44f540020502d32bb4084e60ee3
Author: Raymond Toy <toy...@gm...>
Date: Wed Dec 10 15:10:47 2025 -0800
Fix #4647: Error in --preload file causes Lisp error
Instead of a Lisp error, we should continue to the repl. To do so, we
need to catch 'macsyma-quit which is thrown when an error is
encountered. This works when the file is either a mac or lisp file.
diff --git a/src/init-cl.lisp b/src/init-cl.lisp
index 771897d8d..9289a2b67 100644
--- a/src/init-cl.lisp
+++ b/src/init-cl.lisp
@@ -512,7 +512,9 @@ maxima [options] --batch-string='batch_answers_from_file:false; ...'
;; $loadprint T so we can see the file being loaded;
;; unless *maxima-quiet* is T.
(let (($loadprint (not *maxima-quiet*)))
- ($load file)))
+ ;; If there's an error, catch
+ (catch 'macsyma-quit
+ ($load file))))
:help-string
"Preload <file>, which may be any file time accepted by
Maxima's LOAD function. The <file> is loaded before any other
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 3 ++-
src/init-cl.lisp | 4 +++-
2 files changed, 5 insertions(+), 2 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2025-12-10 18:10:44
|
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 ff646590d9341cebf39f658ea86da2b48c61caf4 (commit)
via 79a5ff19027758b327747a81559adc665eccdaad (commit)
via b5553c1cb7bfc31cdc054fbfac3450336022045e (commit)
from ce92a9eaf335223a0a089eab19729a8f0ced94cd (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 ff646590d9341cebf39f658ea86da2b48c61caf4
Merge: ce92a9eaf 79a5ff190
Author: Raymond Toy <toy...@gm...>
Date: Wed Dec 10 10:10:09 2025 -0800
Merge branch 'rtoy-remove-bigfloat%pi'
Full testsuite+share passes with cmucl and ecl.
-----------------------------------------------------------------------
Summary of changes:
share/numeric/rtest_decfp.mac | 2 +-
src/float.lisp | 7 -------
src/globals.lisp | 12 ------------
3 files changed, 1 insertion(+), 20 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2025-12-10 16:53: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-remove-bigfloat%pi has been created
at 79a5ff19027758b327747a81559adc665eccdaad (commit)
- Log -----------------------------------------------------------------
commit 79a5ff19027758b327747a81559adc665eccdaad
Author: Raymond Toy <toy...@gm...>
Date: Wed Dec 10 08:51:43 2025 -0800
Really remove bigfloat%pi and friends
These were just commented out. Now really remove them from the source
code.
diff --git a/src/float.lisp b/src/float.lisp
index cd07422cb..a7458906c 100644
--- a/src/float.lisp
+++ b/src/float.lisp
@@ -46,16 +46,6 @@
(defvar *decfp nil)
-;; FIXME: These don't appear to be used anywhere. Remove these.
-#+nil
-(progn
-(defvar max-bfloat-%pi bigfloat%pi)
-(defvar max-bfloat-%e bigfloat%e)
-(defvar max-bfloat-%gamma bigfloat%gamma)
-(defvar max-bfloat-log2 bigfloat_log2)
-)
-
-
(declare-top (special *cancelled $bfloat))
;; Representation of a Bigfloat: ((BIGFLOAT SIMP precision) mantissa exponent)
diff --git a/src/globals.lisp b/src/globals.lisp
index a0f0f37fd..9091f4f59 100644
--- a/src/globals.lisp
+++ b/src/globals.lisp
@@ -815,22 +815,6 @@
"Bigfloat representation of -1/2. Automatically updated whenever
fpprec is set.")
-#+nil
-(defmvar bigfloat%e '((bigfloat simp 56.) 48968212118944587. 2)
- "Bigfloat representation of %E")
-
-#+nil
-(defmvar bigfloat%pi '((bigfloat simp 56.) 56593902016227522. 2)
- "Bigfloat representation of %pi")
-
-#+nil
-(defmvar bigfloat%gamma '((bigfloat simp 56.) 41592772053807304. 0)
- "Bigfloat representation of %gamma")
-
-#+nil
-(defmvar bigfloat_log2 '((bigfloat simp 56.) 49946518145322874. 0)
- "Bigfloat representation of log(2)")
-
;; Number of bits of precision in the mantissa of newly created bigfloats.
;; FPPREC = ($FPPREC+1)*(Log base 2 of 10)
commit b5553c1cb7bfc31cdc054fbfac3450336022045e
Author: Raymond Toy <toy...@gm...>
Date: Wed Dec 10 08:19:26 2025 -0800
Remove bigfloat%pi and friends
This includes bigfloat%e, bigfloat%gamma, and bigfloat_log2. Whenver
these variables were used, they were always bound to the correct
bigfloat value (via `$bfloat`) before use. Hence, there's no reason
to have these special variables.
Also bigfloat_log2 was never used anywhere.
Removing these also allows us to remove max-bfloat-%pi, max-bfloat-%e,
max-bfloat-%gamma and max-bfloat-log2. These were never used
anywhere (as mentioned in the comment in float.lisp).
diff --git a/share/numeric/rtest_decfp.mac b/share/numeric/rtest_decfp.mac
index 7ff87fcba..04d9f4d14 100644
--- a/share/numeric/rtest_decfp.mac
+++ b/share/numeric/rtest_decfp.mac
@@ -84,5 +84,5 @@ block(
/* The decfp code changes the value of bigfloatone (and possibly other
such values) to decimal floats. Let's reset them. */
-(reset(?bigfloat%pi,?bigfloat%e,?\*bfmhalf\*,?\*bfhalf\*,?\*bigfloatone\*,?\*bigfloatzero\*),0);
+(reset(?\*bfmhalf\*,?\*bfhalf\*,?\*bigfloatone\*,?\*bigfloatzero\*),0);
0$
\ No newline at end of file
diff --git a/src/float.lisp b/src/float.lisp
index 73462c3ec..cd07422cb 100644
--- a/src/float.lisp
+++ b/src/float.lisp
@@ -47,10 +47,13 @@
(defvar *decfp nil)
;; FIXME: These don't appear to be used anywhere. Remove these.
+#+nil
+(progn
(defvar max-bfloat-%pi bigfloat%pi)
(defvar max-bfloat-%e bigfloat%e)
(defvar max-bfloat-%gamma bigfloat%gamma)
(defvar max-bfloat-log2 bigfloat_log2)
+)
(declare-top (special *cancelled $bfloat))
diff --git a/src/globals.lisp b/src/globals.lisp
index fbdc95be6..a0f0f37fd 100644
--- a/src/globals.lisp
+++ b/src/globals.lisp
@@ -815,15 +815,19 @@
"Bigfloat representation of -1/2. Automatically updated whenever
fpprec is set.")
+#+nil
(defmvar bigfloat%e '((bigfloat simp 56.) 48968212118944587. 2)
"Bigfloat representation of %E")
+#+nil
(defmvar bigfloat%pi '((bigfloat simp 56.) 56593902016227522. 2)
"Bigfloat representation of %pi")
+#+nil
(defmvar bigfloat%gamma '((bigfloat simp 56.) 41592772053807304. 0)
"Bigfloat representation of %gamma")
+#+nil
(defmvar bigfloat_log2 '((bigfloat simp 56.) 49946518145322874. 0)
"Bigfloat representation of log(2)")
-----------------------------------------------------------------------
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2025-12-10 16:50:16
|
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 ce92a9eaf335223a0a089eab19729a8f0ced94cd (commit)
from 2f4278f02e14872ee19b00291a8799e36a9f3b89 (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 ce92a9eaf335223a0a089eab19729a8f0ced94cd
Author: Raymond Toy <toy...@gm...>
Date: Wed Dec 10 08:49:03 2025 -0800
Missed on more use of bfmhalf
We missed one place where we failed to rename bfmhalf to *bfmhalf*.
diff --git a/src/nummod.lisp b/src/nummod.lisp
index e5094b2c9..46affc85a 100644
--- a/src/nummod.lisp
+++ b/src/nummod.lisp
@@ -94,7 +94,7 @@
;; 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 *bigfloatzero* *bigfloatone* *bfhalf* *bfmhalf*)
(let (($fpprec (fpprec1 nil ,val)))
,@exprs)))
-----------------------------------------------------------------------
Summary of changes:
src/nummod.lisp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2025-12-10 16:01:12
|
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 2f4278f02e14872ee19b00291a8799e36a9f3b89 (commit)
via 9b8a8d96afc8fbbaf68cbc6236700a03c23ff3bf (commit)
from 1406e6ed34252b55cfe2b9caf2accd7aad8062fa (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:
share/contrib/binsplit/binsplit.lisp | 2 +-
share/linearalgebra/mring.lisp | 6 ++---
share/numeric/rtest_decfp.mac | 2 +-
src/cpoly.lisp | 14 +++++-----
src/expintegral.lisp | 50 ++++++++++++++++++------------------
src/float-properties.lisp | 2 +-
src/float.lisp | 34 ++++++++++++------------
src/gamma.lisp | 20 +++++++--------
src/globals.lisp | 24 +++++++++++------
src/nummod.lisp | 2 +-
src/rpart.lisp | 2 +-
src/simp.lisp | 12 ++++-----
tests/rtest_allnummod.mac | 4 +--
13 files changed, 91 insertions(+), 83 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2025-12-10 16:00: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, rtoy-rename-bfhalf-with-stars has been created
at 2f4278f02e14872ee19b00291a8799e36a9f3b89 (commit)
- Log -----------------------------------------------------------------
commit 2f4278f02e14872ee19b00291a8799e36a9f3b89
Author: Raymond Toy <toy...@gm...>
Date: Tue Dec 9 08:11:00 2025 -0800
Update more places with bfhalf and friends
These files also need to rename `bfhalf` to `*bfhalf*` and friends.
Testsuite + share passes with no new failures.
diff --git a/share/contrib/binsplit/binsplit.lisp b/share/contrib/binsplit/binsplit.lisp
index 8f83b5bb8..50f16fb80 100644
--- a/share/contrib/binsplit/binsplit.lisp
+++ b/share/contrib/binsplit/binsplit.lisp
@@ -87,7 +87,7 @@
(let ((e 0) phi)
;; bs-carg11 needs im-z < 1/2 (i.e. phi < pi/6)
;; when im-z >= 1/2 bisect phi by taking the complex sqrt
- (when (not (fplessp im-z (cdr bfhalf)))
+ (when (not (fplessp im-z (cdr *bfhalf*)))
(multiple-value-setq (re-z im-z) (complex-sqrt (bcons re-z) (bcons im-z)))
(setq e 1) )
(setq phi (bs-carg11 (list re-z im-z) prec))
diff --git a/share/linearalgebra/mring.lisp b/share/linearalgebra/mring.lisp
index 4460a361b..a3b9255a7 100644
--- a/share/linearalgebra/mring.lisp
+++ b/share/linearalgebra/mring.lisp
@@ -260,9 +260,9 @@
:sub #'(lambda (a b) ($rectform (sub a b)))
:negate #'(lambda (a) (mul -1 a))
:psqrt #'(lambda (s) (if (mlsp s 0) nil (ftake '%sqrt s)))
- :add-id #'(lambda () bigfloatzero)
- :mult-id #'(lambda () bigfloatone)
- :fzerop #'(lambda (s) (like s bigfloatzero))
+ :add-id #'(lambda () *bigfloatzero*)
+ :mult-id #'(lambda () *bigfloatone*)
+ :fzerop #'(lambda (s) (like s *bigfloatzero*))
:adjoint #'cl:identity
:mring-to-maxima #'cl:identity
:maxima-to-mring #'(lambda (s)
diff --git a/share/numeric/rtest_decfp.mac b/share/numeric/rtest_decfp.mac
index f10328ce4..7ff87fcba 100644
--- a/share/numeric/rtest_decfp.mac
+++ b/share/numeric/rtest_decfp.mac
@@ -84,5 +84,5 @@ block(
/* The decfp code changes the value of bigfloatone (and possibly other
such values) to decimal floats. Let's reset them. */
-(reset(?bigfloat%pi,?bigfloat%e,?bfmhalf,?bfhalf,?bigfloatone,?bigfloatzero),0);
+(reset(?bigfloat%pi,?bigfloat%e,?\*bfmhalf\*,?\*bfhalf\*,?\*bigfloatone\*,?\*bigfloatzero\*),0);
0$
\ No newline at end of file
diff --git a/src/float-properties.lisp b/src/float-properties.lisp
index 9f4fb65ad..a14a6fdb1 100644
--- a/src/float-properties.lisp
+++ b/src/float-properties.lisp
@@ -125,7 +125,7 @@
(expon (- (caddr f) (bigfloat-prec f))))
(cond ((= 0 significand)
; ULP is arbitrarily small for bigfloat 0
- bigfloatzero)
+ *bigfloatzero*)
;; precision of resulting bigfloat not necessarily the same as input
;; but that doesn't matter, since 2^n can be represented exactly in all
;; precisions
diff --git a/tests/rtest_allnummod.mac b/tests/rtest_allnummod.mac
index e8be42e8f..3aee2cea2 100644
--- a/tests/rtest_allnummod.mac
+++ b/tests/rtest_allnummod.mac
@@ -266,10 +266,10 @@ trigsimp(ceiling(asin(cos(sqrt(2))^2 + sin(sqrt(2))^2 - 1/7)));
/* SF bug #1644378 */
-(x : ?bigfloatone,0);
+(x : ?\*bigfloatone\*,0);
0$
-(ceiling(log(2)), is(x = ?bigfloatone));
+(ceiling(log(2)), is(x = ?\*bigfloatone\*));
true$
(remvalue(x),0);
commit 9b8a8d96afc8fbbaf68cbc6236700a03c23ff3bf
Author: Raymond Toy <toy...@gm...>
Date: Tue Dec 9 07:27:15 2025 -0800
Rename bfhalf to *bfhalf*
Rename this special var using the lisp convention. This makes it
clear bfhalf is a special variable. We do the same for
`bigfloatzero`, `bigfloatone`, and `bfmhalf`. Update docstrings to
say that these are updated when fpprec is set.
diff --git a/src/cpoly.lisp b/src/cpoly.lisp
index 19d52c988..6de509cca 100644
--- a/src/cpoly.lisp
+++ b/src/cpoly.lisp
@@ -1057,12 +1057,12 @@
dx (fpquotient (fpdifference (fplog (aref *shr-sl* *nn*))
(fplog (aref *shr-sl* 0)))
(intofp *nn*))
- *polysc1* (fpentier (bcons (fpplus (cdr bfhalf)
+ *polysc1* (fpentier (bcons (fpplus (cdr *bfhalf*)
(fpquotient dx *logbas*))))
x (fpplus x (fptimes* (intofp (* *polysc1* *nn*))
(fptimes* *logbas*
- (cdr bfhalf))))
- *polysc* (fpentier (bcons (fpplus (cdr bfhalf) (fpquotient x *logbas*))))))
+ (cdr *bfhalf*))))
+ *polysc* (fpentier (bcons (fpplus (cdr *bfhalf*) (fpquotient x *logbas*))))))
(cond ((equalp (aref *shr-sl* i) (intofp 0))
(setq j (1+ j)))
(t
@@ -1142,7 +1142,7 @@
((or bool1
(fpgreaterp omp mp)
;;(not (< relstp 0.05))
- (fpgreaterp relstp (cdr bfhalf)))
+ (fpgreaterp relstp (cdr *bfhalf*)))
(if (fpgreaterp (fptimes* (intofp 0.1) mp)
omp)
(return t)
@@ -1199,7 +1199,7 @@
(cond ((and (not *bool*)
test
(not (= j l2)))
- (cond ((fpgreaterp (fptimes* (cdr bfhalf) (bf-cmod-sl *zr* *zi*))
+ (cond ((fpgreaterp (fptimes* (cdr *bfhalf*) (bf-cmod-sl *zr* *zi*))
(bf-cmod-sl (fpdifference *tr* otr)
(fpdifference *ti* oti)))
(cond (pasd
@@ -1231,7 +1231,7 @@
;; bfloat epsilon. 2^(-fpprec)
(*are* (bf-scale-float (intofp 2) (- fpprec)))
(*mre* (intofp 0))
- (xx (fproot bfhalf 2))
+ (xx (fproot *bfhalf* 2))
(yy (intofp 0))
;; cos(94deg). Probably don't need full bfloat precision here.
(cosr (intofp -0.0697564737441253007759588351941433286009032016527965250436172961370711270667891229125378568280742923028942076107741717160209821557740512756197740925891665208235244345674420755726285778495732000059330205461129612198466216775458241726113210999152981126990497403794217445425671287263223529689424188857433131142804))
@@ -1469,7 +1469,7 @@
(*infin* (intofp +most-positive-flonum+))
(*are* (bf-scale-float (intofp 2) (- fpprec)))
(*mre* (intofp 0))
- (xx (fproot bfhalf 2))
+ (xx (fproot *bfhalf* 2))
(yy (intofp 0))
;; cos(94deg)
(cosr (intofp
diff --git a/src/expintegral.lisp b/src/expintegral.lisp
index 77c523c98..88af88e04 100644
--- a/src/expintegral.lisp
+++ b/src/expintegral.lisp
@@ -703,7 +703,7 @@
(defun bfloat-expintegral-e (n z)
(let ((*expint-eps* (power ($bfloat 10.0) (- $fpprec)))
(*expint-maxit* 5000) ; arbitrarily chosen, we need a better choice
- (bigfloattwo (add bigfloatone bigfloatone))
+ (bigfloattwo (add *bigfloatone* *bigfloatone*))
(bigfloat%e ($bfloat '$%e))
(bigfloat%gamma ($bfloat '$%gamma))
(flz (complex ($float ($realpart z)) ($float ($imagpart z)))))
@@ -721,8 +721,8 @@
(when *debug-expintegral*
(format t "~&We expand in continued fractions.~%"))
(let* ((b (add z n))
- (c (div bigfloatone (mul *expint-eps* *expint-eps*)))
- (d (cdiv bigfloatone b))
+ (c (div *bigfloatone* (mul *expint-eps* *expint-eps*)))
+ (d (cdiv *bigfloatone* b))
(n1 (- n 1))
(h d)
(e 0.0))
@@ -733,12 +733,12 @@
(intl:gettext "expintegral_e: continued fractions failed.")))
(setq b (add b bigfloattwo))
- (setq d (cdiv bigfloatone (add (mul a d) b)))
+ (setq d (cdiv *bigfloatone* (add (mul a d) b)))
(setq c (add b (cdiv a c)))
(setq e (cmul c d))
(setq h (cmul h e))
- (when (eq ($sign (sub (cabs (sub e bigfloatone)) *expint-eps*))
+ (when (eq ($sign (sub (cabs (sub e *bigfloatone*)) *expint-eps*))
'$neg)
(when *debug-expintegral*
(setq *debug-expint-bfloatmaxit*
@@ -750,9 +750,9 @@
(format t "~&We expand in a power series.~%"))
(let* ((n1 (- n 1))
(meuler (mul -1 bigfloat%gamma))
- (r (if (= n1 0) (sub meuler ($log z)) (div bigfloatone n1)))
- (f bigfloatone)
- (e bigfloatzero))
+ (r (if (= n1 0) (sub meuler ($log z)) (div *bigfloatone* n1)))
+ (f *bigfloatone*)
+ (e *bigfloatzero*))
(do* ((i 1 (+ i 1)))
((> i *expint-maxit*)
(merror (intl:gettext "expintegral_e: series failed.")))
@@ -761,7 +761,7 @@
((= i n1)
(let ((psi meuler))
(dotimes (ii n1)
- (setq psi (add psi (cdiv bigfloatone (+ ii 1)))))
+ (setq psi (add psi (cdiv *bigfloatone* (+ ii 1)))))
(setq e (cmul f (sub psi ($log z))))))
(t
(setq e (cdiv (mul -1 f) (- i n1)))))
@@ -783,7 +783,7 @@
(defun frac-bfloat-expintegral-e (n z)
(let ((*expint-eps* (power ($bfloat 10.0) (- $fpprec)))
(*expint-maxit* 5000) ; arbitrarily chosen, we need a better choice
- (bigfloattwo (add bigfloatone bigfloatone))
+ (bigfloattwo (add *bigfloatone* *bigfloatone*))
(bigfloat%e ($bfloat '$%e))
(bigfloat%gamma ($bfloat '$%gamma)))
@@ -795,13 +795,13 @@
(cond
((and (or (eq ($sign ($realpart z)) '$pos)
(eq ($sign ($realpart z)) '$zero))
- (eq ($sign (sub (cabs z) bigfloatone)) '$pos))
+ (eq ($sign (sub (cabs z) *bigfloatone*)) '$pos))
;; We expand in continued fractions.
(when *debug-expintegral*
(format t "We expand in continued fractions.~%"))
(let* ((b (add z n))
- (c (div bigfloatone (mul *expint-eps* *expint-eps*)))
- (d (cdiv bigfloatone b))
+ (c (div *bigfloatone* (mul *expint-eps* *expint-eps*)))
+ (d (cdiv *bigfloatone* b))
(n1 (sub n 1))
(h d)
(e 0.0))
@@ -812,12 +812,12 @@
(intl:gettext "expintegral_e: continued fractions failed.")))
(setq b (add b bigfloattwo))
- (setq d (cdiv bigfloatone (add (mul a d) b)))
+ (setq d (cdiv *bigfloatone* (add (mul a d) b)))
(setq c (add b (cdiv a c)))
(setq e (cmul c d))
(setq h (cmul h e))
- (when (eq ($sign (sub (cabs (sub e bigfloatone)) *expint-eps*))
+ (when (eq ($sign (sub (cabs (sub e *bigfloatone*)) *expint-eps*))
'$neg)
(when *debug-expintegral*
(setq *debug-expint-fracbfloatmaxit*
@@ -831,7 +831,7 @@
(and ($bfloatp n)
(eq ($sign n) '$pos)
(equal (sub (mul 2 ($fix n)) (mul 2 n))
- bigfloatzero)))
+ *bigfloatzero*)))
;; We have a Float or Bigfloat representation of positive integer.
;; We call bfloat-expintegral-e.
(when *debug-expintegral*
@@ -843,16 +843,16 @@
;; of an integer) or complex. We expand in a power series.
(when *debug-expintegral*
(format t "We expand in a power series.~%"))
- (let* ((n1 (sub n bigfloatone))
- (n2 (sub bigfloatone n))
+ (let* ((n1 (sub n *bigfloatone*))
+ (n2 (sub *bigfloatone* n))
(gm (take '(%gamma) n2))
- (r (sub (cmul (cpower z n1) gm) (cdiv bigfloatone n2)))
- (f bigfloatone)
- (e bigfloatzero))
+ (r (sub (cmul (cpower z n1) gm) (cdiv *bigfloatone* n2)))
+ (f *bigfloatone*)
+ (e *bigfloatzero*))
(do ((i 1 (+ i 1)))
((> i *expint-maxit*)
(merror (intl:gettext "expintegral_e: series failed.")))
- (setq f (cmul (mul -1 bigfloatone) (cmul f (cdiv z i))))
+ (setq f (cmul (mul -1 *bigfloatone*) (cmul f (cdiv z i))))
(setq e (cdiv (mul -1 f) (sub i n1)))
(setq r (add r e))
(when (eq ($sign (sub (cabs e) (cmul (cabs r) *expint-eps*)))
@@ -1180,11 +1180,11 @@
(defun bfloat-expintegral-ei (z)
(let ((mz (mul -1 z)))
- (add (cmul (mul -1 bigfloatone)
+ (add (cmul (mul -1 *bigfloatone*)
(bfloat-expintegral-e 1 mz))
- (sub (cmul (div bigfloatone 2)
+ (sub (cmul (div *bigfloatone* 2)
(sub (take '(%log) z)
- (take '(%log) (cdiv bigfloatone z))))
+ (take '(%log) (cdiv *bigfloatone* z))))
(take '(%log) mz)))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff --git a/src/float.lisp b/src/float.lisp
index 1ecacc822..73462c3ec 100644
--- a/src/float.lisp
+++ b/src/float.lisp
@@ -73,10 +73,10 @@
(if (or (not (fixnump q)) (< q 1))
(merror (intl:gettext "fpprec: value must be a positive integer; found: ~M") q))
(setq fpprec (+ 2 (integer-length (expt 10. q)))
- bigfloatone ($bfloat 1)
- bigfloatzero ($bfloat 0)
- bfhalf (list (car bigfloatone) (cadr bigfloatone) 0)
- bfmhalf (list (car bigfloatone) (- (cadr bigfloatone)) 0))
+ *bigfloatone* ($bfloat 1)
+ *bigfloatzero* ($bfloat 0)
+ *bfhalf* (list (car *bigfloatone*) (cadr *bigfloatone*) 0)
+ *bfmhalf* (list (car *bigfloatone*) (- (cadr *bigfloatone*)) 0))
q)
;; FPSCAN is called by lexical scan when a
@@ -598,7 +598,7 @@
(let ((fprateps (cdr ($bfloat (if $bftorat
(list '(rat simp) 1 (exptrl 2 (1- fpprec)))
$ratepsilon)))))
- (or (and (equal x bigfloatzero) (cons 0 1))
+ (or (and (equal x *bigfloatzero*) (cons 0 1))
(prog (y a)
(return (do ((xx x (setq y (invertbigfloat
(bcons (fpdifference (cdr xx) (cdr ($bfloat a)))))))
@@ -768,7 +768,7 @@
;; that and signal a domain error if so. There
;; are no other bfloat values where tan(x) or
;; sin(x) is zero.
- (when (equal (second x) bigfloatzero)
+ (when (equal (second x) *bigfloatzero*)
(domain-error (second x) (caar x)))
(invertbigfloat
($bfloat (list (ncons (safe-get (caar x) 'recip)) y))))
@@ -788,7 +788,7 @@
(defun addbigfloat (h)
(prog (fans tst r nfans)
- (setq fans (setq tst bigfloatzero) nfans 0)
+ (setq fans (setq tst *bigfloatzero*) nfans 0)
(do ((l h (cdr l)))
((null l))
(cond ((setq r (bigfloatp (car l)))
@@ -1222,7 +1222,7 @@
;; value because 1 is always an exact bfloat.
(defun fpone ()
(cond (*decfp (intofp 1))
- ((= fpprec (bigfloat-prec bigfloatone)) (cdr bigfloatone))
+ ((= fpprec (bigfloat-prec *bigfloatone*)) (cdr *bigfloatone*))
(t (intofp 1))))
;;----------------------------------------------------------------------------;;
@@ -1729,9 +1729,9 @@
(power -1 n))
(exptbigfloat (bcons (fpminus (cdr p))) n)))
((and (< (cadr p) 0) (not (integerp n)))
- (cond ((or (equal n 0.5) (equal n bfhalf))
+ (cond ((or (equal n 0.5) (equal n *bfhalf*))
(exptbigfloat p '((rat simp) 1 2)))
- ((or (equal n -0.5) (equal n bfmhalf))
+ ((or (equal n -0.5) (equal n *bfmhalf*))
(exptbigfloat p '((rat simp) -1 2)))
(($bfloatp (setq n ($bfloat n)))
(cond ((equal n ($bfloat (fpentier n)))
@@ -2193,7 +2193,7 @@
(cond ((minusp (car fp-x))
;; asin(-x) = -asin(x);
(mul -1 (fpasin (bcons (fpminus fp-x)))))
- ((fplessp fp-x (cdr bfhalf))
+ ((fplessp fp-x (cdr *bfhalf*))
;; 0 <= x < 1/2
;; asin(x) = atan(x/sqrt(1-x^2))
(bcons
@@ -2349,17 +2349,17 @@
(multiple-value-bind (u v)
(complex-atanh x (bcons (intofp 0)))
(add u (mul '$%i v))))
- ((fpgreaterp fp-x (cdr bfhalf))
+ ((fpgreaterp fp-x (cdr *bfhalf*))
;; atanh(x) = 1/2*log1p(2*x/(1-x))
(bcons
- (fptimes* (cdr bfhalf)
+ (fptimes* (cdr *bfhalf*)
(fplog1p (fpquotient (fptimes* (intofp 2) fp-x)
(fpdifference (fpone) fp-x))))))
(t
;; atanh(x) = 1/2*log1p(2*x + 2*x*x/(1-x))
(let ((2x (fptimes* (intofp 2) fp-x)))
(bcons
- (fptimes* (cdr bfhalf)
+ (fptimes* (cdr *bfhalf*)
(fplog1p (fpplus 2x
(fpquotient (fptimes* 2x fp-x)
(fpdifference (fpone) fp-x)))))))))))
@@ -2424,11 +2424,11 @@
(fppi-val (fppi)))
(if x-lt-minus-1
- (fptimes* fppi-val (cdr bfhalf))
+ (fptimes* fppi-val (cdr *bfhalf*))
(if x-gt-plus-1
- (fptimes* fppi-val (cdr bfmhalf))
+ (fptimes* fppi-val (cdr *bfmhalf*))
'(0 0))))
- (fptimes* (cdr bfmhalf)
+ (fptimes* (cdr *bfmhalf*)
(fpatan2 (fptimes* (intofp 2) y)
(fpdifference (fptimes* 1-x (fpplus fp1 x))
t1^2))))))
diff --git a/src/gamma.lisp b/src/gamma.lisp
index c7a0d0f2e..176d4210e 100644
--- a/src/gamma.lisp
+++ b/src/gamma.lisp
@@ -312,7 +312,7 @@
(defun bfloat-double-factorial (z)
(let* ((pival ($bfloat '$%pi))
- (bigfloat1 ($bfloat bigfloatone))
+ (bigfloat1 ($bfloat *bigfloatone*))
(bigfloat2 (add bigfloat1 bigfloat1))
(bigfloat4 (add bigfloat2 bigfloat2))
($ratprint nil))
@@ -2032,10 +2032,10 @@
(bfloat-log-gamma z))))
(t
(let* ((k (* 2 (+ 1 ($entier (* 0.41 $fpprec)))))
- (m ($bfloat bigfloatone))
+ (m ($bfloat *bigfloatone*))
(z+k (add z k -1))
(y (power z+k 2))
- (x ($bfloat bigfloatzero))
+ (x ($bfloat *bigfloatzero*))
(ii))
(dotimes (i (/ k 2))
(setq ii (* 2 (+ i 1)))
@@ -2080,10 +2080,10 @@
(complex-bfloat-log-gamma z))))
(t
(let* ((k (* 2 (+ 1 ($entier (* 0.41 $fpprec)))))
- (m ($bfloat bigfloatone))
+ (m ($bfloat *bigfloatone*))
(z+k (add z k -1))
(y ($rectform (power z+k 2)))
- (x ($bfloat bigfloatzero))
+ (x ($bfloat *bigfloatzero*))
(ii))
(dotimes (i (/ k 2))
(setq ii (* 2 (+ i 1)))
@@ -2250,20 +2250,20 @@
(simplify (list '(%signum) z))
(sub 1
(mul
- (div 1 (power ($bfloat '$%pi) bfhalf))
- (bfloat-gamma-incomplete bfhalf ($bfloat (power z 2))))))))
+ (div 1 (power ($bfloat '$%pi) *bfhalf*))
+ (bfloat-gamma-incomplete *bfhalf* ($bfloat (power z 2))))))))
(defun complex-bfloat-erf (z)
;; Warning! This has round-off problems when abs(z) is very small.
(let* (($ratprint nil)
(result
(cmul
- (cdiv (cpower (cpower z 2) bfhalf) z)
+ (cdiv (cpower (cpower z 2) *bfhalf*) z)
(sub 1
(cmul
- (div 1 (power ($bfloat '$%pi) bfhalf))
+ (div 1 (power ($bfloat '$%pi) *bfhalf*))
(complex-bfloat-gamma-incomplete
- bfhalf
+ *bfhalf*
($bfloat (cpower z 2))))))))
(cond
((zerop1 ($imagpart z))
diff --git a/src/globals.lisp b/src/globals.lisp
index 76644e4d4..fbdc95be6 100644
--- a/src/globals.lisp
+++ b/src/globals.lisp
@@ -793,19 +793,27 @@
rounding purposes."
:properties ((assign 'fpprec1)))
-(defmvar bigfloatzero '((bigfloat simp 56.) 0 0)
- "Bigfloat representation of 0"
+(defmvar *bigfloatzero*
+ '((bigfloat simp 56.) 0 0)
+ "Bigfloat representation of 0 Automatically updated whenever fpprec
+ is set."
in-core)
-(defmvar bigfloatone '((bigfloat simp 56.) #.(expt 2 55.) 1)
- "Bigfloat representation of 1"
+(defmvar *bigfloatone*
+ '((bigfloat simp 56.) #.(expt 2 55.) 1)
+ "Bigfloat representation of 1. Automatically updated whenever fpprec
+ is set."
in-core)
-(defmvar bfhalf '((bigfloat simp 56.) #.(expt 2 55.) 0)
- "Bigfloat representation of 1/2")
+(defmvar *bfhalf*
+ '((bigfloat simp 56.) #.(expt 2 55.) 0)
+ "Bigfloat representation of 1/2. Automatically updated whenever fpprec
+ is set.")
-(defmvar bfmhalf '((bigfloat simp 56.) #.(- (expt 2 55.)) 0)
- "Bigfloat representation of -1/2")
+(defmvar *bfmhalf*
+ '((bigfloat simp 56.) #.(- (expt 2 55.)) 0)
+ "Bigfloat representation of -1/2. Automatically updated whenever
+ fpprec is set.")
(defmvar bigfloat%e '((bigfloat simp 56.) 48968212118944587. 2)
"Bigfloat representation of %E")
diff --git a/src/nummod.lisp b/src/nummod.lisp
index c2fa9f300..e5094b2c9 100644
--- a/src/nummod.lisp
+++ b/src/nummod.lisp
@@ -94,7 +94,7 @@
;; 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 *bigfloatzero* *bigfloatone* *bfhalf* bfmhalf)
(let (($fpprec (fpprec1 nil ,val)))
,@exprs)))
diff --git a/src/rpart.lisp b/src/rpart.lisp
index 09396e1f3..2365cc72c 100644
--- a/src/rpart.lisp
+++ b/src/rpart.lisp
@@ -689,7 +689,7 @@
(t (cons (take '(mabs) l) (genatan 0 l))))))))
((eq '$zero (let ((sign-imag-errp nil)) (catch 'sign-imag-err ($sign l))))
(cond ((some-bfloatp l)
- (cons bigfloatzero bigfloatzero)) ; contagious
+ (cons *bigfloatzero* *bigfloatzero*)) ; contagious
((some-floatp l)
(cons 0.0 0.0))
(t (cons 0 0))))
diff --git a/src/simp.lisp b/src/simp.lisp
index 1a1b97d41..760e8f679 100644
--- a/src/simp.lisp
+++ b/src/simp.lisp
@@ -1269,7 +1269,7 @@
(/ (cadr x) (caddr x)))
((and (floatp (cadr x)) (floatp (caddr x)) #-ieee-floating-point (not (zerop (caddr x))))
(/ (cadr x) (caddr x)))
- ((and ($bfloatp (cadr x)) ($bfloatp (caddr x)) (not (equal bigfloatzero (caddr x))))
+ ((and ($bfloatp (cadr x)) ($bfloatp (caddr x)) (not (equal *bigfloatzero* (caddr x))))
;; Call BIGFLOATP to ensure that arguments have same precision.
;; Otherwise FPQUOTIENT could return a spurious value.
(bcons (fpquotient (cdr (bigfloatp (cadr x))) (cdr (bigfloatp (caddr x))))))
@@ -1893,10 +1893,10 @@
(cond ((mnump r1) (addk 0.0 r1))
;; Do not simplify the type of the number away.
(t (list '(mexpt simp) r1 1.0))))
- ((equal r2 bigfloatone)
+ ((equal r2 *bigfloatone*)
(cond ((mnump r1) ($bfloat r1))
;; Do not simplify the type of the number away.
- (t (list '(mexpt simp) r1 bigfloatone))))
+ (t (list '(mexpt simp) r1 *bigfloatone*))))
((zerop1 r1)
(cond ((or (zerop1 r2) (mnegp r2))
(if (not errorsw)
@@ -1904,7 +1904,7 @@
(throw 'errorsw t)))
(t (zerores r1 r2))))
((or (zerop1 r2) (onep1 r1))
- (cond ((or ($bfloatp r1) ($bfloatp r2)) bigfloatone)
+ (cond ((or ($bfloatp r1) ($bfloatp r2)) *bigfloatone*)
((or (floatp r1) (floatp r2)) 1.0)
(t 1)))
((or ($bfloatp r1) ($bfloatp r2)) ($bfloat (list '(mexpt) r1 r2)))
@@ -2196,7 +2196,7 @@
;; A numeric constant like %e, %pi, ... and
;; exponent is a float or bigfloat value.
(return (if (and (member gr *builtin-numeric-constants*)
- (equal pot bigfloatone))
+ (equal pot *bigfloatone*))
;; Return a bigfloat value.
($bfloat gr)
;; Return a float value.
@@ -2742,7 +2742,7 @@
(t (list '(mexpt simp) '$%e pot))))
(defun zerores (r1 r2)
- (cond ((or ($bfloatp r1) ($bfloatp r2)) bigfloatzero)
+ (cond ((or ($bfloatp r1) ($bfloatp r2)) *bigfloatzero*)
((or (floatp r1) (floatp r2)) 0.0)
(t 0)))
-----------------------------------------------------------------------
hooks/post-receive
--
Maxima CAS
|
|
From: <ap...@us...> - 2025-12-09 06:08:19
|
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 1406e6ed34252b55cfe2b9caf2accd7aad8062fa (commit)
from 1c6a095f833c3b3e15d13880c2476065a09bf9cf (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 1406e6ed34252b55cfe2b9caf2accd7aad8062fa
Author: Robert Dodier <rob...@so...>
Date: Mon Dec 8 22:07:44 2025 -0800
New flag display_matrix_padding_vertical to control between-rows padding for matrix display.
Default value is true (blank line between rows).
When false, omit the blank line; rows are adjacent.
This commit includes a reference manual item and
some examples in tests/test_matrix_display.mac.
Incidentally silence a warning about the unused variable
DUMMY in the function definition for DIM-MBOX-OR-MLABOX.
diff --git a/doc/info/Matrices.texi.m4 b/doc/info/Matrices.texi.m4
index 4a4792ecc..b30582984 100644
--- a/doc/info/Matrices.texi.m4
+++ b/doc/info/Matrices.texi.m4
@@ -1622,6 +1622,58 @@ only the matrix elements are displayed.
@end deffn
+@c -----------------------------------------------------------------------------
+@anchor{display_matrix_padding_vertical}
+@deffn {Option variable} display_matrix_padding_vertical
+Default value: @code{true}
+
+When @code{display_matrix_padding_vertical} is @code{true},
+matrices are displayed with an empty line between successive rows.
+
+When @code{display_matrix_padding_vertical} is @code{false},
+matrices are not displayed with an empty line between successive rows;
+successive rows are immediately adjacent to each other.
+
+Examples:
+
+@c ===beg===
+@c display_matrix_padding_vertical;
+@c foo: matrix ([a, b, c], [d, e, f], [g, h, i]);
+@c display_matrix_padding_vertical: false;
+@c foo;
+@c ===end===
+@example maxima
+@group
+(%i1) display_matrix_padding_vertical;
+(%o1) true
+(%i2) foo: matrix ([a, b, c], [d, e, f], [g, h, i]);
+ ┌ ┐
+ │ a b c │
+ │ │
+(%o2) │ d e f │
+ │ │
+ │ g h i │
+ └ ┘
+@end group
+@group
+(%i3) display_matrix_padding_vertical: false;
+(%o3) false
+(%i4) foo;
+ ┌ ┐
+ │ a b c │
+(%o4) │ d e f │
+ │ g h i │
+ └ ┘
+@end group
+@end example
+
+@opencatbox{Categories:}
+@category{Matrices}
+@category{Display flags and variables}
+@closecatbox
+
+@end deffn
+
@c -----------------------------------------------------------------------------
@anchor{matrix}
@deffn {Function} matrix (@var{row_1}, @dots{}, @var{row_n})
@@ -1666,7 +1718,8 @@ See @mrefcomma{eigenvalues} @mrefcomma{eigenvectors} @mrefcomma{determinant}@w{}
@mrefcomma{echelon} and @mrefdot{rank}
@c CHECK -- WE PROBABLY WANT EXHAUSTIVE LIST HERE
-@mref{display_matrix_brackets} governs the display of matrices.
+Option variables @mref{display_matrix_brackets} and @mref{display_matrix_padding_vertical}
+govern the display of matrices.
Examples:
diff --git a/src/displa.lisp b/src/displa.lisp
index 353f727f0..10b7bdf73 100644
--- a/src/displa.lisp
+++ b/src/displa.lisp
@@ -1201,6 +1201,7 @@
(displa-def %matrix dim-$matrix)
(defmvar $display_matrix_brackets t)
+(defmvar $display_matrix_padding_vertical t)
(defun dim-$matrix (form result)
(prog (dmstr rstr cstr consp cols)
@@ -1227,7 +1228,7 @@
(do ((c (cdar r) (cdr c))
(nc dmstr (cdr nc))
(cs cstr (cdr cs)) (dummy) (h2 0) (d2 0))
- ((null c) (setq d1 (+ d1 h1 h2) h1 (1+ d2)))
+ ((null c) (setq d1 (+ (if (or $display_matrix_padding_vertical (null rstr)) d1 (1- d1)) h1 h2) h1 (1+ d2)))
(setq dummy (dimension (car c) nil 'mparen 'mparen nil 0)
h2 (max h2 height) d2 (max d2 depth))
(cond ((not (checkfit (+ 14. width))) (setq consp t) (return nil))
@@ -1283,7 +1284,7 @@
(displa-def mbox dim-mbox-or-mlabox)
(displa-def %mbox dim-mbox-or-mlabox)
-(defun dim-mbox-or-mlabox (form result &aux dummy)
+(defun dim-mbox-or-mlabox (form result)
(if (= (length form) 3)
(dim-mlabox form result)
(dim-mbox form result)))
diff --git a/tests/test_matrix_display.mac b/tests/test_matrix_display.mac
index d20617023..87e9e6c6f 100644
--- a/tests/test_matrix_display.mac
+++ b/tests/test_matrix_display.mac
@@ -143,3 +143,15 @@ print (recip_abs_box_foo3) $
print (recip_abs_box_foo4) $
print (recip_abs_box_foo5) $
+display_matrix_padding_vertical: false;
+
+recip_abs_box_foo5;
+print (recip_abs_box_foo5);
+
+blurf: print (box (genmatrix (lambda ([i, j], x^i/sum (y[k], k, 1, j)), 8, 5)));
+
+display_matrix_brackets: true;
+
+print (blurf);
+
+reset ();
-----------------------------------------------------------------------
Summary of changes:
doc/info/Matrices.texi.m4 | 55 ++++++++++++++++++++++++++++++++++++++++++-
src/displa.lisp | 5 ++--
tests/test_matrix_display.mac | 12 ++++++++++
3 files changed, 69 insertions(+), 3 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: willisbl <wil...@us...> - 2025-12-08 15:57:31
|
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 1c6a095f833c3b3e15d13880c2476065a09bf9cf (commit)
from 0be2b4e4d3801c78bfa69f43529bf06721e17790 (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 1c6a095f833c3b3e15d13880c2476065a09bf9cf
Author: Barton Willis <wi...@un...>
Date: Mon Dec 8 09:57:16 2025 -0600
Fix #4638 cabs/carg/polarform overflow/underflow and #4642 sign error
- Add new function for the sign of a complex float at the top of `sign1` (compar.lisp). This avoids some floating point over and underflow problems that can happen later in the code.
- In `bfloat-erf` and `complex-bfloat-erf` (gamma.lisp), do not redefine the special variable `1//2`, use `bfhalf` instead.
- In `ellipt.lisp`, replace `pi` (which may be a long float in ECL) with `(float pi 1d0)`.
- In `rpart.lisp`, introduce new `hypotenuse` function to handle double-float case without overflow.
- Append tests from #4638 to `rtest16.mac`.
- Append tests from #4642 to `rtest_sign.mac`.
No unexpected failures in testsuite or share testsuite with SBCL 2.4.7 or Clozure CL 1.13.
diff --git a/src/compar.lisp b/src/compar.lisp
index 0f22d8ce5..51b2cc36d 100644
--- a/src/compar.lisp
+++ b/src/compar.lisp
@@ -1237,9 +1237,34 @@ TDNEG TDZERO TDPN) to store it, and also sets SIGN."
`(multiple-value-bind (,lhs ,rhs) (compsplt ,expr)
,@forms))
+(defun sign-float (x)
+ "Maxima sign of a double-float x. Returns one of '$zero, '$pos, '$neg, or '$und (for NaN)"
+ (cond ((not (= x x)) '$und) ; NaN check
+ ((zerop x) '$zero) ; ignores signed zero
+ ((minusp x) '$neg) ; x < 0
+ ((plusp x) '$pos) ; x > 0
+ (t (merror "sign-float called on ~M ~%" x))))
+
+(defun sign-complex-float (x)
+ (multiple-value-bind (is-complex re im) (complex-number-p x #'floatp)
+ (cond
+ (is-complex ;including the pure real case too
+ (cond
+ ((zerop im) (sign-float re)) ;imaginary part is zero, return sign of real part
+ ((and *complexsign* (zerop re)) '$imaginary) ; real part is zero, imaginary part nonzero, return imaginary
+ (*complexsign* '$complex) ;input is complex, return complex
+ (t (imag-err x)))) ;throw error for sign of complex
+ (t nil)))) ;x isn't a float or a complex float, return nil
+
(defun sign1 (x)
(setq x (specrepcheck x))
(setq x (infsimp* x))
+
+ (let ((sgn (sign-complex-float x)))
+ (when sgn
+ (setq sign sgn)
+ (return-from sign1 sgn))
+
(when (and *complexsign* (atom x) (eq x '$infinity))
;; In Complex Mode the sign of infinity is complex.
(when *debug-compar* (format t "~& in sign1 detect $infinity.~%"))
@@ -1278,7 +1303,7 @@ TDNEG TDZERO TDPN) to store it, and also sets SIGN."
(setq sign s odds o evens e minus m)))
t)))))
(sign exp))
- (return sign)))
+ (return sign))))
(defun numer (x)
(let (($numer t) ; currently, no effect on $float, but proposed to
diff --git a/src/ellipt.lisp b/src/ellipt.lisp
index 82ddc47fa..8b67ad950 100644
--- a/src/ellipt.lisp
+++ b/src/ellipt.lisp
@@ -1711,7 +1711,7 @@ first kind:
;;
;; E(z|m) = E(z - %pi*round(Re(z)/%pi)|m) + 2*round(Re(z)/%pi)*E(m)
(let ((period (round (realpart phi) pi)))
- (+ (base (- phi (* pi period)) m)
+ (+ (base (- phi (* (float pi 1d0) period)) m)
(* 2 period (elliptic-ec m))))))
;; Complete version
diff --git a/src/gamma.lisp b/src/gamma.lisp
index f9fb3ab72..c7a0d0f2e 100644
--- a/src/gamma.lisp
+++ b/src/gamma.lisp
@@ -2241,30 +2241,29 @@
(t
result))))
+;; bfhalf is a special variable--it automatically updates when $fpprec is changed
(defun bfloat-erf (z)
;; Warning! This has round-off problems when abs(z) is very small.
- (let ((1//2 ($bfloat '((rat simp) 1 2))))
;; The argument is real, the result is real too
($realpart
(mul
(simplify (list '(%signum) z))
(sub 1
(mul
- (div 1 (power ($bfloat '$%pi) 1//2))
- (bfloat-gamma-incomplete 1//2 ($bfloat (power z 2)))))))))
+ (div 1 (power ($bfloat '$%pi) bfhalf))
+ (bfloat-gamma-incomplete bfhalf ($bfloat (power z 2))))))))
(defun complex-bfloat-erf (z)
;; Warning! This has round-off problems when abs(z) is very small.
(let* (($ratprint nil)
- (1//2 ($bfloat '((rat simp) 1 2)))
(result
(cmul
- (cdiv (cpower (cpower z 2) 1//2) z)
+ (cdiv (cpower (cpower z 2) bfhalf) z)
(sub 1
(cmul
- (div 1 (power ($bfloat '$%pi) 1//2))
+ (div 1 (power ($bfloat '$%pi) bfhalf))
(complex-bfloat-gamma-incomplete
- 1//2
+ bfhalf
($bfloat (cpower z 2))))))))
(cond
((zerop1 ($imagpart z))
diff --git a/src/rpart.lisp b/src/rpart.lisp
index 2f30fa270..09396e1f3 100644
--- a/src/rpart.lisp
+++ b/src/rpart.lisp
@@ -756,10 +756,35 @@
(if absflag 0 (genatan (cdr ris) (car ris)))
(cond ((equal (car ris) 0) (absarg-mabs (cdr ris)))
((equal (cdr ris) 0) (absarg-mabs (car ris)))
- (t (powers ($expand (add (powers (car ris) 2)
- (powers (cdr ris) 2))
- 1 0)
- (half)))))))))
+ (t (hypotenuse (car ris) (cdr ris)))))))))
+
+(defun hypotenuse-numerical (re im)
+ "Dispatch the CL abs function to return |re + %i im|. The inputs re and im should be floating point numbers.
+ We trust the compiler to work correctly for all double floats, including denormalized floats, and not needlessly
+ over or underflow."
+ (cond ((zerop im) (abs im))
+ ((zerop re) (abs re))
+ (t (abs (complex re im)))))
+
+(defun hypotenuse (re im)
+ (flet ((hypotenuse-default (re im) ;ok to use when no worries about floating point over/underflow
+ ;; For mixed binary64 and symbolic cases, computing re^2 or im^2 can cause a
+ ;; floating point overflow. When an error happens, we'll punt to an abs nounform.
+
+ ;; I'd prefer to eliminate the following calls to expand, but doing so causes
+ ;; some testsuite failures.
+ (setq re ($expand re 1 0)
+ im ($expand im 1 0))
+ (or (ignore-errors (ftake 'mexpt (add (mul re re) (mul im im)) 1//2))
+ (ftake 'mabs (add re (mul '$%i im))))))
+
+ (cond ((or ($bfloatp re) ($bfloatp im)) ; at least one bigfloat
+ (hypotenuse-default ($bfloat re) ($bfloat im)))
+
+ ((or (and (floatp re) (mnump im)) (and (mnump re) (floatp im))) ;at least one float part
+ (hypotenuse-numerical ($float re) ($float im)))
+
+ (t (hypotenuse-default re im))))) ;fall back
(defun genatan (num den)
(let ((arg (take '(%atan2) num den)))
diff --git a/tests/rtest16.mac b/tests/rtest16.mac
index fc26b5c59..4d1edf279 100644
--- a/tests/rtest16.mac
+++ b/tests/rtest16.mac
@@ -3199,6 +3199,61 @@ kbateman[2](x);
makelist(kbateman[n](0), n, 0, 5);
[0,2/%pi,0,-2/(3*%pi), 0, 2/(5*%pi)];
+/* \#4642 sign(1.0e-310*%i) gives error because 1e-310*x/1e-310 fails*/
+errcatch(sign(1.0e-310*%i));
+[]$
+
+csign(1.0e-310*%i);
+imaginary$
+
+csign(1.0e-301);
+pos$
+
+csign(-1.0e-301);
+neg$
+
+csign(1.0e-301 + %i * 1.0e-301);
+complex$
+
+errcatch(sign(1.0b-310*%i));
+[]$
+
+csign(1.0b-310*%i);
+imaginary$
+
+csign(1.0b-301);
+pos$
+
+csign(-1.b-301);
+neg$
+
+csign(1.0b-301 + %i * 1.0e-301);
+complex$
+
+/* \#4638 cabs/carg/polarform overflow and underflow*/
+
+cabs(1e-170 + %i*1e-170);
+1.4142135623730951e-170$
+
+cabs(1e170 + %i*1e+170);
+1.4142135623730952e170$
+
+carg(1e170 + %i*1e+170);
+0.7853981633974483$
+
+carg(1e-310 + %i*1e-310);
+0.7853981633974483$
+
+/* Note: 1.4142135623730952e170*%e^(0.7853981633974483*%i) is not simplified! */
+(%emode : false,0);
+0$
+
+block([ans : polarform(1e170 + %i*1e+170)], [inpart(ans,0),inpart(ans,1),inpart(ans,2)]);
+["*",1.4142135623730952e170,%e^(0.7853981633974483*%i)]$
+
+(reset(%emode),0);
+0$
+
kill(x);
done$
diff --git a/tests/rtest_sign.mac b/tests/rtest_sign.mac
index acb6b01d2..4baae804f 100644
--- a/tests/rtest_sign.mac
+++ b/tests/rtest_sign.mac
@@ -1566,6 +1566,23 @@ pos$
sign(x^(3/4));
pz$
+/* \#4642 sign(1.0e-310*%i) gives error because 1e-310*x/1e-310 fails */
+errcatch(sign(1.0e-310*%i));
+[]$
+
+sign(1.0e-310);
+pos$
+
+sign(-1.0e-310);
+neg$
+
+csign(1.0e-310*%i);
+imaginary$
+
+csign(1.2e-310 + 1.0e-310*%i);
+complex$
+
+
/* Clean up!*/
(kill(all),0);
-----------------------------------------------------------------------
Summary of changes:
src/compar.lisp | 27 +++++++++++++++++++++++++-
src/ellipt.lisp | 2 +-
src/gamma.lisp | 13 ++++++-------
src/rpart.lisp | 33 +++++++++++++++++++++++++++----
tests/rtest16.mac | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++
tests/rtest_sign.mac | 17 ++++++++++++++++
6 files changed, 134 insertions(+), 13 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: <ap...@us...> - 2025-12-07 05:41: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 Website".
The branch, master has been updated
via 853f2a5946d53dfeae32bd8280d65a7e01c1eb35 (commit)
from d234abed2963a4952545c82fa0db75af955e4dbf (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 853f2a5946d53dfeae32bd8280d65a7e01c1eb35
Author: Robert Dodier <do...@oh...>
Date: Sat Dec 6 21:41:07 2025 -0800
Commit new version of relatedprojects.html as in ProjectsRelatedtoMaxima_ehm.html 2025-12-05 by Eric Majzoub,
except for replacing external links with relative ones where applicable,
and omitting a line having to do with Taboola.
This commit reorganizes the list of projects, and in particular
moves some of the items to a list of projects of historical interest only.
diff --git a/relatedprojects.html b/relatedprojects.html
index d52aa14..125bb7f 100644
--- a/relatedprojects.html
+++ b/relatedprojects.html
@@ -1,11 +1,11 @@
<!DOCTYPE html>
-<html lang="en-US">
-<head>
+<html lang="en-US"><head>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Maxima is a fairly complete computer algebra system written in Lisp with an emphasis on symbolic computation. It is based on DOE-MACSYMA and licensed under the GPL free software license. Its abilities include symbolic integration, 3D plotting and solving differential equations.">
<meta name="keywords" content="Maxima, CAS, computer algebra, mathematics, Lisp, symbolic computation, MACSYMA, GPL, free software, differential equations, plotting">
-<title>Maxima – Projects Related to Maxima</title>
+<title>Maxima â Projects Related to Maxima</title>
<link rel="stylesheet" href="maxima.css">
<link rel="icon" type="image/svg+xml" href="img/maxima.svg">
<link rel="alternate icon" href="img/favicon.ico">
@@ -14,7 +14,7 @@
<div class="header">
<img class="contract2 center" alt="Maxima" src="img/maxima-title.svg">
<div class="language">
-<button class="languagebtn">æA <span>Languages ⌄</span></button>
+<button class="languagebtn">æA <span>Languages â</span></button>
<div class="language-content">
<a href="es/relatedprojects.html">Español</a>
<a href="pt/relatedprojects.html">Português</a>
@@ -23,7 +23,7 @@
</div>
</div>
<div class="sections">
-<button class="sectionsbtn">☰ <span>Sections ⌄</span></button>
+<button class="sectionsbtn">â° <span>Sections â</span></button>
<div class="sections-content">
<a href="index.html">Home</a>
<a href="download.html">Downloads</a>
@@ -45,15 +45,14 @@ to interact with Maxima.</p>
</div>
<div class="card">
<h2>User interfaces for Maxima</h2>
-<h3><a href="https://github.com/YasuakiHonda/Maxima-on-Android-AS">Maxima on Android</a></h3>
-<p>Port of Maxima for Android mobile devices.</p>
-<p><strong>Developer:</strong> Yasuaki Honda.</p>
<h3><a href="https://wxmaxima-developers.github.io/wxmaxima/">wxMaxima</a></h3>
<p>âwxMaxima is a cross platform GUI for the computer algebra system
maxima based on wxWidgets. It provides menu and dialog based interface
-for maxima and a nice display of math output.â</p>
+ for maxima and a nice display of math output. Capabilities include embedded plots,
+ animated graphs with a slider, tab completion for all loaded packages, PDF export,
+ html Maxima and wxMaxima manuals, and much more.â</p>
<p><strong>Developers</strong>: Andrej Vodopivec, Gunter Königsmann et al.</p>
-<h3><a href="https://maxima.sourceforge.io/imaxima.html">Imaxima and imath</a></h3>
+<h3><a href="imaxima.html">Imaxima and imath</a></h3>
<p>âImaxima.el provides support for interacting with the computer
algebra system Maxima in an Emacs buffer. Imaxima processes the output
from Maxima with TeX and inserts the resulting image in the
@@ -67,17 +66,45 @@ aims to provide a unified and user friendly framework for editing
structured documents with different types of content (text, graphics,
mathematics, interactive content, etc.).â</p>
<p><strong>Developer:</strong> Joris van der Hoeven.</p>
+<h3><a href="https://github.com/YasuakiHonda/Maxima-on-Android-AS">Maxima on Android</a></h3>
+<p>Port of Maxima for Android mobile devices.</p>
+<p><strong>Developer:</strong> Yasuaki Honda.</p>
<h3><a href="http://kayali.sourceforge.net/">Kayali</a></h3>
<p>âKayali is a Qt based Computer Algebra System (CAS) that can also
be used as an advanced replacement for KDE KCalc. It is essentially a
front end GUI for Maxima (and is easily extended to other CAS
back-ends) and Gnuplot.â</p>
<p><strong>Developer:</strong> Abdulhaq Lynch.</p>
-<h3><a href="http://symaxx.sourceforge.net/Symaxx_1/">Symaxx2</a></h3>
-<p>âSymaxx is a graphical front end for the Maxima computer algebra
-system (GPL).â</p>
-<p><strong>Developer:</strong> Markus Nentwig.</p>
</div>
+
+<div class="card">
+ <h2>Web interfaces running Maxima</h2>
+<h3><a href="https://maxima-on-wasm.pages.dev/">Maxima-on-WASM</a></h3>
+<p>âA web-based interface to Maxima using Embeddable Common Lisp
+(ECL), Emscripten, gnuplot, and MathJax. WOM provides a complete,
+functional Maxima environment within the web browser, with TeX display
+of formulas and embedded graphics.â</p>
+<p><strong>Developer:</strong> Marius Gerbershagen.</p>
+<h3><a href="http://yamwi.sourceforge.net/">Yamwi</a></h3>
+<p>âA project devoted to the development of a PHP-based web interface
+to Maxima. The <em>Centro de Supercomputación de Galicia</em> hosts a
+Maxima+Yamwi computational environment
+at <a href="http://maxima.cesga.es/">http://maxima.cesga.es</a>.â</p>
+<p><strong>Developer:</strong> Mario RodrÃguez Riotorto.</p>
+<h3><a href="http://mathassistant.sourceforge.net/">Mathematical Assistant on Web</a></h3>
+<p>âThis site contains interface to access computer algebra system
+Maxima and automatically solve selected typical problems from
+mathematical courses, including intermediate steps in the
+solution.â</p>
+<p><strong>Developers:</strong> Robert Marik and Miroslava Tihlarikova.</p>
+<h3><a href="https://sourceforge.net/projects/wmi/">WebMathematics Interactive</a></h3>
+<p>âAn open web-based eLearning system in mathematics for grammar
+school and/or university students, including basic mathematical
+functions (equation solving, function plotting, symbolic
+differentation and antiderivation) and thematic modules.â</p>
+<p><strong>Developer:</strong> Zoltan Kovacs.</p>
+</div>
+
<div class="card">
<h2>Systems using Maxima as a component</h2>
<h3><a href="https://cantor.kde.org/">Cantor</a></h3>
@@ -92,13 +119,6 @@ Cantor is built upon <a href="http://labplot.kde.org/">LabPlot</a>.
computations in your favorite CAS and the visualization can be done in
LabPlot."</p>
<p><strong>Developer: </strong>KDE Project.</p>
-<h3><a href="http://euler.rene-grothmann.de/">Euler</a></h3>
-<p>âEuler is a MatLab like numerical system with a GUI frontend in
-notebook style ala Maple, plot features, and a numerical programming
-language. Euler can be used as a GUI frontend to Maxima. It can also
-exchange data and expressions with Maxima, helping Maxima with
-numerical calculations, and Euler with symbolic evaluation.â</p>
-<p><strong>Developer:</strong> Rene Grothmann.</p>
<h3><a href="https://www.sagemath.org/">SAGE</a></h3>
<p>âSage is a free open-source mathematics software system
licensed under the GPL. It builds on top of many existing open-source
@@ -109,13 +129,6 @@ many more.â</p>
<p>âAn open-source system for computer-aided assessment in Mathematics
and related disciplines, with emphasis on formative assessment.â</p>
<p><strong>Developers:</strong> Chris Sangwin et al.</p>
-<h3><a href="https://wimsedu.info/?page_id=68">WIMS</a></h3>
-<p>âThe WIMS educational platform offers a rich panoply of resources
-and exercises either with free access or for personalised study. The
-teaching/learning materials on WIMS are created with the help of high
-quality open source software for science (Maxima, Gnuplot, Pari/Gp,
-Octave).â</p>
-<p><strong>Developers:</strong> Xiao Gang and others.</p>
</div>
<div class="card">
<h2>Tools to include Maxima results in other systems</h2>
@@ -130,55 +143,68 @@ the <a href="contrib/maxiplot/maxiplot_en.pdf">Maxiplot manual</a>
(Latex source
file: <a href="contrib/maxiplot/maxiplot_en.tex">maxiplot_en.tex</a>)</p>
<p><strong>Developer:</strong> José Miguel M. Planas</p>
-<h3><a href="https://www.wiki.ed.ac.uk/display/Physics/Jacomax">Jacomax</a></h3>
-<p>âJacomax (Java Connector for Maxima) is a basic Java interface for
-the Maxima computer algebra system.â</p>
-<p><strong>Developer:</strong> David McKain</p>
-<h3><a href="https://sourceforge.net/projects/equation/">Symbolic Equation Manipulator</a></h3>
-<p>âEdit equations right on the screen with your mouse, and never make
-a mistake. Guide the program through any complex algebraic
-manipulation, and let it handle the tedious details. Many other
-features!â</p>
-<p><strong>Developer:</strong> James Hart.</p>
<h3><a href="http://meta.wikimedia.org/wiki/User:Mafs/Computer_algebra">Mediawiki Algebra extension</a></h3>
<p>Allows to include Maxima sessions into Mediawiki pages. A local
installation of Maxima is then used to get the result that gets
incorporated into the Wiki page.</p>
<p><strong>Developer:</strong> Markus Arndt.</p>
</div>
+
<div class="card">
-<h2>Web interfaces running Maxima</h2>
-<h3><a href="http://yamwi.sourceforge.net">Yamwi</a></h3>
-<p>âA project devoted to the development of a PHP-based web interface
-to Maxima. The <em>Centro de Supercomputación de Galicia</em> hosts a
-Maxima+Yamwi computational environment
-at <a href="http://maxima.cesga.es">http://maxima.cesga.es</a>.â</p>
-<p><strong>Developer:</strong> Mario RodrÃguez Riotorto.</p>
-<h3><a href="http://mathassistant.sourceforge.net/">Mathematical Assistant on Web</a></h3>
-<p>âThis site contains interface to access computer algebra system
-Maxima and automatically solve selected typical problems from
-mathematical courses, including intermediate steps in the
-solution.â</p>
-<p><strong>Developers:</strong> Robert Marik and Miroslava Tihlarikova.</p>
-<h3><a href="https://sourceforge.net/projects/maximaphp/">MaximaPHP</a></h3>
-<p>âA PHP program to access Maxima on the server interactively from a
-website.â</p>
-<p><strong>Developer:</strong> Bowo Prasetyo.</p>
-<h3><a href="https://sourceforge.net/projects/wmi/">WebMathematics Interactive</a></h3>
-<p>âAn open web-based eLearning system in mathematics for grammar
-school and/or university students, including basic mathematical
-functions (equation solving, function plotting, symbolic
-differentation and antiderivation) and thematic modules.â</p>
-<p><strong>Developer:</strong> Zoltan Kovacs.</p>
+ <h2>Historical Projects Related to Maxima</h2>
+ <p>The following projects are either no longer maintained, or
+ are unavailable on the internet. They are included here for
+ historical purposes.
+ </p>
+ <h3><a href="http://euler.rene-grothmann.de/">Euler</a></h3>
+<p>âEuler is a MatLab like numerical system with a GUI frontend in
+notebook style ala Maple, plot features, and a numerical programming
+language. Euler can be used as a GUI frontend to Maxima. It can also
+exchange data and expressions with Maxima, helping Maxima with
+numerical calculations, and Euler with symbolic evaluation.â</p>
+<p><strong>Developer:</strong> Rene Grothmann.</p>
+
<h3><a href="http://icm.mcs.kent.edu/research/demo.html">Interactive Demos of Mathematical Computations</a></h3>
<p>Live demos of various mathematical computation capabilities.</p>
<p><strong>Developers:</strong> Institute for Computational
Mathematics at Kent State University.</p>
+
+<h3><a href="https://sourceforge.net/projects/maximaphp/">MaximaPHP</a></h3>
+<p>âA PHP program to access Maxima on the server interactively from a
+website.â</p>
+<p><strong>Developer:</strong> Bowo Prasetyo.</p>
+
+<h3><a href="https://www.wiki.ed.ac.uk/display/Physics/Jacomax">Jacomax</a></h3>
+<p>âJacomax (Java Connector for Maxima) is a basic Java interface for
+the Maxima computer algebra system.â</p>
+<p><strong>Developer:</strong> David McKain</p>
+
+ <h3><a href="http://symaxx.sourceforge.net/Symaxx_1/">Symaxx2</a></h3>
+<p>âSymaxx is a graphical front end for the Maxima computer algebra
+system (GPL).â</p>
+<p><strong>Developer:</strong> Markus Nentwig.</p>
+
+<h3><a href="https://sourceforge.net/projects/equation/">Symbolic Equation Manipulator</a></h3>
+<p>âEdit equations right on the screen with your mouse, and never make
+a mistake. Guide the program through any complex algebraic
+manipulation, and let it handle the tedious details. Many other
+features!â</p>
+<p><strong>Developer:</strong> James Hart.</p>
+
+<h3><a href="https://wimsedu.info/?page_id=68">WIMS</a></h3>
+<p>âThe WIMS educational platform offers a rich panoply of resources
+and exercises either with free access or for personalised study. The
+teaching/learning materials on WIMS are created with the help of high
+quality open source software for science (Maxima, Gnuplot, Pari/Gp,
+Octave).â</p>
+<p><strong>Developers:</strong> Xiao Gang and others.</p>
+
</div>
+
<div class="footer">
<p>Any questions about Maxima or this site can be sent to our
<a href="mailto:max...@li...">mailing list</a>.</p>
-<span>Last modified: 2025/07/24 14:54:48 UTC</span>
+<span>Last modified: 2025/12/06</span>
</div>
-</body>
-</html>
+
+</body></html>
-----------------------------------------------------------------------
Summary of changes:
relatedprojects.html | 154 ++++++++++++++++++++++++++++++---------------------
1 file changed, 90 insertions(+), 64 deletions(-)
hooks/post-receive
--
Maxima CAS Website
|
|
From: dgildea <dg...@us...> - 2025-12-06 18:21:34
|
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
discards b056caf43f9d7a35abc5a96ca7481621141e13b9 (commit)
This update discarded existing revisions and left the branch pointing at
a previous point in the repository history.
* -- * -- N (0be2b4e4d3801c78bfa69f43529bf06721e17790)
\
O -- O -- O (b056caf43f9d7a35abc5a96ca7481621141e13b9)
The removed revisions are not necessarily gone - if another reference
still refers to them they will stay in the repository.
No new revisions were added by this update.
Summary of changes:
src/testsuite.lisp | 6 ++++++
1 file changed, 6 insertions(+)
hooks/post-receive
--
Maxima CAS
|
|
From: dgildea <dg...@us...> - 2025-12-06 14:14:18
|
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 b056caf43f9d7a35abc5a96ca7481621141e13b9 (commit)
from 0be2b4e4d3801c78bfa69f43529bf06721e17790 (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 b056caf43f9d7a35abc5a96ca7481621141e13b9
Author: Dan Gildea <dgildea>
Date: Sat Dec 6 09:12:41 2025 -0500
re-enable lapack tests for SBCL
these work for me with SBCL 2.4.5
diff --git a/src/testsuite.lisp b/src/testsuite.lisp
index 3b54b5a29..2001dea78 100644
--- a/src/testsuite.lisp
+++ b/src/testsuite.lisp
@@ -213,14 +213,8 @@
"rtest_atensor"
"rtest_ctensor"
"rtest_itensor"
- ;; On sbcl 1.4.10 we still get out-of-memory errors on many
- ;; computers on loading lapack => commented these tests out
- ;; for SBCL.
- #-sbcl
((mlist simp) "rtest_dgemm")
- #-sbcl
((mlist simp) "rtest_dgeqrf")
- #-sbcl
((mlist simp) "rtest_dgesv")
;; The following functions were used but not defined: ODEPACK::DUMACH in gcl 2.6.12
"rtest_dlsode"
-----------------------------------------------------------------------
Summary of changes:
src/testsuite.lisp | 6 ------
1 file changed, 6 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: <ap...@us...> - 2025-12-06 06:53: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 0be2b4e4d3801c78bfa69f43529bf06721e17790 (commit)
from 75f8ae061eed8946514a5df97fded10ac14a7358 (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 0be2b4e4d3801c78bfa69f43529bf06721e17790
Author: Robert Dodier <rob...@so...>
Date: Fri Dec 5 22:46:47 2025 -0800
Enable ABCL to load lapack and dlsode via ASDF:LOAD-SOURCE-OP instead of trying to compile,
which causes an error for some functions which are too big;
the error message appears to say the JVM offset does not
fit into 16 bits.
Work around the problem by just loading the source code
instead of trying to compile. Use ASDF to load
since I could not figure out how to tell defsystem to
load the source instead of compiling except marking every
file as :load-only t, which seems too ugly.
Reenable rtest_dlsode in the test suite since now
load("dlsode") succeeds.
diff --git a/share/lapack/lapack.asd b/share/lapack/lapack.asd
new file mode 100644
index 000000000..5f1de6825
--- /dev/null
+++ b/share/lapack/lapack.asd
@@ -0,0 +1,412 @@
+(defsystem lapack/package :pathname ""
+ :components
+ ((:file "lapack-package")))
+
+(defsystem lapack/blas :pathname ""
+ :depends-on ("lapack/package")
+ :components
+ ((:module blas
+ :components
+ ((:file "daxpy")
+ (:file "dcopy")
+ (:file "ddot")
+ (:file "dnrm2")
+ (:file "dscal")
+ (:file "idamax")
+
+ (:file "dasum")
+ (:file "dcabs1")
+ (:file "dgbmv"
+ :depends-on ("lsame" "xerbla"))
+ (:file "dgemm"
+ :depends-on ("lsame" "xerbla"))
+ (:file "dgemv"
+ :depends-on ("lsame" "xerbla"))
+ (:file "dger"
+ :depends-on ("xerbla"))
+ (:file "drot")
+ (:file "drotg")
+ (:file "dsbmv"
+ :depends-on ("lsame" "xerbla"))
+ (:file "dspmv"
+ :depends-on ("lsame" "xerbla"))
+ (:file "dspr"
+ :depends-on ("lsame" "xerbla"))
+ (:file "dspr2"
+ :depends-on ("lsame" "xerbla"))
+ (:file "dswap")
+ (:file "dsymm"
+ :depends-on ("lsame" "xerbla"))
+ (:file "dsymv"
+ :depends-on ("lsame" "xerbla"))
+ (:file "dsyr"
+ :depends-on ("lsame" "xerbla"))
+ (:file "dsyr2"
+ :depends-on ("lsame" "xerbla"))
+ (:file "dsyr2k"
+ :depends-on ("lsame" "xerbla"))
+ (:file "dsyrk"
+ :depends-on ("lsame" "xerbla"))
+ (:file "dtbmv"
+ :depends-on ("lsame" "xerbla"))
+ (:file "dtbsv"
+ :depends-on ("lsame" "xerbla"))
+ (:file "dtpmv"
+ :depends-on ("lsame" "xerbla"))
+ (:file "dtpsv"
+ :depends-on ("lsame" "xerbla"))
+ (:file "dtrmm"
+ :depends-on ("lsame" "xerbla"))
+ (:file "dtrmv"
+ :depends-on ("lsame" "xerbla"))
+ (:file "dtrsm"
+ :depends-on ("lsame" "xerbla"))
+ (:file "dtrsv"
+ :depends-on ("lsame" "xerbla"))
+ (:file "dzasum"
+ :depends-on ("dcabs1"))
+ (:file "dznrm2")
+ (:file "icamax")
+ (:file "isamax")
+ (:file "izamax"
+ :depends-on ("dcabs1"))
+ (:file "lsame")
+ (:file "xerbla")
+
+ ;; Complex versions.
+ (:file "zaxpy"
+ :depends-on ("dcabs1"))
+ (:file "zcopy")
+ (:file "zdotc")
+ (:file "zdotu")
+ (:file "zdscal")
+ (:file "zgbmv")
+ (:file "zgemm")
+ (:file "zgemv")
+ (:file "zgerc")
+ (:file "zgeru")
+ (:file "zhbmv")
+ (:file "zhemm")
+ (:file "zhemv")
+ (:file "zher")
+ (:file "zher2")
+ (:file "zher2k")
+ (:file "zherk")
+ (:file "zhpmv")
+ (:file "zhpr")
+ (:file "zhpr2")
+ (:file "zrotg")
+ (:file "zscal")
+ (:file "zswap")
+ (:file "zsymm")
+ (:file "zsyr2k")
+ (:file "zsyrk")
+ (:file "ztbmv")
+ (:file "ztbsv")
+ (:file "ztpmv")
+ (:file "ztpsv")
+ (:file "ztrmm")
+ (:file "ztrmv")
+ (:file "ztrsm")
+ (:file "ztrsv")
+ ))))
+
+(defsystem lapack/implementation :pathname ""
+ :depends-on ("lapack/package" "lapack/blas")
+ :components
+ (
+ (:module lapack
+ :components
+ ((:file "dgeev"
+ :depends-on ("dlartg" "dlapy2" "dgebak" "dtrevc" "dhseqr"
+ "dorghr" "dlacpy" "dgehrd" "dgebal"
+ "dlascl" "dlange" "dlabad" "dlamch"
+ "ilaenv"))
+ (:file "dgebak")
+ (:file "dgebal")
+ (:file "dgehrd"
+ :depends-on ("dlahrd" "dlarfb" "dgehd2" "ilaenv"))
+ (:file "dhseqr"
+ :depends-on ("dlarfx" "dlarfg" "dlapy2" "dlacpy" "dlanhs"
+ "dlabad" "dlamch" "dlahqr" "ilaenv"
+ "dlaset"))
+ (:file "dlabad")
+ (:file "dlacpy")
+ (:file "dlamch"
+ :depends-on ("dlamc2" "dlamc3" "dlamc4" "dlamc5"))
+ (:file "dlamc1"
+ :depends-on ("dlamc3"))
+ (:file "dlamc2"
+ :depends-on ("dlamc1" "dlamc3" "dlamc4" "dlamc5"))
+ (:file "dlamc3")
+ (:file "dlamc4")
+ (:file "dlamc5")
+ (:file "dlange"
+ :depends-on ("dlassq"))
+ (:file "dlapy2")
+ (:file "dlartg"
+ :depends-on ("dlamch"))
+ (:file "dlascl"
+ :depends-on ("dlamch"))
+ (:file "dorghr"
+ :depends-on ("dorgqr" "ilaenv"))
+ (:file "dtrevc"
+ :depends-on ("dlabad" "dlamch" "dlaln2"))
+ (:file "ilaenv"
+ :depends-on ("ieeeck"))
+ (:file "dlahrd"
+ :depends-on ("dlarfg"))
+ (:file "dlarfb")
+ (:file "dgehd2"
+ :depends-on ("dlarfg" "dlarf"))
+ (:file "dlaset")
+ (:file "dlahqr"
+ :depends-on ("dlanhs" "dlarfg" "dlanv2" "dlabad" "dlamch"))
+ (:file "dlanhs"
+ :depends-on ("dlassq"))
+ (:file "dlarfg"
+ :depends-on ("dlapy2" "dlamch"))
+ (:file "dlarfx")
+ (:file "dlassq")
+ (:file "dorgqr"
+ :depends-on ("dorg2r" "dlarft" "dlarfb" "ilaenv"))
+ (:file "dlaln2"
+ :depends-on ("dladiv"
+ "dlamch"))
+ (:file "ieeeck")
+ (:file "dlarf")
+ (:file "dlanv2"
+ :depends-on ("dlapy2" "dlamch"))
+ (:file "dorg2r"
+ :depends-on ("dlarf"))
+ (:file "dlarft")
+ (:file "dladiv")
+
+ ;; DGEEVX
+ (:file "dgeevx"
+ :depends-on ("dlartg" "dlapy2" "dgebak" "dtrsna" "dtrevc"
+ "dhseqr" "dorghr" "dlacpy" "dgehrd"
+ "dgebal" "dlascl" "dlange" "dlabad"
+ "dlamch" "ilaenv"))
+ (:file "dtrsna"
+ :depends-on ("dtrexc" "dlacon" "dlaqtr"
+ "dlacpy" "dlapy2" "dlamch"))
+ (:file "dtrexc"
+ :depends-on ("dlaexc"))
+ (:file "dlacon")
+ (:file "dlaqtr"
+ :depends-on ("dladiv" "dlaln2" "dlange" "dlamch"))
+ (:file "dlaexc"
+ :depends-on ("dlasy2" "dlanv2" "dlarfg" "dlamch" "dlange"
+ "dlacpy" "dlartg"))
+ (:file "dlasy2"
+ :depends-on ("dlamch"))
+
+ ;; DGESV
+ (:file "dgesv"
+ :depends-on ("dgetrf" "dgetrs"))
+ (:file "dgetrf"
+ :depends-on ("dgetf2" "dlaswp" "ilaenv"))
+ (:file "dgetrs"
+ :depends-on ("dlaswp"))
+ (:file "dgetf2")
+ (:file "dlaswp")
+
+ ;; DGESDD
+ (:file "dgesdd"
+ :depends-on ("dorglq" "dgelqf" "dorgbr" "dormbr" "dorgqr"
+ "dlacpy" "dbdsdc" "dgebrd" "dlaset"
+ "dgeqrf" "dlascl" "dlange" "dlamch"
+ "ilaenv"))
+ (:file "dbdsdc"
+ :depends-on ("dlasr" "dlasda" "dlasd0" "dlamch" "dlascl"
+ "dlanst" "dlaset" "dlasdq"
+ "dlartg" "ilaenv"))
+ (:file "dgebrd"
+ :depends-on ("dlabrd" "dgebd2" "ilaenv"))
+ (:file "dgelqf"
+ :depends-on ("dgelq2" "dlarfb" "dlarft" "ilaenv"))
+ (:file "dorgbr"
+ :depends-on ("dorglq" "dorgqr" "ilaenv"))
+ (:file "dorglq"
+ :depends-on ("dorgl2" "dlarfb" "dlarft" "ilaenv"))
+ (:file "dorgl2"
+ :depends-on ("dlarf"))
+ (:file "dormbr"
+ :depends-on ("dormqr" "dormlq" "ilaenv"))
+ (:file "dlasdq"
+ :depends-on ("dlasr" "dbdsqr" "dlartg"))
+ (:file "dlanst"
+ :depends-on ("dlassq"))
+ (:file "dlasd0"
+ :depends-on ("dlasdt" "dlasd1" "dlasdq"))
+ (:file "dlasda"
+ :depends-on ("dlasd6" "dlaset" "dlasdq" "dlasdt"))
+ (:file "dlasr")
+ (:file "dlabrd"
+ :depends-on ("dlarfg"))
+ (:file "dgebd2"
+ :depends-on ("dlarf" "dlarfg"))
+ (:file "dgelq2"
+ :depends-on ("dlarf" "dlarfg"))
+ (:file "dormqr"
+ :depends-on ("dorm2r" "dlarfb" "dlarft" "ilaenv"))
+ (:file "dormlq"
+ :depends-on ("dorml2" "dlarfb" "dlarft" "ilaenv"))
+ (:file "dgeqrf"
+ :depends-on ("dgeqr2" "dlarfb" "dlarft" "ilaenv"))
+ (:file "dbdsqr"
+ :depends-on ("dlasq1" "dlasv2" "dlas2" "dlasr" "dlartg"
+ "dlamch"))
+ (:file "dlasq1"
+ :depends-on ("dlas2" "dlasrt" "dlasq2" "dlascl"))
+ (:file "dlasv2"
+ :depends-on ("dlamch"))
+ (:file "dlas2")
+ (:file "dlasdt")
+ (:file "dlasd1"
+ :depends-on ("dlasd2" "dlasd3" "dlamrg" "dlascl"))
+ (:file "dlasrt")
+ (:file "dlasq2"
+ :depends-on ("dlasq3" "ilaenv" "dlasrt" "dlamch"))
+ (:file "dlasd2"
+ :depends-on ("dlamrg" "dlacpy" "dlaset" "dlapy2" "dlamch"
+ "dlamrg"))
+ (:file "dlasd3"
+ :depends-on ("dlasd4" "dlacpy" "dlascl" "dlamch"))
+ (:file "dlamrg")
+ (:file "dlasd6"
+ :depends-on ("dlasd7" "dlasd8"))
+ (:file "dorml2")
+ (:file "dgeqr2"
+ :depends-on ("dlarf" "dlarfg"))
+ (:file "dorm2r"
+ :depends-on ("dlarf"))
+ (:file "dlasd4"
+ :depends-on ("dlasd5" "dlaed6"))
+ (:file "dlasd7"
+ :depends-on ("dlapy2" "dlamch" "dlamrg"))
+ (:file "dlasd8"
+ :depends-on ("dlasd4" "dlaset" "dlascl" "dlamch"))
+ (:file "dlasq3"
+ :depends-on ("dlasq4" "dlasq5" "dlasq6" "dlamch"))
+ (:file "dlasq4")
+ (:file "dlasq5")
+ (:file "dlasq6"
+ :depends-on ("dlamch"))
+ (:file "dlasd5")
+ (:file "dlaed6"
+ :depends-on ("dlamch"))
+
+ ;; DGESVD
+ (:file "dgesvd"
+ :depends-on ("dorglq" "dgelqf" "dormbr" "dorgqr" "dlacpy"
+ "dbdsqr" "dorgbr" "dgebrd" "dlaset"
+ "dgeqrf" "dlascl" "dlange" "dlamch"
+ "ilaenv"))
+
+ ;; For condition numbers of the singular vectors
+ (:file "ddisna")
+
+ (:file "zlange"
+ :depends-on ("zlassq"))
+ (:file "zlassq")
+ ;; Complex eigen problems
+ (:file "zgeev"
+ :depends-on ("zhseqr" "zlange" "zlascl" "zgebal" "zlacpy" "zunghr"
+ "ztrevc" "zgebak" "zgehrd"))
+ (:file "zhseqr"
+ :depends-on ("zlaqr0" "zlaset" "zlahqr" "zlacpy"))
+ (:file "zlascl"
+ :depends-on ("disnan"))
+ (:file "zgebal")
+ (:file "zlacpy"
+ :depends-on ("disnan"))
+ (:file "zunghr"
+ :depends-on ("zungqr"))
+ (:file "ztrevc"
+ :depends-on ("zlatrs"))
+ (:file "zgebak"
+ :depends-on ("zlatrs"))
+ (:file "zlatrs"
+ :depends-on ("zladiv"))
+ (:file "zungqr"
+ :depends-on ("zung2r" "zlarft" "zlarfb"))
+ (:file "disnan"
+ :depends-on ("dlaisnan"))
+ (:file "dlaisnan")
+ (:file "zladiv")
+ (:file "zung2r"
+ :depends-on ("zlarf"))
+ (:file "zlarft"
+ :depends-on ("zlacgv"))
+ (:file "zlarfb"
+ :depends-on ("ilazlr" "ilazlc" "zlacgv"))
+ (:file "ilazlr")
+ (:file "ilazlc")
+ (:file "zlacgv")
+ (:file "zlarf"
+ :depends-on ("ilazlc" "ilazlr"))
+ (:file "zlaqr0"
+ :depends-on ("zlahqr" "zlaqr3" "zlaqr4" "zlaqr5" "zlacpy"))
+ (:file "zlaset")
+ (:file "zlaqr3"
+ :depends-on ("zgehrd" "zunmhr" "zlahqr" "ztrexc" "zlarfg"
+ "zlaqr4" "zlacpy" "zlaset"))
+ (:file "zlaqr4"
+ :depends-on ("zlaqr2" "zlahqr" "zlacpy" "zlaqr5"))
+ (:file "zlaqr5"
+ :depends-on ("zlaqr1" "zlarfg" "zlaset" "zlacpy"))
+ (:file "zlaqr1")
+ (:file "zlaqr2"
+ :depends-on ("zunmhr" "ztrexc" "zlacpy" "zlaset"))
+ (:file "zlarfg"
+ :depends-on ("dlapy3" "zladiv"))
+ (:file "zlahqr"
+ :depends-on ("zlarfg" "zladiv"))
+ (:file "zgehrd"
+ :depends-on ("zlahr2" "zgehd2" "zlarfb"))
+ (:file "zunmhr"
+ :depends-on ("zunmqr"))
+ (:file "ztrexc"
+ :depends-on ("zlartg" "zrot" "zunm2r"))
+ (:file "dlapy3")
+ (:file "zlartg")
+ (:file "zrot")
+ (:file "zunmqr"
+ :depends-on ("zunm2r" "zlarft" "zlarfb"))
+ (:file "zlahr2"
+ :depends-on ("zlacgv" "zlacpy"))
+ (:file "zgehd2"
+ :depends-on ("zlarfg" "zlarf"))
+ (:file "zunm2r")
+ ;; zheev
+ (:file "zheev"
+ :depends-on ("dsterf" "zhetrd" "zlanhe" "zsteqr" "zungtr"))
+ (:file "dsterf"
+ :depends-on ("dlae2"))
+ (:file "zhetrd"
+ :depends-on ("zlatrd" "zhetd2"))
+ (:file "zsteqr"
+ :depends-on ("dlaev2" "zlasr" "dlae2"))
+ (:file "zlanhe")
+ (:file "zungtr"
+ :depends-on ("zungql"))
+ (:file "dlae2")
+ (:file "dlaev2")
+ (:file "zhetd2")
+ (:file "zlasr")
+ (:file "zlatrd")
+ (:file "zungql"
+ :depends-on ("zung2l"))
+ (:file "zung2l")
+ ))))
+
+(defsystem lapack :pathname ""
+ :depends-on ("lapack/implementation")
+ :components
+ (
+ (:file "eigensys")
+ (:file "dgesv")
+ (:file "dgeqrf")
+ (:file "dgemm")))
diff --git a/share/lapack/load-lapack.lisp b/share/lapack/load-lapack.lisp
index eb8d6164f..40a7ebdd8 100644
--- a/share/lapack/load-lapack.lisp
+++ b/share/lapack/load-lapack.lisp
@@ -6,7 +6,7 @@
(format t "(maxima-load-pathname-directory) = ~A~%" (maxima-load-pathname-directory))
(format t "sys = ~A~%" (merge-pathnames (make-pathname :name "lapack" :type "system") (maxima-load-pathname-directory))))
-#+(or ecl abcl) ($load "lisp-utils/defsystem.lisp")
+#+ecl ($load "lisp-utils/defsystem.lisp")
(load (merge-pathnames (make-pathname :name "lapack" :type "system") (maxima-load-pathname-directory)))
@@ -16,4 +16,8 @@
;; Bugfix by Marius Gerbershagen:
#+ecl (in-package #:common-lisp)
-(mk:oos "lapack-interface" :compile)
+#-abcl (mk:oos "lapack-interface" :compile)
+
+#+abcl (require "asdf")
+#+abcl (push (maxima-load-pathname-directory) asdf:*central-registry*)
+#+abcl (asdf:operate 'asdf:load-source-op "lapack")
diff --git a/share/odepack/load-dlsode.lisp b/share/odepack/load-dlsode.lisp
index 6e3516d83..d92f2cde7 100644
--- a/share/odepack/load-dlsode.lisp
+++ b/share/odepack/load-dlsode.lisp
@@ -7,7 +7,7 @@
(format t "sys = ~A~%" (merge-pathnames (make-pathname :name "odepack" :type "system")
*load-truename*)))
-#+(or ecl abcl) ($load "lisp-utils/defsystem.lisp")
+#+ecl ($load "lisp-utils/defsystem.lisp")
(let ((path (merge-pathnames (make-pathname :name "odepack" :type "system")
(maxima-load-pathname-directory))))
@@ -21,4 +21,8 @@
#+ecl
(in-package #:common-lisp)
-(mk:oos "maxima-dlsode" :compile)
+#-abcl (mk:oos "maxima-dlsode" :compile)
+
+#+abcl (require "asdf")
+#+abcl (push (maxima-load-pathname-directory) asdf:*central-registry*)
+#+abcl (asdf:operate 'asdf:load-source-op "maxima-dlsode")
diff --git a/share/odepack/maxima-dlsode.asd b/share/odepack/maxima-dlsode.asd
new file mode 100644
index 000000000..b7b10d4b0
--- /dev/null
+++ b/share/odepack/maxima-dlsode.asd
@@ -0,0 +1,58 @@
+(defclass cmn-file (cl-source-file)
+ ((type :initform "cmn")))
+
+(defsystem maxima-dlsode/odepack-package :pathname ""
+ :components
+ ((:file "package")
+ (:module "src"
+ :components
+ ((:cmn-file "dls001")))))
+
+(defsystem maxima-dlsode/odepack-dlsode :pathname ""
+ :depends-on ("maxima-dlsode/odepack-package")
+ :components
+ ((:module "src"
+ :components
+ ((:file "dlsode"
+ :depends-on ("dstode" "xerrwd" "dintdy" "dvnorm" "dewset"))
+ (:file "dintdy"
+ :depends-on ("xerrwd"))
+ (:file "dstode"
+ :depends-on ("dvnorm" "dcfode"))
+ (:file "dgbfa"
+ :depends-on ("idamax" "dscal" "dvnorm"))
+ (:file "dcfode")
+ (:file "dprepj"
+ :depends-on ("dgbfa" "dgefa" "dvnorm"))
+ (:file "dsolsy"
+ :depends-on ("dgbsl" "dgesl"))
+ (:file "dewset")
+ (:file "dvnorm")
+ (:file "dsrcom")
+ (:file "dgefa"
+ :depends-on ("idamax" "dscal" "daxpy"))
+ (:file "dgesl"
+ :depends-on ("daxpy" "ddot"))
+ (:file "dgbsl"
+ :depends-on ("daxpy" "ddot"))
+ (:file "dscal")
+ (:file "ddot")
+ (:file "idamax")
+ (:file "dumach"
+ :depends-on ("dumsum"))
+ (:file "xerrwd"
+ :depends-on ("ixsav"))
+ (:file "xsetun"
+ :depends-on ("ixsav"))
+ (:file "xsetf"
+ :depends-on ("ixsav"))
+ (:file "ixsav")
+ (:file "iumach")
+ (:file "daxpy")
+ (:file "dumsum")))))
+
+(defsystem maxima-dlsode :pathname ""
+ :depends-on ("maxima-dlsode/odepack-dlsode")
+ :components
+ ((:file "dlsode-interface")))
+
diff --git a/src/testsuite.lisp b/src/testsuite.lisp
index 31e8a381b..3b54b5a29 100644
--- a/src/testsuite.lisp
+++ b/src/testsuite.lisp
@@ -216,10 +216,6 @@
;; On sbcl 1.4.10 we still get out-of-memory errors on many
;; computers on loading lapack => commented these tests out
;; for SBCL.
- ;;
- ;; The following functions were used but not defined: ODEPACK::DUMACH in gcl 2.6.12
- ;; and abcl 1.5.0
-
#-sbcl
((mlist simp) "rtest_dgemm")
#-sbcl
@@ -227,8 +223,6 @@
#-sbcl
((mlist simp) "rtest_dgesv")
;; The following functions were used but not defined: ODEPACK::DUMACH in gcl 2.6.12
- ;; and abcl 1.5.0
- #-abcl
"rtest_dlsode"
((mlist simp) "rtest_fourier_elim"
((mlist simp) 146 147 148 149))
-----------------------------------------------------------------------
Summary of changes:
share/lapack/{lapack.system => lapack.asd} | 38 ++++----------------
share/lapack/load-lapack.lisp | 8 +++--
share/odepack/load-dlsode.lisp | 8 +++--
share/odepack/maxima-dlsode.asd | 58 ++++++++++++++++++++++++++++++
src/testsuite.lisp | 6 ----
5 files changed, 77 insertions(+), 41 deletions(-)
copy share/lapack/{lapack.system => lapack.asd} (91%)
create mode 100644 share/odepack/maxima-dlsode.asd
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2025-12-05 00:41:54
|
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-highlightjs-example-maxima-blocks-texi-dev has been updated
via df9ef1947c8a711927e713ab1924fd50eaf9e85a (commit)
via 4bd8978dace67cc52ef7bc063a1af6b4bec402f9 (commit)
via c3ccccdfe4155e2dee307791ce50af2525750035 (commit)
via 8fe0ee85530ed3cdebe33153da6428dd3f432182 (commit)
via 6c6d825bdf4fad8235ccc790b5e1e47f41109a75 (commit)
via 015e5cc9072906c6f3133aaeee860ae0bbc3b503 (commit)
via ea4518bc2b5a01fc8c876bde2313cdee425035d6 (commit)
from 72cb52f47d84cfa8a9c890868e7e77f8a9b6c67f (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 df9ef1947c8a711927e713ab1924fd50eaf9e85a
Author: Raymond Toy <toy...@gm...>
Date: Thu Dec 4 08:46:08 2025 -0800
Include pygments custom CSS when using pygments style
The default background for the pygments light mode style is different
from the normal examples background. We need to include
pygments.custom.css to make the backgrounds match.
diff --git a/configure.ac b/configure.ac
index 8b8a68af8..51065faf7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -903,6 +903,12 @@ EOF
else
AC_MSG_ERROR([Makeinfo version (${makeinfo_version_string}) too old to use pygments for syntax highlighting. Disable or use highlightjs])
fi
+ CUSTOM_PYGMENTS_CSS="$(cat | tr -s '\n' ' ' <<EOF
+<link rel="stylesheet"
+ type="text/css"
+ href="pygments.custom.css">
+EOF
+)"
fi
if test x${syntax_highlighting} = "xcustom-pygments"; then
if test ${makeinfo_version} -lt 70299; then
commit 4bd8978dace67cc52ef7bc063a1af6b4bec402f9
Merge: 72cb52f47 c3ccccdfe
Author: Raymond Toy <toy...@gm...>
Date: Sat Nov 29 07:20:02 2025 -0800
Merge branch 'master' into rtoy-highlightjs-example-maxima-blocks-texi-dev
-----------------------------------------------------------------------
Summary of changes:
configure.ac | 6 ++++++
src/Makefile.am | 39 ---------------------------------------
tests/Makefile.am | 9 ---------
3 files changed, 6 insertions(+), 48 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: willisbl <wil...@us...> - 2025-12-01 10:51:08
|
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 75f8ae061eed8946514a5df97fded10ac14a7358 (commit)
from 7a7b1a6ea31e4cdbcd09a824c8abbc57d50b0ce8 (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 75f8ae061eed8946514a5df97fded10ac14a7358
Author: Barton Willis <wi...@un...>
Date: Mon Dec 1 04:50:53 2025 -0600
Update ChangeLog for fix for bug #4636
diff --git a/ChangeLog b/ChangeLog
index f2410ec59..c043af3d2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -16,6 +16,7 @@ Bug fixes for numbered bugs:
* \#4603: Control stack regression with abs_integrate / 5.48.0
* \#4619: limit(inf = inf) causes stack overflow
* \#4633: integrate(exp(- t) log(t), t, 0, 1) --> integral nounform
+ * \#4636: signum(ind) is an error
Changes in the Windows installer:
---------------------------------
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 1 +
1 file changed, 1 insertion(+)
hooks/post-receive
--
Maxima CAS
|
|
From: willisbl <wil...@us...> - 2025-12-01 10:39:26
|
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 7a7b1a6ea31e4cdbcd09a824c8abbc57d50b0ce8 (commit)
from 7b6f5cde1a84c8b4a795fccc0e53c3bb74e32aba (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 7a7b1a6ea31e4cdbcd09a824c8abbc57d50b0ce8
Author: Barton Willis <wi...@un...>
Date: Mon Dec 1 04:39:11 2025 -0600
Fix for #4636 signum(ind) is an error
- In the signum simplifier, catch errors from the call to `csign`. This allows `signum(ind)` to return a `signum` nounform.
- Added a test to `rtest_signum.mac` for this bug, along with additional tests for overflow and underflow in signum expressions.
- Updated a few other tests in `rtest_signum.mac`.
No unexpected failures in the testsuite or share testsuite with SBCL 2.4.7 or Clozure 1.13.
diff --git a/src/simp.lisp b/src/simp.lisp
index 28ec6502a..1a1b97d41 100644
--- a/src/simp.lisp
+++ b/src/simp.lisp
@@ -1868,7 +1868,9 @@
x)
(t
- (setq sgn ($csign x))
+ ;; Let's catch errors from $csign. Doing so allows signum(ind) to return a signum nounform, for example.
+ (setq sgn (car (let (($errormsg nil) (errcatch t) (errset nil)) (errset ($csign x)))))
+
(cond ((eq sgn '$neg) -1)
((eq sgn '$zero) 0)
((eq sgn '$pos) 1)
diff --git a/tests/rtest_signum.mac b/tests/rtest_signum.mac
index 213182dfb..c6736c8a9 100644
--- a/tests/rtest_signum.mac
+++ b/tests/rtest_signum.mac
@@ -48,17 +48,17 @@ signum(x^2 + 1);
(declare(z, complex),0);
0$
-signum(z);
-signum(z)$
+block([ans : signum(z)], [op(ans), args(ans)]);
+[signum,[z]]$
signum(%i);
-signum(%i)$
+%i$
signum(%i - 6);
-signum(%i - 6)$
+%i/sqrt(37)-6/sqrt(37)$
-signum(z^2 + 1);
-signum(z^2 + 1)$
+block([ans : signum(z^2 + 1)],[op(ans), args(ans)]);
+[signum,[z^2+1]]$
(assume(p > 0, n < 0, pz >= 0, nz <= 0),0);
0$
@@ -227,3 +227,54 @@ b^2$
integrate(mod(x,b),x,0,42*b);
21*b^2$
+
+/* \# 4636 signum(ind) is an error */
+block([ans : signum(ind)], [op(ans),args(ans)]);
+[signum, [ind]]$
+
+block([ans : signum(infinity)], [op(ans),args(ans)]);
+[signum, [infinity]]$
+
+block([ans : signum(und)], [op(ans),args(ans)]);
+[signum, [und]]$
+
+/* overflow/underflow cases also reported in \# 4636 */
+signum(1e-170);
+1.0$
+
+signum(-1e-170);
+-1.0$
+
+signum(1e308);
+1.0$
+
+signum(-1e308);
+-1.0$
+
+signum(1e-170 + %i*1e-170);
+0.7071067811865475*%i + 0.7071067811865475$
+
+signum(1e170 + %i*1e+170);
+0.7071067811865475 * %i + 0.7071067811865475$
+
+signum(1e170);
+1.0$
+
+/* complex numbers */
+signum(5+%i*7);
+(7*%i)/sqrt(74)+5/sqrt(74)$
+
+signum(3.4 + %i);
+0.28216632399155017*%i+0.9593655015712705$
+
+signum(3.4 + %i/15);
+0.019604074934445576*%i+0.9998078216567245$
+
+signum(3.4b0 + %i/15);
+1.96040749344455786124536b-2*%i+9.99807821656724509235131b-1$
+
+facts();
+[]$
+
+contexts;
+[initial, global]$
\ No newline at end of file
-----------------------------------------------------------------------
Summary of changes:
src/simp.lisp | 4 +++-
tests/rtest_signum.mac | 63 +++++++++++++++++++++++++++++++++++++++++++++-----
2 files changed, 60 insertions(+), 7 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: <ap...@us...> - 2025-12-01 06:23: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, dodier-iterate-over-hash-tables-take-2 has been created
at 93a890f26c1ed97facd712f1a44b980e4afd0b2c (commit)
- Log -----------------------------------------------------------------
commit 93a890f26c1ed97facd712f1a44b980e4afd0b2c
Author: Robert Dodier <rob...@so...>
Date: Sun Nov 30 22:22:12 2025 -0800
Documentation for iterating over key-value pairs of hash table;
also documentation for iterating over arguments of a general expression,
and expand documentation for iterating over elements of a list.
diff --git a/doc/info/Program.texi b/doc/info/Program.texi
index 13bcd99b6..e4350ecc2 100644
--- a/doc/info/Program.texi
+++ b/doc/info/Program.texi
@@ -311,6 +311,10 @@ form of the @code{do} statements maxima supports is:
unless @var{condition} do @var{body}}
@item
@code{for @var{variable} in @var{list} do @var{body}}
+@item
+@code{for @var{variable} in @var{expr} do @var{body}}
+@item
+@code{for @var{variable} in @var{hash_table} do @var{body}}
@end itemize
If the loop is expected to generate a list as output the command
@@ -318,7 +322,7 @@ If the loop is expected to generate a list as output the command
@xref{Performance considerations for Lists}.
@var{initial_value}, @var{increment}, @var{limit}, and @var{body} can be any
-expression. @var{list} is a list. If the increment is 1 then "@code{step 1}"
+expression. If the increment is 1 then "@code{step 1}"
may be omitted; As always, if @code{body} needs to contain more than one command
these commands can be specified as a comma-separated list surrounded
by parenthesis or as a @mrefdot{block}
@@ -560,39 +564,126 @@ be returned as the value of the @code{do}. The @code{block} is exited and this
value of the @code{do} is returned as the value of the @code{block} because the
@code{do} is the last statement in the block.)
-One other form of the @code{do} is available in Maxima. The syntax is:
+A @code{for} loop can also iterate over the contents of lists, general expressions, and hash tables, as follows.
@example
for @var{variable} in @var{list} @var{end_tests} do @var{body}
+
+for @var{variable} in @var{expr} @var{end_tests} do @var{body}
+
+for @var{variable} in @var{hash_table} @var{end_tests} do @var{body}
@end example
-The elements of @var{list} are any expressions which will successively
-be assigned to the @code{variable} on each iteration of the
-@var{body}. The optional termination tests @var{end_tests} can be
-used to terminate execution of the @code{do}; otherwise it will
-terminate when the @var{list} is exhausted or when a @code{return} is
-executed in the @var{body}. (In fact, @code{list} may be any
-non-atomic expression, and successive parts are taken.)
+In each case,
+@var{body} is evaluated once for @var{variable} assigned
+each element of @var{list},
+each argument of @var{expr},
+or each key-value pair of @var{hash_table},
+respectively.
+If present,
+@var{end_tests} terminate the loop if any test evaluates to @code{true};
+otherwise the loop terminates when the elements of @var{list},
+the arguments of @var{expr},
+or the key-value pairs of @var{hash_table}
+are exhausted,
+or when @code{return} is executed in @var{body}.
+
+@var{hash_table} may be an undeclared array,
+either as a symbol property (created with @code{use_fast_arrays} equal to @code{false})
+or a value (created with @code{use_fast_arrays} equal to @code{true}),
+or a hash table created by @code{make_array(hashed, ...)}.
+
+Values are assigned to @var{variable} using the general assignment operator @code{":"}.
+Therefore any assignment to a symbol (not a subscripted expression) which is possible via @code{":"}
+is also permissible for iterating over the contents of expressions.
+In particular,
+destructuring assignments are recognized;
+these may be useful to work with the key-value pairs of a hash table.
+
+Examples:
+
+A @code{for} loop can iterate over the elements of a list.
@c ===beg===
-@c for f in [log, rho, atan] do ldisp(f(1))$
-@c ev(%t3,numer);
+@c for f in [log, rho, atan] do ldisp (f(1)) $
@c ===end===
@example maxima
@group
-(%i1) for f in [log, rho, atan] do ldisp(f(1))$
+(%i1) for f in [log, rho, atan] do ldisp (f(1)) $
(%t1) 0
(%t2) rho(1)
%pi
-(%t3) ---
+(%t3) ───
4
+@end group
+@end example
+
+A @code{for} loop can iterate over the arguments of a general expression.
+@c ===beg===
+@c e: a + 1/2 + %pi*2;
+@c for v in e do ldisp (v) $
+@c ===end===
+@example maxima
+@group
+(%i1) e: a + 1/2 + %pi*2;
+ 1
+(%o1) a + 2 %pi + ─
+ 2
+(%i2) for v in e do ldisp (v) $
+(%t2) a
+
+(%t3) 2 %pi
+
+ 1
+(%t4) ─
+ 2
@end group
+@end example
+
+A @code{for} loop can iterate over the key-value pairs of hash tables.
+In this case, the hash table is an undeclared array.
+
+@c ===beg===
+@c (hh["foo"]: 444, hh["bar"]: 222, hh["baz"]: 777) $
+@c for p in hh do ldisp (p);
+@c ===end===
+@example maxima
+@group
+(%i1) (hh["foo"]: 444, hh["bar"]: 222, hh["baz"]: 777) $
+
+(%i2) for p in hh do ldisp (p);
+(%t2) [[bar], 222]
+
+(%t3) [[baz], 777]
+
+(%t4) [[foo], 444]
+
+(%o4) done
+@end group
+@end example
+
+Destructuring assignments are recognized;
+these may be useful to work with the key-value pairs of a hash table.
+
+@c ===beg===
+@c (hh["foo"]: 444, hh["bar"]: 222, hh["baz"]: 777) $
+@c for [[k], v] in hh do disp (printf (false, "Key ~a --> value ~a", k, v));
+@c ===end===
+@example maxima
@group
-(%i4) ev(%t3,numer);
-(%o4) 0.7853981633974483
+(%i1) (hh["foo"]: 444, hh["bar"]: 222, hh["baz"]: 777) $
+
+(%i2) for [[k], v] in hh do disp (printf (false, "Key ~a --> value ~a", k, v));
+ Key bar --> value 222
+
+ Key baz --> value 777
+
+ Key foo --> value 444
+
+(%o2) done
@end group
@end example
commit fd048bb89333049a38d9026d7324997c507b9d00
Author: Robert Dodier <rob...@so...>
Date: Sat Nov 29 10:43:06 2025 -0800
Additional tests for iterating over hash tables; one loop variable, no destructuring.
diff --git a/tests/rtest6.mac b/tests/rtest6.mac
index 531dad995..4ca02d4bf 100644
--- a/tests/rtest6.mac
+++ b/tests/rtest6.mac
@@ -253,6 +253,18 @@ true;
a: 100;
100;
+block ([L: []], for a in aa1 do push ([a[2], a[1]], L), sort (L));
+[[111, ["foo"]], [222, ["bar"]], [333, ["baz"]], [444, ["quux"]]];
+
+a;
+100;
+
+block ([L: []], for b in aa1 do push ([b[2], b[1]], L), sort (L));
+[[111, ["foo"]], [222, ["bar"]], [333, ["baz"]], [444, ["quux"]]];
+
+b;
+b;
+
block ([L: []], for [a, b] in aa1 do push ([b, a], L), sort (L));
[[111, ["foo"]], [222, ["bar"]], [333, ["baz"]], [444, ["quux"]]];
@@ -273,6 +285,18 @@ block ([L: []], for [[a], b] in aa1 do push ([b, a], L), sort (L));
?hash\-table\-p (aa2);
true;
+block ([L: []], for a in aa2 do push ([a[2], a[1]], L), sort (L));
+[[%e, [jj, 543]], [%phi, [cc, 1099]], [%pi, [xx, 99]]];
+
+a;
+100;
+
+block ([L: []], for b in aa2 do push ([b[2], b[1]], L), sort (L));
+[[%e, [jj, 543]], [%phi, [cc, 1099]], [%pi, [xx, 99]]];
+
+b;
+b;
+
block ([L: []], for [a, b] in aa2 do push ([b, a], L), sort (L));
[[%e, [jj, 543]], [%phi, [cc, 1099]], [%pi, [xx, 99]]];
@@ -302,6 +326,14 @@ true;
[b, a];
[-2, 100];
+block ([L: []], for b in aa3 do push ([b[1], b[2]], L), sort (L));
+[[["fgh", 3*u*v, giraffe], rhino*elephant],
+ [["glorble", 7*x, emu], 6/cricket],
+ [["mno", "pqr", 1 - 2*u], bessel_j (2, 1 - sqrt(x))]];
+
+b;
+-2;
+
block ([L: []], for [b, a] in aa3 do push ([b, a], L), sort (L));
[[["fgh", 3*u*v, giraffe], rhino*elephant],
[["glorble", 7*x, emu], 6/cricket],
@@ -340,6 +372,12 @@ true;
(f: 199, g: 200);
200;
+block ([L: []], for g in hh1 do push ([g[2], g[1]], L), sort (L));
+[[cos(w), [3 - y]], [tan(x), [1/(1 + z)]], [sin(z), [1 + x]]];
+
+g;
+200;
+
block ([L: []], for [f, g] in hh1 do push ([g, f], L), sort (L));
[[cos(w), [3 - y]], [tan(x), [1/(1 + z)]], [sin(z), [1 + x]]];
@@ -366,6 +404,14 @@ true;
0);
0;
+block ([L: []], for y in hh2 do push ([y[1], y[2]], L), sort (L));
+[[[456, cos(w)], sin(u) - cos(v)],
+ [[678, "blurf"], 876 - mumble],
+ [[987, "sdf"], 777*zxy]];
+
+y;
+y;
+
block ([L: []], for [x, y] in hh2 do push ([x, y], L), sort (L));
[[[456, cos(w)], sin(u) - cos(v)],
[[678, "blurf"], 876 - mumble],
@@ -396,6 +442,14 @@ true;
0);
0;
+block ([L: []], for q in hh3 do push ([q[1], q[2]], L), sort (L));
+[[[asdfg, 1 - rewq, 2*treww], sin(poiur) - cos(kjghds)],
+ [[ewq, 2 - jdssaaq, 3*cxmmz], sqrt(ytre)],
+ [[hgf, fds, jhg], cos(trwq)]];
+
+q;
+q;
+
block ([L: []], for [p, q] in hh3 do push ([p, q], L), sort (L));
[[[asdfg, 1 - rewq, 2*treww], sin(poiur) - cos(kjghds)],
[[ewq, 2 - jdssaaq, 3*cxmmz], sqrt(ytre)],
@@ -431,6 +485,12 @@ false;
arrays;
[bb1];
+block ([L: []], for v in bb1 do push ([v[2], v[1]], L), sort (L));
+[[123, ["mumble"]], [234, ["blarf"]], [345, ["blarg"]], [999, ["blurf"]]];
+
+v;
+v;
+
block ([L: []], for [u, v] in bb1 do push ([v, u], L), sort (L));
[[123, ["mumble"]], [234, ["blarf"]], [345, ["blarg"]], [999, ["blurf"]]];
@@ -454,6 +514,12 @@ arrays;
w: 321;
321;
+block ([L: []], for w in bb2 do push ([w[1], w[2]], L), sort (L));
+[[["hgfedc", 3 - blurf], tan(n*%pi)], [["pqr", 1 + %pi], sin(k*%pi)], [["zxy", 2*%pi], cos(m*%pi)]];
+
+w;
+321;
+
block ([L: []], for [v, w] in bb2 do push ([v, w], L), sort (L));
[[["hgfedc", 3 - blurf], tan(n*%pi)], [["pqr", 1 + %pi], sin(k*%pi)], [["zxy", 2*%pi], cos(m*%pi)]];
@@ -480,6 +546,14 @@ block ([L: []], for [[v1, v2], w] in bb2 do push ([v1, v2, w], L), sort (L));
arrays;
[bb1, bb2, bb3];
+block ([L: []], for v in bb3 do push ([v[1], v[2]], L), sort (L));
+[[[hjk, "mumble", cos(y) - x], cot(a - b)],
+ [[uvw, "qwerty", foo(z) + q], sec(2*b - a)],
+ [[zxy, "blah", cos(a) + cos(b)], tan(a + b)]];
+
+v;
+v;
+
block ([L: []], for [w, v] in bb3 do push ([w, v], L), sort (L));
[[[hjk, "mumble", cos(y) - x], cot(a - b)],
[[uvw, "qwerty", foo(z) + q], sec(2*b - a)],
commit 2ca5be5d9f7110c1be52660b4e9c99352f79ca21
Author: Robert Dodier <rob...@so...>
Date: Fri Nov 28 21:17:11 2025 -0800
Extend "for" loop syntax to iterate over hash tables.
The basic syntax is: for [k, v] in hh do ...
where hh is a undeclared array, "fast" array (i.e., a hash table created
with use_fast_arrays: true), or created by make_array(hashed, ...).
[k, v] is a key/value pair. The pairs are processed in the order
of keys as returned by arrayinfo.
k is always a list, even if the hash table has only one key
and therefore the list has exactly one element.
Destructuring assignment is recognized, e.g.:
for [[k], v] in hh1 do ...
for [[k1, k2], v] in hh2 do ...
for [[k1, k2, k3], v] in hh3 do ...
where hh1, hh2, and hh3 are hash tables which have,
respectively, one, two, and three keys.
Destructuring assignment also applies to the existing loop syntax
for iterating over lists, e.g.:
for [x, y] in [[11, 12], [13, 9], [19, 29]] do ...
This is a freebie -- it would be more work to apply destructuring
assignment only to hash tables, so I let it stand.
There is one bug of which I'm aware: when destructuring assignment is
applied and one of the loop variables is restricted by an ASSIGN helper
to non-symbol values (e.g., linel, which has an ASSIGN helper to
restrict assigned values to integers), *and* the variable is unbound
in the Lisp sense (i.e., BOUNDP returns NIL) before starting the
iteration, then there is an error at the end of the iteration.
From what I can tell, there are no such variables in Maxima, and it's
not easy to create one. Such a variable can be created by Lisp
programming (to create an assignment helper and attach it via the
ASSIGN property), or the following Maxima incantation:
define_variable (foo, 1111, integer);
remvalue (foo);
foo has an ASSIGN property (created by define_variable) and it is
unbound by remvalue. Now the following loop triggers the bug:
for [foo] in [[11], [22], [33]] do print (foo);
From reading the reference manual, it appears that mode_declare plus
mode_checkp, and followed by remvalue, might also work, although it
appears mode_checkp has no effect, from what I can tell.
I will devote time to fixing the bug, but it seems like a not too
serious problem, given the obscurity of the way to trigger it.
diff --git a/src/mlisp.lisp b/src/mlisp.lisp
index e9a0bcdc0..8bdf53d20 100644
--- a/src/mlisp.lisp
+++ b/src/mlisp.lisp
@@ -448,6 +448,18 @@ is EQ to FNNAME if the latter is non-NIL."
;; option variable $errormsg is used as a local variable in a block.
(defvar *$errormsg-value* nil)
+(defun symbol-values-in (expr)
+ (if (atom expr)
+ (if (symbolp expr)
+ (if (boundp expr)
+ ;; Do not take the actual value of $errormsg. It is
+ ;; always NIL at this point, but the value which
+ ;; is stored in *$errormsg-value*.
+ (if (eq expr '$errormsg) *$errormsg-value* (symbol-value expr))
+ munbound)
+ expr)
+ (cons (car expr) (mapcar 'symbol-values-in (cdr expr)))))
+
(defun mbind-doit (lamvars fnargs fnname)
"Makes a new frame where the variables in the list LAMVARS are bound
to the corresponding elements in FNARGS. Note that these elements are
@@ -471,16 +483,9 @@ wrapper for this."
(cons (ncons fnname) lamvars))
(cons '(mlist) fnargs)))))
(let ((var (car vars)))
- (if (not (symbolp var))
+ (when (not (every 'symbolp (cdr ($listofvars var))))
(merror (intl:gettext "Only symbols can be bound; found: ~M") var))
- (let ((value (if (boundp var)
- (if (eq var '$errormsg)
- ;; Do not take the actual value of $errormsg. It is
- ;; always NIL at this point, but the value which
- ;; is stored in *$errormsg-value*.
- *$errormsg-value*
- (symbol-value var))
- munbound)))
+ (let ((value (symbol-values-in var)))
(mset var (car args))
(psetq bindlist (cons var bindlist)
mspeclist (cons value mspeclist))))))
@@ -493,7 +498,7 @@ wrapper for this."
;; At this point store the value of $errormsg in a global. The macro
;; with-$error sets the value of $errormsg to NIL, but we need the
;; actual value in the routine mbind-doit.
- (setq *$errormsg-value* $errormsg)
+ (setq *$errormsg-value* (if (boundp '$errormsg) $errormsg munbound))
(unwind-protect
(prog1
(with-$error (mbind-doit lamvars fnargs fnname))
@@ -522,13 +527,33 @@ wrapper for this."
(finish-output)
(values))
+(defun munbind-makunbound (var)
+ (makunbound var)
+ (setf $values (delete var $values :count 1 :test #'eq)))
+
(defun munbind (vars)
- (dolist (var (reverse vars))
- (cond ((eq (car mspeclist) munbound)
- (makunbound var)
- (setf $values (delete var $values :count 1 :test #'eq)))
- (t (let ((munbindp t)) (mset var (car mspeclist)))))
- (setq mspeclist (cdr mspeclist) bindlist (cdr bindlist))))
+ (let ((foo))
+ (dolist (var (reverse vars))
+ ;; This is a bit of a mess. We should avoid assigning MUNBOUND
+ ;; and instead call MUNBIND-MAKUNBOUND, because some variables
+ ;; cannot be assigned MUNBOUND due to declarations or custom setters.
+ ;; It is easy to detect these cases when VAR is just a symbol,
+ ;; but I don't see a straightforward way to handle it when VAR is
+ ;; a nonatomic expression, so the code for the non-symbol branch
+ ;; will fail if the expression contains a symbol for which
+ ;; MUNBOUND cannot be assigned.
+ (if (symbolp var)
+ (if (eq (car mspeclist) munbound)
+ (munbind-makunbound var)
+ (mset var (car mspeclist)))
+ (progn
+ (let ((munbindp t))
+ (mset var (car mspeclist)))
+ (mapcar (lambda (x) (push x foo)) (cdr ($listofvars var)))))
+ (setq mspeclist (cdr mspeclist) bindlist (cdr bindlist)))
+ (dolist (var foo)
+ (when (and (boundp var) (eq (symbol-value var) munbound))
+ (munbind-makunbound var)))))
;;This takes the place of something like
;; (DELETE (ASSOC (NCONS VAR) $DEPENDENCIES) $DEPENDENCIES 1)
@@ -2229,11 +2254,31 @@ wrapper for this."
(merror (intl:gettext "do loop: illegal 'return': ~M") (car val)))
(t (return (car val))))))))
+(defun key-value-pairs-given-key-lists (x key-lists)
+ (mapcar (lambda (l) (list '(mlist) l (mfuncall '$arrayapply x l))) key-lists))
+
+(defun key-value-pairs-for-hashed-array (x)
+ (let*
+ ((1-d-hash-table (gethash 'dim1 x))
+ (info (mfuncall '$arrayinfo x))
+ (keys-raw (cdddr info))
+ (key-lists (if 1-d-hash-table (mapcar (lambda (y) (cons '(mlist) (list y))) keys-raw) keys-raw)))
+ (key-value-pairs-given-key-lists x key-lists)))
+
+(defun key-value-pairs-for-undeclared-array (x)
+ (let*
+ ((info (mfuncall '$arrayinfo x))
+ (key-lists (cdddr info)))
+ (key-value-pairs-given-key-lists x key-lists)))
+
(defmspec mdoin (form)
(setq form (cdr form))
(funcall #'(lambda (mdop my-var set test action)
(setq set (if ($atom (setq set (format1 (meval (cadr form)))))
- (merror (intl:gettext "do loop: 'in' argument must be a nonatomic expression; found: ~M") set)
+ (cond
+ ((hash-table-p set) (key-value-pairs-for-hashed-array set))
+ ((safe-mget set 'hashar) (key-value-pairs-for-undeclared-array set))
+ (t (merror (intl:gettext "do loop: atomic 'in' argument must be a hashed or undeclared array; found: ~M") set)))
(margs set))
test (list '(mor)
(if (car (cddddr form))
diff --git a/tests/rtest6.mac b/tests/rtest6.mac
index ac4fe99c1..531dad995 100644
--- a/tests/rtest6.mac
+++ b/tests/rtest6.mac
@@ -228,3 +228,370 @@ chain weld bucket;
subst (f = "foo", f(x));
foo(x);
+
+/* tests for iterating over hash tables
+ * verify both value hash tables ("fast arrays" or created by make_array)
+ * and named hash tables ("undeclared arrays").
+ */
+
+kill (all);
+done;
+
+/* value hash tables: "fast arrays" */
+
+use_fast_arrays: true;
+true;
+
+/* one key */
+
+(aa1["baz"]: 333, aa1["bar"]: 222, aa1["quux"]: 444, aa1["foo"]: 111, 0);
+0;
+
+?hash\-table\-p (aa1);
+true;
+
+a: 100;
+100;
+
+block ([L: []], for [a, b] in aa1 do push ([b, a], L), sort (L));
+[[111, ["foo"]], [222, ["bar"]], [333, ["baz"]], [444, ["quux"]]];
+
+[a, b];
+[100, b];
+
+block ([L: []], for [[a], b] in aa1 do push ([b, a], L), sort (L));
+[[111, "foo"], [222, "bar"], [333, "baz"], [444, "quux"]];
+
+[a, b];
+[100, b];
+
+/* two keys */
+
+(aa2[xx, 99]: %pi, aa2[cc, 1099]: %phi, aa2[jj, 543]: %e, 0);
+0;
+
+?hash\-table\-p (aa2);
+true;
+
+block ([L: []], for [a, b] in aa2 do push ([b, a], L), sort (L));
+[[%e, [jj, 543]], [%phi, [cc, 1099]], [%pi, [xx, 99]]];
+
+[a, b];
+[100, b];
+
+(a2: 300, b: -2);
+-2;
+
+block ([L: []], for [[a1, a2], b] in aa2 do push ([b, a2, a1], L), sort (L));
+[[%e, 543, jj], [%phi, 1099, cc], [%pi, 99, xx]];
+
+[a1, a2, b];
+[a1, 300, -2];
+
+/* three keys */
+
+(aa3["mno", "pqr", 1 - 2*u]: bessel_j (2, 1 - sqrt(x)),
+ aa3["fgh", 3*u*v, giraffe]: rhino*elephant,
+ aa3["glorble", 7*x, emu]: 6/cricket,
+ 0);
+0;
+
+?hash\-table\-p (aa3);
+true;
+
+[b, a];
+[-2, 100];
+
+block ([L: []], for [b, a] in aa3 do push ([b, a], L), sort (L));
+[[["fgh", 3*u*v, giraffe], rhino*elephant],
+ [["glorble", 7*x, emu], 6/cricket],
+ [["mno", "pqr", 1 - 2*u], bessel_j (2, 1 - sqrt(x))]];
+
+[b, a];
+[-2, 100];
+
+block ([L: []], for [[a1, a2, b], a] in aa3 do push ([a1, a2, b, a], L), sort (L));
+[["fgh", 3*u*v, giraffe, rhino*elephant],
+ ["glorble", 7*x, emu, 6/cricket],
+ ["mno", "pqr", 1 - 2*u, bessel_j (2, 1 - sqrt(x))]];
+
+[a1, a2, b, a];
+[a1, 300, -2, 100];
+
+arrays;
+[];
+
+(reset (use_fast_arrays), kill (all));
+done;
+
+/* value hash tables: created by make_array */
+
+/* one key */
+
+(hh1: make_array (hashed, 1), 0);
+0;
+
+?hash\-table\-p (hh1);
+true;
+
+(hh1[1 + x]: sin(z), hh1[3 - y]: cos(w), hh1[1/(1 + z)]: tan(x), 0);
+0;
+
+(f: 199, g: 200);
+200;
+
+block ([L: []], for [f, g] in hh1 do push ([g, f], L), sort (L));
+[[cos(w), [3 - y]], [tan(x), [1/(1 + z)]], [sin(z), [1 + x]]];
+
+[f, g];
+[199, 200];
+
+block ([L: []], for [[f], g] in hh1 do push ([g, f], L), sort (L));
+[[cos(w), 3 - y], [tan(x), 1/(1 + z)], [sin(z), 1 + x]];
+
+[f, g];
+[199, 200];
+
+/* two keys */
+
+(hh2: make_array (hashed, 1, 1), 0);
+0;
+
+?hash\-table\-p (hh2);
+true;
+
+(hh2[678, "blurf"]: 876 - mumble,
+ hh2[987, "sdf"]: 777*zxy,
+ hh2[456, cos(w)]: sin(u) - cos(v),
+ 0);
+0;
+
+block ([L: []], for [x, y] in hh2 do push ([x, y], L), sort (L));
+[[[456, cos(w)], sin(u) - cos(v)],
+ [[678, "blurf"], 876 - mumble],
+ [[987, "sdf"], 777*zxy]];
+
+[x, y];
+[x, y];
+
+block ([L: []], for [[x1, x2], y] in hh2 do push ([x1, x2, y], L), sort (L));
+[[456, cos(w), sin(u) - cos(v)],
+ [678, "blurf", 876 - mumble],
+ [987, "sdf", 777*zxy]];
+
+[x1, x2, y];
+[x1, x2, y];
+
+/* three keys */
+
+(hh3: make_array (hashed, 1, 1, 1), 0);
+0;
+
+?hash\-table\-p (hh3);
+true;
+
+(hh3[hgf, fds, jhg]: cos(trwq),
+ hh3[asdfg, 1 - rewq, 2*treww]: sin(poiur) - cos(kjghds),
+ hh3[ewq, 2 - jdssaaq, 3*cxmmz]: sqrt(ytre),
+ 0);
+0;
+
+block ([L: []], for [p, q] in hh3 do push ([p, q], L), sort (L));
+[[[asdfg, 1 - rewq, 2*treww], sin(poiur) - cos(kjghds)],
+ [[ewq, 2 - jdssaaq, 3*cxmmz], sqrt(ytre)],
+ [[hgf, fds, jhg], cos(trwq)]];
+
+[p, q];
+[p, q];
+
+block ([L: []], for [[p1, p2, p3], q] in hh3 do push ([p1, p2, p3, q], L), sort (L));
+[[asdfg, 1 - rewq, 2*treww, sin(poiur) - cos(kjghds)],
+ [ewq, 2 - jdssaaq, 3*cxmmz, sqrt(ytre)],
+ [hgf, fds, jhg, cos(trwq)]];
+
+[p1, p2, p3, q];
+[p1, p2, p3, q];
+
+arrays;
+[];
+
+kill (all);
+done;
+
+/* named hash tables: "undeclared arrays" */
+
+/* one key */
+
+(bb1["mumble"]: 123, bb1["blarf"]: 234, bb1["blurf"]: 999, bb1["blarg"]: 345, 0);
+0;
+
+?hash\-table\-p (bb1);
+false;
+
+arrays;
+[bb1];
+
+block ([L: []], for [u, v] in bb1 do push ([v, u], L), sort (L));
+[[123, ["mumble"]], [234, ["blarf"]], [345, ["blarg"]], [999, ["blurf"]]];
+
+[u, v];
+[u, v];
+
+block ([L: []], for [[u], v] in bb1 do push ([v, u], L), sort (L));
+[[123, "mumble"], [234, "blarf"], [345, "blarg"], [999, "blurf"]];
+
+[u, v];
+[u, v];
+
+/* two keys */
+
+(bb2["pqr", 1 + %pi]: sin(k*%pi), bb2["zxy", 2*%pi]: cos(m*%pi), bb2["hgfedc", 3 - blurf]: tan(n*%pi), 0);
+0;
+
+arrays;
+[bb1, bb2];
+
+w: 321;
+321;
+
+block ([L: []], for [v, w] in bb2 do push ([v, w], L), sort (L));
+[[["hgfedc", 3 - blurf], tan(n*%pi)], [["pqr", 1 + %pi], sin(k*%pi)], [["zxy", 2*%pi], cos(m*%pi)]];
+
+[v, w];
+[v, 321];
+
+v2: 432;
+432;
+
+block ([L: []], for [[v1, v2], w] in bb2 do push ([v1, v2, w], L), sort (L));
+[["hgfedc", 3 - blurf, tan(n*%pi)], ["pqr", 1 + %pi, sin(k*%pi)], ["zxy", 2*%pi, cos(m*%pi)]];
+
+[v1,v2, w];
+[v1, 432, 321];
+
+/* three keys */
+
+(bb3[zxy, "blah", cos(a) + cos(b)]: tan(a + b),
+ bb3[hjk, "mumble", cos(y) - x]: cot(a - b),
+ bb3[uvw, "qwerty", foo(z) + q]: sec(2*b - a),
+ 0);
+0;
+
+arrays;
+[bb1, bb2, bb3];
+
+block ([L: []], for [w, v] in bb3 do push ([w, v], L), sort (L));
+[[[hjk, "mumble", cos(y) - x], cot(a - b)],
+ [[uvw, "qwerty", foo(z) + q], sec(2*b - a)],
+ [[zxy, "blah", cos(a) + cos(b)], tan(a + b)]];
+
+[w, v];
+[321, v];
+
+block ([L: []], for [[v1, v2, w], v] in bb3 do push ([v1, v2, w, v], L), sort (L));
+[[hjk, "mumble", cos(y) - x, cot(a - b)],
+ [uvw, "qwerty", foo(z) + q, sec(2*b - a)],
+ [zxy, "blah", cos(a) + cos(b), tan(a + b)]];
+
+
+[v1, v2, w, v];
+[v1, 432, 321, v];
+
+/* additional tests for MUNBIND */
+
+kill (all);
+done;
+
+(a: "foo", b: "bar", c: "baz", 0);
+0;
+
+(blurf (a, b, c, d, e, f) := (a + b + c)*(d + e + f),
+ blurf (1, 2, 3, 4, 5, 6));
+90;
+
+[a, b, c, d, e, f];
+["foo", "bar", "baz", d, e, f];
+
+(x1: 123,
+ mumble (a, b, [L]) := (a + b) * lsum (x1, x1, L),
+ mumble (7, 8, 9, 10, 11));
+450;
+
+[a, b, L, x1];
+["foo", "bar", L, 123];
+
+(harrumph (b, 'c, d) := b*c*d,
+ harrumph (111, x1, %pi));
+111*x1*%pi;
+
+[b, c, d];
+["bar", "baz", d];
+
+(blarg[x, b] := x^b,
+ blarg[1 - u, 1 - k]);
+(1 - u)^(1 - k);
+
+[b, x];
+["bar", x];
+
+(y: 999,
+ hurfgh[c](x, y) := (x + y)*c,
+ hurfgh[n](4, 2*w));
+n*(2*w + 4);
+
+[c, x, y];
+["baz", x, 999];
+
+block ([L: []], for b: 10 thru 20 do push (b, L), L);
+[20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10];
+
+[L, b];
+[L, "bar"];
+
+sum (b^2, b, 3, 5);
+50;
+
+b;
+"bar";
+
+product (c/2, c, 6, 8);
+42;
+
+c;
+"baz";
+
+'sum (b^2, b, 3, 5);
+'sum (b^2, b, 3, 5);
+
+b;
+"bar";
+
+'product (c/2, c, 6, 8);
+'product (c/2, c, 6, 8);
+
+c;
+"baz";
+
+block ([d, c, b, a: 111], b: 2, c: 3, a*b*c*d);
+666*d;
+
+[a, b, c, d];
+["foo", "bar", "baz", d];
+
+lambda ([c, f, g, b], (c + f)*(g + b))(x1, 1 - u, %e, %pi);
+(124 - u)*(%e + %pi);
+
+[b, c, f, g];
+["bar", "baz", f, g];
+
+lambda ([a,'b], a^b)(11, x1);
+11^x1;
+
+[a, b, x1];
+["foo", "bar", 123];
+
+lambda ([a,b,[c]], lsum(c1^2, c1, c)^(a^b))(%pi, %e, x1, y, u);
+(u^2 + 1013130)^(%pi^%e);
+
+[a, b, c, c1];
+["foo", "bar", "baz", c1];
-----------------------------------------------------------------------
hooks/post-receive
--
Maxima CAS
|
|
From: dauti <da...@us...> - 2025-11-30 22:06:54
|
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 7b6f5cde1a84c8b4a795fccc0e53c3bb74e32aba (commit)
from 431b5586128ebf6bd4fe289ec3c5e86627939641 (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 7b6f5cde1a84c8b4a795fccc0e53c3bb74e32aba
Author: Wolfgang Dautermann <da...@us...>
Date: Sun Nov 30 23:06:14 2025 +0100
Windows installer: Update SBCL.
diff --git a/crosscompile-windows/sbcl/CMakeLists.txt b/crosscompile-windows/sbcl/CMakeLists.txt
index 2672adc47..6407e5132 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.5.10")
- set(SBCL_MD5 "a2cab608e33ba0a28aa4898e6af3e7e4")
+ set(SBCLVERSION "2.5.11")
+ set(SBCL_MD5 "8227761b167a94813e21c978dcc8e0d1")
set(SBCL_INSTALLERNAME "sbcl-${SBCLVERSION}-x86-64-windows-binary.msi")
else()
set(SBCLVERSION "2.3.2")
-----------------------------------------------------------------------
Summary of changes:
crosscompile-windows/sbcl/CMakeLists.txt | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: dauti <da...@us...> - 2025-11-30 16:05:06
|
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 431b5586128ebf6bd4fe289ec3c5e86627939641 (commit)
from f047e6b62d3d97e4b3b3dd634d1c44c16ac66e43 (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 431b5586128ebf6bd4fe289ec3c5e86627939641
Author: Wolfgang Dautermann <da...@us...>
Date: Sun Nov 30 17:03:51 2025 +0100
Windows: Update TCL/TK to 9.0.3.
And remove an unknown ./configure option --disable-zipfs.
diff --git a/crosscompile-windows/tcltk/CMakeLists.txt b/crosscompile-windows/tcltk/CMakeLists.txt
index c1ffe9641..244e69f38 100644
--- a/crosscompile-windows/tcltk/CMakeLists.txt
+++ b/crosscompile-windows/tcltk/CMakeLists.txt
@@ -10,11 +10,11 @@
# If no further patches are needed, you should get a
# updated setup-file automatically.
-set(TCLVERSION "9.0.2")
-set(TKVERSION "9.0.2")
+set(TCLVERSION "9.0.3")
+set(TKVERSION "9.0.3")
-set(TCL_MD5 "5f5924db555be43ab3625dc16bf3f796")
-set(TK_MD5 "30b9e13f6dd016f672513ab03143224b")
+set(TCL_MD5 "820aeed1e4e1a89038d0302d2f839e84")
+set(TK_MD5 "72f9c4005eaaf3b9c994bda74324c28e")
set(TCL_URL "https://prdownloads.sourceforge.net/tcl/tcl${TCLVERSION}-src.tar.gz")
set(TK_URL "https://prdownloads.sourceforge.net/tcl/tk${TKVERSION}-src.tar.gz")
@@ -25,7 +25,7 @@ externalproject_add(tcl
URL "${TCL_URL}"
DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/downloads
URL_MD5 ${TCL_MD5}
- CONFIGURE_COMMAND ${CMAKE_BINARY_DIR}/tcltk/tcl-prefix/src/tcl/win/configure --build=${BUILDHOST} --host=${HOST} --disable-shared --disable-zipfs --prefix=${WINDOWS_DRIVELETTER}:/maxima-${MAXIMAVERSION}
+ CONFIGURE_COMMAND ${CMAKE_BINARY_DIR}/tcltk/tcl-prefix/src/tcl/win/configure --build=${BUILDHOST} --host=${HOST} --disable-shared --prefix=${WINDOWS_DRIVELETTER}:/maxima-${MAXIMAVERSION}
BUILD_COMMAND $(MAKE)
COMMAND $(MAKE) install
)
@@ -36,7 +36,7 @@ externalproject_add(tk
DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/downloads
URL_MD5 ${TK_MD5}
DEPENDS tcl
- CONFIGURE_COMMAND ${CMAKE_BINARY_DIR}/tcltk/tk-prefix/src/tk/win/configure --build=${BUILDHOST} --host=${HOST} --disable-shared --disable-zipfs --with-tcl=${CMAKE_BINARY_DIR}/tcltk/tcl-prefix/src/tcl-build/${WINDOWS_DRIVELETTER}:/maxima-${MAXIMAVERSION}/lib --prefix=${WINDOWS_DRIVELETTER}:/maxima-${MAXIMAVERSION}
+ CONFIGURE_COMMAND ${CMAKE_BINARY_DIR}/tcltk/tk-prefix/src/tk/win/configure --build=${BUILDHOST} --host=${HOST} --disable-shared --with-tcl=${CMAKE_BINARY_DIR}/tcltk/tcl-prefix/src/tcl-build/${WINDOWS_DRIVELETTER}:/maxima-${MAXIMAVERSION}/lib --prefix=${WINDOWS_DRIVELETTER}:/maxima-${MAXIMAVERSION}
BUILD_COMMAND $(MAKE)
COMMAND $(MAKE) install
)
-----------------------------------------------------------------------
Summary of changes:
crosscompile-windows/tcltk/CMakeLists.txt | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: dauti <da...@us...> - 2025-11-30 15:52: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, master has been updated
via f047e6b62d3d97e4b3b3dd634d1c44c16ac66e43 (commit)
from 405962febb9dec529a0e34e1946db47ba4db9fb7 (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 f047e6b62d3d97e4b3b3dd634d1c44c16ac66e43
Author: Wolfgang Dautermann <da...@us...>
Date: Sun Nov 30 16:52:18 2025 +0100
Remove SCL from README-lisps.md.
diff --git a/README-lisps.md b/README-lisps.md
index dfdf7eceb..29ee8b5ff 100644
--- a/README-lisps.md
+++ b/README-lisps.md
@@ -1,8 +1,8 @@
Notes on Lisp implementations for Maxima:
=========================================
-Clisp, CMUCL, Scieneer Common Lisp (SCL), GCL (ANSI-enabled only),
-ECL, ABCL and SBCL can compile and execute Maxima.
+Clisp, CMUCL, GCL (ANSI-enabled only), ECL, ABCL and SBCL
+can compile and execute Maxima.
Allegro Common Lisp (ACL) and CCL might also work, but have not
been fully tested.
@@ -77,19 +77,6 @@ There are CMUCL implementations only for Unix-like systems
(not MS Windows).
-Scieneer Common Lisp (SCL) <https://web.archive.org/web/20171014210404/http://www.scieneer.com/scl/>
-----------------------------------------------------------------------------------------------------
-
-Scieneer Common Lisp (SCL) is a fast option for Maxima for a
-range of Linux and Unix platforms. The SCL 1.2.8 release and later
-are supported. SCL offers a lower case, case sensitive, version which
-avoids the Maxima case inversion issues with symbol names. Tested
-front end options are: Maxima emacs mode available in the
-interfaces/emacs/ directory, the Emacs imaxima mode available from
-<https://sites.google.com/site/imaximaimath/>, and TeXmacs available from
-<https://www.texmacs.org>
-
-
GCL <https://www.gnu.org/software/gcl/>
---------------------------------------
-----------------------------------------------------------------------
Summary of changes:
README-lisps.md | 17 ++---------------
1 file changed, 2 insertions(+), 15 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: dauti <da...@us...> - 2025-11-30 15:48:08
|
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 405962febb9dec529a0e34e1946db47ba4db9fb7 (commit)
from c3ccccdfe4155e2dee307791ce50af2525750035 (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 405962febb9dec529a0e34e1946db47ba4db9fb7
Author: Wolfgang Dautermann <da...@us...>
Date: Sun Nov 30 16:44:03 2025 +0100
SBCL (not SCL) code was removed in commit 5e51fb89.
Already committed on the branch rtoy-remove-scl as
commit [6c6d82] - don't know why that change was not
included in the merge...
But that's SBCL - not SCL - related, that's sure.
diff --git a/configure.ac b/configure.ac
index 72e902142..abef6b000 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1429,6 +1429,14 @@ if test x"${cmucl}" = xtrue ; then
echo Use "--enable-cmucl-exec to build a standalone executable instead."
fi
fi
+if test x"${sbcl}" = xtrue ; then
+ echo "Compiling a maxima image using \"${SBCL_NAME}\""
+ if test x"${sbcl_exec}" = xtrue ; then
+ echo "sbcl executable image enabled for maxima."
+ else
+ echo Use "--enable-sbcl-exec to build a standalone executable instead."
+ fi
+fi
if test x"${gcl}" = xtrue ; then
echo "Compiling a maxima image using \"${GCL_NAME}\""
if test x"${gcl_alt_link}" = xtrue ; then
-----------------------------------------------------------------------
Summary of changes:
configure.ac | 8 ++++++++
1 file changed, 8 insertions(+)
hooks/post-receive
--
Maxima CAS
|
|
From: <ap...@us...> - 2025-11-29 18:43: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, dodier-iterate-over-hash-tables has been updated
via f15e78140817d544ca99187da4499ea87fb89f0f (commit)
from 89d7b7a46acdb7e1fcbfd52cffe422958aa826d7 (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 f15e78140817d544ca99187da4499ea87fb89f0f
Author: Robert Dodier <rob...@so...>
Date: Sat Nov 29 10:43:06 2025 -0800
Additional tests for iterating over hash tables; one loop variable, no destructuring.
diff --git a/tests/rtest6.mac b/tests/rtest6.mac
index 531dad995..4ca02d4bf 100644
--- a/tests/rtest6.mac
+++ b/tests/rtest6.mac
@@ -253,6 +253,18 @@ true;
a: 100;
100;
+block ([L: []], for a in aa1 do push ([a[2], a[1]], L), sort (L));
+[[111, ["foo"]], [222, ["bar"]], [333, ["baz"]], [444, ["quux"]]];
+
+a;
+100;
+
+block ([L: []], for b in aa1 do push ([b[2], b[1]], L), sort (L));
+[[111, ["foo"]], [222, ["bar"]], [333, ["baz"]], [444, ["quux"]]];
+
+b;
+b;
+
block ([L: []], for [a, b] in aa1 do push ([b, a], L), sort (L));
[[111, ["foo"]], [222, ["bar"]], [333, ["baz"]], [444, ["quux"]]];
@@ -273,6 +285,18 @@ block ([L: []], for [[a], b] in aa1 do push ([b, a], L), sort (L));
?hash\-table\-p (aa2);
true;
+block ([L: []], for a in aa2 do push ([a[2], a[1]], L), sort (L));
+[[%e, [jj, 543]], [%phi, [cc, 1099]], [%pi, [xx, 99]]];
+
+a;
+100;
+
+block ([L: []], for b in aa2 do push ([b[2], b[1]], L), sort (L));
+[[%e, [jj, 543]], [%phi, [cc, 1099]], [%pi, [xx, 99]]];
+
+b;
+b;
+
block ([L: []], for [a, b] in aa2 do push ([b, a], L), sort (L));
[[%e, [jj, 543]], [%phi, [cc, 1099]], [%pi, [xx, 99]]];
@@ -302,6 +326,14 @@ true;
[b, a];
[-2, 100];
+block ([L: []], for b in aa3 do push ([b[1], b[2]], L), sort (L));
+[[["fgh", 3*u*v, giraffe], rhino*elephant],
+ [["glorble", 7*x, emu], 6/cricket],
+ [["mno", "pqr", 1 - 2*u], bessel_j (2, 1 - sqrt(x))]];
+
+b;
+-2;
+
block ([L: []], for [b, a] in aa3 do push ([b, a], L), sort (L));
[[["fgh", 3*u*v, giraffe], rhino*elephant],
[["glorble", 7*x, emu], 6/cricket],
@@ -340,6 +372,12 @@ true;
(f: 199, g: 200);
200;
+block ([L: []], for g in hh1 do push ([g[2], g[1]], L), sort (L));
+[[cos(w), [3 - y]], [tan(x), [1/(1 + z)]], [sin(z), [1 + x]]];
+
+g;
+200;
+
block ([L: []], for [f, g] in hh1 do push ([g, f], L), sort (L));
[[cos(w), [3 - y]], [tan(x), [1/(1 + z)]], [sin(z), [1 + x]]];
@@ -366,6 +404,14 @@ true;
0);
0;
+block ([L: []], for y in hh2 do push ([y[1], y[2]], L), sort (L));
+[[[456, cos(w)], sin(u) - cos(v)],
+ [[678, "blurf"], 876 - mumble],
+ [[987, "sdf"], 777*zxy]];
+
+y;
+y;
+
block ([L: []], for [x, y] in hh2 do push ([x, y], L), sort (L));
[[[456, cos(w)], sin(u) - cos(v)],
[[678, "blurf"], 876 - mumble],
@@ -396,6 +442,14 @@ true;
0);
0;
+block ([L: []], for q in hh3 do push ([q[1], q[2]], L), sort (L));
+[[[asdfg, 1 - rewq, 2*treww], sin(poiur) - cos(kjghds)],
+ [[ewq, 2 - jdssaaq, 3*cxmmz], sqrt(ytre)],
+ [[hgf, fds, jhg], cos(trwq)]];
+
+q;
+q;
+
block ([L: []], for [p, q] in hh3 do push ([p, q], L), sort (L));
[[[asdfg, 1 - rewq, 2*treww], sin(poiur) - cos(kjghds)],
[[ewq, 2 - jdssaaq, 3*cxmmz], sqrt(ytre)],
@@ -431,6 +485,12 @@ false;
arrays;
[bb1];
+block ([L: []], for v in bb1 do push ([v[2], v[1]], L), sort (L));
+[[123, ["mumble"]], [234, ["blarf"]], [345, ["blarg"]], [999, ["blurf"]]];
+
+v;
+v;
+
block ([L: []], for [u, v] in bb1 do push ([v, u], L), sort (L));
[[123, ["mumble"]], [234, ["blarf"]], [345, ["blarg"]], [999, ["blurf"]]];
@@ -454,6 +514,12 @@ arrays;
w: 321;
321;
+block ([L: []], for w in bb2 do push ([w[1], w[2]], L), sort (L));
+[[["hgfedc", 3 - blurf], tan(n*%pi)], [["pqr", 1 + %pi], sin(k*%pi)], [["zxy", 2*%pi], cos(m*%pi)]];
+
+w;
+321;
+
block ([L: []], for [v, w] in bb2 do push ([v, w], L), sort (L));
[[["hgfedc", 3 - blurf], tan(n*%pi)], [["pqr", 1 + %pi], sin(k*%pi)], [["zxy", 2*%pi], cos(m*%pi)]];
@@ -480,6 +546,14 @@ block ([L: []], for [[v1, v2], w] in bb2 do push ([v1, v2, w], L), sort (L));
arrays;
[bb1, bb2, bb3];
+block ([L: []], for v in bb3 do push ([v[1], v[2]], L), sort (L));
+[[[hjk, "mumble", cos(y) - x], cot(a - b)],
+ [[uvw, "qwerty", foo(z) + q], sec(2*b - a)],
+ [[zxy, "blah", cos(a) + cos(b)], tan(a + b)]];
+
+v;
+v;
+
block ([L: []], for [w, v] in bb3 do push ([w, v], L), sort (L));
[[[hjk, "mumble", cos(y) - x], cot(a - b)],
[[uvw, "qwerty", foo(z) + q], sec(2*b - a)],
-----------------------------------------------------------------------
Summary of changes:
tests/rtest6.mac | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 74 insertions(+)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2025-11-29 15:12: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, master has been updated
via c3ccccdfe4155e2dee307791ce50af2525750035 (commit)
via 8fe0ee85530ed3cdebe33153da6428dd3f432182 (commit)
via 6c6d825bdf4fad8235ccc790b5e1e47f41109a75 (commit)
via 015e5cc9072906c6f3133aaeee860ae0bbc3b503 (commit)
via ea4518bc2b5a01fc8c876bde2313cdee425035d6 (commit)
from d931b3374b5d60ebfaaaafda050e042a571c881c (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 c3ccccdfe4155e2dee307791ce50af2525750035
Merge: d931b3374 8fe0ee855
Author: Raymond Toy <toy...@gm...>
Date: Sat Nov 29 07:12:04 2025 -0800
Merge branch 'rtoy-remove-scl'
Removed scl support from Makefiles
-----------------------------------------------------------------------
Summary of changes:
src/Makefile.am | 39 ---------------------------------------
tests/Makefile.am | 9 ---------
2 files changed, 48 deletions(-)
hooks/post-receive
--
Maxima CAS
|