Ask Your Question

How to create a coercion on hyperbolic models?

asked 2019-01-29 12:46:03 +0200

Gaston Burrull gravatar image

I want to put some text on my plots of the poincare disc model. I tried to do something like that,

word = text('my word',(real_part(P),imag_part(P)), color='black')

and gives me the following error,

TypeError: cannot coerce arguments: no canonical coercion from
Hyperbolic plane in the Poincare Disk Model to Symbolic Ring

Furthermore, this only works if my complex number P comes from the ring of complex numbers, not for a hyperbolic point. I need to configure some coercion. As substracting imaginary and real parts of a number in the poincare disk model. get_point method only work in one direction.

I am generating list of points like this.

Point in PD 0.150615998712507 - 0.101793686778004*I

and I want to add text in that coordinates, but I cannot find a way to coerce and get for example the complex number 0.1506 - 0.1017*I (even such exaggerate approximation will work in a plot)

Surely I am missing a method. Can you help me with this?

Thanks in advance

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted

answered 2019-01-29 17:34:22 +0200

tmonteil gravatar image

First, you really need to provide the explicit construction of th objects, so that we can try to reproduce.

Without more information, let me assume that the P you speak about is of this form:

sage: H = HyperbolicPlane().PD()
sage: P = H.random_element()
sage: P
Point in PD 0.457058290632951 - 0.778395192442617*I


sage: real_part(P)
TypeError: cannot coerce arguments: no canonical coercion from Hyperbolic plane in the Poincare Disk Model to Symbolic Ring

To find a method related to some object, a very nice way is to use tab-completion, that is you type:

sage: P.<TAB>

Where <TAB> stands for the tab-key (which looks like two arrows on your keyboard).

There, you will find:

sage: P.coordinates()
0.457058290632951 - 0.778395192442617*I
sage: parent(P.coordinates())
Symbolic Ring

Which looks good, given the previous error message, and indeed, the following works:

sage: C = P.coordinates()
sage: word = text('my word',(real_part(C),imag_part(C)), color='black')
sage: word
Launched png viewer for Graphics object consisting of 1 graphics primitive
edit flag offensive delete link more


What an amazing trick! I had no idea of the existence of the <tab> function!

Gaston Burrull gravatar imageGaston Burrull ( 2019-01-30 02:29:15 +0200 )edit

This is the first thing i teach during Sage trainings !

tmonteil gravatar imagetmonteil ( 2019-01-30 10:52:34 +0200 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower


Asked: 2019-01-29 12:46:03 +0200

Seen: 239 times

Last updated: Jan 29 '19