Esempio n. 1
0
// 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);
}
Esempio n. 2
0
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;
}