@@ -27,31 +27,37 @@ namespace pycppad
27
27
typedef Eigen::Matrix<AD,Eigen::Dynamic,1 > VectorAD;
28
28
typedef Eigen::Matrix<ADCG,1 ,Eigen::Dynamic> RowVectorADCG;
29
29
typedef Eigen::Matrix<CG,Eigen::Dynamic,1 > VectorCG;
30
- typedef Eigen::Matrix<CG,1 ,Eigen::Dynamic> RowVectorCG;
30
+ typedef Eigen::Matrix<CG,1 ,Eigen::Dynamic> RowVectorCG;
31
+ typedef Eigen::Ref<VectorCG> RefVectorCG;
32
+ typedef Eigen::Ref<RowVectorCG> RefRowVectorCG;
31
33
typedef ::CppAD::cg::CodeHandler<Scalar> CodeHandler;
32
34
typedef ::CppAD::cg::LanguageC<Scalar> LanguageC;
33
35
typedef ::CppAD::cg::LangCDefaultVariableNameGenerator<Scalar> LangCDefaultVariableNameGenerator;
34
36
35
37
36
38
protected:
37
- template <typename VectorType>
38
- static void makeVariables (CodeHandler& self, const VectorType& x)
39
+
40
+ template <typename Vector>
41
+ static void makeVariables (CodeHandler& self, Eigen::Ref<Vector> x)
39
42
{
40
- VectorType& x_= const_cast <VectorType&>(x);
41
- self.makeVariables (x_);
43
+ Vector x_ (x);
44
+ ::CppAD::cg::ArrayView<typename Vector::Scalar> independent_av (x_.data (), x_.size ());
45
+ self.makeVariables (independent_av);
46
+ x = x_;
42
47
return ;
43
48
}
44
49
45
- template <typename VectorType, typename LangType, typename NameGenType>
50
+ template <typename LangType, typename NameGenType>
46
51
static std::string generateCode (CodeHandler& self,
47
52
LangType& lang,
48
- const VectorType& dependent,
53
+ RefVectorCG dependent,
49
54
NameGenType& nameGen,
50
55
const std::string& jobName)
51
56
{
52
57
std::ostringstream oss;
53
- VectorType& dependent_= const_cast <VectorType&>(dependent);
54
- ::CppAD::cg::ArrayView<typename VectorType::Scalar> dependent_av (dependent_.data (), dependent_.size ());
58
+ VectorCG dependent_ (dependent);
59
+ ::CppAD::cg::ArrayView<CG> dependent_av (dependent_.data (), dependent_.size ());
60
+ dependent = dependent_;
55
61
self.generateCode (oss, lang, dependent_av, nameGen, jobName);
56
62
return oss.str ();
57
63
}
@@ -86,19 +92,7 @@ namespace pycppad
86
92
" Parameters:\n "
87
93
" \t variables: the vector of variables that will become independent variables" )
88
94
.def (" makeVariables" ,
89
- &CodeHandler::template makeVariables<RowVectorADCG>,
90
- bp::args (" self" , " variables" ),
91
- " Marks the provided variables as being independent variables.\n "
92
- " Parameters:\n "
93
- " \t variables: the vector of variables that will become independent variables" )
94
- .def (" makeVariables" ,
95
- &CodeHandler::template makeVariables<VectorCG>,
96
- bp::args (" self" , " variables" ),
97
- " Marks the provided variables as being independent variables.\n "
98
- " Parameters:\n "
99
- " \t variables: the vector of variables that will become independent variables" )
100
- .def (" makeVariables" ,
101
- &CodeHandler::template makeVariables<RowVectorCG>,
95
+ &makeVariables<VectorADCG>,
102
96
bp::args (" self" , " variables" ),
103
97
" Marks the provided variables as being independent variables.\n "
104
98
" Parameters:\n "
@@ -122,18 +116,7 @@ namespace pycppad
122
116
" \t id: the atomic function ID." )
123
117
// .def("getExternalFuncMaxForwardOrder", &CodeHandler::getExternalFuncMaxForwardOrder, bp::arg("self"))
124
118
// .def("getExternalFuncMaxReverseOrder", &CodeHandler::getExternalFuncMaxReverseOrder, bp::arg("self"))
125
- .def (" generateCode" , &generateCode<VectorCG, LanguageC, LangCDefaultVariableNameGenerator>,
126
- (bp::arg (" self" ), bp::arg (" lang" ), bp::arg (" dependent" ), bp::arg (" nameGen" ), bp::arg (" jobName" )=" source" ),
127
- " Creates the source code from the operations registered so far.\n "
128
- " Parameters:\n "
129
- " \t lang: The targeted language.\n "
130
- " \t dependent: The dependent variables for which the source code\n "
131
- " should be generated. By defining this vector the \n "
132
- " number of operations in the source code can be\n "
133
- " reduced and thus providing a more optimized code.\n "
134
- " \t nameGen: Provides the rules for variable name creation. data related to the model\n "
135
- " \t jobName: Name of this job." )
136
- .def (" generateCode" , &generateCode<RowVectorCG, LanguageC, LangCDefaultVariableNameGenerator>,
119
+ .def (" generateCode" , &generateCode<LanguageC, LangCDefaultVariableNameGenerator>,
137
120
(bp::arg (" self" ), bp::arg (" lang" ), bp::arg (" dependent" ), bp::arg (" nameGen" ), bp::arg (" jobName" )=" source" ),
138
121
" Creates the source code from the operations registered so far.\n "
139
122
" Parameters:\n "
0 commit comments