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

Add robustica method (internal PR review) #2

Closed
wants to merge 14 commits into from
Closed

Conversation

Lestropie
Copy link
Collaborator

@Lestropie Lestropie commented Aug 28, 2023

@BahmanTahayori:

There's a few things going on here. I've reverted a bunch of changes that were made, but rather than walking through the reversions I'll focus on what is.

The main branch on this fork has been reverted such that it no longer includes any commits made by yourself. Its tip currently points at 966a262.

New branch, add_robustica, contains only one commit, f4eaa3e. That one commit contains the sum total of all of your intended code changes. You can hopefully see from GitHub that that commit is authored by yourself, but committed by me; this is entirely faithful to the process that has happened, but in terms of software contribution tracking statistics it goes entirely to you.

This PR shows the proposed differences involved in merging the add_robustica branch from your fork into the main branch of your fork.

The plan is as follows:

  1. We together make further changes to the add_robustica branch on your fork. These can be commits by either of us, based on discussion from either of us (or indeed others).
  2. We close this PR without merging.
    Note that I'm explicitly making this a draft Pull Request to reflect the fact that it's not intended for merging.
  3. We open a new PR, over at https://github.com/ME-ICA/tedana, where we propose merging the contents of the add_robustica branch on your fork into the main branch of the ME-ICA central version of TEDANA.

  • Remove trailing whitespace
    (the GitHub diff viewer doesn't show these, but if you run git show HEAD on the current add_robustica branch, it will highlight such lines; I prefer to configure my code editor to delete these lines upon file save)
  • Remove code comments that are personal notes
  • I'll make a bunch of other comments that I'll attach to the code rather than writing here; bear in mind these will be based on looking at the diff and my experience with other software, not on knowledge of the TEDANA code base.


LGR = logging.getLogger("GENERAL")
RepLGR = logging.getLogger("REPORT")


def tedica(data, n_components, fixed_seed, maxit=500, maxrestart=10):
def tedica(data, n_components, fixed_seed, ica_method="robustica", n_robust_runs=30, maxit=500, maxrestart=10): ####BTBTBTB
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

This is something I'd leave up to the TEDANA maintainers, but I'll lay the seed of the idea with you.
There's a large number of function keyword arguments here, and many look to be incompatible with one another. What might be a better long term solution would be to have a class that is responsible for storing an ICA configuration with respect to method, seeding, repeats, etc.. That class would have interface functions that would ensure that the configuration is always valid. An instance of that class could then be passed around the code.

Copy link
Owner

Choose a reason for hiding this comment

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

I agree with you and as you said we should leave it to the tedana team.

@@ -50,6 +53,51 @@ def tedica(data, n_components, fixed_seed, maxit=500, maxrestart=10):
"decompose the dimensionally reduced dataset."
)

if ica_method=='robustica':
mmix, Iq = r_ica(data, n_components, n_robust_runs, maxit)
fixed_seed=-99999
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

I presume the intention here is that if robust ICA is used, variable "fixed_seed" is meaningless. However the value "-99999" is not necessarily meaningless; it's an entirely meaningful integer value, and it's entirely possible that it could be used to seed an RNG depending on the API. It is more Pythonic to set the value of something that should not be used to None.

Copy link
Owner

Choose a reason for hiding this comment

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

This issue is fixed now as robustica is updated so that it achieves reproducible result with a seed.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

  • Should post hyperlink to robustica issue describing resolution of the issue.
  • I think here you're saying "the issue" in reference to the failure of robustica to honour a fixed seed. However the context of this specific conversation is inclusion of the "fixed_seed=-99999" line. So the response should better communicate what has changed in response to that comment.

"set to robustica."

),
##choices=range(2,100),
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Delete

Copy link
Owner

Choose a reason for hiding this comment

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

The space has been removed.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

This comment was targeting the commented line of code. While this happens all the time when evaluating possible code, such should not appear once you get to the point of proposing upstream changes.

@Lestropie
Copy link
Collaborator Author

  • Unit testing: I noticed when going through their code base that they had some reasonably simple tests that process data with different numbers of echoes. It may be necessary to modify these tests. For instance:

    • For testing processing data with different numbers of echoes, ensure that fastica rather than robustica is used.
    • Add a new test that ensures that robustica works; perhaps with a smaller number of runs.
  • The fact that it is being proposed that robustica become the default is quite consequential.

    • At the very least, it would be necessary to make some modification to the documentation to address the fact that, for the first software version including this change, execution time will be drastically longer.
    • The wider software maintenance team will want evidence that that increase in processing time is worthwhile. Note that this is not necessarily the same as the primary evidence generated for the publication: while that may be our ongoing recommendation, it is predicated on other modifications to one's processing pipeline, and the tedana team will only be interested in what is the most sensible default behaviour for the majority of their existing users. So they will want to see similar data but where the only change is the introduction of robustica, absent any PCA alterations.

@Lestropie
Copy link
Collaborator Author

  • Add robustica to list of dependencies for miniconda environment suggested in README.md
    (These should all perhaps be a requirements.txt file?)

@BahmanTahayori
Copy link
Owner

Thanks for all your comments @Lestropie. Very helpful.

I have also added a test_integrity_robustica.py to the tests folder for testing robustica method.

When running the tests provided by the tedena team, there is one failure which is caused by naming. It is not from our changes and I think they are fixing it.

Please let me know if you have further comments. Thank you very much in advance.

)
break

mmix = ica.mixing_
mmix = stats.zscore(mmix, axis=0)
return mmix, fixed_seed
return mmix, fixed_seed
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

GitHub shows a red circled dash at the end of some files. This indicates that the file does not contain a newline at the end. The final non-empty line of the file should contain a newline, but there should be no empty lines beyond that.

@@ -0,0 +1,667 @@
"""Integration tests for "real" data."""
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Fix space in file path.

"""

tedana_path = os.path.dirname(tedana_cli.__file__)
base_data_path = os.path.abspath(os.path.join(tedana_path, "../../.testing_data_cache"))
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Throughout much of the subsequent code, do not use "/" / "../" for generating filesystem paths. Use os.path.join(), os.pardir and os.path.normpath().

return test_data_path, osf_id


def download_test_data(osf_id, test_data_path):
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Are these data identical to those used in existing TEDANA tests for evaluating with use of FastICA? If so, it would be preferable if executing either FastICA or RobustICA tests would download the test data, but executing both tests would download those data only once.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Addition: Even if this turns out to be the current behaviour based on the subsequent code, it is also the case that the code responsible for doing so should appear only once, rather than being duplicated across the FastICA and RobustICA tests.

osf_filedate = metadata["dates"][-1]["date"]

# File the file with the most recent date for comparision with
# the lsst updated date for the osf file
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Spelling

Comment on lines +288 to +289
if os.path.exists(out_dir):
shutil.rmtree(out_dir)
Copy link
Collaborator Author

@Lestropie Lestropie Nov 16, 2023

Choose a reason for hiding this comment

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

I'm guessing that this is a duplication of existing TEDANA code, in which case the greater fault is said duplication rather than the content of the code itself. But worth mentioning anyway since I'm doing a code review and I see code.

This snippet introduces a race condition whereby if some other process deletes that directory in between the existence test and the deletion, the command will terminate. Better practise in Python is to do:

try:
    shutil.rmtree(out_dir)
except FileNotFoundError:
    pass

Or:

shutil.rmtree(out_dir, ignore_errors=True)

)


def test_integration_t2smap(skip_integration):
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

This is one of possibly multiple examples where it seems to me that the RobustICA-relevant file includes code that is not specific to RobustICA. It might be that I don't fully see the code path of how the tests are done. But I would expect that in the addition of RobustICA, there would be addition of tests to evaluate exclusively the new RobustICA features, rather than a duplicate "test everything" that includes things not relevant to RobustICA.

Comment on lines 193 to 194
"reproducible ICA results (fastica/robustica). Set to -1 for "
"varying results across ICA (fastica/robustica) calls. "
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

This is a bit too terse to be useful. If intent is something like "This applies to both fastica and robustica", say so more verbosely.

@@ -321,10 +353,12 @@ def tedana_workflow(
fittype="loglin",
combmode="t2s",
tree="kundu",
ica_method=DEFAULT_ICA_METHOD,
n_robust_runs=DEFAULT_N_ROBUST_RUNS,
tedpca="aic",
fixed_seed=42,
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

This magic number also appears in multiple locations, so should be defined as a const.

@Lestropie
Copy link
Collaborator Author

I'll need to do some more refactoring.

  • f2cdb4e adds files in .idea/ that shouldn't be there; while it's possible to add new commits that erase them, it would be preferable for them to not appear in the history at all.
  • ac4d008 adds merge conflict flags that shouldn't appear in the history.
  • 41354cb needs a better commit message.

@BahmanTahayori
Copy link
Owner

Thanks for your comments, @Lestropie . Will consider the above points and will get back to you. Thanks.

BahmanTahayori and others added 9 commits November 29, 2023 13:48
Co-authored-by: Robert Smith <robert.smith@florey.edu.au>
Co-authored-by: Robert Smith <robert.smith@florey.edu.au>
Co-authored-by: Robert Smith <robert.smith@florey.edu.au>
Co-authored-by: Robert Smith <robert.smith@florey.edu.au>
Co-authored-by: Robert Smith <robert.smith@florey.edu.au>
@@ -67,7 +67,7 @@ def tedica(

ica_method = ica_method.lower()

if ica_method == "robustica":
if ica_method == "robustica": ##The issue with fixed seed in robustica was resolved, see https://github.com/CRG-CNAG/robustica/issues/3
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

I know I mentioned that there should be some kind of reference to the resolution of the fixed seed in robustica issue, but this doesn't work. If you look at the code naive to this history, it's a very odd code comment that seemingly bears no relevance to the surrounding code.

What I was advocating was something like, for instance, if it was the case that you perhaps made some code change where previously you were forbidding use of a fixed seed with robustica but it was now permitted, perhaps with an increment to the requisite robustica version number, then the commit making that change should include in its commit message a description of and hyperlink to that upstream change.

@Lestropie
Copy link
Collaborator Author

One thing of note here is that in cases where I can re-use your commits in some way, and therefore the original authorship is retained, the author description is "Circle tahayori@gmail.com". It would be better to set git up on your local system so that your commits are attributed to your name just as they are to your email.

Lestropie added a commit that referenced this pull request Dec 5, 2023
From: #2.

Co-authored-by: Robert E. Smith <robert.smith@florey.edu.au>
@Lestropie
Copy link
Collaborator Author

Superseded by #3.

@Lestropie Lestropie closed this Dec 13, 2023
handwerkerd added a commit to ME-ICA/tedana that referenced this pull request Sep 23, 2024
…sults (#1013)

* Add robustica method

* Incorporation of major comments regarding robustica addition

Manual modification of commit f2cdb4e to remove unwanted file additions.

* Add robustica 0.1.3 to dependency list

Cherry-pick of 41354cb.

* Multiple fixes to RobustICA addition from code review

From: BahmanTahayori#2.

Co-authored-by: Robert E. Smith <robert.smith@florey.edu.au>

* Specify magic number fixed seed of 42 as a constant

Cherry-pick of da1b128 (with modification).

* Updated

* Robustica Updates

* Incorporating the third round of Robert E. Smith's comments

* Enhance the "ica_method" description suggested by D. Handwerker

Co-authored-by: Dan Handwerker <7406227+handwerkerd@users.noreply.github.com>

* Enhancing the "n_robust_runs" description suggested by D. Handwerkerd

Co-authored-by: Dan Handwerker <7406227+handwerkerd@users.noreply.github.com>

* RobustICA: Restructure code loop over robust methods (#4)

* RobustICA: Restructure code loop over robust methods

* Addressing the issue with try/except

---------

Co-authored-by: Bahman <tahayori@gmail.com>

* Applied suggested changes

In this commit, some of the comments from Daniel Handwerker and Robert
Smith were incorporated.

* Incorporating more comments

* Fixing the problem of argument parser for n_robust_runs.

* Removing unnecessary tests from the test_integration. There are 3
  tests for echo as before, but the ica_method is robustica for five and
three echos and fatsica for the four echo test.

* Adding already requested changes

* fixed failing tests

* updated documentation in faq.rst

* more documentation changes

* Update docs/faq.rst

Co-authored-by: Robert Smith <robert.smith@florey.edu.au>

* Update docs/faq.rst

Co-authored-by: Robert Smith <robert.smith@florey.edu.au>

* Aligning robustICA with current Main + (#5)

* Limit current adaptive mask method to brain mask (#1060)

* Limit adaptive mask calculation to brain mask.

Limit adaptive mask calculation to brain mask.

Expand on logic of first adaptive mask method.

Update tedana/utils.py

Improve docstring.

Update test.

Add decreasing-signal-based adaptive mask.

Keep removing.

Co-Authored-By: Dan Handwerker <7406227+handwerkerd@users.noreply.github.com>

* Use `compute_epi_mask` in t2smap workflow.

* Try fixing the tests.

* Fix make_adaptive_mask.

* Update test_utils.py

* Update test_utils.py

* Improve docstring.

* Update utils.py

* Update test_utils.py

* Revert "Update test_utils.py"

This reverts commit 259b002.

* Don't take absolute value of echo means.

* Log echo-wise thresholds in adaptive mask.

* Add comment about non-zero voxels.

* Update utils.py

* Update test_utils.py

* Update test_utils.py

* Update test_utils.py

* Log the thresholds again.

* Address review.

* Fix test.

---------

Co-authored-by: Dan Handwerker <7406227+handwerkerd@users.noreply.github.com>

* Update nilearn requirement from <=0.10.3,>=0.7 to >=0.7,<=0.10.4 (#1077)

* Add adaptive mask plot to report (#1073)

* Update scikit-learn requirement (#1075)

Updates the requirements on [scikit-learn](https://github.com/scikit-learn/scikit-learn) to permit the latest version.
- [Release notes](https://github.com/scikit-learn/scikit-learn/releases)
- [Commits](scikit-learn/scikit-learn@0.21.0...1.4.2)

---
updated-dependencies:
- dependency-name: scikit-learn
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Update pandas requirement from <=2.2.1,>=2.0 to >=2.0,<=2.2.2 (#1076)

Updates the requirements on [pandas](https://github.com/pandas-dev/pandas) to permit the latest version.
- [Release notes](https://github.com/pandas-dev/pandas/releases)
- [Commits](pandas-dev/pandas@v2.0.0...v2.2.2)

---
updated-dependencies:
- dependency-name: pandas
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Update bokeh requirement from <=3.4.0,>=1.0.0 to >=1.0.0,<=3.4.1 (#1078)

Updates the requirements on [bokeh](https://github.com/bokeh/bokeh) to permit the latest version.
- [Changelog](https://github.com/bokeh/bokeh/blob/branch-3.5/docs/CHANGELOG)
- [Commits](bokeh/bokeh@1.0.0...3.4.1)

---
updated-dependencies:
- dependency-name: bokeh
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Load user-defined mask as expected by plot_adaptive_mask (#1079)

* DOC desc-optcomDenoised -> desc-denoised (#1080)

* docs: add mvdoc as a contributor for code, bug, and doc (#1082)

* docs: update README.md

* docs: update .all-contributorsrc

---------

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>

* Identify the last good echo in adaptive mask instead of sum of good echoes (#1061)

* Limit adaptive mask calculation to brain mask.

Limit adaptive mask calculation to brain mask.

Expand on logic of first adaptive mask method.

Update tedana/utils.py

Improve docstring.

Update test.

Add decreasing-signal-based adaptive mask.

Keep removing.

Co-Authored-By: Dan Handwerker <7406227+handwerkerd@users.noreply.github.com>

* Use `compute_epi_mask` in t2smap workflow.

* Try fixing the tests.

* Fix make_adaptive_mask.

* Update test_utils.py

* Update test_utils.py

* Improve docstring.

* Identify the last good echo instead of sum.

Improve docstring.

Update test_utils.py

Update test_utils.py

Fix make_adaptive_mask.

Try fixing the tests.

Use `compute_epi_mask` in t2smap workflow.

Limit adaptive mask calculation to brain mask.

Limit adaptive mask calculation to brain mask.

Expand on logic of first adaptive mask method.

Update tedana/utils.py

Improve docstring.

Update test.

Add decreasing-signal-based adaptive mask.

Keep removing.

Co-Authored-By: Dan Handwerker <7406227+handwerkerd@users.noreply.github.com>

* Fix.

* Update utils.py

* Update utils.py

* Try fixing.

* Update utils.py

* Update utils.py

* add checks

* Just loop over voxels.

* Update utils.py

* Update utils.py

* Update test_utils.py

* Revert "Update test_utils.py"

This reverts commit 259b002.

* Update test_utils.py

* Update test_utils.py

* Remove checks.

* Don't take absolute value of echo means.

* Log echo-wise thresholds in adaptive mask.

* Add comment about non-zero voxels.

* Update utils.py

* Update utils.py

* Update test_utils.py

* Update test_utils.py

* Update test_utils.py

* Log the thresholds again.

* Update test_utils.py

* Update test_utils.py

* Update test_utils.py

* Add simulated data to adaptive mask test.

* Clean up the tests.

* Add value that tests the base mask.

* Remove print in test.

* Update tedana/utils.py

Co-authored-by: Dan Handwerker <7406227+handwerkerd@users.noreply.github.com>

* Update tedana/utils.py

Co-authored-by: Dan Handwerker <7406227+handwerkerd@users.noreply.github.com>

---------

Co-authored-by: Dan Handwerker <7406227+handwerkerd@users.noreply.github.com>

* Output RMSE map and time series for decay model fit (#1044)

* Draft function to calculate decay model fit.

* Calculate root mean squared error instead.

* Incorporate metrics.

* Output RMSE results.

* Output results in tedana.

* Hopefully fix things.

* Update decay.py

* Try improving performance.

* Update decay.py

* Fix again.

* Use tqdm.

* Update decay.py

* Update decay.py

* Update decay.py

* Update expected outputs.

* Add figures.

* Update outputs.

* Include global signal in confounds file.

* Update fiu_four_echo_outputs.txt

* Rename function.

* Rename function.

* Update tedana.py

* Update tedana/decay.py

Co-authored-by: Dan Handwerker <7406227+handwerkerd@users.noreply.github.com>

* Update decay.py

* Update decay.py

* Whoops.

* Apply suggestions from code review

Co-authored-by: Dan Handwerker <7406227+handwerkerd@users.noreply.github.com>

* Fix things maybe.

* Fix things.

* Update decay.py

* Remove any files that are built through appending.

* Update outputs.

* Add section on plots to docs.

* Fix the description.

* Update docs/outputs.rst

Co-authored-by: Dan Handwerker <7406227+handwerkerd@users.noreply.github.com>

* Update docs/outputs.rst

* Fix docstring.

---------

Co-authored-by: Dan Handwerker <7406227+handwerkerd@users.noreply.github.com>

* minimum nilearn 0.10.3 (#1094)

* Use nearest-neighbors interpolation in `plot_component` (#1098)

* Use nearest-neighbors interpolation in plot_stat_map.

* Only use NN interp for component maps.

* Update scipy requirement from <=1.13.0,>=1.2.0 to >=1.2.0,<=1.13.1 (#1100)

Updates the requirements on [scipy](https://github.com/scipy/scipy) to permit the latest version.
- [Release notes](https://github.com/scipy/scipy/releases)
- [Commits](scipy/scipy@v1.2.0...v1.13.1)

---
updated-dependencies:
- dependency-name: scipy
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Update scikit-learn requirement from <=1.4.2,>=0.21 to >=0.21,<=1.5.0 (#1101)

Updates the requirements on [scikit-learn](https://github.com/scikit-learn/scikit-learn) to permit the latest version.
- [Release notes](https://github.com/scikit-learn/scikit-learn/releases)
- [Commits](scikit-learn/scikit-learn@0.21.0...1.5.0)

---
updated-dependencies:
- dependency-name: scikit-learn
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Update numpy requirement from <=1.26.4,>=1.16 to >=1.16,<=2.0.0 (#1104)

* Update numpy requirement from <=1.26.4,>=1.16 to >=1.16,<=2.0.0

Updates the requirements on [numpy](https://github.com/numpy/numpy) to permit the latest version.
- [Release notes](https://github.com/numpy/numpy/releases)
- [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst)
- [Commits](numpy/numpy@v1.16.0...v2.0.0)

---
updated-dependencies:
- dependency-name: numpy
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

* Use np.nan instead of np.NaN

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Taylor Salo <salot@pennmedicine.upenn.edu>

* Filter out non-diagonal affine warning (#1103)

* Filter out non-diagonal affine warning.

* Fix warning capture.

* Update tedana/reporting/static_figures.py

Co-authored-by: Dan Handwerker <7406227+handwerkerd@users.noreply.github.com>

* Update static_figures.py

---------

Co-authored-by: Dan Handwerker <7406227+handwerkerd@users.noreply.github.com>

* Update bokeh requirement from <=3.4.1,>=1.0.0 to <=3.5.0,>=3.5.0 (#1109)

* Update bokeh requirement from <=3.4.1,>=1.0.0 to <=3.5.0,>=3.5.0

Updates the requirements on [bokeh](https://github.com/bokeh/bokeh) to permit the latest version.
- [Changelog](https://github.com/bokeh/bokeh/blob/branch-3.6/docs/CHANGELOG)
- [Commits](bokeh/bokeh@1.0.0...3.5.0)

---
updated-dependencies:
- dependency-name: bokeh
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

* Update pyproject.toml

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Taylor Salo <salot@pennmedicine.upenn.edu>

* Update scikit-learn requirement from <=1.5.0,>=0.21 to <=1.5.1,>=1.5.1 (#1108)

* Update scikit-learn requirement from <=1.5.0,>=0.21 to <=1.5.1,>=1.5.1

Updates the requirements on [scikit-learn](https://github.com/scikit-learn/scikit-learn) to permit the latest version.
- [Release notes](https://github.com/scikit-learn/scikit-learn/releases)
- [Commits](scikit-learn/scikit-learn@0.21.0...1.5.1)

---
updated-dependencies:
- dependency-name: scikit-learn
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

* Update pyproject.toml to restore minimum version of scikit-learn

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Dan Handwerker <7406227+handwerkerd@users.noreply.github.com>

* Update scipy requirement from <=1.13.1,>=1.2.0 to <=1.14.0,>=1.14.0 (#1106)

* Update scipy requirement from <=1.13.1,>=1.2.0 to <=1.14.0,>=1.14.0

Updates the requirements on [scipy](https://github.com/scipy/scipy) to permit the latest version.
- [Release notes](https://github.com/scipy/scipy/releases)
- [Commits](scipy/scipy@v1.2.0...v1.14.0)

---
updated-dependencies:
- dependency-name: scipy
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

* Update pyproject.toml to retain minimum version of scipy

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Dan Handwerker <7406227+handwerkerd@users.noreply.github.com>
Co-authored-by: Eneko Uruñuela <e.urunuela@icloud.com>

* Update numpy requirement from <=2.0.0,>=1.16 to >=1.16,<=2.0.1 (#1112)

Updates the requirements on [numpy](https://github.com/numpy/numpy) to permit the latest version.
- [Release notes](https://github.com/numpy/numpy/releases)
- [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst)
- [Commits](numpy/numpy@v1.16.0...v2.0.1)

---
updated-dependencies:
- dependency-name: numpy
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Cleaning up installation instructions (#1113)

* install instructions

* Update docs/installation.rst

Co-authored-by: Taylor Salo <tsalo90@gmail.com>

* Update docs/installation.rst

Co-authored-by: Eneko Uruñuela <e.urunuela@icloud.com>

---------

Co-authored-by: Taylor Salo <tsalo90@gmail.com>
Co-authored-by: Eneko Uruñuela <e.urunuela@icloud.com>

* Update bokeh requirement from <=3.5.0,>=1.0.0 to >=1.0.0,<=3.5.1 (#1116)

Updates the requirements on [bokeh](https://github.com/bokeh/bokeh) to permit the latest version.
- [Changelog](https://github.com/bokeh/bokeh/blob/3.5.1/docs/CHANGELOG)
- [Commits](bokeh/bokeh@1.0.0...3.5.1)

---
updated-dependencies:
- dependency-name: bokeh
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Update list of multi-echo datasets (#1115)

* Generate metrics from external regressors using F stats (#1064)

* Get required metrics from decision tree.

* Continue changes.

* More updates.

* Store necessary_metrics as a list.

* Update selection_nodes.py

* Update selection_utils.py

* Update across the package.

* Keep updating.

* Update tedana.py

* Add extra metrics to list.

* Update ica_reclassify.py

* Draft metric-based regressor correlations.

* Fix typo.

* Work on trees.

* Expand regular expressions in trees.

* Fix up the expansion.

* Really fix it though.

* Fix style issue.

* Added external regress integration test

* Got intregration test with external regressors working

* Added F tests and options

* added corr_no_detrend.json

* updated names and reporting

* Run black.

* Address style issues.

* Try fixing test bugs.

* Update test_component_selector.py

* Update component_selector.py

* Use component table directly in selectcomps2use.

* Fix.

* Include generated metrics in necessary metrics.

* Update component_selector.py

* responding to feedback from tsalo

* Update component_selector.py

* Update test_component_selector.py

* fixed some testing failures

* fixed test_check_null_succeeds

* fixed ica_reclassify bug and selector_properties test

* ComponentSelector initialized before loading data

* fixed docstrings

* updated building decision tree docs

* using external regressors and most tests passing

* removed corr added tasks

* fit_model moved to stats

* removed and cleaned up external_regressors_config option

* Added task regressors and some tests. Now alll in decision tree

* cleaning up decision tree json files

* removed mot12_csf.json changed task to signal

* fixed tests with task_keep signal

* Update tedana/metrics/external.py

Co-authored-by: Taylor Salo <salot@pennmedicine.upenn.edu>

* Update tedana/metrics/_utils.py

Co-authored-by: Taylor Salo <salot@pennmedicine.upenn.edu>

* Update tedana/metrics/collect.py

Co-authored-by: Taylor Salo <salot@pennmedicine.upenn.edu>

* Update tedana/metrics/external.py

Co-authored-by: Taylor Salo <salot@pennmedicine.upenn.edu>

* Update tedana/metrics/external.py

Co-authored-by: Taylor Salo <salot@pennmedicine.upenn.edu>

* Responding to review comments

* reworded docstring

* Added type hints to external.py

* fixed external.py type hints

* type hints to _utils collect and component_selector

* type hints and doc improvements in selection_utils

* no expand_node recursion

* removed expand_nodes expand_node expand_dict

* docstring lines break on punctuation

* updating external tests and docs

* moved test data downloading to tests.utils.py and started test for fit_regressors

* fixed bug where task regressors retained in partial models

* matched testing external regressors to included mixing and fixed bugs

* Made single function for detrending regressors

* added tests for external fit_regressors and fix_mixing_to_regressors

* Full tests in test_external_metrics.py

* adding tests

* fixed extern regress validation warnings and added tests

* sorting set values for test outputs

* added to test_metrics

* Added docs to building_decision_trees.rst

* Added motion task decision tree flow chart

* made recommended change to external_regressor_config

* Finished documentation and renamed demo decision trees

* added link to example external regressors tsv file

* Apply suggestions from code review

Fixed nuissance typos

Co-authored-by: Taylor Salo <salot@pennmedicine.upenn.edu>

* Minor documentation edits

---------

Co-authored-by: Taylor Salo <tsalo006@fiu.edu>
Co-authored-by: Taylor Salo <salot@pennmedicine.upenn.edu>
Co-authored-by: Neha Reddy <nreddy@northwestern.edu>

* Link to the open-multi-echo-data website (#1117)

* Update multi-echo.rst

* Update multi-echo.rst

* Refactor `metrics.dependence` module (#1088)

* Add type hints to metric functions.

* Use keyword arguments.

* Update tests.

* Update dependence.py

* Update collect.py

* Fix other stuff.

* documentation and resource updates (#1114)

* documentation and resource updates

* Fixed citation numbering and updated posters

---------

Co-authored-by: Neha Reddy <nreddy@northwestern.edu>

* Adding already requested changes

* fixed failing tests

* updated documentation in faq.rst

* more documentation changes

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Taylor Salo <salot@pennmedicine.upenn.edu>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Matteo Visconti di Oleggio Castello <mvdoc@users.noreply.github.com>
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
Co-authored-by: Eneko Uruñuela <e.urunuela@icloud.com>
Co-authored-by: Taylor Salo <tsalo90@gmail.com>
Co-authored-by: Taylor Salo <tsalo006@fiu.edu>
Co-authored-by: Neha Reddy <nreddy@northwestern.edu>

* align with main

* fixed ica.py docstring error

* added scikit-learn-extra to pyproject and changed ref name

* increment circleci version keys

* Removing the scikit-learn-extra dependency

* Updating pyproject.toml file

* Minor changes to make the help more readable

* Minor changes

* upgrading to robustica 0.1.4

* Update docs

Co-authored-by: Dan Handwerker <7406227+handwerkerd@users.noreply.github.com>

* updating utils.py, toml file and the docs

* minor change to utils.py

* Incorporating Eneko's comments

Co-authored-by: Eneko Uruñuela <e.urunuela@icloud.com>

* Added a warning when the clustering method is changed

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Robert E. Smith <robert.smith@florey.edu.au>
Co-authored-by: Dan Handwerker <7406227+handwerkerd@users.noreply.github.com>
Co-authored-by: handwerkerd <dan.handwerker@gmail.com>
Co-authored-by: Taylor Salo <salot@pennmedicine.upenn.edu>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Matteo Visconti di Oleggio Castello <mvdoc@users.noreply.github.com>
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
Co-authored-by: Eneko Uruñuela <e.urunuela@icloud.com>
Co-authored-by: Taylor Salo <tsalo90@gmail.com>
Co-authored-by: Taylor Salo <tsalo006@fiu.edu>
Co-authored-by: Neha Reddy <nreddy@northwestern.edu>
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.

2 participants