From 69f01db3d3451c40c33723d4829f2107e1d0ece1 Mon Sep 17 00:00:00 2001 From: Chris Dams Date: Wed, 4 Jan 2006 18:33:30 +0000 Subject: [PATCH] Fixed bug in substituion of clifford objects. --- ginac/clifford.cpp | 15 +++++++++++++++ ginac/clifford.h | 7 +------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/ginac/clifford.cpp b/ginac/clifford.cpp index 67aa2c97..d25047ac 100644 --- a/ginac/clifford.cpp +++ b/ginac/clifford.cpp @@ -206,6 +206,21 @@ ex & clifford::let_op(size_t i) return inherited::let_op(i); } +ex clifford::subs(const exmap & m, unsigned options) const +{ + ex subsed = inherited::subs(m, options); + if(is_a(subsed)) { + ex prevmetric = ex_to(subsed).metric; + ex newmetric = prevmetric.subs(m, options); + if(!are_ex_trivially_equal(prevmetric, newmetric)) { + clifford c = ex_to(subsed); + c.metric = newmetric; + subsed = c; + } + } + return subsed; +} + int clifford::compare_same_type(const basic & other) const { GINAC_ASSERT(is_a(other)); diff --git a/ginac/clifford.h b/ginac/clifford.h index 18ef03c2..4fb5fad5 100644 --- a/ginac/clifford.h +++ b/ginac/clifford.h @@ -74,16 +74,11 @@ public: inline size_t nops() const {return inherited::nops() + 1; } ex op(size_t i) const; ex & let_op(size_t i); - ex subs(const exmap & m, unsigned options = 0) const { clifford c = ex_to(inherited::subs(m, options)); c.metric_subs(m, options); return c;} - ex subs(const lst & ls, const lst & lr, unsigned options = 0) const { clifford c = ex_to(ex(*this).subs(ls, lr, options)); c.metric_subs(ls, lr, options); return c;} - ex subs(const ex & e, unsigned options = 0) const{ clifford c = ex_to(ex(*this).subs(e, options)); c.metric_subs(e, options); return c;}; + ex subs(const exmap & m, unsigned options = 0) const; protected: void do_print_dflt(const print_dflt & c, unsigned level) const; void do_print_latex(const print_latex & c, unsigned level) const; - void metric_subs(const exmap & m, unsigned options = 0) { metric = metric.subs(m, options); } - void metric_subs(const lst & ls, const lst & lr, unsigned options = 0) { metric = metric.subs(ls, lr, options); } - void metric_subs(const ex & e, unsigned options = 0) { metric = metric.subs(e, options); } // member variables protected: -- 2.44.0