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.
Files changed (504) hide show
  1. scitex/__init__.py +1 -4
  2. scitex/__main__.py +24 -5
  3. scitex/__version__.py +1 -1
  4. scitex/_install_guide.py +14 -2
  5. scitex/_optional_deps.py +33 -0
  6. scitex/ai/classification/reporters/_ClassificationReporter.py +1 -1
  7. scitex/ai/classification/timeseries/_TimeSeriesBlockingSplit.py +2 -2
  8. scitex/ai/classification/timeseries/_TimeSeriesCalendarSplit.py +2 -2
  9. scitex/ai/classification/timeseries/_TimeSeriesSlidingWindowSplit.py +2 -2
  10. scitex/ai/classification/timeseries/_TimeSeriesSlidingWindowSplit_v01-not-using-n_splits.py +2 -2
  11. scitex/ai/classification/timeseries/_TimeSeriesStratifiedSplit.py +2 -2
  12. scitex/ai/classification/timeseries/_normalize_timestamp.py +1 -1
  13. scitex/ai/metrics/_calc_seizure_prediction_metrics.py +1 -1
  14. scitex/ai/plt/_plot_feature_importance.py +1 -1
  15. scitex/ai/plt/_plot_learning_curve.py +1 -1
  16. scitex/ai/plt/_plot_optuna_study.py +1 -1
  17. scitex/ai/plt/_plot_pre_rec_curve.py +1 -1
  18. scitex/ai/plt/_plot_roc_curve.py +1 -1
  19. scitex/ai/plt/_stx_conf_mat.py +1 -1
  20. scitex/ai/training/_LearningCurveLogger.py +1 -1
  21. scitex/audio/mcp_server.py +38 -8
  22. scitex/bridge/_figrecipe.py +1 -1
  23. scitex/bridge/_helpers.py +1 -1
  24. scitex/bridge/_plt_vis.py +1 -1
  25. scitex/bridge/_stats_plt.py +1 -1
  26. scitex/bridge/_stats_vis.py +2 -2
  27. scitex/browser/automation/CookieHandler.py +1 -1
  28. scitex/browser/core/BrowserMixin.py +1 -1
  29. scitex/browser/core/ChromeProfileManager.py +1 -1
  30. scitex/browser/debugging/_browser_logger.py +1 -1
  31. scitex/browser/debugging/_highlight_element.py +1 -1
  32. scitex/browser/debugging/_show_grid.py +1 -1
  33. scitex/browser/interaction/click_center.py +1 -1
  34. scitex/browser/interaction/click_with_fallbacks.py +1 -1
  35. scitex/browser/interaction/close_popups.py +1 -1
  36. scitex/browser/interaction/fill_with_fallbacks.py +1 -1
  37. scitex/browser/pdf/click_download_for_chrome_pdf_viewer.py +1 -1
  38. scitex/browser/pdf/detect_chrome_pdf_viewer.py +1 -1
  39. scitex/browser/stealth/HumanBehavior.py +1 -1
  40. scitex/browser/stealth/StealthManager.py +1 -1
  41. scitex/{fig → canvas}/__init__.py +84 -96
  42. scitex/canvas/_mcp_handlers.py +372 -0
  43. scitex/canvas/_mcp_tool_schemas.py +219 -0
  44. scitex/{fig → canvas}/backend/_parser.py +1 -1
  45. scitex/{fig → canvas}/canvas.py +13 -14
  46. scitex/{fts/_fig/_editor → canvas/editor}/_defaults.py +2 -2
  47. scitex/{fig → canvas}/editor/edit/__init__.py +11 -14
  48. scitex/{fig → canvas}/editor/edit/bundle_resolver.py +56 -48
  49. scitex/{fig → canvas}/editor/edit/editor_launcher.py +79 -26
  50. scitex/{fts/_fig/_editor/_cui/_panel_loader.py → canvas/editor/edit/panel_loader.py} +8 -8
  51. scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/_bbox.py +2 -1
  52. scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/_core.py +84 -84
  53. scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/_renderer.py +7 -6
  54. scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/static/css/features/canvas.css +2 -2
  55. scitex/{fig → canvas}/editor/flask_editor/static/css/features/panel-grid.css +1 -1
  56. scitex/{fig → canvas}/editor/flask_editor/static/js/core/api.js +3 -4
  57. scitex/{fig → canvas}/editor/flask_editor/static/js/editor/preview.js +5 -5
  58. scitex/{fig → canvas}/editor/flask_editor/templates/_html.py +3 -3
  59. scitex/{fig → canvas}/editor/flask_editor/templates/_scripts.py +10 -10
  60. scitex/{fig → canvas}/editor/flask_editor/templates/_styles.py +3 -3
  61. scitex/{fig → canvas}/io/__init__.py +32 -38
  62. scitex/{fig → canvas}/io/_bundle.py +217 -154
  63. scitex/{fig → canvas}/io/_canvas.py +1 -1
  64. scitex/{fig → canvas}/io/_data.py +1 -1
  65. scitex/{fig → canvas}/io/_export.py +1 -1
  66. scitex/{fig → canvas}/io/_load.py +1 -1
  67. scitex/{fig → canvas}/io/_panel.py +1 -1
  68. scitex/{fig → canvas}/io/_save.py +1 -1
  69. scitex/canvas/mcp_server.py +151 -0
  70. scitex/{fig → canvas}/model/__init__.py +1 -1
  71. scitex/{fig → canvas}/model/_annotations.py +1 -1
  72. scitex/{fig → canvas}/model/_axes.py +1 -1
  73. scitex/{fig → canvas}/model/_figure.py +1 -1
  74. scitex/{fig → canvas}/model/_guides.py +1 -1
  75. scitex/{fig → canvas}/model/_plot.py +1 -1
  76. scitex/{fig → canvas}/model/_styles.py +1 -1
  77. scitex/{fig → canvas}/utils/__init__.py +1 -1
  78. scitex/capture/mcp_server.py +41 -12
  79. scitex/cli/audio.py +233 -0
  80. scitex/cli/capture.py +307 -0
  81. scitex/cli/convert.py +10 -6
  82. scitex/cli/main.py +27 -4
  83. scitex/cli/repro.py +233 -0
  84. scitex/cli/resource.py +240 -0
  85. scitex/cli/stats.py +325 -0
  86. scitex/cli/template.py +236 -0
  87. scitex/cli/tex.py +286 -0
  88. scitex/cli/web.py +11 -12
  89. scitex/dev/__init__.py +3 -0
  90. scitex/dev/_pyproject.py +405 -0
  91. scitex/dev/plt/__init__.py +2 -2
  92. scitex/dev/plt/mpl/get_dir_ax.py +1 -1
  93. scitex/dev/plt/mpl/get_signatures.py +1 -1
  94. scitex/dev/plt/mpl/get_signatures_details.py +1 -1
  95. scitex/diagram/README.md +7 -7
  96. scitex/diagram/_mcp_handlers.py +400 -0
  97. scitex/diagram/_mcp_tool_schemas.py +157 -0
  98. scitex/diagram/mcp_server.py +151 -0
  99. scitex/dsp/_demo_sig.py +51 -5
  100. scitex/dsp/_mne.py +13 -2
  101. scitex/dsp/_modulation_index.py +15 -3
  102. scitex/dsp/_pac.py +23 -5
  103. scitex/dsp/_psd.py +16 -4
  104. scitex/dsp/_resample.py +24 -4
  105. scitex/dsp/_transform.py +16 -3
  106. scitex/dsp/add_noise.py +15 -1
  107. scitex/dsp/norm.py +17 -2
  108. scitex/dsp/reference.py +17 -1
  109. scitex/dsp/utils/_differential_bandpass_filters.py +20 -2
  110. scitex/dsp/utils/_zero_pad.py +18 -4
  111. scitex/dt/_normalize_timestamp.py +1 -1
  112. scitex/git/_session.py +1 -1
  113. scitex/io/__init__.py +7 -19
  114. scitex/io/_load.py +15 -19
  115. scitex/io/_load_modules/_canvas.py +2 -2
  116. scitex/io/_load_modules/_con.py +17 -6
  117. scitex/io/_load_modules/_eeg.py +28 -13
  118. scitex/io/_load_modules/_optuna.py +21 -63
  119. scitex/io/_load_modules/_torch.py +11 -3
  120. scitex/io/_save.py +11 -16
  121. scitex/io/_save_modules/__init__.py +6 -10
  122. scitex/io/_save_modules/_canvas.py +3 -3
  123. scitex/io/_save_modules/_optuna_study_as_csv_and_pngs.py +13 -2
  124. scitex/io/_save_modules/_plot_bundle.py +112 -0
  125. scitex/io/_save_modules/{_pltz_stx.py → _plot_scitex.py} +7 -7
  126. scitex/io/_save_modules/_stx_bundle.py +16 -16
  127. scitex/io/_save_modules/_torch.py +11 -3
  128. scitex/io/bundle/README.md +89 -80
  129. scitex/{fts/_bundle/_FTS.py → io/bundle/_Bundle.py} +197 -95
  130. scitex/io/bundle/__init__.py +67 -35
  131. scitex/{fts/_bundle → io/bundle}/_children.py +32 -40
  132. scitex/io/bundle/_core.py +184 -97
  133. scitex/{fts/_bundle/_dataclasses/_Node.py → io/bundle/_dataclasses/_Spec.py} +29 -23
  134. scitex/{fts/_bundle/_dataclasses/_NodeRefs.py → io/bundle/_dataclasses/_SpecRefs.py} +6 -6
  135. scitex/{fts/_bundle → io/bundle}/_dataclasses/__init__.py +4 -4
  136. scitex/{fts/_bundle → io/bundle}/_loader.py +19 -19
  137. scitex/io/bundle/_manifest.py +99 -0
  138. scitex/{fts/_bundle → io/bundle}/_mpl_helpers.py +119 -28
  139. scitex/io/bundle/_nested.py +113 -100
  140. scitex/{fts/_bundle → io/bundle}/_saver.py +13 -14
  141. scitex/{fts/_bundle → io/bundle}/_storage.py +3 -3
  142. scitex/io/bundle/_types.py +41 -16
  143. scitex/{fts/_bundle → io/bundle}/_validation.py +20 -18
  144. scitex/io/bundle/_zip.py +21 -31
  145. scitex/{fts/_kinds → io/bundle/kinds}/_plot/_backend/_parser.py +1 -1
  146. scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Annotations.py +1 -1
  147. scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Axes.py +1 -1
  148. scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Figure.py +1 -1
  149. scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_Guides.py +1 -1
  150. scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Plot.py +1 -1
  151. scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_Styles.py +1 -1
  152. scitex/{fts/_kinds → io/bundle/kinds}/_plot/_utils/_plot_layout.py +1 -1
  153. scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/__init__.py +1 -1
  154. scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_editor/_app.py +1 -1
  155. scitex/{fts/_tables → io/bundle/kinds/_table}/_latex/_export.py +1 -1
  156. scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_figure_exporter.py +1 -1
  157. scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_table_exporter.py +1 -1
  158. scitex/io/bundle/schemas/__init__.py +30 -0
  159. scitex/mcp_server.py +159 -0
  160. scitex/parallel/_run.py +5 -4
  161. scitex/path/_find.py +60 -83
  162. scitex/path/_get_module_path.py +23 -21
  163. scitex/path/_get_spath.py +6 -27
  164. scitex/path/_getsize.py +23 -9
  165. scitex/path/_increment_version.py +31 -38
  166. scitex/path/_mk_spath.py +26 -29
  167. scitex/path/_path.py +5 -12
  168. scitex/path/_split.py +27 -15
  169. scitex/path/_this_path.py +23 -9
  170. scitex/plt/_mcp_handlers.py +361 -0
  171. scitex/plt/_mcp_tool_schemas.py +169 -0
  172. scitex/plt/_subplots/_AxisWrapperMixins/_MatplotlibPlotMixin/__init__.py +2 -1
  173. scitex/plt/_subplots/_AxisWrapperMixins/__init__.py +2 -2
  174. scitex/plt/gallery/_generate.py +76 -50
  175. scitex/plt/io/__init__.py +17 -19
  176. scitex/plt/io/_bundle.py +99 -52
  177. scitex/plt/io/_layered_bundle.py +303 -168
  178. scitex/plt/mcp_server.py +205 -0
  179. scitex/plt/utils/_csv_column_naming.py +250 -118
  180. scitex/repro/README_RandomStateManager.md +3 -3
  181. scitex/repro/_RandomStateManager.py +14 -14
  182. scitex/repro/_gen_ID.py +1 -1
  183. scitex/repro/_gen_timestamp.py +1 -1
  184. scitex/repro/_hash_array.py +4 -4
  185. scitex/schema/__init__.py +69 -73
  186. scitex/schema/_canvas.py +1 -1
  187. scitex/schema/_stats.py +2 -2
  188. scitex/scholar/__main__.py +24 -2
  189. scitex/scholar/_mcp_handlers.py +685 -0
  190. scitex/scholar/_mcp_tool_schemas.py +339 -0
  191. scitex/scholar/docs/template.py +1 -1
  192. scitex/scholar/examples/07_storage_integration.py +1 -1
  193. scitex/scholar/impact_factor/jcr/ImpactFactorJCREngine.py +1 -1
  194. scitex/scholar/impact_factor/jcr/build_database.py +1 -1
  195. scitex/scholar/mcp_server.py +315 -0
  196. scitex/scholar/pdf_download/ScholarPDFDownloader.py +1 -1
  197. scitex/scholar/pipelines/ScholarPipelineBibTeX.py +1 -1
  198. scitex/scholar/pipelines/ScholarPipelineParallel.py +1 -1
  199. scitex/scholar/pipelines/ScholarPipelineSingle.py +1 -1
  200. scitex/scholar/storage/PaperIO.py +1 -1
  201. scitex/session/README.md +4 -4
  202. scitex/session/__init__.py +1 -1
  203. scitex/session/_decorator.py +9 -9
  204. scitex/session/_lifecycle.py +5 -5
  205. scitex/session/template.py +1 -1
  206. scitex/stats/__init__.py +30 -33
  207. scitex/stats/__main__.py +281 -0
  208. scitex/stats/_mcp_handlers.py +1191 -0
  209. scitex/stats/_mcp_tool_schemas.py +384 -0
  210. scitex/stats/_schema.py +1 -1
  211. scitex/stats/correct/_correct_bonferroni.py +1 -1
  212. scitex/stats/correct/_correct_fdr.py +1 -1
  213. scitex/stats/correct/_correct_fdr_.py +1 -1
  214. scitex/stats/correct/_correct_holm.py +1 -1
  215. scitex/stats/correct/_correct_sidak.py +1 -1
  216. scitex/stats/effect_sizes/_cliffs_delta.py +1 -1
  217. scitex/stats/effect_sizes/_cohens_d.py +1 -1
  218. scitex/stats/effect_sizes/_epsilon_squared.py +1 -1
  219. scitex/stats/effect_sizes/_eta_squared.py +1 -1
  220. scitex/stats/effect_sizes/_prob_superiority.py +1 -1
  221. scitex/stats/io/__init__.py +10 -11
  222. scitex/stats/io/_bundle.py +16 -16
  223. scitex/stats/mcp_server.py +405 -0
  224. scitex/stats/posthoc/_dunnett.py +1 -1
  225. scitex/stats/posthoc/_games_howell.py +1 -1
  226. scitex/stats/posthoc/_tukey_hsd.py +1 -1
  227. scitex/stats/power/_power.py +1 -1
  228. scitex/stats/utils/_effect_size.py +1 -1
  229. scitex/stats/utils/_formatters.py +1 -1
  230. scitex/stats/utils/_power.py +1 -1
  231. scitex/template/_mcp_handlers.py +259 -0
  232. scitex/template/_mcp_tool_schemas.py +112 -0
  233. scitex/template/mcp_server.py +186 -0
  234. scitex/utils/_verify_scitex_format.py +2 -2
  235. scitex/utils/template.py +1 -1
  236. scitex/web/__init__.py +12 -11
  237. scitex/web/_scraping.py +26 -265
  238. scitex/web/download_images.py +316 -0
  239. scitex/writer/Writer.py +1 -1
  240. scitex/writer/_clone_writer_project.py +1 -1
  241. scitex/writer/_validate_tree_structures.py +1 -1
  242. scitex/writer/dataclasses/config/_WriterConfig.py +1 -1
  243. scitex/writer/dataclasses/contents/_ManuscriptContents.py +1 -1
  244. scitex/writer/dataclasses/core/_Document.py +1 -1
  245. scitex/writer/dataclasses/core/_DocumentSection.py +1 -1
  246. scitex/writer/dataclasses/results/_CompilationResult.py +1 -1
  247. scitex/writer/dataclasses/results/_LaTeXIssue.py +1 -1
  248. scitex/writer/utils/.legacy_git_retry.py +7 -5
  249. scitex/writer/utils/_parse_latex_logs.py +1 -1
  250. scitex-2.13.0.dist-info/METADATA +1231 -0
  251. {scitex-2.10.3.dist-info → scitex-2.13.0.dist-info}/RECORD +376 -470
  252. scitex-2.13.0.dist-info/entry_points.txt +11 -0
  253. scitex/fig/editor/_defaults.py +0 -300
  254. scitex/fig/editor/edit/panel_loader.py +0 -232
  255. scitex/fig/editor/flask_editor/_bbox.py +0 -1299
  256. scitex/fig/editor/flask_editor/_core.py +0 -1429
  257. scitex/fig/editor/flask_editor/_renderer.py +0 -813
  258. scitex/fig/editor/flask_editor/static/css/features/canvas.css +0 -176
  259. scitex/fts/README.md +0 -262
  260. scitex/fts/TODO.md +0 -66
  261. scitex/fts/__init__.py +0 -90
  262. scitex/fts/_bundle/README_IN_BUNDLE.md +0 -102
  263. scitex/fts/_bundle/__init__.py +0 -38
  264. scitex/fts/_bundle/_utils/__init__.py +0 -55
  265. scitex/fts/_bundle/_utils/_const.py +0 -26
  266. scitex/fts/_bundle/_utils/_errors.py +0 -73
  267. scitex/fts/_bundle/_utils/_generate.py +0 -21
  268. scitex/fts/_bundle/_utils/_types.py +0 -76
  269. scitex/fts/_bundle/_zipbundle.py +0 -165
  270. scitex/fts/_fig/__init__.py +0 -22
  271. scitex/fts/_fig/_backend/_parser.py +0 -188
  272. scitex/fts/_fig/_editor/__init__.py +0 -14
  273. scitex/fts/_fig/_editor/_cui/__init__.py +0 -33
  274. scitex/fts/_fig/_editor/_cui/_backend_detector.py +0 -39
  275. scitex/fts/_fig/_editor/_cui/_bundle_resolver.py +0 -366
  276. scitex/fts/_fig/_editor/_cui/_editor_launcher.py +0 -175
  277. scitex/fts/_fig/_editor/_cui/_manual_handler.py +0 -52
  278. scitex/fts/_fig/_editor/_cui/_path_resolver.py +0 -66
  279. scitex/fts/_fig/_editor/_gui/__init__.py +0 -11
  280. scitex/fts/_fig/_editor/_gui/_flask_editor/__init__.py +0 -20
  281. scitex/fts/_fig/_editor/_gui/_flask_editor/_plotter.py +0 -664
  282. scitex/fts/_fig/_editor/_gui/_flask_editor/_utils.py +0 -79
  283. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/base/reset.css +0 -41
  284. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/base/typography.css +0 -16
  285. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/base/variables.css +0 -85
  286. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/buttons.css +0 -217
  287. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/context-menu.css +0 -93
  288. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/dropdown.css +0 -57
  289. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/forms.css +0 -112
  290. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/modal.css +0 -59
  291. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/sections.css +0 -212
  292. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/element-inspector.css +0 -190
  293. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/loading.css +0 -59
  294. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/overlay.css +0 -45
  295. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/panel-grid.css +0 -95
  296. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/selection.css +0 -101
  297. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/statistics.css +0 -138
  298. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/index.css +0 -31
  299. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/layout/container.css +0 -7
  300. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/layout/controls.css +0 -56
  301. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/layout/preview.css +0 -78
  302. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/alignment/axis.js +0 -314
  303. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/alignment/basic.js +0 -107
  304. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/alignment/distribute.js +0 -54
  305. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/canvas.js +0 -172
  306. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/dragging.js +0 -258
  307. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/resize.js +0 -48
  308. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/selection.js +0 -71
  309. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/core/api.js +0 -288
  310. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/core/state.js +0 -143
  311. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/core/utils.js +0 -245
  312. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/dev/element-inspector.js +0 -992
  313. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/bbox.js +0 -339
  314. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/element-drag.js +0 -286
  315. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/overlay.js +0 -371
  316. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/preview.js +0 -293
  317. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/main.js +0 -426
  318. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/shortcuts/context-menu.js +0 -152
  319. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/shortcuts/keyboard.js +0 -265
  320. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/controls.js +0 -184
  321. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/download.js +0 -57
  322. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/help.js +0 -100
  323. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/theme.js +0 -34
  324. scitex/fts/_fig/_editor/_gui/_flask_editor/templates/__init__.py +0 -124
  325. scitex/fts/_fig/_editor/_gui/_flask_editor/templates/_html.py +0 -851
  326. scitex/fts/_fig/_editor/_gui/_flask_editor/templates/_scripts.py +0 -4932
  327. scitex/fts/_fig/_editor/_gui/_flask_editor/templates/_styles.py +0 -1657
  328. scitex/fts/_fig/_editor/_gui/_flask_editor.py +0 -36
  329. scitex/fts/_fig/_models/_Annotations.py +0 -115
  330. scitex/fts/_fig/_models/_Axes.py +0 -152
  331. scitex/fts/_fig/_models/_Figure.py +0 -138
  332. scitex/fts/_fig/_models/_Plot.py +0 -123
  333. scitex/fts/_fig/_utils/_plot_layout.py +0 -397
  334. scitex/fts/_kinds/_figure/_composite.py +0 -345
  335. scitex/fts/_kinds/_plot/_backend/__init__.py +0 -53
  336. scitex/fts/_kinds/_plot/_backend/_export.py +0 -165
  337. scitex/fts/_kinds/_plot/_backend/_render.py +0 -538
  338. scitex/fts/_kinds/_plot/_dataclasses/_ChannelEncoding.py +0 -46
  339. scitex/fts/_kinds/_plot/_dataclasses/_Encoding.py +0 -82
  340. scitex/fts/_kinds/_plot/_dataclasses/_Theme.py +0 -441
  341. scitex/fts/_kinds/_plot/_dataclasses/_TraceEncoding.py +0 -52
  342. scitex/fts/_kinds/_plot/_dataclasses/__init__.py +0 -47
  343. scitex/fts/_kinds/_plot/_models/_Guides.py +0 -104
  344. scitex/fts/_kinds/_plot/_models/_Styles.py +0 -245
  345. scitex/fts/_kinds/_plot/_models/__init__.py +0 -80
  346. scitex/fts/_kinds/_plot/_models/_plot_types/__init__.py +0 -156
  347. scitex/fts/_kinds/_plot/_models/_plot_types/_bar.py +0 -43
  348. scitex/fts/_kinds/_plot/_models/_plot_types/_box.py +0 -38
  349. scitex/fts/_kinds/_plot/_models/_plot_types/_distribution.py +0 -36
  350. scitex/fts/_kinds/_plot/_models/_plot_types/_errorbar.py +0 -60
  351. scitex/fts/_kinds/_plot/_models/_plot_types/_histogram.py +0 -30
  352. scitex/fts/_kinds/_plot/_models/_plot_types/_image.py +0 -61
  353. scitex/fts/_kinds/_plot/_models/_plot_types/_line.py +0 -57
  354. scitex/fts/_kinds/_plot/_models/_plot_types/_scatter.py +0 -30
  355. scitex/fts/_kinds/_plot/_models/_plot_types/_seaborn.py +0 -121
  356. scitex/fts/_kinds/_plot/_models/_plot_types/_violin.py +0 -36
  357. scitex/fts/_kinds/_plot/_utils/__init__.py +0 -129
  358. scitex/fts/_kinds/_plot/_utils/_auto_layout.py +0 -127
  359. scitex/fts/_kinds/_plot/_utils/_calc_bounds.py +0 -111
  360. scitex/fts/_kinds/_plot/_utils/_const_sizes.py +0 -48
  361. scitex/fts/_kinds/_plot/_utils/_convert_coords.py +0 -77
  362. scitex/fts/_kinds/_plot/_utils/_get_template.py +0 -178
  363. scitex/fts/_kinds/_plot/_utils/_normalize.py +0 -73
  364. scitex/fts/_kinds/_plot/_utils/_validate.py +0 -197
  365. scitex/fts/_kinds/_table/_latex/_export.py +0 -279
  366. scitex/fts/_stats/__init__.py +0 -48
  367. scitex/fts/_stats/_dataclasses/_Stats.py +0 -423
  368. scitex/fts/_stats/_dataclasses/__init__.py +0 -48
  369. scitex/fts/_tables/__init__.py +0 -65
  370. scitex/fts/_tables/_latex/__init__.py +0 -93
  371. scitex/fts/_tables/_latex/_editor/__init__.py +0 -11
  372. scitex/fts/_tables/_latex/_editor/_app.py +0 -725
  373. scitex/fts/_tables/_latex/_figure_exporter.py +0 -153
  374. scitex/fts/_tables/_latex/_stats_formatter.py +0 -274
  375. scitex/fts/_tables/_latex/_table_exporter.py +0 -362
  376. scitex/fts/_tables/_latex/_utils.py +0 -369
  377. scitex/fts/_tables/_latex/_validator.py +0 -445
  378. scitex/io/_save_modules/_pltz_bundle.py +0 -356
  379. scitex-2.10.3.dist-info/METADATA +0 -952
  380. scitex-2.10.3.dist-info/entry_points.txt +0 -2
  381. /scitex/{fig → canvas}/README.md +0 -0
  382. /scitex/{fig → canvas}/backend/__init__.py +0 -0
  383. /scitex/{fig → canvas}/backend/_export.py +0 -0
  384. /scitex/{fig → canvas}/backend/_render.py +0 -0
  385. /scitex/{fig → canvas}/docs/CANVAS_ARCHITECTURE.md +0 -0
  386. /scitex/{fig → canvas}/editor/__init__.py +0 -0
  387. /scitex/{fig → canvas}/editor/_dearpygui_editor.py +0 -0
  388. /scitex/{fig → canvas}/editor/_flask_editor.py +0 -0
  389. /scitex/{fig → canvas}/editor/_mpl_editor.py +0 -0
  390. /scitex/{fig → canvas}/editor/_qt_editor.py +0 -0
  391. /scitex/{fig → canvas}/editor/_tkinter_editor.py +0 -0
  392. /scitex/{fig → canvas}/editor/edit/backend_detector.py +0 -0
  393. /scitex/{fig → canvas}/editor/edit/manual_handler.py +0 -0
  394. /scitex/{fig → canvas}/editor/edit/path_resolver.py +0 -0
  395. /scitex/{fig → canvas}/editor/flask_editor/__init__.py +0 -0
  396. /scitex/{fig → canvas}/editor/flask_editor/_plotter.py +0 -0
  397. /scitex/{fig → canvas}/editor/flask_editor/_utils.py +0 -0
  398. /scitex/{fig → canvas}/editor/flask_editor/static/css/base/reset.css +0 -0
  399. /scitex/{fig → canvas}/editor/flask_editor/static/css/base/typography.css +0 -0
  400. /scitex/{fig → canvas}/editor/flask_editor/static/css/base/variables.css +0 -0
  401. /scitex/{fig → canvas}/editor/flask_editor/static/css/components/buttons.css +0 -0
  402. /scitex/{fig → canvas}/editor/flask_editor/static/css/components/context-menu.css +0 -0
  403. /scitex/{fig → canvas}/editor/flask_editor/static/css/components/dropdown.css +0 -0
  404. /scitex/{fig → canvas}/editor/flask_editor/static/css/components/forms.css +0 -0
  405. /scitex/{fig → canvas}/editor/flask_editor/static/css/components/modal.css +0 -0
  406. /scitex/{fig → canvas}/editor/flask_editor/static/css/components/sections.css +0 -0
  407. /scitex/{fig → canvas}/editor/flask_editor/static/css/features/element-inspector.css +0 -0
  408. /scitex/{fig → canvas}/editor/flask_editor/static/css/features/loading.css +0 -0
  409. /scitex/{fig → canvas}/editor/flask_editor/static/css/features/overlay.css +0 -0
  410. /scitex/{fig → canvas}/editor/flask_editor/static/css/features/selection.css +0 -0
  411. /scitex/{fig → canvas}/editor/flask_editor/static/css/features/statistics.css +0 -0
  412. /scitex/{fig → canvas}/editor/flask_editor/static/css/index.css +0 -0
  413. /scitex/{fig → canvas}/editor/flask_editor/static/css/layout/container.css +0 -0
  414. /scitex/{fig → canvas}/editor/flask_editor/static/css/layout/controls.css +0 -0
  415. /scitex/{fig → canvas}/editor/flask_editor/static/css/layout/preview.css +0 -0
  416. /scitex/{fig → canvas}/editor/flask_editor/static/js/alignment/axis.js +0 -0
  417. /scitex/{fig → canvas}/editor/flask_editor/static/js/alignment/basic.js +0 -0
  418. /scitex/{fig → canvas}/editor/flask_editor/static/js/alignment/distribute.js +0 -0
  419. /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/canvas.js +0 -0
  420. /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/dragging.js +0 -0
  421. /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/resize.js +0 -0
  422. /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/selection.js +0 -0
  423. /scitex/{fig → canvas}/editor/flask_editor/static/js/core/state.js +0 -0
  424. /scitex/{fig → canvas}/editor/flask_editor/static/js/core/utils.js +0 -0
  425. /scitex/{fig → canvas}/editor/flask_editor/static/js/dev/element-inspector.js +0 -0
  426. /scitex/{fig → canvas}/editor/flask_editor/static/js/editor/bbox.js +0 -0
  427. /scitex/{fig → canvas}/editor/flask_editor/static/js/editor/element-drag.js +0 -0
  428. /scitex/{fig → canvas}/editor/flask_editor/static/js/editor/overlay.js +0 -0
  429. /scitex/{fig → canvas}/editor/flask_editor/static/js/main.js +0 -0
  430. /scitex/{fig → canvas}/editor/flask_editor/static/js/shortcuts/context-menu.js +0 -0
  431. /scitex/{fig → canvas}/editor/flask_editor/static/js/shortcuts/keyboard.js +0 -0
  432. /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/controls.js +0 -0
  433. /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/download.js +0 -0
  434. /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/help.js +0 -0
  435. /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/theme.js +0 -0
  436. /scitex/{fig → canvas}/editor/flask_editor/templates/__init__.py +0 -0
  437. /scitex/{fig → canvas}/io/_directory.py +0 -0
  438. /scitex/{fig → canvas}/model/_plot_types.py +0 -0
  439. /scitex/{fig → canvas}/utils/_defaults.py +0 -0
  440. /scitex/{fig → canvas}/utils/_validate.py +0 -0
  441. /scitex/{fts/_bundle → io/bundle}/_conversion/__init__.py +0 -0
  442. /scitex/{fts/_bundle → io/bundle}/_conversion/_bundle2dict.py +0 -0
  443. /scitex/{fts/_bundle → io/bundle}/_conversion/_dict2bundle.py +0 -0
  444. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_Axes.py +0 -0
  445. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_BBox.py +0 -0
  446. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_ColumnDef.py +0 -0
  447. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_DataFormat.py +0 -0
  448. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_DataInfo.py +0 -0
  449. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_DataSource.py +0 -0
  450. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_SizeMM.py +0 -0
  451. /scitex/{fts/_bundle → io/bundle}/_extractors/__init__.py +0 -0
  452. /scitex/{fts/_bundle → io/bundle}/_extractors/_extract_bar.py +0 -0
  453. /scitex/{fts/_bundle → io/bundle}/_extractors/_extract_line.py +0 -0
  454. /scitex/{fts/_bundle → io/bundle}/_extractors/_extract_scatter.py +0 -0
  455. /scitex/{fts/_kinds → io/bundle/kinds}/__init__.py +0 -0
  456. /scitex/{fts/_kinds → io/bundle/kinds}/_figure/__init__.py +0 -0
  457. /scitex/{fts/_fig → io/bundle/kinds/_figure}/_composite.py +0 -0
  458. /scitex/{fts/_kinds → io/bundle/kinds}/_plot/__init__.py +0 -0
  459. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_backend/__init__.py +0 -0
  460. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_backend/_export.py +0 -0
  461. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_backend/_render.py +0 -0
  462. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_ChannelEncoding.py +0 -0
  463. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_Encoding.py +0 -0
  464. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_Theme.py +0 -0
  465. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_TraceEncoding.py +0 -0
  466. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/__init__.py +0 -0
  467. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/__init__.py +0 -0
  468. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/__init__.py +0 -0
  469. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_bar.py +0 -0
  470. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_box.py +0 -0
  471. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_distribution.py +0 -0
  472. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_errorbar.py +0 -0
  473. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_histogram.py +0 -0
  474. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_image.py +0 -0
  475. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_line.py +0 -0
  476. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_scatter.py +0 -0
  477. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_seaborn.py +0 -0
  478. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_violin.py +0 -0
  479. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/__init__.py +0 -0
  480. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_auto_layout.py +0 -0
  481. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_calc_bounds.py +0 -0
  482. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_const_sizes.py +0 -0
  483. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_convert_coords.py +0 -0
  484. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_get_template.py +0 -0
  485. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_normalize.py +0 -0
  486. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_validate.py +0 -0
  487. /scitex/{fts/_kinds → io/bundle/kinds}/_shape/__init__.py +0 -0
  488. /scitex/{fts/_kinds → io/bundle/kinds}/_stats/__init__.py +0 -0
  489. /scitex/{fts/_kinds → io/bundle/kinds}/_stats/_dataclasses/_Stats.py +0 -0
  490. /scitex/{fts/_kinds → io/bundle/kinds}/_stats/_dataclasses/__init__.py +0 -0
  491. /scitex/{fts/_kinds → io/bundle/kinds}/_table/__init__.py +0 -0
  492. /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_editor/__init__.py +0 -0
  493. /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_stats_formatter.py +0 -0
  494. /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_utils.py +0 -0
  495. /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_validator.py +0 -0
  496. /scitex/{fts/_kinds → io/bundle/kinds}/_text/__init__.py +0 -0
  497. /scitex/{fts/_schemas → io/bundle/schemas}/data_info.schema.json +0 -0
  498. /scitex/{fts/_schemas → io/bundle/schemas}/encoding.schema.json +0 -0
  499. /scitex/{fts/_schemas → io/bundle/schemas}/node.schema.json +0 -0
  500. /scitex/{fts/_schemas → io/bundle/schemas}/render_manifest.schema.json +0 -0
  501. /scitex/{fts/_schemas → io/bundle/schemas}/stats.schema.json +0 -0
  502. /scitex/{fts/_schemas → io/bundle/schemas}/theme.schema.json +0 -0
  503. {scitex-2.10.3.dist-info → scitex-2.13.0.dist-info}/WHEEL +0 -0
  504. {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
- from tensorpac.signals import pac_signals_wavelet
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
- import mne
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 = [
@@ -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
- import torch
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
- from scitex.nn._ModulationIndex import ModulationIndex
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
- from scitex.decorators import signal_fn, batch_fn
16
- from scitex.nn._PAC import PAC
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
- import torch
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
- from scitex.nn._PSD import PSD
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
- import torch
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
- import torch
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
- import torch as _torch
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
- import torch as _torch
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
- import torch
12
- import torch.nn as nn
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(
@@ -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
- import torch
10
- import torch.nn.functional as F
11
- from scitex.decorators import torch_fn
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)
@@ -408,7 +408,7 @@ def run_main() -> None:
408
408
 
409
409
  args = parse_args()
410
410
 
411
- CONFIG, sys.stdout, sys.stderr, plt, CC, rng_manager = stx.session.start(
411
+ CONFIG, sys.stdout, sys.stderr, plt, CC, rng = stx.session.start(
412
412
  sys,
413
413
  plt,
414
414
  args=args,
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, rng_manager = stx.session.start(
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.fts:
13
- from scitex.fts import FTS
14
- bundle = FTS("Figure1.stx")
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
- clear_cache as clear_load_cache,
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 .pltz, .figz, or .statsz bundle.
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 .pltz bundles:
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 .figz bundles:
116
+ For .figure bundles:
121
117
  dict: Figure data with 'spec' and 'panels'.
122
- For .statsz bundles:
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.PLTZ:
132
- # Return (fig, ax, data) tuple for .pltz bundles
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 load_layered_pltz_bundle)
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.FIGZ:
188
- # Return figure dict for .figz bundles
183
+ elif bundle_type == BundleType.FIGURE:
184
+ # Return figure dict for .figure bundles
189
185
  return bundle
190
186
 
191
- elif bundle_type == BundleType.STATSZ:
192
- # Return stats dict for .statsz bundles
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 (.pltz, .figz, .statsz and their .d variants)
304
- bundle_extensions = (".figz", ".pltz", ".statsz")
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}.d"):
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