Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[REVIEW]: pyOptSparse: A Python framework for large-scale constrained nonlinear optimization of sparse systems #2564

Closed
44 of 60 tasks
whedon opened this issue Aug 11, 2020 · 70 comments
Assignees
Labels
accepted CSS Fortran published Papers published in JOSS Python recommend-accept Papers recommended for acceptance in JOSS. review

Comments

@whedon
Copy link

whedon commented Aug 11, 2020

Submitting author: @ewu63 (Ella Wu)
Repository: https://github.com/mdolab/pyoptsparse/
Version: v2.2.1
Editor: @poulson
Reviewer: @jgoldfar, @vissarion, @matbesancon
Archive: 10.5281/zenodo.4110792

⚠️ JOSS reduced service mode ⚠️

Due to the challenges of the COVID-19 pandemic, JOSS is currently operating in a "reduced service mode". You can read more about what that means in our blog post.

Status

status

Status badge code:

HTML: <a href="https://joss.theoj.org/papers/8edb06e7e0f2ae60fcccec3d2889d5e7"><img src="https://joss.theoj.org/papers/8edb06e7e0f2ae60fcccec3d2889d5e7/status.svg"></a>
Markdown: [![status](https://joss.theoj.org/papers/8edb06e7e0f2ae60fcccec3d2889d5e7/status.svg)](https://joss.theoj.org/papers/8edb06e7e0f2ae60fcccec3d2889d5e7)

Reviewers and authors:

Please avoid lengthy details of difficulties in the review thread. Instead, please create a new issue in the target repository and link to those issues (especially acceptance-blockers) by leaving comments in the review thread below. (For completists: if the target issue tracker is also on GitHub, linking the review thread in the issue or vice versa will create corresponding breadcrumb trails in the link target.)

Reviewer instructions & questions

@jgoldfar & @vissarion & @matbesancon, please carry out your review in this issue by updating the checklist below. If you cannot edit the checklist please:

  1. Make sure you're logged in to your GitHub account
  2. Be sure to accept the invite at this URL: https://github.com/openjournals/joss-reviews/invitations

The reviewer guidelines are available here: https://joss.readthedocs.io/en/latest/reviewer_guidelines.html. Any questions/concerns please let @poulson know.

Please start on your review when you are able, and be sure to complete your review in the next six weeks, at the very latest

Review checklist for @jgoldfar

Conflict of interest

  • I confirm that I have read the JOSS conflict of interest (COI) policy and that: I have no COIs with reviewing this work or that any perceived COIs have been waived by JOSS for the purpose of this review.

Code of Conduct

General checks

  • Repository: Is the source code for this software available at the repository url?
  • License: Does the repository contain a plain-text LICENSE file with the contents of an OSI approved software license?
  • Contribution and authorship: Has the submitting author (@nwu63) made major contributions to the software? Does the full list of paper authors seem appropriate and complete?
  • Substantial scholarly effort: Does this submission meet the scope eligibility described in the JOSS guidelines

Functionality

  • Installation: Does installation proceed as outlined in the documentation?
  • Functionality: Have the functional claims of the software been confirmed?
  • Performance: If there are any performance claims of the software, have they been confirmed? (If there are no claims, please check off this item.)

Documentation

  • A statement of need: Do the authors clearly state what problems the software is designed to solve and who the target audience is?
  • Installation instructions: Is there a clearly-stated list of dependencies? Ideally these should be handled with an automated package management solution.
  • Example usage: Do the authors include examples of how to use the software (ideally to solve real-world analysis problems).
  • Functionality documentation: Is the core functionality of the software documented to a satisfactory level (e.g., API method documentation)?
  • Automated tests: Are there automated tests or manual steps described so that the functionality of the software can be verified?
  • Community guidelines: Are there clear guidelines for third parties wishing to 1) Contribute to the software 2) Report issues or problems with the software 3) Seek support

Software paper

  • Summary: Has a clear description of the high-level functionality and purpose of the software for a diverse, non-specialist audience been provided?
  • A statement of need: Do the authors clearly state what problems the software is designed to solve and who the target audience is?
  • State of the field: Do the authors describe how this software compares to other commonly-used packages?
  • Quality of writing: Is the paper well written (i.e., it does not require editing for structure, language, or writing quality)?
  • References: Is the list of references complete, and is everything cited appropriately that should be cited (e.g., papers, datasets, software)? Do references in the text use the proper citation syntax?

Review checklist for @vissarion

Conflict of interest

  • I confirm that I have read the JOSS conflict of interest (COI) policy and that: I have no COIs with reviewing this work or that any perceived COIs have been waived by JOSS for the purpose of this review.

Code of Conduct

General checks

  • Repository: Is the source code for this software available at the repository url?
  • License: Does the repository contain a plain-text LICENSE file with the contents of an OSI approved software license?
  • Contribution and authorship: Has the submitting author (@nwu63) made major contributions to the software? Does the full list of paper authors seem appropriate and complete?
  • Substantial scholarly effort: Does this submission meet the scope eligibility described in the JOSS guidelines

Functionality

  • Installation: Does installation proceed as outlined in the documentation?
  • Functionality: Have the functional claims of the software been confirmed?
  • Performance: If there are any performance claims of the software, have they been confirmed? (If there are no claims, please check off this item.)

Documentation

  • A statement of need: Do the authors clearly state what problems the software is designed to solve and who the target audience is?
  • Installation instructions: Is there a clearly-stated list of dependencies? Ideally these should be handled with an automated package management solution.
  • Example usage: Do the authors include examples of how to use the software (ideally to solve real-world analysis problems).
  • Functionality documentation: Is the core functionality of the software documented to a satisfactory level (e.g., API method documentation)?
  • Automated tests: Are there automated tests or manual steps described so that the functionality of the software can be verified?
  • Community guidelines: Are there clear guidelines for third parties wishing to 1) Contribute to the software 2) Report issues or problems with the software 3) Seek support

Software paper

  • Summary: Has a clear description of the high-level functionality and purpose of the software for a diverse, non-specialist audience been provided?
  • A statement of need: Do the authors clearly state what problems the software is designed to solve and who the target audience is?
  • State of the field: Do the authors describe how this software compares to other commonly-used packages?
  • Quality of writing: Is the paper well written (i.e., it does not require editing for structure, language, or writing quality)?
  • References: Is the list of references complete, and is everything cited appropriately that should be cited (e.g., papers, datasets, software)? Do references in the text use the proper citation syntax?

Review checklist for @matbesancon

Conflict of interest

  • I confirm that I have read the JOSS conflict of interest (COI) policy and that: I have no COIs with reviewing this work or that any perceived COIs have been waived by JOSS for the purpose of this review.

Code of Conduct

General checks

  • Repository: Is the source code for this software available at the repository url?
  • License: Does the repository contain a plain-text LICENSE file with the contents of an OSI approved software license?
  • Contribution and authorship: Has the submitting author (@nwu63) made major contributions to the software? Does the full list of paper authors seem appropriate and complete?
  • Substantial scholarly effort: Does this submission meet the scope eligibility described in the JOSS guidelines

Functionality

  • Installation: Does installation proceed as outlined in the documentation?
  • Functionality: Have the functional claims of the software been confirmed?
  • Performance: If there are any performance claims of the software, have they been confirmed? (If there are no claims, please check off this item.)

Documentation

  • A statement of need: Do the authors clearly state what problems the software is designed to solve and who the target audience is?
  • Installation instructions: Is there a clearly-stated list of dependencies? Ideally these should be handled with an automated package management solution.
  • Example usage: Do the authors include examples of how to use the software (ideally to solve real-world analysis problems).
  • Functionality documentation: Is the core functionality of the software documented to a satisfactory level (e.g., API method documentation)?
  • Automated tests: Are there automated tests or manual steps described so that the functionality of the software can be verified?
  • Community guidelines: Are there clear guidelines for third parties wishing to 1) Contribute to the software 2) Report issues or problems with the software 3) Seek support

Software paper

  • Summary: Has a clear description of the high-level functionality and purpose of the software for a diverse, non-specialist audience been provided?
  • A statement of need: Do the authors clearly state what problems the software is designed to solve and who the target audience is?
  • State of the field: Do the authors describe how this software compares to other commonly-used packages?
  • Quality of writing: Is the paper well written (i.e., it does not require editing for structure, language, or writing quality)?
  • References: Is the list of references complete, and is everything cited appropriately that should be cited (e.g., papers, datasets, software)? Do references in the text use the proper citation syntax?
@whedon
Copy link
Author

whedon commented Aug 11, 2020

Hello human, I'm @whedon, a robot that can help you with some common editorial tasks. @jgoldfar, @vissarion, @matbesancon it looks like you're currently assigned to review this paper 🎉.

⚠️ JOSS reduced service mode ⚠️

Due to the challenges of the COVID-19 pandemic, JOSS is currently operating in a "reduced service mode". You can read more about what that means in our blog post.

⭐ Important ⭐

If you haven't already, you should seriously consider unsubscribing from GitHub notifications for this (https://github.com/openjournals/joss-reviews) repository. As a reviewer, you're probably currently watching this repository which means for GitHub's default behaviour you will receive notifications (emails) for all reviews 😿

To fix this do the following two things:

  1. Set yourself as 'Not watching' https://github.com/openjournals/joss-reviews:

watching

  1. You may also like to change your default settings for this watching repositories in your GitHub profile here: https://github.com/settings/notifications

notifications

For a list of things I can do to help you, just type:

@whedon commands

For example, to regenerate the paper pdf after making changes in the paper's md or bib files, type:

@whedon generate pdf

@whedon
Copy link
Author

whedon commented Aug 11, 2020

PDF failed to compile for issue #2564 with the following error:

Can't find any papers to compile :-(

@poulson
Copy link

poulson commented Aug 11, 2020

⚠️ As noted by @vissarion and @matbesancon in the pre-review, both of them expect to be unable to start their review until September. ⚠️

@poulson
Copy link

poulson commented Aug 11, 2020

@whedon generate pdf from branch paper

@whedon
Copy link
Author

whedon commented Aug 11, 2020

Attempting PDF compilation from custom branch paper. Reticulating splines etc...

@whedon
Copy link
Author

whedon commented Aug 11, 2020

@matbesancon
Copy link

@whedon remind @matbesancon in 3 weeks

@whedon
Copy link
Author

whedon commented Aug 12, 2020

I'm sorry @matbesancon, I'm afraid I can't do that. That's something only editors are allowed to do.

@matbesancon
Copy link

  1. Comparisons

I took a preliminary look at the paper, it would be interesting to compare the features with other optimization packages including solvers like Ipopt, SCIP and their Python bindings and solver-agnostic modelling languages like Pyomo or JuMP.
Is PyOpt more a solving or modeling package. If it is of the latter, what solvers are currently supported and how easy is it to switch between solvers?

  1. Usage

Their could be a section focused more on usage of the package. Non-linear optimization is notoriously hard to make user-friendly. There could be a representative usage example. How are non-linear functions passed to the packages? Are arbitrary Python functions supported?

@ewu63
Copy link

ewu63 commented Aug 17, 2020

Hi Mathieu, thanks for taking your time to do this review.

  1. pyOptSparse is a wrapper for several popular optimizers, with a particular focus on large-scale nonlinear programming of continuous variables. As such, it is closer to frameworks such as pyomo and scipy, where the optimization problem is defined in a particular syntax and pyOptSparse performs the conversion to the specific form required for each optimizer. The main distinguishing feature for pyOptSparse is the support for sparse constraint Jacobians, both for linear and nonlinear constraints, and particularly for supporting sparse sub-blocks of the Jacobian. Through the unified framework, it's straightforward to switch between say SNOPT and IPOPT by changing one line of code, and all conversion will be done automatically including converting the sparse Jacobian into a different format. There are also other features such as the ability to perform finite-difference or complex-step to compute derivatives automatically, and MPI support for parallel function evaluations.

    The list of solvers is shown in the documentation (for example the side bar here). To switch between optimizers, the user would need to 1) change the options dictionary, and 2) change the name of the optimizer in the optimize call, for example replacing SLSQP with IPOPT in the line opt = OPT("SLSQP", options=optOptions). I hesitate to provide a list and description of the optimizers in the paper because the list may change over time, with older optimizers eventually become deprecated and new ones added.

  2. Yes, arbitrary Python functions are supported, and the data is stored in a dictionary. A nested dictionary is used for gradients if they are supplied. It's a little bit unclear for me what type of information should be in the paper, and what should be in the documentation site of the repository. I would prefer, if possible, to keep most of this information in the documentation since API may change and users typically will refer to that instead of the journal paper for help on using the package. But please let me know if JOSS takes a different view and I'd be happy to add more information to the paper. For reference, please see the Quickstart for a basic example, and the Guide for a complete example with sparse linear and nonlinear constraints.

@matbesancon
Copy link

I agree that listing the solvers is not super relevant to the paper which should be more of a permanent document presenting the package. The fact that multiple solvers can be used with the same uniform syntax should be highlighted more.

There are also other features such as the ability to perform finite-difference or complex-step to compute derivatives automatically, and MPI support for parallel function evaluations.

I think this could be presented in the paper, as it can be of interest to the reader comparing different frameworks.

For the second point, I think more should go in the paper without going into the internal details that are likely to change. I think having at least a high-level example with arbitrary Python functions would be of value to the article

@ewu63
Copy link

ewu63 commented Aug 27, 2020

Hi Mathieu, I agree with your points and I will push an update to the paper soon.

@vissarion
Copy link

I finished my review.

I agree with the points listed above. I would also like to see a high-level example probably with the comment that links to the documentation for more details.

One more comment, I think it would be useful to note in the paper the current release version of the package.

@ewu63
Copy link

ewu63 commented Sep 10, 2020

Hi Mathieu and Vissarion,

Thanks for your feedback and apologies for not replying sooner, but I have been working with co-authors to update the paper. There are some substantial changes:

  • I have added a Features section to explain in more detail some salient features of the software which are not found elsewhere
  • I have added a section containing an example optimization script. There is no guarantee that the public API would remain stable, but I do think it's useful in showing what an optimization script would look like.
  • I have addressed other, more minor comments

The paper is located under the paper branch of the repo, please take a look and let me know if you have any feedback.

Cheers,
Neil

@vissarion
Copy link

Thanks for the substantial revision Neil. The paper now looks much better and useful for the reader. I do not have further comments.

@matbesancon
Copy link

@whedon generate pdf from branch paper

@whedon
Copy link
Author

whedon commented Sep 10, 2020

Attempting PDF compilation from custom branch paper. Reticulating splines etc...

@whedon
Copy link
Author

whedon commented Sep 10, 2020

@matbesancon
Copy link

Posted on mdolab/pyoptsparse#145 for the testing part which seems to have issues

@matbesancon
Copy link

Ok nevermind the tests do work. On the installation instructions here, I would recommend you state upfront that a fortran compiler is needed (maybe recommend gfortran directly)

@ewu63
Copy link

ewu63 commented Sep 10, 2020

I've updated the installation instructions in this PR.

@matbesancon
Copy link

perfect thanks!

@whedon
Copy link
Author

whedon commented Oct 20, 2020

👉📄 Download article proof 📄 View article proof on GitHub 📄 👈

@poulson
Copy link

poulson commented Oct 21, 2020

@whedon set 10.5281/zenodo.4110792 as archive

@whedon
Copy link
Author

whedon commented Oct 21, 2020

OK. 10.5281/zenodo.4110792 is the archive.

@poulson
Copy link

poulson commented Oct 21, 2020

@whedon set v2.2.1 as version

@whedon
Copy link
Author

whedon commented Oct 21, 2020

OK. v2.2.1 is the version.

@poulson
Copy link

poulson commented Oct 21, 2020

@whedon accept

@whedon whedon added the recommend-accept Papers recommended for acceptance in JOSS. label Oct 21, 2020
@whedon
Copy link
Author

whedon commented Oct 21, 2020

Attempting dry run of processing paper acceptance...

@whedon
Copy link
Author

whedon commented Oct 21, 2020

Reference check summary (note 'MISSING' DOIs are suggestions that need verification):

OK DOIs

- 10.1007/s00158-011-0666-3 is OK
- 10.2514/1.J056603 is OK
- 10.2514/1.C034934 is OK
- 10.5194/wes-4-163-2019 is OK
- 10.1007/s00158-019-02211-z is OK
- 10.1007/978-3-319-97773-7_38 is OK
- 10.1017/aer.2018.120 is OK
- 10.1038/s41592-019-0686-2 is OK
- 10.1145/838250.838251 is OK

MISSING DOIs

- None

INVALID DOIs

- None

@whedon
Copy link
Author

whedon commented Oct 21, 2020

👋 @openjournals/joss-eics, this paper is ready to be accepted and published.

Check final proof 👉 openjournals/joss-papers#1835

If the paper PDF and Crossref deposit XML look good in openjournals/joss-papers#1835, then you can now move forward with accepting the submission by compiling again with the flag deposit=true e.g.

@whedon accept deposit=true

@ewu63
Copy link

ewu63 commented Oct 23, 2020

@poulson is there anything I need to do here? Or will the EiC take care of this when they get a chance?

@kyleniemeyer
Copy link

@nwu63 yes, I will take care of this today

@kyleniemeyer
Copy link

@whedon accept deposit=true

@whedon
Copy link
Author

whedon commented Oct 24, 2020

Doing it live! Attempting automated processing of paper acceptance...

@whedon whedon added accepted published Papers published in JOSS labels Oct 24, 2020
@whedon
Copy link
Author

whedon commented Oct 24, 2020

🐦🐦🐦 👉 Tweet for this paper 👈 🐦🐦🐦

@whedon
Copy link
Author

whedon commented Oct 24, 2020

🚨🚨🚨 THIS IS NOT A DRILL, YOU HAVE JUST ACCEPTED A PAPER INTO JOSS! 🚨🚨🚨

Here's what you must now do:

  1. Check final PDF and Crossref metadata that was deposited 👉 Creating pull request for 10.21105.joss.02564 joss-papers#1850
  2. Wait a couple of minutes to verify that the paper DOI resolves https://doi.org/10.21105/joss.02564
  3. If everything looks good, then close this review issue.
  4. Party like you just published a paper! 🎉🌈🦄💃👻🤘

Any issues? Notify your editorial technical team...

@kyleniemeyer
Copy link

Congrats @nwu63 on your article's publication in JOSS!

Many thanks to @jgoldfar, @vissarion, and @matbesancon for reviewing this submission, and @poulson for editing.

@whedon
Copy link
Author

whedon commented Oct 24, 2020

🎉🎉🎉 Congratulations on your paper acceptance! 🎉🎉🎉

If you would like to include a link to your paper from your README use the following code snippets:

Markdown:
[![DOI](https://joss.theoj.org/papers/10.21105/joss.02564/status.svg)](https://doi.org/10.21105/joss.02564)

HTML:
<a style="border-width:0" href="https://doi.org/10.21105/joss.02564">
  <img src="https://joss.theoj.org/papers/10.21105/joss.02564/status.svg" alt="DOI badge" >
</a>

reStructuredText:
.. image:: https://joss.theoj.org/papers/10.21105/joss.02564/status.svg
   :target: https://doi.org/10.21105/joss.02564

This is how it will look in your documentation:

DOI

We need your help!

Journal of Open Source Software is a community-run journal and relies upon volunteer effort. If you'd like to support us please consider doing either one (or both) of the the following:

@ewu63
Copy link

ewu63 commented Oct 24, 2020

Hi @kyleniemeyer and everyone else involved in this, thanks so much! Just one quick question: there is an incorrect capitalization in the author list here, Joaquim R. r. a. Martins should be Joaquim R. R. A. Martins, is there a way to fix that?

@kyleniemeyer
Copy link

@openjournals/dev can you help with this? the issue is in the author list on the landing page—the paper itself is fine

@arfon
Copy link
Member

arfon commented Oct 25, 2020

@openjournals/dev can you help with this? the issue is in the author list on the landing page—the paper itself is fine

Fixed.

@editorialbot
Copy link
Collaborator

🌈 Paper updated!

New PDF and metadata files 👉 openjournals/joss-papers#5321

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
accepted CSS Fortran published Papers published in JOSS Python recommend-accept Papers recommended for acceptance in JOSS. review
Projects
None yet
Development

No branches or pull requests

8 participants