# Revision history [back]

This may be an answer to a different question, since i never used Mathematica in mathematical research, (and teaching was done with a University licence,) but i please allow it.

First of it is not clear from the post what kind of UI (user interface) is meant. If something like

https://mathematica.stackexchange.com/questions/54631/mathematica-user-interface-tutorial

is the UI, then just use notebook, web based.

I also have no idea which keyboard shortcuts make the work friendly in Mathematica. Please add this information, then there will be also more pointed answers. Personally, i have the following modi of research work in sage, and for any of them there is the right key binding solution.

• Quick code to get a quick answer to a relatively simple question (involving complicated structure, that i have already understood). Then i start a linux terminal, inside of it start sage by typing sage, this gives the iron python interpreter with automatical support for classes and methods. For instance, after typing the TAB (tabulator, twice) we get the list of all methods that can be applied on the object a,

sage: a = 2018
sage: a.abs<TAB><TAB>
a.abs                         a.conjugate                   a.dump
a.base_extend                 a.crt                         a.euclidean_degree
a.base_ring                   a.dat                         a.exact_log
a.binary                      a.degree                      a.exp


And there is a direct access to "kernel" information on the used objects:

sage: a.__class__
<type 'sage.rings.integer.Integer'>


Note that a is already a complicated object, not a dummy python integer. To get its divisors, we can type a.di, then the TAB(s), the list of the methods is

sage: a.di<TAB><TAB>
a.digits                      a.divides
a.dist                        a.divisors
a.divide_knowing_divisible_by


we type three more letters and then TAB again, finally the (). And here we have them:

  sage: a.divisors()
[1, 2, 1009, 2018]


Here, it is very useful to see the names of the methods, a potential student learning - say - something about number fields, could type K.<u> = QuadraticField( 2019 ), then K.<TAB> and see all names of methods related / applicable for this kind of instance. This is already a lot of comfort! Note also that typing

a.divisors?


gives a description of the method, and also examples to get started. Moreover, a.divisors?? gives the code, and many sage users will never switch to Mathematica for this one reason.

Many features of iron python work, e.g. Control+A to get to the beginning of the line, Control+E for its end, Control+R to reverse search, e.g.

sage: a.divisors()

I-search backward: a.


(here i typed Control+R, then a., the last command i had with a. appears, enter gets it.) Also, %cpaste allows to paste into the interpreter bigger code chunks. (Shift+Insert inserts them. Enter would then further evaluate the lines.)

• The second case is when i am trying to get some research project work, for instance writing the matrix of some element of the Iwahori-Hecke-algebra acting on some special Kazhdan-Lusztig cell. Then, as in the previous answer of Emmanuel Charpentier, i am starting emacs, use pyhton mode, and get best key bindings i need, e.g. automatic extension of names, after binding dabbrev-expand to some key (e.g. F1), and a customized syntax highlight. The code can then be executed either in an emacs shell, or loaded in a sage terminal.

• The third use case has no parallel in Mathematica. This is when i have a bug. Then i start eclipse and debug inside the one method that failed. Step by step. I can initialize somewhere in the code some Kazhdan-Lusztig cell and run a unit test against the method that failed. (A new dimension occurs, while finding the error, there may be immediately a need to change / extend the code, yes, one can do it. For herself / himself for the sake of the own project, or sharing the idea with the world. It is the last chance, that made and makes sage so strong. Even a typo corrected in an example is a great job to contribute!)

These three "user interfaces" are all i need in sage: the ipyton interpreter with the sage preprocessing, emacs as an editor for a longer work and own design of classes (in an object oriented language), and eclipse (or pycharm) for debug.

This may be an answer to a different question, since i never used Mathematica in mathematical research, (and teaching was done with a University licence,) but i please allow it.

First of it is not clear from the post what kind of UI (user interface) is meant. If something like

https://mathematica.stackexchange.com/questions/54631/mathematica-user-interface-tutorial

is the UI, then just use notebook, web based.

I also have no idea which keyboard shortcuts make the work friendly in Mathematica. Please add this information, then there will be also more pointed answers. Personally, i have the following modi of research work in sage, and for any of them there is the right key binding solution.

• Quick code to get a quick answer to a relatively simple question (involving complicated structure, that i have already understood). Then i start a linux terminal, inside of it start sage by typing sage, this gives the iron python interpreter with automatical support for classes and methods. For instance, after typing the TAB (tabulator, twice) we get the list of all methods that can be applied on the object a,

sage: a = 2018
sage: a.abs<TAB><TAB>
a.abs                         a.conjugate                   a.dump
a.base_extend                 a.crt                         a.euclidean_degree
a.base_ring                   a.dat                         a.exact_log
a.binary                      a.degree                      a.exp


And there is a direct access to "kernel" information on the used objects:

sage: a.__class__
<type 'sage.rings.integer.Integer'>


Note that a is already a complicated object, not a dummy python integer. To get its divisors, we can type a.di, then the TAB(s), the list of the methods is

sage: a.di<TAB><TAB>
a.digits                      a.divides
a.dist                        a.divisors
a.divide_knowing_divisible_by


we type three more letters and then TAB again, finally the (). And here we have them:

  sage: a.divisors()
[1, 2, 1009, 2018]


Here, it is very useful to see the names of the methods, a potential student learning - say - something about number fields, could type K.<u> = QuadraticField( 2019 ), then K.<TAB> and see all names of methods related / applicable for this kind of instance. This is already a lot of comfort! Note also that typing

a.divisors?


gives a description of the method, and also examples to get started. Moreover, a.divisors?? gives the code, and many sage users will never switch to Mathematica for this one reason.

Many features of iron python work, e.g. Control+A to get to the beginning of the line, Control+E for its end, Control+R to reverse search, e.g.

sage: a.divisors()

I-search backward: a.


(here i typed Control+R, then a., the last command i had with a. appears, enter gets it.) Also, %cpaste allows to paste into the interpreter bigger code chunks. (Shift+Insert inserts them. Enter would then further evaluate the lines.)

• The second case is when i am trying to get some research project work, for instance writing the matrix of some element of the Iwahori-Hecke-algebra acting on some special Kazhdan-Lusztig cell. Then, as in the previous answer of Emmanuel Charpentier, i am starting emacs, use pyhton mode, and get best key bindings i need, e.g. automatic extension of names, after binding dabbrev-expand to some key (e.g. F1), and a customized syntax highlight. The code can then be executed either in an emacs shell, or loaded in a sage terminal.

• The third use case has no parallel in Mathematica. This is when i have a bug. Then i start eclipse and debug inside the one method that failed. Step by step. I can initialize somewhere in the code some Kazhdan-Lusztig cell and run a unit test against the method that failed. (A new dimension occurs, while finding the error, there may be immediately a need to change / extend the code, yes, one can do it. For herself / himself for the sake of the own project, or sharing the idea with the world. It is the last chance, that made and makes sage so strong. Even a typo corrected in an example is a great job to contribute!)

These three "user interfaces" are all i need in sage: the ipyton interpreter with the sage preprocessing, emacs as an editor for a longer work and own design of classes (in an object oriented language), and eclipse (or pycharm) for debug.