|
29 | 29 | from sage.misc.lazy_import import lazy_import |
30 | 30 | lazy_import('sage.misc.call', 'attrcall') |
31 | 31 |
|
| 32 | + |
32 | 33 | class HyperbolicModelCoercion(Morphism): |
33 | 34 | """ |
34 | 35 | Abstract base class for morphisms between the hyperbolic models. |
@@ -148,6 +149,7 @@ def __invert__(self): |
148 | 149 | # From UHP # |
149 | 150 | ############ |
150 | 151 |
|
| 152 | + |
151 | 153 | class CoercionUHPtoPD(HyperbolicModelCoercion): |
152 | 154 | """ |
153 | 155 | Coercion from the UHP to PD model. |
@@ -188,6 +190,7 @@ def image_isometry_matrix(self, x): |
188 | 190 | return matrix([[1,-I],[-I,1]]) * x * matrix([[1,I],[I,1]]).conjugate()/Integer(2) |
189 | 191 | return matrix([[1,-I],[-I,1]]) * x * matrix([[1,I],[I,1]])/Integer(2) |
190 | 192 |
|
| 193 | + |
191 | 194 | class CoercionUHPtoKM(HyperbolicModelCoercion): |
192 | 195 | """ |
193 | 196 | Coercion from the UHP to KM model. |
@@ -227,6 +230,7 @@ def image_isometry_matrix(self, x): |
227 | 230 | """ |
228 | 231 | return SL2R_to_SO21(x) |
229 | 232 |
|
| 233 | + |
230 | 234 | class CoercionUHPtoHM(HyperbolicModelCoercion): |
231 | 235 | """ |
232 | 236 | Coercion from the UHP to HM model. |
@@ -269,6 +273,7 @@ def image_isometry_matrix(self, x): |
269 | 273 | # From PD # |
270 | 274 | ########### |
271 | 275 |
|
| 276 | + |
272 | 277 | class CoercionPDtoUHP(HyperbolicModelCoercion): |
273 | 278 | """ |
274 | 279 | Coercion from the PD to UHP model. |
@@ -318,6 +323,7 @@ def image_isometry_matrix(self, x): |
318 | 323 | return matrix([[1,I],[I,1]]) * x * matrix([[1,-I],[-I,1]]).conjugate() / Integer(2) |
319 | 324 | return matrix([[1,I],[I,1]]) * x * matrix([[1,-I],[-I,1]]) / Integer(2) |
320 | 325 |
|
| 326 | + |
321 | 327 | class CoercionPDtoKM(HyperbolicModelCoercion): |
322 | 328 | """ |
323 | 329 | Coercion from the PD to KM model. |
@@ -444,6 +450,7 @@ def image_isometry_matrix(self, x): |
444 | 450 | """ |
445 | 451 | return SO21_to_SL2R(x) |
446 | 452 |
|
| 453 | + |
447 | 454 | class CoercionKMtoPD(HyperbolicModelCoercion): |
448 | 455 | """ |
449 | 456 | Coercion from the KM to PD model. |
@@ -482,6 +489,7 @@ def image_isometry_matrix(self, x): |
482 | 489 | return (matrix(2,[1,-I,-I,1]) * SO21_to_SL2R(x) * |
483 | 490 | matrix(2,[1,I,I,1])/Integer(2)) |
484 | 491 |
|
| 492 | + |
485 | 493 | class CoercionKMtoHM(HyperbolicModelCoercion): |
486 | 494 | """ |
487 | 495 | Coercion from the KM to HM model. |
@@ -524,6 +532,7 @@ def image_isometry_matrix(self, x): |
524 | 532 | # From HM # |
525 | 533 | ########### |
526 | 534 |
|
| 535 | + |
527 | 536 | class CoercionHMtoUHP(HyperbolicModelCoercion): |
528 | 537 | """ |
529 | 538 | Coercion from the HM to UHP model. |
@@ -560,6 +569,7 @@ def image_isometry_matrix(self, x): |
560 | 569 | """ |
561 | 570 | return SO21_to_SL2R(x) |
562 | 571 |
|
| 572 | + |
563 | 573 | class CoercionHMtoPD(HyperbolicModelCoercion): |
564 | 574 | """ |
565 | 575 | Coercion from the HM to PD model. |
@@ -596,6 +606,7 @@ def image_isometry_matrix(self, x): |
596 | 606 | return (matrix(2,[1,-I,-I,1]) * SO21_to_SL2R(x) * |
597 | 607 | matrix(2,[1,I,I,1])/Integer(2)) |
598 | 608 |
|
| 609 | + |
599 | 610 | class CoercionHMtoKM(HyperbolicModelCoercion): |
600 | 611 | """ |
601 | 612 | Coercion from the HM to KM model. |
@@ -635,6 +646,7 @@ def image_isometry_matrix(self, x): |
635 | 646 | ##################################################################### |
636 | 647 | ## Helper functions |
637 | 648 |
|
| 649 | + |
638 | 650 | def SL2R_to_SO21(A): |
639 | 651 | r""" |
640 | 652 | Given a matrix in `SL(2, \RR)` return its irreducible representation in |
|
0 commit comments