1 #ifndef CPPAD_CG_LANGUAGE_DOT_ARRAYS_INCLUDED 2 #define CPPAD_CG_LANGUAGE_DOT_ARRAYS_INCLUDED 23 std::string LanguageDot<Base>::printArrayCreationOp(OperationNode<Base>& array) {
24 CPPADCG_ASSERT_KNOWN(array.getArguments().size() > 0,
"Invalid number of arguments for array creation operation")
25 const std::vector<Argument<Base> >& args = array.getArguments();
26 const size_t argSize = args.size();
29 _ss <<
"array[" << args.size() <<
"]";
30 std::string name = printNodeDeclaration(array, _ss);
32 for (
size_t i = 0; i < argSize; i++) {
34 size_t newI = printArrayCreationUsingLoop(name, array, i,
nullptr);
39 std::string aName = print(args[i]);
41 printEdge(aName, name, std::to_string(i));
53 std::string LanguageDot<Base>::printSparseArrayCreationOp(OperationNode<Base>& array) {
55 const std::vector<size_t>& info = array.getInfo();
56 CPPADCG_ASSERT_KNOWN(!info.empty(),
"Invalid number of information elements for sparse array creation operation")
58 const std::vector<Argument<Base> >& args = array.getArguments();
59 const size_t argSize = args.size();
61 CPPADCG_ASSERT_KNOWN(info.size() == argSize + 1,
"Invalid number of arguments for sparse array creation operation")
64 _ss <<
"sparse[" << info[0] <<
"]";
65 std::string name = printNodeDeclaration(array, _ss);
70 for (
size_t i = 0; i < argSize; i++) {
72 size_t newI = printArrayCreationUsingLoop(name, array, i, &info[i]);
77 std::string aName = print(args[i]);
79 printEdge(aName, name, std::to_string(info[i + 1]));
94 const size_t* indexes) {
96 const std::vector<Argument<Base> >& args = array.
getArguments();
97 const size_t argSize = args.size();
98 size_t i = starti + 1;
103 if(args[starti].getParameter() ==
nullptr)
106 const Base& value = *args[starti].getParameter();
107 for (; i < argSize; i++) {
108 if (args[i].getParameter() ==
nullptr ||
109 *args[i].getParameter() != value) {
113 if (indexes !=
nullptr && i - starti != indexes[i] - indexes[starti])
120 std::string aName = print(args[starti]);
125 if (indexes !=
nullptr)
126 printEdge(aName, arrayName, std::to_string(indexes[starti]) +
"..." + std::to_string(indexes[i]));
128 printEdge(aName, arrayName, std::to_string(starti) +
"..." + std::to_string(i));
136 CPPADCG_ASSERT_KNOWN(op.
getArguments().size() == 2,
"Invalid number of arguments for array element operation")
137 CPPADCG_ASSERT_KNOWN(op.
getArguments()[0].getOperation() !=
nullptr,
"Invalid argument for array element operation")
138 CPPADCG_ASSERT_KNOWN(op.
getInfo().size() == 1,
"Invalid number of information indexes for array element operation")
140 std::string name = makeNodeName(op);
143 _ss <<
"[" << op.
getInfo()[0] <<
"]";
144 printEdges(name, op, std::vector<std::string>{}, std::vector<std::string>{_ss.str()});
size_t printArrayCreationUsingLoop(const std::string &arrayName, const OperationNode< Base > &array, size_t startj, const size_t *indexes)
const std::vector< Argument< Base > > & getArguments() const
const std::vector< size_t > & getInfo() const