scitex 2.11.0__py3-none-any.whl → 2.13.0__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.
- scitex/__main__.py +24 -5
- scitex/__version__.py +1 -1
- scitex/_optional_deps.py +33 -0
- scitex/ai/classification/reporters/_ClassificationReporter.py +1 -1
- scitex/ai/classification/timeseries/_TimeSeriesBlockingSplit.py +2 -2
- scitex/ai/classification/timeseries/_TimeSeriesCalendarSplit.py +2 -2
- scitex/ai/classification/timeseries/_TimeSeriesSlidingWindowSplit.py +2 -2
- scitex/ai/classification/timeseries/_TimeSeriesSlidingWindowSplit_v01-not-using-n_splits.py +2 -2
- scitex/ai/classification/timeseries/_TimeSeriesStratifiedSplit.py +2 -2
- scitex/ai/classification/timeseries/_normalize_timestamp.py +1 -1
- scitex/ai/metrics/_calc_seizure_prediction_metrics.py +1 -1
- scitex/ai/plt/_plot_feature_importance.py +1 -1
- scitex/ai/plt/_plot_learning_curve.py +1 -1
- scitex/ai/plt/_plot_optuna_study.py +1 -1
- scitex/ai/plt/_plot_pre_rec_curve.py +1 -1
- scitex/ai/plt/_plot_roc_curve.py +1 -1
- scitex/ai/plt/_stx_conf_mat.py +1 -1
- scitex/ai/training/_LearningCurveLogger.py +1 -1
- scitex/audio/mcp_server.py +38 -8
- scitex/browser/automation/CookieHandler.py +1 -1
- scitex/browser/core/BrowserMixin.py +1 -1
- scitex/browser/core/ChromeProfileManager.py +1 -1
- scitex/browser/debugging/_browser_logger.py +1 -1
- scitex/browser/debugging/_highlight_element.py +1 -1
- scitex/browser/debugging/_show_grid.py +1 -1
- scitex/browser/interaction/click_center.py +1 -1
- scitex/browser/interaction/click_with_fallbacks.py +1 -1
- scitex/browser/interaction/close_popups.py +1 -1
- scitex/browser/interaction/fill_with_fallbacks.py +1 -1
- scitex/browser/pdf/click_download_for_chrome_pdf_viewer.py +1 -1
- scitex/browser/pdf/detect_chrome_pdf_viewer.py +1 -1
- scitex/browser/stealth/HumanBehavior.py +1 -1
- scitex/browser/stealth/StealthManager.py +1 -1
- scitex/canvas/_mcp_handlers.py +372 -0
- scitex/canvas/_mcp_tool_schemas.py +219 -0
- scitex/canvas/mcp_server.py +151 -0
- scitex/capture/mcp_server.py +41 -12
- scitex/cli/audio.py +233 -0
- scitex/cli/capture.py +307 -0
- scitex/cli/main.py +27 -4
- scitex/cli/repro.py +233 -0
- scitex/cli/resource.py +240 -0
- scitex/cli/stats.py +325 -0
- scitex/cli/template.py +236 -0
- scitex/cli/tex.py +286 -0
- scitex/cli/web.py +11 -12
- scitex/dev/__init__.py +3 -0
- scitex/dev/_pyproject.py +405 -0
- scitex/dev/plt/__init__.py +2 -2
- scitex/dev/plt/mpl/get_dir_ax.py +1 -1
- scitex/dev/plt/mpl/get_signatures.py +1 -1
- scitex/dev/plt/mpl/get_signatures_details.py +1 -1
- scitex/diagram/_mcp_handlers.py +400 -0
- scitex/diagram/_mcp_tool_schemas.py +157 -0
- scitex/diagram/mcp_server.py +151 -0
- scitex/dsp/_demo_sig.py +51 -5
- scitex/dsp/_mne.py +13 -2
- scitex/dsp/_modulation_index.py +15 -3
- scitex/dsp/_pac.py +23 -5
- scitex/dsp/_psd.py +16 -4
- scitex/dsp/_resample.py +24 -4
- scitex/dsp/_transform.py +16 -3
- scitex/dsp/add_noise.py +15 -1
- scitex/dsp/norm.py +17 -2
- scitex/dsp/reference.py +17 -1
- scitex/dsp/utils/_differential_bandpass_filters.py +20 -2
- scitex/dsp/utils/_zero_pad.py +18 -4
- scitex/dt/_normalize_timestamp.py +1 -1
- scitex/git/_session.py +1 -1
- scitex/io/_load_modules/_con.py +12 -1
- scitex/io/_load_modules/_eeg.py +12 -1
- scitex/io/_load_modules/_optuna.py +21 -63
- scitex/io/_load_modules/_torch.py +11 -3
- scitex/io/_save_modules/_optuna_study_as_csv_and_pngs.py +13 -2
- scitex/io/_save_modules/_torch.py +11 -3
- scitex/mcp_server.py +159 -0
- scitex/plt/_mcp_handlers.py +361 -0
- scitex/plt/_mcp_tool_schemas.py +169 -0
- scitex/plt/mcp_server.py +205 -0
- scitex/repro/README_RandomStateManager.md +3 -3
- scitex/repro/_RandomStateManager.py +14 -14
- scitex/repro/_gen_ID.py +1 -1
- scitex/repro/_gen_timestamp.py +1 -1
- scitex/repro/_hash_array.py +4 -4
- scitex/scholar/__main__.py +24 -2
- scitex/scholar/_mcp_handlers.py +685 -0
- scitex/scholar/_mcp_tool_schemas.py +339 -0
- scitex/scholar/docs/template.py +1 -1
- scitex/scholar/examples/07_storage_integration.py +1 -1
- scitex/scholar/impact_factor/jcr/ImpactFactorJCREngine.py +1 -1
- scitex/scholar/impact_factor/jcr/build_database.py +1 -1
- scitex/scholar/mcp_server.py +315 -0
- scitex/scholar/pdf_download/ScholarPDFDownloader.py +1 -1
- scitex/scholar/pipelines/ScholarPipelineBibTeX.py +1 -1
- scitex/scholar/pipelines/ScholarPipelineParallel.py +1 -1
- scitex/scholar/pipelines/ScholarPipelineSingle.py +1 -1
- scitex/scholar/storage/PaperIO.py +1 -1
- scitex/session/README.md +4 -4
- scitex/session/__init__.py +1 -1
- scitex/session/_decorator.py +9 -9
- scitex/session/_lifecycle.py +5 -5
- scitex/session/template.py +1 -1
- scitex/stats/__main__.py +281 -0
- scitex/stats/_mcp_handlers.py +1191 -0
- scitex/stats/_mcp_tool_schemas.py +384 -0
- scitex/stats/correct/_correct_bonferroni.py +1 -1
- scitex/stats/correct/_correct_fdr.py +1 -1
- scitex/stats/correct/_correct_fdr_.py +1 -1
- scitex/stats/correct/_correct_holm.py +1 -1
- scitex/stats/correct/_correct_sidak.py +1 -1
- scitex/stats/effect_sizes/_cliffs_delta.py +1 -1
- scitex/stats/effect_sizes/_cohens_d.py +1 -1
- scitex/stats/effect_sizes/_epsilon_squared.py +1 -1
- scitex/stats/effect_sizes/_eta_squared.py +1 -1
- scitex/stats/effect_sizes/_prob_superiority.py +1 -1
- scitex/stats/mcp_server.py +405 -0
- scitex/stats/posthoc/_dunnett.py +1 -1
- scitex/stats/posthoc/_games_howell.py +1 -1
- scitex/stats/posthoc/_tukey_hsd.py +1 -1
- scitex/stats/power/_power.py +1 -1
- scitex/stats/utils/_effect_size.py +1 -1
- scitex/stats/utils/_formatters.py +1 -1
- scitex/stats/utils/_power.py +1 -1
- scitex/template/_mcp_handlers.py +259 -0
- scitex/template/_mcp_tool_schemas.py +112 -0
- scitex/template/mcp_server.py +186 -0
- scitex/utils/_verify_scitex_format.py +2 -2
- scitex/utils/template.py +1 -1
- scitex/web/__init__.py +12 -11
- scitex/web/_scraping.py +26 -265
- scitex/web/download_images.py +316 -0
- scitex/writer/Writer.py +1 -1
- scitex/writer/_clone_writer_project.py +1 -1
- scitex/writer/_validate_tree_structures.py +1 -1
- scitex/writer/dataclasses/config/_WriterConfig.py +1 -1
- scitex/writer/dataclasses/contents/_ManuscriptContents.py +1 -1
- scitex/writer/dataclasses/core/_Document.py +1 -1
- scitex/writer/dataclasses/core/_DocumentSection.py +1 -1
- scitex/writer/dataclasses/results/_CompilationResult.py +1 -1
- scitex/writer/dataclasses/results/_LaTeXIssue.py +1 -1
- scitex/writer/utils/.legacy_git_retry.py +7 -5
- scitex/writer/utils/_parse_latex_logs.py +1 -1
- {scitex-2.11.0.dist-info → scitex-2.13.0.dist-info}/METADATA +431 -269
- {scitex-2.11.0.dist-info → scitex-2.13.0.dist-info}/RECORD +147 -118
- scitex-2.13.0.dist-info/entry_points.txt +11 -0
- scitex-2.11.0.dist-info/entry_points.txt +0 -2
- {scitex-2.11.0.dist-info → scitex-2.13.0.dist-info}/WHEEL +0 -0
- {scitex-2.11.0.dist-info → scitex-2.13.0.dist-info}/licenses/LICENSE +0 -0
scitex/dsp/_demo_sig.py
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
2
|
# Time-stamp: "2024-11-06 01:45:32 (ywatanabe)"
|
|
4
3
|
# File: ./scitex_repo/src/scitex/dsp/_demo_sig.py
|
|
5
4
|
|
|
@@ -8,12 +7,35 @@ import sys
|
|
|
8
7
|
import warnings
|
|
9
8
|
|
|
10
9
|
import matplotlib.pyplot as plt
|
|
11
|
-
import mne
|
|
12
10
|
import numpy as np
|
|
13
|
-
from mne.datasets import sample
|
|
14
|
-
from ripple_detection.simulate import simulate_LFP, simulate_time
|
|
15
11
|
from scipy.signal import chirp
|
|
16
|
-
|
|
12
|
+
|
|
13
|
+
try:
|
|
14
|
+
import mne
|
|
15
|
+
from mne.datasets import sample
|
|
16
|
+
|
|
17
|
+
MNE_AVAILABLE = True
|
|
18
|
+
except ImportError:
|
|
19
|
+
MNE_AVAILABLE = False
|
|
20
|
+
mne = None
|
|
21
|
+
sample = None
|
|
22
|
+
|
|
23
|
+
try:
|
|
24
|
+
from ripple_detection.simulate import simulate_LFP, simulate_time
|
|
25
|
+
|
|
26
|
+
RIPPLE_DETECTION_AVAILABLE = True
|
|
27
|
+
except ImportError:
|
|
28
|
+
RIPPLE_DETECTION_AVAILABLE = False
|
|
29
|
+
simulate_LFP = None
|
|
30
|
+
simulate_time = None
|
|
31
|
+
|
|
32
|
+
try:
|
|
33
|
+
from tensorpac.signals import pac_signals_wavelet
|
|
34
|
+
|
|
35
|
+
TENSORPAC_AVAILABLE = True
|
|
36
|
+
except ImportError:
|
|
37
|
+
TENSORPAC_AVAILABLE = False
|
|
38
|
+
pac_signals_wavelet = None
|
|
17
39
|
|
|
18
40
|
from scitex.io._load_configs import load_configs
|
|
19
41
|
|
|
@@ -21,6 +43,27 @@ from scitex.io._load_configs import load_configs
|
|
|
21
43
|
CONFIG = load_configs(verbose=False)
|
|
22
44
|
|
|
23
45
|
|
|
46
|
+
def _check_mne():
|
|
47
|
+
if not MNE_AVAILABLE:
|
|
48
|
+
raise ImportError(
|
|
49
|
+
"MNE-Python is not installed. Please install with: pip install mne"
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def _check_ripple_detection():
|
|
54
|
+
if not RIPPLE_DETECTION_AVAILABLE:
|
|
55
|
+
raise ImportError(
|
|
56
|
+
"ripple_detection is not installed. Please install with: pip install ripple_detection"
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def _check_tensorpac():
|
|
61
|
+
if not TENSORPAC_AVAILABLE:
|
|
62
|
+
raise ImportError(
|
|
63
|
+
"tensorpac is not installed. Please install with: pip install tensorpac"
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
|
|
24
67
|
# Functions
|
|
25
68
|
def demo_sig(
|
|
26
69
|
sig_type="periodic",
|
|
@@ -207,6 +250,7 @@ def _demo_sig_tensorpac(
|
|
|
207
250
|
n_segments=20,
|
|
208
251
|
verbose=False,
|
|
209
252
|
):
|
|
253
|
+
_check_tensorpac()
|
|
210
254
|
n_times = int(t_sec * fs)
|
|
211
255
|
x_2d, tt = pac_signals_wavelet(
|
|
212
256
|
sf=fs,
|
|
@@ -222,6 +266,7 @@ def _demo_sig_tensorpac(
|
|
|
222
266
|
|
|
223
267
|
|
|
224
268
|
def _demo_sig_meg(batch_size=8, n_chs=19, t_sec=10, fs=512, verbose=False, **kwargs):
|
|
269
|
+
_check_mne()
|
|
225
270
|
data_path = sample.data_path()
|
|
226
271
|
meg_path = data_path / "MEG" / "sample"
|
|
227
272
|
raw_fname = meg_path / "sample_audvis_raw.fif"
|
|
@@ -280,6 +325,7 @@ def _demo_sig_chirp_1d(
|
|
|
280
325
|
|
|
281
326
|
|
|
282
327
|
def _demo_sig_ripple_1d(t_sec=10, fs=512, **kwargs):
|
|
328
|
+
_check_ripple_detection()
|
|
283
329
|
n_samples = t_sec * fs
|
|
284
330
|
t = simulate_time(n_samples, fs)
|
|
285
331
|
n_ripples = random.randint(1, 5)
|
scitex/dsp/_mne.py
CHANGED
|
@@ -1,14 +1,25 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
2
|
# Time-stamp: "2024-11-04 02:07:36 (ywatanabe)"
|
|
4
3
|
# File: ./scitex_repo/src/scitex/dsp/_mne.py
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
try:
|
|
6
|
+
import mne
|
|
7
|
+
|
|
8
|
+
MNE_AVAILABLE = True
|
|
9
|
+
except ImportError:
|
|
10
|
+
MNE_AVAILABLE = False
|
|
11
|
+
mne = None
|
|
12
|
+
|
|
7
13
|
import pandas as pd
|
|
14
|
+
|
|
8
15
|
from .params import EEG_MONTAGE_1020
|
|
9
16
|
|
|
10
17
|
|
|
11
18
|
def get_eeg_pos(channel_names=EEG_MONTAGE_1020):
|
|
19
|
+
if not MNE_AVAILABLE:
|
|
20
|
+
raise ImportError(
|
|
21
|
+
"MNE-Python is not installed. Please install with: pip install mne"
|
|
22
|
+
)
|
|
12
23
|
# Load the standard 10-20 montage
|
|
13
24
|
standard_montage = mne.channels.make_standard_montage("standard_1020")
|
|
14
25
|
standard_montage.ch_names = [
|
scitex/dsp/_modulation_index.py
CHANGED
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
2
|
# Time-stamp: "2024-11-04 02:09:55 (ywatanabe)"
|
|
4
3
|
# File: ./scitex_repo/src/scitex/dsp/_modulation_index.py
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
try:
|
|
6
|
+
import torch
|
|
7
|
+
|
|
8
|
+
TORCH_AVAILABLE = True
|
|
9
|
+
except ImportError:
|
|
10
|
+
TORCH_AVAILABLE = False
|
|
11
|
+
torch = None
|
|
7
12
|
|
|
8
13
|
from scitex.decorators import signal_fn
|
|
9
|
-
|
|
14
|
+
|
|
15
|
+
if TORCH_AVAILABLE:
|
|
16
|
+
from scitex.nn._ModulationIndex import ModulationIndex
|
|
10
17
|
|
|
11
18
|
|
|
12
19
|
@signal_fn
|
|
@@ -15,6 +22,10 @@ def modulation_index(pha, amp, n_bins=18, amp_prob=False):
|
|
|
15
22
|
pha: (batch_size, n_chs, n_freqs_pha, n_segments, seq_len)
|
|
16
23
|
amp: (batch_size, n_chs, n_freqs_amp, n_segments, seq_len)
|
|
17
24
|
"""
|
|
25
|
+
if not TORCH_AVAILABLE:
|
|
26
|
+
raise ImportError(
|
|
27
|
+
"PyTorch is not installed. Please install with: pip install torch"
|
|
28
|
+
)
|
|
18
29
|
return ModulationIndex(n_bins=n_bins, amp_prob=amp_prob)(pha, amp)
|
|
19
30
|
|
|
20
31
|
|
|
@@ -32,6 +43,7 @@ if __name__ == "__main__":
|
|
|
32
43
|
import sys
|
|
33
44
|
|
|
34
45
|
import matplotlib.pyplot as plt
|
|
46
|
+
|
|
35
47
|
import scitex
|
|
36
48
|
|
|
37
49
|
# Start
|
scitex/dsp/_pac.py
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
2
|
# Time-stamp: "2024-11-26 22:24:40 (ywatanabe)"
|
|
4
3
|
# File: ./scitex_repo/src/scitex/dsp/_pac.py
|
|
5
4
|
|
|
@@ -9,11 +8,28 @@ import sys
|
|
|
9
8
|
|
|
10
9
|
import matplotlib.pyplot as plt
|
|
11
10
|
import numpy as np
|
|
12
|
-
import torch
|
|
13
|
-
from scitex.str import printc
|
|
14
11
|
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
try:
|
|
13
|
+
import torch
|
|
14
|
+
|
|
15
|
+
TORCH_AVAILABLE = True
|
|
16
|
+
except ImportError:
|
|
17
|
+
TORCH_AVAILABLE = False
|
|
18
|
+
torch = None
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
from scitex.decorators import signal_fn
|
|
22
|
+
|
|
23
|
+
if TORCH_AVAILABLE:
|
|
24
|
+
from scitex.nn._PAC import PAC
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _check_torch():
|
|
28
|
+
if not TORCH_AVAILABLE:
|
|
29
|
+
raise ImportError(
|
|
30
|
+
"PyTorch is not installed. Please install with: pip install torch"
|
|
31
|
+
)
|
|
32
|
+
|
|
17
33
|
|
|
18
34
|
"""
|
|
19
35
|
scitex.dsp.pac function
|
|
@@ -66,6 +82,7 @@ def pac(
|
|
|
66
82
|
)
|
|
67
83
|
pac, pha_mids_hz, amp_mids_hz = scitex.dsp.pac(xx, fs)
|
|
68
84
|
"""
|
|
85
|
+
_check_torch()
|
|
69
86
|
|
|
70
87
|
def process_ch_batching(m, x, batch_size_ch, device):
|
|
71
88
|
n_chs = x.shape[1]
|
|
@@ -107,6 +124,7 @@ def pac(
|
|
|
107
124
|
|
|
108
125
|
if __name__ == "__main__":
|
|
109
126
|
import matplotlib.pyplot as plt
|
|
127
|
+
|
|
110
128
|
import scitex
|
|
111
129
|
|
|
112
130
|
# Start
|
scitex/dsp/_psd.py
CHANGED
|
@@ -1,14 +1,21 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
2
|
# Time-stamp: "2024-11-04 02:11:25 (ywatanabe)"
|
|
4
3
|
# File: ./scitex_repo/src/scitex/dsp/_psd.py
|
|
5
4
|
|
|
6
5
|
"""This script does XYZ."""
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
try:
|
|
8
|
+
import torch
|
|
9
|
+
|
|
10
|
+
TORCH_AVAILABLE = True
|
|
11
|
+
except ImportError:
|
|
12
|
+
TORCH_AVAILABLE = False
|
|
13
|
+
torch = None
|
|
9
14
|
|
|
10
15
|
from scitex.decorators import signal_fn
|
|
11
|
-
|
|
16
|
+
|
|
17
|
+
if TORCH_AVAILABLE:
|
|
18
|
+
from scitex.nn._PSD import PSD
|
|
12
19
|
|
|
13
20
|
|
|
14
21
|
@signal_fn
|
|
@@ -32,6 +39,10 @@ def psd(
|
|
|
32
39
|
ax.ylabel("log(Power [uV^2 / Hz]) [a.u.]")
|
|
33
40
|
plt.show()
|
|
34
41
|
"""
|
|
42
|
+
if not TORCH_AVAILABLE:
|
|
43
|
+
raise ImportError(
|
|
44
|
+
"PyTorch is not installed. Please install with: pip install torch"
|
|
45
|
+
)
|
|
35
46
|
psd, freqs = PSD(fs, prob=prob, dim=dim)(x)
|
|
36
47
|
return psd, freqs
|
|
37
48
|
|
|
@@ -59,10 +70,11 @@ def band_powers(self, psd):
|
|
|
59
70
|
|
|
60
71
|
if __name__ == "__main__":
|
|
61
72
|
import sys
|
|
62
|
-
import scitex
|
|
63
73
|
|
|
64
74
|
import matplotlib.pyplot as plt
|
|
65
75
|
|
|
76
|
+
import scitex
|
|
77
|
+
|
|
66
78
|
# Start
|
|
67
79
|
CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.session.start(sys, plt)
|
|
68
80
|
|
scitex/dsp/_resample.py
CHANGED
|
@@ -1,16 +1,36 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
2
|
# Time-stamp: "2024-04-13 02:35:11 (ywatanabe)"
|
|
4
3
|
|
|
4
|
+
try:
|
|
5
|
+
import torch
|
|
6
|
+
|
|
7
|
+
TORCH_AVAILABLE = True
|
|
8
|
+
except ImportError:
|
|
9
|
+
TORCH_AVAILABLE = False
|
|
10
|
+
torch = None
|
|
11
|
+
|
|
12
|
+
try:
|
|
13
|
+
import torchaudio.transforms as T
|
|
14
|
+
|
|
15
|
+
TORCHAUDIO_AVAILABLE = True
|
|
16
|
+
except ImportError:
|
|
17
|
+
TORCHAUDIO_AVAILABLE = False
|
|
18
|
+
T = None
|
|
5
19
|
|
|
6
|
-
import torch
|
|
7
|
-
import torchaudio.transforms as T
|
|
8
|
-
from scitex.decorators import signal_fn
|
|
9
20
|
import scitex
|
|
21
|
+
from scitex.decorators import signal_fn
|
|
10
22
|
|
|
11
23
|
|
|
12
24
|
@signal_fn
|
|
13
25
|
def resample(x, src_fs, tgt_fs, t=None):
|
|
26
|
+
if not TORCH_AVAILABLE:
|
|
27
|
+
raise ImportError(
|
|
28
|
+
"PyTorch is not installed. Please install with: pip install torch"
|
|
29
|
+
)
|
|
30
|
+
if not TORCHAUDIO_AVAILABLE:
|
|
31
|
+
raise ImportError(
|
|
32
|
+
"torchaudio is not installed. Please install with: pip install torchaudio"
|
|
33
|
+
)
|
|
14
34
|
xr = T.Resample(src_fs, tgt_fs, dtype=x.dtype).to(x.device)(x)
|
|
15
35
|
if t is None:
|
|
16
36
|
return xr
|
scitex/dsp/_transform.py
CHANGED
|
@@ -1,16 +1,29 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
2
|
# Time-stamp: "2024-04-08 12:41:59 (ywatanabe)"#!/usr/bin/env python3
|
|
4
3
|
|
|
5
4
|
|
|
6
|
-
import warnings
|
|
7
5
|
|
|
8
6
|
import numpy as np
|
|
9
7
|
import pandas as pd
|
|
10
|
-
|
|
8
|
+
|
|
9
|
+
try:
|
|
10
|
+
import torch
|
|
11
|
+
|
|
12
|
+
TORCH_AVAILABLE = True
|
|
13
|
+
except ImportError:
|
|
14
|
+
TORCH_AVAILABLE = False
|
|
15
|
+
torch = None
|
|
16
|
+
|
|
11
17
|
from scitex.decorators import torch_fn
|
|
12
18
|
|
|
13
19
|
|
|
20
|
+
def _check_torch():
|
|
21
|
+
if not TORCH_AVAILABLE:
|
|
22
|
+
raise ImportError(
|
|
23
|
+
"PyTorch is not installed. Please install with: pip install torch"
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
|
|
14
27
|
def to_sktime_df(arr):
|
|
15
28
|
"""
|
|
16
29
|
Convert a 3D numpy array into a DataFrame suitable for sktime.
|
scitex/dsp/add_noise.py
CHANGED
|
@@ -2,12 +2,26 @@
|
|
|
2
2
|
# Time-stamp: "ywatanabe (2024-11-02 23:09:49)"
|
|
3
3
|
# File: ./scitex_repo/src/scitex/dsp/add_noise.py
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
try:
|
|
6
|
+
import torch
|
|
7
|
+
|
|
8
|
+
TORCH_AVAILABLE = True
|
|
9
|
+
except ImportError:
|
|
10
|
+
TORCH_AVAILABLE = False
|
|
11
|
+
torch = None
|
|
6
12
|
|
|
7
13
|
from scitex.decorators import signal_fn
|
|
8
14
|
|
|
9
15
|
|
|
16
|
+
def _check_torch():
|
|
17
|
+
if not TORCH_AVAILABLE:
|
|
18
|
+
raise ImportError(
|
|
19
|
+
"PyTorch is not installed. Please install with: pip install torch"
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
|
|
10
23
|
def _uniform(shape, amp=1.0):
|
|
24
|
+
_check_torch()
|
|
11
25
|
a, b = -amp, amp
|
|
12
26
|
return -amp + (2 * amp) * torch.rand(shape)
|
|
13
27
|
|
scitex/dsp/norm.py
CHANGED
|
@@ -1,18 +1,33 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
2
|
# Time-stamp: "2024-04-05 12:15:42 (ywatanabe)"
|
|
4
3
|
|
|
5
|
-
|
|
4
|
+
try:
|
|
5
|
+
import torch as _torch
|
|
6
|
+
|
|
7
|
+
TORCH_AVAILABLE = True
|
|
8
|
+
except ImportError:
|
|
9
|
+
TORCH_AVAILABLE = False
|
|
10
|
+
_torch = None
|
|
11
|
+
|
|
6
12
|
from scitex.decorators import signal_fn as _signal_fn
|
|
7
13
|
|
|
8
14
|
|
|
15
|
+
def _check_torch():
|
|
16
|
+
if not TORCH_AVAILABLE:
|
|
17
|
+
raise ImportError(
|
|
18
|
+
"PyTorch is not installed. Please install with: pip install torch"
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
|
|
9
22
|
@_signal_fn
|
|
10
23
|
def z(x, dim=-1):
|
|
24
|
+
_check_torch()
|
|
11
25
|
return (x - x.mean(dim=dim, keepdim=True)) / x.std(dim=dim, keepdim=True)
|
|
12
26
|
|
|
13
27
|
|
|
14
28
|
@_signal_fn
|
|
15
29
|
def minmax(x, amp=1.0, dim=-1, fn="mean"):
|
|
30
|
+
_check_torch()
|
|
16
31
|
MM = x.max(dim=dim, keepdims=True)[0].abs()
|
|
17
32
|
mm = x.min(dim=dim, keepdims=True)[0].abs()
|
|
18
33
|
return amp * x / _torch.maximum(MM, mm)
|
scitex/dsp/reference.py
CHANGED
|
@@ -2,13 +2,27 @@
|
|
|
2
2
|
# Time-stamp: "ywatanabe (2024-11-02 22:48:44)"
|
|
3
3
|
# File: ./scitex_repo/src/scitex/dsp/reference.py
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
try:
|
|
6
|
+
import torch as _torch
|
|
7
|
+
|
|
8
|
+
TORCH_AVAILABLE = True
|
|
9
|
+
except ImportError:
|
|
10
|
+
TORCH_AVAILABLE = False
|
|
11
|
+
_torch = None
|
|
6
12
|
|
|
7
13
|
from scitex.decorators import torch_fn as _torch_fn
|
|
8
14
|
|
|
9
15
|
|
|
16
|
+
def _check_torch():
|
|
17
|
+
if not TORCH_AVAILABLE:
|
|
18
|
+
raise ImportError(
|
|
19
|
+
"PyTorch is not installed. Please install with: pip install torch"
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
|
|
10
23
|
@_torch_fn
|
|
11
24
|
def common_average(x, dim=-2):
|
|
25
|
+
_check_torch()
|
|
12
26
|
re_referenced = (x - x.mean(dim=dim, keepdims=True)) / x.std(dim=dim, keepdims=True)
|
|
13
27
|
assert x.shape == re_referenced.shape
|
|
14
28
|
return re_referenced
|
|
@@ -16,6 +30,7 @@ def common_average(x, dim=-2):
|
|
|
16
30
|
|
|
17
31
|
@_torch_fn
|
|
18
32
|
def random(x, dim=-2):
|
|
33
|
+
_check_torch()
|
|
19
34
|
idx_all = [slice(None)] * x.ndim
|
|
20
35
|
idx_rand_dim = _torch.randperm(x.shape[dim])
|
|
21
36
|
idx_all[dim] = idx_rand_dim
|
|
@@ -27,6 +42,7 @@ def random(x, dim=-2):
|
|
|
27
42
|
|
|
28
43
|
@_torch_fn
|
|
29
44
|
def take_reference(x, tgt_indi, dim=-2):
|
|
45
|
+
_check_torch()
|
|
30
46
|
idx_all = [slice(None)] * x.ndim
|
|
31
47
|
idx_all[dim] = tgt_indi
|
|
32
48
|
ref = x[tuple(idx_all)].unsqueeze(dim)
|
|
@@ -8,8 +8,16 @@ import sys
|
|
|
8
8
|
|
|
9
9
|
import matplotlib.pyplot as plt
|
|
10
10
|
import numpy as np
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
|
|
12
|
+
try:
|
|
13
|
+
import torch
|
|
14
|
+
import torch.nn as nn
|
|
15
|
+
|
|
16
|
+
TORCH_AVAILABLE = True
|
|
17
|
+
except ImportError:
|
|
18
|
+
TORCH_AVAILABLE = False
|
|
19
|
+
torch = None
|
|
20
|
+
nn = None
|
|
13
21
|
|
|
14
22
|
from scitex.decorators import torch_fn
|
|
15
23
|
from scitex.gen._to_even import to_even
|
|
@@ -17,10 +25,20 @@ from scitex.gen._to_odd import to_odd
|
|
|
17
25
|
|
|
18
26
|
try:
|
|
19
27
|
from torchaudio.prototype.functional import sinc_impulse_response
|
|
28
|
+
|
|
29
|
+
TORCHAUDIO_AVAILABLE = True
|
|
20
30
|
except ImportError:
|
|
31
|
+
TORCHAUDIO_AVAILABLE = False
|
|
21
32
|
sinc_impulse_response = None
|
|
22
33
|
|
|
23
34
|
|
|
35
|
+
def _check_torch():
|
|
36
|
+
if not TORCH_AVAILABLE:
|
|
37
|
+
raise ImportError(
|
|
38
|
+
"PyTorch is not installed. Please install with: pip install torch"
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
|
|
24
42
|
def _check_sinc_available():
|
|
25
43
|
if sinc_impulse_response is None:
|
|
26
44
|
raise ImportError(
|
scitex/dsp/utils/_zero_pad.py
CHANGED
|
@@ -1,18 +1,32 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
2
|
# Time-stamp: "2024-11-26 10:30:34 (ywatanabe)"
|
|
4
3
|
# File: ./scitex_repo/src/scitex/dsp/utils/_zero_pad.py
|
|
5
4
|
|
|
6
5
|
THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/dsp/utils/_zero_pad.py"
|
|
7
6
|
|
|
8
7
|
import numpy as np
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
|
|
9
|
+
try:
|
|
10
|
+
import torch
|
|
11
|
+
import torch.nn.functional as F
|
|
12
|
+
|
|
13
|
+
TORCH_AVAILABLE = True
|
|
14
|
+
except ImportError:
|
|
15
|
+
TORCH_AVAILABLE = False
|
|
16
|
+
torch = None
|
|
17
|
+
F = None
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def _check_torch():
|
|
21
|
+
if not TORCH_AVAILABLE:
|
|
22
|
+
raise ImportError(
|
|
23
|
+
"PyTorch is not installed. Please install with: pip install torch"
|
|
24
|
+
)
|
|
12
25
|
|
|
13
26
|
|
|
14
27
|
def _zero_pad_1d(x, target_length):
|
|
15
28
|
"""Zero pad a 1D tensor to target length."""
|
|
29
|
+
_check_torch()
|
|
16
30
|
if not isinstance(x, torch.Tensor):
|
|
17
31
|
x = torch.tensor(x)
|
|
18
32
|
padding_needed = target_length - len(x)
|
scitex/git/_session.py
CHANGED
|
@@ -32,7 +32,7 @@ def run_with_session(parse_args_func, main_func):
|
|
|
32
32
|
|
|
33
33
|
args = parse_args_func()
|
|
34
34
|
|
|
35
|
-
CONFIG, sys.stdout, sys.stderr, plt_obj, CC,
|
|
35
|
+
CONFIG, sys.stdout, sys.stderr, plt_obj, CC, rng = stx.session.start(
|
|
36
36
|
sys,
|
|
37
37
|
plt,
|
|
38
38
|
args=args,
|
scitex/io/_load_modules/_con.py
CHANGED
|
@@ -4,10 +4,21 @@
|
|
|
4
4
|
|
|
5
5
|
from typing import Any
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
try:
|
|
8
|
+
import mne
|
|
9
|
+
|
|
10
|
+
MNE_AVAILABLE = True
|
|
11
|
+
except ImportError:
|
|
12
|
+
MNE_AVAILABLE = False
|
|
13
|
+
mne = None
|
|
8
14
|
|
|
9
15
|
|
|
10
16
|
def _load_con(lpath: str, **kwargs) -> Any:
|
|
17
|
+
if not MNE_AVAILABLE:
|
|
18
|
+
raise ImportError(
|
|
19
|
+
"MNE-Python is not installed. Please install with: pip install mne"
|
|
20
|
+
)
|
|
21
|
+
|
|
11
22
|
if not lpath.endswith(".con"):
|
|
12
23
|
raise ValueError("File must have .con extension")
|
|
13
24
|
raw = mne.io.read_raw_fif(lpath, preload=True, **kwargs)
|
scitex/io/_load_modules/_eeg.py
CHANGED
|
@@ -6,7 +6,13 @@ import os
|
|
|
6
6
|
import warnings
|
|
7
7
|
from typing import Any
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
try:
|
|
10
|
+
import mne
|
|
11
|
+
|
|
12
|
+
MNE_AVAILABLE = True
|
|
13
|
+
except ImportError:
|
|
14
|
+
MNE_AVAILABLE = False
|
|
15
|
+
mne = None
|
|
10
16
|
|
|
11
17
|
|
|
12
18
|
def _load_eeg_data(lpath: str, **kwargs) -> Any:
|
|
@@ -38,6 +44,11 @@ def _load_eeg_data(lpath: str, **kwargs) -> Any:
|
|
|
38
44
|
This function uses MNE-Python to load the EEG data. It automatically detects the file format
|
|
39
45
|
based on the file extension and uses the appropriate MNE function to load the data.
|
|
40
46
|
"""
|
|
47
|
+
if not MNE_AVAILABLE:
|
|
48
|
+
raise ImportError(
|
|
49
|
+
"MNE-Python is not installed. Please install with: pip install mne"
|
|
50
|
+
)
|
|
51
|
+
|
|
41
52
|
# Get the file extension
|
|
42
53
|
extension = lpath.split(".")[-1]
|
|
43
54
|
|