Cadabra
Computer algebra system for field theory problems
Loading...
Searching...
No Matches
ExNode.hh
Go to the documentation of this file.
1
2#pragma once
3
4#include "Kernel.hh"
5#include "Storage.hh"
6#include "IndexIterator.hh"
7#include "IndexClassifier.hh"
8#include <memory>
9#include <pybind11/pybind11.h>
10
28
30 public:
31 ExNode(const cadabra::Kernel&, std::shared_ptr<cadabra::Ex>);
32
33 std::shared_ptr<cadabra::Ex> ex;
34 cadabra::Ex::iterator it;
35
36 ExNode& iter();
37 ExNode& next();
38
39 ExNode copy() const;
40
41 std::string __str__() const;
42 std::string _latex_() const;
43 std::string input_form() const;
44
45 std::string get_name() const;
46 void set_name(std::string);
47
49 bool is_valid() const;
50
52 cadabra::Ex get_ex() const;
53
56
59 // ExNode unwrap(ExNode child);
60
64 void replace(std::shared_ptr<cadabra::Ex> rep);
65
67 ExNode insert(std::shared_ptr<cadabra::Ex> ins);
69
71 ExNode append_child(std::shared_ptr<cadabra::Ex>);
73
75 ExNode add_ex(std::shared_ptr<cadabra::Ex>);
76
78 void erase();
79
82 ExNode getitem_string(std::string tag);
84
86 void setitem_string(std::string tag, std::shared_ptr<cadabra::Ex> val);
87 void setitem_iterator(ExNode, std::shared_ptr<cadabra::Ex> val);
88
92 ExNode terms();
93
98
102
106 ExNode indices();
107
112
115
118 ExNode args();
119
123
124 std::string tag;
126
130 void update(bool first);
131
132 cadabra::Ex::iterator nxtit;
133 cadabra::Ex::sibling_iterator sibnxtit;
135
138 cadabra::Ex::iterator topit, stopit;
139
142
143 private:
144 };
145
146
147ExNode Ex_iter(std::shared_ptr<cadabra::Ex> ex);
148ExNode Ex_top(std::shared_ptr<cadabra::Ex> ex);
149bool Ex_matches(std::shared_ptr<cadabra::Ex> ex, ExNode& other);
150bool Ex_matches_Ex(std::shared_ptr<cadabra::Ex> ex, std::shared_ptr<cadabra::Ex> other);
151bool ExNode_less(ExNode& one, ExNode& two);
152bool ExNode_greater(ExNode& one, ExNode& two);
153ExNode Ex_getitem_string(std::shared_ptr<cadabra::Ex> ex, std::string tag);
154ExNode Ex_getitem_iterator(std::shared_ptr<cadabra::Ex> ex, ExNode);
155
156
157
bool ExNode_greater(ExNode &one, ExNode &two)
Definition ExNode.cc:528
bool ExNode_less(ExNode &one, ExNode &two)
Definition ExNode.cc:520
ExNode Ex_top(std::shared_ptr< cadabra::Ex > ex)
Definition ExNode.cc:491
ExNode Ex_getitem_iterator(std::shared_ptr< cadabra::Ex > ex, ExNode)
Definition ExNode.cc:547
ExNode Ex_iter(std::shared_ptr< cadabra::Ex > ex)
Definition ExNode.cc:481
bool Ex_matches(std::shared_ptr< cadabra::Ex > ex, ExNode &other)
Definition ExNode.cc:501
bool Ex_matches_Ex(std::shared_ptr< cadabra::Ex > ex, std::shared_ptr< cadabra::Ex > other)
Definition ExNode.cc:509
ExNode Ex_getitem_string(std::shared_ptr< cadabra::Ex > ex, std::string tag)
Definition ExNode.cc:536
ExNode is a combination of an Ex::iterator and an interface which we can use to manipulate the data p...
Definition ExNode.hh:29
cadabra::Ex::iterator stopit
Definition ExNode.hh:138
std::string tag
Definition ExNode.hh:124
std::string __str__() const
Definition ExNode.cc:452
ExNode insert(std::shared_ptr< cadabra::Ex > ins)
Insert a subtree as previous sibling of the current node.
Definition ExNode.cc:251
ExNode args()
Get a new iterator which only iterates over all first-level arguments (non-indices).
Definition ExNode.cc:214
std::shared_ptr< cadabra::Ex > ex
Definition ExNode.hh:33
ExNode getitem_iterator(ExNode)
Definition ExNode.cc:84
std::string _latex_() const
Definition ExNode.cc:469
void set_name(std::string)
Definition ExNode.cc:309
index_position_map_t ind_pos_dummy
Definition ExNode.hh:141
bool is_valid() const
Is the ExNode a valid pointer into an Ex?
Definition ExNode.cc:27
ExNode & next()
Definition ExNode.cc:430
ExNode & iter()
Definition ExNode.cc:336
cadabra::Ex get_ex() const
Create a copy of the Ex pointed to by this iterator.
Definition ExNode.cc:316
ExNode children()
Get a new iterator which iterates over all first-level children (a sibling iterator,...
Definition ExNode.cc:224
ExNode terms()
Get a new iterator which only iterates over all first-level terms.
Definition ExNode.cc:138
ExNode append_child_it(ExNode ins)
Definition ExNode.cc:272
bool terms_only
Definition ExNode.hh:125
ExNode indices()
Get a new iterator which only iterates over all indices (whether direct or inherited).
Definition ExNode.cc:170
ExNode copy() const
Definition ExNode.cc:32
void setitem_string(std::string tag, std::shared_ptr< cadabra::Ex > val)
Set all elements with the indicated tag to the given value.
Definition ExNode.cc:95
cadabra::Ex::iterator nxtit
Definition ExNode.hh:132
void setitem_iterator(ExNode, std::shared_ptr< cadabra::Ex > val)
Definition ExNode.cc:118
cadabra::Ex::iterator it
Definition ExNode.hh:34
bool use_sibling_iterator
Definition ExNode.hh:136
std::string input_form() const
Definition ExNode.cc:60
void replace(std::shared_ptr< cadabra::Ex > rep)
Take a child argument out of the node and add as child of current.
Definition ExNode.cc:233
ExNode insert_it(ExNode ins)
Definition ExNode.cc:258
bool factors_only
Definition ExNode.hh:125
ExNode factors()
Get a new iterator which only iterates over all first-level factors.
Definition ExNode.cc:149
ExNode own_indices()
Get a new iterator which only iterates over all first-level indices (that is, does not iterate over i...
Definition ExNode.cc:160
cadabra::index_iterator indnxtit
Definition ExNode.hh:134
bool indices_only
Definition ExNode.hh:125
cadabra::str_node::parent_rel_t get_parent_rel() const
Definition ExNode.cc:321
void erase()
Erase the current node, iterator becomes invalid!
Definition ExNode.cc:297
index_map_t ind_dummy
Definition ExNode.hh:140
bool use_index_iterator
Definition ExNode.hh:137
cadabra::Ex::iterator topit
Definition ExNode.hh:138
std::string get_name() const
Definition ExNode.cc:302
ExNode append_child(std::shared_ptr< cadabra::Ex >)
Append a subtree as a child. Return an ExNode pointing to the new child.
Definition ExNode.cc:265
void set_parent_rel(cadabra::str_node::parent_rel_t)
Definition ExNode.cc:328
index_map_t ind_free
Definition ExNode.hh:140
ExNode add_ex(std::shared_ptr< cadabra::Ex >)
Add an expression to the given node, adding a sum parent if necessary.
Definition ExNode.cc:279
ExNode free_indices()
Get a new iterator which only iterates over all free indices (whether direct or inherited).
Definition ExNode.cc:182
ExNode getitem_string(std::string tag)
Get a new iterator which always stays below the current one.
Definition ExNode.cc:71
bool args_only
Definition ExNode.hh:125
cadabra::Ex::sibling_iterator sibnxtit
Definition ExNode.hh:133
ExNode components()
Definition ExNode.cc:196
void update(bool first)
Internal function to update the iterator to the next value.
Definition ExNode.cc:341
Definition Storage.hh:170
Definition IndexClassifier.hh:13
std::map< Ex::iterator, int, Ex::iterator_base_less > index_position_map_t
A map from the position of each index to the sequential index.
Definition IndexClassifier.hh:26
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 IndexClassifier.hh:23
Definition Kernel.hh:15
An iterator which iterates over indices even if they are at lower levels, i.e.
Definition IndexIterator.hh:20
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:68