- // Contraction of symmetric with antisymmetric object is zero
- if (num_dummies > 1
- && ex_to<symmetry>(ex_to<indexed>(*it1).symtree).has_symmetry()
- && ex_to<symmetry>(ex_to<indexed>(*it2).symtree).has_symmetry()) {
-
- // Check all pairs of dummy indices
- for (unsigned idx1=0; idx1<num_dummies-1; idx1++) {
- for (unsigned idx2=idx1+1; idx2<num_dummies; idx2++) {
-
- // Try and swap the index pair and check whether the
- // relative sign changed
- lst subs_lst(dummy[idx1].op(0), dummy[idx2].op(0)), repl_lst(dummy[idx2].op(0), dummy[idx1].op(0));
- ex swapped1 = it1->subs(subs_lst, repl_lst);
- ex swapped2 = it2->subs(subs_lst, repl_lst);
- if (it1->is_equal(swapped1) && it2->is_equal(-swapped2)
- || it1->is_equal(-swapped1) && it2->is_equal(swapped2)) {
- free_indices.clear();
- return _ex0();
- }
- }
- }
- }
-