[GiNaC-list] comparing symbols

Chris Bouchard cbouchrd at illinois.edu
Thu Jul 24 20:52:09 CEST 2008


Hi,

>I don't think this situation is possible (modulo compiler bugs and
>things like that).
>
>$ cat test.cc
>#include <ginac/ginac.h>
>#include <iostream>
>using namespace GiNaC;
>using namespace std;
>
>int main(int argc, char** argv)
>{
>        lst x;
>        x = ex(0), ex(1);
>        if (is_a<symbol>(x.op(0))) {
>                cerr << "Huh, 0 is a symbol?" << endl;
>                return 1;
>        }
>        return 0;
>}
>$ g++ test.cc -lginac
>$ ./a.out
>$ echo $?
>0

Hmmm... that seems to make sense.  For sake of clarity I've pasted code fragment below followed by associated output. 

Code fragment
-------------
...
namespace xloops {

static ex r_sum(const ex& t, const lst& b, const lst& x, const ex& eps, int order)
{

// class of arguments
cout << "t is class mul?: " << is_a<mul>(t) << "\n"; 
cout << "b is class list?: " << is_a<lst>(b)<< "\n";                    
cout << "b.op(0) is class add?: " << is_a<add>(b.op(0)) << "\n";         
cout << "b.op(1) is class numeric?: " << is_a<numeric>(b.op(1)) << "\n"; 
cout << "x is class list?: " << is_a<lst>(x) << "\n";
cout << "x.op(0) is class symbol?: " << is_a<symbol>(x.op(0)) << "\n";   
cout << "x.op(0) is class mul?: " << is_a<mul>(x.op(0)) << "\n";   
cout << "x.op(0) is class numeric?: " << is_a<numeric>(x.op(0)) << "\n";   
cout << "x.op(0) is class add?: " << is_a<add>(x.op(0)) << "\n";   
cout << "x.op(1) is class symbol?: " << is_a<symbol>(x.op(1)) << "\n";
cout << "x.op(1) is class mul?: " << is_a<mul>(x.op(1)) << "\n";   
cout << "x.op(1) is class numeric?: " << is_a<numeric>(x.op(1)) << "\n";   
cout << "x.op(1) is class add?: " << is_a<add>(x.op(1)) << "\n";     
cout << "eps is class symbol?: " << is_a<symbol>(eps) << "\n";   

// value of arguments
cout << "t = " << t << "\n";
cout << "b = " << b << "\n";
cout << "x = " << x << "\n";
cout << "eps = " << eps << "\n";

...
}


Output
------
t is class mul?: 1
b is class list?: 1
b.op(0) is class add?: 1
b.op(1) is class numeric?: 1
x is class list?: 1
x.op(0) is class symbol?: 1
x.op(0) is class mul?: 0
x.op(0) is class numeric?: 0
x.op(0) is class add?: 0
x.op(1) is class symbol?: 1
x.op(1) is class mul?: 0
x.op(1) is class numeric?: 0
x.op(1) is class add?: 0
eps is class symbol?: 1
t = -eps
b = {-1/2+eps,1}
x = {0,1}
eps = eps


Is there any other information I could provide to shed light
on this? 

Sincerely,
Chris Bouchard


More information about the GiNaC-list mailing list