6 ms·
I like sagemath. They have integration with sympy, and they also have many features making python simpler when you want to do mathematical things. There's late
by machina_ex_deus 4y ago
I like sagemath. They have integration with sympy, and they also have many features making python simpler when you want to do mathematical things.
There's latex display feature when in notebook. It looks good, can even have symbolical matrices and display them as you would've expected.
It's on par with Wolfram notebook, but you get to program in python instead of some propietary language.
If you got some really long formula, it's easier to see you got it correctly by displaying it symbolically in latex.
They have other things to smooth out the parts of python which are annoying in math, like exponentiation works with ^, and dividing integers returns a rational number instead of floating point or an integer.
- westurner 4y ago> They have other things to smooth out the parts of python which are annoying in math, like exponentiation works with ^, and dividing integers returns a rational number instead of floating point or an integer. SageMath also has a multivariate inequality solver IIRC. `*` is repeated multiplication (exponentiation) in Python. If you require preprocessing to translate ^ to *, you don't have valid Python code that'll run with any other interpreter. Is it easier to import SageMath from a plain Python script now; with conda repackaging? Type promotion in Python: from rational import Rational assert Rational(1, 4) / 2 == Rational(1, 8) Python 2 had a __future__ import to do floatdiv instead of floordiv: from __future__ import division assert 3 / 2 == 1.5 assert 3 // 2 == 1 assert 4 / 2 == 2.0 Python 3 returns floats from ints or decimals IIRC: assert 3 / 2 == 1.5 assert 3.0 / 2 == 1.5 assert 3 // 2 == 1 assert 4 / 2 == 2.0
- williamstein 4y ago> Is it easier to import SageMath from a plain Python script now; with conda repackaging? Yes, it's easy. It was always possible, since fortunately none of the Sage library implementation uses the Sage preprocessor. You could always do "sage -python" and you get the Python interpreter that Sage uses, and can import Sage via "import sage.all". Somebody asked me exactly this question at a colloquium talk I gave on Sage yesterday, and here's my answer/demo: https://youtu.be/dy792FEh1ns?t=1140 https://youtu.be/dy792FEh1ns?t=1140 In the demo, I use a Jupyter kernel that runs the Python included in Sage-9.8. Disclaimer: I created the Sage preparser long ago, in order to make Sage more palatable to mathematicians. In particular, it was inspired by audience feedback during a live demo I did at PyCon 2005.
- williamstein 4y ago> They have other things to smooth out the parts of python I should add that this is an interesting chunk of Python code, and we've always planned to separate it out from Sage as a separate library than could be used with Sympy, etc. https://github.com/sagemath/sage/blob/52a81cbd161ef4d5895325657c88a68590ea1d3b/src/sage/repl/preparse.py https://github.com/sagemath/sage/blob/52a81cbd161ef4d5895325... It does a surprising number of little clever things we realized would be a good idea over years, and it has some neat ideas from various Python PEP's like [1..10] that were rejected from Python, but are very useful when expressing mathematics. It's also annoying when you just want to format your code using prettier (say), and you can't because Sage isn't Python. :-(
- westurner 4y agoRecently I've been working with the %%ipytest magic command for running pytest in notebooks. Is there a %%sage IPython magic method that passes code through the preparse.py input transform?
- westurner 4y agosrc/sage/repl/ipython_extension.py: https://github.com/sagemath/sage/blob/develop/src/sage/repl/ipython_extension.py https://github.com/sagemath/sage/blob/develop/src/sage/repl/... docs: https://doc.sagemath.org/html/en/reference/repl/sage/repl/ipython_extension.html https://doc.sagemath.org/html/en/reference/repl/sage/repl/ip... https://github.com/sagemath/sage/blob/develop/src/sage/repl/ipython_tests.py https://github.com/sagemath/sage/blob/develop/src/sage/repl/...
- vacuumcl 4y agoAs someone who does research with computer algebra systems (mainly Wolfram Mathematica) many hours a day, I think that SymPy is still far behind Mathematica. The fundamental design of Mathematica based on replacement rules and a style of functional programming is quite difficult to beat in terms of ease of use. A few weeks ago I gave SymPy another try, and tried to implement a nested sum of the type 1 <= a_1 < ... < a_k <= n over a complicated summand f(a_1, ... ,a_k), where k and n are integer arguments, and it took me ages to figure out how to implement this in SymPy, whereas I in Mathematica I can write this in a minute.
- FPGAhacker 4y agoIs that maybe because you are familiar with Mathematica?
- auggierose 4y agoI don't have experience with SageMath, but if they are really running on Python, then they are surely giving up on some of the nice rewriting that Mathematica is based on, as I would expect then a library call is needed instead in Python.
- vacuumcl 4y agoNo. In Mathematica important operations like mapping functions over sets (arrays/tensors) at various depths have simple operators such as (/@, @, @@, @@@). You can do functional composition using @*, etc. You don't need to define your variables and functions before being able to write them in expressions. Often you want to have intermediate terms that have some temporary name, and which get substituted later on. The replacement rules in Mathematica are very powerful for this. As another example, I googled some project Euler solutions in Mathematica and (pure Python) and found this: https://www.nayuki.io/page/project-euler-solutions https://www.nayuki.io/page/project-euler-solutions. Compared to the pure Python solutions, the Mathematica code is typically much smaller. Of course this is not Sympy, but a lot of the Python syntax carries over to SymPy as well.
- 4y ago
- steve1977 4y ago> It's on par with Wolfram notebook, but you get to program in python instead of some propietary language. I‘m not sure if that’s a good thing, considering how nice and well-suited to maths the Wolfram language is. I get that you need to learn yet another language, but you would also need to learn the particularities of Sagemath and/or the libraries it builds on.