scitex 2.10.3__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/__init__.py +1 -4
- scitex/__main__.py +24 -5
- scitex/__version__.py +1 -1
- scitex/_install_guide.py +14 -2
- 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/bridge/_figrecipe.py +1 -1
- scitex/bridge/_helpers.py +1 -1
- scitex/bridge/_plt_vis.py +1 -1
- scitex/bridge/_stats_plt.py +1 -1
- scitex/bridge/_stats_vis.py +2 -2
- 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/{fig → canvas}/__init__.py +84 -96
- scitex/canvas/_mcp_handlers.py +372 -0
- scitex/canvas/_mcp_tool_schemas.py +219 -0
- scitex/{fig → canvas}/backend/_parser.py +1 -1
- scitex/{fig → canvas}/canvas.py +13 -14
- scitex/{fts/_fig/_editor → canvas/editor}/_defaults.py +2 -2
- scitex/{fig → canvas}/editor/edit/__init__.py +11 -14
- scitex/{fig → canvas}/editor/edit/bundle_resolver.py +56 -48
- scitex/{fig → canvas}/editor/edit/editor_launcher.py +79 -26
- scitex/{fts/_fig/_editor/_cui/_panel_loader.py → canvas/editor/edit/panel_loader.py} +8 -8
- scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/_bbox.py +2 -1
- scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/_core.py +84 -84
- scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/_renderer.py +7 -6
- scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/static/css/features/canvas.css +2 -2
- scitex/{fig → canvas}/editor/flask_editor/static/css/features/panel-grid.css +1 -1
- scitex/{fig → canvas}/editor/flask_editor/static/js/core/api.js +3 -4
- scitex/{fig → canvas}/editor/flask_editor/static/js/editor/preview.js +5 -5
- scitex/{fig → canvas}/editor/flask_editor/templates/_html.py +3 -3
- scitex/{fig → canvas}/editor/flask_editor/templates/_scripts.py +10 -10
- scitex/{fig → canvas}/editor/flask_editor/templates/_styles.py +3 -3
- scitex/{fig → canvas}/io/__init__.py +32 -38
- scitex/{fig → canvas}/io/_bundle.py +217 -154
- scitex/{fig → canvas}/io/_canvas.py +1 -1
- scitex/{fig → canvas}/io/_data.py +1 -1
- scitex/{fig → canvas}/io/_export.py +1 -1
- scitex/{fig → canvas}/io/_load.py +1 -1
- scitex/{fig → canvas}/io/_panel.py +1 -1
- scitex/{fig → canvas}/io/_save.py +1 -1
- scitex/canvas/mcp_server.py +151 -0
- scitex/{fig → canvas}/model/__init__.py +1 -1
- scitex/{fig → canvas}/model/_annotations.py +1 -1
- scitex/{fig → canvas}/model/_axes.py +1 -1
- scitex/{fig → canvas}/model/_figure.py +1 -1
- scitex/{fig → canvas}/model/_guides.py +1 -1
- scitex/{fig → canvas}/model/_plot.py +1 -1
- scitex/{fig → canvas}/model/_styles.py +1 -1
- scitex/{fig → canvas}/utils/__init__.py +1 -1
- scitex/capture/mcp_server.py +41 -12
- scitex/cli/audio.py +233 -0
- scitex/cli/capture.py +307 -0
- scitex/cli/convert.py +10 -6
- 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/README.md +7 -7
- 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/__init__.py +7 -19
- scitex/io/_load.py +15 -19
- scitex/io/_load_modules/_canvas.py +2 -2
- scitex/io/_load_modules/_con.py +17 -6
- scitex/io/_load_modules/_eeg.py +28 -13
- scitex/io/_load_modules/_optuna.py +21 -63
- scitex/io/_load_modules/_torch.py +11 -3
- scitex/io/_save.py +11 -16
- scitex/io/_save_modules/__init__.py +6 -10
- scitex/io/_save_modules/_canvas.py +3 -3
- scitex/io/_save_modules/_optuna_study_as_csv_and_pngs.py +13 -2
- scitex/io/_save_modules/_plot_bundle.py +112 -0
- scitex/io/_save_modules/{_pltz_stx.py → _plot_scitex.py} +7 -7
- scitex/io/_save_modules/_stx_bundle.py +16 -16
- scitex/io/_save_modules/_torch.py +11 -3
- scitex/io/bundle/README.md +89 -80
- scitex/{fts/_bundle/_FTS.py → io/bundle/_Bundle.py} +197 -95
- scitex/io/bundle/__init__.py +67 -35
- scitex/{fts/_bundle → io/bundle}/_children.py +32 -40
- scitex/io/bundle/_core.py +184 -97
- scitex/{fts/_bundle/_dataclasses/_Node.py → io/bundle/_dataclasses/_Spec.py} +29 -23
- scitex/{fts/_bundle/_dataclasses/_NodeRefs.py → io/bundle/_dataclasses/_SpecRefs.py} +6 -6
- scitex/{fts/_bundle → io/bundle}/_dataclasses/__init__.py +4 -4
- scitex/{fts/_bundle → io/bundle}/_loader.py +19 -19
- scitex/io/bundle/_manifest.py +99 -0
- scitex/{fts/_bundle → io/bundle}/_mpl_helpers.py +119 -28
- scitex/io/bundle/_nested.py +113 -100
- scitex/{fts/_bundle → io/bundle}/_saver.py +13 -14
- scitex/{fts/_bundle → io/bundle}/_storage.py +3 -3
- scitex/io/bundle/_types.py +41 -16
- scitex/{fts/_bundle → io/bundle}/_validation.py +20 -18
- scitex/io/bundle/_zip.py +21 -31
- scitex/{fts/_kinds → io/bundle/kinds}/_plot/_backend/_parser.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Annotations.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Axes.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Figure.py +1 -1
- scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_Guides.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Plot.py +1 -1
- scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_Styles.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_plot/_utils/_plot_layout.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/__init__.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_editor/_app.py +1 -1
- scitex/{fts/_tables → io/bundle/kinds/_table}/_latex/_export.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_figure_exporter.py +1 -1
- scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_table_exporter.py +1 -1
- scitex/io/bundle/schemas/__init__.py +30 -0
- scitex/mcp_server.py +159 -0
- scitex/parallel/_run.py +5 -4
- scitex/path/_find.py +60 -83
- scitex/path/_get_module_path.py +23 -21
- scitex/path/_get_spath.py +6 -27
- scitex/path/_getsize.py +23 -9
- scitex/path/_increment_version.py +31 -38
- scitex/path/_mk_spath.py +26 -29
- scitex/path/_path.py +5 -12
- scitex/path/_split.py +27 -15
- scitex/path/_this_path.py +23 -9
- scitex/plt/_mcp_handlers.py +361 -0
- scitex/plt/_mcp_tool_schemas.py +169 -0
- scitex/plt/_subplots/_AxisWrapperMixins/_MatplotlibPlotMixin/__init__.py +2 -1
- scitex/plt/_subplots/_AxisWrapperMixins/__init__.py +2 -2
- scitex/plt/gallery/_generate.py +76 -50
- scitex/plt/io/__init__.py +17 -19
- scitex/plt/io/_bundle.py +99 -52
- scitex/plt/io/_layered_bundle.py +303 -168
- scitex/plt/mcp_server.py +205 -0
- scitex/plt/utils/_csv_column_naming.py +250 -118
- 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/schema/__init__.py +69 -73
- scitex/schema/_canvas.py +1 -1
- scitex/schema/_stats.py +2 -2
- 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/__init__.py +30 -33
- scitex/stats/__main__.py +281 -0
- scitex/stats/_mcp_handlers.py +1191 -0
- scitex/stats/_mcp_tool_schemas.py +384 -0
- scitex/stats/_schema.py +1 -1
- 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/io/__init__.py +10 -11
- scitex/stats/io/_bundle.py +16 -16
- 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.13.0.dist-info/METADATA +1231 -0
- {scitex-2.10.3.dist-info → scitex-2.13.0.dist-info}/RECORD +376 -470
- scitex-2.13.0.dist-info/entry_points.txt +11 -0
- scitex/fig/editor/_defaults.py +0 -300
- scitex/fig/editor/edit/panel_loader.py +0 -232
- scitex/fig/editor/flask_editor/_bbox.py +0 -1299
- scitex/fig/editor/flask_editor/_core.py +0 -1429
- scitex/fig/editor/flask_editor/_renderer.py +0 -813
- scitex/fig/editor/flask_editor/static/css/features/canvas.css +0 -176
- scitex/fts/README.md +0 -262
- scitex/fts/TODO.md +0 -66
- scitex/fts/__init__.py +0 -90
- scitex/fts/_bundle/README_IN_BUNDLE.md +0 -102
- scitex/fts/_bundle/__init__.py +0 -38
- scitex/fts/_bundle/_utils/__init__.py +0 -55
- scitex/fts/_bundle/_utils/_const.py +0 -26
- scitex/fts/_bundle/_utils/_errors.py +0 -73
- scitex/fts/_bundle/_utils/_generate.py +0 -21
- scitex/fts/_bundle/_utils/_types.py +0 -76
- scitex/fts/_bundle/_zipbundle.py +0 -165
- scitex/fts/_fig/__init__.py +0 -22
- scitex/fts/_fig/_backend/_parser.py +0 -188
- scitex/fts/_fig/_editor/__init__.py +0 -14
- scitex/fts/_fig/_editor/_cui/__init__.py +0 -33
- scitex/fts/_fig/_editor/_cui/_backend_detector.py +0 -39
- scitex/fts/_fig/_editor/_cui/_bundle_resolver.py +0 -366
- scitex/fts/_fig/_editor/_cui/_editor_launcher.py +0 -175
- scitex/fts/_fig/_editor/_cui/_manual_handler.py +0 -52
- scitex/fts/_fig/_editor/_cui/_path_resolver.py +0 -66
- scitex/fts/_fig/_editor/_gui/__init__.py +0 -11
- scitex/fts/_fig/_editor/_gui/_flask_editor/__init__.py +0 -20
- scitex/fts/_fig/_editor/_gui/_flask_editor/_plotter.py +0 -664
- scitex/fts/_fig/_editor/_gui/_flask_editor/_utils.py +0 -79
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/base/reset.css +0 -41
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/base/typography.css +0 -16
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/base/variables.css +0 -85
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/buttons.css +0 -217
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/context-menu.css +0 -93
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/dropdown.css +0 -57
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/forms.css +0 -112
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/modal.css +0 -59
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/sections.css +0 -212
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/element-inspector.css +0 -190
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/loading.css +0 -59
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/overlay.css +0 -45
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/panel-grid.css +0 -95
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/selection.css +0 -101
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/statistics.css +0 -138
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/index.css +0 -31
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/layout/container.css +0 -7
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/layout/controls.css +0 -56
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/layout/preview.css +0 -78
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/alignment/axis.js +0 -314
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/alignment/basic.js +0 -107
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/alignment/distribute.js +0 -54
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/canvas.js +0 -172
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/dragging.js +0 -258
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/resize.js +0 -48
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/selection.js +0 -71
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/core/api.js +0 -288
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/core/state.js +0 -143
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/core/utils.js +0 -245
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/dev/element-inspector.js +0 -992
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/bbox.js +0 -339
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/element-drag.js +0 -286
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/overlay.js +0 -371
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/preview.js +0 -293
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/main.js +0 -426
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/shortcuts/context-menu.js +0 -152
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/shortcuts/keyboard.js +0 -265
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/controls.js +0 -184
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/download.js +0 -57
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/help.js +0 -100
- scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/theme.js +0 -34
- scitex/fts/_fig/_editor/_gui/_flask_editor/templates/__init__.py +0 -124
- scitex/fts/_fig/_editor/_gui/_flask_editor/templates/_html.py +0 -851
- scitex/fts/_fig/_editor/_gui/_flask_editor/templates/_scripts.py +0 -4932
- scitex/fts/_fig/_editor/_gui/_flask_editor/templates/_styles.py +0 -1657
- scitex/fts/_fig/_editor/_gui/_flask_editor.py +0 -36
- scitex/fts/_fig/_models/_Annotations.py +0 -115
- scitex/fts/_fig/_models/_Axes.py +0 -152
- scitex/fts/_fig/_models/_Figure.py +0 -138
- scitex/fts/_fig/_models/_Plot.py +0 -123
- scitex/fts/_fig/_utils/_plot_layout.py +0 -397
- scitex/fts/_kinds/_figure/_composite.py +0 -345
- scitex/fts/_kinds/_plot/_backend/__init__.py +0 -53
- scitex/fts/_kinds/_plot/_backend/_export.py +0 -165
- scitex/fts/_kinds/_plot/_backend/_render.py +0 -538
- scitex/fts/_kinds/_plot/_dataclasses/_ChannelEncoding.py +0 -46
- scitex/fts/_kinds/_plot/_dataclasses/_Encoding.py +0 -82
- scitex/fts/_kinds/_plot/_dataclasses/_Theme.py +0 -441
- scitex/fts/_kinds/_plot/_dataclasses/_TraceEncoding.py +0 -52
- scitex/fts/_kinds/_plot/_dataclasses/__init__.py +0 -47
- scitex/fts/_kinds/_plot/_models/_Guides.py +0 -104
- scitex/fts/_kinds/_plot/_models/_Styles.py +0 -245
- scitex/fts/_kinds/_plot/_models/__init__.py +0 -80
- scitex/fts/_kinds/_plot/_models/_plot_types/__init__.py +0 -156
- scitex/fts/_kinds/_plot/_models/_plot_types/_bar.py +0 -43
- scitex/fts/_kinds/_plot/_models/_plot_types/_box.py +0 -38
- scitex/fts/_kinds/_plot/_models/_plot_types/_distribution.py +0 -36
- scitex/fts/_kinds/_plot/_models/_plot_types/_errorbar.py +0 -60
- scitex/fts/_kinds/_plot/_models/_plot_types/_histogram.py +0 -30
- scitex/fts/_kinds/_plot/_models/_plot_types/_image.py +0 -61
- scitex/fts/_kinds/_plot/_models/_plot_types/_line.py +0 -57
- scitex/fts/_kinds/_plot/_models/_plot_types/_scatter.py +0 -30
- scitex/fts/_kinds/_plot/_models/_plot_types/_seaborn.py +0 -121
- scitex/fts/_kinds/_plot/_models/_plot_types/_violin.py +0 -36
- scitex/fts/_kinds/_plot/_utils/__init__.py +0 -129
- scitex/fts/_kinds/_plot/_utils/_auto_layout.py +0 -127
- scitex/fts/_kinds/_plot/_utils/_calc_bounds.py +0 -111
- scitex/fts/_kinds/_plot/_utils/_const_sizes.py +0 -48
- scitex/fts/_kinds/_plot/_utils/_convert_coords.py +0 -77
- scitex/fts/_kinds/_plot/_utils/_get_template.py +0 -178
- scitex/fts/_kinds/_plot/_utils/_normalize.py +0 -73
- scitex/fts/_kinds/_plot/_utils/_validate.py +0 -197
- scitex/fts/_kinds/_table/_latex/_export.py +0 -279
- scitex/fts/_stats/__init__.py +0 -48
- scitex/fts/_stats/_dataclasses/_Stats.py +0 -423
- scitex/fts/_stats/_dataclasses/__init__.py +0 -48
- scitex/fts/_tables/__init__.py +0 -65
- scitex/fts/_tables/_latex/__init__.py +0 -93
- scitex/fts/_tables/_latex/_editor/__init__.py +0 -11
- scitex/fts/_tables/_latex/_editor/_app.py +0 -725
- scitex/fts/_tables/_latex/_figure_exporter.py +0 -153
- scitex/fts/_tables/_latex/_stats_formatter.py +0 -274
- scitex/fts/_tables/_latex/_table_exporter.py +0 -362
- scitex/fts/_tables/_latex/_utils.py +0 -369
- scitex/fts/_tables/_latex/_validator.py +0 -445
- scitex/io/_save_modules/_pltz_bundle.py +0 -356
- scitex-2.10.3.dist-info/METADATA +0 -952
- scitex-2.10.3.dist-info/entry_points.txt +0 -2
- /scitex/{fig → canvas}/README.md +0 -0
- /scitex/{fig → canvas}/backend/__init__.py +0 -0
- /scitex/{fig → canvas}/backend/_export.py +0 -0
- /scitex/{fig → canvas}/backend/_render.py +0 -0
- /scitex/{fig → canvas}/docs/CANVAS_ARCHITECTURE.md +0 -0
- /scitex/{fig → canvas}/editor/__init__.py +0 -0
- /scitex/{fig → canvas}/editor/_dearpygui_editor.py +0 -0
- /scitex/{fig → canvas}/editor/_flask_editor.py +0 -0
- /scitex/{fig → canvas}/editor/_mpl_editor.py +0 -0
- /scitex/{fig → canvas}/editor/_qt_editor.py +0 -0
- /scitex/{fig → canvas}/editor/_tkinter_editor.py +0 -0
- /scitex/{fig → canvas}/editor/edit/backend_detector.py +0 -0
- /scitex/{fig → canvas}/editor/edit/manual_handler.py +0 -0
- /scitex/{fig → canvas}/editor/edit/path_resolver.py +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/__init__.py +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/_plotter.py +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/_utils.py +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/base/reset.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/base/typography.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/base/variables.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/components/buttons.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/components/context-menu.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/components/dropdown.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/components/forms.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/components/modal.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/components/sections.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/features/element-inspector.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/features/loading.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/features/overlay.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/features/selection.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/features/statistics.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/index.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/layout/container.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/layout/controls.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/css/layout/preview.css +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/alignment/axis.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/alignment/basic.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/alignment/distribute.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/canvas.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/dragging.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/resize.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/selection.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/core/state.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/core/utils.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/dev/element-inspector.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/editor/bbox.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/editor/element-drag.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/editor/overlay.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/main.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/shortcuts/context-menu.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/shortcuts/keyboard.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/controls.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/download.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/help.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/theme.js +0 -0
- /scitex/{fig → canvas}/editor/flask_editor/templates/__init__.py +0 -0
- /scitex/{fig → canvas}/io/_directory.py +0 -0
- /scitex/{fig → canvas}/model/_plot_types.py +0 -0
- /scitex/{fig → canvas}/utils/_defaults.py +0 -0
- /scitex/{fig → canvas}/utils/_validate.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_conversion/__init__.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_conversion/_bundle2dict.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_conversion/_dict2bundle.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_dataclasses/_Axes.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_dataclasses/_BBox.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_dataclasses/_ColumnDef.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_dataclasses/_DataFormat.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_dataclasses/_DataInfo.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_dataclasses/_DataSource.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_dataclasses/_SizeMM.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_extractors/__init__.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_extractors/_extract_bar.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_extractors/_extract_line.py +0 -0
- /scitex/{fts/_bundle → io/bundle}/_extractors/_extract_scatter.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/__init__.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_figure/__init__.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_figure}/_composite.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_plot/__init__.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_backend/__init__.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_backend/_export.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_backend/_render.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_ChannelEncoding.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_Encoding.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_Theme.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_TraceEncoding.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/__init__.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/__init__.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/__init__.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_bar.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_box.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_distribution.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_errorbar.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_histogram.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_image.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_line.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_scatter.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_seaborn.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_violin.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/__init__.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_auto_layout.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_calc_bounds.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_const_sizes.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_convert_coords.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_get_template.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_normalize.py +0 -0
- /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_validate.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_shape/__init__.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_stats/__init__.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_stats/_dataclasses/_Stats.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_stats/_dataclasses/__init__.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_table/__init__.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_editor/__init__.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_stats_formatter.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_utils.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_validator.py +0 -0
- /scitex/{fts/_kinds → io/bundle/kinds}/_text/__init__.py +0 -0
- /scitex/{fts/_schemas → io/bundle/schemas}/data_info.schema.json +0 -0
- /scitex/{fts/_schemas → io/bundle/schemas}/encoding.schema.json +0 -0
- /scitex/{fts/_schemas → io/bundle/schemas}/node.schema.json +0 -0
- /scitex/{fts/_schemas → io/bundle/schemas}/render_manifest.schema.json +0 -0
- /scitex/{fts/_schemas → io/bundle/schemas}/stats.schema.json +0 -0
- /scitex/{fts/_schemas → io/bundle/schemas}/theme.schema.json +0 -0
- {scitex-2.10.3.dist-info → scitex-2.13.0.dist-info}/WHEEL +0 -0
- {scitex-2.10.3.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/__init__.py
CHANGED
|
@@ -9,21 +9,19 @@ __DIR__ = os.path.dirname(__FILE__)
|
|
|
9
9
|
# ----------------------------------------
|
|
10
10
|
"""Scitex IO module with lazy imports to avoid circular dependencies.
|
|
11
11
|
|
|
12
|
-
Bundle I/O is handled via scitex.
|
|
13
|
-
from scitex.
|
|
14
|
-
bundle =
|
|
12
|
+
Bundle I/O is handled via scitex.io.bundle:
|
|
13
|
+
from scitex.io.bundle import Bundle
|
|
14
|
+
bundle = Bundle("Figure1.figure")
|
|
15
15
|
bundle.save()
|
|
16
16
|
"""
|
|
17
17
|
|
|
18
18
|
# Import commonly used functions directly
|
|
19
|
+
# Bundle I/O - import the bundle submodule
|
|
20
|
+
from . import bundle
|
|
19
21
|
from ._cache import cache
|
|
20
22
|
from ._flush import flush
|
|
21
23
|
from ._glob import glob, parse_glob
|
|
22
24
|
from ._load import load
|
|
23
|
-
|
|
24
|
-
# Bundle I/O - import the bundle submodule
|
|
25
|
-
from . import bundle
|
|
26
|
-
|
|
27
25
|
from ._load_configs import load_configs
|
|
28
26
|
from ._reload import reload
|
|
29
27
|
from ._save import save
|
|
@@ -45,20 +43,10 @@ except ImportError:
|
|
|
45
43
|
has_zarr_key = None
|
|
46
44
|
|
|
47
45
|
# Import load cache control functions
|
|
48
|
-
from ._load_cache import
|
|
49
|
-
|
|
50
|
-
)
|
|
51
|
-
from ._load_cache import (
|
|
52
|
-
configure_cache,
|
|
53
|
-
get_cache_info,
|
|
54
|
-
)
|
|
46
|
+
from ._load_cache import clear_cache as clear_load_cache
|
|
47
|
+
from ._load_cache import configure_cache, get_cache_info
|
|
55
48
|
|
|
56
49
|
# Import load cache control functions
|
|
57
|
-
from ._load_cache import (
|
|
58
|
-
get_cache_info,
|
|
59
|
-
configure_cache,
|
|
60
|
-
clear_cache as clear_load_cache,
|
|
61
|
-
)
|
|
62
50
|
|
|
63
51
|
# Import save module functions
|
|
64
52
|
try:
|
scitex/io/_load.py
CHANGED
|
@@ -16,11 +16,7 @@ from typing import Any, Union
|
|
|
16
16
|
|
|
17
17
|
from scitex.decorators import preserve_doc
|
|
18
18
|
|
|
19
|
-
from ._load_cache import
|
|
20
|
-
cache_data,
|
|
21
|
-
get_cached_data,
|
|
22
|
-
load_npy_cached,
|
|
23
|
-
)
|
|
19
|
+
from ._load_cache import cache_data, get_cached_data, load_npy_cached
|
|
24
20
|
|
|
25
21
|
# Core loaders (no special dependencies)
|
|
26
22
|
from ._load_modules._bibtex import _load_bibtex
|
|
@@ -101,7 +97,7 @@ except ImportError:
|
|
|
101
97
|
|
|
102
98
|
|
|
103
99
|
def _load_bundle(lpath, verbose=False, **kwargs):
|
|
104
|
-
"""Load a .
|
|
100
|
+
"""Load a .plot, .figure, or .stats bundle.
|
|
105
101
|
|
|
106
102
|
Parameters
|
|
107
103
|
----------
|
|
@@ -114,12 +110,12 @@ def _load_bundle(lpath, verbose=False, **kwargs):
|
|
|
114
110
|
|
|
115
111
|
Returns
|
|
116
112
|
-------
|
|
117
|
-
For .
|
|
113
|
+
For .plot bundles:
|
|
118
114
|
tuple: (fig, ax, data) where fig is reconstructed figure,
|
|
119
115
|
ax is the axes, data is DataFrame or None.
|
|
120
|
-
For .
|
|
116
|
+
For .figure bundles:
|
|
121
117
|
dict: Figure data with 'spec' and 'panels'.
|
|
122
|
-
For .
|
|
118
|
+
For .stats bundles:
|
|
123
119
|
dict: Stats data with 'spec' and 'comparisons'.
|
|
124
120
|
"""
|
|
125
121
|
from .bundle import BundleType
|
|
@@ -128,8 +124,8 @@ def _load_bundle(lpath, verbose=False, **kwargs):
|
|
|
128
124
|
bundle = load_bundle(lpath)
|
|
129
125
|
bundle_type = bundle.get("type")
|
|
130
126
|
|
|
131
|
-
if bundle_type == BundleType.
|
|
132
|
-
# Return (fig, ax, data) tuple for .
|
|
127
|
+
if bundle_type == BundleType.PLOT:
|
|
128
|
+
# Return (fig, ax, data) tuple for .plot bundles
|
|
133
129
|
# Note: We return the spec and data, not a reconstructed figure
|
|
134
130
|
# as matplotlib figures cannot be perfectly serialized/deserialized
|
|
135
131
|
from pathlib import Path
|
|
@@ -177,19 +173,19 @@ def _load_bundle(lpath, verbose=False, **kwargs):
|
|
|
177
173
|
if theme:
|
|
178
174
|
fig._scitex_theme = theme.get("mode")
|
|
179
175
|
|
|
180
|
-
# Data from bundle (merged in
|
|
176
|
+
# Data from bundle (merged in load_layered_plot_bundle)
|
|
181
177
|
data = bundle.get("data")
|
|
182
178
|
return fig, ax, data
|
|
183
179
|
else:
|
|
184
180
|
# No PNG, return spec and data
|
|
185
181
|
return bundle.get("spec"), None, bundle.get("data")
|
|
186
182
|
|
|
187
|
-
elif bundle_type == BundleType.
|
|
188
|
-
# Return figure dict for .
|
|
183
|
+
elif bundle_type == BundleType.FIGURE:
|
|
184
|
+
# Return figure dict for .figure bundles
|
|
189
185
|
return bundle
|
|
190
186
|
|
|
191
|
-
elif bundle_type == BundleType.
|
|
192
|
-
# Return stats dict for .
|
|
187
|
+
elif bundle_type == BundleType.STATS:
|
|
188
|
+
# Return stats dict for .stats bundles
|
|
193
189
|
return bundle
|
|
194
190
|
|
|
195
191
|
return bundle
|
|
@@ -300,10 +296,10 @@ def load(
|
|
|
300
296
|
if verbose:
|
|
301
297
|
print(f"[DEBUG] After Path conversion: {lpath}")
|
|
302
298
|
|
|
303
|
-
# Handle bundle formats (.
|
|
304
|
-
bundle_extensions = (".
|
|
299
|
+
# Handle bundle formats (.plot, .figure, .stats and their ZIP variants)
|
|
300
|
+
bundle_extensions = (".figure", ".plot", ".stats")
|
|
305
301
|
for bext in bundle_extensions:
|
|
306
|
-
if lpath.endswith(bext) or lpath.endswith(f"{bext}.
|
|
302
|
+
if lpath.endswith(bext) or lpath.endswith(f"{bext}.zip"):
|
|
307
303
|
return _load_bundle(lpath, verbose=verbose, **kwargs)
|
|
308
304
|
|
|
309
305
|
# Check if it's a glob pattern
|