// For a $\xi$-stable torus element, find $\xi$-stable pre-image by $\exp_1$ // We need to correct t.log_2pi, shifting by $X_*$ to make it $\xi$-stable // Return elected choice for the class of rational coweights representing $t$ RatCoweight stable_log(const TorusElement& t, CoweightInvolution xi) { xi+=1; // we just need xi+1, and this is why it was passed by-value CoeffList diagonal; const int_Matrix B = matreduc::adapted_basis(xi,diagonal); const int_Matrix B_inv = B.inverse(); const auto d=diagonal.size(), n=B.numRows(); // Get coordinates on $\xi$-stable part of $B$, and convert back to original // By doing reduction modulo 1 half-way, ensure elected result is produced return B.block(0,0,n,d)*( B_inv.block(0,0,d,n)*t.log_2pi() %=1); }
bool isTrivial(const CoeffList& invf) /*! Tells whether the fundamental group described by |invf| is trivial. This simply means that all the entries in |invf| are equal to one. */ { for (size_t j = 0; j < invf.size(); ++j) if (invf[j] != 1) return false; return true; }