git://www.ginac.de
/
ginac.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
ff96974
)
(p.i*p.i).get_free_indices() returned (.i) instead of ()
author
Christian Bauer
<Christian.Bauer@uni-mainz.de>
Mon, 2 Aug 2004 21:40:25 +0000
(21:40 +0000)
committer
Christian Bauer
<Christian.Bauer@uni-mainz.de>
Mon, 2 Aug 2004 21:40:25 +0000
(21:40 +0000)
ginac/indexed.cpp
patch
|
blob
|
history
diff --git
a/ginac/indexed.cpp
b/ginac/indexed.cpp
index d1d5f7287b07d01a723f22adf0e21c37ffdcb15d..ad17a497a9dc703e52cd435d6901312071beab42 100644
(file)
--- a/
ginac/indexed.cpp
+++ b/
ginac/indexed.cpp
@@
-499,10
+499,27
@@
exvector ncmul::get_free_indices() const
return free_indices;
}
return free_indices;
}
+struct is_summation_idx : public std::unary_function<ex, bool> {
+ bool operator()(const ex & e)
+ {
+ return is_dummy_pair(e, e);
+ }
+};
+
exvector power::get_free_indices() const
{
exvector power::get_free_indices() const
{
- // Return free indices of basis
- return basis.get_free_indices();
+ // Get free indices of basis
+ exvector basis_indices = basis.get_free_indices();
+
+ if (exponent.info(info_flags::even)) {
+ // If the exponent is an even number, then any "free" index that
+ // forms a dummy pair with itself is actually a summation index
+ exvector really_free;
+ std::remove_copy_if(basis_indices.begin(), basis_indices.end(),
+ std::back_inserter(really_free), is_summation_idx());
+ return really_free;
+ } else
+ return basis_indices;
}
/** Rename dummy indices in an expression.
}
/** Rename dummy indices in an expression.