(Disclaimer: I haven't yet read this entire thread when writing my 
response.)

Chris -- who wrote abelfunctions -- is a Univ of Wash grad student I 
> know.  I recently ran into him and he told me that he had spent years 
> writing this package as a standard Python package depending on sympy 
> (mainly) and not Sage.  However, it was getting quite frustrating to 
> finish abelfunctions, due to him needing things that are in Sage (I 
> think things like interval arithmetic?).   He didn't want to develop 
> his code in a way that depended on Sage, because he wanted it to be 
> more widely available, and he clearly didn't see the value in having 
> the code packaged as part of Sage for only a few small things.    This 
> is a great example of how our centralized monolithic approach is 
> overall not the best for the community at large. 
>
> I've cc'd Chris in case he wants to clarify this, since I might not 
> understand. 
>

I remember discussions of this "modularized Sage" proposal way back when I 
was an undergraduate so I don't think it's anything new. In fact, hearing 
William talk about these issues back then is, in part, what prompted me to 
design my Sage package the way I did.

That being said, I can only really comment on my own experience developing 
Abelfunctions (http://github.com/abelfunctions/ableufncitons). As William 
mentioned, I started writing Abelfunctions such that only depended on very 
common core Python packages. Anaconda is very popular in the applied 
mathematics community and many of the key scientific computing packages I 
needed (e.g. Numpy, Scipy, networkx) are included in Anaconda as well as in 
Sage. This design seemed like a good idea at the time since my code could 
reach as many people as possible.

However, I slowly realized that Sympy's limitations in *efficiently* 
performing exact arithmetic with polynomial roots would prevent me from 
completing my software. After attempting to basically write my own version 
of QQbar in Sympy I made the very difficult decision, after four+ years of 
my Ph.D. writing Sympy workarounds, to completely rewrite my code "using 
Sage". I'm glad I did even though it added time to my Ph.D. --- a very 
small amount of time compared to the amount wasted trying to get Sympy to 
do what I wanted. So I am definitely glad that something like Sage is 
around to provide those open source tools I needed.

I didn't pursue writing Abelfunctions into Sage or even making 
Abelfunctions an "optional" or "experimental" listed spkg for several 
reasons:

1. *It is still in very active development* --- My quick (read: several 
month) total rewrite of Abelfunctions to use Sage reintroduced bugs that I 
squashed in the Python version. This is somewhat evidenced in the GitHub 
issues page. Because I'm constantly fixing and adding things as I finish my 
thesis it seems bothersome to have to push a new spkg after every commit. 
(Sure, I can write a script to try and do that.)

2. *It is a niche product* --- The mathematical communities I work with 
know about Abelfunctions and they have spread the word of its existence to 
those who might be interested. That's great. But I never assumed that it 
should be a standard part of Sage. Sage already takes too much time to 
compile so why bloat it with something that <1% of Sage users would ever 
touch? (Though, my implementation of Puiseux series in Abelfunctions is now 
making it's way into the Sage codebase.)

3. *GitHub is my resume* --- Headhunters have seen that I write code. I 
doubt they scan trac.sagemath as much as they do GitHub. Being able to put 
my code up on GitHub has made it clearer to others and to myself what my 
contribution to the math community has been. Not that I'm against sharing 
in an open-source project but to have Abelfunctions Trac tickets buried in 
the mound of other Sage issues didn't seem like a clear way to get people 
to work on this small project at the time.

Overall, developing Abelfunctions as an "external" Sage package has been 
pretty effective. I have some minor complaints, including the fact that the 
standard "$ sage setup.py install" doesn't seem to work on all platforms 
and trying to get TravisCI to download and install Sage before being able 
to test my code is a bit of a pain. If people who want to use it are having 
trouble finding it then it's my fault, not Sage's, since I suck at 
advertising myself. (Writing this post about my own code was difficult 
enough.) I think if enough people write packages this way we will see what 
works and what doesn't thus putting the whole "let's refactor Sage to make 
it modular" into a more concrete setting.

--
Chris


-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To post to this group, send email to sage-devel@googlegroups.com.
Visit this group at https://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to