(index of previous posts:
https://github.com/sagemath/sage/issues/29705)
In the open source world, as we all know, a powerful mechanism is that people often start out as users of a package, then gradually start contributing to it, and then some find a path to becoming major contributors or maintainers.
Using a package
U, in Python, often means that you create your own package
D to be published on
PyPI with a dependency on
U.
I argued in
post I that (without the modularization) no portion of Sage is viable to be used as the dependency
U of any Python package
D, and that therefore the developers of
D face the difficult decision: "Are the facilities that a portion of Sage offers really important enough for my project
D --- that it makes sense to accept being isolated from the rest of the Python world?"
So let's first take a look at the portions of Sage with an eye on their potential to find many new users if we make them usable separately.
I will preface my remarks with the following:
(1) Of course, all portions of Sage are the product of wonderful contributions by dedicated individuals over the years.
(2) Some portions of Sage serve a very important purpose within Sage but cannot be plausibly marketed to users who are not already using Sage. That's OK and nobody's at fault.
(3) I may have edited your docstrings and doctests and may know a lot about the dependencies of your code, but I don't necessarily claim to know the mathematics that this code is about or uses, or what its standing of the code in the field is, etc.
So consider this as a mere start of a discussion, with the goal of eventually determining a strategy.
sage.geometry.polyhedron:
- Obvious strong potential for use outside of Sage. There's nothing like it in the Python world, and it's competitive with the standalone package Polymake (which uses Perl as the interaction language).
- Core functionality just needs linear algebra over QQ, ZZ, and a few well-known specialized small libraries. And everyone knows that; it's very hard to explain that in order to use it, they need to pull in gigabytes of unrelated mathematics.
sage.graphs:
- Suppose we make all or most of its functionality available to users by "pip install sagemath-graphs".
- This is not a rhetorical question; I don't know the answer, and if/when we prepare sagemath-graphs, this answer would need to go on the front page of the package.
sage.numerical.mip:
- SageMath's in-house multiple-backend mixed integer programming interface is important for sage.graphs and sage.combinat, but it currently has no distinguishing features that would make it interesting to users who are not already using Sage. (There are lots of alternatives in Python, see
https://github.com/sagemath/sage/issues/26511, many with lots of users and some with lots of developers.)
sage.finance, sage.logic, sage.plot, sage.probability, sage.stats:
- Probably not.
sage.symbolic:
- It's complicated.
sage.schemes, sage.lfunctions, sage.modular:
- Hoping for experts to comment.