Commit 991eee52 authored by Cianciosa, Mark's avatar Cianciosa, Mark
Browse files

Merge branch 'vizgraph' into 'main'

Vizgraph

See merge request !20
parents b9dc888a 80faac22
Loading
Loading
Loading
Loading
+122 −0
Original line number Diff line number Diff line
@@ -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 &registers) {
            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();
        }
    };

//------------------------------------------------------------------------------
@@ -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 &registers) {
            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();
        }
    };

//------------------------------------------------------------------------------
@@ -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 &registers) {
            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();
        }
    };

//------------------------------------------------------------------------------
@@ -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 &registers) {
            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();
        }
    };

//------------------------------------------------------------------------------
@@ -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 &registers) {
            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();
        }
    };

//------------------------------------------------------------------------------
+112 −0
Original line number Diff line number Diff line
@@ -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 &registers) {
            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();
        }
    };

//------------------------------------------------------------------------------
@@ -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 &registers) {
            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();
        }
    };

//------------------------------------------------------------------------------
@@ -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 &registers) {
            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();
        }
    };

//------------------------------------------------------------------------------
@@ -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 &registers) {
            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.
///
@@ -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 &registers) {
            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();
        }
    };

//------------------------------------------------------------------------------
+91 −0
Original line number Diff line number Diff line
@@ -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 &registers) = 0;

//------------------------------------------------------------------------------
///  @brief Test if node acts like a constant.
///
@@ -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.
//******************************************************************************
@@ -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 &registers) {
            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.
///
@@ -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 &registers) {
            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.
//------------------------------------------------------------------------------
@@ -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 &registers) {
            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();
        }
    };

//------------------------------------------------------------------------------
+48 −0
Original line number Diff line number Diff line
@@ -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 &registers) {
            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.
///
@@ -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 &registers) {
            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.
///
+0 −4
Original line number Diff line number Diff line
@@ -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