Skip to content

Python-graphblas: high-performance sparse linear algebra for scalable graph analytics #81

Closed

Description

@eriknw

Submitting Author: Erik Welch (@eriknw)
All current maintainers: (@eriknw, @jim22k, @SultanOrazbayev)
Package Name: Python-graphblas
One-Line Description of Package: Python library for GraphBLAS: high-performance sparse linear algebra for scalable graph analytics
Repository Link: https://github.com/python-graphblas/python-graphblas
Version submitted: 2023.1.0
Editor: @tomalrussell
Reviewer 1: @sneakers-the-rat
Reviewer 2: @szhorvat
Archive: DOI
JOSS DOI: N/A
Version accepted: 2023.7.0
Date accepted (month/day/year): 07/14/2023


Description

Python-graphblas is like a faster, more capable scipy.sparse that can implement NetworkX. It is a Python library for GraphBLAS: high-performance sparse linear algebra for scalable graph analytics. Python-graphblas mimics the math notation, making it the most natural way to learn, use, and think about GraphBLAS. In contrast to other high level GraphBLAS bindings, Python-graphblas can fully and cleanly support any implementation of the GraphBLAS C API specification thereby allowing us to be vendor-agnostic.

Scope

  • Please indicate which category or categories this package falls under:
    • Data retrieval
    • Data extraction
    • Data munging
    • Data deposition
    • Reproducibility
    • Geospatial
    • Education
    • Data visualization*
    • Scientific software wrappers (added from here)

Please fill out a pre-submission inquiry before submitting a data visualization package. For more info, see notes on categories of our guidebook.

  • For all submissions, explain how the and why the package falls under the categories you indicated above. In your explanation, please address the following points (briefly, 1-2 sentences for each):

    • Who is the target audience and what are scientific applications of this package?

Audience: anybody who works with sparse data or graphs. We are also implementing a backend to NetworkX (which supports dispatching in version 3.0) written in Python-graphblas called graphblas-algorithms, so we are quite literally targeting NetworkX users!

Python-graphblas provides a faster, easier, more flexible, and more scalable way to operate on sparse data, including for graph algorithms. There are too many scientific applications to list ranging from neuroscience, genomics, biology, etc. It may be useful wherever scipy.sparse or NetworkX are used. Although GraphBLAS was designed to build graph algorithms, it is flexible enough to be used in other applications. Anecdotally, most of our current users that I know about are from research groups in universities and laboratories.

We are also targeting applications that need very large distributed graphs. We have experimented with Dask-ifying python-graphblas here, and we get regular interest from people who want e.g. distributed PageRank or connected components.

  • Are there other Python packages that accomplish the same thing? If so, how does yours differ?

pygraphblas, which hasn't been updated in more than 16 months. There are many differences in syntax, functionality, philosophy, architecture, and (I would argue) robustness and maturity. python-graphblas syntax targets the math syntax, whereas pygraphblas is much closer to C. python-graphblas handles dtypes much more robustly, has efficient conversions to/from numpy and other formats, is architected to handle additional GraphBLAS implementations (more are on the way!), has exceptional error messages, has many more tests and functionality, supports Windows, and much, much more. We have also been growing our team, because sustainability is very important to us.

Although we have/had irreconcilable differences (which is why we decided to create python-graphblas), the authors have always been cordial. We all believe strongly in the ethos of open source, and I would describe our relationship as having "radical generosity". For example, we have an outstanding agreement that each library is welcome to "borrow" from the other (with credit). We may "borrow" some of their documentation :)

We also worked together to create and maintain the C binding to SuiteSparse:GraphBLAS:
https://github.com/GraphBLAS/python-suitesparse-graphblas/
We could use help automatically generating wheels for this library on major platforms via cibuildwheel.

  • If you made a pre-submission enquiry, please paste the link to the corresponding issue, forum post, or other discussion, or @tag the editor you contacted:

Limited prior discussion in this issue: pyOpenSci/python-package-guide#21 (comment)

Technical checks

For details about the pyOpenSci packaging requirements, see our packaging guide. Confirm each of the following by checking the box. This package:

  • does not violate the Terms of Service of any service it interacts with.
  • has an OSI approved license.
  • contains a README with instructions for installing the development version.
  • includes documentation with examples for all functions.
    • We're working on this! The C API and SuiteSparse:GraphBLAS C library are both well documented. We have a very large API surface area to cover, so "documentation with examples for all functions" is a really, really high bar, but one I hope we achieve someday :)
  • contains a vignette with examples of its essential functions and uses.
  • has a test suite.
  • has continuous integration, such as Travis CI, AppVeyor, CircleCI, and/or others.

Publication options

  • Do you wish to automatically submit to the Journal of Open Source Software? If so:
    • Undecided. We don't have a paper, but in principle I would like for us to submit a paper to JOSS someday.
JOSS Checks
  • The package has an obvious research application according to JOSS's definition in their submission requirements. Be aware that completing the pyOpenSci review process does not guarantee acceptance to JOSS. Be sure to read their submission requirements (linked above) if you are interested in submitting to JOSS.
  • The package is not a "minor utility" as defined by JOSS's submission requirements: "Minor ‘utility’ packages, including ‘thin’ API clients, are not acceptable." pyOpenSci welcomes these packages under "Data Retrieval", but JOSS has slightly different criteria.
  • The package contains a paper.md matching JOSS's requirements with a high-level description in the package root or in inst/.
  • The package is deposited in a long-term repository with the DOI:

Note: Do not submit your package separately to JOSS

Are you OK with Reviewers Submitting Issues and/or pull requests to your Repo Directly?

This option will allow reviewers to open smaller issues that can then be linked to PR's rather than submitting a more dense text based review. It will also allow you to demonstrate addressing the issue via PR links.

  • Yes I am OK with reviewers submitting requested changes as issues to my repo. Reviewers will then link to the issues in their submitted review.

Code of conduct

Other comments (manually added)

Given a product mindset, we believe that Python-graphblas is a great product, but I think our go-to-market strategy has been lacking. We have been very engineering-heavy, and even our goal of targeting NetworkX users is engineering-heavy via creating graphblas-algorithms. I hope this peer-review process can help us prioritize our efforts (such as a plan to improve documentation) as well as a place to write a blog post or two.

Please fill out our survey

P.S. *Have feedback/comments about our review process? Leave a comment here

Editor and Review Templates

The editor template can be found here.

The review template can be found here.

Activity

  1. NickleDave commented on Feb 7, 2023

    @NickleDave
    Contributor

    Hi @eriknw!

    We're very glad to see you all have gone ahead with a full submission, after discussion in pyOpenSci/python-package-guide#21 (comment) as you linked above.

    I just want to welcome you and let you know we are working on this.

    I will finish the initial editor checks by the end of this week. @lwasser is traveling and we will need to co-ordinate about editors, but I expect to get back to you about that by the middle of next week at the latest.

    Thank you for providing all the detail in the submission. The context you've provided will be helpful for the review (and will definitely help me with editor checks!). It sounds like you've anticipated some points @lwasser brought up when we discussed in Slack. Looking forward to helping you improve the docs and giving you some blog post material! 😁

  2. NickleDave commented on Feb 9, 2023

    @NickleDave
    Contributor

    Editor in Chief checks

    These are the basic checks that the package needs to pass to begin review.
    Please check our Python packaging guide for more information on the elements below.

    • Installation The package can be installed from a community repository such as PyPI (preferred), and/or a community channel on conda (e.g. conda-forge, bioconda).
      • The package imports properly into a standard Python environment import package-name.
        • was able to do both pip install python-graphbals in a python 3.10 venv on Linux
        • and install with conda on Mac OS, python 3.10
    • Fit The package meets criteria for fit and overlap.
    • Documentation The package has sufficient online documentation to allow us to evaluate package function and scope without installing the package. This includes:
      • User-facing documentation that overviews how to install and start using the package.
      • Short tutorials that help a user understand how to use the package and what it can do for them.
        • but see comments below
      • API documentation (documentation for your code's functions, classes, methods and attributes): this includes clearly written docstrings with variables defined using a standard docstring format. We suggest using the Numpy docstring format.
    • Core GitHub repository Files
      • README The package has a README.md file with clear explanation of what the package does, instructions on how to install it, and a link to development instructions.
        • but see comments below
      • Contributing File The package has a CONTRIBUTING.md file that details how to install and contribute to the package.
      • Code of Conduct The package has a Code of Conduct file.
      • License The package has an OSI approved license.
        • Apache 2.0
          NOTE: We prefer that you have development instructions in your documentation too.
    • Issue Submission Documentation All of the information is filled out in the YAML header of the issue (located at the top of the issue template).
    • Automated tests Package has a testing suite and is tested via GitHub actions or another Continuous Integration service.
    • Repository The repository link resolves correctly.
    • Package overlap The package doesn't entirely overlap with the functionality of other packages that have already been submitted to pyOpenSci.
    • Archive (JOSS only, may be post-review): The repository DOI resolves correctly.
    • Version (JOSS only, may be post-review): Does the release version given match the GitHub release (v1.0.0)?

    • Initial onboarding survey was filled out
      We appreciate each maintainer of the package filling out this survey individually. 🙌
      Thank you authors in advance for setting aside five to ten minutes to do this. It truly helps our organization. 🙌


    Editor comments

    This package passes all checks; we can begin review.

    It's obvious the developers and maintainers have done a ton of work.
    Our goal here should be to help make sure everyone can appreciate how much work they have done, and how much functionality is packed into python-graphblas.

    Along those lines, some notes for the review (none of these need to be addressed before we start):

    • the description section of the README needs a high level, non-technical description so that the use of the package would be clear to anyone with a general scientific background
      • Specifically there should be language that defines sparse data - just a simple definition like "data with lots of 0's "and then link to a good description of sparse data from scipy or some other resource
      • Language the submitting authors use above is very close to a good high level description: "python-graphblas ... is a Python library for ... high-performance sparse linear algebra for scalable graph analytics. [Think of it like a faster, more capable scipy.sparse that can implement NetworkX.] Python-graphblas mimics the math notation, making it the most natural way to learn, use, and think about GraphBLAS. In contrast to other high level GraphBLAS bindings, Python-graphblas can fully and cleanly support any implementation of the GraphBLAS C API specification thereby allowing us to be vendor-agnostic." This could be the first thing someone reads both in the README description and on the index of the docs
    • the description section of the README should also clarify why would someone use python-graphblas in place of, or in conjunction, with the scipy sparse module and/or networkx, but in very easy to understand language
    • ideally the README itself should have a short, beginning to end tutorial to get someone started, that really demonstrates the power of the package
    • as noted by submitting author, there is an existing tutorial, the python-graphblas primer, but there could be additional vignettes;
      • what are typical use cases, perhaps analyses from papers or packages that already use python-graphblas could be added in a how-tos section of the docs? Submitting authors state there may be examples in pygraphblas documentation
  3. NickleDave commented on Feb 9, 2023

    @NickleDave
    Contributor

    @eriknw @jim22k, @SultanOrazbayev the tl;dr is that python-graphblas passed editor checks 🙂 🎉

    Like I said above, I'll need to co-ordinate with @lwasser who is traveling about an editor for this review, but would expect us to reply back here by middle of next week at the latest

  4. eriknw commented on Feb 9, 2023

    @eriknw
    Author

    Hooray! 🎉

    Thanks @NickleDave. We appreciate the attention y'all are giving us, and thanks for telling us what (and when) to expect next. We're in no particular rush--it's more important to give the right people the right amount of time to do things right :)

  5. NickleDave commented on Feb 9, 2023

    @NickleDave
    Contributor

    it's more important to give the right people the right amount of time to do things right

    🙌

    finding the right people now! 🙂

  6. NickleDave commented on Feb 14, 2023

    @NickleDave
    Contributor

    Hi again @eriknw, @jim22k, @SultanOrazbayev -- just letting you know that I did have a chance to talk with @lwasser now that she has returned, and we are in the process of finding an editor

    When you have a chance could you please (all) fill out the pre-review survey?
    It's here: https://forms.gle/F9mou7S3jhe8DMJ16

    We appreciate each maintainer of the package filling out this survey individually. 🙌 Thank you authors in advance for setting aside five to ten minutes to do this. It truly helps our organization. 🙌

    (I know it's easy to miss in the template)

  7. NickleDave commented on Feb 22, 2023

    @NickleDave
    Contributor

    Hi @eriknw, @jim22k, @SultanOrazbayev, brief update:
    very happy to inform you that @tomalrussell will be guest editor for this review! 🎉 NetworkX contributor, developer of spatial & network tools like snkit.
    I will let @tomalrussell take it from here!

  8. tomalrussell commented on Feb 24, 2023

    @tomalrussell

    Hi @eriknw, @jim22k, @SultanOrazbayev, and thanks to @NickleDave for the introduction.

    I've reached out to potential reviewers, and incidentally look forward to taking a closer look at python-graphblas myself. I'll update here as soon as, definitely within a week.

  9. tomalrussell commented on Mar 7, 2023

    @tomalrussell

    👋 Hi @sneakers-the-rat and @szhorvat! Thank you for volunteering to review
    for pyOpenSci!

    The following resources will help you complete your review:

    1. Here is the reviewers guide. This guide contains all of the steps and information needed to complete your review.
    2. Here is the review template that you will need to fill out and submit
      here as a comment, once your review is complete.

    Please get in touch with any questions or concerns! Your review is due in three weeks: 29th March 2023

  10. 47 remaining items

  11. szhorvat commented on Jul 13, 2023

    @szhorvat

    Yes. The suggestions I made are mostly for the long term.

  12. sneakers-the-rat commented on Jul 14, 2023

    @sneakers-the-rat
    Collaborator

    Same, full approval from me :)

  13. tomalrussell commented on Jul 14, 2023

    @tomalrussell

    Thanks all, time and effort very much appreciated. The review process is done!

    All that's left is to wrap up, publish the version of record and acknowledge all your contributions.


    🎉 python-graphblas has been approved by pyOpenSci! Thank you @eriknw for submitting python-graphblas and many thanks to @szhorvat and @sneakers-the-rat for reviewing this package! 😸

    Author and Reviewer Wrap-Up Tasks

    There are just a few things left to do to wrap up this submission, @eriknw, @jim22k, @SultanOrazbayev:

    • Activate Zenodo watching the repo if you haven't already done so.
    • Tag and create a release to create a Zenodo version and DOI.
    • Add the badge for pyOpenSci peer-review to the README.md of python-graphblas. The badge should be [![pyOpenSci](https://tinyurl.com/y22nb8up)](https://github.com/pyOpenSci/software-review/issues/81).
    • Add python-graphblas to the pyOpenSci website. Please open a PR to update this file: to add your package and name to the list of contributors.

    Both reviewers and maintainers (@sneakers-the-rat, @szhorvat too):

    • Please fill out the post-review survey. All maintainers and reviewers should fill this out.
    • Reviewers and maintainers, if you have time and are open to being listed on our website, please add yourselves to this file via a PR so we can list you on our website as contributors!

    Editor Final Checks

    Please complete the final steps to wrap up this review. @tomalrussell, please do the following:

    • Make sure that the maintainers filled out the post-review survey
    • Invite the maintainers to submit a blog post highlighting their package. Feel free to use / adapt language found in this comment to help guide the author.
    • Change the status tag of the issue to 6/pyOS-approved6 🚀🚀🚀.

    If you have any feedback for us about the review process please feel free to share it here. We are always looking to improve our process and documentation in the peer-review-guide.

  14. tomalrussell commented on Jul 14, 2023

    @tomalrussell

    @eriknw and team, I'd also like to invite you to write a blog post on your package for us to promote your work. If you are interested - here are a few examples of other blog posts:

    This can be a really high-level motivation for the package, for a slightly-scientific-Python-user-audience, or could draw on your introductory tutorial material to get straight to what the package does..

    This is totally optional and not a requirement, but if you have time, we'd love to spread the word about python-graphblas to pyOpenSci blog readers ☺️

  15. sneakers-the-rat commented on Jul 17, 2023

    @sneakers-the-rat
    Collaborator

    did the post-review survey and submitted contributors.yml patch :)

  16. lwasser commented on Jul 27, 2023

    @lwasser
    Member

    Friends - i Believe this issue can be closed!! if it should be opened please just reopen or let me know! congratulations on a successful review and thank you everyone for participating in our pyOpenSci review process! I am so appreciative of you all!! ✨

  17. moved this from under-review to Joss accepted in peer-review-statuson Jul 27, 2023
  18. moved this from Joss accepted to pyos-accepted in peer-review-statuson Jul 27, 2023
  19. eriknw commented on Jul 27, 2023

    @eriknw
    Author

    w00t! Also, we'd be happy to write a short blog post :)

  20. added a commit that references this issue on Jul 27, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

Relationships

None yet

Development

No branches or pull requests

Issue actions