/usr/include/roboptim/core/util.hxx is in libroboptim-core-dev 2.0-6.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | // Copyright (C) 2009 by Thomas Moulard, AIST, CNRS, INRIA.
//
// This file is part of the roboptim.
//
// roboptim is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// roboptim is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with roboptim. If not, see <http://www.gnu.org/licenses/>.
#ifndef ROBOPTIM_CORE_UTIL_HXX
# define ROBOPTIM_CORE_UTIL_HXX
# include <roboptim/core/differentiable-function.hh>
namespace roboptim
{
namespace detail
{
template <typename T>
void
jacobian_from_gradients (typename DifferentiableFunction::matrix_t& jac,
const std::vector<const T*>& c,
const DifferentiableFunction::vector_t& x)
{
for (DifferentiableFunction::matrix_t::Index i = 0; i < jac.rows (); ++i)
{
DifferentiableFunction::jacobian_t grad = c[i]->jacobian (x);
for (DifferentiableFunction::matrix_t::Index j = 0;
j < jac.cols (); ++j)
jac (i, j) = grad(0, j);
}
}
} // end of namespace detail.
template <typename T>
std::ostream& operator<< (std::ostream& o, const std::vector<T>& vect)
{
typedef typename std::vector<T>::const_iterator citer_t;
if (vect.empty ())
return o << "Empty vector";
citer_t it = vect.begin ();
o << *it;
++it;
for (; it != vect.end (); ++it)
o << ", " << *it;
return o;
}
template <typename T1, typename T2>
std::ostream& operator<< (std::ostream& o, const std::pair<T1, T2>& p)
{
return o << "(" << p.first << ", " << p.second << ")";
}
/// \brief Display an Eigen object with the appropriate IOFormat.
template <typename T>
std::ostream& operator<< (std::ostream& o, const Eigen::MatrixBase<T>& matrix)
{
Eigen::IOFormat ioformat (Eigen::StreamPrecision,
0, ",", ", ", "(", ")", "(", ")");
ioformat.rowSpacer = "";
o << "[";
// Matrix
if (matrix.cols () == 1 || matrix.cols () == 1)
{
// Vector
ioformat = Eigen::IOFormat (Eigen::StreamPrecision,
0, ",", ",", "", "", "(", ")");
ioformat.rowSpacer = "";
o << matrix.size ();
}
else
o << matrix.rows () << "," << matrix.cols ();
o << "]" << matrix.format (ioformat);
return o;
}
} // end of namespace roboptim.
#endif //! ROBOPTIM_CORE_UTIL_HXX
|