I get the reasons for not supporting out of order execution and the % variable, it makes for more readable and usable notebooks. Unfortunately most of the time I use Mathematica it is not to make a readable and repeatable notebook but just to help with uni work, so I do take shortcuts like putting multiple statements in a block and using % frequently.
If you are planning to add another component, I'd like to +1 the control systems module. It's a lot less clunky than Matlab in my opinion and faster to use. I've used the classical analysis, state space model and matrix equation solver features in that module, none of the microcontroller stuff https://reference.wolfram.com/language/guide/ClassicalAnalys...
Either way, I'll probably be using this after I graduate and no longer have the site license, since I cannot imagine using a different CAS, so thanks for developing this
A suggestion: I think the python api could be more useful if it returned a structured tree and possibly also could accept a structured tree. I'm guessing you're using maturin, there are some nice low energy ways of getting a tree like structure out even if you have to copy internal trees into a new version with nice python bindings. I've done similar things here https://github.com/philzook58/scryerpyhttps://github.com/philzook58/steelpyhttps://github.com/philzook58/microeggpy
Since then, we've made more than 7,000 commits and massively expanded Woxi's feature set. So it's well worth another try for anyone who tried it back then!
You now fully support version 1.0. IIRC, the first version of Mathematica I used back in early 1993 was 2.1 soon followed by 2.2, which was useful for a couple of years. How much extra work is it to reach full compatibility with that version? (I had used MathLink at the time.)
I like this project! I've used Wolfram Language since high-school and collected a large number of notebooks that I revisit sometimes. I'm curious, what fraction of cells work under Moxi? 1,275 notebooks, 3GB archive here -- https://drive.google.com/file/d/1RRqHnnCUevm7E0zKsHQvKNKxpzZ...
As sometime who's never used Wolfram Languages before this project has gotten me interested.
For sometime now I've been looking into a good CAS for my app. I've tried a few algebra problems with Sympy, Sage, Xcas, Maxima and Woxi. Of these only Sage, Maxima and Woxi were capable of giving the expected answers.
After trying it out I became fascinated by Wolfram language and other term rewriting languages they are pretty interesting even though most have little to do with CAS like WL.
Anyway I've been looking at this project and plan to seriously use it in the future. So, I've noticed a few things when attempting to run wljs (I had to wrap it with a shell script to get wljs to see it as wolframscript executable). First the version number system variable gives a string instead of the expected real number type (As a temporary hack I modified Woxi to give what wljs expects). There also is a variable that tells to the absolute path of the of the current file and it is wrong when it's used in an imported script. After working around that with hard coded paths things became more difficult.
Edit: just checked my pc and the variables are called $VersionNumber and $InputFileName which is incorrect if the file is evaluated via Get["filepath"].
Anyways, I'm interested in helping out don't know if I can.
Open-source reimplementations of mature tools are underrated. The interesting part is often not just feature parity, but making the technology easier to embed into new workflows.
I always preferred Mathematica for that to SymPy since it's baked in to the language much more. It was also way way faster than SymPy was for anything interesting.
Performance is pretty good for most stuff by now. However, there are functions which not optimized yet or implemented in a very basic way and if you use them in non-trivial ways the performance might be quite slow. We're happy about any reports of such issues at https://github.com/ad-si/Woxi/issues!
Yes, Rubi mostly works by now! Performance is still a concern, but we're working on improving it. I'll add some information on how to best use Rubi to the documentation soon. I already have a draft, but didn't find the time to finish it, yet.
I’m going to get hate here but what the heck I have karma points to burn. What I have to say is not a critique of this particular project which seems nicely done but a general statement on open source.
I’d rather see more open source projects making something new than so much “Open Source reimplementation.” If closed proprietary companies are so worthless then why do so many open source projects copy those implementations. Did Wolfram really discover the one true way in its language syntax and presentation layer? If it did, is the idea of open source really just making it unviable for companies to invest in important things like that? To be clear these are of course rhetorical questions. The open source world could experiment (and in defense sometimes does) with truly new approaches and interfaces. I just want to see more of it.
Mathematica exists. Mathematica for free versus Mathematica for money is of course a nice trade. But even better would be to try new ways to interact with mathematics unburdened from legacy concerns.
I think the Wolfram Language got 80–90% of it right, and that's why I want to reimplement and use it in the first place. It bothers me that I have to use inferior solutions, such as those implemented in Python and Julia, just because the better solution is prohibitively expensive.
Of course, there are a few things I think we can do better than the Wolfram Language, but given all the available legacy code, there's really no point in making it slightly different and losing the ability to use that code. However, we might build an alternative syntax and frontend in the future that surfaces the capabilities of the Wolfram Language with a better UX.
Good points all. Please understand this is more of a general open source friendly criticism I made. There is good value in preserving access to codebases made for Wolfram language which is expensive albeit they do offer decent licenses now to mess around with it.
I’m curious abut benchmarking. Wolfram claims they put a ton of effort into optimizing the speed of at least certain types of mathematical computations.
UX is an area I’d suggest working on. Wolfram was a real pioneer with the notebook style interface but nothing is meant to last forever. That might be an area to innovate without losing access to legacy codebases.
They spent a lot of effort on consistent naming. It's basically equivalent of hundred of open source math/visualization packages merged into one, and a single person has made sure for 30 years that functionality integrates in a consistent way. It's much less overhead to remember that using a large collection of OSS libraries. So the naming structure in itself is valuable
Not mutually exclusive? The fact that money is being paid for some closed source product does at least prove there is an actual demand for whatever they figured out to do, and how. So either a marginal improvement, or simply open sourcing a subset of an existing product, or making something completely new, or better... all good isn't it?
Maybe reimplementing something that already exists a couple times over leads to good things as well. I can imagine some subtle insights could be gained which matter to some of the user base.
Closed source, proprietary license, starting at $195/year. Their language is a moat for customers, and this is a bridge back out. If you aren’t getting any benefit from their development direction and the compute is happening on your own hardware, what are you paying a subscription for?
I mean, you're basically asking why people don't do high-quality original work and give it away for free, as opposed to copying something that's successful and giving it away for free.
The answer in my mind is fairly obvious: it's far more difficult and risky to do high-quality original work and give it away for free. If you want to see more original innovative work in open source, the two main ways to achieve that are to either do it yourself, or to pay others to do it.
I get the reasons for not supporting out of order execution and the % variable, it makes for more readable and usable notebooks. Unfortunately most of the time I use Mathematica it is not to make a readable and repeatable notebook but just to help with uni work, so I do take shortcuts like putting multiple statements in a block and using % frequently.
If you are planning to add another component, I'd like to +1 the control systems module. It's a lot less clunky than Matlab in my opinion and faster to use. I've used the classical analysis, state space model and matrix equation solver features in that module, none of the microcontroller stuff https://reference.wolfram.com/language/guide/ClassicalAnalys...
Either way, I'll probably be using this after I graduate and no longer have the site license, since I cannot imagine using a different CAS, so thanks for developing this
A suggestion: I think the python api could be more useful if it returned a structured tree and possibly also could accept a structured tree. I'm guessing you're using maturin, there are some nice low energy ways of getting a tree like structure out even if you have to copy internal trees into a new version with nice python bindings. I've done similar things here https://github.com/philzook58/scryerpy https://github.com/philzook58/steelpy https://github.com/philzook58/microeggpy
This was also posted 6 months ago: https://news.ycombinator.com/item?id=47155526
Since then, we've made more than 7,000 commits and massively expanded Woxi's feature set. So it's well worth another try for anyone who tried it back then!
You now fully support version 1.0. IIRC, the first version of Mathematica I used back in early 1993 was 2.1 soon followed by 2.2, which was useful for a couple of years. How much extra work is it to reach full compatibility with that version? (I had used MathLink at the time.)
We currently support almost everything up to version 6.0. Here is a detailed comparison with all Mathematica versions: https://woxi.ad-si.com/docs/comparison/mathematica/
However, MathLink is one of the few exceptions as it is deprecated by now.
Thanks
I like this project! I've used Wolfram Language since high-school and collected a large number of notebooks that I revisit sometimes. I'm curious, what fraction of cells work under Moxi? 1,275 notebooks, 3GB archive here -- https://drive.google.com/file/d/1RRqHnnCUevm7E0zKsHQvKNKxpzZ...
Thanks! I’m interested as well … I’ll check it out and report back!
As sometime who's never used Wolfram Languages before this project has gotten me interested.
For sometime now I've been looking into a good CAS for my app. I've tried a few algebra problems with Sympy, Sage, Xcas, Maxima and Woxi. Of these only Sage, Maxima and Woxi were capable of giving the expected answers.
After trying it out I became fascinated by Wolfram language and other term rewriting languages they are pretty interesting even though most have little to do with CAS like WL.
Anyway I've been looking at this project and plan to seriously use it in the future. So, I've noticed a few things when attempting to run wljs (I had to wrap it with a shell script to get wljs to see it as wolframscript executable). First the version number system variable gives a string instead of the expected real number type (As a temporary hack I modified Woxi to give what wljs expects). There also is a variable that tells to the absolute path of the of the current file and it is wrong when it's used in an imported script. After working around that with hard coded paths things became more difficult.
Edit: just checked my pc and the variables are called $VersionNumber and $InputFileName which is incorrect if the file is evaluated via Get["filepath"].
Anyways, I'm interested in helping out don't know if I can.
I have used Wolfram a before but I mostly use Sympy. Looking forward to trying this out. If it is faster than Sympy then that would be a huge help.
Open-source reimplementations of mature tools are underrated. The interesting part is often not just feature parity, but making the technology easier to embed into new workflows.
What is the performance like for symbolic maths?
I always preferred Mathematica for that to SymPy since it's baked in to the language much more. It was also way way faster than SymPy was for anything interesting.
Performance is pretty good for most stuff by now. However, there are functions which not optimized yet or implemented in a very basic way and if you use them in non-trivial ways the performance might be quite slow. We're happy about any reports of such issues at https://github.com/ad-si/Woxi/issues!
Can it run Rubi?
https://rulebasedintegration.org/
Yes, Rubi mostly works by now! Performance is still a concern, but we're working on improving it. I'll add some information on how to best use Rubi to the documentation soon. I already have a draft, but didn't find the time to finish it, yet.
I’m going to get hate here but what the heck I have karma points to burn. What I have to say is not a critique of this particular project which seems nicely done but a general statement on open source.
I’d rather see more open source projects making something new than so much “Open Source reimplementation.” If closed proprietary companies are so worthless then why do so many open source projects copy those implementations. Did Wolfram really discover the one true way in its language syntax and presentation layer? If it did, is the idea of open source really just making it unviable for companies to invest in important things like that? To be clear these are of course rhetorical questions. The open source world could experiment (and in defense sometimes does) with truly new approaches and interfaces. I just want to see more of it.
Mathematica exists. Mathematica for free versus Mathematica for money is of course a nice trade. But even better would be to try new ways to interact with mathematics unburdened from legacy concerns.
I think the Wolfram Language got 80–90% of it right, and that's why I want to reimplement and use it in the first place. It bothers me that I have to use inferior solutions, such as those implemented in Python and Julia, just because the better solution is prohibitively expensive.
Of course, there are a few things I think we can do better than the Wolfram Language, but given all the available legacy code, there's really no point in making it slightly different and losing the ability to use that code. However, we might build an alternative syntax and frontend in the future that surfaces the capabilities of the Wolfram Language with a better UX.
Good points all. Please understand this is more of a general open source friendly criticism I made. There is good value in preserving access to codebases made for Wolfram language which is expensive albeit they do offer decent licenses now to mess around with it.
I’m curious abut benchmarking. Wolfram claims they put a ton of effort into optimizing the speed of at least certain types of mathematical computations.
UX is an area I’d suggest working on. Wolfram was a real pioneer with the notebook style interface but nothing is meant to last forever. That might be an area to innovate without losing access to legacy codebases.
They spent a lot of effort on consistent naming. It's basically equivalent of hundred of open source math/visualization packages merged into one, and a single person has made sure for 30 years that functionality integrates in a consistent way. It's much less overhead to remember that using a large collection of OSS libraries. So the naming structure in itself is valuable
Not mutually exclusive? The fact that money is being paid for some closed source product does at least prove there is an actual demand for whatever they figured out to do, and how. So either a marginal improvement, or simply open sourcing a subset of an existing product, or making something completely new, or better... all good isn't it?
Maybe reimplementing something that already exists a couple times over leads to good things as well. I can imagine some subtle insights could be gained which matter to some of the user base.
Closed source, proprietary license, starting at $195/year. Their language is a moat for customers, and this is a bridge back out. If you aren’t getting any benefit from their development direction and the compute is happening on your own hardware, what are you paying a subscription for?
I mean, you're basically asking why people don't do high-quality original work and give it away for free, as opposed to copying something that's successful and giving it away for free.
The answer in my mind is fairly obvious: it's far more difficult and risky to do high-quality original work and give it away for free. If you want to see more original innovative work in open source, the two main ways to achieve that are to either do it yourself, or to pay others to do it.