spyder-ide / spyder

Official repository for Spyder - The Scientific Python Development Environment
https://www.spyder-ide.org
MIT License
8.32k stars 1.61k forks source link

Add an easier way to enter greek characters in the Editor #879

Open spyder-bot opened 9 years ago

spyder-bot commented 9 years ago

From ricardob...@gmail.com on 2011-12-12T06:19:20Z

Hi there,

I would like to put--something I've had in mind for a while-- into consideration to the community.

It's been about two months since I've started using Spyder, and I just love it, and I think it will try my best to not go back to Matlab anymore. The reason, open and free!

Now, I'm in research, specifically in engineering, and have to deal with a lot of physical formulas, do a few numerical integration, simulate physical phenomena, and all that kind of stuff. The people in the field, the ones that most certainly will be using Spyder, know that doing this kind of coding requires a lot of variables that in maths are usually represented in greek letters.

I have always thought, that it would great to have a sortof a plugin that would allow to have Greek characters within the python script.

Just imagine this piece of code: THETA = THETAo/(THETAo^2 + LAMBDAo^2), written, with the actual Greek characters used in paper, like this: Θ = Θo/(Θo^2 + Λo^2).

I know that many people would like to have this, and it would be a lot more easy to read scientific code written by others.

Is this possible to add, as a plugin or some other way, to Spyder. I've thought that to input Greek character would be done with some key combination like: Ctrl+Alt+A = Λ, or Super+A = Λ.

Off course a script with this functionality would have to be preprocessed and convert 'Λ' to 'Alpha', for example, in order to the python interpreter to be able to compile the script.

Maybe the use of a '.pyg' (the 'g' stands fot Greek), or something similar, for the file containing the Greek characters and the the processed file '.py' with have only unicode valid characters.

Just a thought.

What do you guys think about such a functionality?

Original issue: http://code.google.com/p/spyderlib/issues/detail?id=879

spyder-bot commented 9 years ago

From ccordoba12 on 2011-12-12T06:33:38Z

Thanks Ricardo for the suggestion. I think it's a good one but unfortunately not very "pythonic", in the sense that it tries to modify the syntax of language allowing unsupported characters. Most people don't like it because it gives false impressions.

The good news is that unicode characters in code are (or are going to be, not really sure) supported in Python 3, so this will be valid when Spyder switches to it.

Thanks for your interest in Spyder and for your kind words, Carlos

Summary: Let greek characters to be written in the editor and then converted to ascii before execution
Labels: -Type-Defect Type-Enhancement Cat-Editor

spyder-bot commented 9 years ago

From pierre.raybaut on 2011-12-29T08:54:36Z

Thanks for your support, Ricardo. Spyder was precisely designed for helping people switching from Matlab to Python and never looking back. That's why I'm always happy to learn that people actually like it and use it as a powerful way of discovering the scientific Python ecosystem. So thanks again for your enthusiasm. 

As Carlos righteously mentioned, Python 3 natively supports Unicode characters, so supporting Python 3 will implicitly  close this issue. However the whole scientific Python community is not ready (not yet) to migrate code to Python 3. Even it's hard to tell right now, maybe this change will occur in 2013, but I doubt that scientists will adopt Python 3 before the end of next year. So Python 3 support will probably be added at the end of 2012 -- we'll see. 

In the meantime, your feature request could be taken care of using another approach. I'm thinking of doing the opposite of your original suggestion: we could simply write Greek letters in plain text ("sigma" for lower-cased sigma, "Sigma" or "SIGMA" for upper-cases sigma) and Spyder's source code editor would be in charge of transforming those expressions to the corresponding Unicode characters. So this would only be an optional display option in Spyder's editor that would not break compatibility with an execution outside Spyder because, in the source code, the variable names would still be standard AS CII characters. Furthermore, most of the scripts written outside Spyder or before the implementation of this feature would be displayed with real Greek letters without any transformation.  Anyway, that's the theory. As for the implementation of this, I think that it could be relatively efficient but it would add some complexity to the editor widget. The more efficient solution would be to have two versions of the source code: one with the original variable names in plain text, the other with the Unicode replacements, thus forcing to handle these two text strings instead of a single one. I'm not sure how difficult it would be to implement but if it is not too much work, I think it would be a great addition to Spyder. I too have to implement complex mathematical expressions with Greek letters in my Python code, and it is indeed a problem as equations tend to spread on multiple lines hence reducing the code readability.

spyder-bot commented 9 years ago

From pierre.raybaut on 2012-03-18T14:07:26Z

Labels: -Type-Enhancement Type-Enh

spyder-bot commented 9 years ago

From ccordoba12 on 2014-08-23T13:52:18Z

Labels: MS-v2.4

spyder-bot commented 9 years ago

From contrebasse on 2014-08-24T14:19:31Z

You can use any non-numerical character for your variables in python3. Is there anything left to do ?

spyder-bot commented 9 years ago

From ccordoba12 on 2014-08-24T14:31:51Z

We can add something like Julia did in its 0.3 version: let introduce and code-complete them as latex strings, like:

\beta => β

I think that could really help people to use this feature.

Status: Accepted

spyder-bot commented 9 years ago

From dhoeg...@gmail.com on 2014-08-30T07:05:27Z

I have used Julia a bit lately and I think it's killer feature, it shorten's many formulas substantially and there by increases clarity.

spyder-bot commented 9 years ago

From ccordoba12 on 2014-08-30T08:15:05Z

IPython is adding this feature too, so I think we are going to shamelessly steel it from it :-)

spyder-bot commented 9 years ago

From ccordoba12 on 2014-09-21T11:17:17Z

This is the corresponding PR in the IPython side, for reference: https://github.com/ipython/ipython/pull/6380

Labels: Easy

spigelli commented 5 years ago

Not sure if anyone's still looking into this, but just submitted a PR for prettify-python, an intellij plugin, that does this using code folding.

qrqiuren commented 4 years ago

This is the function I am looking for. By the way, the Julia documentation here shows the tab conversion for Unicode characters: https://docs.julialang.org/en/v1/manual/unicode-input/index.html


Update: I decided to give up because I tried many ways of implementation but no one works.

sylvaticus commented 4 years ago

Hello, which is the situation for this feature request ? Coming from the Julia world, I can confirm it is really useful..

I can see that the pull request for ipython has been merged, but:

Ps: I think the title of this issue should be changed to "Add an easier way to enter Unicode characters (like Greek letters, superscripts,...) in the Editor"

[EDIT:] I see that subscript/superscript are not valid characters for identifiers in Python3, so the max I can hope is "just" Greek letters..

goanpeca commented 4 years ago

Will work on this, should be straight forward to do.

https://github.com/ipython/ipython/blob/00f0d8afe7a585a78092ddf14d62fabd113da8e3/IPython/core/latex_symbols.py

ccordoba12 commented 4 years ago

I think you need to add a new completion provider to handle this specific case.

goanpeca commented 4 years ago

Like additional to the Fallback one?

Like latex-provider ?

cghiaus commented 3 years ago

I type \greek_letter < TAB > in IPython cosole (e.g. \lambda) < TAB > which gives λ) then I copy / paste in Editor.

habtie-phys commented 2 years ago

I type \greek_letter < TAB > in IPython cosole (e.g. \lambda) < TAB > which gives λ) then I copy / paste in Editor.

Thanks. This was helpful.