Hello, Vladimir! On Wed, Oct 18, 2006 at 03:55:35PM +0100, Vladimir Kisil wrote:
Your exam works smoothly on my computer with CVS GiNaC, expression e is evaluated to gamma~mu, is it correct? Have you applied my patch to ex.h?
ASh> 2) In general, is it OK for class derived from indexed return ASh> something which is *not* idx (or derived from it) via op()?
One of the reasons why clifford class returns its metric among its ops, I think, because this is required by the subs() method to make symbolic substitution in the metric as well.
Actually, I think this is perfectly sensible, not only for subs()' sake (one could provide custom implementation of subs). The point of a derived class is to store some additional data. One might want to make that data availiable via op(). However, some code in GiNaC seems to make different assumption (BTW, I hate such *implicit* assumptions). What about the following patch: tensor::replace_contr_index: ignore all non-idx subexpressions. Classes derived from indexed could make their additional data members avialable via op(). Ignore such non-idx subexperssions when performing contractions. --- ginac/tensor.cpp | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/ginac/tensor.cpp b/ginac/tensor.cpp index c215237..25935f4 100644 --- a/ginac/tensor.cpp +++ b/ginac/tensor.cpp @@ -395,6 +395,8 @@ bool tensor::replace_contr_index(exvecto again: if (self_idx->is_symbolic()) { for (size_t i=1; i<other->nops(); i++) { + if (! is_a<idx>(other->op(i))) + continue; const idx &other_idx = ex_to<idx>(other->op(i)); if (is_dummy_pair(*self_idx, other_idx)) { -- 1.4.2.3 Best regards, Alexei. -- All science is either physics or stamp collecting.