UCurv project - PyLops/pylops GitHub Wiki

This page is intended to provide a roadmap (and timelines) for the integration of https://github.com/yud08/ucurv into PyLops. It contains tasks that should be accomplished in both projects to bring code and documentation quality to an acceptable level for PyLops to confidently include ucurv as a trusted (optional) dependency.

UCurv

List of tasks (in no specific order):

  • Improve README providing info about

    • info on how to install from pip and source
    • simple example showcasing the main functionality of the library
    • info on how to run tests and build doc
  • Add Makefile like https://github.com/PyLops/pylops/blob/dev/Makefile with basic commands used to build the environment used in ucurv development, run tests, build doc, and potentially do linting and type checking

  • Clean up tests (adding docstrings to each test explaining what it does). Consider using https://github.com/PyLops/pylops/blob/3ec6e05e8da4e8a00cd53cac251bc244fe992a22/pytests/test_ffts.py#L261 to build what is currently called combinations)

  • Switch from setup.py to pyproject.toml (see https://github.com/PyLops/pylops/blob/dev/pyproject.toml). If brave could consider using this project also as a guinea pig for using uv instead (https://github.com/astral-sh/uv)

  • Add github action to run tests (see https://github.com/PyLops/pylops/blob/dev/.github/workflows/build.yaml)

  • Move devscript (so far I see only notebooks) to another repository as notebooks pollute version control make it harder to follow the code history from commits.

  • Add docstring to main __init__ file (useful when running help(ucurv)) - see https://github.com/PyLops/pylops/blob/dev/pylops/__init__.py. Also add version part and use setuptools_scm to get automated versioning (follow PyLops pyproject.toml to set it up

  • meyerwavelet.py add docstrings to all functions and create some unittests. Note that using ChatGPT/CoPilot to get a first version of the docstrings and then refine them is becoming a good time saver (do NOT copy-paste without reading as sometimes these AI assistants make mistakes!)

  • zoneplate.py add docstrings to all functions and create some unittests

  • fun_meyer.py add docstrings to all functions and create some unittests. I see there is already a docstring for fun_meyer but it uses an uncoventional format (need something standard like numpydoc - reccomended - to be able to later get nicely formatted HTML doc)

  • ucurv.py add docstrings to all functions/classes and create some unittests. Note that in python classes names should use CamelCase, so here either UDCT or Udct (I prefer the latter) but not udct.

  • test whether a dual backend (numpy/cupy) is feasible by just replacing all np with ncp where you can use something like https://github.com/PyLops/pylops/blob/3ec6e05e8da4e8a00cd53cac251bc244fe992a22/pylops/utils/backend.py#L126 to get the correct module handlers (numpy/cupy). One option would be to use cp directly but this would require making cupy a dependency of ucurv which however would be a roadblockt to the subsequent PyLops integration as we don't all cupy to be one of our mandatory dependencies.

UCurv integration in PyLops