rapidtide 3.0.3__py3-none-any.whl → 3.0.4__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.
@@ -276,6 +276,7 @@ class Overlay:
276
276
  label=newlabel,
277
277
  report=self.report,
278
278
  init_LUT=init_LUT,
279
+ verbose=self.verbose,
279
280
  )
280
281
 
281
282
  def updateStats(self):
@@ -1145,6 +1146,7 @@ class RapidtideDataset:
1145
1146
  ["lagtimesrefined", "desc-maxtimerefined_map"],
1146
1147
  ["timepercentile", "desc-timepercentile_map"],
1147
1148
  ["lagstrengths", "desc-maxcorr_map"],
1149
+ ["lagstrengthsrefined", "desc-maxcorrrefined_map"],
1148
1150
  ["lagsigma", "desc-maxwidth_map"],
1149
1151
  ["MTT", "desc-MTT_map"],
1150
1152
  ["R2", "desc-lfofilterR2_map"],
rapidtide/_version.py CHANGED
@@ -1,683 +1,21 @@
1
1
 
2
- # This file helps to compute a version number in source trees obtained from
3
- # git-archive tarball (such as those provided by githubs download-from-tag
4
- # feature). Distribution tarballs (built by setup.py sdist) and build
5
- # directories (produced by setup.py build) will contain a much shorter file
6
- # that just contains the computed version number.
7
-
8
- # This file is released into the public domain.
9
- # Generated by versioneer-0.29
10
- # https://github.com/python-versioneer/python-versioneer
11
-
12
- """Git implementation of _version.py."""
13
-
14
- import errno
15
- import functools
16
- import os
17
- import re
18
- import subprocess
19
- import sys
20
- from typing import Any, Callable, Dict, List, Optional, Tuple
21
-
22
-
23
- def get_keywords() -> Dict[str, str]:
24
- """Get the keywords needed to look up the version information."""
25
- # these strings will be replaced by git during git-archive.
26
- # setup.py/versioneer.py will grep for the variable names, so they must
27
- # each be defined on a line of their own. _version.py will just call
28
- # get_keywords().
29
- git_refnames = "$Format:%d$"
30
- git_full = "$Format:%H$"
31
- git_date = "$Format:%ci$"
32
- keywords = {"refnames": git_refnames, "full": git_full, "date": git_date}
33
- return keywords
34
-
35
-
36
- class VersioneerConfig:
37
- """Container for Versioneer configuration parameters."""
38
-
39
- VCS: str
40
- style: str
41
- tag_prefix: str
42
- parentdir_prefix: str
43
- versionfile_source: str
44
- verbose: bool
45
-
46
-
47
- def get_config() -> VersioneerConfig:
48
- """Create, populate and return the VersioneerConfig() object."""
49
- # these strings are filled in when 'setup.py versioneer' creates
50
- # _version.py
51
- cfg = VersioneerConfig()
52
- cfg.VCS = "git"
53
- cfg.style = "pep440"
54
- cfg.tag_prefix = "v"
55
- cfg.parentdir_prefix = "rapidtide-"
56
- cfg.versionfile_source = "rapidtide/_version.py"
57
- cfg.verbose = False
58
- return cfg
59
-
60
-
61
- class NotThisMethod(Exception):
62
- """Exception raised if a method is not valid for the current scenario."""
63
-
64
-
65
- LONG_VERSION_PY: Dict[str, str] = {}
66
- HANDLERS: Dict[str, Dict[str, Callable]] = {}
67
-
68
-
69
- def register_vcs_handler(vcs: str, method: str) -> Callable: # decorator
70
- """Create decorator to mark a method as the handler of a VCS."""
71
- def decorate(f: Callable) -> Callable:
72
- """Store f in HANDLERS[vcs][method]."""
73
- if vcs not in HANDLERS:
74
- HANDLERS[vcs] = {}
75
- HANDLERS[vcs][method] = f
76
- return f
77
- return decorate
78
-
79
-
80
- def run_command(
81
- commands: List[str],
82
- args: List[str],
83
- cwd: Optional[str] = None,
84
- verbose: bool = False,
85
- hide_stderr: bool = False,
86
- env: Optional[Dict[str, str]] = None,
87
- ) -> Tuple[Optional[str], Optional[int]]:
88
- """Call the given command(s)."""
89
- assert isinstance(commands, list)
90
- process = None
91
-
92
- popen_kwargs: Dict[str, Any] = {}
93
- if sys.platform == "win32":
94
- # This hides the console window if pythonw.exe is used
95
- startupinfo = subprocess.STARTUPINFO()
96
- startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
97
- popen_kwargs["startupinfo"] = startupinfo
98
-
99
- for command in commands:
100
- try:
101
- dispcmd = str([command] + args)
102
- # remember shell=False, so use git.cmd on windows, not just git
103
- process = subprocess.Popen([command] + args, cwd=cwd, env=env,
104
- stdout=subprocess.PIPE,
105
- stderr=(subprocess.PIPE if hide_stderr
106
- else None), **popen_kwargs)
107
- break
108
- except OSError as e:
109
- if e.errno == errno.ENOENT:
110
- continue
111
- if verbose:
112
- print("unable to run %s" % dispcmd)
113
- print(e)
114
- return None, None
115
- else:
116
- if verbose:
117
- print("unable to find command, tried %s" % (commands,))
118
- return None, None
119
- stdout = process.communicate()[0].strip().decode()
120
- if process.returncode != 0:
121
- if verbose:
122
- print("unable to run %s (error)" % dispcmd)
123
- print("stdout was %s" % stdout)
124
- return None, process.returncode
125
- return stdout, process.returncode
126
-
127
-
128
- def versions_from_parentdir(
129
- parentdir_prefix: str,
130
- root: str,
131
- verbose: bool,
132
- ) -> Dict[str, Any]:
133
- """Try to determine the version from the parent directory name.
134
-
135
- Source tarballs conventionally unpack into a directory that includes both
136
- the project name and a version string. We will also support searching up
137
- two directory levels for an appropriately named parent directory
138
- """
139
- rootdirs = []
140
-
141
- for _ in range(3):
142
- dirname = os.path.basename(root)
143
- if dirname.startswith(parentdir_prefix):
144
- return {"version": dirname[len(parentdir_prefix):],
145
- "full-revisionid": None,
146
- "dirty": False, "error": None, "date": None}
147
- rootdirs.append(root)
148
- root = os.path.dirname(root) # up a level
149
-
150
- if verbose:
151
- print("Tried directories %s but none started with prefix %s" %
152
- (str(rootdirs), parentdir_prefix))
153
- raise NotThisMethod("rootdir doesn't start with parentdir_prefix")
154
-
155
-
156
- @register_vcs_handler("git", "get_keywords")
157
- def git_get_keywords(versionfile_abs: str) -> Dict[str, str]:
158
- """Extract version information from the given file."""
159
- # the code embedded in _version.py can just fetch the value of these
160
- # keywords. When used from setup.py, we don't want to import _version.py,
161
- # so we do it with a regexp instead. This function is not used from
162
- # _version.py.
163
- keywords: Dict[str, str] = {}
164
- try:
165
- with open(versionfile_abs, "r") as fobj:
166
- for line in fobj:
167
- if line.strip().startswith("git_refnames ="):
168
- mo = re.search(r'=\s*"(.*)"', line)
169
- if mo:
170
- keywords["refnames"] = mo.group(1)
171
- if line.strip().startswith("git_full ="):
172
- mo = re.search(r'=\s*"(.*)"', line)
173
- if mo:
174
- keywords["full"] = mo.group(1)
175
- if line.strip().startswith("git_date ="):
176
- mo = re.search(r'=\s*"(.*)"', line)
177
- if mo:
178
- keywords["date"] = mo.group(1)
179
- except OSError:
180
- pass
181
- return keywords
182
-
183
-
184
- @register_vcs_handler("git", "keywords")
185
- def git_versions_from_keywords(
186
- keywords: Dict[str, str],
187
- tag_prefix: str,
188
- verbose: bool,
189
- ) -> Dict[str, Any]:
190
- """Get version information from git keywords."""
191
- if "refnames" not in keywords:
192
- raise NotThisMethod("Short version file found")
193
- date = keywords.get("date")
194
- if date is not None:
195
- # Use only the last line. Previous lines may contain GPG signature
196
- # information.
197
- date = date.splitlines()[-1]
198
-
199
- # git-2.2.0 added "%cI", which expands to an ISO-8601 -compliant
200
- # datestamp. However we prefer "%ci" (which expands to an "ISO-8601
201
- # -like" string, which we must then edit to make compliant), because
202
- # it's been around since git-1.5.3, and it's too difficult to
203
- # discover which version we're using, or to work around using an
204
- # older one.
205
- date = date.strip().replace(" ", "T", 1).replace(" ", "", 1)
206
- refnames = keywords["refnames"].strip()
207
- if refnames.startswith("$Format"):
208
- if verbose:
209
- print("keywords are unexpanded, not using")
210
- raise NotThisMethod("unexpanded keywords, not a git-archive tarball")
211
- refs = {r.strip() for r in refnames.strip("()").split(",")}
212
- # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of
213
- # just "foo-1.0". If we see a "tag: " prefix, prefer those.
214
- TAG = "tag: "
215
- tags = {r[len(TAG):] for r in refs if r.startswith(TAG)}
216
- if not tags:
217
- # Either we're using git < 1.8.3, or there really are no tags. We use
218
- # a heuristic: assume all version tags have a digit. The old git %d
219
- # expansion behaves like git log --decorate=short and strips out the
220
- # refs/heads/ and refs/tags/ prefixes that would let us distinguish
221
- # between branches and tags. By ignoring refnames without digits, we
222
- # filter out many common branch names like "release" and
223
- # "stabilization", as well as "HEAD" and "master".
224
- tags = {r for r in refs if re.search(r'\d', r)}
225
- if verbose:
226
- print("discarding '%s', no digits" % ",".join(refs - tags))
227
- if verbose:
228
- print("likely tags: %s" % ",".join(sorted(tags)))
229
- for ref in sorted(tags):
230
- # sorting will prefer e.g. "2.0" over "2.0rc1"
231
- if ref.startswith(tag_prefix):
232
- r = ref[len(tag_prefix):]
233
- # Filter out refs that exactly match prefix or that don't start
234
- # with a number once the prefix is stripped (mostly a concern
235
- # when prefix is '')
236
- if not re.match(r'\d', r):
237
- continue
238
- if verbose:
239
- print("picking %s" % r)
240
- return {"version": r,
241
- "full-revisionid": keywords["full"].strip(),
242
- "dirty": False, "error": None,
243
- "date": date}
244
- # no suitable tags, so version is "0+unknown", but full hex is still there
245
- if verbose:
246
- print("no suitable tags, using unknown + full revision id")
247
- return {"version": "0+unknown",
248
- "full-revisionid": keywords["full"].strip(),
249
- "dirty": False, "error": "no suitable tags", "date": None}
250
-
251
-
252
- @register_vcs_handler("git", "pieces_from_vcs")
253
- def git_pieces_from_vcs(
254
- tag_prefix: str,
255
- root: str,
256
- verbose: bool,
257
- runner: Callable = run_command
258
- ) -> Dict[str, Any]:
259
- """Get version from 'git describe' in the root of the source tree.
260
-
261
- This only gets called if the git-archive 'subst' keywords were *not*
262
- expanded, and _version.py hasn't already been rewritten with a short
263
- version string, meaning we're inside a checked out source tree.
264
- """
265
- GITS = ["git"]
266
- if sys.platform == "win32":
267
- GITS = ["git.cmd", "git.exe"]
268
-
269
- # GIT_DIR can interfere with correct operation of Versioneer.
270
- # It may be intended to be passed to the Versioneer-versioned project,
271
- # but that should not change where we get our version from.
272
- env = os.environ.copy()
273
- env.pop("GIT_DIR", None)
274
- runner = functools.partial(runner, env=env)
275
-
276
- _, rc = runner(GITS, ["rev-parse", "--git-dir"], cwd=root,
277
- hide_stderr=not verbose)
278
- if rc != 0:
279
- if verbose:
280
- print("Directory %s not under git control" % root)
281
- raise NotThisMethod("'git rev-parse --git-dir' returned error")
282
-
283
- # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty]
284
- # if there isn't one, this yields HEX[-dirty] (no NUM)
285
- describe_out, rc = runner(GITS, [
286
- "describe", "--tags", "--dirty", "--always", "--long",
287
- "--match", f"{tag_prefix}[[:digit:]]*"
288
- ], cwd=root)
289
- # --long was added in git-1.5.5
290
- if describe_out is None:
291
- raise NotThisMethod("'git describe' failed")
292
- describe_out = describe_out.strip()
293
- full_out, rc = runner(GITS, ["rev-parse", "HEAD"], cwd=root)
294
- if full_out is None:
295
- raise NotThisMethod("'git rev-parse' failed")
296
- full_out = full_out.strip()
297
-
298
- pieces: Dict[str, Any] = {}
299
- pieces["long"] = full_out
300
- pieces["short"] = full_out[:7] # maybe improved later
301
- pieces["error"] = None
302
-
303
- branch_name, rc = runner(GITS, ["rev-parse", "--abbrev-ref", "HEAD"],
304
- cwd=root)
305
- # --abbrev-ref was added in git-1.6.3
306
- if rc != 0 or branch_name is None:
307
- raise NotThisMethod("'git rev-parse --abbrev-ref' returned error")
308
- branch_name = branch_name.strip()
309
-
310
- if branch_name == "HEAD":
311
- # If we aren't exactly on a branch, pick a branch which represents
312
- # the current commit. If all else fails, we are on a branchless
313
- # commit.
314
- branches, rc = runner(GITS, ["branch", "--contains"], cwd=root)
315
- # --contains was added in git-1.5.4
316
- if rc != 0 or branches is None:
317
- raise NotThisMethod("'git branch --contains' returned error")
318
- branches = branches.split("\n")
319
-
320
- # Remove the first line if we're running detached
321
- if "(" in branches[0]:
322
- branches.pop(0)
323
-
324
- # Strip off the leading "* " from the list of branches.
325
- branches = [branch[2:] for branch in branches]
326
- if "master" in branches:
327
- branch_name = "master"
328
- elif not branches:
329
- branch_name = None
330
- else:
331
- # Pick the first branch that is returned. Good or bad.
332
- branch_name = branches[0]
333
-
334
- pieces["branch"] = branch_name
335
-
336
- # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty]
337
- # TAG might have hyphens.
338
- git_describe = describe_out
339
-
340
- # look for -dirty suffix
341
- dirty = git_describe.endswith("-dirty")
342
- pieces["dirty"] = dirty
343
- if dirty:
344
- git_describe = git_describe[:git_describe.rindex("-dirty")]
345
-
346
- # now we have TAG-NUM-gHEX or HEX
347
-
348
- if "-" in git_describe:
349
- # TAG-NUM-gHEX
350
- mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe)
351
- if not mo:
352
- # unparsable. Maybe git-describe is misbehaving?
353
- pieces["error"] = ("unable to parse git-describe output: '%s'"
354
- % describe_out)
355
- return pieces
356
-
357
- # tag
358
- full_tag = mo.group(1)
359
- if not full_tag.startswith(tag_prefix):
360
- if verbose:
361
- fmt = "tag '%s' doesn't start with prefix '%s'"
362
- print(fmt % (full_tag, tag_prefix))
363
- pieces["error"] = ("tag '%s' doesn't start with prefix '%s'"
364
- % (full_tag, tag_prefix))
365
- return pieces
366
- pieces["closest-tag"] = full_tag[len(tag_prefix):]
367
-
368
- # distance: number of commits since tag
369
- pieces["distance"] = int(mo.group(2))
370
-
371
- # commit: short hex revision ID
372
- pieces["short"] = mo.group(3)
373
-
374
- else:
375
- # HEX: no tags
376
- pieces["closest-tag"] = None
377
- out, rc = runner(GITS, ["rev-list", "HEAD", "--left-right"], cwd=root)
378
- pieces["distance"] = len(out.split()) # total number of commits
379
-
380
- # commit date: see ISO-8601 comment in git_versions_from_keywords()
381
- date = runner(GITS, ["show", "-s", "--format=%ci", "HEAD"], cwd=root)[0].strip()
382
- # Use only the last line. Previous lines may contain GPG signature
383
- # information.
384
- date = date.splitlines()[-1]
385
- pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1)
386
-
387
- return pieces
388
-
389
-
390
- def plus_or_dot(pieces: Dict[str, Any]) -> str:
391
- """Return a + if we don't already have one, else return a ."""
392
- if "+" in pieces.get("closest-tag", ""):
393
- return "."
394
- return "+"
395
-
396
-
397
- def render_pep440(pieces: Dict[str, Any]) -> str:
398
- """Build up version string, with post-release "local version identifier".
399
-
400
- Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you
401
- get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty
402
-
403
- Exceptions:
404
- 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty]
405
- """
406
- if pieces["closest-tag"]:
407
- rendered = pieces["closest-tag"]
408
- if pieces["distance"] or pieces["dirty"]:
409
- rendered += plus_or_dot(pieces)
410
- rendered += "%d.g%s" % (pieces["distance"], pieces["short"])
411
- if pieces["dirty"]:
412
- rendered += ".dirty"
413
- else:
414
- # exception #1
415
- rendered = "0+untagged.%d.g%s" % (pieces["distance"],
416
- pieces["short"])
417
- if pieces["dirty"]:
418
- rendered += ".dirty"
419
- return rendered
420
-
421
-
422
- def render_pep440_branch(pieces: Dict[str, Any]) -> str:
423
- """TAG[[.dev0]+DISTANCE.gHEX[.dirty]] .
424
-
425
- The ".dev0" means not master branch. Note that .dev0 sorts backwards
426
- (a feature branch will appear "older" than the master branch).
427
-
428
- Exceptions:
429
- 1: no tags. 0[.dev0]+untagged.DISTANCE.gHEX[.dirty]
430
- """
431
- if pieces["closest-tag"]:
432
- rendered = pieces["closest-tag"]
433
- if pieces["distance"] or pieces["dirty"]:
434
- if pieces["branch"] != "master":
435
- rendered += ".dev0"
436
- rendered += plus_or_dot(pieces)
437
- rendered += "%d.g%s" % (pieces["distance"], pieces["short"])
438
- if pieces["dirty"]:
439
- rendered += ".dirty"
440
- else:
441
- # exception #1
442
- rendered = "0"
443
- if pieces["branch"] != "master":
444
- rendered += ".dev0"
445
- rendered += "+untagged.%d.g%s" % (pieces["distance"],
446
- pieces["short"])
447
- if pieces["dirty"]:
448
- rendered += ".dirty"
449
- return rendered
450
-
451
-
452
- def pep440_split_post(ver: str) -> Tuple[str, Optional[int]]:
453
- """Split pep440 version string at the post-release segment.
454
-
455
- Returns the release segments before the post-release and the
456
- post-release version number (or -1 if no post-release segment is present).
457
- """
458
- vc = str.split(ver, ".post")
459
- return vc[0], int(vc[1] or 0) if len(vc) == 2 else None
460
-
461
-
462
- def render_pep440_pre(pieces: Dict[str, Any]) -> str:
463
- """TAG[.postN.devDISTANCE] -- No -dirty.
464
-
465
- Exceptions:
466
- 1: no tags. 0.post0.devDISTANCE
467
- """
468
- if pieces["closest-tag"]:
469
- if pieces["distance"]:
470
- # update the post release segment
471
- tag_version, post_version = pep440_split_post(pieces["closest-tag"])
472
- rendered = tag_version
473
- if post_version is not None:
474
- rendered += ".post%d.dev%d" % (post_version + 1, pieces["distance"])
475
- else:
476
- rendered += ".post0.dev%d" % (pieces["distance"])
477
- else:
478
- # no commits, use the tag as the version
479
- rendered = pieces["closest-tag"]
480
- else:
481
- # exception #1
482
- rendered = "0.post0.dev%d" % pieces["distance"]
483
- return rendered
484
-
485
-
486
- def render_pep440_post(pieces: Dict[str, Any]) -> str:
487
- """TAG[.postDISTANCE[.dev0]+gHEX] .
488
-
489
- The ".dev0" means dirty. Note that .dev0 sorts backwards
490
- (a dirty tree will appear "older" than the corresponding clean one),
491
- but you shouldn't be releasing software with -dirty anyways.
492
-
493
- Exceptions:
494
- 1: no tags. 0.postDISTANCE[.dev0]
495
- """
496
- if pieces["closest-tag"]:
497
- rendered = pieces["closest-tag"]
498
- if pieces["distance"] or pieces["dirty"]:
499
- rendered += ".post%d" % pieces["distance"]
500
- if pieces["dirty"]:
501
- rendered += ".dev0"
502
- rendered += plus_or_dot(pieces)
503
- rendered += "g%s" % pieces["short"]
504
- else:
505
- # exception #1
506
- rendered = "0.post%d" % pieces["distance"]
507
- if pieces["dirty"]:
508
- rendered += ".dev0"
509
- rendered += "+g%s" % pieces["short"]
510
- return rendered
511
-
512
-
513
- def render_pep440_post_branch(pieces: Dict[str, Any]) -> str:
514
- """TAG[.postDISTANCE[.dev0]+gHEX[.dirty]] .
515
-
516
- The ".dev0" means not master branch.
517
-
518
- Exceptions:
519
- 1: no tags. 0.postDISTANCE[.dev0]+gHEX[.dirty]
520
- """
521
- if pieces["closest-tag"]:
522
- rendered = pieces["closest-tag"]
523
- if pieces["distance"] or pieces["dirty"]:
524
- rendered += ".post%d" % pieces["distance"]
525
- if pieces["branch"] != "master":
526
- rendered += ".dev0"
527
- rendered += plus_or_dot(pieces)
528
- rendered += "g%s" % pieces["short"]
529
- if pieces["dirty"]:
530
- rendered += ".dirty"
531
- else:
532
- # exception #1
533
- rendered = "0.post%d" % pieces["distance"]
534
- if pieces["branch"] != "master":
535
- rendered += ".dev0"
536
- rendered += "+g%s" % pieces["short"]
537
- if pieces["dirty"]:
538
- rendered += ".dirty"
539
- return rendered
540
-
541
-
542
- def render_pep440_old(pieces: Dict[str, Any]) -> str:
543
- """TAG[.postDISTANCE[.dev0]] .
544
-
545
- The ".dev0" means dirty.
546
-
547
- Exceptions:
548
- 1: no tags. 0.postDISTANCE[.dev0]
549
- """
550
- if pieces["closest-tag"]:
551
- rendered = pieces["closest-tag"]
552
- if pieces["distance"] or pieces["dirty"]:
553
- rendered += ".post%d" % pieces["distance"]
554
- if pieces["dirty"]:
555
- rendered += ".dev0"
556
- else:
557
- # exception #1
558
- rendered = "0.post%d" % pieces["distance"]
559
- if pieces["dirty"]:
560
- rendered += ".dev0"
561
- return rendered
562
-
563
-
564
- def render_git_describe(pieces: Dict[str, Any]) -> str:
565
- """TAG[-DISTANCE-gHEX][-dirty].
566
-
567
- Like 'git describe --tags --dirty --always'.
568
-
569
- Exceptions:
570
- 1: no tags. HEX[-dirty] (note: no 'g' prefix)
571
- """
572
- if pieces["closest-tag"]:
573
- rendered = pieces["closest-tag"]
574
- if pieces["distance"]:
575
- rendered += "-%d-g%s" % (pieces["distance"], pieces["short"])
576
- else:
577
- # exception #1
578
- rendered = pieces["short"]
579
- if pieces["dirty"]:
580
- rendered += "-dirty"
581
- return rendered
582
-
583
-
584
- def render_git_describe_long(pieces: Dict[str, Any]) -> str:
585
- """TAG-DISTANCE-gHEX[-dirty].
586
-
587
- Like 'git describe --tags --dirty --always -long'.
588
- The distance/hash is unconditional.
589
-
590
- Exceptions:
591
- 1: no tags. HEX[-dirty] (note: no 'g' prefix)
592
- """
593
- if pieces["closest-tag"]:
594
- rendered = pieces["closest-tag"]
595
- rendered += "-%d-g%s" % (pieces["distance"], pieces["short"])
596
- else:
597
- # exception #1
598
- rendered = pieces["short"]
599
- if pieces["dirty"]:
600
- rendered += "-dirty"
601
- return rendered
602
-
603
-
604
- def render(pieces: Dict[str, Any], style: str) -> Dict[str, Any]:
605
- """Render the given version pieces into the requested style."""
606
- if pieces["error"]:
607
- return {"version": "unknown",
608
- "full-revisionid": pieces.get("long"),
609
- "dirty": None,
610
- "error": pieces["error"],
611
- "date": None}
612
-
613
- if not style or style == "default":
614
- style = "pep440" # the default
615
-
616
- if style == "pep440":
617
- rendered = render_pep440(pieces)
618
- elif style == "pep440-branch":
619
- rendered = render_pep440_branch(pieces)
620
- elif style == "pep440-pre":
621
- rendered = render_pep440_pre(pieces)
622
- elif style == "pep440-post":
623
- rendered = render_pep440_post(pieces)
624
- elif style == "pep440-post-branch":
625
- rendered = render_pep440_post_branch(pieces)
626
- elif style == "pep440-old":
627
- rendered = render_pep440_old(pieces)
628
- elif style == "git-describe":
629
- rendered = render_git_describe(pieces)
630
- elif style == "git-describe-long":
631
- rendered = render_git_describe_long(pieces)
632
- else:
633
- raise ValueError("unknown style '%s'" % style)
634
-
635
- return {"version": rendered, "full-revisionid": pieces["long"],
636
- "dirty": pieces["dirty"], "error": None,
637
- "date": pieces.get("date")}
638
-
639
-
640
- def get_versions() -> Dict[str, Any]:
641
- """Get version information or return default if unable to do so."""
642
- # I am in _version.py, which lives at ROOT/VERSIONFILE_SOURCE. If we have
643
- # __file__, we can work backwards from there to the root. Some
644
- # py2exe/bbfreeze/non-CPython implementations don't do __file__, in which
645
- # case we can only use expanded keywords.
646
-
647
- cfg = get_config()
648
- verbose = cfg.verbose
649
-
650
- try:
651
- return git_versions_from_keywords(get_keywords(), cfg.tag_prefix,
652
- verbose)
653
- except NotThisMethod:
654
- pass
655
-
656
- try:
657
- root = os.path.realpath(__file__)
658
- # versionfile_source is the relative path from the top of the source
659
- # tree (where the .git directory might live) to this file. Invert
660
- # this to find the root from __file__.
661
- for _ in cfg.versionfile_source.split('/'):
662
- root = os.path.dirname(root)
663
- except NameError:
664
- return {"version": "0+unknown", "full-revisionid": None,
665
- "dirty": None,
666
- "error": "unable to find root of source tree",
667
- "date": None}
668
-
669
- try:
670
- pieces = git_pieces_from_vcs(cfg.tag_prefix, root, verbose)
671
- return render(pieces, cfg.style)
672
- except NotThisMethod:
673
- pass
674
-
675
- try:
676
- if cfg.parentdir_prefix:
677
- return versions_from_parentdir(cfg.parentdir_prefix, root, verbose)
678
- except NotThisMethod:
679
- pass
680
-
681
- return {"version": "0+unknown", "full-revisionid": None,
682
- "dirty": None,
683
- "error": "unable to compute version", "date": None}
2
+ # This file was generated by 'versioneer.py' (0.29) from
3
+ # revision-control system data, or from the parent directory name of an
4
+ # unpacked source archive. Distribution tarballs contain a pre-generated copy
5
+ # of this file.
6
+
7
+ import json
8
+
9
+ version_json = '''
10
+ {
11
+ "date": "2025-05-06T11:02:28-0400",
12
+ "dirty": false,
13
+ "error": null,
14
+ "full-revisionid": "c5e5e2f38938a78c3439882e8ad596c483c6adcf",
15
+ "version": "3.0.4"
16
+ }
17
+ ''' # END VERSION_JSON
18
+
19
+
20
+ def get_versions():
21
+ return json.loads(version_json)
rapidtide/io.py CHANGED
@@ -1938,7 +1938,12 @@ def parsefilespec(filespec, debug=False):
1938
1938
  if debug:
1939
1939
  print(f"PARSEFILESPEC: input string >>>{filespec}<<<")
1940
1940
  print(f"PARSEFILESPEC: platform is {platform.system()}")
1941
- if filespec[1] == ":" and platform.system() == "Windows":
1941
+
1942
+ specialcase = False
1943
+ if len(inputlist) > 1:
1944
+ if filespec[1] == ":" and platform.system() == "Windows":
1945
+ specialcase = True
1946
+ if specialcase:
1942
1947
  thefilename = ":".join([inputlist[0], inputlist[1]])
1943
1948
  if len(inputlist) == 3:
1944
1949
  thecolspec = inputlist[2]
@@ -23,7 +23,6 @@ import matplotlib as mpl
23
23
  import rapidtide.qualitycheck as rapidtide_quality
24
24
  import rapidtide.workflows.rapidtide as rapidtide_workflow
25
25
  import rapidtide.workflows.rapidtide_parser as rapidtide_parser
26
- import rapidtide.workflows.retroregress as rapidtide_retroregress
27
26
  from rapidtide.tests.utils import get_examples_path, get_test_temp_path
28
27
 
29
28
 
@@ -57,7 +56,6 @@ def test_fullrunrapidtide_v1(debug=False, local=False, displayplots=False):
57
56
  rapidtide_workflow.rapidtide_main(rapidtide_parser.process_args(inputargs=inputargs))
58
57
  rapidtide_quality.qualitycheck(os.path.join(testtemproot, "sub-RAPIDTIDETEST1"))
59
58
 
60
-
61
59
  # test fixval
62
60
  inputargs = [
63
61
  os.path.join(exampleroot, "sub-RAPIDTIDETEST.nii.gz"),
@@ -0,0 +1,140 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ #
4
+ # Copyright 2016-2025 Blaise Frederick
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+ #
19
+ import numpy as np
20
+
21
+ from rapidtide.workflows.adjustoffset import _get_parser as adjustoffset_getparser
22
+ from rapidtide.workflows.aligntcs import _get_parser as aligntcs_getparser
23
+ from rapidtide.workflows.applydlfilter import _get_parser as applydlfilter_getparser
24
+ from rapidtide.workflows.atlasaverage import _get_parser as atlasaverage_getparser
25
+ from rapidtide.workflows.atlastool import _get_parser as atlastool_getparser
26
+ from rapidtide.workflows.calctexticc import _get_parser as calctexticc_getparser
27
+ from rapidtide.workflows.ccorrica import _get_parser as ccorrica_getparser
28
+ from rapidtide.workflows.delayvar import _get_parser as delayvar_getparser
29
+ from rapidtide.workflows.diffrois import _get_parser as diffrois_getparser
30
+ from rapidtide.workflows.endtidalproc import _get_parser as endtidalproc_getparser
31
+ from rapidtide.workflows.fdica import _get_parser as fdica_getparser
32
+ from rapidtide.workflows.filtnifti import _get_parser as filtnifti_getparser
33
+ from rapidtide.workflows.filttc import _get_parser as filttc_getparser
34
+ from rapidtide.workflows.fixtr import _get_parser as fixtr_getparser
35
+ from rapidtide.workflows.gmscalc import _get_parser as gmscalc_getparser
36
+ from rapidtide.workflows.happy_parser import _get_parser as happy_parser_getparser
37
+ from rapidtide.workflows.happy2std import _get_parser as happy2std_getparser
38
+ from rapidtide.workflows.histnifti import _get_parser as histnifti_getparser
39
+ from rapidtide.workflows.histtc import _get_parser as histtc_getparser
40
+ from rapidtide.workflows.linfitfilt import _get_parser as linfitfilt_getparser
41
+ from rapidtide.workflows.localflow import _get_parser as localflow_getparser
42
+ from rapidtide.workflows.mergequality import _get_parser as mergequality_getparser
43
+ from rapidtide.workflows.niftidecomp import _get_parser_temporal as niftidecomp_getparser_temporal
44
+ from rapidtide.workflows.niftidecomp import _get_parser_spatial as niftidecomp_getparser_spatial
45
+ from rapidtide.workflows.niftistats import _get_parser as niftistats_getparser
46
+ from rapidtide.workflows.pairproc import _get_parser as pairproc_getparser
47
+ from rapidtide.workflows.pairwisemergenifti import _get_parser as pairwisemergenifti_getparser
48
+ from rapidtide.workflows.physiofreq import _get_parser as physiofreq_getparser
49
+ from rapidtide.workflows.pixelcomp import _get_parser as pixelcomp_getparser
50
+ from rapidtide.workflows.plethquality import _get_parser as plethquality_getparser
51
+ from rapidtide.workflows.polyfitim import _get_parser as polyfitim_getparser
52
+ from rapidtide.workflows.proj2flow import _get_parser as proj2flow_getparser
53
+ from rapidtide.workflows.rankimage import _get_parser as rankimage_getparser
54
+ from rapidtide.workflows.rapidtide2std import _get_parser as rapidtide2std_getparser
55
+ from rapidtide.workflows.resamplenifti import _get_parser as resamplenifti_getparser
56
+ from rapidtide.workflows.resampletc import _get_parser as resampletc_getparser
57
+ from rapidtide.workflows.retrolagtcs import _get_parser as retrolagtcs_getparser
58
+ from rapidtide.workflows.retroregress import _get_parser as retroregress_getparser
59
+ from rapidtide.workflows.roisummarize import _get_parser as roisummarize_getparser
60
+ from rapidtide.workflows.runqualitycheck import _get_parser as runqualitycheck_getparser
61
+ from rapidtide.workflows.showarbcorr import _get_parser as showarbcorr_getparser
62
+ from rapidtide.workflows.showhist import _get_parser as showhist_getparser
63
+ from rapidtide.workflows.showstxcorr import _get_parser as showstxcorr_getparser
64
+ from rapidtide.workflows.showtc import _get_parser as showtc_getparser
65
+ from rapidtide.workflows.showxcorrx import _get_parser as showxcorrx_getparser
66
+ from rapidtide.workflows.showxy import _get_parser as showxy_getparser
67
+ from rapidtide.workflows.simdata import _get_parser as simdata_getparser
68
+ from rapidtide.workflows.spatialfit import _get_parser as spatialfit_getparser
69
+ from rapidtide.workflows.spatialmi import _get_parser as spatialmi_getparser
70
+ from rapidtide.workflows.spectrogram import _get_parser as spectrogram_getparser
71
+ from rapidtide.workflows.synthASL import _get_parser as synthASL_getparser
72
+ from rapidtide.workflows.tcfrom2col import _get_parser as tcfrom2col_getparser
73
+ from rapidtide.workflows.tcfrom3col import _get_parser as tcfrom3col_getparser
74
+ from rapidtide.workflows.variabilityizer import _get_parser as variabilityizer_getparser
75
+
76
+
77
+ def test_parsers(debug=False):
78
+ parserlist = [ adjustoffset_getparser,
79
+ aligntcs_getparser,
80
+ applydlfilter_getparser,
81
+ atlasaverage_getparser,
82
+ atlastool_getparser,
83
+ calctexticc_getparser,
84
+ ccorrica_getparser,
85
+ delayvar_getparser,
86
+ diffrois_getparser,
87
+ endtidalproc_getparser,
88
+ fdica_getparser,
89
+ filtnifti_getparser,
90
+ filttc_getparser,
91
+ fixtr_getparser,
92
+ gmscalc_getparser,
93
+ happy_parser_getparser,
94
+ happy2std_getparser,
95
+ histnifti_getparser,
96
+ histtc_getparser,
97
+ linfitfilt_getparser,
98
+ localflow_getparser,
99
+ mergequality_getparser,
100
+ niftidecomp_getparser_temporal,
101
+ niftidecomp_getparser_spatial,
102
+ niftistats_getparser,
103
+ pairproc_getparser,
104
+ pairwisemergenifti_getparser,
105
+ physiofreq_getparser,
106
+ pixelcomp_getparser,
107
+ plethquality_getparser,
108
+ polyfitim_getparser,
109
+ proj2flow_getparser,
110
+ rankimage_getparser,
111
+ rapidtide2std_getparser,
112
+ resamplenifti_getparser,
113
+ resampletc_getparser,
114
+ retrolagtcs_getparser,
115
+ retroregress_getparser,
116
+ roisummarize_getparser,
117
+ runqualitycheck_getparser,
118
+ showarbcorr_getparser,
119
+ showhist_getparser,
120
+ showstxcorr_getparser,
121
+ showtc_getparser,
122
+ showxcorrx_getparser,
123
+ showxy_getparser,
124
+ simdata_getparser,
125
+ spatialfit_getparser,
126
+ spatialmi_getparser,
127
+ spectrogram_getparser,
128
+ synthASL_getparser,
129
+ tcfrom2col_getparser,
130
+ tcfrom3col_getparser,
131
+ variabilityizer_getparser ]
132
+
133
+ for thegetparser in parserlist:
134
+ theusage = thegetparser().format_help()
135
+ if debug:
136
+ print(theusage)
137
+
138
+
139
+ if __name__ == "__main__":
140
+ test_parsers(debug=True)
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ #
4
+ # Copyright 2016-2025 Blaise Frederick
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+ #
19
+ import os
20
+ import argparse
21
+ import rapidtide.workflows.parser_funcs as pf
22
+ from rapidtide.tests.utils import get_examples_path, get_test_temp_path
23
+
24
+ def _get_parser():
25
+ """
26
+ Argument parser for adjust offset
27
+ """
28
+ parser = argparse.ArgumentParser(
29
+ prog="dummy",
30
+ description="dummy",
31
+ allow_abbrev=False,
32
+ )
33
+
34
+ # Required arguments
35
+ parser.add_argument(
36
+ "inputmap",
37
+ type=lambda x: pf.is_valid_file(parser, x),
38
+ help="The name of the rapidtide maxtime map.",
39
+ )
40
+
41
+ return parser
42
+
43
+
44
+ def test_parserfuncs(debug=False, local=False, displayplots=False):
45
+ # set input and output directories
46
+ if local:
47
+ exampleroot = "../data/examples/src"
48
+ testtemproot = "./tmp"
49
+ else:
50
+ exampleroot = get_examples_path()
51
+ testtemproot = get_test_temp_path()
52
+
53
+
54
+ theparser = _get_parser()
55
+
56
+ filename = os.path.join(exampleroot,"sub-RAPIDTIDETEST_desc-oversampledmovingregressor_timeseries.json")
57
+ retval = pf.is_valid_file(theparser, filename)
58
+ print(filename, retval)
59
+
60
+ #filename = os.path.join(exampleroot,"sub-RAPIDTIDETEST_desc-oversampledmovingregressor_timeseriesxyz.json")
61
+ #retval = pf.is_valid_file(theparser, filename)
62
+ #print(filename, retval)
63
+
64
+ filename = os.path.join(exampleroot,"sub-RAPIDTIDETEST_desc-oversampledmovingregressor_timeseries.json:acolname")
65
+ retval = pf.is_valid_file(theparser, filename)
66
+ print(filename, retval)
67
+
68
+
69
+ if __name__ == "__main__":
70
+ test_parserfuncs(debug=True, local=True, displayplots=True)
@@ -59,7 +59,9 @@ def main(runninglocally=False):
59
59
  verbose=verbose,
60
60
  )
61
61
 
62
+ print("getting overlays")
62
63
  theoverlays = thesubject.getoverlays()
64
+ print("getting regressors")
63
65
  theregressors = thesubject.getregressors()
64
66
 
65
67
  assert thesubject.focusregressor == "prefilt"
@@ -3463,7 +3463,7 @@ def rapidtide_main(argparsingfunc):
3463
3463
  cifti_hdr=theinputdata.cifti_hdr,
3464
3464
  )
3465
3465
 
3466
- if optiondict["refinedelay"] and False:
3466
+ if optiondict["refinedelay"]:
3467
3467
  # filter the fmri data to the lfo band
3468
3468
  print("filtering fmri_data to sLFO band")
3469
3469
  for i in range(fmri_data_valid.shape[0]):
@@ -3504,7 +3504,13 @@ def rapidtide_main(argparsingfunc):
3504
3504
  )
3505
3505
 
3506
3506
  maplist = [
3507
- (rvalue, "maxcorralt", "map", None, "R value of the inband sLFO fit, with sign"),
3507
+ (
3508
+ rvalue,
3509
+ "maxcorrrefined",
3510
+ "map",
3511
+ None,
3512
+ "R value of the inband sLFO fit, with sign",
3513
+ ),
3508
3514
  ]
3509
3515
 
3510
3516
  tide_io.savemaplist(
@@ -187,8 +187,10 @@ def rapidtide2std(args):
187
187
 
188
188
  thefmrimaps = [
189
189
  "desc-maxtime_map",
190
+ "desc-maxtimerefined_map",
190
191
  "desc-timepercentile_map",
191
192
  "desc-maxcorr_map",
193
+ "desc-maxcorrrefined_map",
192
194
  "desc-maxwidth_map",
193
195
  "desc-MTT_map",
194
196
  "desc-corrfit_mask",
@@ -20,6 +20,7 @@ import argparse
20
20
  import copy
21
21
  import logging
22
22
  import os
23
+ import platform
23
24
  import sys
24
25
  import time
25
26
  from pathlib import Path
@@ -163,13 +164,13 @@ def _get_parser():
163
164
  default=True,
164
165
  )
165
166
  parser.add_argument(
166
- "--refinecorr",
167
+ "--norefinecorr",
167
168
  dest="refinecorr",
168
- action="store_true",
169
+ action="store_false",
169
170
  help=(
170
- "Recalculate the maxcorr map using GLM coefficient of determination from bandpassed data."
171
+ "Don't recalculate the maxcorr map using GLM coefficient of determination from bandpassed data."
171
172
  ),
172
- default=False,
173
+ default=True,
173
174
  )
174
175
  parser.add_argument(
175
176
  "--nofilterwithrefineddelay",
@@ -819,6 +820,10 @@ def retroregress(args):
819
820
  ]
820
821
  anatomicmasks = []
821
822
  for thisanatomic in anatomiclist:
823
+ try:
824
+ thename = therunoptions[thisanatomic[0]]
825
+ except KeyError:
826
+ therunoptions[thisanatomic[0]] = None
822
827
  if therunoptions[thisanatomic[0]] is not None:
823
828
  anatomicmasks.append(
824
829
  tide_mask.readamask(
@@ -1237,13 +1242,13 @@ def retroregress(args):
1237
1242
  TimingLGR.info("Finishing output save")
1238
1243
 
1239
1244
  if args.refinecorr:
1240
- TimingLGR.info("Filtering for maxcorralt calculation start")
1245
+ TimingLGR.info("Filtering for maxcorrrefined calculation start")
1241
1246
  for thevoxel in range(fmri_data_valid.shape[0]):
1242
1247
  fmri_data_valid[thevoxel, :] = theprefilter.apply(
1243
1248
  1.0 / fmritr, fmri_data_valid[thevoxel, :]
1244
1249
  )
1245
- TimingLGR.info("Filtering for maxcorralt calculation complete")
1246
- TimingLGR.info("GLM for maxcorralt calculation start")
1250
+ TimingLGR.info("Filtering for maxcorrrefined calculation complete")
1251
+ TimingLGR.info("GLM for maxcorrrefined calculation start")
1247
1252
  voxelsprocessed_regressionfilt, regressorset, evset = (
1248
1253
  tide_regressfrommaps.regressfrommaps(
1249
1254
  fmri_data_valid,
@@ -1275,7 +1280,7 @@ def retroregress(args):
1275
1280
  )
1276
1281
  )
1277
1282
  TimingLGR.info(
1278
- "GLM for maxcorralt calculation done",
1283
+ "GLM for maxcorrrefined calculation done",
1279
1284
  {
1280
1285
  "message2": voxelsprocessed_regressionfilt,
1281
1286
  "message3": "voxels",
@@ -1285,7 +1290,7 @@ def retroregress(args):
1285
1290
  maplist = [
1286
1291
  (
1287
1292
  rvalue,
1288
- "maxcorralt",
1293
+ "maxcorrrefined",
1289
1294
  "map",
1290
1295
  None,
1291
1296
  "R value for the lfo component of the delayed regressor, with sign",
@@ -1385,6 +1390,14 @@ def retroregress(args):
1385
1390
  therunoptions["retroregress_runtime"] = time.strftime(
1386
1391
  "%a, %d %b %Y %H:%M:%S %Z", time.localtime(time.time())
1387
1392
  )
1393
+ (
1394
+ therunoptions["retroregress_release_version"],
1395
+ therunoptions["retroregress_git_sha"],
1396
+ therunoptions["retroregress_git_date"],
1397
+ therunoptions["retroregress_git_isdirty"],
1398
+ ) = tide_util.version()
1399
+ therunoptions["retroregress_python_version"] = str(sys.version_info)
1400
+ therunoptions["retroregress_nodename"] = platform.node()
1388
1401
 
1389
1402
  # clean up shared memory
1390
1403
  if usesharedmem:
@@ -1982,6 +1982,12 @@ def tidepool(args):
1982
1982
  "display": True,
1983
1983
  "funcmask": "p_lt_0p050_mask",
1984
1984
  },
1985
+ "lagstrengthsrefined": {
1986
+ "colormap": gen_thermal_state(),
1987
+ "label": "Refined similarity coefficient",
1988
+ "display": True,
1989
+ "funcmask": "p_lt_0p050_mask",
1990
+ },
1985
1991
  "lagsigma": {
1986
1992
  "colormap": gen_plasma_state(),
1987
1993
  "label": "Similarity width",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rapidtide
3
- Version: 3.0.3
3
+ Version: 3.0.4
4
4
  Summary: Tools for performing correlation analysis on fMRI data.
5
5
  Author: Taylor Salo, Daniel M. Drucker, Ph.D., Jeffrey N Stout, Yaroslav O. Halchenko, Derek Monroe
6
6
  Author-email: "Blaise deB. Frederick" <blaise.frederick@gmail.com>
@@ -9,10 +9,10 @@ cloud/simple-cp-test,sha256=5ef8wmLfcKdny59BV6_DnAPj7O_mi0rOHdFZVN2iiLA,421
9
9
  rapidtide/Colortables.py,sha256=OVtgnQ9xTJPgfdyK1ktESHRjBh09cxLVPZvgUvV5jOo,5814
10
10
  rapidtide/DerivativeDelay.py,sha256=B3ElHcaAvxH3qB0n6l4rIX5FXsRHp_PE_H3ky-5XdoQ,7107
11
11
  rapidtide/OrthoImageItem.py,sha256=w70QNZUelMI7wTWYaqOfkJEb38PdsxgSf0NLdyjlcNs,21669
12
- rapidtide/RapidtideDataset.py,sha256=BdchNX8aqcPW8dmjJQPNnmAYX0wFMMIJCLdVG3EokT4,52241
12
+ rapidtide/RapidtideDataset.py,sha256=sccBQf8T9zvOMSHHXG7pwEm-sUyzbyZ4i0rFuWMwj3A,52343
13
13
  rapidtide/RegressorRefiner.py,sha256=dPG9Vy2nlqxv2Mx9vrYtgYTsNGcVIwWknawDrNdpZxQ,17232
14
14
  rapidtide/__init__.py,sha256=cECnPfGNIWXETiummGLjKcNXLROSDiFlLp-RpZSavwc,97
15
- rapidtide/_version.py,sha256=w4vUyi4REvA9LeJul_uv8AcuFACKR4WIGQRoh2xocL8,24506
15
+ rapidtide/_version.py,sha256=0MHhgNI7KG1HtW-Vg40MoyavbE1Adm-tJtYun_DiOpY,497
16
16
  rapidtide/calcandfitcorrpairs.py,sha256=dlKxjKSlgCF9AF_dRoPeIGc9dz1DIluYfKLQzTSQsd0,7397
17
17
  rapidtide/calccoherence.py,sha256=VayovUVA5X-eWmjJG0GNxI_Giw7vRjTDFvWcV6NVfq0,4512
18
18
  rapidtide/calcnullsimfunc.py,sha256=92q7Yw8VeSjA9UfcD-hHN9MgoaUcoKuR9VGBmt_n45M,7150
@@ -25,7 +25,7 @@ rapidtide/filter.py,sha256=GySR0UdlrfNzWs9HOdvsIGlfHKThT9KdamNk0Y0JHeU,71647
25
25
  rapidtide/fit.py,sha256=whveHKtqC-cPWxclCf86-5iBAtXOdXL2G1yg082q6R8,67955
26
26
  rapidtide/happy_supportfuncs.py,sha256=NlcZdD7wXQ65xYaB_t035PeSBC-FxbTy6x4B272q5x0,41968
27
27
  rapidtide/helper_classes.py,sha256=2m2zcFUgE12JhYL0HQJEafJ1pFa0Zsb46Lpi9iw3Qbg,51470
28
- rapidtide/io.py,sha256=nHhCJCiL_XgB5DY75_64cx6dYq1muohfrTZUlh5fVD8,74812
28
+ rapidtide/io.py,sha256=mhfQpH4lD8lFIkbPRXuG7p2h9IFRWWENWcY-x9mdfIA,74919
29
29
  rapidtide/linfitfiltpass.py,sha256=fR8vQQrH8yfXyaMNNsELA7xCv_Ro7qpZSXX_PbIFtx0,16142
30
30
  rapidtide/makelaggedtcs.py,sha256=XC0-tTKfcV4qQeoOlF3PiAdbvMuDZetrifsmWc0wQTw,3998
31
31
  rapidtide/maskutil.py,sha256=IBEgxmHvQ2fnBoTeFu7vw_w3uf91NxpW3IgTDirhWH0,10890
@@ -235,13 +235,14 @@ rapidtide/tests/test_fullrunhappy_v2.py,sha256=KvibzQKw3HceMAltX19ZzgxtJ5w4LdKci
235
235
  rapidtide/tests/test_fullrunhappy_v3.py,sha256=Oy2UoFy4Tiye0fNuSsh9bF4PlclGHc6oGlKCoAdCOXc,1950
236
236
  rapidtide/tests/test_fullrunhappy_v4.py,sha256=n3LylIDexTly06sk5TUnrQhfizkf98Mo4VEaw3uNkr4,1960
237
237
  rapidtide/tests/test_fullrunhappy_v5.py,sha256=BK240KjaJs9mHFgTmsDjCW3miBd4dDTn6qZxAYD3HTA,1896
238
- rapidtide/tests/test_fullrunrapidtide_v1.py,sha256=42alaL-si5kPrtE-9QZ-zgCV__YsHxjqVoxidn65qdA,3162
238
+ rapidtide/tests/test_fullrunrapidtide_v1.py,sha256=XhMjNG0EIyzGnGaI6Q_imSkjFDyScx1y-bwAWBlzC2w,3095
239
239
  rapidtide/tests/test_fullrunrapidtide_v2.py,sha256=KOuKoY5-Ryry7rlpIp-OzmCW2rYqGMIDa6JYqt57Tjk,3138
240
240
  rapidtide/tests/test_fullrunrapidtide_v3.py,sha256=i9RZCJ7ZieYnH0eIC38FuyN_uV9stDwuPuUoSVKJzXo,2889
241
241
  rapidtide/tests/test_fullrunrapidtide_v4.py,sha256=DTEom1FPHn21WZZveiCCf4L_NabR9BMzLNoAA8RuDv0,2118
242
242
  rapidtide/tests/test_fullrunrapidtide_v5.py,sha256=NzTYGXaWsJzd7uIIgom_NPwl3EmGCRxlylaUEVN3gxU,1779
243
243
  rapidtide/tests/test_fullrunrapidtide_v6.py,sha256=qjxniiLjkA8sFK3_spNpF13PsN_6ONTB8VtcSYAZ_a0,4368
244
244
  rapidtide/tests/test_fullrunrapidtide_v7.py,sha256=MKZ1Xi2pl04eb-cdxe6BeWkKqFWFTXAPZu3L_s7QNJk,4250
245
+ rapidtide/tests/test_getparsers.py,sha256=kSloiKUsoWSQnaHdCKYPUPmXX31KlmRXtUQyveW7Sxk,6830
245
246
  rapidtide/tests/test_io.py,sha256=bNl-Aa8JfBkghA8OmVKPcjO-YGGQmXEp-1d29peWszc,17093
246
247
  rapidtide/tests/test_linfitfiltpass.py,sha256=Q_XbDujj4tGc3X_I37IJJBDsvAs0m-S_oU8WG7DcGKU,5554
247
248
  rapidtide/tests/test_mi.py,sha256=Yia_TE1VxQfT0cZFdwsw6pb2l5E3PmY89zhKSfKus3g,2272
@@ -249,6 +250,7 @@ rapidtide/tests/test_miscmath.py,sha256=Kng7InnANKQeWPlY0ZwdIQnYT79U6sNH1w63pCx1
249
250
  rapidtide/tests/test_motionregress.py,sha256=HS8Ph4-5owWp8oK6bwdy1FelJxDA0FE045JUnitth-4,5588
250
251
  rapidtide/tests/test_nullcorr.py,sha256=cs39wIW8anDQMg13EtTQf_5kr7yT9SSSSve9_7QWm34,6446
251
252
  rapidtide/tests/test_padvec.py,sha256=41Pnm5zJkWeOXbM0dngS7mRkGwJ4es4O5aiEQ8YJ3rs,6728
253
+ rapidtide/tests/test_parserfuncs.py,sha256=moebtQVwiQ_g0XMmaiAY-wnO9rcSEby6V66PBrM42NY,2203
252
254
  rapidtide/tests/test_phaseanalysis.py,sha256=6d9nuSsVLjHW1br2BXvJxVQMjFcbuUuYGNjt3t7-odk,2150
253
255
  rapidtide/tests/test_rapidtideparser.py,sha256=Dmf_48Kgw9UW2L5pr8bVT1j5rBx__veAdiaAmYpIYCQ,5555
254
256
  rapidtide/tests/test_refinedelay.py,sha256=PNDbnmyRvogCZGiq08MtCsPWWJtLB9zzLXk0fvjmYm8,8473
@@ -258,7 +260,7 @@ rapidtide/tests/test_simulate.py,sha256=9zLY3PxmLgXdQcDHX5B0INyhhB_KOjwpBZkIEDVc
258
260
  rapidtide/tests/test_stcorrelate.py,sha256=ExYA58MDvJt3qGZAbEHSg-aMKtIKAX_zTacxiA0mttE,2493
259
261
  rapidtide/tests/test_timeshift.py,sha256=J4aLZI0ZvnB-vJZEAqwrcsarGRfKkKSY7IToyuhlqcg,3045
260
262
  rapidtide/tests/test_valtoindex.py,sha256=z-_m8d4Zo5pMeH2-vOhFM62hD4M7zcNx8rMrFA78fTI,1179
261
- rapidtide/tests/test_zRapidtideDataset.py,sha256=omevoP3Al73Y59--XVP7kMY584B0c5ANxJcVtQ_5rg4,2168
263
+ rapidtide/tests/test_zRapidtideDataset.py,sha256=kR0ILh_F7lmcBLaPYxLvjOyzUrUnwZF3iLyezLbgCsI,2230
262
264
  rapidtide/tests/usercustomize.py,sha256=iP8Vh35CixAbBD5He7gjQwmqYGItRGoNS_OD4sdDEe8,159
263
265
  rapidtide/tests/utils.py,sha256=qs3GlHZjfMXLgtdXfA-nIIoyWAKbpvTwxB_ZcyTvYnA,3254
264
266
  rapidtide/tests/testdata/100206_REST1_LR_cardfromfmri_25.0Hz.txt,sha256=w_ocCt0muJse-VZvqzPIBiveBo0Rp2sjoSP04Am0vgM,423304
@@ -321,14 +323,14 @@ rapidtide/workflows/plethquality.py,sha256=kTO74C5aSBmomzt59zs1VeiO_C5SPTxvyZZ0v
321
323
  rapidtide/workflows/polyfitim.py,sha256=bVKBrrFa0WjWZju4Lkrr8_9mFWALqCxkpCX28540GQA,10184
322
324
  rapidtide/workflows/proj2flow.py,sha256=SbkYTRZ_SViVfiM0QJjo20RrICtbsQpEd2i9o9XDgPU,7290
323
325
  rapidtide/workflows/rankimage.py,sha256=9opJb3OikO69wtN8zgF3XJxgoHy1-erzZiDKs8pDM6U,3482
324
- rapidtide/workflows/rapidtide.py,sha256=S91w9i1Gy_p9wBFxTzj-8dzcZDlsST1K0JcOYandVDk,153872
325
- rapidtide/workflows/rapidtide2std.py,sha256=8i1M5hKikYFA1JcrMYYqLRVgy0Mo7kwHUqImliO6c_0,10413
326
+ rapidtide/workflows/rapidtide.py,sha256=KdSgXM6PFA7ZScSlW3oqV7iD7XNViqul1dSP8V_SWNw,153985
327
+ rapidtide/workflows/rapidtide2std.py,sha256=coxEnRAof6NNpeXjjECPazx5Wotf4l1SJCnaVEvmHQY,10483
326
328
  rapidtide/workflows/rapidtide_parser.py,sha256=gJ9YPEi7dwkaw04jsfzqTI3W2GJDtaP8MSZhDqX4Cpk,78250
327
329
  rapidtide/workflows/regressfrommaps.py,sha256=2qkD6e3wJ7Wo4M3xsQBHGOlzoZkz6IJv8vT92kv5RZE,5355
328
330
  rapidtide/workflows/resamplenifti.py,sha256=GJE7f8bzMRY3QYiMYZOD8bDnga4ah97sp-ZL3yaaIFA,4717
329
331
  rapidtide/workflows/resampletc.py,sha256=B4YIKn3qpDaM9dIhYjGwPl-2LtaEhm9fnMBzfBgAUSs,3959
330
332
  rapidtide/workflows/retrolagtcs.py,sha256=ep1Ve1GS9NqqE6Pw9kxeWyw78sEg-M1IV-KuSnivd7Y,10847
331
- rapidtide/workflows/retroregress.py,sha256=7mCtv7A0YulQPQUIUc1ebE0DbT9pxiEDewK0guJUF1Q,52061
333
+ rapidtide/workflows/retroregress.py,sha256=sd7L_ri8av1euINcpKLgokrPGQo7QKQDguf0OWL8xD0,52631
332
334
  rapidtide/workflows/roisummarize.py,sha256=gnGcWOXRgRm6USgilj9K9Q3Mt5oUNCaincvJj1_ayPs,6710
333
335
  rapidtide/workflows/runqualitycheck.py,sha256=JIA2olhDk66HHSbLvsFrZieQq56YCIpbWpFzz0_ShHM,2434
334
336
  rapidtide/workflows/showarbcorr.py,sha256=mJpF2wSaMNw_jPZv4ru4x9x-rIOTDAABYZw7ZYesjF8,13606
@@ -344,12 +346,12 @@ rapidtide/workflows/spectrogram.py,sha256=7_CzFgX9ppE_2C4GiSP235BRUoh3YspCR_57_5
344
346
  rapidtide/workflows/synthASL.py,sha256=v4zkfrXbb6Y06IsAhSm3ZmL4UTPYWaK3vPnP3bKr-co,4971
345
347
  rapidtide/workflows/tcfrom2col.py,sha256=o7IEQ-YqN_VDu-f_9lme4DtSn8EbYCK5TCwGBGGr0YY,1936
346
348
  rapidtide/workflows/tcfrom3col.py,sha256=kV3V-qZ7A7LkD96aHVXabvohA8udsflHXnzsQIwiKug,1938
347
- rapidtide/workflows/tidepool.py,sha256=v67ONVgAv_CguVLmcvVu7g6SzG3uPwvBp-JhrB7xWPk,86396
349
+ rapidtide/workflows/tidepool.py,sha256=Cac0zhS2ZT6myY_H2A0dAIox8ZoFyf42iB3flSb0qbw,86612
348
350
  rapidtide/workflows/utils.py,sha256=urIN-042oUCRDusVUSjBelVN3Te2JP3svY3ckq-yBMU,5379
349
351
  rapidtide/workflows/variabilityizer.py,sha256=h7Hhrxn84MclRfbAvKIZJoNzlcKO-8d9lZ6y6YFStk8,3167
350
- rapidtide-3.0.3.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
351
- rapidtide-3.0.3.dist-info/METADATA,sha256=xVmotT3otkMEGyBKu2FoqxtEgVbeoq_81f-f8YSbAck,15688
352
- rapidtide-3.0.3.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
353
- rapidtide-3.0.3.dist-info/entry_points.txt,sha256=9NVvZpIx9U6lTWlTFF2ev-wuPAHJxcXI_901_EcGRYA,3323
354
- rapidtide-3.0.3.dist-info/top_level.txt,sha256=MnNXGfbrIBc9RnAqzBHOWd3GQO-aIUDnRTz4_5VjH5g,16
355
- rapidtide-3.0.3.dist-info/RECORD,,
352
+ rapidtide-3.0.4.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
353
+ rapidtide-3.0.4.dist-info/METADATA,sha256=W5hEm79xTNzz1vj8p1TfVUWbbB_hcxshHUKx1Morpu4,15688
354
+ rapidtide-3.0.4.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
355
+ rapidtide-3.0.4.dist-info/entry_points.txt,sha256=9NVvZpIx9U6lTWlTFF2ev-wuPAHJxcXI_901_EcGRYA,3323
356
+ rapidtide-3.0.4.dist-info/top_level.txt,sha256=MnNXGfbrIBc9RnAqzBHOWd3GQO-aIUDnRTz4_5VjH5g,16
357
+ rapidtide-3.0.4.dist-info/RECORD,,