32 #include <initializer_list> 39 typedef std::set<std::string>
nset_t;
40 typedef std::set<multiplier_t>
rset_t;
126 void zero(rset_t::iterator&);
127 void one(rset_t::iterator&);
129 void half(rset_t::iterator&);
139 class Ex :
public std::enable_shared_from_this<Ex>,
public tree<str_node> {
143 Ex(tree<str_node>::iterator);
147 Ex(
const std::string&);
177 static std::ostream&
print_python(std::ostream& str, Ex::iterator it);
185 std::ostream&
print_repr(std::ostream& str, Ex::iterator it)
const;
188 iterator
named_parent(iterator it,
const std::string&)
const;
195 static sibling_iterator
arg(iterator,
unsigned int);
196 static unsigned int arg_size(sibling_iterator);
215 unsigned int&)
const;
233 iterator
replace_index(iterator position,
const iterator& from,
bool keep_parent_rel=
false);
237 iterator
move_index(iterator position,
const iterator& from);
276 std::vector<std::vector<Ex::path_t> >
terms;
286 bool operator()(nset_t::iterator first, nset_t::iterator second)
const;
289 template <
typename T>
290 bool is_in(
const T& val,
const std::initializer_list<T>& list)
292 for (
const auto& i : list) {
311 std::ostream&
operator<<(std::ostream&, cadabra::Ex::iterator);
bool is_quoted_string() const
Definition: Storage.cc:737
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:948
Definition: Storage.hh:81
Definition: Storage.hh:158
bool is_integer() const
Definition: Storage.cc:700
bool operator==(const str_node &) const
Definition: Storage.cc:865
nset_t::iterator equation_label(iterator it) const
Definition: Storage.cc:398
std::ostream & print_entire_tree(std::ostream &str) const
Output helpers mainly for debugging purposes.
Definition: Storage.cc:230
rset_t rat_set
Definition: Storage.cc:32
iterator equation_by_number(unsigned int i) const
Definition: Storage.cc:435
static bool compare_names_only(const str_node &, const str_node &)
Definition: Storage.cc:875
bool is_command() const
Definition: Storage.cc:745
void reset_state()
Definition: Storage.cc:102
multiplier_t arg_to_num(sibling_iterator, unsigned int) const
Definition: Storage.cc:369
Definition: Storage.hh:57
Basic storage class for symbolic mathemematical expressions.
Definition: Storage.hh:139
Definition: Storage.hh:61
std::ostream & print_repr(std::ostream &str, Ex::iterator it) const
Print a representation like Python's 'repr'.
Definition: Storage.cc:206
bool keep_after_eval
Definition: Storage.hh:82
void list_wrap_single_element(iterator &)
Make sure that the node pointed to is a \comma object, i.e.
Definition: Storage.cc:536
bool is_name_wildcard() const
Definition: Storage.cc:767
Definition: Storage.hh:61
static bool compare_name_inverse_par(const str_node &, const str_node &)
Definition: Storage.cc:889
Definition: Storage.hh:61
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:676
Definition: Storage.hh:61
Definition: Storage.hh:158
bool is_autodeclare_wildcard() const
Definition: Storage.cc:807
void flip_sign(rset_t::iterator &num)
Definition: Storage.cc:928
Definition: Storage.hh:57
long to_long(multiplier_t mul)
Definition: Storage.cc:34
bool is_rational() const
Definition: Storage.cc:695
static std::ostream & print_python(std::ostream &str, Ex::iterator it)
Display expression in Python/Cadabra input form.
Definition: Storage.cc:130
str_node(void)
Definition: Storage.cc:647
result_t state() const
Definition: Storage.cc:82
Definition: Storage.hh:57
bool operator<(const str_node &) const
Definition: Storage.cc:938
Definition: Storage.hh:61
bool changed_state()
A status query method mainly to implement a simple method to apply algorithms until they converge...
Definition: Storage.cc:107
static unsigned int arg_size(sibling_iterator)
Definition: Storage.cc:363
Definition: Storage.hh:61
iterator move_index(iterator position, const iterator &from)
As in replace_index, but moves the index rather than making a copy (so that iterators.
Definition: Storage.cc:525
Definition: Storage.hh:57
Definition: Storage.hh:158
void zero(rset_t::iterator &num)
Definition: Storage.cc:918
bool is_zero() const
Definition: Storage.cc:683
void update_state(result_t)
Definition: Storage.cc:87
bool is_index() const
Definition: Storage.cc:729
parent_rel_t parent_rel
Definition: Storage.hh:84
multiplier_t to_rational() const
Definition: Storage.cc:123
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:313
Definition: Storage.hh:57
Elementary building block for a mathematical expression.
Definition: Storage.hh:55
void list_unwrap_single_element(iterator &)
Definition: Storage.cc:547
void one(rset_t::iterator &num)
Definition: Storage.cc:923
unsigned int number_of_equations() const
Definition: Storage.cc:568
nset_t::iterator name
Definition: Storage.hh:70
bool is_inert_command() const
Definition: Storage.cc:758
std::string equation_number_or_name(iterator it, unsigned int last_used_equation) const
Definition: Storage.cc:608
std::set< std::string > nset_t
Definition: Storage.hh:39
static std::ostream & print_recursive_treeform(std::ostream &str, Ex::iterator it)
Definition: Storage.cc:217
bool is_indexplus_wildcard() const
Definition: Storage.cc:824
bool is_numbered_symbol() const
Definition: Storage.cc:833
flag_t fl
Definition: Storage.hh:89
bool is_unsimplified_integer() const
Definition: Storage.cc:719
void push_history(const std::vector< Ex::path_t > &)
Push a copy of the current state of the expression onto the.
Definition: Storage.cc:627
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:622
void add(rset_t::iterator &num, multiplier_t fac)
Definition: Storage.cc:912
std::vector< std::vector< Ex::path_t > > terms
Patterns which describe how to get from one history step to the next.
Definition: Storage.hh:276
bool is_range_wildcard() const
Definition: Storage.cc:789
int history_size() const
Return the size of the history; 0 means no history, just the current expression.
Definition: Storage.cc:642
Functions to handle the exchange properties of two or more symbols in a product.
Definition: Algorithm.cc:1030
void half(rset_t::iterator &num)
Definition: Storage.cc:933
static sibling_iterator arg(iterator, unsigned int)
Quick access to arguments or argument lists for A(B)(C,D) type nodes.
Definition: Storage.cc:354
unsigned int equation_number(iterator it) const
Definition: Storage.cc:377
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:633
bool is_siblings_wildcard() const
Definition: Storage.cc:798
iterator flatten_and_erase(iterator position)
Replace the node with the children of the node, useful for e.g.
Definition: Storage.cc:557
bool is_object_wildcard() const
Definition: Storage.cc:780
void multiply(rset_t::iterator &num, multiplier_t fac)
Helper functions for manipulation of multipliers.
Definition: Storage.cc:906
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:513
rset_t::iterator multiplier
Definition: Storage.hh:71
Definition: Storage.hh:158
std::string to_string(long num)
Definition: Storage.cc:39
iterator equation_by_name(nset_t::iterator it) const
Definition: Storage.cc:453
mpq_class multiplier_t
Definition: Storage.hh:38
Ex()
Definition: Storage.cc:48
hashval_t calc_hash(iterator it) const
Calculate the hash value for the subtree starting at 'it'.
Definition: Storage.cc:333
nset_t name_set
Definition: Storage.cc:31
Definition: Storage.hh:57
bool is_rational() const
Test if the expression is a rational number.
Definition: Storage.cc:115
static bool compare_name_brack_par(const str_node &, const str_node &)
Definition: Storage.cc:881
bool is_unsimplified_rational() const
Definition: Storage.cc:709
bool is_in(const T &val, const std::initializer_list< T > &list)
Definition: Storage.hh:290
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:61
bool is_identity() const
Definition: Storage.cc:689
nset_t::iterator name_only()
Definition: Storage.cc:842
std::vector< tree< str_node > > history
Definition: Storage.hh:274
iterator erase_expression(iterator it)
Definition: Storage.cc:326
bool operator()(nset_t::iterator first, nset_t::iterator second) const
Definition: Storage.cc:898
bracket_t
Definition: Storage.hh:57
Definition: Storage.hh:61
iterator procedure_by_name(nset_t::iterator it) const
Definition: Storage.cc:493
result_t
Keeping track of what algorithms have done to this expression.
Definition: Storage.hh:158
bracket_t bracket
Definition: Storage.hh:83
bool line_per_node
Definition: Storage.hh:85
bool is_indexstar_wildcard() const
Definition: Storage.cc:815
Definition: Storage.hh:57
Compare two nset iterators by comparing the strings to which they point.
Definition: Storage.hh:284
bool is_hidden(iterator) const
Definition: Storage.cc:483
unsigned int number_of_steps(iterator it) const
uintptr_t hashval_t
Definition: Storage.hh:41
result_t state_
Definition: Storage.hh:272
std::set< multiplier_t > rset_t
Definition: Storage.hh:40
iterator equation_by_number_or_name(iterator it, unsigned int last_used_equation) const
Definition: Storage.cc:602