45LameCoefficients(Eigen::DenseBase<TDerivedY>
const& Y, Eigen::DenseBase<TDerivednu>
const& nu);
57 } -> std::convertible_to<int>;
60 } -> std::convertible_to<Scalar>;
63 } -> std::convertible_to<math::linalg::mini::SVector<Scalar, T::kDims * T::kDims>>;
66 } -> std::convertible_to<
73 std::declval<math::linalg::mini::SVector<Scalar, T::kDims * T::kDims>&>())
74 } -> std::convertible_to<Scalar>;
76 t.evalWithGradAndHessian(
80 std::declval<math::linalg::mini::SVector<Scalar, T::kDims * T::kDims>&>(),
83 } -> std::convertible_to<Scalar>;
88 std::declval<math::linalg::mini::SVector<Scalar, T::kDims * T::kDims>&>(),
95LameCoefficients(Eigen::DenseBase<TDerivedY>
const& Y, Eigen::DenseBase<TDerivednu>
const& nu)
97 bool const bYHasExpectedDimensions = (Y.rows() == 1) or (Y.cols() == 1);
98 bool const bNuHasExpectedDimensions = (nu.rows() == 1) or (nu.cols() == 1);
99 bool const bHaveSameDimensions = Y.size() == nu.size();
100 if (not(bYHasExpectedDimensions and bNuHasExpectedDimensions and bHaveSameDimensions))
102 std::string
const what = fmt::format(
103 "Expected equivalent dimensions in Y and nu, with Y and nu being 1D arrays, but got "
104 "size(Y)={}, size(nu)={}",
107 throw std::invalid_argument(what);
111 for (
auto i = 0; i < Y.size(); ++i)
113 std::tie(mu(i), lambda(i)) = LameCoefficients(Y(i), nu(i));