You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(67) |
Jul
(61) |
Aug
(49) |
Sep
(43) |
Oct
(59) |
Nov
(24) |
Dec
(18) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(34) |
Feb
(35) |
Mar
(72) |
Apr
(42) |
May
(46) |
Jun
(15) |
Jul
(64) |
Aug
(62) |
Sep
(22) |
Oct
(41) |
Nov
(57) |
Dec
(56) |
| 2004 |
Jan
(48) |
Feb
(47) |
Mar
(33) |
Apr
(39) |
May
(6) |
Jun
(17) |
Jul
(19) |
Aug
(10) |
Sep
(14) |
Oct
(74) |
Nov
(80) |
Dec
(22) |
| 2005 |
Jan
(43) |
Feb
(33) |
Mar
(52) |
Apr
(74) |
May
(32) |
Jun
(58) |
Jul
(18) |
Aug
(41) |
Sep
(71) |
Oct
(28) |
Nov
(65) |
Dec
(68) |
| 2006 |
Jan
(54) |
Feb
(37) |
Mar
(82) |
Apr
(211) |
May
(69) |
Jun
(75) |
Jul
(279) |
Aug
(139) |
Sep
(135) |
Oct
(58) |
Nov
(81) |
Dec
(78) |
| 2007 |
Jan
(141) |
Feb
(134) |
Mar
(65) |
Apr
(49) |
May
(61) |
Jun
(90) |
Jul
(72) |
Aug
(53) |
Sep
(86) |
Oct
(61) |
Nov
(62) |
Dec
(101) |
| 2008 |
Jan
(100) |
Feb
(66) |
Mar
(76) |
Apr
(95) |
May
(77) |
Jun
(93) |
Jul
(103) |
Aug
(76) |
Sep
(42) |
Oct
(55) |
Nov
(44) |
Dec
(75) |
| 2009 |
Jan
(103) |
Feb
(105) |
Mar
(121) |
Apr
(59) |
May
(103) |
Jun
(82) |
Jul
(67) |
Aug
(76) |
Sep
(85) |
Oct
(75) |
Nov
(181) |
Dec
(133) |
| 2010 |
Jan
(107) |
Feb
(116) |
Mar
(145) |
Apr
(89) |
May
(138) |
Jun
(85) |
Jul
(82) |
Aug
(111) |
Sep
(70) |
Oct
(83) |
Nov
(60) |
Dec
(16) |
| 2011 |
Jan
(61) |
Feb
(16) |
Mar
(52) |
Apr
(41) |
May
(34) |
Jun
(41) |
Jul
(57) |
Aug
(73) |
Sep
(21) |
Oct
(45) |
Nov
(50) |
Dec
(28) |
| 2012 |
Jan
(70) |
Feb
(36) |
Mar
(71) |
Apr
(29) |
May
(48) |
Jun
(61) |
Jul
(44) |
Aug
(54) |
Sep
(20) |
Oct
(28) |
Nov
(41) |
Dec
(137) |
| 2013 |
Jan
(62) |
Feb
(55) |
Mar
(31) |
Apr
(23) |
May
(54) |
Jun
(54) |
Jul
(90) |
Aug
(46) |
Sep
(38) |
Oct
(60) |
Nov
(92) |
Dec
(17) |
| 2014 |
Jan
(62) |
Feb
(35) |
Mar
(72) |
Apr
(30) |
May
(97) |
Jun
(81) |
Jul
(63) |
Aug
(64) |
Sep
(28) |
Oct
(45) |
Nov
(48) |
Dec
(109) |
| 2015 |
Jan
(106) |
Feb
(36) |
Mar
(65) |
Apr
(63) |
May
(95) |
Jun
(56) |
Jul
(48) |
Aug
(55) |
Sep
(100) |
Oct
(57) |
Nov
(33) |
Dec
(46) |
| 2016 |
Jan
(76) |
Feb
(53) |
Mar
(88) |
Apr
(79) |
May
(62) |
Jun
(65) |
Jul
(37) |
Aug
(23) |
Sep
(108) |
Oct
(68) |
Nov
(66) |
Dec
(47) |
| 2017 |
Jan
(55) |
Feb
(11) |
Mar
(30) |
Apr
(19) |
May
(14) |
Jun
(21) |
Jul
(30) |
Aug
(48) |
Sep
(39) |
Oct
(30) |
Nov
(75) |
Dec
(28) |
| 2018 |
Jan
(70) |
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
| 2019 |
Jan
(19) |
Feb
(61) |
Mar
(14) |
Apr
(7) |
May
(5) |
Jun
(17) |
Jul
(5) |
Aug
(7) |
Sep
(11) |
Oct
(2) |
Nov
(17) |
Dec
(9) |
| 2020 |
Jan
(8) |
Feb
(8) |
Mar
(12) |
Apr
(17) |
May
(2) |
Jun
(10) |
Jul
(24) |
Aug
(6) |
Sep
(16) |
Oct
(3) |
Nov
(10) |
Dec
(40) |
| 2021 |
Jan
(53) |
Feb
(18) |
Mar
(20) |
Apr
(11) |
May
(23) |
Jun
(37) |
Jul
(28) |
Aug
(32) |
Sep
(105) |
Oct
(81) |
Nov
(109) |
Dec
(41) |
| 2022 |
Jan
(139) |
Feb
(82) |
Mar
(96) |
Apr
(51) |
May
(58) |
Jun
(104) |
Jul
(32) |
Aug
(61) |
Sep
(37) |
Oct
(25) |
Nov
(94) |
Dec
(81) |
| 2023 |
Jan
(113) |
Feb
(77) |
Mar
(98) |
Apr
(43) |
May
(48) |
Jun
(28) |
Jul
(72) |
Aug
(40) |
Sep
(44) |
Oct
(61) |
Nov
(70) |
Dec
(94) |
| 2024 |
Jan
(101) |
Feb
(21) |
Mar
(66) |
Apr
(88) |
May
(55) |
Jun
(109) |
Jul
(57) |
Aug
(103) |
Sep
(50) |
Oct
(75) |
Nov
(132) |
Dec
(69) |
| 2025 |
Jan
(216) |
Feb
(161) |
Mar
(85) |
Apr
(50) |
May
(80) |
Jun
(51) |
Jul
(49) |
Aug
(27) |
Sep
(30) |
Oct
(84) |
Nov
(54) |
Dec
(100) |
| 2026 |
Jan
(61) |
Feb
(59) |
Mar
(85) |
Apr
(234) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: Barton W. <wil...@us...> - 2026-04-30 23:11:22
|
Pasting in a call to `factor` at the top of `solve`, allows Maxima to solve such equations
~~~
(defun solve (*exp *var mult &aux (genvar nil) ($derivsubst nil)
(exp (float2rat (mratcheck *exp)))
(*myvar *var) ($savefactors t))
(prog (factors *has*var genpairs $dontfactor temp symbol *g *checkfactors*
varlist expsumsplit)
(let (($ratfac t))
(setq exp ($factor (ratdisrep (ratf exp))))) ;;<== added $factor
;; Cancel out any simple
~~~
But this causes some bad bugs; for example,
~~~
******************** rtestint.mac: Problem 243 (line 1451) ********************
Input:
integrate(sqrt(cos(x) + 1), x, - %pi, %pi)
Result:
0
This differed from the expected result:
5/2
2
~~~
---
**[bugs:#4726] solve doesn't really solve**
**Status:** open
**Group:** None
**Created:** Wed Apr 29, 2026 09:28 AM UTC by dan hayes
**Last Updated:** Thu Apr 30, 2026 04:05 PM UTC
**Owner:** nobody
WxMaxima version: 26.01.0_MSW
Using wxWidgets version: wxWidgets 3.2.9
Maxima version: 5.49.0
Maxima build date: 2026-01-02 21:27:51
Host type: x86_64-w64-mingw32
System type: Win32 10.0.19041 X86-64
Lisp implementation type: SBCL
Lisp implementation version: 2.6.0
(assume_pos:true, file_output_append:true, ratprint:false, showtime:true, load(simplify_sum), intanalysis: false, simpsum:true, load("lrats") ,letrat:true, ratfac:true,algebraic:true, rootsconmode=super,algexact:true,fpprintprec:4);
(assume(n>2,m,constant),ry:integrate((1-y/b)^n,y),rx:M*integrate(1/(1-x/a),x),rs:solve(ry-rx,y));
Now from the output rs should be in the form y=some function of x but it isn't so i had to do
[p12:part(rs,1,2)*b^(n+1),t:p12^(1/(n+1)),ans:b-t,"y"=ans];
to get the correct answer. I tried even using solveradcan:true , which was default false and even that
did not even help to get maxima to give the correct answer. I shouldn't actually say "the correct"
answer because there is an arbitrary constant of integration that could be used for expression rx in
rx:M*integrate(1/(1-x/a),x). Since actually i desire the solution such that y=0 when x=0 and a text
then by some mysterious way to get the answer in the form
["y"=b-b*(1+(n+1)*M*a/b*log(1-x/a))^(1/(n+1))];
Now i would not necessarily expect maxima to be able to get this final form which is an ungodly
difficult problem in finding the correct constant of integration to get the answer in this form but
it would be nice. Though if anyone knows how to find that constant of integration would be nice. I
also add that many times prior i have had to do it myself rationalizing etc. etc. to get the answer from
maximas unwillingness to fully solve a straightforward problem. This is also a feature request to get
maxima to fully solve the problem rather than just giving an incomplete answer.
---
Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/
To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
|
From: Matthias D. D. <mdi...@us...> - 2026-04-30 22:56:41
|
Maxima itself gives this output, and wxMaxima only casts it in a slightly different way. So I think the problem is in Maxima, not in wxMaxima. I originally had a more complicated expression where I spotted this behaviour. I then reduced the expression gradually to a minimal expression which still gives the weird looking result. If you write -h instead of -1*h everything is fine, but that's not the point. You may exchange 1 with any other number. It seems to me that any further reduction of the example will not show such weird output. For example: 1+1-1*h; gives 2-h (as expected). But assigning the same expression to a function as L(h):=1+1-1*h; gives L(h) := 1 + 1 + (- 1) h Of course, I think it is a minor bug, since the result is not wrong. The question is why L(h):=1+1-1*h; is not simplified to L(h) := 2-h And why L(h):=1+1-2*h; is not simplified to L(h):=2-2*h On Fri, 1 May 2026 at 03:30, Stavros Macrakis < mac...@us...> wrote: > Strange, it seems that it uses (-1)*h except for the *second* term, where > it uses -(1*h): > > ?print(-1*h)$((MTIMES) ((MMINUS) 1) $H) ; -(1*h) > > ?print(-1*h-1*h)$((MPLUS) ((MTIMES) ((MMINUS) 1) $H) ((MMINUS) ((MTIMES) 1 $H))) ; -(1*h) > > ?print(-1*h-1*h-1*h)$((MPLUS) ((MTIMES) ((MMINUS) 1) $H) ((MMINUS) ((MTIMES) 1 $H)) ; -(1*h) ((MTIMES) ((MMINUS) 1) $H)) > > ?print(-1*h-1*h-1*h-1*h)$((MPLUS) ((MTIMES) ((MMINUS) 1) $H) ((MMINUS) ((MTIMES) 1 $H)) ; -(1*h) ((MTIMES) ((MMINUS) 1) $H) ((MTIMES) ((MMINUS) 1) $H)) > > ?print(-1*h-1*h-1*h-1*h-1*h);((MPLUS) ((MTIMES) ((MMINUS) 1) $H) ((MMINUS) ((MTIMES) 1 $H)) ; -(1*h) ((MTIMES) ((MMINUS) 1) $H) ((MTIMES) ((MMINUS) 1) $H) ((MTIMES) ((MMINUS) 1) $H)) > > Surely the implementor didn't intend this, so I guess it's a bug. > But since they simplify the same, it doesn't really matter. > ------------------------------ > > *[bugs:#4727] <https://sourceforge.net/p/maxima/bugs/4727/> - is converted > to +- (in a special case)* > > *Status:* open > *Group:* None > *Created:* Wed Apr 29, 2026 09:22 PM UTC by Matthias Daniel Diehl > *Last Updated:* Thu Apr 30, 2026 06:18 PM UTC > *Owner:* nobody > > *Minimal example* > > Entering > > L(h):=1+1-1*h; > > gives the output > L(h) := 1 + 1 + (- 1) h > > The expected output is > > L(h):=1+1-1 h > > I spotted the bug in wxMaxima, which displays L(h):=1+1+-1*h > ------------------------------ > > Sent from sourceforge.net because you indicated interest in > https://sourceforge.net/p/maxima/bugs/4727/ > > To unsubscribe from further messages, please visit > https://sourceforge.net/auth/subscriptions/ > --- **[bugs:#4727] - is converted to +- \(in a special case\)** **Status:** open **Group:** None **Created:** Wed Apr 29, 2026 09:22 PM UTC by Matthias Daniel Diehl **Last Updated:** Thu Apr 30, 2026 07:30 PM UTC **Owner:** nobody **Minimal example** Entering L(h):=1+1-1*h; gives the output L(h) := 1 + 1 + (- 1) h The expected output is L(h):=1+1-1 h I spotted the bug in wxMaxima, which displays L(h):=1+1+-1*h --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
|
From: Stavros M. <mac...@us...> - 2026-04-30 19:30:56
|
Strange, it seems that it uses ``(-1)*h`` except for the *second* term, where it uses ``-(1*h)``: ~~~ ?print(-1*h)$ ((MTIMES) ((MMINUS) 1) $H) ; -(1*h) ?print(-1*h-1*h)$ ((MPLUS) ((MTIMES) ((MMINUS) 1) $H) ((MMINUS) ((MTIMES) 1 $H))) ; -(1*h) ?print(-1*h-1*h-1*h)$ ((MPLUS) ((MTIMES) ((MMINUS) 1) $H) ((MMINUS) ((MTIMES) 1 $H)) ; -(1*h) ((MTIMES) ((MMINUS) 1) $H)) ?print(-1*h-1*h-1*h-1*h)$ ((MPLUS) ((MTIMES) ((MMINUS) 1) $H) ((MMINUS) ((MTIMES) 1 $H)) ; -(1*h) ((MTIMES) ((MMINUS) 1) $H) ((MTIMES) ((MMINUS) 1) $H)) ?print(-1*h-1*h-1*h-1*h-1*h); ((MPLUS) ((MTIMES) ((MMINUS) 1) $H) ((MMINUS) ((MTIMES) 1 $H)) ; -(1*h) ((MTIMES) ((MMINUS) 1) $H) ((MTIMES) ((MMINUS) 1) $H) ((MTIMES) ((MMINUS) 1) $H)) ~~~ Surely the implementor didn't intend this, so I guess it's a bug. But since they simplify the same, it doesn't really matter. --- **[bugs:#4727] - is converted to +- \(in a special case\)** **Status:** open **Group:** None **Created:** Wed Apr 29, 2026 09:22 PM UTC by Matthias Daniel Diehl **Last Updated:** Thu Apr 30, 2026 06:18 PM UTC **Owner:** nobody **Minimal example** Entering L(h):=1+1-1*h; gives the output L(h) := 1 + 1 + (- 1) h The expected output is L(h):=1+1-1 h I spotted the bug in wxMaxima, which displays L(h):=1+1+-1*h --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
|
From: Robert D. <rob...@us...> - 2026-04-30 18:18:17
|
A slightly simpler way to write the original example. ``` (%i10) simp: false; (%o10) false (%i11) 1 + 1 - 1*h; (%o11) 1 + 1 + (- 1) h ``` It's interesting to me that was parsed essentially as 1 plus 1 plus ((minus 1) times h): ``` (%i12) :lisp $_ ((MPLUS) 1 1 ((MTIMES) ((MMINUS) 1) $H)) ``` I wonder why it wasn't parsed as 1 plus 1 plus (minus (1 times h)). I suppose the two forms are equivalent, but a different input does produce what I expected: ``` (%i13) 1 - 1*h; (%o13) 1 - 1 h (%i14) :lisp $_ ((MPLUS) 1 ((MMINUS) ((MTIMES) 1 $H))) ``` That is, 1 plus (minus (1 times h)). I agree that the observed behavior isn't incorrect, I am just slightly mystified about the different ways of parsing a similar expression. --- **[bugs:#4727] - is converted to +- \(in a special case\)** **Status:** open **Group:** None **Created:** Wed Apr 29, 2026 09:22 PM UTC by Matthias Daniel Diehl **Last Updated:** Thu Apr 30, 2026 01:26 AM UTC **Owner:** nobody **Minimal example** Entering L(h):=1+1-1*h; gives the output L(h) := 1 + 1 + (- 1) h The expected output is L(h):=1+1-1 h I spotted the bug in wxMaxima, which displays L(h):=1+1+-1*h --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
|
From: Stavros M. <mac...@us...> - 2026-04-30 16:06:04
|
Thanks for explicitly showing us the settings and versions you're using.
There are a couple of things here which look wrong:
One of the disadvantages of the (...) approach to setting multiple options is that you don't see any errors.
~~~
(assume_pos:true,
...
rootsconmode=super, << this returns the equation rootsconmode=super,
<< where you presumably intended the assignment rootsconmode:super
...);
(assume(n>2,
m, constant), << the returned value of this is
<< [n > 2, meaningless, meaningless]
<< showing that the "m,constant" had no effect
<< You probably intended a separate declare(m,constant)
~~~
---
**[bugs:#4726] solve doesn't really solve**
**Status:** open
**Group:** None
**Created:** Wed Apr 29, 2026 09:28 AM UTC by dan hayes
**Last Updated:** Thu Apr 30, 2026 11:27 AM UTC
**Owner:** nobody
WxMaxima version: 26.01.0_MSW
Using wxWidgets version: wxWidgets 3.2.9
Maxima version: 5.49.0
Maxima build date: 2026-01-02 21:27:51
Host type: x86_64-w64-mingw32
System type: Win32 10.0.19041 X86-64
Lisp implementation type: SBCL
Lisp implementation version: 2.6.0
(assume_pos:true, file_output_append:true, ratprint:false, showtime:true, load(simplify_sum), intanalysis: false, simpsum:true, load("lrats") ,letrat:true, ratfac:true,algebraic:true, rootsconmode=super,algexact:true,fpprintprec:4);
(assume(n>2,m,constant),ry:integrate((1-y/b)^n,y),rx:M*integrate(1/(1-x/a),x),rs:solve(ry-rx,y));
Now from the output rs should be in the form y=some function of x but it isn't so i had to do
[p12:part(rs,1,2)*b^(n+1),t:p12^(1/(n+1)),ans:b-t,"y"=ans];
to get the correct answer. I tried even using solveradcan:true , which was default false and even that
did not even help to get maxima to give the correct answer. I shouldn't actually say "the correct"
answer because there is an arbitrary constant of integration that could be used for expression rx in
rx:M*integrate(1/(1-x/a),x). Since actually i desire the solution such that y=0 when x=0 and a text
then by some mysterious way to get the answer in the form
["y"=b-b*(1+(n+1)*M*a/b*log(1-x/a))^(1/(n+1))];
Now i would not necessarily expect maxima to be able to get this final form which is an ungodly
difficult problem in finding the correct constant of integration to get the answer in this form but
it would be nice. Though if anyone knows how to find that constant of integration would be nice. I
also add that many times prior i have had to do it myself rationalizing etc. etc. to get the answer from
maximas unwillingness to fully solve a straightforward problem. This is also a feature request to get
maxima to fully solve the problem rather than just giving an incomplete answer.
---
Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/
To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
|
From: Barton W. <wil...@us...> - 2026-04-30 11:27:29
|
Here is a minimal non-working example:
~~~
(%i1) xxx : 1 = (1-y/2)^(n);
(xxx) 1=(1-y/2)^n
(%i2) solve(xxx,y), solveexplicit : false;
(%o2) [(2-y)^n/2^n=1]
(%i3) solve(%,y);
"Is "n" an "integer"?"n;
(%o3) [y=0]
~~~
Calling `solve` twice results in one solution (but not all solutions).
When the option variable `solveexplicit`, Maxima realizes that it is unable to solve the equation and it returns the empty list. Unfortunately, Maxima's solve function doesn't distinguish the cases of the solution set is empty and unable to solve:
~~~
(%i1) xxx : 1 = (1-y/2)^(n);
(xxx) 1=(1-y/2)^n
(%i2) solve(xxx,y), solveexplicit : true;
(%o2) []
~~~
This is a deficiency of Maxima, not a bug. Maybe you would like to file a feature request. If you do, please try to include a simple example that shows what you want.
For clarity, unless it is necessary to use a non-default value for an option variable, I suggest using the default values--it makes an example easier for me to understand.
---
**[bugs:#4726] solve doesn't really solve**
**Status:** open
**Group:** None
**Created:** Wed Apr 29, 2026 09:28 AM UTC by dan hayes
**Last Updated:** Thu Apr 30, 2026 02:39 AM UTC
**Owner:** nobody
WxMaxima version: 26.01.0_MSW
Using wxWidgets version: wxWidgets 3.2.9
Maxima version: 5.49.0
Maxima build date: 2026-01-02 21:27:51
Host type: x86_64-w64-mingw32
System type: Win32 10.0.19041 X86-64
Lisp implementation type: SBCL
Lisp implementation version: 2.6.0
(assume_pos:true, file_output_append:true, ratprint:false, showtime:true, load(simplify_sum), intanalysis: false, simpsum:true, load("lrats") ,letrat:true, ratfac:true,algebraic:true, rootsconmode=super,algexact:true,fpprintprec:4);
(assume(n>2,m,constant),ry:integrate((1-y/b)^n,y),rx:M*integrate(1/(1-x/a),x),rs:solve(ry-rx,y));
Now from the output rs should be in the form y=some function of x but it isn't so i had to do
[p12:part(rs,1,2)*b^(n+1),t:p12^(1/(n+1)),ans:b-t,"y"=ans];
to get the correct answer. I tried even using solveradcan:true , which was default false and even that
did not even help to get maxima to give the correct answer. I shouldn't actually say "the correct"
answer because there is an arbitrary constant of integration that could be used for expression rx in
rx:M*integrate(1/(1-x/a),x). Since actually i desire the solution such that y=0 when x=0 and a text
then by some mysterious way to get the answer in the form
["y"=b-b*(1+(n+1)*M*a/b*log(1-x/a))^(1/(n+1))];
Now i would not necessarily expect maxima to be able to get this final form which is an ungodly
difficult problem in finding the correct constant of integration to get the answer in this form but
it would be nice. Though if anyone knows how to find that constant of integration would be nice. I
also add that many times prior i have had to do it myself rationalizing etc. etc. to get the answer from
maximas unwillingness to fully solve a straightforward problem. This is also a feature request to get
maxima to fully solve the problem rather than just giving an incomplete answer.
---
Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/
To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
|
From: Stavros M. <mac...@us...> - 2026-04-30 09:20:00
|
assume(n,integer)
=> [meaningless,meaningless]
On Wed, Apr 29, 2026, 22:39 dan hayes via Maxima-bugs <
max...@li...> wrote:
> i also added assume(n,integer), declare(n,integer) at the beginning and it
> made no difference.
> Also there is the multivalue issue of n+1 different roots but it goes
> without saying the desired one is the principle value or for n even the
> only real root
> ------------------------------
>
> *[bugs:#4726] <https://sourceforge.net/p/maxima/bugs/4726/> solve doesn't
> really solve*
>
> *Status:* open
> *Group:* None
> *Created:* Wed Apr 29, 2026 09:28 AM UTC by dan hayes
> *Last Updated:* Wed Apr 29, 2026 09:28 AM UTC
> *Owner:* nobody
>
> WxMaxima version: 26.01.0_MSW
> Using wxWidgets version: wxWidgets 3.2.9
> Maxima version: 5.49.0
> Maxima build date: 2026-01-02 21:27:51
> Host type: x86_64-w64-mingw32
> System type: Win32 10.0.19041 X86-64
> Lisp implementation type: SBCL
> Lisp implementation version: 2.6.0
>
> (assume_pos:true, file_output_append:true, ratprint:false, showtime:true,
> load(simplify_sum), intanalysis: false, simpsum:true, load("lrats")
> ,letrat:true, ratfac:true,algebraic:true,
> rootsconmode=super,algexact:true,fpprintprec:4);
>
>
> (assume(n>2,m,constant),ry:integrate((1-y/b)^n,y),rx:M*integrate(1/(1-x/a),x),rs:solve(ry-rx,y));
>
> Now from the output rs should be in the form y=some function of x but it
> isn't so i had to do
>
> [p12:part(rs,1,2)*b^(n+1),t:p12^(1/(n+1)),ans:b-t,"y"=ans];
>
> to get the correct answer. I tried even using solveradcan:true , which was
> default false and even that
> did not even help to get maxima to give the correct answer. I shouldn't
> actually say "the correct"
> answer because there is an arbitrary constant of integration that could be
> used for expression rx in
> rx:M*integrate(1/(1-x/a),x). Since actually i desire the solution such
> that y=0 when x=0 and a text
> then by some mysterious way to get the answer in the form
>
> ["y"=b-b*(1+(n+1)*M*a/b*log(1-x/a))^(1/(n+1))];
>
> Now i would not necessarily expect maxima to be able to get this final
> form which is an ungodly
> difficult problem in finding the correct constant of integration to get
> the answer in this form but
> it would be nice. Though if anyone knows how to find that constant of
> integration would be nice. I
> also add that many times prior i have had to do it myself rationalizing
> etc. etc. to get the answer from
> maximas unwillingness to fully solve a straightforward problem. This is
> also a feature request to get
> maxima to fully solve the problem rather than just giving an incomplete
> answer.
> ------------------------------
>
> Sent from sourceforge.net because max...@li... is
> subscribed to https://sourceforge.net/p/maxima/bugs/
>
> To unsubscribe from further messages, a project admin can change settings
> at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a
> mailing list, you can unsubscribe from the mailing list.
> _______________________________________________
> Maxima-bugs mailing list
> Max...@li...
> https://lists.sourceforge.net/lists/listinfo/maxima-bugs
>
---
**[bugs:#4726] solve doesn't really solve**
**Status:** open
**Group:** None
**Created:** Wed Apr 29, 2026 09:28 AM UTC by dan hayes
**Last Updated:** Thu Apr 30, 2026 02:39 AM UTC
**Owner:** nobody
WxMaxima version: 26.01.0_MSW
Using wxWidgets version: wxWidgets 3.2.9
Maxima version: 5.49.0
Maxima build date: 2026-01-02 21:27:51
Host type: x86_64-w64-mingw32
System type: Win32 10.0.19041 X86-64
Lisp implementation type: SBCL
Lisp implementation version: 2.6.0
(assume_pos:true, file_output_append:true, ratprint:false, showtime:true, load(simplify_sum), intanalysis: false, simpsum:true, load("lrats") ,letrat:true, ratfac:true,algebraic:true, rootsconmode=super,algexact:true,fpprintprec:4);
(assume(n>2,m,constant),ry:integrate((1-y/b)^n,y),rx:M*integrate(1/(1-x/a),x),rs:solve(ry-rx,y));
Now from the output rs should be in the form y=some function of x but it isn't so i had to do
[p12:part(rs,1,2)*b^(n+1),t:p12^(1/(n+1)),ans:b-t,"y"=ans];
to get the correct answer. I tried even using solveradcan:true , which was default false and even that
did not even help to get maxima to give the correct answer. I shouldn't actually say "the correct"
answer because there is an arbitrary constant of integration that could be used for expression rx in
rx:M*integrate(1/(1-x/a),x). Since actually i desire the solution such that y=0 when x=0 and a text
then by some mysterious way to get the answer in the form
["y"=b-b*(1+(n+1)*M*a/b*log(1-x/a))^(1/(n+1))];
Now i would not necessarily expect maxima to be able to get this final form which is an ungodly
difficult problem in finding the correct constant of integration to get the answer in this form but
it would be nice. Though if anyone knows how to find that constant of integration would be nice. I
also add that many times prior i have had to do it myself rationalizing etc. etc. to get the answer from
maximas unwillingness to fully solve a straightforward problem. This is also a feature request to get
maxima to fully solve the problem rather than just giving an incomplete answer.
---
Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/
To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
|
From: Stavros M. <mac...@gm...> - 2026-04-30 08:50:25
|
assume(n,integer)
=> [meaningless,meaningless]
On Wed, Apr 29, 2026, 22:39 dan hayes via Maxima-bugs <
max...@li...> wrote:
> i also added assume(n,integer), declare(n,integer) at the beginning and it
> made no difference.
> Also there is the multivalue issue of n+1 different roots but it goes
> without saying the desired one is the principle value or for n even the
> only real root
> ------------------------------
>
> *[bugs:#4726] <https://sourceforge.net/p/maxima/bugs/4726/> solve doesn't
> really solve*
>
> *Status:* open
> *Group:* None
> *Created:* Wed Apr 29, 2026 09:28 AM UTC by dan hayes
> *Last Updated:* Wed Apr 29, 2026 09:28 AM UTC
> *Owner:* nobody
>
> WxMaxima version: 26.01.0_MSW
> Using wxWidgets version: wxWidgets 3.2.9
> Maxima version: 5.49.0
> Maxima build date: 2026-01-02 21:27:51
> Host type: x86_64-w64-mingw32
> System type: Win32 10.0.19041 X86-64
> Lisp implementation type: SBCL
> Lisp implementation version: 2.6.0
>
> (assume_pos:true, file_output_append:true, ratprint:false, showtime:true,
> load(simplify_sum), intanalysis: false, simpsum:true, load("lrats")
> ,letrat:true, ratfac:true,algebraic:true,
> rootsconmode=super,algexact:true,fpprintprec:4);
>
>
> (assume(n>2,m,constant),ry:integrate((1-y/b)^n,y),rx:M*integrate(1/(1-x/a),x),rs:solve(ry-rx,y));
>
> Now from the output rs should be in the form y=some function of x but it
> isn't so i had to do
>
> [p12:part(rs,1,2)*b^(n+1),t:p12^(1/(n+1)),ans:b-t,"y"=ans];
>
> to get the correct answer. I tried even using solveradcan:true , which was
> default false and even that
> did not even help to get maxima to give the correct answer. I shouldn't
> actually say "the correct"
> answer because there is an arbitrary constant of integration that could be
> used for expression rx in
> rx:M*integrate(1/(1-x/a),x). Since actually i desire the solution such
> that y=0 when x=0 and a text
> then by some mysterious way to get the answer in the form
>
> ["y"=b-b*(1+(n+1)*M*a/b*log(1-x/a))^(1/(n+1))];
>
> Now i would not necessarily expect maxima to be able to get this final
> form which is an ungodly
> difficult problem in finding the correct constant of integration to get
> the answer in this form but
> it would be nice. Though if anyone knows how to find that constant of
> integration would be nice. I
> also add that many times prior i have had to do it myself rationalizing
> etc. etc. to get the answer from
> maximas unwillingness to fully solve a straightforward problem. This is
> also a feature request to get
> maxima to fully solve the problem rather than just giving an incomplete
> answer.
> ------------------------------
>
> Sent from sourceforge.net because max...@li... is
> subscribed to https://sourceforge.net/p/maxima/bugs/
>
> To unsubscribe from further messages, a project admin can change settings
> at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a
> mailing list, you can unsubscribe from the mailing list.
> _______________________________________________
> Maxima-bugs mailing list
> Max...@li...
> https://lists.sourceforge.net/lists/listinfo/maxima-bugs
>
|
|
From: dan h. <zm...@us...> - 2026-04-30 02:39:43
|
i also added assume(n,integer), declare(n,integer) at the beginning and it made no difference.
Also there is the multivalue issue of n+1 different roots but it goes without saying the desired one is the principle value or for n even the only real root
---
**[bugs:#4726] solve doesn't really solve**
**Status:** open
**Group:** None
**Created:** Wed Apr 29, 2026 09:28 AM UTC by dan hayes
**Last Updated:** Wed Apr 29, 2026 09:28 AM UTC
**Owner:** nobody
WxMaxima version: 26.01.0_MSW
Using wxWidgets version: wxWidgets 3.2.9
Maxima version: 5.49.0
Maxima build date: 2026-01-02 21:27:51
Host type: x86_64-w64-mingw32
System type: Win32 10.0.19041 X86-64
Lisp implementation type: SBCL
Lisp implementation version: 2.6.0
(assume_pos:true, file_output_append:true, ratprint:false, showtime:true, load(simplify_sum), intanalysis: false, simpsum:true, load("lrats") ,letrat:true, ratfac:true,algebraic:true, rootsconmode=super,algexact:true,fpprintprec:4);
(assume(n>2,m,constant),ry:integrate((1-y/b)^n,y),rx:M*integrate(1/(1-x/a),x),rs:solve(ry-rx,y));
Now from the output rs should be in the form y=some function of x but it isn't so i had to do
[p12:part(rs,1,2)*b^(n+1),t:p12^(1/(n+1)),ans:b-t,"y"=ans];
to get the correct answer. I tried even using solveradcan:true , which was default false and even that
did not even help to get maxima to give the correct answer. I shouldn't actually say "the correct"
answer because there is an arbitrary constant of integration that could be used for expression rx in
rx:M*integrate(1/(1-x/a),x). Since actually i desire the solution such that y=0 when x=0 and a text
then by some mysterious way to get the answer in the form
["y"=b-b*(1+(n+1)*M*a/b*log(1-x/a))^(1/(n+1))];
Now i would not necessarily expect maxima to be able to get this final form which is an ungodly
difficult problem in finding the correct constant of integration to get the answer in this form but
it would be nice. Though if anyone knows how to find that constant of integration would be nice. I
also add that many times prior i have had to do it myself rationalizing etc. etc. to get the answer from
maximas unwillingness to fully solve a straightforward problem. This is also a feature request to get
maxima to fully solve the problem rather than just giving an incomplete answer.
---
Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/
To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
|
From: Stavros M. <mac...@us...> - 2026-04-30 01:26:31
|
The form `(-1)*h` is a faithful rendition of the unsimplified internal form. It's not pretty, but it's not wrong. I'm curious, why did you write `-1*h`rather than `-h`? What version of Maxima/Lisp/WxMaxima are you running? --- **[bugs:#4727] - is converted to +- \(in a special case\)** **Status:** open **Group:** None **Created:** Wed Apr 29, 2026 09:22 PM UTC by Matthias Daniel Diehl **Last Updated:** Thu Apr 30, 2026 01:00 AM UTC **Owner:** nobody **Minimal example** Entering L(h):=1+1-1*h; gives the output L(h) := 1 + 1 + (- 1) h The expected output is L(h):=1+1-1 h I spotted the bug in wxMaxima, which displays L(h):=1+1+-1*h --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
|
From: Stavros M. <mac...@us...> - 2026-04-30 01:00:42
|
The body of a named or anonymous (lambda) function definition is never simplified. --- **[bugs:#4727] - is converted to +- \(in a special case\)** **Status:** open **Group:** None **Created:** Wed Apr 29, 2026 09:22 PM UTC by Matthias Daniel Diehl **Last Updated:** Wed Apr 29, 2026 11:21 PM UTC **Owner:** nobody **Minimal example** Entering L(h):=1+1-1*h; gives the output L(h) := 1 + 1 + (- 1) h The expected output is L(h):=1+1-1 h I spotted the bug in wxMaxima, which displays L(h):=1+1+-1*h --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
|
From: Raymond T. <rt...@us...> - 2026-04-29 23:21:21
|
I wonder why `1+1-1*h` isn't simplified to `2-h`. Nevertheless, the fact that wxmaxima displays it as `1+1+-1*h` seems to be a wxmaxima bug. --- **[bugs:#4727] - is converted to +- \(in a special case\)** **Status:** open **Group:** None **Created:** Wed Apr 29, 2026 09:22 PM UTC by Matthias Daniel Diehl **Last Updated:** Wed Apr 29, 2026 09:23 PM UTC **Owner:** nobody **Minimal example** Entering L(h):=1+1-1*h; gives the output L(h) := 1 + 1 + (- 1) h The expected output is L(h):=1+1-1 h I spotted the bug in wxMaxima, which displays L(h):=1+1+-1*h --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
|
From: Matthias D. D. <mdi...@us...> - 2026-04-29 21:23:00
|
--- **[bugs:#4727] - is converted to +- \(in a special case\)** **Status:** open **Group:** None **Created:** Wed Apr 29, 2026 09:22 PM UTC by Matthias Daniel Diehl **Last Updated:** Wed Apr 29, 2026 09:22 PM UTC **Owner:** nobody **Minimal example** Entering L(h):=1+1-1*h; gives the output L(h) := 1 + 1 + (- 1) h The expected output is L(h):=1+1-1 h I spotted the bug in wxMaxima, which displays L(h):=1+1+-1*h --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
|
From: dan h. <zm...@us...> - 2026-04-29 09:28:53
|
---
**[bugs:#4726] solve doesn't really solve**
**Status:** open
**Group:** None
**Created:** Wed Apr 29, 2026 09:28 AM UTC by dan hayes
**Last Updated:** Wed Apr 29, 2026 09:28 AM UTC
**Owner:** nobody
WxMaxima version: 26.01.0_MSW
Using wxWidgets version: wxWidgets 3.2.9
Maxima version: 5.49.0
Maxima build date: 2026-01-02 21:27:51
Host type: x86_64-w64-mingw32
System type: Win32 10.0.19041 X86-64
Lisp implementation type: SBCL
Lisp implementation version: 2.6.0
(assume_pos:true, file_output_append:true, ratprint:false, showtime:true, load(simplify_sum), intanalysis: false, simpsum:true, load("lrats") ,letrat:true, ratfac:true,algebraic:true, rootsconmode=super,algexact:true,fpprintprec:4);
(assume(n>2,m,constant),ry:integrate((1-y/b)^n,y),rx:M*integrate(1/(1-x/a),x),rs:solve(ry-rx,y));
Now from the output rs should be in the form y=some function of x but it isn't so i had to do
[p12:part(rs,1,2)*b^(n+1),t:p12^(1/(n+1)),ans:b-t,"y"=ans];
to get the correct answer. I tried even using solveradcan:true , which was default false and even that
did not even help to get maxima to give the correct answer. I shouldn't actually say "the correct"
answer because there is an arbitrary constant of integration that could be used for expression rx in
rx:M*integrate(1/(1-x/a),x). Since actually i desire the solution such that y=0 when x=0 and a text
then by some mysterious way to get the answer in the form
["y"=b-b*(1+(n+1)*M*a/b*log(1-x/a))^(1/(n+1))];
Now i would not necessarily expect maxima to be able to get this final form which is an ungodly
difficult problem in finding the correct constant of integration to get the answer in this form but
it would be nice. Though if anyone knows how to find that constant of integration would be nice. I
also add that many times prior i have had to do it myself rationalizing etc. etc. to get the answer from
maximas unwillingness to fully solve a straightforward problem. This is also a feature request to get
maxima to fully solve the problem rather than just giving an incomplete answer.
---
Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/
To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
|
From: Robert D. <rob...@us...> - 2026-04-28 04:46:23
|
For the record, I also think the DWIM inferred subscript stuff is terrible. That said, I think (1) is better than what we have now (and also preferable to (2)).
---
**[bugs:#4725] tex-array creates invalid double subscript**
**Status:** open
**Group:** None
**Created:** Mon Apr 27, 2026 07:22 PM UTC by Leo Butler
**Last Updated:** Mon Apr 27, 2026 07:22 PM UTC
**Owner:** Leo Butler
`tex-array` is used to implement the (terrible, in my opinion) dwim subscripting and to typeset array arguments as subscripts. This produces invalid TeX:
```
tex(a_1[4]);
$$a_{1}_{4}$$
```
or
```
tex(a1[4]);
$$a_{1}_{4}$$
```
There are at least two alternatives:
1. Wrap the output of `tex-array` in brace brackets. That would produce valid TeX like `{{a_{1}}_{4}}` in both cases.
2. Add a switch to disable dwim subscripting. This would also produce valid TeX (like `{\it a\_1}_{4}` or `{\it a1}_{4}`)
Attached is a patch that implements both (but only does 1. when dwim subscripting is active).
This bug was first observed in [bug #4696](https://sourceforge.net/p/maxima/bugs/4696/).
---
Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/
To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
|
From: Leo B. <l_b...@us...> - 2026-04-27 19:22:26
|
Patch. Attachments: - [0001-tex-array-braces.patch](https://sourceforge.net/p/maxima/bugs/_discuss/thread/add48bab23/8f11/attachment/0001-tex-array-braces.patch) (1.4 kB; text/x-patch) --- **[bugs:#4725] tex-array creates invalid double subscript** **Status:** open **Group:** None **Created:** Mon Apr 27, 2026 07:22 PM UTC by Leo Butler **Last Updated:** Mon Apr 27, 2026 07:22 PM UTC **Owner:** Leo Butler `tex-array` is used to implement the (terrible, in my opinion) dwim subscripting and to typeset array arguments as subscripts. This produces invalid TeX: ``` tex(a_1[4]); $$a_{1}_{4}$$ ``` or ``` tex(a1[4]); $$a_{1}_{4}$$ ``` There are at least two alternatives: 1. Wrap the output of `tex-array` in brace brackets. That would produce valid TeX like `{{a_{1}}_{4}}` in both cases. 2. Add a switch to disable dwim subscripting. This would also produce valid TeX (like `{\it a\_1}_{4}` or `{\it a1}_{4}`) Attached is a patch that implements both (but only does 1. when dwim subscripting is active). This bug was first observed in [bug #4696](https://sourceforge.net/p/maxima/bugs/4696/). --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
|
From: Leo B. <l_b...@us...> - 2026-04-27 19:22:07
|
---
**[bugs:#4725] tex-array creates invalid double subscript**
**Status:** open
**Group:** None
**Created:** Mon Apr 27, 2026 07:22 PM UTC by Leo Butler
**Last Updated:** Mon Apr 27, 2026 07:22 PM UTC
**Owner:** Leo Butler
`tex-array` is used to implement the (terrible, in my opinion) dwim subscripting and to typeset array arguments as subscripts. This produces invalid TeX:
```
tex(a_1[4]);
$$a_{1}_{4}$$
```
or
```
tex(a1[4]);
$$a_{1}_{4}$$
```
There are at least two alternatives:
1. Wrap the output of `tex-array` in brace brackets. That would produce valid TeX like `{{a_{1}}_{4}}` in both cases.
2. Add a switch to disable dwim subscripting. This would also produce valid TeX (like `{\it a\_1}_{4}` or `{\it a1}_{4}`)
Attached is a patch that implements both (but only does 1. when dwim subscripting is active).
This bug was first observed in [bug #4696](https://sourceforge.net/p/maxima/bugs/4696/).
---
Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/
To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
|
From: Robert D. <rob...@us...> - 2026-04-27 15:15:22
|
About declaring `.` and `sconcat` as n-ary, I seem to recall that Maxima's notion of n-ary-ness is equivalent to being associative in addition to being defined for arbitrary lists of arguments (maybe this coincides with a conventional understanding of the term, I dunno). I guess that implies such functions are defined for the no-arguments case, although I don't know if all n-ary functions behave that way in Maxima.
Sounds like `.` (with suitable flags) and `sconcat` have those properties; given that, it makes sense to me to declare them `nary` as well. The same considerations apply to any other such functions, I think.
---
**[bugs:#4724] xreduce with init arg and declared nary function**
**Status:** open
**Group:** None
**Created:** Sat Apr 25, 2026 05:46 PM UTC by Kris Katterjohn
**Last Updated:** Sun Apr 26, 2026 07:29 PM UTC
**Owner:** Kris Katterjohn
Users can `declare` functions to be nary; below I'll call these "just-`declare`d-nary". `xreduce` also handles certain nary cases specially (like `and`, `or`, `append`, ...); below I'll call these "special-cased-nary". (I'm too lazy to come up with less silly names.)
`xreduce` does not pass a given init arg to just-`declare`d-nary functions, but it does for special-cased-nary functions.
In the examples below `foo` is not nary, `fnary` is just-`declare`d-nary, and (the arbitrarily chosen) `and` is special-cased-nary.
~~~
(%i1) declare (fnary, nary)$
(%i2) xreduce (foo, [], 0); /* correct: the 0 is just returned */
(%o2) 0
(%i3) xreduce (fnary, [], 0); /* wrong: should be fnary(0) */
(%o3) fnary()
(%i4) xreduce ("and", [], 0); /* correct: this is from "and"(0) */
(%o4) 0
(%i5) xreduce (foo, [1, 2, 3], 0); /* correct */
(%o5) foo(foo(foo(0,1),2),3)
(%i6) xreduce (fnary, [1, 2, 3], 0); /* wrong: should be fnary(0,1,2,3) */
(%o6) fnary(1,2,3)
(%i7) xreduce ("and", [1, 2, 3], 0); /* correct */
(%o7) 0 and 1 and 2 and 3
~~~
Regarding the unary cases `%o3` and `%o4`, compare to:
~~~
(%i8) xreduce (fnary, [0]); /* this one is correct */
(%o8) fnary(0)
(%i9) xreduce ("and", [0]); /* again correct: this is also from "and"(0) */
(%o9) 0
~~~
While running the test suite (with share tests), it doesn't seem that `xreduce` is ever called with both an init arg and a just-`declare`d-nary function.
A quick look suggests that this bug was introduced in commit [5557be].
Patch below. I tried to keep with the style of the surrounding code.
~~~
diff --git a/src/nset.lisp b/src/nset.lisp
index d9970b8ed..05ed8f2d9 100644
--- a/src/nset.lisp
+++ b/src/nset.lisp
@@ -1171,8 +1171,10 @@
(funcall opfn s)))
(op-props
- ($apply f ($listify s)))
-
+ (setq s (require-list-or-set s '$xreduce))
+ (unless (eq init 'no-init)
+ (setq s (cons init s)))
+ ($apply f (cons '(mlist) s)))
(t
(rl-reduce f ($listify s) nil init '$xreduce)))))
~~~
I'll commit this patch along with some tests if there are no objections.
---
Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/
To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
|
From: Viktor T. <vt...@us...> - 2026-04-27 03:31:19
|
- **status**: open --> wont-fix - **Comment**: Marking this as "won't fix" as the proposed fix interferes with ISHOW's primary function on ASCII displays. The real issue is how a) $TEX promotes trailing digits to subscripts (which, for itensor, is not an issue, really) and b) how ISHOW's output, then, is misprocessed with only the last of several indices being processed by $TEX in this manner (which produces the inconsistent appearance.) But it is not because ISHOW is doing anything it shouldn't (it produces correct output on ASCII terminals, which is its intended behavior) but how front-ends post-process that output. --- **[bugs:#4696] tex and lurkmathml typeset itensor output incorrectly** **Status:** wont-fix **Group:** None **Labels:** tex mathml lurkmathml itensor **Created:** Wed Apr 01, 2026 06:04 PM UTC by Leo Butler **Last Updated:** Fri Apr 24, 2026 01:58 PM UTC **Owner:** Leo Butler **Attachments:** - [itensor.lisp.diff](https://sourceforge.net/p/maxima/bugs/4696/attachment/itensor.lisp.diff) (612 Bytes; text/x-patch) In `hodge.dem`, the input line: ``` ishow(canform(hodge(%))) ``` produces the output (I print the Lisp sexp, because it is otherwise hard to see that `%1 %2 %3 %4` is single symbol): ``` ((MTIMES SIMP) ((RAT SIMP) 1 6) ((MEXPT SIMP) $LEVI_CIVITA #:|$%1 %2 %3 %4|) (($G ARRAY) #:|$%1 %102|) ((|$a| ARRAY) #:|$%2 %3 %4|)) ``` It seems clear that `4` and `102` are **not** subscripts. But both `tex` and `mathml` treat them as such: ``` (mfuncall '$mathml '((MTIMES SIMP) ((RAT SIMP) 1 6) ((MEXPT SIMP) $LEVI_CIVITA #:|$%1 %2 %3 %4|) (($G ARRAY) #:|$%1 %102|) ((|$a| ARRAY) #:|$%2 %3 %4|))) <math xmlns="http://www.w3.org/1998/Math/MathML"> <mfrac><mrow><msub><mrow><mi>g</mi> </mrow><mrow> <msub><mi>%1 %</mi> <mn>102</mn></msub> </mrow></msub> <mspace width="0.16666667em"/><msub><mrow><mi>A</mi> </mrow><mrow> <msub><mi>%2 %3 %</mi> <mn>4</mn></msub> </mrow></msub> <mspace width="0.16666667em"/><msup><mrow><mi>levi_civita</mi> </mrow> <mrow> <msub><mi>%1 %2 %3 %</mi> <mn>4</mn></msub> </mrow></msup> </mrow> <mrow> <mn>6</mn> </mrow></mfrac> </math> ``` and ``` (mfuncall '$tex (caddr +)) $${{g_{{\it \%1 \%}_{102}}\,A_{{\it \%2 \%3 \%}_{4}}\,{\it levi\_civita}^{ {\it \%1 \%2 \%3 \%}_{4}}}\over{6}}$$ ``` We see that both the `4` and `102` are treated as subscripts, which seems wrong. I am inclined to think that the `itensor` output is wrong and instead of constructing a symbol like `#:|$%1 %102|`, it would be better to add a space at the end to prevent subscripting. Patch attached. --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
|
From: Robert D. <rob...@us...> - 2026-04-27 02:13:13
|
- **status**: open --> closed
- **Comment**:
Fixed by commit [ b83d81f ].
---
**[bugs:#4711] Pretty-printer slightly incorrect output for 'product\(...\)**
**Status:** closed
**Group:** None
**Labels:** display2d product
**Created:** Tue Apr 14, 2026 12:55 AM UTC by Robert Dodier
**Last Updated:** Tue Apr 14, 2026 12:55 AM UTC
**Owner:** nobody
(1) `'product(...)` within `box` shows that one of the horizontal placement values is incorrect, as shown by the `box` outline not joining up. There's an off-by-one error somewhere, I guess.
```
(%i15) box ('product (blurf (bazquux, mumble[urgh]), urgh, 1000, 1000 + 'length (mumble)));
╔════════════════════════════════════════════════╗
║ length(mumble) + 1000 ║
║─┬───┬─ ║
║ │ │ ║
(%o15) ║ │ │ blurf(bazquux, mumble )║
║ │ │ urgh ║
║ urgh = 1000 ║
╚════════════════════════════════════════════════╝
```
(2) Probably would be better to center the product symbol under the stuff above and over the stuff below.
---
Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/
To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
|
From: Stavros M. <mac...@us...> - 2026-04-26 19:29:07
|
Exactly. Is there any particular reason that **.** and **sconcat** aren't declared nary? In the case of **.**, it seems particularly important both because of **dotident** and **dotassoc**.
---
**[bugs:#4724] xreduce with init arg and declared nary function**
**Status:** open
**Group:** None
**Created:** Sat Apr 25, 2026 05:46 PM UTC by Kris Katterjohn
**Last Updated:** Sun Apr 26, 2026 01:17 AM UTC
**Owner:** Kris Katterjohn
Users can `declare` functions to be nary; below I'll call these "just-`declare`d-nary". `xreduce` also handles certain nary cases specially (like `and`, `or`, `append`, ...); below I'll call these "special-cased-nary". (I'm too lazy to come up with less silly names.)
`xreduce` does not pass a given init arg to just-`declare`d-nary functions, but it does for special-cased-nary functions.
In the examples below `foo` is not nary, `fnary` is just-`declare`d-nary, and (the arbitrarily chosen) `and` is special-cased-nary.
~~~
(%i1) declare (fnary, nary)$
(%i2) xreduce (foo, [], 0); /* correct: the 0 is just returned */
(%o2) 0
(%i3) xreduce (fnary, [], 0); /* wrong: should be fnary(0) */
(%o3) fnary()
(%i4) xreduce ("and", [], 0); /* correct: this is from "and"(0) */
(%o4) 0
(%i5) xreduce (foo, [1, 2, 3], 0); /* correct */
(%o5) foo(foo(foo(0,1),2),3)
(%i6) xreduce (fnary, [1, 2, 3], 0); /* wrong: should be fnary(0,1,2,3) */
(%o6) fnary(1,2,3)
(%i7) xreduce ("and", [1, 2, 3], 0); /* correct */
(%o7) 0 and 1 and 2 and 3
~~~
Regarding the unary cases `%o3` and `%o4`, compare to:
~~~
(%i8) xreduce (fnary, [0]); /* this one is correct */
(%o8) fnary(0)
(%i9) xreduce ("and", [0]); /* again correct: this is also from "and"(0) */
(%o9) 0
~~~
While running the test suite (with share tests), it doesn't seem that `xreduce` is ever called with both an init arg and a just-`declare`d-nary function.
A quick look suggests that this bug was introduced in commit [5557be].
Patch below. I tried to keep with the style of the surrounding code.
~~~
diff --git a/src/nset.lisp b/src/nset.lisp
index d9970b8ed..05ed8f2d9 100644
--- a/src/nset.lisp
+++ b/src/nset.lisp
@@ -1171,8 +1171,10 @@
(funcall opfn s)))
(op-props
- ($apply f ($listify s)))
-
+ (setq s (require-list-or-set s '$xreduce))
+ (unless (eq init 'no-init)
+ (setq s (cons init s)))
+ ($apply f (cons '(mlist) s)))
(t
(rl-reduce f ($listify s) nil init '$xreduce)))))
~~~
I'll commit this patch along with some tests if there are no objections.
---
Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/
To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
|
From: Kris K. <kj...@us...> - 2026-04-26 01:17:44
|
Hi Stavros.
I think I might be missing what you're really trying to get at.
I think the results of all of your examples are expected, given that `xreduce` is defined and documented to behave like `lreduce` when given a function without the `nary` property. This includes your `xreduce` examples with `"."` since (as you point out) it doesn't currently have the `nary` property.
Are you asking if we should give more nary functions the `nary` property?
---
**[bugs:#4724] xreduce with init arg and declared nary function**
**Status:** open
**Group:** None
**Created:** Sat Apr 25, 2026 05:46 PM UTC by Kris Katterjohn
**Last Updated:** Sat Apr 25, 2026 09:15 PM UTC
**Owner:** Kris Katterjohn
Users can `declare` functions to be nary; below I'll call these "just-`declare`d-nary". `xreduce` also handles certain nary cases specially (like `and`, `or`, `append`, ...); below I'll call these "special-cased-nary". (I'm too lazy to come up with less silly names.)
`xreduce` does not pass a given init arg to just-`declare`d-nary functions, but it does for special-cased-nary functions.
In the examples below `foo` is not nary, `fnary` is just-`declare`d-nary, and (the arbitrarily chosen) `and` is special-cased-nary.
~~~
(%i1) declare (fnary, nary)$
(%i2) xreduce (foo, [], 0); /* correct: the 0 is just returned */
(%o2) 0
(%i3) xreduce (fnary, [], 0); /* wrong: should be fnary(0) */
(%o3) fnary()
(%i4) xreduce ("and", [], 0); /* correct: this is from "and"(0) */
(%o4) 0
(%i5) xreduce (foo, [1, 2, 3], 0); /* correct */
(%o5) foo(foo(foo(0,1),2),3)
(%i6) xreduce (fnary, [1, 2, 3], 0); /* wrong: should be fnary(0,1,2,3) */
(%o6) fnary(1,2,3)
(%i7) xreduce ("and", [1, 2, 3], 0); /* correct */
(%o7) 0 and 1 and 2 and 3
~~~
Regarding the unary cases `%o3` and `%o4`, compare to:
~~~
(%i8) xreduce (fnary, [0]); /* this one is correct */
(%o8) fnary(0)
(%i9) xreduce ("and", [0]); /* again correct: this is also from "and"(0) */
(%o9) 0
~~~
While running the test suite (with share tests), it doesn't seem that `xreduce` is ever called with both an init arg and a just-`declare`d-nary function.
A quick look suggests that this bug was introduced in commit [5557be].
Patch below. I tried to keep with the style of the surrounding code.
~~~
diff --git a/src/nset.lisp b/src/nset.lisp
index d9970b8ed..05ed8f2d9 100644
--- a/src/nset.lisp
+++ b/src/nset.lisp
@@ -1171,8 +1171,10 @@
(funcall opfn s)))
(op-props
- ($apply f ($listify s)))
-
+ (setq s (require-list-or-set s '$xreduce))
+ (unless (eq init 'no-init)
+ (setq s (cons init s)))
+ ($apply f (cons '(mlist) s)))
(t
(rl-reduce f ($listify s) nil init '$xreduce)))))
~~~
I'll commit this patch along with some tests if there are no objections.
---
Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/
To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
|
From: Stavros M. <mac...@us...> - 2026-04-25 21:15:35
|
Kris, thanks for bringing this up. Here are some more edge cases with **xreduce**:
There seem to be some nary functions which aren't declared **nary**, and therefore aren't called with zero arguments:
~~~
sconcat() => ""
xreduce('sconcat,[]) => error
...
"."() => 1
xreduce(".",[]) => error
~~~
The base case of "." depends on **dotident**:
~~~
dotident: 'mydotident$
"."() => mydotident
~~~
Fortunately, "." does the right thing if called as nary even with **dotassoc:false**:
~~~
"."(a,b,c) => a.b.c
dotassoc:false$
"."(a,b,c) => a.(b.c)
~~~
but that isn't consistent with xreduce, which associates to the left:
~~~
xreduce(".",[a,b,c]) => (a.b).c
~~~
So should **xreduce(".", ...)** act like the nary form of **.**, or like **ldreduce** (its usual behavior)?
---
**[bugs:#4724] xreduce with init arg and declared nary function**
**Status:** open
**Group:** None
**Created:** Sat Apr 25, 2026 05:46 PM UTC by Kris Katterjohn
**Last Updated:** Sat Apr 25, 2026 07:14 PM UTC
**Owner:** Kris Katterjohn
Users can `declare` functions to be nary; below I'll call these "just-`declare`d-nary". `xreduce` also handles certain nary cases specially (like `and`, `or`, `append`, ...); below I'll call these "special-cased-nary". (I'm too lazy to come up with less silly names.)
`xreduce` does not pass a given init arg to just-`declare`d-nary functions, but it does for special-cased-nary functions.
In the examples below `foo` is not nary, `fnary` is just-`declare`d-nary, and (the arbitrarily chosen) `and` is special-cased-nary.
~~~
(%i1) declare (fnary, nary)$
(%i2) xreduce (foo, [], 0); /* correct: the 0 is just returned */
(%o2) 0
(%i3) xreduce (fnary, [], 0); /* wrong: should be fnary(0) */
(%o3) fnary()
(%i4) xreduce ("and", [], 0); /* correct: this is from "and"(0) */
(%o4) 0
(%i5) xreduce (foo, [1, 2, 3], 0); /* correct */
(%o5) foo(foo(foo(0,1),2),3)
(%i6) xreduce (fnary, [1, 2, 3], 0); /* wrong: should be fnary(0,1,2,3) */
(%o6) fnary(1,2,3)
(%i7) xreduce ("and", [1, 2, 3], 0); /* correct */
(%o7) 0 and 1 and 2 and 3
~~~
Regarding the unary cases `%o3` and `%o4`, compare to:
~~~
(%i8) xreduce (fnary, [0]); /* this one is correct */
(%o8) fnary(0)
(%i9) xreduce ("and", [0]); /* again correct: this is also from "and"(0) */
(%o9) 0
~~~
While running the test suite (with share tests), it doesn't seem that `xreduce` is ever called with both an init arg and a just-`declare`d-nary function.
A quick look suggests that this bug was introduced in commit [5557be].
Patch below. I tried to keep with the style of the surrounding code.
~~~
diff --git a/src/nset.lisp b/src/nset.lisp
index d9970b8ed..05ed8f2d9 100644
--- a/src/nset.lisp
+++ b/src/nset.lisp
@@ -1171,8 +1171,10 @@
(funcall opfn s)))
(op-props
- ($apply f ($listify s)))
-
+ (setq s (require-list-or-set s '$xreduce))
+ (unless (eq init 'no-init)
+ (setq s (cons init s)))
+ ($apply f (cons '(mlist) s)))
(t
(rl-reduce f ($listify s) nil init '$xreduce)))))
~~~
I'll commit this patch along with some tests if there are no objections.
---
Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/
To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
|
From: Kris K. <kj...@us...> - 2026-04-25 19:14:34
|
Thanks Robert. I already have a patch that includes tests for the others as well, but it (like my patch above) appears to be slightly mangled in the "code view" here in the posts. Maybe something I'm doing wrong. I was going to come back later today to try to figure out why before posting, but I'll just go ahead and post it anyway.
This covers `lreduce`, `rreduce`, `xreduce`, and `tree_reduce`, for all of the cases of empty/nonempty lists and with/without init args.
~~~
diff --git a/tests/rtestnset.mac b/tests/rtestnset.mac
index 72c63730d..ae283b19a 100644
--- a/tests/rtestnset.mac
+++ b/tests/rtestnset.mac
@@ -2004,3 +2004,174 @@ true;
is (S1 = apply(op(S1), args(S1)));
true;
+/* Tests related to bug #4724 */
+
+/* In the tests below:
+ *
+ * * foo is not nary
+ * * fnary is declare'd nary
+ * * "and" is nary and handled specially by xreduce
+ */
+
+(kill (foo, fnary),
+ declare (fnary, nary),
+ 0)$
+0$
+
+/* Empty list and no init arg */
+
+errcatch (lreduce (foo, []))$
+[]$
+
+errcatch (lreduce (fnary, []))$
+[]$
+
+errcatch (lreduce ("and", []))$
+[]$
+
+errcatch (rreduce (foo, []))$
+[]$
+
+errcatch (rreduce (fnary, []))$
+[]$
+
+errcatch (rreduce ("and", []))$
+[]$
+
+errcatch (xreduce (foo, []))$
+[]$
+
+xreduce (fnary, [])$
+fnary ()$
+
+xreduce ("and", [])$
+true$
+
+errcatch (tree_reduce (foo, []))$
+[]$
+
+errcatch (tree_reduce (fnary, []))$
+[]$
+
+errcatch (tree_reduce ("and", []))$
+[]$
+
+/* Empty list and init arg */
+
+lreduce (foo, [], 13)$
+13$
+
+lreduce (fnary, [], 13)$
+13$
+
+lreduce ("and", [], 13)$
+13$
+
+rreduce (foo, [], 13)$
+13$
+
+rreduce (fnary, [], 13)$
+13$
+
+rreduce ("and", [], 13)$
+13$
+
+xreduce (foo, [], 13)$
+13$
+
+xreduce (fnary, [], 13)$
+fnary (13)$
+
+xreduce ("and", [], 13)$
+13$
+
+tree_reduce (foo, [], 13)$
+13$
+
+tree_reduce (fnary, [], 13)$
+13$
+
+tree_reduce ("and", [], 13)$
+13$
+
+/* Nonempty list and no init arg */
+
+lreduce (foo, [1, 2, 3, 4])$
+foo (foo (foo (1, 2), 3), 4)$
+
+lreduce (fnary, [1, 2, 3, 4])$
+fnary (1, 2, 3, 4)$
+
+lreduce ("and", [1, 2, 3, 4])$
+1 and 2 and 3 and 4$
+
+rreduce (foo, [1, 2, 3, 4])$
+foo (1, foo (2, foo (3, 4)))$
+
+rreduce (fnary, [1, 2, 3, 4])$
+fnary (1, 2, 3, 4)$
+
+rreduce ("and", [1, 2, 3, 4])$
+1 and 2 and 3 and 4$
+
+xreduce (foo, [1, 2, 3, 4])$
+foo (foo (foo (1, 2), 3), 4)$
+
+xreduce (fnary, [1, 2, 3, 4])$
+fnary (1, 2, 3, 4)$
+
+xreduce ("and", [1, 2, 3, 4])$
+1 and 2 and 3 and 4$
+
+tree_reduce (foo, [1, 2, 3, 4])$
+foo(foo (1, 2), foo (3, 4))$
+
+tree_reduce (fnary, [1, 2, 3, 4])$
+fnary (1, 2, 3, 4)$
+
+tree_reduce ("and", [1, 2, 3, 4])$
+1 and 2 and 3 and 4$
+
+/* Nonempty list and init arg */
+
+lreduce (foo, [1, 2, 3, 4], 13)$
+foo (foo (foo (foo (13, 1), 2), 3), 4)$
+
+lreduce (fnary, [1, 2, 3, 4], 13)$
+fnary (13, 1, 2, 3, 4)$
+
+lreduce ("and", [1, 2, 3, 4], 13)$
+13 and 1 and 2 and 3 and 4$
+
+rreduce (foo, [1, 2, 3, 4], 13)$
+foo (1, foo (2, foo (3, foo (4, 13))))$
+
+rreduce (fnary, [1, 2, 3, 4], 13)$
+fnary (1, 2, 3, 4, 13)$
+
+rreduce ("and", [1, 2, 3, 4], 13)$
+1 and 2 and 3 and 4 and 13$
+
+xreduce (foo, [1, 2, 3, 4], 13)$
+foo (foo (foo (foo (13, 1), 2), 3), 4)$
+
+xreduce (fnary, [1, 2, 3, 4], 13)$
+fnary (13, 1, 2, 3, 4)$
+
+xreduce ("and", [1, 2, 3, 4], 13)$
+13 and 1 and 2 and 3 and 4$
+
+tree_reduce (foo, [1, 2, 3, 4], 13)$
+foo(foo (foo (13, 1), foo (2, 3)), 4)$
+
+tree_reduce (fnary, [1, 2, 3, 4], 13)$
+fnary (13, 1, 2, 3, 4)$
+
+tree_reduce ("and", [1, 2, 3, 4], 13)$
+13 and 1 and 2 and 3 and 4$
+
+(kill (fnary), 0)$
+0$
+
+/* End of tests related to bug #4724 */
+
~~~
---
**[bugs:#4724] xreduce with init arg and declared nary function**
**Status:** open
**Group:** None
**Created:** Sat Apr 25, 2026 05:46 PM UTC by Kris Katterjohn
**Last Updated:** Sat Apr 25, 2026 06:40 PM UTC
**Owner:** Kris Katterjohn
Users can `declare` functions to be nary; below I'll call these "just-`declare`d-nary". `xreduce` also handles certain nary cases specially (like `and`, `or`, `append`, ...); below I'll call these "special-cased-nary". (I'm too lazy to come up with less silly names.)
`xreduce` does not pass a given init arg to just-`declare`d-nary functions, but it does for special-cased-nary functions.
In the examples below `foo` is not nary, `fnary` is just-`declare`d-nary, and (the arbitrarily chosen) `and` is special-cased-nary.
~~~
(%i1) declare (fnary, nary)$
(%i2) xreduce (foo, [], 0); /* correct: the 0 is just returned */
(%o2) 0
(%i3) xreduce (fnary, [], 0); /* wrong: should be fnary(0) */
(%o3) fnary()
(%i4) xreduce ("and", [], 0); /* correct: this is from "and"(0) */
(%o4) 0
(%i5) xreduce (foo, [1, 2, 3], 0); /* correct */
(%o5) foo(foo(foo(0,1),2),3)
(%i6) xreduce (fnary, [1, 2, 3], 0); /* wrong: should be fnary(0,1,2,3) */
(%o6) fnary(1,2,3)
(%i7) xreduce ("and", [1, 2, 3], 0); /* correct */
(%o7) 0 and 1 and 2 and 3
~~~
Regarding the unary cases `%o3` and `%o4`, compare to:
~~~
(%i8) xreduce (fnary, [0]); /* this one is correct */
(%o8) fnary(0)
(%i9) xreduce ("and", [0]); /* again correct: this is also from "and"(0) */
(%o9) 0
~~~
While running the test suite (with share tests), it doesn't seem that `xreduce` is ever called with both an init arg and a just-`declare`d-nary function.
A quick look suggests that this bug was introduced in commit [5557be].
Patch below. I tried to keep with the style of the surrounding code.
~~~
diff --git a/src/nset.lisp b/src/nset.lisp
index d9970b8ed..05ed8f2d9 100644
--- a/src/nset.lisp
+++ b/src/nset.lisp
@@ -1171,8 +1171,10 @@
(funcall opfn s)))
(op-props
- ($apply f ($listify s)))
-
+ (setq s (require-list-or-set s '$xreduce))
+ (unless (eq init 'no-init)
+ (setq s (cons init s)))
+ ($apply f (cons '(mlist) s)))
(t
(rl-reduce f ($listify s) nil init '$xreduce)))))
~~~
I'll commit this patch along with some tests if there are no objections.
---
Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/
To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
|
From: Robert D. <rob...@us...> - 2026-04-25 18:40:32
|
Agreed that user-defined and built-in operators should act the same.
I see that `lreduce`, `rreduce`, and `tree_reduce` also take an initial value as an argument. Maybe while we're at it, we can ensure that those have the same behavior as `xreduce`.
---
**[bugs:#4724] xreduce with init arg and declared nary function**
**Status:** open
**Group:** None
**Created:** Sat Apr 25, 2026 05:46 PM UTC by Kris Katterjohn
**Last Updated:** Sat Apr 25, 2026 05:46 PM UTC
**Owner:** Kris Katterjohn
Users can `declare` functions to be nary; below I'll call these "just-`declare`d-nary". `xreduce` also handles certain nary cases specially (like `and`, `or`, `append`, ...); below I'll call these "special-cased-nary". (I'm too lazy to come up with less silly names.)
`xreduce` does not pass a given init arg to just-`declare`d-nary functions, but it does for special-cased-nary functions.
In the examples below `foo` is not nary, `fnary` is just-`declare`d-nary, and (the arbitrarily chosen) `and` is special-cased-nary.
~~~
(%i1) declare (fnary, nary)$
(%i2) xreduce (foo, [], 0); /* correct: the 0 is just returned */
(%o2) 0
(%i3) xreduce (fnary, [], 0); /* wrong: should be fnary(0) */
(%o3) fnary()
(%i4) xreduce ("and", [], 0); /* correct: this is from "and"(0) */
(%o4) 0
(%i5) xreduce (foo, [1, 2, 3], 0); /* correct */
(%o5) foo(foo(foo(0,1),2),3)
(%i6) xreduce (fnary, [1, 2, 3], 0); /* wrong: should be fnary(0,1,2,3) */
(%o6) fnary(1,2,3)
(%i7) xreduce ("and", [1, 2, 3], 0); /* correct */
(%o7) 0 and 1 and 2 and 3
~~~
Regarding the unary cases `%o3` and `%o4`, compare to:
~~~
(%i8) xreduce (fnary, [0]); /* this one is correct */
(%o8) fnary(0)
(%i9) xreduce ("and", [0]); /* again correct: this is also from "and"(0) */
(%o9) 0
~~~
While running the test suite (with share tests), it doesn't seem that `xreduce` is ever called with both an init arg and a just-`declare`d-nary function.
A quick look suggests that this bug was introduced in commit [5557be].
Patch below. I tried to keep with the style of the surrounding code.
~~~
diff --git a/src/nset.lisp b/src/nset.lisp
index d9970b8ed..05ed8f2d9 100644
--- a/src/nset.lisp
+++ b/src/nset.lisp
@@ -1171,8 +1171,10 @@
(funcall opfn s)))
(op-props
- ($apply f ($listify s)))
-
+ (setq s (require-list-or-set s '$xreduce))
+ (unless (eq init 'no-init)
+ (setq s (cons init s)))
+ ($apply f (cons '(mlist) s)))
(t
(rl-reduce f ($listify s) nil init '$xreduce)))))
~~~
I'll commit this patch along with some tests if there are no objections.
---
Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/
To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |