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()});