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
(10) |
|
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
|
|
From: rtoy <rt...@us...> - 2025-11-29 15:08:28
|
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 72cb52f47d84cfa8a9c890868e7e77f8a9b6c67f (commit)
via 81b23f2191a6764016610ac93dbd74edba0045d1 (commit)
via c92b19a8a86c7fb1f2c7898647da045421a47083 (commit)
via d931b3374b5d60ebfaaaafda050e042a571c881c (commit)
via 5e51fb893730956af2d7664bfe4950b0c0d7e0e6 (commit)
via 9987caa266f49eb1c2af201880c5d8a5214cf961 (commit)
via 53ae7d628a859fe44f4df908245a270f502c1f97 (commit)
via 1ecb9bcc5643f302b56e5cb87de65245eefee3c7 (commit)
via 4bfce99888373c3a98f28d070b7e03136d446877 (commit)
via a4546c9094c8d35c9d59e5374285652aec63293d (commit)
via 81712b7ec36931da2fdfc1c663fb3bffee1f2fc3 (commit)
via c380557ab485e0d5fc5b4c775216081f686214df (commit)
via bb404ea5eeb2a3bae0d3cea46708d36992124b09 (commit)
via 4e3369868f0e9eab00d57fb011f9c7824a93927c (commit)
via 6e49a965367ebb5410dcfa195147d433e92d0012 (commit)
via 5c0df12aadf24e0ed8bf0a9dcaf654a295fea9bf (commit)
via ac7f321aa11bfc2eb0aa98f1f9ebdd1468fc5028 (commit)
via 71ff3c56185e723a9d0bacfecdb6f96b732d99f2 (commit)
via d2edf1daed08af4ea45ddd7d1ae79604a7e15d28 (commit)
via 7b0ca10415d19903d8e65e88f3293a1ddf38f0bc (commit)
via 7f57f45cce15f7fbf3119227a6025845c110ba99 (commit)
from 6be27cc3d78d7b20357bd426a5cb73d6a4664c7f (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 72cb52f47d84cfa8a9c890868e7e77f8a9b6c67f
Author: Raymond Toy <toy...@gm...>
Date: Sat Nov 29 07:07:42 2025 -0800
Add pygments.custom.css
This is the pgyments stuff that was in manual.css.
diff --git a/doc/info/pygments.custom.css b/doc/info/pygments.custom.css
new file mode 100644
index 000000000..077c3ffbd
--- /dev/null
+++ b/doc/info/pygments.custom.css
@@ -0,0 +1,32 @@
+/*
+ * CSS customizations for pygment highlighting
+ */
+
+/*
+ * Pygments uses a line height of 125%, which seems too small compared
+ * to what we used to do.
+ */
+div.highlight pre {
+ line-height: normal !important;
+}
+
+/*
+ * For pygments, make the background color of the highlighted code the
+ * same as the example background color. Without this, it looks funny.
+ */
+
+div.highlight {
+ background-color: var(--example-background-color) !important;
+}
+
+.example.user-maxima {
+ overflow-x: auto
+}
+
+.highlight.pre {
+ /*
+ * Lines for highlighted examples are too close by default with
+ * pygments. Make it larger.
+ */
+ line-height: normal !important;
+}
commit 81b23f2191a6764016610ac93dbd74edba0045d1
Author: Raymond Toy <toy...@gm...>
Date: Sat Nov 29 07:04:52 2025 -0800
Move pygments css from manual.css to another file
To simplify manual.css a bit, move the customatizations for pygments
to another css file (pygments.custom.css) that's loaded only if
pygments is specified. This file is included by texi2html.init.in.
Configure is updated to insert the new file into texi2html2.init.in
diff --git a/configure.ac b/configure.ac
index a72ed3276..8b8a68af8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -928,6 +928,9 @@ EOF
type="text/css"
href="pygments.dark.css"
media="(prefers-color-scheme: dark)">
+<link rel="stylesheet"
+ type="text/css"
+ href="pygments.custom.css">
EOF
)"
fi
diff --git a/doc/info/manual.css b/doc/info/manual.css
index ab87f4411..72cec2427 100644
--- a/doc/info/manual.css
+++ b/doc/info/manual.css
@@ -135,35 +135,3 @@ dd { margin-left: 0.5em }
dd { margin-left: 1.5em }
}
-/*
- * CSS customizations for pygment highlighting
- */
-
-/*
- * Pygments uses a line height of 125%, which seems too small compared
- * to what we used to do.
- */
-div.highlight pre {
- line-height: normal !important;
-}
-
-/*
- * For pygments, make the background color of the highlighted code the
- * same as the example background color. Without this, it looks funny.
- */
-
-div.highlight {
- background-color: var(--example-background-color) !important;
-}
-
-.example.user-maxima {
- overflow-x: auto
-}
-
-.highlight.pre {
- /*
- * Lines for highlighted examples are too close by default with
- * pygments. Make it larger.
- */
- line-height: normal !important;
-}
commit c92b19a8a86c7fb1f2c7898647da045421a47083
Merge: 6be27cc3d d931b3374
Author: Raymond Toy <toy...@gm...>
Date: Fri Nov 28 13:49:53 2025 -0800
Merge branch 'master' into rtoy-highlightjs-example-maxima-blocks-texi-dev
diff --cc doc/info/manual.css
index c65a29667,98ffcfbb4..ab87f4411
--- a/doc/info/manual.css
+++ b/doc/info/manual.css
@@@ -101,14 -118,14 +118,6 @@@ div.header, div.nav-panel
padding: 3px 10px;
}
--/*
-- * Pygments uses a line height of 125%, which seems too small compared
-- * to what we used to do.
-- */
--div.highlight pre {
-- line-height: normal !important;
--}
--
/* Reduce the indentation of lists and descriptions */
ul,ol { padding-left: 1em }
dd { margin-left: 0.5em }
@@@ -125,35 -142,20 +134,28 @@@
ul,ol { padding-left: 2em }
dd { margin-left: 1.5em }
}
- @media (prefers-color-scheme: dark) {
- body {
- background: #444;
- color: #eee
- }
- a:link {
- color: #9df;
- }
- a:visited {color: #9fd }
- a:hover, span.button:hover {
- background-color: #ddd;
- color: #55f;
- }
- div.header, div.nav-panel {
- background-color: #555;
- }
- pre.example, pre.example-preformatted {
- border: 1px solid black;
- color: black;
- background-color: var(--example-background-color);
- }
- div.highlight {
- background-color: var(--example-background-color) !important;
- }
- div.categorybox { background-color: #544 }
- div.textbox, div.titlebox, div.synopsisbox { color: black;}
+
+ /*
+ * CSS customizations for pygment highlighting
+ */
+
++/*
++ * Pygments uses a line height of 125%, which seems too small compared
++ * to what we used to do.
++ */
++div.highlight pre {
++ line-height: normal !important;
++}
++
+ /*
+ * For pygments, make the background color of the highlighted code the
+ * same as the example background color. Without this, it looks funny.
+ */
+
+ div.highlight {
+ background-color: var(--example-background-color) !important;
}
- /* CSS for pygment highlighting */
.example.user-maxima {
overflow-x: auto
}
-----------------------------------------------------------------------
Summary of changes:
configure.ac | 108 +-----------------
doc/info/Bugs.texi | 6 +-
doc/info/Input.texi | 4 +-
doc/info/draw.texi | 2 +
doc/info/manual.css | 125 ++++++++-------------
doc/info/pygments.custom.css | 32 ++++++
maxima-local.in | 15 +--
.../gentran/test/compare_var_translations.mac | 81 +++++++++++++
share/contrib/gentran/test/foo-fortran.template | 20 ++++
share/contrib/gentran/test/foo-ratfor.template | 15 +++
share/draw/gnuplot.lisp | 26 ++++-
share/draw/grcommon.lisp | 3 +-
src/command-line.lisp | 3 -
src/globals.lisp | 3 +-
src/init-cl.lisp | 61 ++++++----
src/maxima-build.lisp | 3 +-
src/mload.lisp | 16 ++-
17 files changed, 292 insertions(+), 231 deletions(-)
create mode 100644 doc/info/pygments.custom.css
create mode 100644 share/contrib/gentran/test/compare_var_translations.mac
create mode 100644 share/contrib/gentran/test/foo-fortran.template
create mode 100644 share/contrib/gentran/test/foo-ratfor.template
hooks/post-receive
--
Maxima CAS
|
|
From: <ap...@us...> - 2025-11-29 07:44:47
|
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 created
at 89d7b7a46acdb7e1fcbfd52cffe422958aa826d7 (commit)
- Log -----------------------------------------------------------------
commit 89d7b7a46acdb7e1fcbfd52cffe422958aa826d7
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: rtoy <rt...@us...> - 2025-11-28 21:44:50
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, master has been updated
via d931b3374b5d60ebfaaaafda050e042a571c881c (commit)
via 5e51fb893730956af2d7664bfe4950b0c0d7e0e6 (commit)
via 9987caa266f49eb1c2af201880c5d8a5214cf961 (commit)
via 53ae7d628a859fe44f4df908245a270f502c1f97 (commit)
via 1ecb9bcc5643f302b56e5cb87de65245eefee3c7 (commit)
via 4bfce99888373c3a98f28d070b7e03136d446877 (commit)
from a4546c9094c8d35c9d59e5374285652aec63293d (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 d931b3374b5d60ebfaaaafda050e042a571c881c
Author: Raymond Toy <toy...@gm...>
Date: Tue Nov 25 07:27:46 2025 -0800
Remove SCL conditionals
Just removed some of the simpler cases with SCL conditionals. There
are many, many more.
diff --git a/src/command-line.lisp b/src/command-line.lisp
index 16eb423fb..9c7413dff 100644
--- a/src/command-line.lisp
+++ b/src/command-line.lisp
@@ -166,9 +166,6 @@
ext::*command-line-application-arguments*
(rest ext:*command-line-strings*))
- #+scl
- (rest ext:*command-line-strings*)
-
#+sbcl
(rest sb-ext:*posix-argv*)
diff --git a/src/globals.lisp b/src/globals.lisp
index 322961fdb..76644e4d4 100644
--- a/src/globals.lisp
+++ b/src/globals.lisp
@@ -1692,7 +1692,6 @@
(defvar *maxima-lispname*
#+clisp "clisp"
#+cmu "cmucl"
- #+scl "scl"
#+sbcl "sbcl"
#+gcl "gcl"
#+allegro "acl"
@@ -1700,7 +1699,7 @@
#+abcl "abcl"
#+lispworks "lispworks"
#+ecl "ecl"
- #-(or clisp cmu scl sbcl gcl allegro openmcl abcl lispworks ecl) "unknownlisp")
+ #-(or clisp cmu sbcl gcl allegro openmcl abcl lispworks ecl) "unknownlisp")
;;; Locations of various types of files. These variables are discussed
;;; in more detail in the file doc/implementation/dir_vars.txt. Since
diff --git a/src/maxima-build.lisp b/src/maxima-build.lisp
index 817f2dcec..3376886ad 100644
--- a/src/maxima-build.lisp
+++ b/src/maxima-build.lisp
@@ -23,11 +23,10 @@
#+sbcl (sb-ext:save-lisp-and-die "binary-sbcl/maxima.core" :toplevel (symbol-function 'cl-user::run))
#+gcl (si:save-system "binary-gcl/maxima")
#+cmu (extensions:save-lisp "binary-cmucl/maxima.core" :init-function 'cl-user::run)
- #+scl (extensions:save-lisp "binary-scl/maxima.core" :init-function 'cl-user::run)
#+allegro (excl:dumplisp :name "binary-acl/maxima.dxl")
#+lispworks (hcl:save-image "binary-lispworks/maxima" :restart-function 'cl-user::run)
#+(and openmcl (not 64-bit-target)) (ccl:save-application "binary-openmcl/maxima" :toplevel-function 'cl-user::run)
#+(and openmcl 64-bit-target) (ccl:save-application "binary-ccl64/maxima" :toplevel-function 'cl-user::run)
- #-(or clisp sbcl gcl cmu scl allegro lispworks ccl)
+ #-(or clisp sbcl gcl cmu allegro lispworks ccl)
(format t "Sorry, I don't know how to dump an image on this Lisp"))
commit 5e51fb893730956af2d7664bfe4950b0c0d7e0e6
Author: Raymond Toy <toy...@gm...>
Date: Tue Nov 25 07:21:02 2025 -0800
Remove support for scl in configure.ac
Scl has not been available for a long time now. Remove support for
scl from configure.ac.
diff --git a/configure.ac b/configure.ac
index 310fb7070..72e902142 100644
--- a/configure.ac
+++ b/configure.ac
@@ -260,58 +260,6 @@ if test x"${cmucl}" = xtrue ; then
fi
fi
-dnl n.b. scl_default_name is hardcoded in "with" message
-scl_default_name=scl
-SCL_RUNTIME=lisp
-AC_ARG_ENABLE(scl,
- [AS_HELP_STRING([--enable-scl],
- [Use SCL])],
- [case "${enableval}" in
- yes) scl=true
- lisps_enabled="${lisps_enabled} scl"
- explicit_lisp=true ;;
- no) scl=false ;;
- *) AC_MSG_ERROR(bad value ${enableval} for --enable-scl) ;;
- esac
- explicit_lisp=true],
- [scl=false])
-AC_ARG_WITH(scl,
- [AS_HELP_STRING([--with-scl=<prog>],
- [Use SCL executable <prog> (default scl)])],
- [scl=true
- lisps_enabled="${lisps_enabled} scl"
- explicit_lisp=true
- if test "$withval" = "yes"; then
- SCL_NAME="${scl_default_name}"
- else
- SCL_NAME="$withval"
- fi],
- [SCL_NAME=${scl_default_name}])
-AC_ARG_WITH(scl-runtime,
- [AS_HELP_STRING([--with-scl-runtime=<path>],
- [Use SCL runtime <path> (default
- file://library/../bin/lisp)])],
- [scl=true
- lisps_enabled="${lisps_enabled} scl"
- SCL_RUNTIME_PATH="$withval"
- SCL_RUNTIME=`basename ${SCL_RUNTIME_PATH}`],
- [])
-if test x"${scl}" = xtrue ; then
- if test `echo "$SCL_NAME" | sed 's/\(.\).*/\1/'` = "/" ; then
- if test -x "$SCL_NAME" ; then
- scl_found=true
- else
- scl_found=false
- fi
- else
- AC_CHECK_PROG(scl_found,$SCL_NAME,true,false)
- fi
- AC_CHECK_PROG(scl_found,$SCL_NAME,true,false)
- if test x"${scl_found}" = xfalse ; then
- AC_MSG_WARN(scl executable ${SCL_NAME} not found in PATH)
- fi
-fi
-
dnl n.b. sbcl_default_name is hardcoded in "with" message
sbcl_default_name=sbcl
AC_ARG_ENABLE(sbcl,
@@ -1027,7 +975,6 @@ if test x"${explicit_lisp}" = xfalse ; then
AC_CHECK_PROG(clisp_found,${clisp_default_name},true,false)
AC_CHECK_PROG(gcl_found,${gcl_default_name},true,false)
AC_CHECK_PROG(cmucl_found,$CMUCL_NAME,true,false)
- AC_CHECK_PROG(scl_found,$SCL_NAME,true,false)
AC_CHECK_PROG(sbcl_found,$SBCL_NAME,true,false)
AC_CHECK_PROG(acl_found,$ACL_NAME,true,false)
AC_CHECK_PROG(openmcl_found,$OPENMCL_NAME,true,false)
@@ -1046,10 +993,6 @@ if test x"${explicit_lisp}" = xfalse ; then
cmucl=true
lisps_enabled="${lisps_enabled} cmucl"
fi
- if test x"${scl_found}" = xtrue ; then
- scl=true
- lisps_enabled="${lisps_enabled} scl"
- fi
if test x"${sbcl_found}" = xtrue ; then
sbcl=true
lisps_enabled="${lisps_enabled} sbcl"
@@ -1063,7 +1006,7 @@ if test x"${explicit_lisp}" = xfalse ; then
lisps_enabled="${lisps_enabled} ecl"
fi
if test x"${lisps_enabled}" = x; then
- AC_MSG_ERROR(No lisp implementation specified and none of the default executables [${clisp_default_name}(clisp),${gcl_default_name}(GCL),${cmucl_default_name}(CMUCL),${scl_default_name}(SCL),${sbcl_default_name}(SBCL),${acl_default_name}(ACL),${openmcl_default_name}(OpenMCL),${ecl_default_name}(ECL)] were found in PATH)
+ AC_MSG_ERROR(No lisp implementation specified and none of the default executables [${clisp_default_name}(clisp),${gcl_default_name}(GCL),${cmucl_default_name}(CMUCL),${sbcl_default_name}(SBCL),${acl_default_name}(ACL),${openmcl_default_name}(OpenMCL),${ecl_default_name}(ECL)] were found in PATH)
fi
fi
@@ -1073,7 +1016,6 @@ AM_CONDITIONAL(CLISP_EXEC, test x$clisp_exec = xtrue)
AM_CONDITIONAL(GCL, test x$gcl = xtrue)
AM_CONDITIONAL(CMUCL, test x$cmucl = xtrue)
AM_CONDITIONAL(CMUCL_EXEC, test x${cmucl_exec} = xtrue)
-AM_CONDITIONAL(SCL, test x$scl = xtrue)
AM_CONDITIONAL(SBCL, test x$sbcl = xtrue)
AM_CONDITIONAL(SBCL_EXEC, test x$sbcl_exec = xtrue)
AM_CONDITIONAL(ACL, test x$acl = xtrue)
@@ -1137,30 +1079,6 @@ flag.)
fi
fi
-if test x"${scl}" = xtrue; then
- if test x"${SCL_RUNTIME_PATH}" = x"" ; then
- SCL_RUNTIME_PATH=`${SCL_NAME} -noinit -nositeinit -quiet -batch -eval '(progn (enumerate-pathname-translations (pathname "file://library/../bin/lisp") (when (probe-file pathname) (format t "~A~%" (unix-namestring pathname)))) (quit))'`
- fi
- if test -x "${SCL_RUNTIME_PATH}" ; then
- echo "scl runtime is \"${SCL_RUNTIME_PATH}\""
- else
-dnl last chance: find SCL_NAME in path. Use it if it doesn't appear to
-dnl be a shell script.
- scl_path=`type -p "${SCL_NAME}"`
- if test x"`grep -c '#!.*bin.*sh.*' ${scl_path}`" = x"0" ; then
- SCL_RUNTIME_PATH="${scl_path}"
- else
- AC_MSG_ERROR([Unable to determine SCL runtime path.
-The best guess for SCL runtime, "${SCL_RUNTIME_PATH}", is not
-an executable. Use the argument
- --with-scl-runtime=<path>
-to set the actual SCL executable. If the SCL lisp command is a shell
-script the SCL executable is the program exec'd by that shell script.])
- fi
- fi
- SCL_RUNTIME=`basename ${SCL_RUNTIME_PATH}`
-fi
-
if test x"${gcl}" = xtrue; then
AC_MSG_CHECKING([if gcl version >= 2.6.14])
dnl Check gcl version
@@ -1227,13 +1145,6 @@ AC_ARG_WITH(default-lisp,
AC_MSG_ERROR(cmucl not enabled)
fi
;;
- scl)
- if test x"${scl}" = xtrue ; then
- DEFAULTLISP=scl
- else
- AC_MSG_ERROR(scl not enabled)
- fi
- ;;
sbcl)
if test x"${sbcl}" = xtrue ; then
DEFAULTLISP=sbcl
@@ -1291,8 +1202,6 @@ AC_ARG_WITH(default-lisp,
DEFAULTLISP=sbcl
elif test x"${cmucl}" = xtrue ; then
DEFAULTLISP=cmucl
- elif test x"${scl}" = xtrue ; then
- DEFAULTLISP=scl
elif test x"${clisp}" = xtrue ; then
DEFAULTLISP=clisp
elif test x"${gcl}" = xtrue ; then
@@ -1520,18 +1429,6 @@ if test x"${cmucl}" = xtrue ; then
echo Use "--enable-cmucl-exec to build a standalone executable instead."
fi
fi
-if test x"${scl}" = xtrue ; then
- echo "SCL enabled, using \"${SCL_NAME}\""
- echo "SCL runtime is \"${SCL_RUNTIME_PATH}\""
-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
commit 9987caa266f49eb1c2af201880c5d8a5214cf961
Author: Raymond Toy <toy...@gm...>
Date: Wed Nov 26 07:03:19 2025 -0800
Move pygment CSS stuff together
diff --git a/doc/info/manual.css b/doc/info/manual.css
index 016c5978f..98ffcfbb4 100644
--- a/doc/info/manual.css
+++ b/doc/info/manual.css
@@ -93,15 +93,6 @@ pre.example, pre.example-preformatted {
overflow: auto;
}
-/*
- * For pygments, make the background color of the highlighted code the
- * same as the example background color. Without this, it looks funny.
- */
-
-div.highlight {
- background-color: var(--example-background-color) !important;
-}
-
div.spacerbox { border: none; padding: 2em 0 }
div.image { margin: 0; padding: 1em; text-align: center }
div.categorybox {
@@ -152,14 +143,27 @@ dd { margin-left: 0.5em }
dd { margin-left: 1.5em }
}
-/* CSS for pygment highlighting */
+/*
+ * CSS customizations for pygment highlighting
+ */
+
+/*
+ * For pygments, make the background color of the highlighted code the
+ * same as the example background color. Without this, it looks funny.
+ */
+
+div.highlight {
+ background-color: var(--example-background-color) !important;
+}
+
.example.user-maxima {
overflow-x: auto
}
.highlight.pre {
- /* Lines for highlighted examples are too close by default with
- * pygments. Make it larger.
+ /*
+ * Lines for highlighted examples are too close by default with
+ * pygments. Make it larger.
*/
line-height: normal !important;
}
commit 53ae7d628a859fe44f4df908245a270f502c1f97
Author: Raymond Toy <toy...@gm...>
Date: Wed Nov 26 06:58:54 2025 -0800
Remove @media dark mode CSS that's not used anymore
This has all been replaced with variables for dark-mode colors, so
this @media isn't used. Remove it.
Also add a comment about div.textbox and friends apparently not being
used anywhere. We comment them out for now, but they should
eventually be removed if not used.
diff --git a/doc/info/manual.css b/doc/info/manual.css
index 22b096742..016c5978f 100644
--- a/doc/info/manual.css
+++ b/doc/info/manual.css
@@ -61,6 +61,11 @@ a:hover, span.button:hover {
background-color: var(--hover-background-color);
color: var(--hover-color);
}
+/*
+ * What are these used for? I (rtoy) can't find these anywhere.
+ * Commenting these out for now, but they should be removed if they're
+ * not really used anywhere.
+ */
/*
div.textbox {
border: solid;
@@ -78,6 +83,7 @@ div.synopsisbox {
background: var(--div-synopsisbox-background-color);
}
*/
+
pre.example, pre.example-preformatted {
border: var(--pre-example-border);
color: var(--text-color);
@@ -145,38 +151,6 @@ dd { margin-left: 0.5em }
ul,ol { padding-left: 2em }
dd { margin-left: 1.5em }
}
-@media (prefers-color-scheme: dark) {
-/*
- body {
- background: #444;
- color: #eee
- }
- a:link {
- color: #9df;
- }
- a:visited {color: #9fd }
- a:hover, span.button:hover {
- background-color: #ddd;
- color: #55f;
- }
- div.header, div.nav-panel {
- background-color: #555;
- }
- pre.example, pre.example-preformatted {
- border: 1px solid black;
- color: black;
- background-color: var(--example-background-color);
- }
- div.highlight {
- background-color: var(--example-background-color) !important;
- }
- div.categorybox { background-color: #544 }
-*/
-/*
- div.textbox, div.titlebox, div.synopsisbox {
- color: var(--div-titlebox-background-color);}
-*/
-}
/* CSS for pygment highlighting */
.example.user-maxima {
commit 1ecb9bcc5643f302b56e5cb87de65245eefee3c7
Author: Raymond Toy <toy...@gm...>
Date: Mon Nov 24 13:46:31 2025 -0800
Comment out CSS for textbox, titlebox, and synposisbox
These don't seem to be used anywhere so comment them out.
Also do some minor cleanups and add some comments.
diff --git a/doc/info/manual.css b/doc/info/manual.css
index 2947b0145..22b096742 100644
--- a/doc/info/manual.css
+++ b/doc/info/manual.css
@@ -1,7 +1,7 @@
-/* Define variable for background color for examples */
+/* Define colors for light and dark mode */
:root {
/* Default light mode colors */
- --background-color: #ffffff; /* White background */
+ --background-color: white;
--text-color: black;
--example-background-color: rgb(238,238,255);
--link-color: #00f;
@@ -61,6 +61,7 @@ a:hover, span.button:hover {
background-color: var(--hover-background-color);
color: var(--hover-color);
}
+/*
div.textbox {
border: solid;
border-width: thin;
@@ -76,6 +77,7 @@ div.synopsisbox {
padding-top: 1em 2em;
background: var(--div-synopsisbox-background-color);
}
+*/
pre.example, pre.example-preformatted {
border: var(--pre-example-border);
color: var(--text-color);
commit 4bfce99888373c3a98f28d070b7e03136d446877
Author: Raymond Toy <toy...@gm...>
Date: Mon Nov 24 13:15:11 2025 -0800
Use CSS variables to set the colors for light and dark mode
Instead of having a completely separate @media section for dark mode,
use variables to define the colors for light and dark modes.
This makes the CSS file smaller and hopefully, it will be easier set
colors for the different modes since all the info is in basically one
place instead of duplicating all the different elements into a
separate @media for dark mode.
diff --git a/doc/info/manual.css b/doc/info/manual.css
index 674e23ae7..2947b0145 100644
--- a/doc/info/manual.css
+++ b/doc/info/manual.css
@@ -1,10 +1,36 @@
/* Define variable for background color for examples */
:root {
+ /* Default light mode colors */
+ --background-color: #ffffff; /* White background */
+ --text-color: black;
--example-background-color: rgb(238,238,255);
+ --link-color: #00f;
+ --link-visited-color: #a0a;
+ --hover-background-color: #555753;
+ --hover-color: #cdf;
+ --nav-panel-background-color: #CDCCDD;
+ --div-titlebox-background-color: rgb(200,255,255);
+ --div-synopsisbox-backgraound-color: rgb(255,220,255);
+ --pre-example-border: 1px solid rgb(180,180,180);
+ --div-categorybox-border: 1px solid gray;
+ --div-categorybox-background-color: #fdf6e3;
}
@media (prefers-color-scheme: dark) {
:root {
+ /* Dark Mode Overrides */
+ --background-color: #444;
+ --text-color: #eee;
--example-background-color: #aab;
+ --link-color: #9df;
+ --link-visited-color: #9fd;
+ --hover-background-color: #ddd;
+ --hover-color: #55f;
+ --nav-panel-background-color: #555;
+ --div-titlebox-background-color: black;
+ --div-synopsisbox-backgraound-color: black;
+ --pre-example-border: 1px solid black;
+ --div-categorybox-border: 1px solid gray;
+ --div-categorybox-background-color: #544;
}
}
@@ -17,8 +43,8 @@ div.example {
/* end of overrides */
body {
- color: black;
- background: white;
+ color: var(--text-color);
+ background: var(--background-color);
margin-left: 5px;
margin-right: 5px;
font-family: Arial, Verdana, Helvetica, sans-serif
@@ -28,12 +54,12 @@ h2 { font-size: 125% }
h3 { font-size: 110% }
a:link {
text-decoration: none;
- color: #00f
+ color: var(--link-color);
}
-a:visited {color: #a0a }
+a:visited {color: var(--link-visited-color) }
a:hover, span.button:hover {
- background-color: #555753;
- color: #cdf;
+ background-color: var(--hover-background-color);
+ color: var(--hover-color);
}
div.textbox {
border: solid;
@@ -43,15 +69,16 @@ div.textbox {
div.titlebox {
border: none;
padding-top: 1em 2em;
- background: rgb(200,255,255)
+ background: var(--div-titlebox-background-color);
}
div.synopsisbox {
border: none;
padding-top: 1em 2em;
- background: rgb(255,220,255)
+ background: var(--div-synopsisbox-background-color);
}
pre.example, pre.example-preformatted {
- border: 1px solid rgb(180,180,180);
+ border: var(--pre-example-border);
+ color: var(--text-color);
padding: 5px;
background-color: var(--example-background-color);
/* Add scrollbar for examples for narrow windows */
@@ -70,9 +97,9 @@ div.highlight {
div.spacerbox { border: none; padding: 2em 0 }
div.image { margin: 0; padding: 1em; text-align: center }
div.categorybox {
- border: 1px solid gray;
+ border: var(--div-categorybox-border);
padding: 1em;
- background: #fdf6e3
+ background: var(--div-categorybox-background-color);
}
img {
max-width:80%;
@@ -88,7 +115,7 @@ tt, code { font-family: "Courier New", "DejaVu Sans Mono", monospace }
* Texinfo 7.1 and later uses div.nav-panel. 6.8 uses div.header.
*/
div.header, div.nav-panel {
- background-color: #CDCCDD;
+ background-color: var(--nav-panel-background-color);
padding: 3px 10px;
}
@@ -117,6 +144,7 @@ dd { margin-left: 0.5em }
dd { margin-left: 1.5em }
}
@media (prefers-color-scheme: dark) {
+/*
body {
background: #444;
color: #eee
@@ -141,7 +169,11 @@ dd { margin-left: 0.5em }
background-color: var(--example-background-color) !important;
}
div.categorybox { background-color: #544 }
- div.textbox, div.titlebox, div.synopsisbox { color: black;}
+*/
+/*
+ div.textbox, div.titlebox, div.synopsisbox {
+ color: var(--div-titlebox-background-color);}
+*/
}
/* CSS for pygment highlighting */
-----------------------------------------------------------------------
Summary of changes:
configure.ac | 105 +---------------------------------------------
doc/info/manual.css | 114 ++++++++++++++++++++++++++++----------------------
src/command-line.lisp | 3 --
src/globals.lisp | 3 +-
src/maxima-build.lisp | 3 +-
5 files changed, 66 insertions(+), 162 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2025-11-27 22:56:57
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, rtoy-manual-css-more-vars has been updated
via 1a50e6fa3d066e3952933c9558a0bae6e67c5586 (commit)
via c0d34bc2c6d906b84786284345b9c8717fa87d54 (commit)
via 015e5cc9072906c6f3133aaeee860ae0bbc3b503 (commit)
via ea4518bc2b5a01fc8c876bde2313cdee425035d6 (commit)
via c380557ab485e0d5fc5b4c775216081f686214df (commit)
via bb404ea5eeb2a3bae0d3cea46708d36992124b09 (commit)
from d9e825f93c06d0092373599bc7e9836b316f9af2 (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 1a50e6fa3d066e3952933c9558a0bae6e67c5586
Merge: d9e825f93 c0d34bc2c
Author: Raymond Toy <toy...@gm...>
Date: Thu Nov 27 14:56:35 2025 -0800
Merge branch 'master' into rtoy-manual-css-more-vars
commit c0d34bc2c6d906b84786284345b9c8717fa87d54
Merge: c380557ab 015e5cc90
Author: Raymond Toy <toy...@gm...>
Date: Wed Nov 26 06:55:17 2025 -0800
Merge branch 'rtoy-remove-scl'
This removes scl support from configure.ac and a few other places.
-----------------------------------------------------------------------
Summary of changes:
configure.ac | 105 +--------------------
doc/info/Bugs.texi | 6 +-
doc/info/Input.texi | 4 +-
.../gentran/test/compare_var_translations.mac | 81 ++++++++++++++++
share/contrib/gentran/test/foo-fortran.template | 20 ++++
share/contrib/gentran/test/foo-ratfor.template | 15 +++
src/command-line.lisp | 3 -
src/globals.lisp | 3 +-
src/maxima-build.lisp | 3 +-
9 files changed, 124 insertions(+), 116 deletions(-)
create mode 100644 share/contrib/gentran/test/compare_var_translations.mac
create mode 100644 share/contrib/gentran/test/foo-fortran.template
create mode 100644 share/contrib/gentran/test/foo-ratfor.template
hooks/post-receive
--
Maxima CAS
|
|
From: dauti <da...@us...> - 2025-11-27 20:35:50
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Maxima CAS".
The branch, rtoy-remove-scl has been updated
via 8fe0ee85530ed3cdebe33153da6428dd3f432182 (commit)
from 6c6d825bdf4fad8235ccc790b5e1e47f41109a75 (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 8fe0ee85530ed3cdebe33153da6428dd3f432182
Author: Wolfgang Dautermann <da...@us...>
Date: Thu Nov 27 21:34:58 2025 +0100
Remove SCL code from src/Makefile.am and tests/Makefile.am.
Now ./bootstrap works without errors.
diff --git a/src/Makefile.am b/src/Makefile.am
index 2e878b950..1d8920956 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -197,45 +197,6 @@ clean-cmucl:
rm -rf binary-cmucl
CLEAN_TARGETS += clean-cmucl
-## SCL #########################################################################
-if SCL
-
-scllibdir = $(verpkglibdir)/binary-scl
-
-EXECUTESCL = $(SCL_NAME) -noinit -batch
-BUILT_FILES += binary-scl/maxima.core
-scllib_DATA = binary-scl/maxima.core
-
-scl: binary-scl/maxima.core
-
-binary-scl/maxima.core:
- $(MAKE) bd
- (echo '$(QUIET) $(LOADDEFSYSTEM) $(DEFSYSTEMCOMPILE)' | $(EXECUTESCL)) && \
- (echo '$(LOADDEFSYSTEM) $(DEFSYSTEMLOAD) (ext:save-lisp "binary-scl/maxima.core")' | $(EXECUTESCL))
-
-## Just like with clisp, we install an extra copy of SCL. No, I don't
-## understand either. Also, I just read the SCL license agreement. Is
-## the user even allowed to do this?!
-WEIRD_INSTALL_TARGETS += install-scl-copy
-WEIRD_UNINSTALL_TARGETS += uninstall-scl-copy
-install-scl-copy:
- $(mkinstalldirs) $(DESTDIR)$(scllibdir)
- $(INSTALL_PROGRAM) @SCL_RUNTIME_PATH@ "$(DESTDIR)$(scllibdir)/@SCL_RUNTIME@"
-uninstall-scl-copy:
- rm -f "$(DESTDIR)$(scllibdir)/@SCL_RUNTIME@"
-
-scl-depends.mk: maxima.system Makefile *.lisp
- echo $(call MAKE_DEPENDS,"binary-scl/maxima.core",scl-depends.mk.tmp) | $(EXECUTESCL)
- sed -e "s#\\\\#/#g" < scl-depends.mk.tmp > scl-depends.mk
-
--include scl-depends.mk
-
-endif
-
-clean-scl:
- rm -rf binary-scl
-CLEAN_TARGETS += clean-scl
-
## ACL #########################################################################
if ACL
diff --git a/tests/Makefile.am b/tests/Makefile.am
index ebbeae3bd..df509f300 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -24,15 +24,6 @@ cmucl-test.sh: test.sh Makefile
chmod +x "$@"
endif
-if SCL
-TESTS += scl-test.sh
-CLEANFILES += scl-test.sh scl.log scl_share.log
-scl-test.sh: test.sh Makefile
- echo "#!/bin/sh" > $@
- echo "./test.sh scl" >> $@
- chmod +x "$@"
-endif
-
if SBCL
TESTS += sbcl-test.sh
CLEANFILES += sbcl-test.sh sbcl.log sbcl_share.log
-----------------------------------------------------------------------
Summary of changes:
src/Makefile.am | 39 ---------------------------------------
tests/Makefile.am | 9 ---------
2 files changed, 48 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: dauti <da...@us...> - 2025-11-27 20:30:46
|
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-scl has been updated
via 6c6d825bdf4fad8235ccc790b5e1e47f41109a75 (commit)
from 015e5cc9072906c6f3133aaeee860ae0bbc3b503 (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 6c6d825bdf4fad8235ccc790b5e1e47f41109a75
Author: Wolfgang Dautermann <da...@us...>
Date: Thu Nov 27 21:28:49 2025 +0100
SBCL (not SCL) code was removed in commit ea4518bc2.
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: l_butler <l_b...@us...> - 2025-11-27 18:34: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 a4546c9094c8d35c9d59e5374285652aec63293d (commit)
via 81712b7ec36931da2fdfc1c663fb3bffee1f2fc3 (commit)
from c380557ab485e0d5fc5b4c775216081f686214df (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 a4546c9094c8d35c9d59e5374285652aec63293d
Author: Atri Bhattacharya <bad...@op...>
Date: Thu Nov 27 12:27:25 2025 -0600
Draw: add support for standalone cairolatex pdf terminal.
Part 2 of 2.
Patch supplied by Atri Bhattacharya <bad...@op...>.
Includes update to documentation.
Ref: https://sourceforge.net/p/maxima/mailman/message/59265356
diff --git a/doc/info/draw.texi b/doc/info/draw.texi
index bdd888d17..0929c79dd 100644
--- a/doc/info/draw.texi
+++ b/doc/info/draw.texi
@@ -1129,6 +1129,7 @@ points in each direction. If they are not integers, they are rounded.
With terminals @code{eps}, @code{epslatex}, @code{epslatex_standalone},
@code{eps_color}, @code{multipage_eps}, @code{multipage_eps_color},
+@code{cairolatex_pdf}, @code{cairolatex_pdf_standalone},
@code{pdf}, @code{multipage_pdf}, @code{pdfcairo},
@code{multipage_pdfcairo}, @code{tikz}, and @code{tikz_standalone}, both
numbers represent hundredths of cm, which means that, by default,
@@ -2726,6 +2727,7 @@ Default value: @code{screen}
Selects the terminal to be used by Gnuplot; possible values are:
@code{screen} (default), @code{png}, @code{pngcairo}, @code{jpg}, @code{gif},
+@code{cairolatex_pdf}, @code{cairolatex_pdf_standalone},
@code{eps}, @code{eps_color}, @code{epslatex}, @code{epslatex_standalone},
@code{svg}, @code{canvas}, @code{dumb}, @code{dumb_file}, @code{pdf}, @code{pdfcairo},
@code{wxt}, @code{animated_gif}, @code{multipage_pdfcairo}, @code{multipage_pdf},
diff --git a/share/draw/gnuplot.lisp b/share/draw/gnuplot.lisp
index 831b5715c..f35129912 100644
--- a/share/draw/gnuplot.lisp
+++ b/share/draw/gnuplot.lisp
@@ -1,7 +1,7 @@
;;; COPYRIGHT NOTICE
;;;
;;; Copyright (C) 2007-2016 Mario Rodriguez Riotorto
-;;; Time-stamp: "2025-11-27 12:22:21 Leo Butler"
+;;; Time-stamp: "2025-11-27 12:27:02 Leo Butler"
;;;
;;; This program is free software; you can redistribute
;;; it and/or modify it under the terms of the
@@ -2857,7 +2857,7 @@
(setf plotcmd
(concatenate 'string
(unless (or *multiplot-is-active*
- (member (get-option '$terminal) '($eps $epslatex $epslatex_standalone $cairolatex_pdf)))
+ (member (get-option '$terminal) '($eps $epslatex $epslatex_standalone $cairolatex_pdf $cairolatex_pdf_standalone)))
(format nil "set obj 1 fc rgb '~a' fs solid 1.0 noborder ~%"
(get-option '$background_color)) )
(if (equal (get-option '$proportional_axes) '$none)
@@ -3344,6 +3344,11 @@
(/ (first (get-option '$dimensions)) 100.0)
(/ (second (get-option '$dimensions)) 100.0)
(get-option '$file_name)))
+ ($cairolatex_pdf_standalone (format cmdstorage "set terminal cairolatex pdf standalone ~a color size ~acm, ~acm~%set out '~a.tex'"
+ (write-font-type)
+ (/ (first (get-option '$dimensions)) 100.0)
+ (/ (second (get-option '$dimensions)) 100.0)
+ (get-option '$file_name)))
(($pdf $multipage_pdf) (format cmdstorage "set terminal pdf dashed enhanced ~a color size ~acm, ~acm~%set out '~a.pdf'"
(write-font-type)
(/ (first (get-option '$dimensions)) 100.0)
@@ -3488,7 +3493,7 @@
(format cmdstorage "~%set size ~a, ~a~%" size1 size2)
(format cmdstorage "set origin ~a, ~a~%" origin1 origin2)
(unless (or *multiplot-is-active*
- (member (get-option '$terminal) '($epslatex $epslatex_standalone $cairolatex_pdf)))
+ (member (get-option '$terminal) '($epslatex $epslatex_standalone $cairolatex_pdf $cairolatex_pdf_standalone)))
(format cmdstorage "set obj 1 rectangle behind from screen ~a,~a to screen ~a,~a~%"
origin1 origin2 (+ origin1 size1 ) (+ origin2 size2))) ))
(setf is1stobj t
@@ -3686,7 +3691,12 @@
(/ (first (get-option '$dimensions)) 100.0)
(/ (second (get-option '$dimensions)) 100.0)
(get-option '$file_name))))
- ($cairolatex_pdf (format str "set terminal cairolatex pdf ~a color colortext size ~acm, ~acm~%set out '~a.tex'"
+ ($cairolatex_pdf (format str "set terminal cairolatex pdf ~a color size ~acm, ~acm~%set out '~a.tex'"
+ (write-font-type)
+ (/ (first (get-option '$dimensions)) 100.0)
+ (/ (second (get-option '$dimensions)) 100.0)
+ (get-option '$file_name)))
+ ($cairolatex_pdf_standalone (format str "set terminal cairolatex pdf standalone ~a color size ~acm, ~acm~%set out '~a.tex'"
(write-font-type)
(/ (first (get-option '$dimensions)) 100.0)
(/ (second (get-option '$dimensions)) 100.0)
diff --git a/share/draw/grcommon.lisp b/share/draw/grcommon.lisp
index 85f6f7d43..934d4c6d6 100644
--- a/share/draw/grcommon.lisp
+++ b/share/draw/grcommon.lisp
@@ -984,7 +984,7 @@
$dumb $dumb_file $pdf $pdfcairo $wxt $animated_gif $windows
$multipage_pdfcairo $multipage_pdf $multipage_eps
$multipage_eps_color $aquaterm $tiff $vrml $obj $stl $pnm $ply
- $cairolatex_pdf)))
+ $cairolatex_pdf $cairolatex_pdf_standalone)))
(cond
((member val terms)
(when (and (eq val '$png) $draw_use_pngcairo)
commit 81712b7ec36931da2fdfc1c663fb3bffee1f2fc3
Author: Atri Bhattacharya <bad...@op...>
Date: Thu Nov 27 12:24:29 2025 -0600
Draw: Add support for cairolatex pdf terminal
Part 1 of 2.
Patch supplied via the mailing list by Atri Bhattacharya
<bad...@op...>.
Ref: https://sourceforge.net/p/maxima/mailman/message/59265356
diff --git a/share/draw/gnuplot.lisp b/share/draw/gnuplot.lisp
index de004eb6e..831b5715c 100644
--- a/share/draw/gnuplot.lisp
+++ b/share/draw/gnuplot.lisp
@@ -1,7 +1,7 @@
;;; COPYRIGHT NOTICE
;;;
;;; Copyright (C) 2007-2016 Mario Rodriguez Riotorto
-;;; Time-stamp: "2024-11-28 17:39:24 Leo Butler"
+;;; Time-stamp: "2025-11-27 12:22:21 Leo Butler"
;;;
;;; This program is free software; you can redistribute
;;; it and/or modify it under the terms of the
@@ -2857,7 +2857,7 @@
(setf plotcmd
(concatenate 'string
(unless (or *multiplot-is-active*
- (member (get-option '$terminal) '($eps $epslatex $epslatex_standalone)))
+ (member (get-option '$terminal) '($eps $epslatex $epslatex_standalone $cairolatex_pdf)))
(format nil "set obj 1 fc rgb '~a' fs solid 1.0 noborder ~%"
(get-option '$background_color)) )
(if (equal (get-option '$proportional_axes) '$none)
@@ -3339,6 +3339,11 @@
(/ (first (get-option '$dimensions)) 100.0)
(/ (second (get-option '$dimensions)) 100.0)
(get-option '$file_name)))
+ ($cairolatex_pdf (format cmdstorage "set terminal cairolatex pdf ~a color size ~acm, ~acm~%set out '~a.tex'"
+ (write-font-type)
+ (/ (first (get-option '$dimensions)) 100.0)
+ (/ (second (get-option '$dimensions)) 100.0)
+ (get-option '$file_name)))
(($pdf $multipage_pdf) (format cmdstorage "set terminal pdf dashed enhanced ~a color size ~acm, ~acm~%set out '~a.pdf'"
(write-font-type)
(/ (first (get-option '$dimensions)) 100.0)
@@ -3483,7 +3488,7 @@
(format cmdstorage "~%set size ~a, ~a~%" size1 size2)
(format cmdstorage "set origin ~a, ~a~%" origin1 origin2)
(unless (or *multiplot-is-active*
- (member (get-option '$terminal) '($epslatex $epslatex_standalone)))
+ (member (get-option '$terminal) '($epslatex $epslatex_standalone $cairolatex_pdf)))
(format cmdstorage "set obj 1 rectangle behind from screen ~a,~a to screen ~a,~a~%"
origin1 origin2 (+ origin1 size1 ) (+ origin2 size2))) ))
(setf is1stobj t
@@ -3681,6 +3686,11 @@
(/ (first (get-option '$dimensions)) 100.0)
(/ (second (get-option '$dimensions)) 100.0)
(get-option '$file_name))))
+ ($cairolatex_pdf (format str "set terminal cairolatex pdf ~a color colortext size ~acm, ~acm~%set out '~a.tex'"
+ (write-font-type)
+ (/ (first (get-option '$dimensions)) 100.0)
+ (/ (second (get-option '$dimensions)) 100.0)
+ (get-option '$file_name)))
($pdf (setf str (format nil "set terminal pdf dashed enhanced ~a color size ~acm, ~acm~%set out '~a.pdf'"
(write-font-type)
(/ (first (get-option '$dimensions)) 100.0)
diff --git a/share/draw/grcommon.lisp b/share/draw/grcommon.lisp
index 513a06074..85f6f7d43 100644
--- a/share/draw/grcommon.lisp
+++ b/share/draw/grcommon.lisp
@@ -983,7 +983,8 @@
$epslatex $epslatex_standalone $svg $tikz $tikz_standalone $x11 $qt
$dumb $dumb_file $pdf $pdfcairo $wxt $animated_gif $windows
$multipage_pdfcairo $multipage_pdf $multipage_eps
- $multipage_eps_color $aquaterm $tiff $vrml $obj $stl $pnm $ply)))
+ $multipage_eps_color $aquaterm $tiff $vrml $obj $stl $pnm $ply
+ $cairolatex_pdf)))
(cond
((member val terms)
(when (and (eq val '$png) $draw_use_pngcairo)
-----------------------------------------------------------------------
Summary of changes:
doc/info/draw.texi | 2 ++
share/draw/gnuplot.lisp | 26 +++++++++++++++++++++++---
share/draw/grcommon.lisp | 3 ++-
3 files changed, 27 insertions(+), 4 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2025-11-26 15:03:41
|
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-manual-css-more-vars has been updated
via d9e825f93c06d0092373599bc7e9836b316f9af2 (commit)
via 4f004058ae370c216242632a2f5128109a61b170 (commit)
via 81041bd8c03bddb7cd7c55c90b42552bf8a57f40 (commit)
from 021ea6918064b38f86b38e219538ec255edf6e6e (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 d9e825f93c06d0092373599bc7e9836b316f9af2
Author: Raymond Toy <toy...@gm...>
Date: Wed Nov 26 07:03:19 2025 -0800
Move pygment CSS stuff together
diff --git a/doc/info/manual.css b/doc/info/manual.css
index 016c5978f..98ffcfbb4 100644
--- a/doc/info/manual.css
+++ b/doc/info/manual.css
@@ -93,15 +93,6 @@ pre.example, pre.example-preformatted {
overflow: auto;
}
-/*
- * For pygments, make the background color of the highlighted code the
- * same as the example background color. Without this, it looks funny.
- */
-
-div.highlight {
- background-color: var(--example-background-color) !important;
-}
-
div.spacerbox { border: none; padding: 2em 0 }
div.image { margin: 0; padding: 1em; text-align: center }
div.categorybox {
@@ -152,14 +143,27 @@ dd { margin-left: 0.5em }
dd { margin-left: 1.5em }
}
-/* CSS for pygment highlighting */
+/*
+ * CSS customizations for pygment highlighting
+ */
+
+/*
+ * For pygments, make the background color of the highlighted code the
+ * same as the example background color. Without this, it looks funny.
+ */
+
+div.highlight {
+ background-color: var(--example-background-color) !important;
+}
+
.example.user-maxima {
overflow-x: auto
}
.highlight.pre {
- /* Lines for highlighted examples are too close by default with
- * pygments. Make it larger.
+ /*
+ * Lines for highlighted examples are too close by default with
+ * pygments. Make it larger.
*/
line-height: normal !important;
}
commit 4f004058ae370c216242632a2f5128109a61b170
Author: Raymond Toy <toy...@gm...>
Date: Wed Nov 26 06:58:54 2025 -0800
Remove @media dark mode CSS that's not used anymore
This has all been replaced with variables for dark-mode colors, so
this @media isn't used. Remove it.
Also add a comment about div.textbox and friends apparently not being
used anywhere. We comment them out for now, but they should
eventually be removed if not used.
diff --git a/doc/info/manual.css b/doc/info/manual.css
index 22b096742..016c5978f 100644
--- a/doc/info/manual.css
+++ b/doc/info/manual.css
@@ -61,6 +61,11 @@ a:hover, span.button:hover {
background-color: var(--hover-background-color);
color: var(--hover-color);
}
+/*
+ * What are these used for? I (rtoy) can't find these anywhere.
+ * Commenting these out for now, but they should be removed if they're
+ * not really used anywhere.
+ */
/*
div.textbox {
border: solid;
@@ -78,6 +83,7 @@ div.synopsisbox {
background: var(--div-synopsisbox-background-color);
}
*/
+
pre.example, pre.example-preformatted {
border: var(--pre-example-border);
color: var(--text-color);
@@ -145,38 +151,6 @@ dd { margin-left: 0.5em }
ul,ol { padding-left: 2em }
dd { margin-left: 1.5em }
}
-@media (prefers-color-scheme: dark) {
-/*
- body {
- background: #444;
- color: #eee
- }
- a:link {
- color: #9df;
- }
- a:visited {color: #9fd }
- a:hover, span.button:hover {
- background-color: #ddd;
- color: #55f;
- }
- div.header, div.nav-panel {
- background-color: #555;
- }
- pre.example, pre.example-preformatted {
- border: 1px solid black;
- color: black;
- background-color: var(--example-background-color);
- }
- div.highlight {
- background-color: var(--example-background-color) !important;
- }
- div.categorybox { background-color: #544 }
-*/
-/*
- div.textbox, div.titlebox, div.synopsisbox {
- color: var(--div-titlebox-background-color);}
-*/
-}
/* CSS for pygment highlighting */
.example.user-maxima {
commit 81041bd8c03bddb7cd7c55c90b42552bf8a57f40
Author: Raymond Toy <toy...@gm...>
Date: Mon Nov 24 13:46:31 2025 -0800
Comment out CSS for textbox, titlebox, and synposisbox
These don't seem to be used anywhere so comment them out.
Also do some minor cleanups and add some comments.
diff --git a/doc/info/manual.css b/doc/info/manual.css
index 2947b0145..22b096742 100644
--- a/doc/info/manual.css
+++ b/doc/info/manual.css
@@ -1,7 +1,7 @@
-/* Define variable for background color for examples */
+/* Define colors for light and dark mode */
:root {
/* Default light mode colors */
- --background-color: #ffffff; /* White background */
+ --background-color: white;
--text-color: black;
--example-background-color: rgb(238,238,255);
--link-color: #00f;
@@ -61,6 +61,7 @@ a:hover, span.button:hover {
background-color: var(--hover-background-color);
color: var(--hover-color);
}
+/*
div.textbox {
border: solid;
border-width: thin;
@@ -76,6 +77,7 @@ div.synopsisbox {
padding-top: 1em 2em;
background: var(--div-synopsisbox-background-color);
}
+*/
pre.example, pre.example-preformatted {
border: var(--pre-example-border);
color: var(--text-color);
-----------------------------------------------------------------------
Summary of changes:
doc/info/manual.css | 66 +++++++++++++++++++----------------------------------
1 file changed, 23 insertions(+), 43 deletions(-)
hooks/post-receive
--
Maxima CAS
|
|
From: rtoy <rt...@us...> - 2025-11-25 16:03:46
|
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-scl has been updated
via 015e5cc9072906c6f3133aaeee860ae0bbc3b503 (commit)
from ea4518bc2b5a01fc8c876bde2313cdee425035d6 (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 015e5cc9072906c6f3133aaeee860ae0bbc3b503
Author: Raymond Toy <toy...@gm...>
Date: Tue Nov 25 07:27:46 2025 -0800
Remove SCL conditionals
Just removed some of the simpler cases with SCL conditionals. There
are many, many more.
diff --git a/src/command-line.lisp b/src/command-line.lisp
index 16eb423fb..9c7413dff 100644
--- a/src/command-line.lisp
+++ b/src/command-line.lisp
@@ -166,9 +166,6 @@
ext::*command-line-application-arguments*
(rest ext:*command-line-strings*))
- #+scl
- (rest ext:*command-line-strings*)
-
#+sbcl
(rest sb-ext:*posix-argv*)
diff --git a/src/globals.lisp b/src/globals.lisp
index 322961fdb..76644e4d4 100644
--- a/src/globals.lisp
+++ b/src/globals.lisp
@@ -1692,7 +1692,6 @@
(defvar *maxima-lispname*
#+clisp "clisp"
#+cmu "cmucl"
- #+scl "scl"
#+sbcl "sbcl"
#+gcl "gcl"
#+allegro "acl"
@@ -1700,7 +1699,7 @@
#+abcl "abcl"
#+lispworks "lispworks"
#+ecl "ecl"
- #-(or clisp cmu scl sbcl gcl allegro openmcl abcl lispworks ecl) "unknownlisp")
+ #-(or clisp cmu sbcl gcl allegro openmcl abcl lispworks ecl) "unknownlisp")
;;; Locations of various types of files. These variables are discussed
;;; in more detail in the file doc/implementation/dir_vars.txt. Since
diff --git a/src/maxima-build.lisp b/src/maxima-build.lisp
index 817f2dcec..3376886ad 100644
--- a/src/maxima-build.lisp
+++ b/src/maxima-build.lisp
@@ -23,11 +23,10 @@
#+sbcl (sb-ext:save-lisp-and-die "binary-sbcl/maxima.core" :toplevel (symbol-function 'cl-user::run))
#+gcl (si:save-system "binary-gcl/maxima")
#+cmu (extensions:save-lisp "binary-cmucl/maxima.core" :init-function 'cl-user::run)
- #+scl (extensions:save-lisp "binary-scl/maxima.core" :init-function 'cl-user::run)
#+allegro (excl:dumplisp :name "binary-acl/maxima.dxl")
#+lispworks (hcl:save-image "binary-lispworks/maxima" :restart-function 'cl-user::run)
#+(and openmcl (not 64-bit-target)) (ccl:save-application "binary-openmcl/maxima" :toplevel-function 'cl-user::run)
#+(and openmcl 64-bit-target) (ccl:save-application "binary-ccl64/maxima" :toplevel-function 'cl-user::run)
- #-(or clisp sbcl gcl cmu scl allegro lispworks ccl)
+ #-(or clisp sbcl gcl cmu allegro lispworks ccl)
(format t "Sorry, I don't know how to dump an image on this Lisp"))
-----------------------------------------------------------------------
Summary of changes:
src/command-line.lisp | 3 ---
src/globals.lisp | 3 +--
src/maxima-build.lisp | 3 +--
3 files changed, 2 insertions(+), 7 deletions(-)
hooks/post-receive
--
Maxima CAS
|