[GiNaC-list] GiNaC Match Documentation

Mark Round mround at risc.jku.at
Tue Aug 13 11:35:45 CEST 2013


I have been encountering problems with the GiNaC function match. 
Basically I can not understand the documentation. I wanted to detail my 
story in the hope that perhaps my problems are solved and in the future 
someone else can avoid my pitfalls.

The documentation informs me that I need an associative array. I can not 
find how to construct such an array elsewhere in the documentation so I 
assume that I am supposed to use exhashmap. That was a point of 
confusion for me. Then I designed the following code snipet,

symbol x("x"), y("y");
ex tmp=x+y;
exhashmap <ex> array;

tmp.match(wild(1)+y);

which apparently works fine. Now I wish to fill 'array' with the 
replacement table. So I modified to,

tmp.match(wild(1)+y,array);

which returned the following compiler messages,

momentum_integration.cpp: In function ‘GiNaC::ex 
bring_to_parameterisable_form(GiNaC::ex)’:
momentum_integration.cpp:13:33: error: no matching function for call to 
‘GiNaC::ex::match(const GiNaC::ex, GiNaC::exhashmap<GiNaC::ex>&)’
momentum_integration.cpp:13:33: note: candidates are:
In file included from /usr/include/ginac/ginac.h:30:0,
from momentum_integration.h:14,
from momentum_integration.cpp:1:
/usr/include/ginac/ex.h:150:7: note: bool GiNaC::ex::match(const 
GiNaC::ex&) const
/usr/include/ginac/ex.h:150:7: note: candidate expects 1 argument, 2 
provided
/usr/include/ginac/ex.h:151:7: note: bool GiNaC::ex::match(const 
GiNaC::ex&, GiNaC::exmap&) const
/usr/include/ginac/ex.h:151:7: note: no known conversion for argument 2 
from ‘GiNaC::exhashmap<GiNaC::ex>’ to ‘GiNaC::exmap& {aka 
std::map<GiNaC::ex, GiNaC::ex, GiNaC::ex_is_less>&}’
make: *** [momentum_integration.o] Error 1

I attempted to use the command exmap but I can not find anything on that 
in the documentation. I tried several permutations around,

exmap <ex,ex> array;

which made the compiler return,

momentum_integration.cpp: In function ‘GiNaC::ex 
bring_to_parameterisable_form(GiNaC::ex)’:
momentum_integration.cpp:11:8: error: ‘GiNaC::exmap {aka 
std::map<GiNaC::ex, GiNaC::ex, GiNaC::ex_is_less>}’ is not a template
make: *** [momentum_integration.o] Error 1

At which point it is unclear to me what else I should try.

The code was ran on a 64-bit Linux Mint-Debian distribution with 
ginac-1.6.2.


More information about the GiNaC-list mailing list