void ExpMapQuaternion::applyDiffPseudoLog0_( RefMat out, const ConstRefMat& in, const ConstRefVec& x, ReusableTemporaryMap& m) { mnf_assert(in.cols() == InputDim_ && "Dimensions mismatch" ); Eigen::Map<Eigen::MatrixXd, Eigen::Aligned> a = m.getMap(in.rows(),OutputDim_); a.noalias() = in*diffPseudoLog0_(x); out = a; }
void Manifold::applyDiffPseudoLog0(RefMat out, const ConstRefMat& in, const ConstRefVec& x) const { mnf_assert(isValid() || seeMessageAbove()); mnf_assert(out.cols() == representationDim_); mnf_assert(in.cols() == tangentDim_); mnf_assert(in.rows() == out.rows()); mnf_assert(x.size() == representationDim_); applyDiffPseudoLog0_(out, in, x); }
void Manifold::applyTransport(RefMat out, const ConstRefMat& in, const ConstRefVec& x, const ConstRefVec& v) const { mnf_assert(isValid() || seeMessageAbove()); mnf_assert(in.rows() == tangentDim_); mnf_assert(out.rows() == tangentDim_); mnf_assert(in.cols() == out.cols()); mnf_assert(x.size() == representationDim()); mnf_assert(v.size() == tangentDim_); mnf_assert(isInTxM(x, v)); applyTransport_(out, in, x, v); }