[GiNaC-devel] canonicalise_clifford for matrices?

Vladimir V. Kisil kisilv at maths.leeds.ac.uk
Sat Oct 16 23:07:03 CEST 2004


		Dear All,

		I would like that canonicalise_clifford(), clifford_prime() and
  remove_dirac_ONE() can handle matrices and lists (recursing into each
  entry).

  I applied a patch for that (ignoring re-identified lines from
  canonicalise_clifford()).

  Best,
  Vladimir
-- 
Vladimir V. Kisil     email: kisilv at maths.leeds.ac.uk
--                      www: http://maths.leeds.ac.uk/~kisilv/

--- GiNaC/ginac/clifford.cpp	2004-10-15 14:12:02.000000000 +0100
+++ clifford.cpp	2004-10-16 21:59:58.000000000 +0100
@@ -939,6 +939,12 @@
 
 ex canonicalize_clifford(const ex & e)
 {
+	pointer_to_map_function fcn(canonicalize_clifford);
+
+	if (is_a<matrix>(e)    // || is_a<pseries>(e) || is_a<integral>(e)
+		|| is_a<lst>(e)) {
+		return e.map(fcn);
+	} else {
 	// Scan for any ncmul objects
 	exmap srl;
 	ex aux = e.to_rational(srl);
@@ -990,6 +996,7 @@
 		}
 	}
 	return aux.subs(srl, subs_options::no_pattern).simplify_indexed();
+	}
 }
 
 ex clifford_prime(const ex & e)
@@ -997,9 +1004,8 @@
 	pointer_to_map_function fcn(clifford_prime);
 	if (is_a<clifford>(e) && is_a<cliffordunit>(e.op(0))) {
 		return -e;
-	} else if (is_a<add>(e)) {
-		return e.map(fcn);
-	} else if (is_a<ncmul>(e)) {
+	} else if (is_a<add>(e) || is_a<ncmul>(e)  // || is_a<pseries>(e) || is_a<integral>(e)
+		|| is_a<matrix>(e) || is_a<lst>(e)) {
 		return e.map(fcn);
 	} else if (is_a<power>(e)) {
 		return pow(clifford_prime(e.op(0)), e.op(1));
@@ -1012,11 +1018,8 @@
 	pointer_to_map_function fcn(remove_dirac_ONE);
 	if (is_a<clifford>(e) && is_a<diracone>(e.op(0))) {
 		return 1;
-	} else if (is_a<add>(e)) {
-		return e.map(fcn);
-	} else if (is_a<ncmul>(e)) {
-		return e.map(fcn);
-	} else if (is_a<mul>(e)) {
+	} else if (is_a<add>(e) || is_a<ncmul>(e) || is_a<mul>(e)  // || is_a<pseries>(e) || is_a<integral>(e)
+			|| is_a<matrix>(e) || is_a<lst>(e)) {
 		return e.map(fcn);
 	} else if (is_a<power>(e)) {
 		return pow(remove_dirac_ONE(e.op(0)), e.op(1));



More information about the GiNaC-devel mailing list