# get short name for QQ, RDF, AA etc

I wonder whether there is a way to get back the short name of the function of the various rings and fields like QQ, RDF, AA, RLF, RR, etc. as a string.

For example

sage: a=QQ
sage: str(a)
'Rational Field'


But I am looking for something like:

sage: function_I_want(a)
'QQ'


I guess I could predefine a dictionary like this:

shortnames={eval(name):name for name in ['QQ', 'RDF', 'AA', 'RLF', 'RR']}


and then have a function

def function_I_want(a):
return shortnames[a]


But this seems a bit clumsy. Is there a better way to do this; or is there somewhere in the sage code such a dictionary already defined?

edit retag close merge delete

1

The name QQ is not an intrinsic property of the field of rational numbers. It's just that for convenience, the default toplevel environment has the binding QQ=RationalField(). You cannot really let the Rational Field depend on it. For the bug you're referring to: You cannot assume rings have a "short, globally defined name". There are infinitely many possible finite fields and number fields already, in different representations.

( 2017-01-03 21:30:51 +0200 )edit

thanks for the explanation!

( 2017-01-03 23:32:50 +0200 )edit

Sort by ยป oldest newest most voted

You can use the sage_input function, which, luckily selects the short name among the possible constructions:

sage: a = RationalField()
sage: sage_input(a)
QQ


It seems however not to work with RLF:

sage: for obj in [QQ, RDF, AA, RR, ZZ, QQbar, RLF]:
....:     print sage_input(obj)
QQ
RDF
AA
RR
ZZ
QQbar
ValueError: Can't convert Real Lazy Field to sage_input form

more