Cadabra
Computer algebra system for field theory problems
Loading...
Searching...
No Matches
substitute.hh
Go to the documentation of this file.
1
2#pragma once
3
4#include "Algorithm.hh"
6#include "lru_cache.hh"
7
8namespace cadabra {
9
13
14 class substitute : public Algorithm {
15 public:
16 substitute(const Kernel&, Ex& tr, Ex& args, bool partial=true);
17
33
34 virtual bool can_apply(iterator st);
35
36 virtual result_t apply(iterator&);
37
39
42 static size_t cache_size();
43
44 private:
46
49
50 std::map<iterator, bool> lhs_contains_dummies, rhs_contains_dummies;
51
52 // For object swap testing routines:
54 bool partial;
55
56 // Rules is a class for caching properties of substitution
57 // rules to avoid processing them in subsequent calls.
58
59 class Rules {
60
61 public:
64
65 // Associate rule properties with a specific object
66 void store(Ex& rules,
67 std::map<iterator, bool>& lhs_contains_dummies,
68 std::map<iterator, bool>& rhs_contains_dummies);
69
70 // Check if rules are present
71 bool is_present(Ex& rules) const;
72
73 // Retrieve properties from rules
74 void retrieve(Ex& rules,
75 std::map<iterator, bool>& lhs_contains_dummies,
76 std::map<iterator, bool>& rhs_contains_dummies) const;
77
78 // Count number of rules
79 size_t size() const;
80
81 // Eliminate rules that are expired
82 void cleanup();
83
84 private:
85 // Map storing weak pointers to `Ex` and pairs of lhs/rhs maps as values
87 std::pair< std::map<iterator, bool>, std::map<iterator, bool> >,
88 std::owner_less<std::weak_ptr<Ex>>
90 // Max size of the rules list
91 size_t max_size;
92 // Initial size threshold to trigger cleanup_rules
94
95
96 };
97
98 // Shared instance of all replacement rules.
100 static size_t cache_hits, cache_misses;
101
102 };
103
104
105 }
106
107
Definition lru_cache.hh:25
Base class for all algorithms, containing generic routines and in particular the logic for index clas...
Definition Algorithm.hh:59
Ex::iterator iterator
Definition Algorithm.hh:70
Ex & tr
Definition Algorithm.hh:151
A generic tree comparison class which will take into account index contractions and will also keep tr...
Definition Compare.hh:192
Basic storage class for symbolic mathemematical expressions.
Definition Storage.hh:142
result_t
Keeping track of what algorithms have done to this expression.
Definition Storage.hh:168
Definition Kernel.hh:15
Definition sort_product.hh:8
Definition substitute.hh:59
Rules(size_t max_size_=1000, size_t cleanup_threshold_=100)
Definition substitute.hh:62
void store(Ex &rules, std::map< iterator, bool > &lhs_contains_dummies, std::map< iterator, bool > &rhs_contains_dummies)
Definition substitute.cc:466
LRUcache< std::weak_ptr< Ex >, std::pair< std::map< iterator, bool >, std::map< iterator, bool > >, std::owner_less< std::weak_ptr< Ex > > > properties
Definition substitute.hh:89
void retrieve(Ex &rules, std::map< iterator, bool > &lhs_contains_dummies, std::map< iterator, bool > &rhs_contains_dummies) const
Definition substitute.cc:497
size_t cleanup_threshold
Definition substitute.hh:93
bool is_present(Ex &rules) const
Definition substitute.cc:508
size_t size() const
Definition substitute.cc:535
void cleanup()
Definition substitute.cc:540
size_t max_size
Definition substitute.hh:91
Generic substitution algorithm.
Definition substitute.hh:14
sort_product sort_product_
Definition substitute.hh:53
static size_t cache_misses
Definition substitute.hh:100
static Rules replacement_rules
Definition substitute.hh:99
iterator conditions
Definition substitute.hh:48
iterator use_rule
Definition substitute.hh:47
bool partial
Definition substitute.hh:54
Ex & args
Definition substitute.hh:45
static size_t cache_hits
Definition substitute.hh:100
static size_t cache_size()
Return the number of substitution rules which have been pre-processed and sit in the cache.
Definition substitute.cc:461
std::map< iterator, bool > lhs_contains_dummies
Definition substitute.hh:50
std::map< iterator, bool > rhs_contains_dummies
Definition substitute.hh:50
virtual result_t apply(iterator &)
Definition substitute.cc:196
virtual bool can_apply(iterator st)
Match the lhs of the replacement rule to the subtree 'st' under consideration.
Definition substitute.cc:111
Ex_comparator comparator
Definition substitute.hh:38
Functions to handle the exchange properties of two or more symbols in a product.
Definition Adjform.cc:83
void set(rset_t::iterator &num, multiplier_t fac)
Definition Storage.cc:1063