File: canonicalise.hh

package info (click to toggle)
cadabra2 2.4.3.2-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 78,732 kB
  • sloc: ansic: 133,450; cpp: 92,064; python: 1,530; javascript: 203; sh: 184; xml: 182; objc: 53; makefile: 51
file content (35 lines) | stat: -rw-r--r-- 993 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#pragma once

#include "Algorithm.hh"
#include "properties/Indices.hh"
#include <vector>

namespace cadabra {

	/// \ingroup algorithms
	///
	/// Canonicalise the index structure of a tensorial expression.

	class canonicalise : public Algorithm {
		public:
			canonicalise(const Kernel&, Ex&);

			virtual bool     can_apply(iterator);
			virtual result_t apply(iterator&);

			std::vector<std::vector<int> > generating_set;
			bool                           reuse_generating_set;

		private:
			// Sub-algorithms needed before going to the full fledged canonicaliser.
			// All return true if they have modified the expression.
			bool remove_traceless_traces(iterator&);
			bool remove_vanishing_numericals(iterator&);
			bool only_one_on_derivative(iterator index1, iterator index2) const;

			Indices::position_t  position_type(iterator) const;
			//		void collect_dummy_info(const index_map_t&, const index_position_map_t&,
			//										std::vector<int>&, std::vector<int>&);
		};

	}