+static const symmetry & index0()
+{
+ static ex s = dynallocate<symmetry>(0);
+ return ex_to<symmetry>(s);
+}
+
+static const symmetry & index1()
+{
+ static ex s = dynallocate<symmetry>(1);
+ return ex_to<symmetry>(s);
+}
+
+static const symmetry & index2()
+{
+ static ex s = dynallocate<symmetry>(2);
+ return ex_to<symmetry>(s);
+}
+
+static const symmetry & index3()
+{
+ static ex s = dynallocate<symmetry>(3);
+ return ex_to<symmetry>(s);
+}
+
+const symmetry & not_symmetric()
+{
+ static ex s = dynallocate<symmetry>();
+ return ex_to<symmetry>(s);
+}
+
+const symmetry & symmetric2()
+{
+ static ex s = dynallocate<symmetry>(symmetry::symmetric, index0(), index1());
+ return ex_to<symmetry>(s);
+}
+
+const symmetry & symmetric3()
+{
+ static ex s = dynallocate<symmetry>(symmetry::symmetric, index0(), index1()).add(index2());
+ return ex_to<symmetry>(s);
+}
+
+const symmetry & symmetric4()
+{
+ static ex s = dynallocate<symmetry>(symmetry::symmetric, index0(), index1()).add(index2()).add(index3());
+ return ex_to<symmetry>(s);
+}
+
+const symmetry & antisymmetric2()
+{
+ static ex s = dynallocate<symmetry>(symmetry::antisymmetric, index0(), index1());
+ return ex_to<symmetry>(s);
+}
+
+const symmetry & antisymmetric3()
+{
+ static ex s = dynallocate<symmetry>(symmetry::antisymmetric, index0(), index1()).add(index2());
+ return ex_to<symmetry>(s);
+}
+
+const symmetry & antisymmetric4()
+{
+ static ex s = dynallocate<symmetry>(symmetry::antisymmetric, index0(), index1()).add(index2()).add(index3());
+ return ex_to<symmetry>(s);
+}
+
+class sy_is_less {