X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Findexed.h;h=ad32c2372fee25e55e0fef167de8be32000eeea0;hp=d798107f8cf31eb23ac272cfb89e136a3e9ac1f0;hb=54c1eca199508d821795ca08506f6e7788ebee91;hpb=f5e84af31b20c7f732bee375bacc152e7fb01e56 diff --git a/ginac/indexed.h b/ginac/indexed.h index d798107f..ad32c237 100644 --- a/ginac/indexed.h +++ b/ginac/indexed.h @@ -3,7 +3,7 @@ * Interface to GiNaC's indexed expressions. */ /* - * GiNaC Copyright (C) 1999-2003 Johannes Gutenberg University Mainz, Germany + * GiNaC Copyright (C) 1999-2005 Johannes Gutenberg University Mainz, Germany * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __GINAC_INDEXED_H__ @@ -140,7 +140,7 @@ public: // internal constructors indexed(const symmetry & symm, const exprseq & es); indexed(const symmetry & symm, const exvector & v, bool discardable = false); - indexed(const symmetry & symm, exvector * vp); // vp will be deleted + indexed(const symmetry & symm, std::auto_ptr vp); // functions overriding virtual functions from base classes public: @@ -152,7 +152,7 @@ public: protected: ex derivative(const symbol & s) const; ex thiscontainer(const exvector & v) const; - ex thiscontainer(exvector * vp) const; + ex thiscontainer(std::auto_ptr vp) const; unsigned return_type() const { return return_types::commutative; } ex expand(unsigned options = 0) const; @@ -172,7 +172,8 @@ public: exvector get_dummy_indices() const; /** Return a vector containing the dummy indices in the contraction with - * another indexed object. */ + * another indexed object. This is symmetric: a.get_dummy_indices(b) + * == b.get_dummy_indices(a) */ exvector get_dummy_indices(const indexed & other) const; /** Check whether the object has an index that forms a dummy index pair @@ -249,6 +250,23 @@ template<> inline bool is_exactly_a(const basic & obj) return obj.tinfo()==TINFO_indexed; } +/** Returns all dummy indices from the expression */ +exvector get_all_dummy_indices(const ex & e); + +/** Returns b with all dummy indices, which are common with a, renamed */ +ex rename_dummy_indices_uniquely(const ex & a, const ex & b); + +/** This function returns the given expression with expanded sums + * for all dummy index summations, where the dimensionality of + * the dummy index is numeric. + * Optionally all indices with a variance will be substituted by + * indices with the corresponding numeric values without variance. + * + * @param e the given expression + * @param subs_idx indicates if variance of dummy indixes should be neglected + */ +ex expand_dummy_sum(const ex & e, bool subs_idx = false); + } // namespace GiNaC #endif // ndef __GINAC_INDEXED_H__