Loading graph_framework/arithmetic.hpp +122 −0 Original line number Diff line number Diff line Loading @@ -353,6 +353,30 @@ namespace graph { return this->left->remove_pseudo() + this->right->remove_pseudo(); } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"+\", shape = oval, style = filled, fillcolor = blue, fontcolor = white];" << std::endl; auto l = this->left->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[l.get()] << ";" << std::endl; auto r = this->right->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[r.get()] << ";" << std::endl; } return this->shared_from_this(); } }; //------------------------------------------------------------------------------ Loading Loading @@ -814,6 +838,30 @@ namespace graph { return this->left->remove_pseudo() - this->right->remove_pseudo(); } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"-\", shape = oval, style = filled, fillcolor = blue, fontcolor = white];" << std::endl; auto l = this->left->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[l.get()] << ";" << std::endl; auto r = this->right->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[r.get()] << ";" << std::endl; } return this->shared_from_this(); } }; //------------------------------------------------------------------------------ Loading Loading @@ -1381,6 +1429,30 @@ namespace graph { return this->left->remove_pseudo() * this->right->remove_pseudo(); } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"⨉\", shape = oval, style = filled, fillcolor = blue, fontcolor = white];" << std::endl; auto l = this->left->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[l.get()] << ";" << std::endl; auto r = this->right->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[r.get()] << ";" << std::endl; } return this->shared_from_this(); } }; //------------------------------------------------------------------------------ Loading Loading @@ -1785,6 +1857,30 @@ namespace graph { return this->left->remove_pseudo() / this->right->remove_pseudo(); } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"\\\\\", shape = oval, style = filled, fillcolor = blue, fontcolor = white];" << std::endl; auto l = this->left->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[l.get()] << ";" << std::endl; auto r = this->right->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[r.get()] << ";" << std::endl; } return this->shared_from_this(); } }; //------------------------------------------------------------------------------ Loading Loading @@ -2308,6 +2404,32 @@ namespace graph { this->middle->remove_pseudo(), this->right->remove_pseudo()); } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"fma\", shape = oval, style = filled, fillcolor = blue, fontcolor = white];" << std::endl; auto l = this->left->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[l.get()] << ";" << std::endl; auto m = this->middle->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[m.get()] << ";" << std::endl; auto r = this->right->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[r.get()] << ";" << std::endl; } return this->shared_from_this(); } }; //------------------------------------------------------------------------------ Loading graph_framework/math.hpp +112 −0 Original line number Diff line number Diff line Loading @@ -239,6 +239,28 @@ namespace graph { virtual shared_leaf<T, SAFE_MATH> remove_pseudo() { return sqrt(this->arg->remove_pseudo()); } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"sqrt\", shape = oval, style = filled, fillcolor = blue, fontcolor = white];" << std::endl; auto a = this->arg->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[a.get()] << ";" << std::endl; } return this->shared_from_this(); } }; //------------------------------------------------------------------------------ Loading Loading @@ -440,6 +462,28 @@ namespace graph { virtual shared_leaf<T, SAFE_MATH> remove_pseudo() { return exp(this->arg->remove_pseudo()); } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"exp\", shape = oval, style = filled, fillcolor = blue, fontcolor = white];" << std::endl; auto a = this->arg->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[a.get()] << ";" << std::endl; } return this->shared_from_this(); } }; //------------------------------------------------------------------------------ Loading Loading @@ -637,6 +681,28 @@ namespace graph { virtual shared_leaf<T, SAFE_MATH> remove_pseudo() { return log(this->arg->remove_pseudo()); } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"log\", shape = oval, style = filled, fillcolor = blue, fontcolor = white];" << std::endl; auto a = this->arg->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[a.get()] << ";" << std::endl; } return this->shared_from_this(); } }; //------------------------------------------------------------------------------ Loading Loading @@ -920,6 +986,30 @@ namespace graph { std::cout << "}"; } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"pow\", shape = oval, style = filled, fillcolor = blue, fontcolor = white];" << std::endl; auto l = this->left->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[l.get()] << ";" << std::endl; auto r = this->right->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[r.get()] << ";" << std::endl; } return this->shared_from_this(); } //------------------------------------------------------------------------------ /// @brief Test if node acts like a variable. /// Loading Loading @@ -1165,6 +1255,28 @@ namespace graph { virtual shared_leaf<T, SAFE_MATH> remove_pseudo() { return erfi(this->arg->remove_pseudo()); } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"erfi\", shape = oval, style = filled, fillcolor = blue, fontcolor = white];" << std::endl; auto a = this->arg->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[a.get()] << ";" << std::endl; } return this->shared_from_this(); } }; //------------------------------------------------------------------------------ Loading graph_framework/node.hpp +91 −0 Original line number Diff line number Diff line Loading @@ -154,6 +154,16 @@ namespace graph { //------------------------------------------------------------------------------ virtual void to_latex() const = 0; //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual std::shared_ptr<leaf_node<T, SAFE_MATH>> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) = 0; //------------------------------------------------------------------------------ /// @brief Test if node acts like a constant. /// Loading Loading @@ -252,6 +262,25 @@ namespace graph { template<typename T, bool SAFE_MATH=false> constexpr shared_leaf<T, SAFE_MATH> one(); //------------------------------------------------------------------------------ /// @brief Build the vizgraph input. /// /// @params[in] node Node to build the graph of. //------------------------------------------------------------------------------ template<typename T, bool SAFE_MATH=false> void make_vizgraph(shared_leaf<T, SAFE_MATH> node) { std::stringstream stream; jit::register_map registers; stream << std::setprecision(jit::max_digits10<T> ()); stream << "graph \"\" {" << std::endl; stream << " node [fontname = \"Helvetica\", ordering = out]" << std::endl << std::endl; node->to_vizgraph(stream, registers); stream << "}" << std::endl; std::cout << stream.str() << std::endl; } //****************************************************************************** // Constant node. //****************************************************************************** Loading Loading @@ -386,6 +415,26 @@ namespace graph { std::cout << data.at(0); } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"" << this->evaluate().at(0) << "\", shape = box, style = \"rounded,filled\", fillcolor = black, fontcolor = white];" << std::endl; } return this->shared_from_this(); } //------------------------------------------------------------------------------ /// @brief Test if node acts like a constant. /// Loading Loading @@ -1080,6 +1129,26 @@ namespace graph { std::cout << get_symbol(); } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"" << this->get_symbol() << "\", shape = box];" << std::endl; } return this->shared_from_this(); } //------------------------------------------------------------------------------ /// @brief Get the size of the variable buffer. //------------------------------------------------------------------------------ Loading Loading @@ -1356,6 +1425,28 @@ namespace graph { virtual shared_leaf<T, SAFE_MATH> remove_pseudo() { return this->arg; } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"pseudo_variable\", shape = oval, style = filled, fillcolor = blue, fontcolor = white];" << std::endl; auto a = this->arg->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[a.get()] << ";" << std::endl; } return this->shared_from_this(); } }; //------------------------------------------------------------------------------ Loading graph_framework/piecewise.hpp +48 −0 Original line number Diff line number Diff line Loading @@ -262,6 +262,29 @@ namespace graph { std::cout << "r\\_" << reinterpret_cast<size_t> (this) << "_{i}"; } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"r_" << reinterpret_cast<size_t> (this) << "_{i}\", shape = hexagon, style = filled, fillcolor = black, fontcolor = white];" << std::endl; auto a = this->arg->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[a.get()] << ";" << std::endl; } return this->shared_from_this(); } //------------------------------------------------------------------------------ /// @brief Test if node acts like a constant. /// Loading Loading @@ -667,6 +690,31 @@ namespace graph { std::cout << "r\\_" << reinterpret_cast<size_t> (this) << "_{ij}"; } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"r_" << reinterpret_cast<size_t> (this) << "_{ij}\", shape = hexagon, style = filled, fillcolor = black, fontcolor = white];" << std::endl; auto l = this->left->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[l.get()] << ";" << std::endl; auto r = this->right->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[r.get()] << ";" << std::endl; } return this->shared_from_this(); } //------------------------------------------------------------------------------ /// @brief Test if node acts like a constant. /// Loading graph_framework/register.hpp +0 −4 Original line number Diff line number Diff line Loading @@ -256,10 +256,6 @@ namespace jit { } } }; /// Type alias for constant registers. template<typename T, class C> using constant_map = std::map<T, C, float_compare<T>>; } #endif /* register_h */ Loading
graph_framework/arithmetic.hpp +122 −0 Original line number Diff line number Diff line Loading @@ -353,6 +353,30 @@ namespace graph { return this->left->remove_pseudo() + this->right->remove_pseudo(); } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"+\", shape = oval, style = filled, fillcolor = blue, fontcolor = white];" << std::endl; auto l = this->left->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[l.get()] << ";" << std::endl; auto r = this->right->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[r.get()] << ";" << std::endl; } return this->shared_from_this(); } }; //------------------------------------------------------------------------------ Loading Loading @@ -814,6 +838,30 @@ namespace graph { return this->left->remove_pseudo() - this->right->remove_pseudo(); } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"-\", shape = oval, style = filled, fillcolor = blue, fontcolor = white];" << std::endl; auto l = this->left->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[l.get()] << ";" << std::endl; auto r = this->right->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[r.get()] << ";" << std::endl; } return this->shared_from_this(); } }; //------------------------------------------------------------------------------ Loading Loading @@ -1381,6 +1429,30 @@ namespace graph { return this->left->remove_pseudo() * this->right->remove_pseudo(); } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"⨉\", shape = oval, style = filled, fillcolor = blue, fontcolor = white];" << std::endl; auto l = this->left->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[l.get()] << ";" << std::endl; auto r = this->right->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[r.get()] << ";" << std::endl; } return this->shared_from_this(); } }; //------------------------------------------------------------------------------ Loading Loading @@ -1785,6 +1857,30 @@ namespace graph { return this->left->remove_pseudo() / this->right->remove_pseudo(); } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"\\\\\", shape = oval, style = filled, fillcolor = blue, fontcolor = white];" << std::endl; auto l = this->left->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[l.get()] << ";" << std::endl; auto r = this->right->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[r.get()] << ";" << std::endl; } return this->shared_from_this(); } }; //------------------------------------------------------------------------------ Loading Loading @@ -2308,6 +2404,32 @@ namespace graph { this->middle->remove_pseudo(), this->right->remove_pseudo()); } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"fma\", shape = oval, style = filled, fillcolor = blue, fontcolor = white];" << std::endl; auto l = this->left->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[l.get()] << ";" << std::endl; auto m = this->middle->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[m.get()] << ";" << std::endl; auto r = this->right->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[r.get()] << ";" << std::endl; } return this->shared_from_this(); } }; //------------------------------------------------------------------------------ Loading
graph_framework/math.hpp +112 −0 Original line number Diff line number Diff line Loading @@ -239,6 +239,28 @@ namespace graph { virtual shared_leaf<T, SAFE_MATH> remove_pseudo() { return sqrt(this->arg->remove_pseudo()); } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"sqrt\", shape = oval, style = filled, fillcolor = blue, fontcolor = white];" << std::endl; auto a = this->arg->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[a.get()] << ";" << std::endl; } return this->shared_from_this(); } }; //------------------------------------------------------------------------------ Loading Loading @@ -440,6 +462,28 @@ namespace graph { virtual shared_leaf<T, SAFE_MATH> remove_pseudo() { return exp(this->arg->remove_pseudo()); } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"exp\", shape = oval, style = filled, fillcolor = blue, fontcolor = white];" << std::endl; auto a = this->arg->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[a.get()] << ";" << std::endl; } return this->shared_from_this(); } }; //------------------------------------------------------------------------------ Loading Loading @@ -637,6 +681,28 @@ namespace graph { virtual shared_leaf<T, SAFE_MATH> remove_pseudo() { return log(this->arg->remove_pseudo()); } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"log\", shape = oval, style = filled, fillcolor = blue, fontcolor = white];" << std::endl; auto a = this->arg->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[a.get()] << ";" << std::endl; } return this->shared_from_this(); } }; //------------------------------------------------------------------------------ Loading Loading @@ -920,6 +986,30 @@ namespace graph { std::cout << "}"; } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"pow\", shape = oval, style = filled, fillcolor = blue, fontcolor = white];" << std::endl; auto l = this->left->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[l.get()] << ";" << std::endl; auto r = this->right->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[r.get()] << ";" << std::endl; } return this->shared_from_this(); } //------------------------------------------------------------------------------ /// @brief Test if node acts like a variable. /// Loading Loading @@ -1165,6 +1255,28 @@ namespace graph { virtual shared_leaf<T, SAFE_MATH> remove_pseudo() { return erfi(this->arg->remove_pseudo()); } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"erfi\", shape = oval, style = filled, fillcolor = blue, fontcolor = white];" << std::endl; auto a = this->arg->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[a.get()] << ";" << std::endl; } return this->shared_from_this(); } }; //------------------------------------------------------------------------------ Loading
graph_framework/node.hpp +91 −0 Original line number Diff line number Diff line Loading @@ -154,6 +154,16 @@ namespace graph { //------------------------------------------------------------------------------ virtual void to_latex() const = 0; //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual std::shared_ptr<leaf_node<T, SAFE_MATH>> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) = 0; //------------------------------------------------------------------------------ /// @brief Test if node acts like a constant. /// Loading Loading @@ -252,6 +262,25 @@ namespace graph { template<typename T, bool SAFE_MATH=false> constexpr shared_leaf<T, SAFE_MATH> one(); //------------------------------------------------------------------------------ /// @brief Build the vizgraph input. /// /// @params[in] node Node to build the graph of. //------------------------------------------------------------------------------ template<typename T, bool SAFE_MATH=false> void make_vizgraph(shared_leaf<T, SAFE_MATH> node) { std::stringstream stream; jit::register_map registers; stream << std::setprecision(jit::max_digits10<T> ()); stream << "graph \"\" {" << std::endl; stream << " node [fontname = \"Helvetica\", ordering = out]" << std::endl << std::endl; node->to_vizgraph(stream, registers); stream << "}" << std::endl; std::cout << stream.str() << std::endl; } //****************************************************************************** // Constant node. //****************************************************************************** Loading Loading @@ -386,6 +415,26 @@ namespace graph { std::cout << data.at(0); } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"" << this->evaluate().at(0) << "\", shape = box, style = \"rounded,filled\", fillcolor = black, fontcolor = white];" << std::endl; } return this->shared_from_this(); } //------------------------------------------------------------------------------ /// @brief Test if node acts like a constant. /// Loading Loading @@ -1080,6 +1129,26 @@ namespace graph { std::cout << get_symbol(); } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"" << this->get_symbol() << "\", shape = box];" << std::endl; } return this->shared_from_this(); } //------------------------------------------------------------------------------ /// @brief Get the size of the variable buffer. //------------------------------------------------------------------------------ Loading Loading @@ -1356,6 +1425,28 @@ namespace graph { virtual shared_leaf<T, SAFE_MATH> remove_pseudo() { return this->arg; } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"pseudo_variable\", shape = oval, style = filled, fillcolor = blue, fontcolor = white];" << std::endl; auto a = this->arg->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[a.get()] << ";" << std::endl; } return this->shared_from_this(); } }; //------------------------------------------------------------------------------ Loading
graph_framework/piecewise.hpp +48 −0 Original line number Diff line number Diff line Loading @@ -262,6 +262,29 @@ namespace graph { std::cout << "r\\_" << reinterpret_cast<size_t> (this) << "_{i}"; } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"r_" << reinterpret_cast<size_t> (this) << "_{i}\", shape = hexagon, style = filled, fillcolor = black, fontcolor = white];" << std::endl; auto a = this->arg->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[a.get()] << ";" << std::endl; } return this->shared_from_this(); } //------------------------------------------------------------------------------ /// @brief Test if node acts like a constant. /// Loading Loading @@ -667,6 +690,31 @@ namespace graph { std::cout << "r\\_" << reinterpret_cast<size_t> (this) << "_{ij}"; } //------------------------------------------------------------------------------ /// @brief Convert the node to vizgraph. /// /// @params[in,out] stream String buffer stream. /// @params[in,out] registers List of defined registers. /// @returns The current node. //------------------------------------------------------------------------------ virtual shared_leaf<T, SAFE_MATH> to_vizgraph(std::stringstream &stream, jit::register_map ®isters) { if (registers.find(this) == registers.end()) { const std::string name = jit::to_string('r', this); registers[this] = name; stream << " " << name << " [label = \"r_" << reinterpret_cast<size_t> (this) << "_{ij}\", shape = hexagon, style = filled, fillcolor = black, fontcolor = white];" << std::endl; auto l = this->left->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[l.get()] << ";" << std::endl; auto r = this->right->to_vizgraph(stream, registers); stream << " " << name << " -- " << registers[r.get()] << ";" << std::endl; } return this->shared_from_this(); } //------------------------------------------------------------------------------ /// @brief Test if node acts like a constant. /// Loading
graph_framework/register.hpp +0 −4 Original line number Diff line number Diff line Loading @@ -256,10 +256,6 @@ namespace jit { } } }; /// Type alias for constant registers. template<typename T, class C> using constant_map = std::map<T, C, float_compare<T>>; } #endif /* register_h */