]> www.ginac.de Git - ginac.git/blobdiff - ginac/tensor.cpp
Reviving return_type_tinfo-system.
[ginac.git] / ginac / tensor.cpp
index 7b1e32338c2b6ead77cb260f6a1e6d54d76c2628..5b43e65a350de329daaaafcb2f33ee822bbc48cd 100644 (file)
@@ -588,6 +588,9 @@ ex epsilon_tensor(const ex & i1, const ex & i2)
        if (!ex_to<idx>(i1).get_dim().is_equal(_ex2))
                throw(std::runtime_error("index dimension of epsilon tensor must match number of indices"));
 
+       if(is_a<wildcard>(i1.op(0))||is_a<wildcard>(i2.op(0)))
+               return indexed(epsilon, antisymmetric2(), i1, i2).hold();
+
        return indexed(epsilon, antisymmetric2(), i1, i2);
 }
 
@@ -604,6 +607,9 @@ ex epsilon_tensor(const ex & i1, const ex & i2, const ex & i3)
        if (!ex_to<idx>(i1).get_dim().is_equal(_ex3))
                throw(std::runtime_error("index dimension of epsilon tensor must match number of indices"));
 
+       if(is_a<wildcard>(i1.op(0))||is_a<wildcard>(i2.op(0))||is_a<wildcard>(i3.op(0)))
+               return indexed(epsilon, antisymmetric3(), i1, i2, i3).hold();
+
        return indexed(epsilon, antisymmetric3(), i1, i2, i3);
 }
 
@@ -621,6 +627,9 @@ ex lorentz_eps(const ex & i1, const ex & i2, const ex & i3, const ex & i4, bool
        if (!ex_to<idx>(i1).get_dim().is_equal(_ex4))
                throw(std::runtime_error("index dimension of epsilon tensor must match number of indices"));
 
+       if(is_a<wildcard>(i1.op(0))||is_a<wildcard>(i2.op(0))||is_a<wildcard>(i3.op(0))||is_a<wildcard>(i4.op(0)))
+               return indexed(pos_sig ? epsilon_pos : epsilon_neg, antisymmetric4(), i1, i2, i3, i4).hold();
+
        return indexed(pos_sig ? epsilon_pos : epsilon_neg, antisymmetric4(), i1, i2, i3, i4);
 }