nm

11643 Reputation

20 Badges

13 years, 144 days

MaplePrimes Activity


These are questions asked by nm

In 2025.2, I found that calling Physics:-Setup causes code of `convert/diff` to change (on the fly) causing error.

I removed from my code the places I was calling Physics:-Setup explicitly, but the error still shows up. Which means there is still places in the code to cause Physics to come into play.

I just installed 2025.2 and have not done anything yet. Just running a test. 

Does one need to install Physics package?

First, let me give an example showing that calling Physics:-Setup changes `convert/diff` which ends up causing an internal Maple error

interface(version);

`Standard Worksheet Interface, Maple 2025.2, Windows 10, November 11 2025 Build ID 1971053`

SupportTools:-Version();

`The Customer Support Updates version in the MapleCloud is 29 and is the same as the version installed in this computer, created June 23, 2025, 10:25 hours Eastern Time.`

Physics:-Version();

`The "Physics Updates" package is not available for the version of Maple under development`

restart;

Original result. No problem

 

print(`convert/diff`);

proc (a, { useeval::truefalse := false }) local ee, zD; ee := `PDEtools/usediff`(a); zD := indets(ee, 'And(function, satisfies(proc (f) options operator, arrow; (op(0, f))::`PDEtools/D/structure` end proc))'); if zD = {} then ee else _Env_t_in_use := `tools/get_symbols`(a); if useeval then zD := map(`convert/diff/D_to_eval@diff`, zD, ':-useEval'); zD := map(proc (u) options operator, arrow; lhs(u) = subsop(0 = eval, rhs(u)) end proc, zD); subs(zD, ee) else subs(map(`convert/diff/D_to_eval@diff`, zD), a) end if end if end proc

T:=D(x)(infinity):

PDEtools:-difforder(convert(T,diff))

1

 

 

 

After call Physics:-Setup

 

restart;

Physics:-Setup('assumingusesAssume' = false):

print(`convert/diff`);

proc () local ans; ans := usepdiff(args); if has([ans], 'D') then ans := Physics:-OriginalValue["convert/diff"](ans, args[2 .. -1]) end if; ans end proc

T:=D(x)(infinity):

PDEtools:-difforder(convert(T,diff))

Error, (in unknown) invalid input: diff received infinity, which is not valid for its 2nd argument

 

 

 

 

Download why_code_changes_calling_Physics_maple_2025_2_nov_24_2025.mw

Notice that now calling PDEtools:-difforder(convert(T,diff))  fail because Physics:- was called.

But my code now has no calls to Physics:-, I made sure to comment all those out. 

But I still get same error when I run my test program. Not able to find where Physics is "activated" again to cause the code change in `convert/diff` that happens dynamically when Physics is loaded.

It must be happining on different call internally. But have no idea why and where.

This is all on new PC. I have no Maple ini files or anything like this that can cause this.

Will installing Physics package explicity fixes this?   

 

Update

I think I know why this happens. Not all fixes made by Edgardo S. Cheb-Terrab in last Physics update are included in Maple 2025.2 !

See https://mapleprimes.com/questions/240843-Why-PDEtoolsSolve-Fail-On-This-Equation  where fix is made in Physics  v.1880 which I confirmed in Maple 2025.1.

But now I checked and this problem is back in Maple 2025.2. which means that fix was not merged into Maple 2025.2. How could this happen?


 

interface(version);

`Standard Worksheet Interface, Maple 2025.2, Windows 10, November 11 2025 Build ID 1971053`

Physics:-Version();

`The "Physics Updates" package is not available for the version of Maple under development`

SupportTools:-Version();

`The Customer Support Updates version in the MapleCloud is 29 and is the same as the version installed in this computer, created June 23, 2025, 10:25 hours Eastern Time.`

restart;

eq:=D(y)(0)+1 = 0;
solve(eq,D(y)(0));

(D(y))(0)+1 = 0

-1

PDEtools:-Solve(eq,D(y)(0));

Error, (in PDEtools:-Solve) required an indication of the solving variables for the given system

 


 

Download fixed_in_2025_1_but_missing_in_2025_2.mw

So I am hoping that figuring how to install Physics update in Maple 2025.2 will fix the current problem with convert and also bring that old fix for PDEtools:-Solve back into Maple 2025.2.

This is something that Maplesoft should have taken care of.

Update 

Figured how install Physics update package V 1881 and doing so fixed this problem in Maple 2025.2 !

This tells me that all fixes that were in Physics update package were not merged into Maple 2025.2

This worksheet shows that now code works OK, but need to make sure to install Physics update package in Maple 2025.2

interface(version);

`Standard Worksheet Interface, Maple 2025.2, Windows 10, November 11 2025 Build ID 1971053`

SupportTools:-Version();

`The Customer Support Updates version in the MapleCloud is 29 and is the same as the version installed in this computer, created June 23, 2025, 10:25 hours Eastern Time.`

Physics:-Version();

`The "Physics Updates" version in the MapleCloud is 1881 and is the same as the version installed in this computer, created 2025, October 7, 16:4 hours Pacific Time.`

restart;

Original result. No problem

 

print(`convert/diff`);

proc (a, { useeval::truefalse := false }) local ee, zD; ee := `PDEtools/usediff`(a); zD := indets(ee, 'And(function, satisfies(proc (f) options operator, arrow; (op(0, f))::`PDEtools/D/structure` end proc))'); if zD = {} then ee else _Env_t_in_use := `tools/get_symbols`(a); if useeval then zD := map(`convert/diff/D_to_eval@diff`, zD, ':-useEval'); zD := map(proc (u) options operator, arrow; lhs(u) = subsop(0 = eval, rhs(u)) end proc, zD); subs(zD, ee) else subs(map(`convert/diff/D_to_eval@diff`, zD), a) end if end if end proc

T:=D(x)(infinity):

PDEtools:-difforder(convert(T,diff))

1

 

 

 

After call Physics:-Setup. now works OK since Physics update is installed

 

restart;

Physics:-Setup('assumingusesAssume' = false):

print(`convert/diff`);

proc () local ans; ans := usepdiff(args); if has([ans], 'D') then ans := Physics:-OriginalValue["convert/diff"](ans, args[2 .. -1]) end if; ans end proc

T:=D(x)(infinity):

PDEtools:-difforder(convert(T,diff))

1

 

 

 

Download why_code_changes_calling_Physics_maple_2025_2_nov_24_2025_V2.mw

 

I am finding many problems using overload in OOP.

But for starter, here is a basic one that does not use Object. Will make separate question for other issues once I figure this basic one out.

I have overload with two procs.

First proc takes 2 arguments of type string, and the second proc one argument also of type string.

When calling the overloaded proc with one argument or two arguments, it always calls the first one which takes 2 arguments.

It never calls the second, even though the call is using one argument only. It always matchs the first proc.

It seems Maple just checks if the first argument match and stops.

I also made sure to use $ for end of arguments flag.

Now when changing the order and putting as the first proc the one that take one argument and the second proc which takes two arguments, now it works. Maple calls the correct proc based on the number of arguments.

How could this be possible? Is order of procs in overload important?? How does one then figure the correct order. It should be based on match of signature of proc, not the order. i.e. match made based on number and type of arguments. 

Is there a way to make the first one work as is without having to worry about order? Or Am I making mistake somewhere?

restart;

interface(version);

`Standard Worksheet Interface, Maple 2025.1, Linux, June 12 2025 Build ID 1932578`

restart;

set_name :=overload(
        [     
            proc(first_name::string,last_name::string,$) option overload;
                print("in proc which takes two arguments");
            end,
       
            proc(the_name::string,$) option overload;
                 print("in proc which takes one argument");
            end          
        ]
    ):

set_name("me"); #why this call the first proc and not the second?

"in proc which takes two arguments"

set_name("me","joe");

"in proc which takes two arguments"

restart;

#change order of procs in list
set_name :=overload(
        [            
            proc(the_name::string,$) option overload;
                 print("in proc which takes one argument");
            end,      

            proc(first_name::string,last_name::string,$) option overload;
                print("in proc which takes two arguments");
            end       
        ]
    ):

set_name("me");

"in proc which takes one argument"

set_name("me","joe");

"in proc which takes two arguments"

 

 

Download why_order_makes_differenence_in_overload_nov_1_2025.mw

Solving an ode, dsolve says it used exact method and gives two solutions as result (correct result).

But when asking dsolve to solve same ode but now specifying that it uses exact method (i.e. same one it used itself before), now it gives one solution only, not two as before.

Why is that? Should not both commands give same result? i.e. two solutions?

interface(version);

`Standard Worksheet Interface, Maple 2025.1, Linux, June 12 2025 Build ID 1932578`

SupportTools:-Version()

`The Customer Support Updates version in the MapleCloud is 29 and is the same as the version installed in this computer, created June 23, 2025, 10:25 hours Eastern Time.`

Physics:-Version()

`The "Physics Updates" version in the MapleCloud is 1881 and is the same as the version installed in this computer, created 2025, October 7, 16:4 hours Pacific Time.`

restart;

ode:=3*y(x)^3*x^2+y(x)^4+(3*x^3*y(x)^2+y(x)^4+4*x*y(x)^3)*diff(y(x),x) = 0;
DEtools:-odeadvisor(ode);
infolevel[dsolve]:=5:

3*y(x)^3*x^2+y(x)^4+(3*x^3*y(x)^2+y(x)^4+4*x*y(x)^3)*(diff(y(x), x)) = 0

[_exact, _rational]

sol:=dsolve(ode); #gives two solutions

Classification methods on request

Methods to be used are: [exact]

----------------------------

* Tackling ODE using method: exact

--- Trying classification methods ---

trying exact

<- exact successful

y(x) = 0, x*y(x)^4+x^3*y(x)^3+(1/5)*y(x)^5+c__1 = 0

maple_sol:=dsolve(ode,[exact]);  #why y=0 solution do not show here??

Classification methods on request

Methods to be used are: [exact]

----------------------------

* Tackling ODE using method: exact

--- Trying classification methods ---

trying exact

<- exact successful

x*y(x)^4+x^3*y(x)^3+(1/5)*y(x)^5+c__1 = 0

sol:=dsolve(ode); #gives two solutions again

Classification methods on request

Methods to be used are: [exact]

----------------------------

* Tackling ODE using method: exact

--- Trying classification methods ---

trying exact

<- exact successful

y(x) = 0, x*y(x)^4+x^3*y(x)^3+(1/5)*y(x)^5+c__1 = 0

 

 

Download why_different_solutions_maple_2025_1_oct_22_2025.mw

When solution was obtained using earlier call to solve with _EnvAllSolutions := true: set, then odetest givens internal error.

When _EnvAllSolutions := false: then no error.

Why? And is there a workaround so I can use _EnvAllSolutions := true: but have odetest still work?

interface(version);

`Standard Worksheet Interface, Maple 2025.1, Linux, June 12 2025 Build ID 1932578`

Physics:-Version();

`The "Physics Updates" version in the MapleCloud is 1881 and is the same as the version installed in this computer, created 2025, October 7, 16:4 hours Pacific Time.`

SupportTools:-Version();

`The Customer Support Updates version in the MapleCloud is 29 and is the same as the version installed in this computer, created June 23, 2025, 10:25 hours Eastern Time.`

 

Example fail when using _EnvAllSolutions := true:

 

restart;

kernelopts('assertlevel'=2):

ode:=diff(y(x),x) = ln(1+y(x)^2);
IC:=y(0)=0;
x0:=0;
sol:=y(x) = -sqrt(-1 + exp(RootOf(-Intat(-1/(2*tau*sqrt(-1 + exp(tau))*exp(-tau)), tau = _Z) + x + _C2)));

eq:=0=eval(rhs(sol),x=x0);
_EnvAllSolutions := true:
_EnvExplicit := true:
sol_C:=_C2=solve(eq,_C2);
sol:=eval(sol,sol_C);
odetest(%,[ode,IC])

diff(y(x), x) = ln(1+y(x)^2)

y(0) = 0

0

y(x) = -(-1+exp(RootOf(-Intat(-(1/2)/(tau*(-1+exp(tau))^(1/2)*exp(-tau)), tau = _Z)+x+_C2)))^(1/2)

0 = -(-1+exp(RootOf(-Intat(-(1/2)/(tau*(-1+exp(tau))^(1/2)*exp(-tau)), tau = _Z)+_C2)))^(1/2)

_C2 = Intat(-(1/2)*exp(tau)/(tau*(-1+exp(tau))^(1/2)), tau = (2*I)*Pi*_Z1)

y(x) = -(-1+exp(RootOf(-Intat(-(1/2)/(tau*(-1+exp(tau))^(1/2)*exp(-tau)), tau = _Z)+x+Intat(-(1/2)*exp(tau)/(tau*(-1+exp(tau))^(1/2)), tau = (2*I)*Pi*_Z1))))^(1/2)

Error, (in series/csgn) assertion failed

 

Example Works  when using _EnvAllSolutions := false:

 

restart;

kernelopts('assertlevel'=2):

ode:=diff(y(x),x) = ln(1+y(x)^2);
IC:=y(0)=0;
x0:=0;
sol:=y(x) = -sqrt(-1 + exp(RootOf(-Intat(-1/(2*tau*sqrt(-1 + exp(tau))*exp(-tau)), tau = _Z) + x + _C2)));

eq:=0=eval(rhs(sol),x=x0);
_EnvAllSolutions := false:
_EnvExplicit := true:
sol_C:=_C2=solve(eq,_C2);
sol:=eval(sol,sol_C);
odetest(%,[ode,IC])

diff(y(x), x) = ln(1+y(x)^2)

y(0) = 0

0

y(x) = -(-1+exp(RootOf(-Intat(-(1/2)/(tau*(-1+exp(tau))^(1/2)*exp(-tau)), tau = _Z)+x+_C2)))^(1/2)

0 = -(-1+exp(RootOf(-Intat(-(1/2)/(tau*(-1+exp(tau))^(1/2)*exp(-tau)), tau = _Z)+_C2)))^(1/2)

_C2 = Intat(-(1/2)*exp(tau)/(tau*(-1+exp(tau))^(1/2)), tau = 0)

y(x) = -(-1+exp(RootOf(-Intat(-(1/2)/(tau*(-1+exp(tau))^(1/2)*exp(-tau)), tau = _Z)+x+Intat(-(1/2)*exp(tau)/(tau*(-1+exp(tau))^(1/2)), tau = 0))))^(1/2)

[RootOf(Intat(exp(tau)/(tau*(-1+exp(tau))^(1/2)), tau = _Z)+2*x-Intat(exp(tau)/(tau*(-1+exp(tau))^(1/2)), tau = 0))-ln(exp(RootOf(Intat(exp(tau)/(tau*(-1+exp(tau))^(1/2)), tau = _Z)+2*x-Intat(exp(tau)/(tau*(-1+exp(tau))^(1/2)), tau = 0)))), 0]

 

 

 

 

Download odetest_fail_when_using_envAllsol_maple_2025_1_oct_21_2025.mw

The nice addition added to Maple 2022 in this  post made it clear that c__1 and _C1 are the same under the cover.

But then why in Maple 2025.1 it does not give this?

I found this when I was trying to find constants of integrations in solution of an ode, and used 

                 indets(sol,And(symbol, suffixed(_C, nonnegint))); 

Which did not find the constants of integration, since I happened to have typed the solution using c__1 and not _C1, but I thought they are the same.

Did something change or I still dont understand well the difference between c__1 and _C1 ?

Worksheet below.

interface(version);

`Standard Worksheet Interface, Maple 2025.1, Linux, June 12 2025 Build ID 1932578`

SupportTools:-Version();

`The Customer Support Updates version in the MapleCloud is 29 and is the same as the version installed in this computer, created June 23, 2025, 10:25 hours Eastern Time.`

Physics:-Version();

`The "Physics Updates" version in the MapleCloud is 1881 and is the same as the version installed in this computer, created 2025, October 7, 16:4 hours Pacific Time.`

restart;

sol:= y(x)=-cos(x)/2+sin(x)/2+c__1*exp(-x);
indets(sol,And(symbol, suffixed(_C, nonnegint)));

y(x) = -(1/2)*cos(x)+(1/2)*sin(x)+c__1*exp(-x)

{}

sol:= y(x)=-cos(x)/2+sin(x)/2+c__1*exp(-x);
indets(sol,And(symbol, suffixed(c__, nonnegint)));

y(x) = -(1/2)*cos(x)+(1/2)*sin(x)+c__1*exp(-x)

{c__1}

sol:= y(x)=-cos(x)/2+sin(x)/2+_C1*exp(-x);
indets(sol,And(symbol, suffixed(c__, nonnegint)));

y(x) = -(1/2)*cos(x)+(1/2)*sin(x)+_C1*exp(-x)

{}

sol:= y(x)=-cos(x)/2+sin(x)/2+_C1*exp(-x);
indets(sol,And(symbol, suffixed(_C, nonnegint)));

y(x) = -(1/2)*cos(x)+(1/2)*sin(x)+_C1*exp(-x)

{_C1}

c__1 - _C1

c__1-_C1

addressof(c__1);

36893628553737883996

addressof(_C1);

36893628553623934140

Download why_c1_and_C1_not_same_oct_19_2025.mw

Update

Found out why. This only works if one calls dsolve() first.  Here is an example

sol:=dsolve(diff(y(x),x)=x)

y(x) = (1/2)*x^2+c__1

c__1 - _C1;

0

indets(sol,And(symbol, suffixed(_C, nonnegint)));

{c__1}

restart;

my_sol:=y(x)=(x^2)/2+c__1;

y(x) = (1/2)*x^2+c__1

c__1 - _C1;

c__1-_C1

indets(my_sol,And(symbol, suffixed(_C, nonnegint)));

{}

 

 

Download why_c1_and_C1_not_same_oct_19_2025_V1.mw

But this is really confusing. c__1 before calling dsolve is not the same as c__1 after calling dsolve.

It will be better if Maple is changed such that these work the same all the time without having to call dsolve() first.

1 2 3 4 5 6 7 Last Page 3 of 205