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

refactor makeclusters to make it work #73

Merged
merged 1 commit into from
Aug 16, 2024
Merged

Conversation

stevenhua0320
Copy link
Contributor

No description provided.

@Ainamacar
Copy link
Contributor

Ainamacar commented Aug 16, 2024

(Edit: I originally posted this comment in Issues #64, but it's more appropriate here.)

I believe this commit will cause breaking changes. The main extraction loop of SrMise (located in extract_single() in peakextraction.py) currently relies on DataClusters following Python's iterator protocol. This commit is somewhere in between: DataClusters still defines __iter__ but since next() no longer exists it won't behave as intended when using an Iterator. (Looking at the docs, I also see that Python 3 iterators should implement a__next__ method instead of the next method used in Python 2.)

What is the desired scope of this refactor?

If it's mainly to make makeclusters() more easily understood, then this is on the right track, we just need to have a __next()__ method that behaves like next() did previously.

However, if it's so DataClusters no longer implements the iterator protocol (which I had assumed in my Issues #64 comments), then further changes are necessary. I regret not mentioning some of these originally, and not noticing others until now.

  • The __iter__ method of DataClusters should be removed
  • All reference to the StopIteration exception should be removed from cluster_next_point() and a different method used to control when iteration stops. (My initial thought would be to have the function return True if more points remain and False if no points remain or the object is in an invalid state.)
  • The main extraction loop would need to be altered. (For example, if cluster_next_point() returns True or False, something like while dclusters.cluster_next_point(): should work, although this is a bit more fragile than the iterator approach.)
  • Likely the step variable should be removed in favor of using dclusters only.
  • The comment in extract_single() about DataClusters being an iterator should be modified.

Copy link
Contributor

@sbillinge sbillinge left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this might be a good place to "try out" the py3 refactor.

@stevenhua0320 step 1 would be to write a unit test for the behavior that is breaking. Then we can think about what code would satisfy that test that uses built-in iterators? Worth a try?

@sbillinge sbillinge merged commit 3773bcf into diffpy:Cookie Aug 16, 2024
3 checks passed
@stevenhua0320
Copy link
Contributor Author

Simon could you revert this merged commit right now? Since Luke said in the comment that this commit might cause breaking changes, I'm not sure right now if this would affect other files that depend on DataClusters class. For PR #75 it is just change the syntax from py2 to py3, so that is a safe refactor, and we should now use that.

stevenhua0320 added a commit to stevenhua0320/diffpy.srmise that referenced this pull request Aug 16, 2024
sbillinge pushed a commit that referenced this pull request Aug 16, 2024
sbillinge added a commit that referenced this pull request Sep 4, 2024
* Lint check & fix to python3 format (#18)

* lint check and change files from python2 to python3

* pre-commit check for these files

* lint check & change to python3 & pre-commit check (#19)

* lint check & change to python3 & pre-commit check

* [pre-commit.ci] auto fixes from pre-commit hooks

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* lint check and fix print and exception python2 issue (#20)

* lint check and fix python2 print and exception issues (#21)

* lint check and fix python2 print and exception issues

* [pre-commit.ci] auto fixes from pre-commit hooks

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* finish parenthesizing print statements (#24)

* finish parenthesizing print statements

* [pre-commit.ci] auto fixes from pre-commit hooks

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* fix too many leading #, import modules, and unused var (#29)

* requirements (#30)

* fix import module not used & string check (#25)

* fix too many leading "#" in string block (#26)

* lint check, remove unused import modules & remove too many "#". (#27)

* remove unused modules, ambiguous variable name (#28)

* cleaning (#31)

* requirements

* clean out __init__

* replace ###

* ins not none in modelevaluators base

* Copyright (#32)

* requirements

* basefunction

* all the copyright statements

* lint check, fix break import modules, remove unused import modules, remove some # (#33)

* fix break import modules, remove unused import modules, fix docstring length (#34)

* fix formatting issue and typo in copyright (#35)

* clean out inits (#38)

* clean out inits

* [pre-commit.ci] auto fixes from pre-commit hooks

* dataclusters.py, modelevaluators/aicc and modelparts.py

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* peakextraction.py and init (#40)

* move untrack doc and requirement files (#41)

* move untrack doc and requirement files

* add requirement in run.txt

* [pre-commit.ci] auto fixes from pre-commit hooks

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* add pyproject.toml (#42)

* add pyproject.toml

* [pre-commit.ci] auto fixes from pre-commit hooks

* update classifiers pyproject.toml

* Delete setup.py

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* move diffpy files to src dir (#44)

* move diffpy files to src dir

* [pre-commit.ci] auto fixes from pre-commit hooks

* add Luke to authors

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* LICENSE (#45)

* add two LICENSE.rst files into cookiecutter

* fix LICENSE.rst and LICENSE_PDFgui.rst with correct references and year

* resolve pdfdataset.py conflict

---------

Co-authored-by: Simon Billinge <sbillinge@users.noreply.github.com>

* add untrack files and add cookiecut.rst news (#46)

* add untrack files and add cookiecut.rst news

* delete README.txt

* fix py2 -> py3, fix broken import, remove deprecation warning (#47)

* fix py2 -> py3, move deprecation warning

* fix search & split in binary files

* fix broken import, remove deprecated pkg_resource (#50)

* change import path to make it work. (#48)

* fix import modules, py2->py3 (#49)

* fix broken import in doc, change README to rst file. (#51)

* fix broken import in doc, change README to rst file.

* fix os getcwd method

* fix p2 to p3 (#52)

* add test for dataclusters (#54)

* add test for dataclusters

* define eq method in dataclusters.py

* change parametrization form

* add one more case and change reference name to actual

* delete comment

* add two more tests for DataClusters class function.

* change in docstring for clearer explanation for clear method, remove duplicated case for testing behavior, remove other tests.

* change clear method docstring into numpydoc format. Delete dtype for numpy array.

* remove block

* Make edition to condition on res, refactor for setdata to make behavior of the test passed.

* change condition on res

* add condition on x and res are incompatible, update test.

* revert change in setdata method.

* Eq tests (#59)

* remove diffpy/srmise tree

* test for eq

* add attributes in eq method (#60)

* Add set data test cases (#61)

* add test cases to test files and make edition to make sure the behavior of the test pass.

* [pre-commit.ci] auto fixes from pre-commit hooks

* change case in test__eq__ to be compatible with the behavior of setdata

* delete text and redundant tests

* tweaking error message in DataClusters

* [pre-commit.ci] auto fixes from pre-commit hooks

* update test for checking implicit attributes for setdata function

* [pre-commit.ci] auto fixes from pre-commit hooks

* update test for setdata function

* update setdata test to right format.

* update to constructor test & make setdata clear function private

* final tweaks to tests by Simon

* fix actual_attribute typo

* final refactor of actual_attr

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Simon Billinge <sbillinge@users.noreply.github.com>

* fix arbitrary.py to numpydoc format (#68)

* fix arbitrary.py to numpydoc format

* pre-commit fix

* change start sentence to 'The'

* print things correctly (#71)

* print things correctly

* change to f string

* reduce print to one line

* change createpeak to actualize function (#72)

* fix import and counting to make it work (#74)

* refactor makeclusters to make it work (#73)

* deprecation remove (#78)

* deprecation remove

* fix to right behavior

* Revert "refactor makeclusters to make it work (#73)" (#79)

This reverts commit 3773bcf.

* try out py2 before py3 refactor to make sure correct workflow (#75)

* fix false counting and numpy to int (#80)

* fix false counting and numpy to int

* [pre-commit.ci] auto fixes from pre-commit hooks

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* numpydoc edition (#81)

* change peakextraction function to numpydoc

* pre-commit run

* remove unused import

* numpydoc build (#82)

* numpydoc build on peakstability (#83)

* numpydoc build for ModelCluster (#85)

* numpydoc build for multimodelselection.py (#87)

* numpydoc documentation build for ModelCluster class (#86)

* numpydoc build for pdfdataset (#88)

* numpydoc build for pdfpeakextraction.py (#89)

* numpydoc build for gaussianoverr.py (#91)

* numpydoc build for gaussianoverr.py

* [pre-commit.ci] auto fixes from pre-commit hooks

* fix pre-commit

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* terminationripples.py numpydoc build (#92)

* numpydoc build for gaussian.py (#90)

* numpydoc build for gaussian.py

* [pre-commit.ci] auto fixes from pre-commit hooks

* pre-commit fix

* update for FWHM and maxwidth

* update for starting sentence

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* numpydoc build for base.py (#95)

* numpydoc build for polynomial.py (#97)

* numpydoc build for fromsequence.py (#99)

* numpydoc build for nanospherical.py (#98)

* numpydoc build for base.py in Baseline class (#96)

* numpydoc build for base.py

* [pre-commit.ci] auto fixes from pre-commit hooks

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* numpydoc build for aic.py (#93)

* numpydoc build for aicc.py (#94)

* numpydoc build for ModelCovariance (#84)

* numpydoc build for ModelCovariance

* update format type and fix indentation issue

* numpydoc build for modelparts.py (#100)

* numpydoc build for modelparts.py

* [pre-commit.ci] auto fixes from pre-commit hooks

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* numpydoc build for basefunction.py (#101)

* api workflow build for diffpy.srmise (#102)

* api workflow build for diffpy.srmise

* [pre-commit.ci] auto fixes from pre-commit hooks

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* add changed news (#103)

---------

Co-authored-by: Rundong Hua <157993340+stevenhua0320@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants