When SAF=0, then it makes no sense to test for Boshernitzan criterion (it will never work). Instead, we should try to detect looping in the renormalization.
This strategy is likely to always terminate when the SAF 0 iet is primitive: that is there is no fake singularities (or marked points) and the dimension of the Q-vector space generated by the lengths is the genus. It is easy to build bad non primitive situation (ie the dimension is smaller than the genus) using coverings over non-periodic points that belong to the field of definition.
A primitive example in H(3,1) (genus 3) defined over a cubic field (written with surface_dynamics but should be easy enough to adapt)
sage: from surface_dynamics import iet
sage: x = polygen(QQ)
sage: poly = x^3 - 6*x^2 + 9*x - 3
sage: emb = AA.polynomial_root(poly, RIF(3.86, 3.88))
sage: K = NumberField(poly, 'A', embedding=emb)
sage: L = ['-A^2 + 4*A', '1/3*A^2 - A - 1', '40/3*A^2 - 61*A + 36', '-25/3*A^2 + 38*A - 22', '1/3*A^2 - 5', '-5*A^2 + 22*A - 10', '1/3*A^2 - 2*A + 3']
sage: p = iet.Permutation([0,1,2,3,4,5,6], [6,5,3,2,4,1,0])
sage: T = iet.IntervalExchangeTransformation(p, [K(l) for l in L])
The two other examples (after removing the saddle connections and marked points) are available as examples in surface_dynamics in
When SAF=0, then it makes no sense to test for Boshernitzan criterion (it will never work). Instead, we should try to detect looping in the renormalization.
This strategy is likely to always terminate when the SAF 0 iet is primitive: that is there is no fake singularities (or marked points) and the dimension of the Q-vector space generated by the lengths is the genus. It is easy to build bad non primitive situation (ie the dimension is smaller than the genus) using coverings over non-periodic points that belong to the field of definition.
A primitive example in
H(3,1)(genus 3) defined over a cubic field (written withsurface_dynamicsbut should be easy enough to adapt)The two other examples (after removing the saddle connections and marked points) are available as examples in
surface_dynamicsin