Skip to content

Duplicate package? #48

@Jacob-Stevens-Haas

Description

@Jacob-Stevens-Haas

Hey, I've been working on pysindy and realized that the Kutz/Brunton lab is associated with two packages for "numerical differentiation of noisy time-series data", citing the same Chartrand paper. Currently, pysindy utilizes the derivative, which I've been contributing to occasionally over the past year. I wanted to ask what the authors (@florisvb @luckystarufo, @andgoldschmidt ) opinions are as to whether it's worth combining the packages, especially since these were both projects supervised under the same advisors? From the perspective of the python ecosystem, I think it would be better; less maintenance cost, and zen number 13

"There should be one-- and preferably only one --obvious way to do it."

Obviously everyone's welcome to their own packages, however.

At first blush, here's the comparison:

  • pysindy depends upon derivative
  • 163 gihtub repos have a pyproject.toml|setup.py|requirements.txt for derivative (excluding self) vs 0 for pynumdiff (cursory search). EDIT: found motiontrackerbeta
  • pynumdiff has 84 stars whereas derivative has 37.
  • pynumdiff has a JOSS paper.
  • derivative has more smoothing/derivative methods than pynumdiff (e.g. spectral, spline...)
  • pynumdiff appears to have more advanced/complex implementations of TV and Kalman.
  • pynumdiff has more fragile dependencies to satisfy (e.g. numpy vs cvxpy and pychebfun, which hasn't been updated since 2017)
  • derivative has around 650 daily downloads, whereas pynumdiff only has 15-20 (many of these are likely because derivative is required by pysindy.)
  • derivative is older by about a year (2019?)

I'll be working in the pysindy & differentiation over the next (and hopefully last) year of my PhD and contributing code in a variety of repos. Obviously, both packages have MIT licenses. But I want to poll the authors' feelings on merging code and, long-term, deprecating one of the packages, especially if I begin to add issues like "hey I'm trying to copy your code, why does foo() call bar()?".

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions