# [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 *