Cadabra
Computer algebra system for field theory problems
evaluate.hh
Go to the documentation of this file.
1 
2 #pragma once
3 
4 #include "Compare.hh"
5 
6 
11 
75 #include "Algorithm.hh"
76 #include "properties/Indices.hh"
77 
78 namespace cadabra {
79 
80 class evaluate : public Algorithm {
81  public:
82  evaluate(const Kernel&, Ex&, const Ex& component_values, bool rhs=false, bool simplify=true);
83 
84  virtual bool can_apply(iterator) override;
85  virtual result_t apply(iterator&) override;
86 
90  void merge_components(iterator it1, iterator it2);
91 
92  private:
93  const Ex& components;
95 
96  bool is_component(iterator it) const;
97  bool is_scalar_function(iterator it) const;
98 
104 
108 
109  iterator handle_factor(sibling_iterator sib, const index_map_t& full_ind_free);
110 
114  iterator dense_factor(iterator sib, const index_map_t& ind_free, const index_map_t& ind_dummy);
115 
119 
122  void cleanup_components(iterator it1);
123 
127 
130 
133 
136  std::set<Ex, tree_exact_less_obj> dependencies(iterator it);
137 };
138 
139 }
iterator handle_sum(iterator it)
Definition: evaluate.cc:135
Base class for all algorithms, containing generic routines and in particular the logic for index clas...
Definition: Algorithm.hh:58
iterator handle_components(iterator it)
Definition: evaluate.cc:120
Basic storage class for symbolic mathemematical expressions.
Definition: Storage.hh:139
std::set< Ex, tree_exact_less_obj > dependencies(iterator it)
Determine all the Coordinate dependencies of the object at &#39;it&#39;.
Definition: evaluate.cc:989
void merge_components(iterator it1, iterator it2)
Merge the information in two &#39;components&#39; nodes at the given iterators, moving all out of the second ...
Definition: evaluate.cc:473
bool call_sympy
Definition: evaluate.hh:94
Definition: evaluate.hh:80
void simplify_components(iterator)
Simplify all components of a &#39;components&#39; node by running sympy&#39;s simplify on them.
Definition: evaluate.cc:950
const Ex & components
Definition: evaluate.hh:93
void unwrap_scalar_in_components_node(iterator sib)
Inverse of the above.
Definition: evaluate.cc:1046
iterator wrap_scalar_in_components_node(iterator sib)
Wrap a non-component scalar node in a &#39;components&#39; node.
Definition: evaluate.cc:1036
bool is_scalar_function(iterator it) const
Definition: evaluate.cc:31
Ex::iterator iterator
Definition: Algorithm.hh:69
Ex::sibling_iterator sibling_iterator
Definition: Algorithm.hh:71
iterator dense_factor(iterator sib, const index_map_t &ind_free, const index_map_t &ind_dummy)
Expand a tensor factor into a components node with all components written out explicitly.
Definition: evaluate.cc:358
virtual bool can_apply(iterator) override
Definition: evaluate.cc:26
Functions to handle the exchange properties of two or more symbols in a product.
Definition: Algorithm.cc:1626
Ex rhs(std::shared_ptr< Ex > ex)
Definition: PythonCdb.cc:183
iterator handle_derivative(iterator it)
Definition: evaluate.cc:569
iterator handle_epsilon(iterator it)
Definition: evaluate.cc:907
iterator handle_prod(iterator it)
Definition: evaluate.cc:1060
General purpose brute force scalar simplification algorithm.
Definition: simplify.hh:15
iterator handle_factor(sibling_iterator sib, const index_map_t &full_ind_free)
Replace a single factor with a &#39;components&#39; ...
Definition: evaluate.cc:199
void cleanup_components(iterator it1)
Cleanup all components in a &#39;components&#39; node; that is, call the cleanup_dispatch function on them...
Definition: evaluate.cc:555
bool is_component(iterator it) const
Definition: evaluate.cc:102
virtual result_t apply(iterator &) override
Definition: evaluate.cc:37
Definition: Kernel.hh:14
void merge_component_children(iterator it)
Merge entries in a single &#39;components&#39; node when they are for the.
Definition: evaluate.cc:429
result_t
Keeping track of what algorithms have done to this expression.
Definition: Storage.hh:158
std::multimap< Ex, Ex::iterator, tree_exact_less_for_indexmap_obj > index_map_t
A map from a pattern to the position where it occurs in the tree.
Definition: Algorithm.hh:138
bool only_rhs
Definition: evaluate.hh:94
evaluate(const Kernel &, Ex &, const Ex &component_values, bool rhs=false, bool simplify=true)
Definition: evaluate.cc:21