32#include <initializer_list>
44 typedef std::set<std::string>
nset_t;
45 typedef std::set<multiplier_t>
rset_t;
85 std::variant<std::monostate,
86 std::shared_ptr<NTensor>,
87 std::shared_ptr<NInterpolatingFunction>
151 void zero(rset_t::iterator&);
152 void one(rset_t::iterator&);
154 void half(rset_t::iterator&);
165 class Ex :
public std::enable_shared_from_this<Ex>,
public tree<str_node> {
169 explicit Ex(tree<str_node>::iterator);
177 explicit Ex(
const std::string&);
228 bool equals(
const std::string&)
const;
236 static std::ostream&
print_python(std::ostream& str, Ex::iterator it);
244 std::ostream&
print_repr(std::ostream& str, Ex::iterator it)
const;
247 iterator
named_parent(iterator it,
const std::string&)
const;
254 static sibling_iterator
arg(iterator,
unsigned int);
255 static unsigned int arg_size(sibling_iterator);
292 iterator
replace_index(iterator position,
const iterator& from,
bool keep_parent_rel=
false);
296 iterator
move_index(iterator position,
const iterator& from);
335 std::vector<std::vector<Ex::path_t> >
terms;
345 bool operator()(nset_t::iterator first, nset_t::iterator second)
const;
348 template <
typename T>
349 bool is_in(
const T& val,
const std::initializer_list<T>& list)
351 for (
const auto& i : list) {
370std::ostream&
operator<<(std::ostream&, cadabra::Ex::iterator);
Basic storage class for symbolic mathemematical expressions.
Definition Storage.hh:165
iterator move_index(iterator position, const iterator &from)
As in replace_index, but moves the index rather than making a copy (so that iterators pointing to the...
Definition Storage.cc:674
void list_unwrap_single_element(iterator &)
Definition Storage.cc:696
multiplier_t arg_to_num(sibling_iterator, unsigned int) const
Definition Storage.cc:517
static std::ostream & print_python(std::ostream &str, Ex::iterator it)
Display expression in Python/Cadabra input form.
Definition Storage.cc:224
bool operator==(const Ex &other) const
Compare two Ex objects for exact equality; no dummy equivalence or other things that require property...
Definition Storage.cc:771
result_t
Keeping track of what algorithms have done to this expression.
Definition Storage.hh:193
@ l_cached
Definition Storage.hh:199
@ l_error
Definition Storage.hh:198
@ l_checkpointed
Definition Storage.hh:194
@ l_no_action
Definition Storage.hh:195
@ l_applied_no_new_dummies
Definition Storage.hh:197
@ l_applied
Definition Storage.hh:196
hashval_t calc_hash(iterator it) const
Calculate the hash value for the subtree starting at 'it'.
Definition Storage.cc:479
void reset_state()
Definition Storage.cc:155
iterator named_parent(iterator it, const std::string &) const
Step up until matching node is found (if current node matches, do nothing)
Definition Storage.cc:459
static sibling_iterator arg(iterator, unsigned int)
Quick access to arguments or argument lists for A(B)(C,D) type nodes.
Definition Storage.cc:502
iterator erase_expression(iterator it)
Definition Storage.cc:472
result_t state() const
Definition Storage.cc:129
std::ostream & print_entire_tree(std::ostream &str) const
Output helpers mainly for debugging purposes.
Definition Storage.cc:361
result_t state_
Definition Storage.hh:331
bool is_integer() const
Definition Storage.cc:185
static unsigned int arg_size(sibling_iterator)
Definition Storage.cc:511
bool is_string() const
Definition Storage.cc:200
void list_wrap_single_element(iterator &)
Make sure that the node pointed to is a \comma object, i.e.
Definition Storage.cc:685
long to_integer() const
Definition Storage.cc:193
bool changed_state()
A status query method mainly to implement a simple method to apply algorithms until they converge.
Definition Storage.cc:162
int history_size() const
Return the size of the history; 0 means no history, just the current expression.
Definition Storage.cc:797
bool is_hidden(iterator) const
Definition Storage.cc:631
Ex()
Definition Storage.cc:70
std::vector< Ex::path_t > pop_history()
Pop the most recent state of the expression off the history stack; returns the set of paths that we a...
Definition Storage.cc:788
void push_history(const std::vector< Ex::path_t > &)
Push a copy of the current state of the expression onto the history stack.
Definition Storage.cc:782
unsigned int number_of_steps(iterator it) const
Ex & operator=(Ex)
Definition Storage.cc:97
bool is_empty() const
Test if the expression is empty (no content at all).
Definition Storage.cc:219
bool is_rational() const
Test if the expression is a rational number.
Definition Storage.cc:170
std::vector< tree< str_node > > history
Definition Storage.hh:333
std::ostream & print_repr(std::ostream &str, Ex::iterator it) const
Print a representation like Python's 'repr'.
Definition Storage.cc:328
bool equals(const std::string &) const
Comparison operators with primitive types.
Definition Storage.cc:212
multiplier_t to_rational() const
Definition Storage.cc:178
iterator flatten_and_erase(iterator position)
Replace the node with the children of the node, useful for e.g.
Definition Storage.cc:706
std::vector< std::vector< Ex::path_t > > terms
Patterns which describe how to get from one history step to the next.
Definition Storage.hh:335
iterator replace_index(iterator position, const iterator &from, bool keep_parent_rel=false)
Replace the index-like object (originally intended to replace indices only, but now used also for e....
Definition Storage.cc:662
static std::ostream & print_recursive_treeform(std::ostream &str, Ex::iterator it)
Definition Storage.cc:339
void update_state(result_t)
Definition Storage.cc:134
Definition Multiplier.hh:9
Definition NInterpolatingFunction.hh:9
Compare two nset iterators by comparing the strings to which they point.
Definition Storage.hh:343
bool operator()(nset_t::iterator first, nset_t::iterator second) const
Definition Storage.cc:1117
Elementary building block for a mathematical expression.
Definition Storage.hh:61
bool is_indexstar_wildcard() const
Definition Storage.cc:1034
bool is_index() const
Definition Storage.cc:950
bool is_unsimplified_integer() const
Definition Storage.cc:940
bool operator<(const str_node &) const
Definition Storage.cc:1177
void flip_parent_rel()
Change the parent relation from sub to super and vice versa (throws error when this is not an index).
Definition Storage.cc:872
bracket_t
Definition Storage.hh:63
@ b_round
Definition Storage.hh:63
@ b_none
Definition Storage.hh:63
@ b_square
Definition Storage.hh:63
@ b_no
Definition Storage.hh:63
@ b_pointy
Definition Storage.hh:63
@ b_curly
Definition Storage.hh:63
@ b_invalid
Definition Storage.hh:63
bool is_numbered_symbol() const
Definition Storage.cc:1052
str_node(void)
Definition Storage.cc:802
static bool compare_name_brack_par(const str_node &, const str_node &)
Definition Storage.cc:1100
bool is_quoted_string() const
Definition Storage.cc:956
bool is_unsimplified_rational() const
Definition Storage.cc:918
bool is_siblings_wildcard() const
Definition Storage.cc:1017
std::variant< std::monostate, std::shared_ptr< NTensor >, std::shared_ptr< NInterpolatingFunction > > content
Definition Storage.hh:88
nset_t::iterator name_only()
Definition Storage.cc:1061
bool is_command() const
Definition Storage.cc:964
bool is_object_wildcard() const
Definition Storage.cc:999
parent_rel_t
Child nodes are related to their parent node by a so-called parent relation, which can be one of thes...
Definition Storage.hh:67
@ p_exponent
Definition Storage.hh:67
@ p_sub
Definition Storage.hh:67
@ p_invalid
Definition Storage.hh:67
@ p_property
Definition Storage.hh:67
@ p_none
Definition Storage.hh:67
@ p_super
Definition Storage.hh:67
@ p_components
Definition Storage.hh:67
rset_t::iterator multiplier
Definition Storage.hh:80
static bool compare_name_inverse_par(const str_node &, const str_node &)
Definition Storage.cc:1108
bool is_inert_command() const
Definition Storage.cc:977
bool is_indexplus_wildcard() const
Definition Storage.cc:1043
bool is_range_wildcard() const
Definition Storage.cc:1008
bool is_standard() const
Standard nodes are nodes which do not hold special content in the content variable.
Definition Storage.cc:879
bool is_identity() const
Definition Storage.cc:890
bool is_name_wildcard() const
Definition Storage.cc:986
bool is_autodeclare_wildcard() const
Definition Storage.cc:1026
bool is_double() const
Definition Storage.cc:901
bool is_unsimplified_double() const
Definition Storage.cc:928
nset_t::iterator name
Definition Storage.hh:79
static bool compare_names_only(const str_node &, const str_node &)
Definition Storage.cc:1094
bool is_zero() const
Definition Storage.cc:884
flag_t fl
Definition Storage.hh:106
bool operator==(const str_node &) const
Definition Storage.cc:1084
bool is_integer() const
Definition Storage.cc:906
bool is_rational() const
Definition Storage.cc:896
std::ostream & operator<<(std::ostream &, const cadabra::Ex &)
Bare output operator for Ex objects, mainly to provide a simple way to generate debugging output.
Definition Storage.cc:1188
void multiply(rset_t::iterator &num, multiplier_t fac)
Helper functions for manipulation of multipliers.
Definition Storage.cc:1125
Functions to handle the exchange properties of two or more symbols in a product.
Definition Adjform.cc:83
rset_t rat_set
Definition Storage.cc:43
std::set< multiplier_t > rset_t
Definition Storage.hh:45
void flip_sign(rset_t::iterator &num)
Definition Storage.cc:1163
double to_double(multiplier_t mul)
Definition Storage.cc:53
Multiplier multiplier_t
Definition Storage.hh:43
uintptr_t hashval_t
Definition Storage.hh:46
void zero(rset_t::iterator &num)
Definition Storage.cc:1153
bool is_in(const T &val, const std::initializer_list< T > &list)
Definition Storage.hh:349
std::set< std::string > nset_t
Definition Storage.hh:44
void one(rset_t::iterator &num)
Definition Storage.cc:1158
void divide(rset_t::iterator &num, multiplier_t fac)
Definition Storage.cc:1132
void half(rset_t::iterator &num)
Definition Storage.cc:1170
void set(rset_t::iterator &num, multiplier_t fac)
Definition Storage.cc:1140
void add(rset_t::iterator &num, multiplier_t fac)
Definition Storage.cc:1146
long to_long(multiplier_t mul)
Definition Storage.cc:45
nset_t name_set
Definition Storage.cc:42
std::string to_string(long num)
Definition Storage.cc:61
bracket_t bracket
Definition Storage.hh:100
bool line_per_node
Definition Storage.hh:102
bool keep_after_eval
Definition Storage.hh:99
parent_rel_t parent_rel
Definition Storage.hh:101