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>&);
};
}
|