rapidtide 2.9.6__py3-none-any.whl → 3.1.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cloud/gmscalc-HCPYA +1 -1
- cloud/mount-and-run +2 -0
- cloud/rapidtide-HCPYA +3 -3
- rapidtide/Colortables.py +538 -38
- rapidtide/OrthoImageItem.py +1094 -51
- rapidtide/RapidtideDataset.py +1709 -114
- rapidtide/__init__.py +0 -8
- rapidtide/_version.py +4 -4
- rapidtide/calccoherence.py +242 -97
- rapidtide/calcnullsimfunc.py +240 -140
- rapidtide/calcsimfunc.py +314 -129
- rapidtide/correlate.py +1211 -389
- rapidtide/data/examples/src/testLD +56 -0
- rapidtide/data/examples/src/test_findmaxlag.py +2 -2
- rapidtide/data/examples/src/test_mlregressallt.py +32 -17
- rapidtide/data/examples/src/testalign +1 -1
- rapidtide/data/examples/src/testatlasaverage +35 -7
- rapidtide/data/examples/src/testboth +21 -0
- rapidtide/data/examples/src/testcifti +11 -0
- rapidtide/data/examples/src/testdelayvar +13 -0
- rapidtide/data/examples/src/testdlfilt +25 -0
- rapidtide/data/examples/src/testfft +35 -0
- rapidtide/data/examples/src/testfileorfloat +37 -0
- rapidtide/data/examples/src/testfmri +92 -42
- rapidtide/data/examples/src/testfuncs +3 -3
- rapidtide/data/examples/src/testglmfilt +8 -6
- rapidtide/data/examples/src/testhappy +84 -51
- rapidtide/data/examples/src/testinitdelay +19 -0
- rapidtide/data/examples/src/testmodels +33 -0
- rapidtide/data/examples/src/testnewrefine +26 -0
- rapidtide/data/examples/src/testnoiseamp +2 -2
- rapidtide/data/examples/src/testppgproc +17 -0
- rapidtide/data/examples/src/testrefineonly +22 -0
- rapidtide/data/examples/src/testretro +26 -13
- rapidtide/data/examples/src/testretrolagtcs +16 -0
- rapidtide/data/examples/src/testrolloff +11 -0
- rapidtide/data/examples/src/testsimdata +45 -28
- rapidtide/data/models/model_cnn_pytorch/loss.png +0 -0
- rapidtide/data/models/model_cnn_pytorch/loss.txt +1 -0
- rapidtide/data/models/model_cnn_pytorch/model.pth +0 -0
- rapidtide/data/models/model_cnn_pytorch/model_meta.json +68 -0
- rapidtide/data/models/model_cnn_pytorch_fulldata/loss.png +0 -0
- rapidtide/data/models/model_cnn_pytorch_fulldata/loss.txt +1 -0
- rapidtide/data/models/model_cnn_pytorch_fulldata/model.pth +0 -0
- rapidtide/data/models/model_cnn_pytorch_fulldata/model_meta.json +80 -0
- rapidtide/data/models/model_cnnbp_pytorch_fullldata/loss.png +0 -0
- rapidtide/data/models/model_cnnbp_pytorch_fullldata/loss.txt +1 -0
- rapidtide/data/models/model_cnnbp_pytorch_fullldata/model.pth +0 -0
- rapidtide/data/models/model_cnnbp_pytorch_fullldata/model_meta.json +138 -0
- rapidtide/data/models/model_cnnfft_pytorch_fulldata/loss.png +0 -0
- rapidtide/data/models/model_cnnfft_pytorch_fulldata/loss.txt +1 -0
- rapidtide/data/models/model_cnnfft_pytorch_fulldata/model.pth +0 -0
- rapidtide/data/models/model_cnnfft_pytorch_fulldata/model_meta.json +128 -0
- rapidtide/data/models/model_ppgattention_pytorch_w128_fulldata/loss.png +0 -0
- rapidtide/data/models/model_ppgattention_pytorch_w128_fulldata/loss.txt +1 -0
- rapidtide/data/models/model_ppgattention_pytorch_w128_fulldata/model.pth +0 -0
- rapidtide/data/models/model_ppgattention_pytorch_w128_fulldata/model_meta.json +49 -0
- rapidtide/data/models/model_revised_tf2/model.keras +0 -0
- rapidtide/data/models/{model_serdar → model_revised_tf2}/model_meta.json +1 -1
- rapidtide/data/models/model_serdar2_tf2/model.keras +0 -0
- rapidtide/data/models/{model_serdar2 → model_serdar2_tf2}/model_meta.json +1 -1
- rapidtide/data/models/model_serdar_tf2/model.keras +0 -0
- rapidtide/data/models/{model_revised → model_serdar_tf2}/model_meta.json +1 -1
- rapidtide/data/reference/HCP1200v2_MTT_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_binmask_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_csf_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_gray_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_graylaghist.json +7 -0
- rapidtide/data/reference/HCP1200v2_graylaghist.tsv.gz +0 -0
- rapidtide/data/reference/HCP1200v2_laghist.json +7 -0
- rapidtide/data/reference/HCP1200v2_laghist.tsv.gz +0 -0
- rapidtide/data/reference/HCP1200v2_mask_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_maxcorr_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_maxtime_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_maxwidth_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_negmask_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_timepercentile_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_white_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_whitelaghist.json +7 -0
- rapidtide/data/reference/HCP1200v2_whitelaghist.tsv.gz +0 -0
- rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1-seg2.xml +131 -0
- rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1-seg2_regions.txt +60 -0
- rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1-seg2_space-MNI152NLin6Asym_2mm.nii.gz +0 -0
- rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1_space-MNI152NLin2009cAsym_2mm.nii.gz +0 -0
- rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1_space-MNI152NLin2009cAsym_2mm_mask.nii.gz +0 -0
- rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1_space-MNI152NLin6Asym_2mm_mask.nii.gz +0 -0
- rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL2_space-MNI152NLin6Asym_2mm_mask.nii.gz +0 -0
- rapidtide/data/reference/MNI152_T1_1mm_Brain_FAST_seg.nii.gz +0 -0
- rapidtide/data/reference/MNI152_T1_1mm_Brain_Mask.nii.gz +0 -0
- rapidtide/data/reference/MNI152_T1_2mm_Brain_FAST_seg.nii.gz +0 -0
- rapidtide/data/reference/MNI152_T1_2mm_Brain_Mask.nii.gz +0 -0
- rapidtide/decorators.py +91 -0
- rapidtide/dlfilter.py +2553 -414
- rapidtide/dlfiltertorch.py +5201 -0
- rapidtide/externaltools.py +328 -13
- rapidtide/fMRIData_class.py +108 -92
- rapidtide/ffttools.py +168 -0
- rapidtide/filter.py +2704 -1462
- rapidtide/fit.py +2361 -579
- rapidtide/genericmultiproc.py +197 -0
- rapidtide/happy_supportfuncs.py +3255 -548
- rapidtide/helper_classes.py +587 -1116
- rapidtide/io.py +2569 -468
- rapidtide/linfitfiltpass.py +784 -0
- rapidtide/makelaggedtcs.py +267 -97
- rapidtide/maskutil.py +555 -25
- rapidtide/miscmath.py +835 -144
- rapidtide/multiproc.py +217 -44
- rapidtide/patchmatch.py +752 -0
- rapidtide/peakeval.py +32 -32
- rapidtide/ppgproc.py +2205 -0
- rapidtide/qualitycheck.py +353 -40
- rapidtide/refinedelay.py +854 -0
- rapidtide/refineregressor.py +939 -0
- rapidtide/resample.py +725 -204
- rapidtide/scripts/__init__.py +1 -0
- rapidtide/scripts/{adjustoffset → adjustoffset.py} +7 -2
- rapidtide/scripts/{aligntcs → aligntcs.py} +7 -2
- rapidtide/scripts/{applydlfilter → applydlfilter.py} +7 -2
- rapidtide/scripts/applyppgproc.py +28 -0
- rapidtide/scripts/{atlasaverage → atlasaverage.py} +7 -2
- rapidtide/scripts/{atlastool → atlastool.py} +7 -2
- rapidtide/scripts/{calcicc → calcicc.py} +7 -2
- rapidtide/scripts/{calctexticc → calctexticc.py} +7 -2
- rapidtide/scripts/{calcttest → calcttest.py} +7 -2
- rapidtide/scripts/{ccorrica → ccorrica.py} +7 -2
- rapidtide/scripts/delayvar.py +28 -0
- rapidtide/scripts/{diffrois → diffrois.py} +7 -2
- rapidtide/scripts/{endtidalproc → endtidalproc.py} +7 -2
- rapidtide/scripts/{fdica → fdica.py} +7 -2
- rapidtide/scripts/{filtnifti → filtnifti.py} +7 -2
- rapidtide/scripts/{filttc → filttc.py} +7 -2
- rapidtide/scripts/{fingerprint → fingerprint.py} +20 -16
- rapidtide/scripts/{fixtr → fixtr.py} +7 -2
- rapidtide/scripts/{gmscalc → gmscalc.py} +7 -2
- rapidtide/scripts/{happy → happy.py} +7 -2
- rapidtide/scripts/{happy2std → happy2std.py} +7 -2
- rapidtide/scripts/{happywarp → happywarp.py} +8 -4
- rapidtide/scripts/{histnifti → histnifti.py} +7 -2
- rapidtide/scripts/{histtc → histtc.py} +7 -2
- rapidtide/scripts/{glmfilt → linfitfilt.py} +7 -4
- rapidtide/scripts/{localflow → localflow.py} +7 -2
- rapidtide/scripts/{mergequality → mergequality.py} +7 -2
- rapidtide/scripts/{pairproc → pairproc.py} +7 -2
- rapidtide/scripts/{pairwisemergenifti → pairwisemergenifti.py} +7 -2
- rapidtide/scripts/{physiofreq → physiofreq.py} +7 -2
- rapidtide/scripts/{pixelcomp → pixelcomp.py} +7 -2
- rapidtide/scripts/{plethquality → plethquality.py} +7 -2
- rapidtide/scripts/{polyfitim → polyfitim.py} +7 -2
- rapidtide/scripts/{proj2flow → proj2flow.py} +7 -2
- rapidtide/scripts/{rankimage → rankimage.py} +7 -2
- rapidtide/scripts/{rapidtide → rapidtide.py} +7 -2
- rapidtide/scripts/{rapidtide2std → rapidtide2std.py} +7 -2
- rapidtide/scripts/{resamplenifti → resamplenifti.py} +7 -2
- rapidtide/scripts/{resampletc → resampletc.py} +7 -2
- rapidtide/scripts/retrolagtcs.py +28 -0
- rapidtide/scripts/retroregress.py +28 -0
- rapidtide/scripts/{roisummarize → roisummarize.py} +7 -2
- rapidtide/scripts/{runqualitycheck → runqualitycheck.py} +7 -2
- rapidtide/scripts/{showarbcorr → showarbcorr.py} +7 -2
- rapidtide/scripts/{showhist → showhist.py} +7 -2
- rapidtide/scripts/{showstxcorr → showstxcorr.py} +7 -2
- rapidtide/scripts/{showtc → showtc.py} +7 -2
- rapidtide/scripts/{showxcorr_legacy → showxcorr_legacy.py} +8 -8
- rapidtide/scripts/{showxcorrx → showxcorrx.py} +7 -2
- rapidtide/scripts/{showxy → showxy.py} +7 -2
- rapidtide/scripts/{simdata → simdata.py} +7 -2
- rapidtide/scripts/{spatialdecomp → spatialdecomp.py} +7 -2
- rapidtide/scripts/{spatialfit → spatialfit.py} +7 -2
- rapidtide/scripts/{spatialmi → spatialmi.py} +7 -2
- rapidtide/scripts/{spectrogram → spectrogram.py} +7 -2
- rapidtide/scripts/stupidramtricks.py +238 -0
- rapidtide/scripts/{synthASL → synthASL.py} +7 -2
- rapidtide/scripts/{tcfrom2col → tcfrom2col.py} +7 -2
- rapidtide/scripts/{tcfrom3col → tcfrom3col.py} +7 -2
- rapidtide/scripts/{temporaldecomp → temporaldecomp.py} +7 -2
- rapidtide/scripts/{testhrv → testhrv.py} +1 -1
- rapidtide/scripts/{threeD → threeD.py} +7 -2
- rapidtide/scripts/{tidepool → tidepool.py} +7 -2
- rapidtide/scripts/{variabilityizer → variabilityizer.py} +7 -2
- rapidtide/simFuncClasses.py +2113 -0
- rapidtide/simfuncfit.py +312 -108
- rapidtide/stats.py +579 -247
- rapidtide/tests/.coveragerc +27 -6
- rapidtide-2.9.6.data/scripts/fdica → rapidtide/tests/cleanposttest +4 -6
- rapidtide/tests/happycomp +9 -0
- rapidtide/tests/resethappytargets +1 -1
- rapidtide/tests/resetrapidtidetargets +1 -1
- rapidtide/tests/resettargets +1 -1
- rapidtide/tests/runlocaltest +3 -3
- rapidtide/tests/showkernels +1 -1
- rapidtide/tests/test_aliasedcorrelate.py +4 -4
- rapidtide/tests/test_aligntcs.py +1 -1
- rapidtide/tests/test_calcicc.py +1 -1
- rapidtide/tests/test_cleanregressor.py +184 -0
- rapidtide/tests/test_congrid.py +70 -81
- rapidtide/tests/test_correlate.py +1 -1
- rapidtide/tests/test_corrpass.py +4 -4
- rapidtide/tests/test_delayestimation.py +54 -59
- rapidtide/tests/test_dlfiltertorch.py +437 -0
- rapidtide/tests/test_doresample.py +2 -2
- rapidtide/tests/test_externaltools.py +69 -0
- rapidtide/tests/test_fastresampler.py +9 -5
- rapidtide/tests/test_filter.py +96 -57
- rapidtide/tests/test_findmaxlag.py +50 -19
- rapidtide/tests/test_fullrunhappy_v1.py +15 -10
- rapidtide/tests/test_fullrunhappy_v2.py +19 -13
- rapidtide/tests/test_fullrunhappy_v3.py +28 -13
- rapidtide/tests/test_fullrunhappy_v4.py +30 -11
- rapidtide/tests/test_fullrunhappy_v5.py +62 -0
- rapidtide/tests/test_fullrunrapidtide_v1.py +61 -7
- rapidtide/tests/test_fullrunrapidtide_v2.py +26 -14
- rapidtide/tests/test_fullrunrapidtide_v3.py +28 -8
- rapidtide/tests/test_fullrunrapidtide_v4.py +16 -8
- rapidtide/tests/test_fullrunrapidtide_v5.py +15 -6
- rapidtide/tests/test_fullrunrapidtide_v6.py +142 -0
- rapidtide/tests/test_fullrunrapidtide_v7.py +114 -0
- rapidtide/tests/test_fullrunrapidtide_v8.py +66 -0
- rapidtide/tests/test_getparsers.py +158 -0
- rapidtide/tests/test_io.py +59 -18
- rapidtide/tests/{test_glmpass.py → test_linfitfiltpass.py} +10 -10
- rapidtide/tests/test_mi.py +1 -1
- rapidtide/tests/test_miscmath.py +1 -1
- rapidtide/tests/test_motionregress.py +5 -5
- rapidtide/tests/test_nullcorr.py +6 -9
- rapidtide/tests/test_padvec.py +216 -0
- rapidtide/tests/test_parserfuncs.py +101 -0
- rapidtide/tests/test_phaseanalysis.py +1 -1
- rapidtide/tests/test_rapidtideparser.py +59 -53
- rapidtide/tests/test_refinedelay.py +296 -0
- rapidtide/tests/test_runmisc.py +5 -5
- rapidtide/tests/test_sharedmem.py +60 -0
- rapidtide/tests/test_simroundtrip.py +132 -0
- rapidtide/tests/test_simulate.py +1 -1
- rapidtide/tests/test_stcorrelate.py +4 -2
- rapidtide/tests/test_timeshift.py +2 -2
- rapidtide/tests/test_valtoindex.py +1 -1
- rapidtide/tests/test_zRapidtideDataset.py +5 -3
- rapidtide/tests/utils.py +10 -9
- rapidtide/tidepoolTemplate.py +88 -70
- rapidtide/tidepoolTemplate.ui +60 -46
- rapidtide/tidepoolTemplate_alt.py +88 -53
- rapidtide/tidepoolTemplate_alt.ui +62 -52
- rapidtide/tidepoolTemplate_alt_qt6.py +921 -0
- rapidtide/tidepoolTemplate_big.py +1125 -0
- rapidtide/tidepoolTemplate_big.ui +2386 -0
- rapidtide/tidepoolTemplate_big_qt6.py +1129 -0
- rapidtide/tidepoolTemplate_qt6.py +793 -0
- rapidtide/util.py +1389 -148
- rapidtide/voxelData.py +1048 -0
- rapidtide/wiener.py +138 -25
- rapidtide/wiener2.py +114 -8
- rapidtide/workflows/adjustoffset.py +107 -5
- rapidtide/workflows/aligntcs.py +86 -3
- rapidtide/workflows/applydlfilter.py +231 -89
- rapidtide/workflows/applyppgproc.py +540 -0
- rapidtide/workflows/atlasaverage.py +309 -48
- rapidtide/workflows/atlastool.py +130 -9
- rapidtide/workflows/calcSimFuncMap.py +490 -0
- rapidtide/workflows/calctexticc.py +202 -10
- rapidtide/workflows/ccorrica.py +123 -15
- rapidtide/workflows/cleanregressor.py +415 -0
- rapidtide/workflows/delayvar.py +1268 -0
- rapidtide/workflows/diffrois.py +84 -6
- rapidtide/workflows/endtidalproc.py +149 -9
- rapidtide/workflows/fdica.py +197 -17
- rapidtide/workflows/filtnifti.py +71 -4
- rapidtide/workflows/filttc.py +76 -5
- rapidtide/workflows/fitSimFuncMap.py +578 -0
- rapidtide/workflows/fixtr.py +74 -4
- rapidtide/workflows/gmscalc.py +116 -6
- rapidtide/workflows/happy.py +1242 -480
- rapidtide/workflows/happy2std.py +145 -13
- rapidtide/workflows/happy_parser.py +277 -59
- rapidtide/workflows/histnifti.py +120 -4
- rapidtide/workflows/histtc.py +85 -4
- rapidtide/workflows/{glmfilt.py → linfitfilt.py} +128 -14
- rapidtide/workflows/localflow.py +329 -29
- rapidtide/workflows/mergequality.py +80 -4
- rapidtide/workflows/niftidecomp.py +323 -19
- rapidtide/workflows/niftistats.py +178 -8
- rapidtide/workflows/pairproc.py +99 -5
- rapidtide/workflows/pairwisemergenifti.py +86 -3
- rapidtide/workflows/parser_funcs.py +1488 -56
- rapidtide/workflows/physiofreq.py +139 -12
- rapidtide/workflows/pixelcomp.py +211 -9
- rapidtide/workflows/plethquality.py +105 -23
- rapidtide/workflows/polyfitim.py +159 -19
- rapidtide/workflows/proj2flow.py +76 -3
- rapidtide/workflows/rankimage.py +115 -8
- rapidtide/workflows/rapidtide.py +1785 -1858
- rapidtide/workflows/rapidtide2std.py +101 -3
- rapidtide/workflows/rapidtide_parser.py +590 -389
- rapidtide/workflows/refineDelayMap.py +249 -0
- rapidtide/workflows/refineRegressor.py +1215 -0
- rapidtide/workflows/regressfrommaps.py +308 -0
- rapidtide/workflows/resamplenifti.py +86 -4
- rapidtide/workflows/resampletc.py +92 -4
- rapidtide/workflows/retrolagtcs.py +442 -0
- rapidtide/workflows/retroregress.py +1501 -0
- rapidtide/workflows/roisummarize.py +176 -7
- rapidtide/workflows/runqualitycheck.py +72 -7
- rapidtide/workflows/showarbcorr.py +172 -16
- rapidtide/workflows/showhist.py +87 -3
- rapidtide/workflows/showstxcorr.py +161 -4
- rapidtide/workflows/showtc.py +172 -10
- rapidtide/workflows/showxcorrx.py +250 -62
- rapidtide/workflows/showxy.py +186 -16
- rapidtide/workflows/simdata.py +418 -112
- rapidtide/workflows/spatialfit.py +83 -8
- rapidtide/workflows/spatialmi.py +252 -29
- rapidtide/workflows/spectrogram.py +306 -33
- rapidtide/workflows/synthASL.py +157 -6
- rapidtide/workflows/tcfrom2col.py +77 -3
- rapidtide/workflows/tcfrom3col.py +75 -3
- rapidtide/workflows/tidepool.py +3829 -666
- rapidtide/workflows/utils.py +45 -19
- rapidtide/workflows/utils_doc.py +293 -0
- rapidtide/workflows/variabilityizer.py +118 -5
- {rapidtide-2.9.6.dist-info → rapidtide-3.1.3.dist-info}/METADATA +30 -223
- rapidtide-3.1.3.dist-info/RECORD +393 -0
- {rapidtide-2.9.6.dist-info → rapidtide-3.1.3.dist-info}/WHEEL +1 -1
- rapidtide-3.1.3.dist-info/entry_points.txt +65 -0
- rapidtide-3.1.3.dist-info/top_level.txt +2 -0
- rapidtide/calcandfitcorrpairs.py +0 -262
- rapidtide/data/examples/src/testoutputsize +0 -45
- rapidtide/data/models/model_revised/model.h5 +0 -0
- rapidtide/data/models/model_serdar/model.h5 +0 -0
- rapidtide/data/models/model_serdar2/model.h5 +0 -0
- rapidtide/data/reference/ASPECTS_nlin_asym_09c_2mm.nii.gz +0 -0
- rapidtide/data/reference/ASPECTS_nlin_asym_09c_2mm_mask.nii.gz +0 -0
- rapidtide/data/reference/ATTbasedFlowTerritories_split_nlin_asym_09c_2mm.nii.gz +0 -0
- rapidtide/data/reference/ATTbasedFlowTerritories_split_nlin_asym_09c_2mm_mask.nii.gz +0 -0
- rapidtide/data/reference/HCP1200_binmask_2mm_2009c_asym.nii.gz +0 -0
- rapidtide/data/reference/HCP1200_lag_2mm_2009c_asym.nii.gz +0 -0
- rapidtide/data/reference/HCP1200_mask_2mm_2009c_asym.nii.gz +0 -0
- rapidtide/data/reference/HCP1200_negmask_2mm_2009c_asym.nii.gz +0 -0
- rapidtide/data/reference/HCP1200_sigma_2mm_2009c_asym.nii.gz +0 -0
- rapidtide/data/reference/HCP1200_strength_2mm_2009c_asym.nii.gz +0 -0
- rapidtide/glmpass.py +0 -434
- rapidtide/refine_factored.py +0 -641
- rapidtide/scripts/retroglm +0 -23
- rapidtide/workflows/glmfrommaps.py +0 -202
- rapidtide/workflows/retroglm.py +0 -643
- rapidtide-2.9.6.data/scripts/adjustoffset +0 -23
- rapidtide-2.9.6.data/scripts/aligntcs +0 -23
- rapidtide-2.9.6.data/scripts/applydlfilter +0 -23
- rapidtide-2.9.6.data/scripts/atlasaverage +0 -23
- rapidtide-2.9.6.data/scripts/atlastool +0 -23
- rapidtide-2.9.6.data/scripts/calcicc +0 -22
- rapidtide-2.9.6.data/scripts/calctexticc +0 -23
- rapidtide-2.9.6.data/scripts/calcttest +0 -22
- rapidtide-2.9.6.data/scripts/ccorrica +0 -23
- rapidtide-2.9.6.data/scripts/diffrois +0 -23
- rapidtide-2.9.6.data/scripts/endtidalproc +0 -23
- rapidtide-2.9.6.data/scripts/filtnifti +0 -23
- rapidtide-2.9.6.data/scripts/filttc +0 -23
- rapidtide-2.9.6.data/scripts/fingerprint +0 -593
- rapidtide-2.9.6.data/scripts/fixtr +0 -23
- rapidtide-2.9.6.data/scripts/glmfilt +0 -24
- rapidtide-2.9.6.data/scripts/gmscalc +0 -22
- rapidtide-2.9.6.data/scripts/happy +0 -25
- rapidtide-2.9.6.data/scripts/happy2std +0 -23
- rapidtide-2.9.6.data/scripts/happywarp +0 -350
- rapidtide-2.9.6.data/scripts/histnifti +0 -23
- rapidtide-2.9.6.data/scripts/histtc +0 -23
- rapidtide-2.9.6.data/scripts/localflow +0 -23
- rapidtide-2.9.6.data/scripts/mergequality +0 -23
- rapidtide-2.9.6.data/scripts/pairproc +0 -23
- rapidtide-2.9.6.data/scripts/pairwisemergenifti +0 -23
- rapidtide-2.9.6.data/scripts/physiofreq +0 -23
- rapidtide-2.9.6.data/scripts/pixelcomp +0 -23
- rapidtide-2.9.6.data/scripts/plethquality +0 -23
- rapidtide-2.9.6.data/scripts/polyfitim +0 -23
- rapidtide-2.9.6.data/scripts/proj2flow +0 -23
- rapidtide-2.9.6.data/scripts/rankimage +0 -23
- rapidtide-2.9.6.data/scripts/rapidtide +0 -23
- rapidtide-2.9.6.data/scripts/rapidtide2std +0 -23
- rapidtide-2.9.6.data/scripts/resamplenifti +0 -23
- rapidtide-2.9.6.data/scripts/resampletc +0 -23
- rapidtide-2.9.6.data/scripts/retroglm +0 -23
- rapidtide-2.9.6.data/scripts/roisummarize +0 -23
- rapidtide-2.9.6.data/scripts/runqualitycheck +0 -23
- rapidtide-2.9.6.data/scripts/showarbcorr +0 -23
- rapidtide-2.9.6.data/scripts/showhist +0 -23
- rapidtide-2.9.6.data/scripts/showstxcorr +0 -23
- rapidtide-2.9.6.data/scripts/showtc +0 -23
- rapidtide-2.9.6.data/scripts/showxcorr_legacy +0 -536
- rapidtide-2.9.6.data/scripts/showxcorrx +0 -23
- rapidtide-2.9.6.data/scripts/showxy +0 -23
- rapidtide-2.9.6.data/scripts/simdata +0 -23
- rapidtide-2.9.6.data/scripts/spatialdecomp +0 -23
- rapidtide-2.9.6.data/scripts/spatialfit +0 -23
- rapidtide-2.9.6.data/scripts/spatialmi +0 -23
- rapidtide-2.9.6.data/scripts/spectrogram +0 -23
- rapidtide-2.9.6.data/scripts/synthASL +0 -23
- rapidtide-2.9.6.data/scripts/tcfrom2col +0 -23
- rapidtide-2.9.6.data/scripts/tcfrom3col +0 -23
- rapidtide-2.9.6.data/scripts/temporaldecomp +0 -23
- rapidtide-2.9.6.data/scripts/threeD +0 -236
- rapidtide-2.9.6.data/scripts/tidepool +0 -23
- rapidtide-2.9.6.data/scripts/variabilityizer +0 -23
- rapidtide-2.9.6.dist-info/RECORD +0 -359
- rapidtide-2.9.6.dist-info/top_level.txt +0 -86
- {rapidtide-2.9.6.dist-info → rapidtide-3.1.3.dist-info/licenses}/LICENSE +0 -0
rapidtide/multiproc.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
3
|
#
|
|
4
|
-
# Copyright 2016-
|
|
4
|
+
# Copyright 2016-2025 Blaise Frederick
|
|
5
5
|
#
|
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
7
|
# you may not use this file except in compliance with the License.
|
|
@@ -20,7 +20,10 @@ import multiprocessing as mp
|
|
|
20
20
|
import sys
|
|
21
21
|
import threading as thread
|
|
22
22
|
from platform import python_version, system
|
|
23
|
+
from typing import Any, Callable, List, Optional, Tuple
|
|
23
24
|
|
|
25
|
+
import numpy as np
|
|
26
|
+
from numpy.typing import NDArray
|
|
24
27
|
from tqdm import tqdm
|
|
25
28
|
|
|
26
29
|
try:
|
|
@@ -29,14 +32,86 @@ except ImportError:
|
|
|
29
32
|
import Queue as thrQueue
|
|
30
33
|
|
|
31
34
|
|
|
32
|
-
def maxcpus(reservecpu=True):
|
|
35
|
+
def maxcpus(reservecpu: bool = True) -> int:
|
|
36
|
+
"""Return the maximum number of CPUs that can be used for parallel processing.
|
|
37
|
+
|
|
38
|
+
This function returns the total number of CPU cores available on the system,
|
|
39
|
+
with an option to reserve one CPU core for system operations.
|
|
40
|
+
|
|
41
|
+
Parameters
|
|
42
|
+
----------
|
|
43
|
+
reservecpu : bool, default=True
|
|
44
|
+
If True, reserves one CPU core for system operations by returning
|
|
45
|
+
`cpu_count() - 1`. If False, returns the total number of CPU cores
|
|
46
|
+
available without reservation.
|
|
47
|
+
|
|
48
|
+
Returns
|
|
49
|
+
-------
|
|
50
|
+
int
|
|
51
|
+
The maximum number of CPUs available for parallel processing.
|
|
52
|
+
If `reservecpu=True`, returns `cpu_count() - 1`.
|
|
53
|
+
If `reservecpu=False`, returns `cpu_count()`.
|
|
54
|
+
|
|
55
|
+
Notes
|
|
56
|
+
-----
|
|
57
|
+
This function uses `multiprocessing.cpu_count()` to determine the number
|
|
58
|
+
of available CPU cores. The reserved CPU core helps maintain system
|
|
59
|
+
responsiveness during parallel processing tasks.
|
|
60
|
+
|
|
61
|
+
Examples
|
|
62
|
+
--------
|
|
63
|
+
>>> maxcpus()
|
|
64
|
+
7
|
|
65
|
+
>>> maxcpus(reservecpu=False)
|
|
66
|
+
8
|
|
67
|
+
"""
|
|
33
68
|
if reservecpu:
|
|
34
69
|
return mp.cpu_count() - 1
|
|
35
70
|
else:
|
|
36
71
|
return mp.cpu_count()
|
|
37
72
|
|
|
38
73
|
|
|
39
|
-
def _process_data(
|
|
74
|
+
def _process_data(
|
|
75
|
+
data_in: List[Any], inQ: Any, outQ: Any, showprogressbar: bool = True, chunksize: int = 10000
|
|
76
|
+
) -> List[Any]:
|
|
77
|
+
"""Process input data in chunks using multiprocessing queues.
|
|
78
|
+
|
|
79
|
+
This function distributes data into chunks and processes them using
|
|
80
|
+
provided input and output queues. It supports progress tracking and
|
|
81
|
+
handles both complete chunks and a final remainder chunk.
|
|
82
|
+
|
|
83
|
+
Parameters
|
|
84
|
+
----------
|
|
85
|
+
data_in : List[Any]
|
|
86
|
+
Input data to be processed.
|
|
87
|
+
inQ : Any
|
|
88
|
+
Input queue for sending data to worker processes.
|
|
89
|
+
outQ : Any
|
|
90
|
+
Output queue for receiving processed data from worker processes.
|
|
91
|
+
showprogressbar : bool, optional
|
|
92
|
+
If True, display a progress bar during processing. Default is True.
|
|
93
|
+
chunksize : int, optional
|
|
94
|
+
Size of data chunks to process at a time. Default is 10000.
|
|
95
|
+
|
|
96
|
+
Returns
|
|
97
|
+
-------
|
|
98
|
+
List[Any]
|
|
99
|
+
List of processed data items retrieved from the output queue.
|
|
100
|
+
|
|
101
|
+
Notes
|
|
102
|
+
-----
|
|
103
|
+
This function assumes that `inQ` and `outQ` are properly configured
|
|
104
|
+
multiprocessing queues and that worker processes are running and
|
|
105
|
+
consuming from `inQ` and producing to `outQ`.
|
|
106
|
+
|
|
107
|
+
Examples
|
|
108
|
+
--------
|
|
109
|
+
>>> from multiprocessing import Queue
|
|
110
|
+
>>> data = list(range(1000))
|
|
111
|
+
>>> in_q = Queue()
|
|
112
|
+
>>> out_q = Queue()
|
|
113
|
+
>>> result = _process_data(data, in_q, out_q)
|
|
114
|
+
"""
|
|
40
115
|
# send pos/data to workers
|
|
41
116
|
data_out = []
|
|
42
117
|
totalnum = len(data_in)
|
|
@@ -77,21 +152,79 @@ def _process_data(data_in, inQ, outQ, showprogressbar=True, reportstep=1000, chu
|
|
|
77
152
|
pbar.update(1)
|
|
78
153
|
if numreturned > remainder - 1:
|
|
79
154
|
break
|
|
80
|
-
|
|
81
|
-
|
|
155
|
+
if showprogressbar:
|
|
156
|
+
print()
|
|
82
157
|
|
|
83
158
|
return data_out
|
|
84
159
|
|
|
85
160
|
|
|
86
161
|
def run_multiproc(
|
|
87
|
-
consumerfunc,
|
|
88
|
-
inputshape,
|
|
89
|
-
maskarray,
|
|
90
|
-
nprocs=1,
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
162
|
+
consumerfunc: Callable[[Any, Any], None],
|
|
163
|
+
inputshape: Tuple[int, ...],
|
|
164
|
+
maskarray: Optional[NDArray] = None,
|
|
165
|
+
nprocs: int = 1,
|
|
166
|
+
verbose: bool = True,
|
|
167
|
+
indexaxis: int = 0,
|
|
168
|
+
procunit: str = "voxels",
|
|
169
|
+
showprogressbar: bool = True,
|
|
170
|
+
chunksize: int = 1000,
|
|
171
|
+
) -> List[Any]:
|
|
172
|
+
"""
|
|
173
|
+
Execute a function in parallel across multiple processes using multiprocessing.
|
|
174
|
+
|
|
175
|
+
This function initializes a set of worker processes and distributes input data
|
|
176
|
+
across them for parallel processing. It supports optional masking of data
|
|
177
|
+
along a specified axis and provides progress reporting.
|
|
178
|
+
|
|
179
|
+
Parameters
|
|
180
|
+
----------
|
|
181
|
+
consumerfunc : callable
|
|
182
|
+
Function to be executed in parallel. Must accept two arguments: an input queue
|
|
183
|
+
and an output queue for inter-process communication.
|
|
184
|
+
inputshape : tuple of int
|
|
185
|
+
Shape of the input data along all axes. The dimension along `indexaxis` is
|
|
186
|
+
used to determine the number of items to process.
|
|
187
|
+
maskarray : ndarray, optional
|
|
188
|
+
Boolean or binary mask array used to filter indices. Only indices where
|
|
189
|
+
`maskarray[d] > 0.5` are processed. If None, all indices are processed.
|
|
190
|
+
nprocs : int, optional
|
|
191
|
+
Number of worker processes to use. Default is 1 (single-threaded).
|
|
192
|
+
verbose : bool, optional
|
|
193
|
+
If True, print information about the number of units being processed.
|
|
194
|
+
Default is True.
|
|
195
|
+
indexaxis : int, optional
|
|
196
|
+
Axis along which to iterate for processing. Default is 0.
|
|
197
|
+
procunit : str, optional
|
|
198
|
+
Unit of processing, used for logging messages. Default is "voxels".
|
|
199
|
+
showprogressbar : bool, optional
|
|
200
|
+
If True, display a progress bar during processing. Default is True.
|
|
201
|
+
chunksize : int, optional
|
|
202
|
+
Number of items to process in each chunk. Default is 1000.
|
|
203
|
+
|
|
204
|
+
Returns
|
|
205
|
+
-------
|
|
206
|
+
list
|
|
207
|
+
List of results returned by the worker processes.
|
|
208
|
+
|
|
209
|
+
Notes
|
|
210
|
+
-----
|
|
211
|
+
- On Python 3.8+ and non-Windows systems, the function uses the 'fork' context
|
|
212
|
+
for better performance.
|
|
213
|
+
- The function will exit with an error if `maskarray` is provided but its
|
|
214
|
+
length does not match the size of the `indexaxis` dimension of `inputshape`.
|
|
215
|
+
|
|
216
|
+
Examples
|
|
217
|
+
--------
|
|
218
|
+
>>> def worker_func(inQ, outQ):
|
|
219
|
+
... while True:
|
|
220
|
+
... item = inQ.get()
|
|
221
|
+
... if item is None:
|
|
222
|
+
... break
|
|
223
|
+
... outQ.put(item * 2)
|
|
224
|
+
...
|
|
225
|
+
>>> shape = (100, 100)
|
|
226
|
+
>>> result = run_multiproc(worker_func, shape, nprocs=4)
|
|
227
|
+
"""
|
|
95
228
|
# initialize the workers and the queues
|
|
96
229
|
__spec__ = None
|
|
97
230
|
n_workers = nprocs
|
|
@@ -105,13 +238,6 @@ def run_multiproc(
|
|
|
105
238
|
workers = [ctx.Process(target=consumerfunc, args=(inQ, outQ)) for i in range(n_workers)]
|
|
106
239
|
# signal.signal(signal.SIGINT, original_sigint_handler)
|
|
107
240
|
else:
|
|
108
|
-
"""# try adding this magic incantation to get coverage to record multiprocessing properly
|
|
109
|
-
# This fails for python 3.8 and above
|
|
110
|
-
try:
|
|
111
|
-
from pytest_cov.embed import cleanup
|
|
112
|
-
except ImportError:
|
|
113
|
-
cleanup = None
|
|
114
|
-
"""
|
|
115
241
|
cleanup = None # just disable this for now
|
|
116
242
|
inQ = mp.Queue()
|
|
117
243
|
outQ = mp.Queue()
|
|
@@ -119,13 +245,6 @@ def run_multiproc(
|
|
|
119
245
|
for i, w in enumerate(workers):
|
|
120
246
|
w.start()
|
|
121
247
|
|
|
122
|
-
if procbyvoxel:
|
|
123
|
-
indexaxis = 0
|
|
124
|
-
procunit = "voxels"
|
|
125
|
-
else:
|
|
126
|
-
indexaxis = 1
|
|
127
|
-
procunit = "timepoints"
|
|
128
|
-
|
|
129
248
|
# check that the mask array matches the index dimension
|
|
130
249
|
if maskarray is not None:
|
|
131
250
|
if inputshape[indexaxis] != len(maskarray):
|
|
@@ -141,7 +260,8 @@ def run_multiproc(
|
|
|
141
260
|
data_in.append(d)
|
|
142
261
|
elif maskarray[d] > 0.5:
|
|
143
262
|
data_in.append(d)
|
|
144
|
-
|
|
263
|
+
if verbose:
|
|
264
|
+
print("processing", len(data_in), procunit + " with", n_workers, "processes")
|
|
145
265
|
data_out = _process_data(
|
|
146
266
|
data_in, inQ, outQ, showprogressbar=showprogressbar, chunksize=chunksize
|
|
147
267
|
)
|
|
@@ -159,14 +279,73 @@ def run_multiproc(
|
|
|
159
279
|
|
|
160
280
|
|
|
161
281
|
def run_multithread(
|
|
162
|
-
consumerfunc,
|
|
163
|
-
inputshape,
|
|
164
|
-
maskarray,
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
282
|
+
consumerfunc: Callable[[Any, Any], None],
|
|
283
|
+
inputshape: Tuple[int, ...],
|
|
284
|
+
maskarray: Optional[NDArray] = None,
|
|
285
|
+
verbose: bool = True,
|
|
286
|
+
nprocs: int = 1,
|
|
287
|
+
indexaxis: int = 0,
|
|
288
|
+
procunit: str = "voxels",
|
|
289
|
+
showprogressbar: bool = True,
|
|
290
|
+
chunksize: int = 1000,
|
|
291
|
+
) -> List[Any]:
|
|
292
|
+
"""
|
|
293
|
+
Execute a multithreaded processing task using a specified consumer function.
|
|
294
|
+
|
|
295
|
+
This function initializes a set of worker threads that process data in parallel
|
|
296
|
+
according to the provided consumer function. It supports optional masking,
|
|
297
|
+
progress tracking, and configurable chunking for efficient processing.
|
|
298
|
+
|
|
299
|
+
Parameters
|
|
300
|
+
----------
|
|
301
|
+
consumerfunc : callable
|
|
302
|
+
A function that takes two arguments (input queue, output queue) and
|
|
303
|
+
processes data in a loop until signaled to stop.
|
|
304
|
+
inputshape : tuple of int
|
|
305
|
+
Shape of the input data along all axes. The dimension along `indexaxis`
|
|
306
|
+
determines how many items will be processed.
|
|
307
|
+
maskarray : ndarray, optional
|
|
308
|
+
Boolean or integer array used to filter which indices are processed.
|
|
309
|
+
Must match the size of the axis specified by `indexaxis`.
|
|
310
|
+
verbose : bool, optional
|
|
311
|
+
If True, print information about the number of items being processed
|
|
312
|
+
and the number of threads used. Default is True.
|
|
313
|
+
nprocs : int, optional
|
|
314
|
+
Number of worker threads to spawn. Default is 1.
|
|
315
|
+
indexaxis : int, optional
|
|
316
|
+
Axis along which the indexing is performed. Default is 0.
|
|
317
|
+
procunit : str, optional
|
|
318
|
+
Unit of processing, used in verbose output. Default is "voxels".
|
|
319
|
+
showprogressbar : bool, optional
|
|
320
|
+
If True, display a progress bar during processing. Default is True.
|
|
321
|
+
chunksize : int, optional
|
|
322
|
+
Number of items to process in each chunk. Default is 1000.
|
|
323
|
+
|
|
324
|
+
Returns
|
|
325
|
+
-------
|
|
326
|
+
list
|
|
327
|
+
A list of results returned by the consumer function for each processed item.
|
|
328
|
+
|
|
329
|
+
Notes
|
|
330
|
+
-----
|
|
331
|
+
- The function uses `threading.Queue` for inter-thread communication.
|
|
332
|
+
- If `maskarray` is provided, only indices where `maskarray[d] > 0` are processed.
|
|
333
|
+
- The `consumerfunc` is expected to read from `inQ` and write to `outQ` until
|
|
334
|
+
a `None` is received on `inQ`, signaling the end of processing.
|
|
335
|
+
|
|
336
|
+
Examples
|
|
337
|
+
--------
|
|
338
|
+
>>> def my_consumer(inQ, outQ):
|
|
339
|
+
... while True:
|
|
340
|
+
... item = inQ.get()
|
|
341
|
+
... if item is None:
|
|
342
|
+
... break
|
|
343
|
+
... result = item * 2
|
|
344
|
+
... outQ.put(result)
|
|
345
|
+
...
|
|
346
|
+
>>> shape = (100, 50)
|
|
347
|
+
>>> result = run_multithread(my_consumer, shape, nprocs=4)
|
|
348
|
+
"""
|
|
170
349
|
# initialize the workers and the queues
|
|
171
350
|
n_workers = nprocs
|
|
172
351
|
inQ = thrQueue.Queue()
|
|
@@ -175,13 +354,6 @@ def run_multithread(
|
|
|
175
354
|
for i, w in enumerate(workers):
|
|
176
355
|
w.start()
|
|
177
356
|
|
|
178
|
-
if procbyvoxel:
|
|
179
|
-
indexaxis = 0
|
|
180
|
-
procunit = "voxels"
|
|
181
|
-
else:
|
|
182
|
-
indexaxis = 1
|
|
183
|
-
procunit = "timepoints"
|
|
184
|
-
|
|
185
357
|
# check that the mask array matches the index dimension
|
|
186
358
|
if maskarray is not None:
|
|
187
359
|
if inputshape[indexaxis] != len(maskarray):
|
|
@@ -197,7 +369,8 @@ def run_multithread(
|
|
|
197
369
|
data_in.append(d)
|
|
198
370
|
elif maskarray[d] > 0:
|
|
199
371
|
data_in.append(d)
|
|
200
|
-
|
|
372
|
+
if verbose:
|
|
373
|
+
print("processing", len(data_in), procunit + " with", n_workers, "threads")
|
|
201
374
|
data_out = _process_data(
|
|
202
375
|
data_in, inQ, outQ, showprogressbar=showprogressbar, chunksize=chunksize
|
|
203
376
|
)
|