pyOpenSci/software-submission

PyAutoGalaxy

Opened this issue · 11 comments

Submitting Author: (@Jammy2211)
All current maintainers: (@Jammy2211)
Package Name: PyAutoGalaxy
One-Line Description of Package: Astronomy software for analysing the morphologies and structures of galaxies
Repository Link: https://github.com/Jammy2211/PyAutoGalaxy
Version submitted: 2025.1.18.7
EiC: @coatless
Editor: @hamogu
Reviewer 1: @canorve
Reviewer 2: @erik-whiting
Archive: TBD
JOSS DOI: TBD
Version accepted: TBD
Date accepted (month/day/year): TBD


Code of Conduct & Commitment to Maintain Package

Description

Nearly a century ago, Edwin Hubble famously classified galaxies into three distinct groups: ellipticals, spirals and irregulars [@Hubble1926]. Today, by analysing millions of galaxies with advanced image processing techniques Astronomers have expanded on this picture and revealed the rich diversity of galaxy morphology in both the nearby and distant Universe [@Kormendy2015a; @Vulcani2014; @VanDerWel2012]. PyAutoGalaxy is an open-source Python 3.8 - 3.11 package for analysing the morphologies and structures of large multiwavelength galaxy samples, with core features including fully automated Bayesian model-fitting of galaxy two-dimensional surface brightness profiles, support for dataset and interferometer datasets and comprehensive tools for simulating galaxy images. The software places a focus on big data analysis, including support for hierarchical models that simultaneously fit thousands of galaxies, massively parallel model-fitting and an SQLite3 database that allows large suites of modeling results to be loaded, queried and analysed.

Scope

  • Please indicate which category or categories.
    Check out our package scope page to learn more about our
    scope. (If you are unsure of which category you fit, we suggest you make a pre-submission inquiry):

    • Data retrieval
    • Data extraction
    • Data processing/munging
    • Data deposition
    • Data validation and testing
    • Data visualization1
    • Workflow automation
    • Citation management and bibliometrics
    • Scientific software wrappers
    • Database interoperability

Domain Specific

  • Geospatial
  • Education

Community Partnerships

If your package is associated with an
existing community please check below:

  • For all submissions, explain how 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?

Astronomers studying the morphology of galaxies, and undergraduates / people interested in learning how to do science with galaxies. The package analyses galaxy images (e.g. from the James Webb Space Telescope) and extracts information on them.

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

Many: pysersic, GALFIT, ProFit, to name a few.

PyAutoGalaxy supports a more diverse range of ways to analysis galaxy images and has support for Bayesian inference on big data (e.g. sqlite database, graphical modeling) other packages do not.

  • 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:

This package was first submited to astropy years ago, then was to be moved to PyOpenSci, this PR discussion shows that: astropy/astropy.github.com#491

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.
  • uses an OSI approved license.
  • contains a README with instructions for installing the development version.
  • includes documentation with examples for all functions.
  • contains a tutorial with examples of its essential functions and uses.
  • has a test suite.
  • has continuous integration setup, such as GitHub Actions CircleCI, and/or others.

Publication Options

Already Published in JOSS: https://joss.theoj.org/papers/10.21105/joss.04475

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.

Confirm each of the following by checking the box.

  • I have read the author guide.
  • I expect to maintain this package for at least 2 years and can help find a replacement for the maintainer (team) if needed.

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.

Footnotes

  1. Please fill out a pre-submission inquiry before submitting a data visualization package.

Editor in Chief checks

Hi there! Thank you for submitting your package for pyOpenSci
review. Below are the basic checks that your package needs to pass
to begin our review. If some of these are missing, we will ask you
to work on them before the review process begins.

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.
  • 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.
    • 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.
  • 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.
    • 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.md file.
    • License The package has an OSI approved license.
      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 a 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

Thanks for submitting PyAutoGalaxy to pyOpenSci! The package is in ship shape to move forward with our review process. The documentation and functionality is excellent! Well done on creating actionable streams to get users immediately able to analyzing morphoologies and structures of galaxies!

The only minor nit is a section in the README.md clearly labeled as "Installation Instructions". That said, this is largely covered by "Installation Guide" link. However, it would be great if you could include a brief separate snippet. Though, I'm going to go ahead and move the process along by assigning to @hamogu.

Editor response to review:

Hi @Jammy2211! Thanks for submitting your package to PyOpenSci. I'll be your editor - please feel free to reach out to me with any questions you might have. I'll now start to look for reviewers; usually that's the most time-consuming part of the process but I'll keep you updated as that goes along!


Editor comments

👋 Hi @@canorve and @erik-whiting! Thank you for volunteering to review
for pyOpenSci!

Please fill out our pre-review survey

Before beginning your review, please fill out our pre-review survey. This helps us improve all aspects of our review and better understand our community. No personal data will be shared from this survey - it will only be used in an aggregated format by our Executive Director to improve our processes and programs.

  • reviewer 1 survey completed.
  • reviewer 2 survey completed.
  • reviewer 3 (if applicable)

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:

Reviewers: @canorve @erik-whiting
Due date: 26-Nov-2025 (@erik-whiting took over for another reviewer, so I'm setting a later date based on when they volunteered to do that)

Hi @Jammy2211! I just want to let you know that I'm still looking for a second reviewer. I've contacted three people so far, one declined and two never responded. I know with summer approaching it's a busy time for many and I hope I'll find someone soon. I just need to ask for a little more patience; I'm sorry it takes to long and I promise I keep working on it.

Hi @canorve and @eteq! Than you so much for volunteering to review this package submission. Please see the comment above for instructions and a template for your report and please reach out to me with any questions, or feedback or if you need help. I did set the "due date" for the review for three weeks from now as we customarily do, but please let us know if that doesn't work for you. I know life happens and the summer is coming.

Package Review

Please check off boxes as applicable, and elaborate in comments below. Your review is not limited to these topics, as described in the reviewer guide

  • As the reviewer I confirm that there are no conflicts of interest for me to review this work (If you are unsure whether you are in conflict, please speak to your editor before starting your review).

Documentation

The package includes all the following forms of documentation:

  • A statement of need clearly stating problems the software is designed to solve and its target audience in README.
  • Installation instructions: for the development version of the package and any non-standard dependencies in README.
  • Vignette(s) demonstrating major functionality that runs successfully locally.
  • Function Documentation: for all user-facing functions.
  • Examples for all user-facing functions.
  • Community guidelines including contribution guidelines in the README or CONTRIBUTING.
  • Metadata including author(s), author e-mail(s), a url, and any other relevant metadata e.g., in a pyproject.toml file or elsewhere.

Readme file requirements
The package meets the readme requirements below:

  • Package has a README.rst file in the root directory.

The README should include, from top to bottom:

  • The package name
  • Badges for:
    • Continuous integration and test coverage,
    • Docs building (if you have a documentation website),
    • A repostatus.org badge,
    • Python versions supported,
    • Current package version (on PyPI / Conda).
    • Code style.
    • Launch binder.
    • JOSS paper.

NOTE: If the README has many more badges, you might want to consider using a table for badges: see this example. Such a table should be more wide than high. (Note that the a badge for pyOpenSci peer-review will be provided upon acceptance.)

  • Short description of package goals.
  • Package installation instructions
  • Any additional setup required to use the package (authentication tokens, etc.)
  • Descriptive links to all vignettes. If the package is small, there may only be a need for one vignette which could be placed in the README.md file.
    • Brief demonstration of package usage (as it makes sense - links to vignettes could also suffice here if package description is clear)
  • Link to your documentation website.
  • If applicable, how the package compares to other similar packages and/or how it relates to other packages in the scientific ecosystem.
  • Citation information

Usability

Reviewers are encouraged to submit suggestions (or pull requests) that will improve the usability of the package as a whole.
Package structure should follow general community best-practices. In general please consider whether:

  • Package documentation is clear and easy to find and use.
  • The need for the package is clear
  • All functions have documentation and associated examples for use
  • The package is easy to install

Functionality

  • Installation: Installation succeeds as documented.
  • Functionality: Any functional claims of the software been confirmed.
  • Performance: Any performance claims of the software been confirmed.
  • Automated tests:
    • All tests pass on the reviewer's local machine for the package version submitted by the author. Ideally this should be a tagged version making it easy for reviewers to install.
    • Tests cover essential functions of the package and a reasonable range of inputs and conditions.
  • Continuous Integration: Has continuous integration setup (We suggest using Github actions but any CI platform is acceptable for review)
  • Packaging guidelines: The package conforms to the pyOpenSci packaging guidelines.
    A few notable highlights to look at:
    • Package supports modern versions of Python and not End of life versions.
    • Code format is standard throughout package and follows PEP 8 guidelines (CI tests for linting pass)

For packages also submitting to JOSS

Note: Be sure to check this carefully, as JOSS's submission requirements and scope differ from pyOpenSci's in terms of what types of packages are accepted.

The package contains a paper.md matching JOSS's requirements with:

  • A short summary describing the high-level functionality of the software
  • Authors: A list of authors with their affiliations
  • A statement of need clearly stating problems the software is designed to solve and its target audience.
  • References: With DOIs for all those that have one (e.g. papers, datasets, software).

Final approval (post-review)

  • The author has responded to my review and made changes to my satisfaction. I recommend approving this package.

Estimated hours spent reviewing:

7 hours


Review Comments

First of all, I apologize for the delay in completing this review.

PyAutoGalaxy is a well-documented and scientifically relevant tool for
galaxy morphology modeling. Its strengths include comprehensive tutorials,
research-focused functionality, and adherence to modern Python packaging
standards. The project has strong potential for continued development,
and I believe it will see broad adoption within the astronomical community.

Below are my comments, most of which I believe are minor.

API documentation

API documentation is missing for the following modules:

  • autogalaxy.plot.Visuals1D: link
  • autogalaxy.plot.Visuals2D: link

Some class methods are not documented. For example:

Providing documentation for these methods would enhance clarity and usability, especially for new users exploring the API.

README

The top-to-bottom order suggested in the template is not followed.

A statement of need is present in the documentation and in the paper, but it is not clearly stated in the README.

No installation instructions are provided directly in the README; only a link to the installation guide is included.

Additional setup requirements for using the package are documented, but not mentioned in the README.

Citation information is available in the documentation but not included in the README.

Oversampling

Why does PyAutoGalaxy use averaging rather than integration when applying oversampling?
Reference notebook

In particular, when the light profile is curved, the ideal approach is to integrate the profile
over the pixel area. Since this is computationally expensive, oversampling offers an
efficient alternative, as noted in this Astropy discussion.

However, according to the linked notebook, the oversampled values are averaged
rather than summed.

It is possible that I am misunderstanding either the implementation or the concept of
oversampling in this context, but I would appreciate clarification on why averaging is
used instead of integration. I raise this point because I am particularly interested in
using your routines to simulate Sérsic galaxy profiles.

Installation and functionability

First of all, why are the following dependencies not included in the installation requirements?

pip install autoconf
pip install autofit
pip install autoarray

Including them would simplify the installation process for new users.

The installation from source guide (link) does not include the command:

pip install  .

I was unable to install the submitted version of the package and encountered the following error:
https://pastebin.com/T4VtmJSQ

However, I was able to successfully download and install the package from the main branch of the repository.

The following command from the installation documentation did not work for me:

python3 -m pytest

It returned the error:

/PyAutoGalaxy-main/pyautogal_venv_2/bin/python3: No module named pytest

Instead, I was able to run the tests successfully using the pytest command alone.

However, for the package installed from the main branch, the tests did not run successfully in their entirety:
https://pastebin.com/mw9kaE2L

Finally, the code generally follows the recommended formatting guidelines. However, when
running flake8, I observed that many lines exceed the recommended maximum line length:
https://pastebin.com/aUMi4GVU

The tests were run on the following system:

❯ uname -a
Linux saturnv 6.12.10-76061203-generic #202412060638~1748542656~22.04~663e4dc SMP PREEMPT_DYNAMIC Thu M x86_64 x86_64 x86_64 GNU/Linux

Thanks for the review!

I'll get to work on it, but with holidays will likely be a bit slower to respond than normal. Nevertheless, nothing looks to difficult and getting the API docs up to scratch has been on my to do list for a while :).

Thank you @canorve for your review and @Jammy2211 for looking at it already.

Justin pinging @eteq to check if you've gotten around to review this package or if there is anything I can do to help @eteq to get started on their review!

Dear @Jammy2211, I need to apologize for the long delay. Unfortunately, @eteq has not blank on me. I've tried to contact him in several other channels, but unfortunately, I have not been able to get into contact with him since he originally agreed to review this package a few months ago. I'll be looking for a new reviewer as soon as I can and hopefully we can get moving soon!

Thank you @erik-whiting for agreeing to take on reviewing. Please let me know if you need any support and what I can do to help you along. Please see #235 (comment) for instructions and links on where to find the review template etc.
Let me know if there is anything I can do to help you!

Hey just wanted to update everyone and throw out a quick question:

I have started my review but I'm having a hard time installing the package. Both the conda and pip guides are failing for me, I've tried a few workarounds on my own but nothing is working so far. It could be something on my end but I'm just curious, is a Windows installation supported? Also, I haven't yet tried building from source.

Just updating y'all that the review is ongoing. Hoping to figure out my installation issues soon.

Are you installing version 2025.1.18.7 or the new version (we did a PyAutoGalaxy-JAX release (2 years in the making) last week and are still cleaning up installation issues).