Joss-reviews: [REVIEW]: PyWavelets: A Python package for wavelet analysis

Created on 5 Feb 2019  ยท  92Comments  ยท  Source: openjournals/joss-reviews

Submitting author: @grlee77 (Gregory Lee)
Repository: https://github.com/PyWavelets/pywt
Version: v1.0.3
Editor: @jedbrown
Reviewer: @rafat, @souopgui
Archive: 10.5281/zenodo.2634243

Status

status

Status badge code:

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

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) 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

@rafat & @souopgui, 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.theoj.org/about#reviewer_guidelines. Any questions/concerns please let @jedbrown know.

โœจ Please try and complete your review in the next two weeks โœจ

Review checklist for @rafat

Conflict of interest

Code of Conduct

General checks

  • [x] Repository: Is the source code for this software available at the repository url?
  • [x] License: Does the repository contain a plain-text LICENSE file with the contents of an OSI approved software license?
  • [x] Version: v1.0.3
  • [x] Authorship: Has the submitting author (@grlee77) made major contributions to the software? Does the full list of paper authors seem appropriate and complete?

Functionality

  • [x] Installation: Does installation proceed as outlined in the documentation?
  • [x] Functionality: Have the functional claims of the software been confirmed?
  • [x] 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

  • [x] A statement of need: Do the authors clearly state what problems the software is designed to solve and who the target audience is?
  • [x] Installation instructions: Is there a clearly-stated list of dependencies? Ideally these should be handled with an automated package management solution.
  • [x] Example usage: Do the authors include examples of how to use the software (ideally to solve real-world analysis problems).
  • [x] Functionality documentation: Is the core functionality of the software documented to a satisfactory level (e.g., API method documentation)?
  • [x] Automated tests: Are there automated tests or manual steps described so that the function of the software can be verified?
  • [x] 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

  • [x] Authors: Does the paper.md file include a list of authors with their affiliations?
  • [x] A statement of need: Do the authors clearly state what problems the software is designed to solve and who the target audience is?
  • [x] References: Do all archival references that should have a DOI list one (e.g., papers, datasets, software)?

Review checklist for @souopgui

Conflict of interest

Code of Conduct

General checks

  • [x] Repository: Is the source code for this software available at the repository url?
  • [x] License: Does the repository contain a plain-text LICENSE file with the contents of an OSI approved software license?
  • [x] Version: v1.0.3
  • [x] Authorship: Has the submitting author (@grlee77) made major contributions to the software? Does the full list of paper authors seem appropriate and complete?

Functionality

  • [x] Installation: Does installation proceed as outlined in the documentation?
  • [x] Functionality: Have the functional claims of the software been confirmed?
  • [x] 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

  • [x] A statement of need: Do the authors clearly state what problems the software is designed to solve and who the target audience is?
  • [x] Installation instructions: Is there a clearly-stated list of dependencies? Ideally these should be handled with an automated package management solution.
  • [x] Example usage: Do the authors include examples of how to use the software (ideally to solve real-world analysis problems).
  • [x] Functionality documentation: Is the core functionality of the software documented to a satisfactory level (e.g., API method documentation)?
  • [x] Automated tests: Are there automated tests or manual steps described so that the function of the software can be verified?
  • [x] 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

  • [x] Authors: Does the paper.md file include a list of authors with their affiliations?
  • [x] A statement of need: Do the authors clearly state what problems the software is designed to solve and who the target audience is?
  • [x] References: Do all archival references that should have a DOI list one (e.g., papers, datasets, software)?
accepted published recommend-accept review

All 92 comments

Hello human, I'm @whedon, a robot that can help you with some common editorial tasks. @rafat, it looks like you're currently assigned as the reviewer for this paper :tada:.

:star: Important :star:

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
Attempting PDF compilation. Reticulating splines etc...

@rafat @souopgui :wave: Welcome and thanks for agreeing to review! The comments from @whedon above outline the review process, which takes place in this thread (possibly with issues filed in the PyWavelets repository). I'll be watching this thread if you have any questions.

@grlee77 Can you clarify whether this review should take place on the 'master' branch (where your paper sources currently reside) or in the '1.0.x' branch which contains the stated version? Thanks.

The features and functionality are the same in both 1.0.1 and master so I am fine with reviewing based on 1.0.1. The main difference is that master has dropped Python 2 support and has a few minor fixes. We will eventually include the fixes in a future release from the 1.0.x branch as well.

There are a number of basic demos of usage in the demo folder of the repository. The API documentation is pretty complete, but the docs don't have a lot of tutorials/demos. Some concrete examples for scientific applications are provided below.

There are a some image denoising demos functions in scikit-image that rely on PyWavelets (specifically for skimage.restoration.estimate_sigma and skimage.restoration.denoise_wavelet):
http://scikit-image.org/docs/dev/auto_examples/filters/plot_cycle_spinning.html
http://scikit-image.org/docs/dev/auto_examples/filters/plot_denoise_wavelet.html

An example of wrapping the wavelet transform into an operator (e.g. for potential use as a sparsity-enforcing regularizer in iterative medical image reconstruction) is available within ODL:
https://github.com/odlgroup/odl/blob/master/examples/trafos/wavelet_trafo.py

For time series analysis, a user working in the field of geophysics recently posted the following notebook with some examples to the mailing list:
https://gist.github.com/aprovecharLab/09ded80ae59ea510334e00926a15920f

Thanks, @grlee77. Note that upon acceptance, we'll ask you to tag and archive a release that includes any revisions that may have resulted from the review. That archive should include the final sources for the paper, which are currently in 'master'.

Okay, in that case, please just review from master and we will tag a new release once the review is completed. The 1.0.x branch was created to allow maintenance/bug fixes releases for Python 2.7 support through 2020 or so, but any new features introduced will not be backported to that branch.

@grlee77 There are a few minor issues with .rst files in the doc/source folder that are causing test_doc.py to fail when I run it manually from the folder. For example, line 335 of expected value has "Short name: db" but the code correctly returns "Short name: gaus" . There are no issues with the Python code as far as can I tell but you may want to take a look at the .rst files.

Thanks for pointing that out. It seems the tests in that file were being skipped by our CI scripts. I have fixed the failures and made sure TravisCI is running these tests in PyWavelets/pywt#463.

@grlee77 Quick questions to help me finalize my review:

  1. Apart from the references to Mallat "A Theory for Multiresolution Signal Decomposition: The Wavelet Representation", Wickerhauser "Adapted Wavelet Analysis from Theory to Software" and the thesis that started this work, is there other part of the doc that I am missing? I think that for a topic like the wavelet, there should be a little more documentations, think of Haar, Morlet, Meyer, coifman, Daubechies, etc. ?
  2. Is there a way to try the automated test outside of the install procedure?
  1. is there other part of the doc that I am missing?

I think you are asking about the PyWavelets documentation and not the manuscript itself? Specific functions do have additional references to the literature (see for example the docs for threshold or fswavedecn, but I agree that we are lacking an overview page with basic theory and key references, etc. Wavelets are well covered in many textbooks at this point, but it might still be worth having an abbreviated summary in the PyWavelet docs.

  1. Is there a way to try the automated test outside of the install procedure?

Yes, try:

import pywt
pywt.test()

hey @rafat, just checking if you are still working on this and if there are any other items left to address?

I just opened a PR at PyWavelets/pywt#475 to add a reference to the book by Daubechies, more clearly link Mallat to the multiresolution property of the transform, and to add a brief discussion of Kymatio in relation to PyWavelets.

Hi @grlee77 @jedbrown I finished my review a couple of weeks ago. Pywavelets is a very good software and everything works as it should on two different systems (Windows and Linux).

Thanks, @rafat.

@souopgui How's your review going? It looks like there are just a few items left.

@whedon generate pdf

Attempting PDF compilation. Reticulating splines etc...

Just wanted to check in with @souopgui as the review seems to have stalled: Are there still remaining items to address?

I think the only substantial change in master made subsequent to the review comments was updating the underlying testing framework used from nose to pytest since nose is no longer being updated. The tests themselves are the same as before (but hopefully will be refactored to some extent in the future to also make better use of features like pytest.mark.parametrize).

@grlee77 , I have not paid attention to email coming from github lately.
The toolbox is great and I am already recommending people to give it a try. For a topic of the importance of the wavelet, a toolbox like this one was missing. With the implementation of all the filters you guys implemented, this is a great tools.
With that, I am done with my review. Being less familiar with the review on github, if I am missing something to close the process, please let me know. And sorry a again for being out of the loop for this long.

@souopgui There are points unchecked in your review checklist at the top of this issue. Can you confirm those points so we can move forward with acceptance? Thanks!

@jedbrown I just checked those points based on the responses to my questions from the authors. I fully recommend the software.

@whedon check references

Attempting to check references...

```Reference check summary:

OK DOIs

  • 10.5281/zenodo.1407172 is OK
  • 10.1137/1.9781611970104 is OK
  • 10.1109/MCSE.2010.118 is OK
  • 10.7717/peerj.453 is OK
  • 10.5281/zenodo.1442734 is OK

MISSING DOIs

  • None

INVALID DOIs

  • None
    ```

@grlee77 There is one citation Stephan Mallat [@mallat2008wavelet] that is "in-text" and should be written Stephan Mallat [-@mallat2008wavelet] or @mallat2008wavelet. See https://rmarkdown.rstudio.com/authoring_bibliographies_and_citations.html#citation_syntax for syntax. That's all I notice so I think we'll be ready to archive after that one minor fix.

@whedon generate pdf

Attempting PDF compilation. Reticulating splines etc...

Thanks @jedbrown. It looks like the suggested [-@mallat2008wavelet] fixed the issue.

Looks good, thanks. One more minor issue: please remove the last sentence (citing your old Zenodo archive). A link to the current Zenodo archive will be in the sidebar so the 2018 archive will just be confusing. After removing that sentence, go ahead and create a current archive and report the DOI here.

Okay, I can remove that sentence as well as the prior Zenodo reference from the .bib.

FYI, I was following the example in the author guidelines when I originally added that line. Perhaps the example should also remove that line if it is no longer recommended?

I think I will backport the paper.md and .bib to the 1.0.x branch and just tag a 1.0.3 release there. Does that sound fine? I don't think there are any new user-facing features to justify a 1.1 release from master (it has just dropped Python 2.x support and switched to pytest for testing).

Thanks for pointing out the source of that verbiage. I've created a PR: https://github.com/openjournals/joss/pull/520
Yes, tagging v1.0.3 would be perfect.

(Our Editor in Chief merged the above PR.)

I tagged v1.0.3 and it is on Zenodo now:

https://zenodo.org/record/2634243
DOI: 10.5281/zenodo.2634243

@whedon generate pdf

Attempting PDF compilation. Reticulating splines etc...

@grlee77 Could you please update the Zenodo archive's author list to match the paper?

There are six contributors who had an order of magnitude more commits and LOC than others and I was able to contact and get an affirmative response for authorship from 5 of the 6, so those are the ones I had listed for the JOSS publication. I was not able to get a response from Holger Nahrstaedt and so mentioned him and the other contributors in the acknowledgements instead.

Oddly, it seems that one of our top past contibutors, Kai Wohlfahrt (@kwohlfahrt) no longer shows up as a contributor on the GitHub page. I wonder why this is and if it could be a problem that occured when we recently had GitHub detach the repo from the deprecated github.com/nigma/PyWavelets repo? I assume this absence on GitHub is why he is also not present in the autogenerated Zenodo author list for v1.0.3.

I guess for now, I can manually edit the v1.0.3 release on Zenodo to match the author list here and add the appropriate ORCID IDs.

@rgommers: please see the prior comment on authorship. I'm curious if you have any idea why Kai's contributions are no longer visible?

No idea, that's very odd. If it's not a short glitch on GitHub's part, then it's worth opening a support issue about that I think.

Could you please update the Zenodo archive's author list to match the paper?

It's not a big deal but for the record: I don't really like this. Paper author do not have to match software authors as a rule; there are authors who choose not to participate, or who can't be reached for permission to put their name on the paper. Manually removing one of our major contributors from Zenodo only for v1.0.3 doesn't feel quite right.

:point_up: Cc: @openjournals/joss-eics

Manually removing one of our major contributors from Zenodo only for v1.0.3 doesn't feel quite right.

I would also prefer to be more inclusive rather than less on Zenodo. @jedbrown, did you raise the issue because Kai wasn't listed there but was in the paper author list or does it need to be a 1:1 match?

We normally ask for those lists to match. Note that JOSS reviews actually review the software, not just the paper. It sounds like there may be extenuating circumstances in this case. https://joss.readthedocs.io/en/latest/editing.html#after-acceptance

It sounds like there may be extenuating circumstances in this case

okay thanks @jedbrown, then I suggest we add back our one major contributor who is not on the paper.

Note that JOSS reviews actually review the software, not just the paper.

That doesn't really matter for who ends up being a paper author I would say. A JOSS paper is still a real academic paper with affiliations in it, so we can't just put people on that don't respond or don't want to be listed (I understand a match is desirable of course)

Pending any further feedback here, I added Holger (but not the full list of minor contributors) back to the author list for v1.0.3 on Zenodo for now. The first 5 authors listed there match the JOSS publication.

It's not a big deal but for the record: I don't really like this. Paper author do not have to match software authors as a rule; there are authors who choose not to participate, or who can't be reached for permission to put their name on the paper. Manually removing one of our major contributors from Zenodo only for v1.0.3 doesn't feel quite right.

JOSS assumes that the author list of the paper includes all major contributors. The paper is, after all, a _software paper_. As we state in the JOSS guidelines, it is up to the authors themselves to determine who should be credited with authorship. But you are right that authors should agree to be listed.

Zenodo grabs the author list automatically from all commits to the repo, and this usually bloats the list with folks who sent in a minor PR. It is rare (it's never come up before!) to have a major contributor who is not listed as an author in the paper.

@kwohlfahrt: If you would like to restore your commits to the contributors page again for PyWavelets, you will probably have to reach out to GitHub support. I got the following response from GitHub Support regarding their disappearance:

Thanks for reaching out! In looking at an older commit made by that user in the PyWavelets/pywt repository, it appears that the email address used to author their commits is no longer linked to a GitHub account at all:

https://github.com/PyWavelets/pywt/pull/59/commits/5831bbe89de12dfaa2385e71720cd4bc7fc196ed

This is probably because the user removed that email from their account, and since GitHub can no longer 'link' the commits properly it will in turn mean they won't appear as a contributor to the repository. If you are in contact with the user, you are welcome to have them write in to us here in support and we can work with them to get those contributions linked back up.

:point_up: Does GitHub not support .mailmap files (https://github.com/git/git/blob/master/.mailmap)?

It is rare (it's never come up before!) to have a major contributor who is not listed as an author in the paper.

Interesting, thanks @labarba. It probably reflects that the vast majority of packages are young, modest in size and with few authors. For larger projects with a long history it's unlikely that all significant contributors are still active, can be reached and want to be listed. E.g. the SciPy paper we are finalizing right now will miss lots of names, it's unavoidable with a 15 year history and 700+ contributors. PyWavelets is not that large, but is 10+ years old.

Does GitHub not support .mailmap files (https://github.com/git/git/blob/master/.mailmap)?

Good suggestion, worth a try at least. We have a manual name mapping for release notes that we can easily convert to .mailmap: https://github.com/PyWavelets/pywt/blob/master/util/authors.py#L27

For larger projects with a long history it's unlikely that all significant contributors are still active, can be reached and want to be listed.

In that case, a "best effort" approach should be made. Any contributors from long-ago who cannot be reached or who do not want to be authors can be listed in a long acknowledgement. The Zenodo author list should match the paper, as it is an archive deposit of the software associated with the software publication.

In that case, a "best effort" approach should be made. Any contributors from long-ago who cannot be reached or who do not want to be authors can be listed in a long acknowledgement. The Zenodo author list should match the paper, as it is an archive deposit of the software associated with the software publication.

A "best effort" was already made for the top 6 authors (who account for ~95% of the total commits). I got an affirmative response from 5 of the 6 (~90% of total commits) and included these in the JOSS paper author list.

It sounds like you are insisting that we should only include the 5 JOSS paper authors for the 1.0.3 tag on Zenodo.

@rgommers: Are you okay with this? There should not be a restriction on going back to the full contributor list for future releases.

I did write in the release notes for 1.0.3 that it was archived specifically to correspond to this publication:

"PyWavelets 1.0.3 is functionally equivalent to the 1.0.2 release. It was made to archive the JOSS paper about PyWavelets to the 1.0.x branch and serve as a reference corresponding to the version that was peer reviewed."

Perhaps a reasonable compromise is to edit that text on Zenodo to append an acknowledgement to all other contributrs to PyWavelets (potentially with a full list of names). That allows all names to be listed, just not as part of the official citation.

@rgommers: Are you okay with this? There should not be a restriction on going back to the full contributor list for future releases.

As I said in my first post it's not a very big deal, so if the editors insist then I'm fine with it.

Perhaps a reasonable compromise is to edit that text on Zenodo to append an acknowledgement to all other contributrs to PyWavelets (potentially with a full list of names). That allows all names to be listed, just not as part of the official citation.

That sounds like a good idea. And then for future releases we go back to the default Zenodo behavior.

Does GitHub not support .mailmap files (https://github.com/git/git/blob/master/.mailmap)?

We just added a .mailmap file in PyWavelets/pywt#485. This did clean up the output of git shortlog nicely, but does not appear to be used by GitHub itself.

Good to know (if unfortunate) regarding .mailmap.

Please see the updated Zenodo entry. The author list there now matches the publication.
https://zenodo.org/record/2634243#.XK9g7UN7kQ8

@whedon set v1.0.3 as version

OK. v1.0.3 is the version.

@whedon set 10.5281/zenodo.2634243 as archive

OK. 10.5281/zenodo.2634243 is the archive.

@whedon accept

Attempting dry run of processing paper acceptance...

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

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed

0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 16 0 16 0 0 319 0 --:--:-- --:--:-- --:--:-- 326
sh: 44: Syntax error: newline unexpected
Looks like we failed to compile the Crossref XML

```Reference check summary:

OK DOIs

  • 10.1137/1.9781611970104 is OK
  • 10.1109/MCSE.2010.118 is OK
  • 10.7717/peerj.453 is OK
  • 10.5281/zenodo.1442734 is OK

MISSING DOIs

  • None

INVALID DOIs

  • None
    ```

@whedon generate pdf

Attempting PDF compilation. Reticulating splines etc...

@labarba Do you know how to debug the crossref issue?

@whedon accept

Attempting dry run of processing paper acceptance...

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

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed

0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 16 0 16 0 0 200 0 --:--:-- --:--:-- --:--:-- 202
sh: 44: Syntax error: newline unexpected
Looks like we failed to compile the Crossref XML

```Reference check summary:

OK DOIs

  • 10.1137/1.9781611970104 is OK
  • 10.1109/MCSE.2010.118 is OK
  • 10.7717/peerj.453 is OK
  • 10.5281/zenodo.1442734 is OK

MISSING DOIs

  • None

INVALID DOIs

  • None
    ```

@whedon accept

Attempting dry run of processing paper acceptance...

```Reference check summary:

OK DOIs

  • 10.1137/1.9781611970104 is OK
  • 10.1109/MCSE.2010.118 is OK
  • 10.7717/peerj.453 is OK
  • 10.5281/zenodo.1442734 is OK

MISSING DOIs

  • None

INVALID DOIs

  • None
    ```

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

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed

0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 16 0 16 0 0 486 0 --:--:-- --:--:-- --:--:-- 500
sh: 44: Syntax error: newline unexpected
Looks like we failed to compile the Crossref XML

I have no clue what is going on โ€” @arfon, do you?

Looks like Whedon doesn't like apostrophes in names (this feels like a new bug as I don't think I've seen it before). Short term fix here: https://github.com/PyWavelets/pywt/pull/487

Thanks @arfon. I merged your PR. Can you check if Whedon is happy now?

@whedon accept

Attempting dry run of processing paper acceptance...

```Reference check summary:

OK DOIs

  • 10.1137/1.9781611970104 is OK
  • 10.1109/MCSE.2010.118 is OK
  • 10.7717/peerj.453 is OK
  • 10.5281/zenodo.1442734 is OK

MISSING DOIs

  • None

INVALID DOIs

  • None
    ```

Check final proof :point_right: https://github.com/openjournals/joss-papers/pull/619

If the paper PDF and Crossref deposit XML look good in https://github.com/openjournals/joss-papers/pull/619, then you can now move forward with accepting the submission by compiling again with the flag deposit=true e.g.
@whedon accept deposit=true

@whedon accept deposit=true

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

๐Ÿšจ๐Ÿšจ๐Ÿšจ 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 :point_right: https://github.com/openjournals/joss-papers/pull/620
  2. Wait a couple of minutes to verify that the paper DOI resolves https://doi.org/10.21105/joss.01237
  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...

Congratulations, @grlee77, your JOSS paper is published! ๐Ÿš€

Big thanks to our editor: @jedbrown, and reviewers: @rafat, @souopgui โ€” your contribution is valued by all of us! ๐Ÿ™

:tada::tada::tada: Congratulations on your paper acceptance! :tada::tada::tada:

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

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

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

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

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:

Was this page helpful?
0 / 5 - 0 ratings