1#ifndef CPPAD_CG_LANG_LATEX_DEFAULT_VAR_NAME_GEN_INCLUDED
2#define CPPAD_CG_LANG_LATEX_DEFAULT_VAR_NAME_GEN_INCLUDED
31 std::stringstream _ss;
35 std::string _indepName;
39 std::string _tmpArrayName;
41 std::string _tmpSparseArrayName;
43 size_t _minTemporaryID;
45 size_t _maxTemporaryID;
47 size_t _maxTemporaryArrayID;
49 size_t _maxTemporarySparseArrayID;
64 _maxTemporaryArrayID(0),
65 _maxTemporarySparseArrayID(0) {
71 this->_temporary.push_back(
FuncArgument(_tmpSparseArrayName));
77 return _minTemporaryID;
81 return _maxTemporaryID;
85 return _maxTemporaryArrayID;
89 return _maxTemporarySparseArrayID;
97 latexIndex(_ss, index);
103 size_t id)
override {
108 latexIndex(_ss,
id - 1);
114 size_t id)
override {
118 if (this->_temporary[0].array) {
120 latexIndex(_ss,
id - this->_minTemporaryID);
122 _ss << _tmpName <<
id;
130 size_t id)
override {
134 CPPADCG_ASSERT_UNKNOWN(
variable.getOperationType() == CGOpCode::ArrayCreation)
136 _ss <<
"\\&" << _tmpArrayName;
137 latexIndex(_ss,
id - 1);
143 size_t id)
override {
147 CPPADCG_ASSERT_UNKNOWN(
variable.getOperationType() == CGOpCode::SparseArrayCreation)
149 _ss <<
"\\&" << _tmpSparseArrayName;
150 latexIndex(_ss,
id - 1);
158 CPPADCG_ASSERT_KNOWN(
var.getOperationType() == CGOpCode::LoopIndexedDep,
"Invalid node type")
159 CPPADCG_ASSERT_KNOWN(!
var.getArguments().empty(),
"Invalid number of arguments")
165 _ss << _depName <<
"_";
166 if (index.size() > 1)
167 _ss <<
"{" << index <<
"}";
177 CPPADCG_ASSERT_KNOWN(independent.
getOperationType() == CGOpCode::LoopIndexedIndep,
"Invalid node type")
178 CPPADCG_ASSERT_KNOWN(independent.
getArguments().size() > 0,
"Invalid number of arguments")
184 _ss << _indepName <<
"_";
185 if (index.size() > 1)
186 _ss <<
"{" << index <<
"}";
205 CPPADCG_ASSERT_UNKNOWN(_minTemporaryID <= _maxTemporaryID + 1)
209 size_t id)
override {
214 size_t id)
override {
228 size_t id2)
override {
233 size_t id)
override {
238 size_t id)
override {
239 return id - this->_minTemporaryID;
252 size_t id2)
override {
258 static inline std::stringstream& latexIndex(std::stringstream&
ss,
264 ss <<
"{" << index <<
"}";
271 const std::vector<Argument<Base> >&
args =
var.getArguments();
272 std::vector<const OperationNode<Base>*> indexes(
args.size() -
offset);
275 CPPADCG_ASSERT_KNOWN(
args[
a].getOperation() !=
nullptr,
"Invalid argument")
276 CPPADCG_ASSERT_KNOWN(
args[
a].getOperation()->getOperationType() == CGOpCode::Index, "
Invalid argument")
std::string generateTemporarySparseArray(const OperationNode< Base > &variable, size_t id) override
bool isInSameIndependentArray(const OperationNode< Base > &indep1, size_t id1, const OperationNode< Base > &indep2, size_t id2) override
size_t getMaxTemporarySparseArrayVariableID() const override
std::string generateIndependent(const OperationNode< Base > &independent, size_t id) override
std::string generateTemporaryArray(const OperationNode< Base > &variable, size_t id) override
size_t getMaxTemporaryArrayVariableID() const override
void setTemporaryVariableID(size_t minTempID, size_t maxTempID, size_t maxTempArrayID, size_t maxTempSparseArrayID) override
const std::string & getIndependentArrayName(const OperationNode< Base > &indep, size_t id) override
std::string generateIndexedIndependent(const OperationNode< Base > &independent, size_t id, const IndexPattern &ip) override
std::string generateDependent(size_t index) override
std::string generateTemporary(const OperationNode< Base > &variable, size_t id) override
size_t getIndependentArrayIndex(const OperationNode< Base > &indep, size_t id) override
size_t getMaxTemporaryVariableID() const override
size_t getTemporaryVarArrayIndex(const OperationNode< Base > &var, size_t id) override
bool isInSameTemporaryVarArray(const OperationNode< Base > &var1, size_t id1, const OperationNode< Base > &var2, size_t id2) override
const std::string & getTemporaryVarArrayName(const OperationNode< Base > &var, size_t id) override
bool isConsecutiveInTemporaryVarArray(const OperationNode< Base > &varFirst, size_t idFirst, const OperationNode< Base > &varSecond, size_t idSecond) override
std::string generateIndexedDependent(const OperationNode< Base > &var, size_t id, const IndexPattern &ip) override
bool isConsecutiveInIndepArray(const OperationNode< Base > &indepFirst, size_t idFirst, const OperationNode< Base > &indepSecond, size_t idSecond) override
size_t getMinTemporaryVariableID() const override
const std::vector< Argument< Base > > & getArguments() const
CGOpCode getOperationType() const
bool GreaterThanZero(const cg::CG< Base > &x)