[GiNaC-list] Collect() with a list of variables doesn't work in ginsh

Vladimir V. Kisil V.Kisil at leeds.ac.uk
Wed Mar 17 16:44:46 CET 2021


>>>>> On Wed, 17 Mar 2021 14:57:57 +0100, Vitaly Magerya <vmagerya at gmail.com> said:

    VM> Hi, all. In section 5.7.2 of the docs (Expanding and collecting)
    VM> there is this example of ginsh usage:

    >> a=expand((sin(x)+sin(y))*(1+p+q)*(1+d)); collect(a,{p,q});

    VM> The docs say I should get this:

    VM>     d*sin(x)+(d*sin(x)+sin(y)+d*sin(y)+sin(x))*p

    VM> ... but actually:

    VM>     cannot modify multiply referenced object

    VM> This is with GiNaC V1.7.6, V1.7.8, and the latest commit of
    VM> V1.8.0.

    VM> How do I make this work?

    Running the code

from cginac import *
x=realsymbol("x")
y=realsymbol("y")
p=realsymbol("p")
q=realsymbol("q")
d=realsymbol("d")
a=expand((sin(x)+sin(y))*(1+p+q)*(1+d))
print(a.collect([p,q]))

  with in PyGiNaC [1] with GiNaC 1.8.0 produces:

sin(x)+d*sin(x)+q*(sin(x)+d*sin(x)+sin(y)+d*sin(y))+sin(y)+p*(sin(x)+d*sin(x)+sin(y)+d*sin(y))+d*sin(y)

  Thus, the issue can be with ginsh itself.

  Do not treat this is an advert of PyGiNaC, but if you are looking for more
  ginsh-ish behaviour, the previous code can be replaced by:
  
from cginac import *
reader=parser()
a=reader("(sin(x)+sin(y))*(1+p+q)*(1+d)").expand()
print(a.collect([reader("p"),reader("q")]))

1. V.V. Kisil, What is PyGiNaC, anyway?,  http://moebinv.sourceforge.net/pyGiNaC.html
-- 
Vladimir V. Kisil                 http://www.maths.leeds.ac.uk/~kisilv/
  Book:      Geometry of Mobius Maps       https://doi.org/10.1142/p835
  Soft:      Geometry of cycles         http://moebinv.sourceforge.net/
  Jupyter notebooks:       https://github.com/vvkisil/MoebInv-notebooks


More information about the GiNaC-list mailing list