openjournals / joss-reviews

Reviews for the Journal of Open Source Software
Creative Commons Zero v1.0 Universal
718 stars 38 forks source link

[REVIEW]: PyExperimenter: Easily distribute experiments and track results #5149

Closed editorialbot closed 1 year ago

editorialbot commented 1 year ago

Submitting author: !--author-handle-->@tornede<!--end-author-handle-- (Tanja Tornede) Repository: https://github.com/tornede/py_experimenter Branch with paper.md (empty if default branch): develop Version: v1.2.0 Editor: !--editor-->@timtroendle<!--end-editor-- Reviewers: @ArsamAryandoust, @schnorr Archive: 10.5281/zenodo.7838280

Status

status

Status badge code:

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

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

@ArsamAryandoust & @schnorr, your review will be checklist based. Each of you will have a separate checklist that you should update when carrying out your review. First of all you need to run this command in a separate comment to create the checklist:

@editorialbot generate my checklist

The reviewer guidelines are available here: https://joss.readthedocs.io/en/latest/reviewer_guidelines.html. Any questions/concerns please let @timtroendle 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

Checklists

📝 Checklist for @ArsamAryandoust

📝 Checklist for @schnorr

editorialbot commented 1 year ago

Hello humans, I'm @editorialbot, a robot that can help you with some common editorial tasks.

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

@editorialbot commands

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

@editorialbot generate pdf
editorialbot commented 1 year ago
Software report:

github.com/AlDanial/cloc v 1.88  T=0.06 s (681.4 files/s, 71183.9 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Python                          17            428            284           1830
Markdown                         4             84              0            258
reStructuredText                10            160             74            213
TeX                              1             11              0            189
Jupyter Notebook                 2              0            515            138
YAML                             3              4             13             96
JSON                             3              0              0             91
TOML                             1              3              0             46
DOS Batch                        1              8              1             26
make                             1              4              7              9
-------------------------------------------------------------------------------
SUM:                            43            702            894           2896
-------------------------------------------------------------------------------

gitinspector failed to run statistical information for the repository
editorialbot commented 1 year ago

Wordcount for paper.md is 1038

editorialbot commented 1 year ago
Reference check summary (note 'MISSING' DOIs are suggestions that need verification):

OK DOIs

- 10.5281/zenodo.3509134 is OK
- 10.5281/zenodo.6536395 is OK
- 10.5281/zenodo.7264816 is OK
- 10.25080/shinma-7f4c6e7-008 is OK

MISSING DOIs

- None

INVALID DOIs

- None
editorialbot commented 1 year ago

:point_right::page_facing_up: Download article proof :page_facing_up: View article proof on GitHub :page_facing_up: :point_left:

timtroendle commented 1 year ago

@ArsamAryandoust, @schnorr, see above for instructions to review. If anything is unclear, just let me know. Please finish your reviews within six weeks at the very latest. I will add a reminder in two weeks from now for both of you.

timtroendle commented 1 year ago

@editorialbot remind @ArsamAryandoust in two weeks

editorialbot commented 1 year ago

Reminder set for @ArsamAryandoust in two weeks

timtroendle commented 1 year ago

@editorialbot remind @schnorr in two weeks

editorialbot commented 1 year ago

Reminder set for @schnorr in two weeks

ArsamAryandoust commented 1 year ago

Review checklist for @ArsamAryandoust

Conflict of interest

Code of Conduct

General checks

Functionality

Documentation

Software paper

editorialbot commented 1 year ago

:wave: @ArsamAryandoust, please update us on how your review is going (this is an automated reminder).

editorialbot commented 1 year ago

:wave: @schnorr, please update us on how your review is going (this is an automated reminder).

schnorr commented 1 year ago

Review checklist for @schnorr

Conflict of interest

Code of Conduct

General checks

Functionality

Documentation

Software paper

timtroendle commented 1 year ago

Hi @ArsamAryandoust and @schnorr, can you let us know how the review is going? Half of the review time has elapsed and I'll set another reminder for both of you to let you know when the review time is almost over.

timtroendle commented 1 year ago

@editorialbot remind @schnorr in two weeks

editorialbot commented 1 year ago

Reminder set for @schnorr in two weeks

timtroendle commented 1 year ago

@editorialbot remind @ArsamAryandoust in two weeks

editorialbot commented 1 year ago

Reminder set for @ArsamAryandoust in two weeks

schnorr commented 1 year ago

Hi @timtroendle, I've started my review and hope to finish this week.

timtroendle commented 1 year ago

Great, thanks for letting us know.

schnorr commented 1 year ago

So, just to let you know that I've completed my review. My opinion after regarding the source code, documentation, testing the commands suggested by the authors, etc, is that the PyExperimenter software has good maturity. It also has some people already using it, as can be seen in the Issues tabs for people requesting new functionality. I've only found a minor problem that I've registered as an issue in their repository.

About the Functionality, I think the tool is very useful because usually R or Python packages are focused on generating the experimental project without handling the experiment run. The PyExperimenter let the user define a function that will receive the configuration parameters. The function must then run the experiment itself with those parameters and let PyExperimenter know that everything went okay. So, the functionality provides a way to define the experiment project and also run it (eventually in parallel with the n_jobs parameter). Of course, some R packages especially are much more advanced because they would allow one to define specific screening projects to optimize the number of experiments to be run (avoiding a cartesian product of all configurations - which might be overwhelming). But that is not the focus of this project, which is focused in a specific type of experimental project.

I've checked all the bullet points in the review, running sloccount (for the number of lines ~ about 1k lines), checking the number of committers, and so on. As consequence, I conclude that the software checks all the requirements. So, my general opinion is a go for accept.

Thank you once again for considering my for JOSS @timtroendle !

ArsamAryandoust commented 1 year ago

The authors provide solid work that includes both extensive unit and integration tests. A list of dependencies is available in the pyproject.toml file, maybe could also be stated in the readme or a requirements.txt file (?). Overall, I suggest to go for an accept only after the following issues are addressed.

  1. The documentations under docs/source/examples/ need to be improved. Test your notebooks more accurately and make sure they run. I made exemplar pull requests. Everything else works flawlessly.

  2. Seeking support and creating issues is described under documents tab 'Need help?'. Descriptions on how to contribute can be added.

  3. I did not test the full functionality of the presented tool. However, the provided toy examples are functional and seem to demonstrate the core functionality.

  4. The paper can have small improvements. @timtroendle: please provide a proper PDF file or other manuscript file for suggesting changes.

I like working with Docker. So I create a minimalistic Dockerfile:

cd
mkdir py_experimenter
cd py_experimenter
mkdir Docker
vim Docker/Dockerfile

Content added to Dockerfile:

FROM ubuntu:latest
RUN apt-get update && apt-get upgrade -y
RUN apt-get install python3-pip -y
RUN pip3 install py-experimenter
RUN pip3 install scikit-learn

WORKDIR /py_experimenter

I build and enter the container:

docker build Docker -t py_experimenter_docker
docker run -it -v ~/py_experimenter_test:/py_experimenter py_experimenter_docker

Everything works flawlessly. In example notebooks, there are small issues. In code section 1, insert the following command:

if not os.path.isdir('config'):
  os.mkdir('config')
experiment_configuration_file_path = os.path.join('config', 'example_general_usage.cfg')
with open(experiment_configuration_file_path, "w") as f:
  f.write(content)

In code snippet under 'Fill Table' section, change code into the following, to ensure that code runs while also illustrating the example. I guess everyone will still get the point also with dataset being iris again:

experimenter.fill_table_from_config()

experimenter.fill_table_with_rows(rows=[
      {'dataset': 'iris', 'cross_validation_splits': 3, 'seed': 42, 'kernel':'linear'}])

# showing database table
experimenter.get_table()

In code section under 'Restart Failed Experiments', change code into:

experimenter.reset_experiments('error')

# showing database table
experimenter.get_table()
timtroendle commented 1 year ago

Thanks a lot for your extensive reviews, @schnorr and @ArsamAryandoust .

@ArsamAryandoust , the paper is available as Markdown source. Would that help?

ArsamAryandoust commented 1 year ago

@timtroendle thanks for the reference to the paper markdown. I am done with suggested changes to the paper and created these as a pull request to the markdown file.

The paper is well written and together with the documentation of the tool, it contains everything a user needs to know. I further believe the documentation is not perfect but a great initial version for a tool that irons out with more user feedback.

timtroendle commented 1 year ago

Thanks again, @ArsamAryandoust !

@tornede, could you have a look at the suggested changes?

editorialbot commented 1 year ago

:wave: @schnorr, please update us on how your review is going (this is an automated reminder).

editorialbot commented 1 year ago

:wave: @ArsamAryandoust, please update us on how your review is going (this is an automated reminder).

schnorr commented 1 year ago

Hi, I've finished as we can see above.

timtroendle commented 1 year ago

Hi @schnorr @ArsamAryandoust, yes I am aware both of your reviews are finished. Sorry for the confusing bot message. It was based on the reminder I set two weeks ago.

We are currently waiting for @tornede to respond to the review comments.

tornede commented 1 year ago

Thanks a lot for the detailed feedback! We will respond to it within the next week :)

tornede commented 1 year ago

Dear reviewers and editor,

thanks a lot (again) for the kind and detailed feedback! It helped a lot to find outdated documentation and issues within the examples.

PyExperimenter has been developed further since we handed in the paper in November 2022. The last week, we concluded a lot of unfinished work and prepared a new release, both addressing your issues as well as new features. Additionally we reworked huge parts of the documentation, especially regarding usage, and updated the example notebooks.

@schnorr

I've only found a minor problem that I've registered as an issue in their repository.

Thanks for the detailed issue regarding resetting experiments, which we fixed within the last days.

Additionally you checked all boxes from the review checklist, which is why we assume that you have no further concerns. :)

@ArsamAryandoust

A list of dependencies is available in the pyproject.toml file, maybe could also be stated in the readme or a requirements.txt file (?).

We decided to use poetry, and therefore define dependencies via pyproject.toml. Having a separated requirements file would be duplicated and error prone. We decided to reduce the README to a minimum and instead reference the documentation, again to reduce redundancy and possible errors.

  1. The documentations under docs/source/examples/ need to be improved. Test your notebooks more accurately and make sure they run. I made exemplar pull requests. Everything else works flawlessly.

Thanks for hinting to the problem of the creation of the experiment configuration file within the example notebooks, which we fixed within the last days.

  1. Seeking support and creating issues is described under documents tab 'Need help?'. Descriptions on how to contribute can be added.

We distinguish between a simple user and an (external) contributor, which is why we have the two pages within the documentation: "Need Help?" and "How to Contribute". In case of a simple user and any occurring problems, we believe referring to the examples and GitHub issues is enough, as such a person will most likely not make actual changes to the code. Otherwise "How to Contribute" can be found next to "Need Help?" within the side bar.

  1. I did not test the full functionality of the presented tool. However, the provided toy examples are functional and seem to demonstrate the core functionality.

Thanks for the great feedback, that the provided examples demonstrate the core functionality. As this has been listed under "issues to be addressed" we are wondering, if you have any further feedback that can be addressed?

The paper can have small improvements.

Thanks for the feedback to the paper text itself. We implemented some parts of it into the paper.

I like working with Docker. So I create a minimalistic Dockerfile

Thanks a lot providing a Dockerfile and some lines how to build it. We created an issue containing your provided information, which will be investigated in the future.

In example notebooks, there are small issues.

Thanks for pointing this out, we fixed it within the last days.

In code snippet under 'Fill Table' section, change code into the following, to ensure that code runs while also illustrating the example. I guess everyone will still get the point also with dataset being iris again

Thanks for the remark, that this row might not be well understood. We decided to change the dataset name to "error_dataset", which will always result into a raised exception and therefore a logged stacktrace.

In code section under 'Restart Failed Experiments', change code into [...]

Thanks for this issue, which is the same as pointed out by @schnorr, which has been fixed within the last days.

When checking your review checklist, we figured out that some boxes have not been checked. Is there anything else that has to be addressed?

@timtroendle

How do we handle the new version for the JOSS paper? Will it be the old version v1.1.0 or the new one v1.2.0 ?

timtroendle commented 1 year ago

@tornede, thank you for your detailed responses and for addressing the comments of the reviewers.

Regarding the version: it should be the version of the tool that the reviewers have assessed. If you make changes according to the reviewer's comments, the version number can change of course. The new version should not include other changes the reviewers are not aware of, however.

@ArsamAryandoust, could you let us know if your comments have been addressed sufficiently? If yes, can you check the corresponding boxes in the review checklist?

ArsamAryandoust commented 1 year ago

@timtroendle

All issues I raised are addressed. No further issues are found.

Happy to go for an accept!

timtroendle commented 1 year ago

@tornede, at this point could you:

I can then move forward with recommending acceptance of the submission

tornede commented 1 year ago

@timtroendle

Thank you for the support and fast responses!

timtroendle commented 1 year ago

@editorialbot set 10.5281/zenodo.7838280 as archive

editorialbot commented 1 year ago

Done! Archive is now 10.5281/zenodo.7838280

timtroendle commented 1 year ago

@editorialbot set v1.2.0 as version

editorialbot commented 1 year ago

Done! version is now v1.2.0

timtroendle commented 1 year ago

@editorialbot check references

timtroendle commented 1 year ago

@editorialbot generate pdf

editorialbot commented 1 year ago

:point_right::page_facing_up: Download article proof :page_facing_up: View article proof on GitHub :page_facing_up: :point_left:

editorialbot commented 1 year ago
Reference check summary (note 'MISSING' DOIs are suggestions that need verification):

OK DOIs

- 10.5281/zenodo.3509134 is OK
- 10.5281/zenodo.6536395 is OK
- 10.5281/zenodo.7264816 is OK
- 10.25080/shinma-7f4c6e7-008 is OK

MISSING DOIs

- None

INVALID DOIs

- None
timtroendle commented 1 year ago

@tornede, it all looks good to me and I am happy to move forward.

Thanks again @schnorr and @ArsamAryandoust for your reviews!

timtroendle commented 1 year ago

@editorialbot recommend-accept

editorialbot commented 1 year ago
Attempting dry run of processing paper acceptance...
editorialbot commented 1 year ago

:wave: @openjournals/dsais-eics, this paper is ready to be accepted and published.

Check final proof :point_right::page_facing_up: Download article

If the paper PDF and the deposit XML files look good in https://github.com/openjournals/joss-papers/pull/4138, then you can now move forward with accepting the submission by compiling again with the command @editorialbot accept

editorialbot commented 1 year ago
Reference check summary (note 'MISSING' DOIs are suggestions that need verification):

OK DOIs

- 10.5281/zenodo.3509134 is OK
- 10.5281/zenodo.6536395 is OK
- 10.5281/zenodo.7264816 is OK
- 10.25080/shinma-7f4c6e7-008 is OK

MISSING DOIs

- None

INVALID DOIs

- None
tornede commented 1 year ago

@timtroendle It looks good to me, too. Do I have to tell it to the editorial bot, or do you do it?

Thanks again everyone :)