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
@@ -1,952 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: scitex
3
- Version: 2.10.3
4
- Summary: A comprehensive Python library for scientific computing and data analysis
5
- Project-URL: Homepage, https://github.com/ywatanabe1989/scitex-code
6
- Project-URL: Documentation, https://scitex.readthedocs.io
7
- Project-URL: Repository, https://github.com/ywatanabe1989/scitex-code
8
- Project-URL: Bug Tracker, https://github.com/ywatanabe1989/scitex-code/issues
9
- Author-email: Yusuke Watanabe <ywatanabe@scitex.ai>
10
- License: AGPL-3.0
11
- License-File: LICENSE
12
- Keywords: data-analysis,machine-learning,neural-networks,research,scientific-computing,signal-processing
13
- Classifier: Development Status :: 4 - Beta
14
- Classifier: Intended Audience :: Developers
15
- Classifier: Intended Audience :: Science/Research
16
- Classifier: License :: OSI Approved :: GNU Affero General Public License v3
17
- Classifier: Operating System :: OS Independent
18
- Classifier: Programming Language :: Python :: 3
19
- Classifier: Programming Language :: Python :: 3.8
20
- Classifier: Programming Language :: Python :: 3.9
21
- Classifier: Programming Language :: Python :: 3.10
22
- Classifier: Programming Language :: Python :: 3.11
23
- Classifier: Programming Language :: Python :: 3.12
24
- Classifier: Topic :: Scientific/Engineering
25
- Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
26
- Classifier: Topic :: Scientific/Engineering :: Information Analysis
27
- Classifier: Topic :: Software Development :: Libraries :: Python Modules
28
- Requires-Python: >=3.8
29
- Requires-Dist: natsort
30
- Requires-Dist: numpy
31
- Requires-Dist: packaging
32
- Requires-Dist: pandas
33
- Requires-Dist: pyyaml
34
- Requires-Dist: tqdm
35
- Provides-Extra: ai
36
- Requires-Dist: anthropic; extra == 'ai'
37
- Requires-Dist: google-genai; extra == 'ai'
38
- Requires-Dist: groq; extra == 'ai'
39
- Requires-Dist: joblib; extra == 'ai'
40
- Requires-Dist: matplotlib; extra == 'ai'
41
- Requires-Dist: openai; extra == 'ai'
42
- Requires-Dist: optuna; extra == 'ai'
43
- Requires-Dist: scikit-learn; extra == 'ai'
44
- Requires-Dist: scipy; extra == 'ai'
45
- Requires-Dist: seaborn; extra == 'ai'
46
- Provides-Extra: all
47
- Requires-Dist: accelerate; extra == 'all'
48
- Requires-Dist: aiohttp; extra == 'all'
49
- Requires-Dist: anthropic; extra == 'all'
50
- Requires-Dist: beautifulsoup4; extra == 'all'
51
- Requires-Dist: bibtexparser; extra == 'all'
52
- Requires-Dist: bitsandbytes; extra == 'all'
53
- Requires-Dist: catboost; extra == 'all'
54
- Requires-Dist: celery; extra == 'all'
55
- Requires-Dist: click; extra == 'all'
56
- Requires-Dist: crawl4ai; extra == 'all'
57
- Requires-Dist: csv2latex; extra == 'all'
58
- Requires-Dist: dearpygui; extra == 'all'
59
- Requires-Dist: einops; extra == 'all'
60
- Requires-Dist: elevenlabs; extra == 'all'
61
- Requires-Dist: fairscale; extra == 'all'
62
- Requires-Dist: fastapi; extra == 'all'
63
- Requires-Dist: feedparser; extra == 'all'
64
- Requires-Dist: figrecipe; extra == 'all'
65
- Requires-Dist: flask; extra == 'all'
66
- Requires-Dist: geom-median; extra == 'all'
67
- Requires-Dist: gitpython; extra == 'all'
68
- Requires-Dist: google-genai; extra == 'all'
69
- Requires-Dist: groq; extra == 'all'
70
- Requires-Dist: gtts; extra == 'all'
71
- Requires-Dist: h5py; extra == 'all'
72
- Requires-Dist: html2text; extra == 'all'
73
- Requires-Dist: httpx; extra == 'all'
74
- Requires-Dist: imbalanced-learn; extra == 'all'
75
- Requires-Dist: ipdb; extra == 'all'
76
- Requires-Dist: ipykernel; extra == 'all'
77
- Requires-Dist: ipython; extra == 'all'
78
- Requires-Dist: joblib; extra == 'all'
79
- Requires-Dist: julius; extra == 'all'
80
- Requires-Dist: jupyter-collaboration; extra == 'all'
81
- Requires-Dist: jupyterlab; extra == 'all'
82
- Requires-Dist: jupytext; extra == 'all'
83
- Requires-Dist: llvmlite>=0.39.0; extra == 'all'
84
- Requires-Dist: lxml; extra == 'all'
85
- Requires-Dist: lxml-html-clean; extra == 'all'
86
- Requires-Dist: markdown; extra == 'all'
87
- Requires-Dist: matplotlib; extra == 'all'
88
- Requires-Dist: mcp; extra == 'all'
89
- Requires-Dist: mne; extra == 'all'
90
- Requires-Dist: mss; extra == 'all'
91
- Requires-Dist: natsort; extra == 'all'
92
- Requires-Dist: nbsphinx; extra == 'all'
93
- Requires-Dist: nest-asyncio; extra == 'all'
94
- Requires-Dist: numcodecs; extra == 'all'
95
- Requires-Dist: obspy; extra == 'all'
96
- Requires-Dist: openai; extra == 'all'
97
- Requires-Dist: opencv-python; extra == 'all'
98
- Requires-Dist: openpyxl; extra == 'all'
99
- Requires-Dist: optuna; extra == 'all'
100
- Requires-Dist: papermill; extra == 'all'
101
- Requires-Dist: pdfplumber; extra == 'all'
102
- Requires-Dist: piexif; extra == 'all'
103
- Requires-Dist: pillow; extra == 'all'
104
- Requires-Dist: playwright>=1.40.0; extra == 'all'
105
- Requires-Dist: plotly; extra == 'all'
106
- Requires-Dist: psutil; extra == 'all'
107
- Requires-Dist: psycopg2-binary; extra == 'all'
108
- Requires-Dist: pybids; extra == 'all'
109
- Requires-Dist: pydantic; extra == 'all'
110
- Requires-Dist: pydub; extra == 'all'
111
- Requires-Dist: pyedflib; extra == 'all'
112
- Requires-Dist: pymatreader; extra == 'all'
113
- Requires-Dist: pymed; extra == 'all'
114
- Requires-Dist: pymupdf; extra == 'all'
115
- Requires-Dist: pypandoc; extra == 'all'
116
- Requires-Dist: pypdf; extra == 'all'
117
- Requires-Dist: pypdf2; extra == 'all'
118
- Requires-Dist: pyperclip; extra == 'all'
119
- Requires-Dist: pyqt6; extra == 'all'
120
- Requires-Dist: pytesseract; extra == 'all'
121
- Requires-Dist: python-docx; extra == 'all'
122
- Requires-Dist: pytorch-optimizer; extra == 'all'
123
- Requires-Dist: pytorch-pretrained-vit; extra == 'all'
124
- Requires-Dist: pyttsx3; extra == 'all'
125
- Requires-Dist: qrcode[pil]; extra == 'all'
126
- Requires-Dist: readability-lxml; extra == 'all'
127
- Requires-Dist: readchar; extra == 'all'
128
- Requires-Dist: requests; extra == 'all'
129
- Requires-Dist: ripple-detection; extra == 'all'
130
- Requires-Dist: ruamel-yaml; extra == 'all'
131
- Requires-Dist: scholarly; extra == 'all'
132
- Requires-Dist: scikit-image; extra == 'all'
133
- Requires-Dist: scikit-learn; extra == 'all'
134
- Requires-Dist: scipy; extra == 'all'
135
- Requires-Dist: seaborn; extra == 'all'
136
- Requires-Dist: selenium; extra == 'all'
137
- Requires-Dist: sktime; extra == 'all'
138
- Requires-Dist: sounddevice; extra == 'all'
139
- Requires-Dist: sqlalchemy; extra == 'all'
140
- Requires-Dist: statsmodels; extra == 'all'
141
- Requires-Dist: streamlit; extra == 'all'
142
- Requires-Dist: sympy; extra == 'all'
143
- Requires-Dist: tenacity; extra == 'all'
144
- Requires-Dist: tensorpac; extra == 'all'
145
- Requires-Dist: termplotlib; extra == 'all'
146
- Requires-Dist: torch; extra == 'all'
147
- Requires-Dist: torchaudio; extra == 'all'
148
- Requires-Dist: torchsummary; extra == 'all'
149
- Requires-Dist: torchvision; extra == 'all'
150
- Requires-Dist: transformers; extra == 'all'
151
- Requires-Dist: umap-learn>=0.5.4; extra == 'all'
152
- Requires-Dist: watchdog; extra == 'all'
153
- Requires-Dist: webdriver-manager; extra == 'all'
154
- Requires-Dist: xarray; extra == 'all'
155
- Requires-Dist: xlrd; extra == 'all'
156
- Requires-Dist: xlsx2csv; extra == 'all'
157
- Requires-Dist: yq; extra == 'all'
158
- Requires-Dist: zarr; extra == 'all'
159
- Provides-Extra: audio
160
- Requires-Dist: elevenlabs; extra == 'audio'
161
- Requires-Dist: gtts; extra == 'audio'
162
- Requires-Dist: mcp; extra == 'audio'
163
- Requires-Dist: pydub; extra == 'audio'
164
- Requires-Dist: pyttsx3; extra == 'audio'
165
- Provides-Extra: benchmark
166
- Requires-Dist: psutil; extra == 'benchmark'
167
- Provides-Extra: browser
168
- Requires-Dist: aiohttp; extra == 'browser'
169
- Requires-Dist: playwright>=1.40.0; extra == 'browser'
170
- Provides-Extra: capture
171
- Requires-Dist: mcp; extra == 'capture'
172
- Requires-Dist: mss; extra == 'capture'
173
- Requires-Dist: pillow; extra == 'capture'
174
- Requires-Dist: playwright>=1.40.0; extra == 'capture'
175
- Provides-Extra: cli
176
- Requires-Dist: click; extra == 'cli'
177
- Requires-Dist: requests; extra == 'cli'
178
- Provides-Extra: db
179
- Requires-Dist: psycopg2-binary; extra == 'db'
180
- Requires-Dist: sqlalchemy; extra == 'db'
181
- Provides-Extra: decorators
182
- Requires-Dist: joblib; extra == 'decorators'
183
- Provides-Extra: dev
184
- Requires-Dist: build; extra == 'dev'
185
- Requires-Dist: jedi; extra == 'dev'
186
- Requires-Dist: line-profiler; extra == 'dev'
187
- Requires-Dist: markdown; extra == 'dev'
188
- Requires-Dist: markdown2; extra == 'dev'
189
- Requires-Dist: memory-profiler; extra == 'dev'
190
- Requires-Dist: mypy; extra == 'dev'
191
- Requires-Dist: myst-parser; extra == 'dev'
192
- Requires-Dist: pre-commit; extra == 'dev'
193
- Requires-Dist: pygments; extra == 'dev'
194
- Requires-Dist: pyright; extra == 'dev'
195
- Requires-Dist: pytest; extra == 'dev'
196
- Requires-Dist: pytest-asyncio; extra == 'dev'
197
- Requires-Dist: pytest-cov; extra == 'dev'
198
- Requires-Dist: pytest-env; extra == 'dev'
199
- Requires-Dist: pytest-json-report; extra == 'dev'
200
- Requires-Dist: pytest-mock; extra == 'dev'
201
- Requires-Dist: pytest-testmon; extra == 'dev'
202
- Requires-Dist: pytest-timeout; extra == 'dev'
203
- Requires-Dist: pytest-xdist; extra == 'dev'
204
- Requires-Dist: python-lsp-server; extra == 'dev'
205
- Requires-Dist: rope; extra == 'dev'
206
- Requires-Dist: ruff; extra == 'dev'
207
- Requires-Dist: setuptools; extra == 'dev'
208
- Requires-Dist: sphinx; extra == 'dev'
209
- Requires-Dist: sphinx-autobuild; extra == 'dev'
210
- Requires-Dist: sphinx-autodoc-typehints; extra == 'dev'
211
- Requires-Dist: sphinx-rtd-theme; extra == 'dev'
212
- Requires-Dist: twine; extra == 'dev'
213
- Requires-Dist: types-pyyaml; extra == 'dev'
214
- Requires-Dist: types-requests; extra == 'dev'
215
- Requires-Dist: types-setuptools; extra == 'dev'
216
- Requires-Dist: wheel; extra == 'dev'
217
- Provides-Extra: dl
218
- Requires-Dist: accelerate; extra == 'dl'
219
- Requires-Dist: bitsandbytes; extra == 'dl'
220
- Requires-Dist: einops; extra == 'dl'
221
- Requires-Dist: fairscale; extra == 'dl'
222
- Requires-Dist: pytorch-optimizer; extra == 'dl'
223
- Requires-Dist: pytorch-pretrained-vit; extra == 'dl'
224
- Requires-Dist: torch; extra == 'dl'
225
- Requires-Dist: torchaudio; extra == 'dl'
226
- Requires-Dist: torchsummary; extra == 'dl'
227
- Requires-Dist: torchvision; extra == 'dl'
228
- Requires-Dist: transformers; extra == 'dl'
229
- Provides-Extra: dsp
230
- Requires-Dist: matplotlib; extra == 'dsp'
231
- Requires-Dist: scipy; extra == 'dsp'
232
- Requires-Dist: sounddevice; extra == 'dsp'
233
- Provides-Extra: figures
234
- Requires-Dist: figrecipe; extra == 'figures'
235
- Provides-Extra: fts
236
- Requires-Dist: flask; extra == 'fts'
237
- Requires-Dist: matplotlib; extra == 'fts'
238
- Requires-Dist: pillow; extra == 'fts'
239
- Provides-Extra: gen
240
- Requires-Dist: h5py; extra == 'gen'
241
- Requires-Dist: ipython; extra == 'gen'
242
- Requires-Dist: matplotlib; extra == 'gen'
243
- Requires-Dist: pyperclip; extra == 'gen'
244
- Requires-Dist: readchar; extra == 'gen'
245
- Requires-Dist: scipy; extra == 'gen'
246
- Requires-Dist: xarray; extra == 'gen'
247
- Provides-Extra: git
248
- Requires-Dist: gitpython; extra == 'git'
249
- Requires-Dist: matplotlib; extra == 'git'
250
- Provides-Extra: gui
251
- Requires-Dist: dearpygui; extra == 'gui'
252
- Requires-Dist: flask; extra == 'gui'
253
- Requires-Dist: pyqt6; extra == 'gui'
254
- Provides-Extra: io
255
- Requires-Dist: gitpython; extra == 'io'
256
- Requires-Dist: h5py; extra == 'io'
257
- Requires-Dist: html2text; extra == 'io'
258
- Requires-Dist: joblib; extra == 'io'
259
- Requires-Dist: lxml; extra == 'io'
260
- Requires-Dist: lxml-html-clean; extra == 'io'
261
- Requires-Dist: markdown; extra == 'io'
262
- Requires-Dist: matplotlib; extra == 'io'
263
- Requires-Dist: natsort; extra == 'io'
264
- Requires-Dist: numcodecs; extra == 'io'
265
- Requires-Dist: openpyxl; extra == 'io'
266
- Requires-Dist: pdfplumber; extra == 'io'
267
- Requires-Dist: piexif; extra == 'io'
268
- Requires-Dist: pillow; extra == 'io'
269
- Requires-Dist: plotly; extra == 'io'
270
- Requires-Dist: pymatreader; extra == 'io'
271
- Requires-Dist: pymupdf; extra == 'io'
272
- Requires-Dist: pypdf; extra == 'io'
273
- Requires-Dist: pypdf2; extra == 'io'
274
- Requires-Dist: python-docx; extra == 'io'
275
- Requires-Dist: qrcode[pil]; extra == 'io'
276
- Requires-Dist: ruamel-yaml; extra == 'io'
277
- Requires-Dist: scipy; extra == 'io'
278
- Requires-Dist: xarray; extra == 'io'
279
- Requires-Dist: xlrd; extra == 'io'
280
- Requires-Dist: zarr; extra == 'io'
281
- Provides-Extra: jupyter
282
- Requires-Dist: ipdb; extra == 'jupyter'
283
- Requires-Dist: ipykernel; extra == 'jupyter'
284
- Requires-Dist: ipython; extra == 'jupyter'
285
- Requires-Dist: jupyter-collaboration; extra == 'jupyter'
286
- Requires-Dist: jupyterlab; extra == 'jupyter'
287
- Requires-Dist: jupytext; extra == 'jupyter'
288
- Requires-Dist: nbsphinx; extra == 'jupyter'
289
- Requires-Dist: papermill; extra == 'jupyter'
290
- Provides-Extra: linalg
291
- Requires-Dist: geom-median; extra == 'linalg'
292
- Requires-Dist: matplotlib; extra == 'linalg'
293
- Requires-Dist: scipy; extra == 'linalg'
294
- Requires-Dist: sympy; extra == 'linalg'
295
- Provides-Extra: ml
296
- Requires-Dist: catboost; extra == 'ml'
297
- Requires-Dist: imbalanced-learn; extra == 'ml'
298
- Requires-Dist: llvmlite>=0.39.0; extra == 'ml'
299
- Requires-Dist: opencv-python; extra == 'ml'
300
- Requires-Dist: optuna; extra == 'ml'
301
- Requires-Dist: scikit-image; extra == 'ml'
302
- Requires-Dist: scikit-learn; extra == 'ml'
303
- Requires-Dist: sktime; extra == 'ml'
304
- Requires-Dist: sympy; extra == 'ml'
305
- Requires-Dist: umap-learn>=0.5.4; extra == 'ml'
306
- Provides-Extra: msword
307
- Requires-Dist: pypandoc; extra == 'msword'
308
- Requires-Dist: python-docx; extra == 'msword'
309
- Provides-Extra: neuro
310
- Requires-Dist: geom-median; extra == 'neuro'
311
- Requires-Dist: mne; extra == 'neuro'
312
- Requires-Dist: obspy; extra == 'neuro'
313
- Requires-Dist: pybids; extra == 'neuro'
314
- Requires-Dist: pyedflib; extra == 'neuro'
315
- Requires-Dist: ripple-detection; extra == 'neuro'
316
- Requires-Dist: tensorpac; extra == 'neuro'
317
- Provides-Extra: nn
318
- Requires-Dist: ipdb; extra == 'nn'
319
- Requires-Dist: julius; extra == 'nn'
320
- Requires-Dist: matplotlib; extra == 'nn'
321
- Requires-Dist: seaborn; extra == 'nn'
322
- Requires-Dist: torch; extra == 'nn'
323
- Requires-Dist: torchaudio; extra == 'nn'
324
- Requires-Dist: torchsummary; extra == 'nn'
325
- Provides-Extra: path
326
- Requires-Dist: gitpython; extra == 'path'
327
- Requires-Dist: matplotlib; extra == 'path'
328
- Provides-Extra: plt
329
- Requires-Dist: matplotlib; extra == 'plt'
330
- Requires-Dist: piexif; extra == 'plt'
331
- Requires-Dist: pillow; extra == 'plt'
332
- Requires-Dist: scipy; extra == 'plt'
333
- Requires-Dist: seaborn; extra == 'plt'
334
- Requires-Dist: termplotlib; extra == 'plt'
335
- Requires-Dist: xarray; extra == 'plt'
336
- Provides-Extra: repro
337
- Requires-Dist: matplotlib; extra == 'repro'
338
- Requires-Dist: torch; extra == 'repro'
339
- Provides-Extra: resource
340
- Requires-Dist: matplotlib; extra == 'resource'
341
- Requires-Dist: psutil; extra == 'resource'
342
- Provides-Extra: scholar
343
- Requires-Dist: aiohttp; extra == 'scholar'
344
- Requires-Dist: beautifulsoup4; extra == 'scholar'
345
- Requires-Dist: bibtexparser; extra == 'scholar'
346
- Requires-Dist: crawl4ai; extra == 'scholar'
347
- Requires-Dist: feedparser; extra == 'scholar'
348
- Requires-Dist: html2text; extra == 'scholar'
349
- Requires-Dist: httpx; extra == 'scholar'
350
- Requires-Dist: matplotlib; extra == 'scholar'
351
- Requires-Dist: natsort; extra == 'scholar'
352
- Requires-Dist: nest-asyncio; extra == 'scholar'
353
- Requires-Dist: openpyxl; extra == 'scholar'
354
- Requires-Dist: pdfplumber; extra == 'scholar'
355
- Requires-Dist: pillow; extra == 'scholar'
356
- Requires-Dist: playwright>=1.40.0; extra == 'scholar'
357
- Requires-Dist: pydantic; extra == 'scholar'
358
- Requires-Dist: pymed; extra == 'scholar'
359
- Requires-Dist: pymupdf; extra == 'scholar'
360
- Requires-Dist: pypdf2; extra == 'scholar'
361
- Requires-Dist: pytesseract; extra == 'scholar'
362
- Requires-Dist: python-docx; extra == 'scholar'
363
- Requires-Dist: requests; extra == 'scholar'
364
- Requires-Dist: scholarly; extra == 'scholar'
365
- Requires-Dist: scikit-learn; extra == 'scholar'
366
- Requires-Dist: seaborn; extra == 'scholar'
367
- Requires-Dist: selenium; extra == 'scholar'
368
- Requires-Dist: sqlalchemy; extra == 'scholar'
369
- Requires-Dist: tenacity; extra == 'scholar'
370
- Requires-Dist: watchdog; extra == 'scholar'
371
- Requires-Dist: webdriver-manager; extra == 'scholar'
372
- Provides-Extra: science
373
- Requires-Dist: h5py; extra == 'science'
374
- Requires-Dist: matplotlib; extra == 'science'
375
- Requires-Dist: pillow; extra == 'science'
376
- Requires-Dist: plotly; extra == 'science'
377
- Requires-Dist: scikit-learn; extra == 'science'
378
- Requires-Dist: scipy; extra == 'science'
379
- Requires-Dist: seaborn; extra == 'science'
380
- Requires-Dist: statsmodels; extra == 'science'
381
- Requires-Dist: xarray; extra == 'science'
382
- Provides-Extra: stats
383
- Requires-Dist: matplotlib; extra == 'stats'
384
- Requires-Dist: scipy; extra == 'stats'
385
- Requires-Dist: statsmodels; extra == 'stats'
386
- Provides-Extra: str
387
- Requires-Dist: matplotlib; extra == 'str'
388
- Requires-Dist: natsort; extra == 'str'
389
- Requires-Dist: xarray; extra == 'str'
390
- Provides-Extra: torch
391
- Requires-Dist: torch; extra == 'torch'
392
- Provides-Extra: types
393
- Requires-Dist: torch; extra == 'types'
394
- Requires-Dist: xarray; extra == 'types'
395
- Provides-Extra: utils
396
- Requires-Dist: h5py; extra == 'utils'
397
- Requires-Dist: matplotlib; extra == 'utils'
398
- Requires-Dist: natsort; extra == 'utils'
399
- Requires-Dist: xarray; extra == 'utils'
400
- Provides-Extra: web
401
- Requires-Dist: aiohttp; extra == 'web'
402
- Requires-Dist: beautifulsoup4; extra == 'web'
403
- Requires-Dist: matplotlib; extra == 'web'
404
- Requires-Dist: pillow; extra == 'web'
405
- Requires-Dist: readability-lxml; extra == 'web'
406
- Requires-Dist: requests; extra == 'web'
407
- Provides-Extra: webdev
408
- Requires-Dist: celery; extra == 'webdev'
409
- Requires-Dist: fastapi; extra == 'webdev'
410
- Requires-Dist: flask; extra == 'webdev'
411
- Requires-Dist: streamlit; extra == 'webdev'
412
- Provides-Extra: writer
413
- Requires-Dist: csv2latex; extra == 'writer'
414
- Requires-Dist: matplotlib; extra == 'writer'
415
- Requires-Dist: xlsx2csv; extra == 'writer'
416
- Requires-Dist: yq; extra == 'writer'
417
- Description-Content-Type: text/markdown
418
-
419
- <!-- ---
420
- !-- Timestamp: 2026-01-05 16:58:59
421
- !-- Author: ywatanabe
422
- !-- File: /home/ywatanabe/proj/scitex-code/README.md
423
- !-- --- -->
424
-
425
- # SciTeX
426
-
427
- A Python framework for scientific research that makes the entire research pipeline more standardized, structured, and reproducible by automating repetitive processes.
428
-
429
- Part of the fully open-source SciTeX project: https://scitex.ai
430
-
431
- <!-- badges -->
432
- [![PyPI version](https://badge.fury.io/py/scitex.svg)](https://badge.fury.io/py/scitex)
433
- [![Python Versions](https://img.shields.io/pypi/pyversions/scitex.svg)](https://pypi.org/project/scitex/)
434
- [![License](https://img.shields.io/github/license/ywatanabe1989/SciTeX-Code)](https://github.com/ywatanabe1989/SciTeX-Code/blob/main/LICENSE)
435
- [![Documentation](https://readthedocs.org/projects/scitex/badge/?version=latest)](https://scitex.readthedocs.io/en/latest/?badge=latest)
436
- [![Code Style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
437
- [![Pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)
438
-
439
- <details>
440
- <summary><strong>Module Test Status (v2.10.0) - 41 modules</strong></summary>
441
-
442
- **Core Modules**
443
-
444
- [![io](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-io.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-io.yml)
445
- [![path](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-path.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-path.yml)
446
- [![str](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-str.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-str.yml)
447
- [![dict](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-dict.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-dict.yml)
448
- [![types](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-types.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-types.yml)
449
- [![config](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-config.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-config.yml)
450
- [![utils](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-utils.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-utils.yml)
451
- [![decorators](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-decorators.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-decorators.yml)
452
- [![logging](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-logging.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-logging.yml)
453
- [![stats](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-stats.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-stats.yml)
454
- [![pd](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-pd.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-pd.yml)
455
- [![linalg](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-linalg.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-linalg.yml)
456
- [![torch](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-torch.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-torch.yml)
457
- [![gen](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-gen.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-gen.yml)
458
-
459
- **Extended Modules**
460
-
461
- [![nn](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-nn.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-nn.yml)
462
- [![ai](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-ai.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-ai.yml)
463
- [![writer](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-writer.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-writer.yml)
464
- [![audio](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-audio.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-audio.yml)
465
- [![capture](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-capture.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-capture.yml)
466
- [![cli](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-cli.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-cli.yml)
467
- [![sh](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-sh.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-sh.yml)
468
- [![git](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-git.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-git.yml)
469
- [![session](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-session.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-session.yml)
470
- [![diagram](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-diagram.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-diagram.yml)
471
- [![resource](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-resource.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-resource.yml)
472
- [![repro](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-repro.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-repro.yml)
473
- [![benchmark](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-benchmark.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-benchmark.yml)
474
- [![security](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-security.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-security.yml)
475
- [![tex](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-tex.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-tex.yml)
476
- [![msword](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-msword.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-msword.yml)
477
- [![web](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-web.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-web.yml)
478
- [![dev](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-dev.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-dev.yml)
479
- [![dt](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-dt.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-dt.yml)
480
- [![scholar](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-scholar.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-scholar.yml)
481
-
482
- **Pending Modules**
483
-
484
- [![dsp](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-dsp.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-dsp.yml)
485
- [![db](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-db.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-db.yml)
486
- [![browser](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-browser.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-browser.yml)
487
- [![plt](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-plt.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-plt.yml)
488
- [![schema](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-schema.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-schema.yml)
489
- [![bridge](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-bridge.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-bridge.yml)
490
- [![fts](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-fts.yml/badge.svg)](https://github.com/ywatanabe1989/scitex-code/actions/workflows/test-fts.yml)
491
-
492
- </details>
493
-
494
- ## 📦 Installation
495
-
496
- ``` bash
497
- pip install scitex[all] # Recommended: Full installation with all modules
498
- pip install scitex # Core only (numpy, pandas, PyYAML, tqdm)
499
- ```
500
-
501
- <details>
502
- <summary><strong>Module Overview</strong></summary>
503
-
504
- SciTeX is organized into focused modules for different aspects of scientific computing:
505
-
506
- **Modular Installation** (See [./src/scitex](./src/scitex) for all available modules):
507
- ``` bash
508
- # Install specific modules
509
- pip install scitex[ai] # AI/ML module
510
- pip install scitex[ai,audio,writer] # Multiple modules
511
- pip install scitex[all] # Everything
512
- ```
513
-
514
- ## 📦 Module Overview
515
-
516
- ### 🔧 Core Utilities
517
- | Module | Description |
518
- |-------------------------------------------------|---------------------------------------------------------------------|
519
- | [`scitex.gen`](./src/scitex/gen#readme) | Project setup, session management, and experiment tracking |
520
- | [`scitex.io`](./src/scitex/io#readme) | Universal I/O for 30+ formats (CSV, JSON, HDF5, Zarr, pickle, etc.) |
521
- | [`scitex.path`](./src/scitex/path#readme) | Path manipulation and project structure utilities |
522
- | [`scitex.logging`](./src/scitex/logging#readme) | Structured logging with color support and context |
523
-
524
- ### 📊 Data Science & Statistics
525
- | Module | Description |
526
- |---------------------------------------------|--------------------------------------------------------------------------|
527
- | [`scitex.stats`](./src/scitex/stats#readme) | 16 statistical tests, effect sizes, power analysis, multiple corrections |
528
- | [`scitex.plt`](./src/scitex/plt#readme) | Enhanced matplotlib with auto-export and scientific captions |
529
- | [`scitex.pd`](./src/scitex/pd#readme) | Pandas extensions for research workflows |
530
-
531
- ### 🧠 AI & Machine Learning
532
- | Module | Description |
533
- |---------------------------------------------|---------------------------------------------------------|
534
- | [`scitex.ai`](./src/scitex/ai#readme) | GenAI (7 providers), classification, training utilities |
535
- | [`scitex.torch`](./src/scitex/torch#readme) | PyTorch training loops, metrics, and utilities |
536
- | [`scitex.nn`](./src/scitex/nn#readme) | Custom neural network layers |
537
-
538
- ### 🌊 Signal Processing
539
- | Module | Description |
540
- |-----------------------------------------|---------------------------------------------------------------|
541
- | [`scitex.dsp`](./src/scitex/dsp#readme) | Filtering, spectral analysis, wavelets, PAC, ripple detection |
542
-
543
- ### 📚 Literature Management
544
- | Module | Description |
545
- |-------------------------------------------------|-----------------------------------------------------------------|
546
- | [`scitex.scholar`](./src/scitex/scholar#readme) | Paper search, PDF download, BibTeX enrichment with IF/citations |
547
-
548
- ### 🌐 Web & Browser
549
- | Module | Description |
550
- |-------------------------------------------------|------------------------------------------------------------|
551
- | [`scitex.browser`](./src/scitex/browser#readme) | Playwright automation with debugging, PDF handling, popups |
552
-
553
- ### 🗄️ Data Management
554
- | Module | Description |
555
- |---------------------------------------|-------------------------------------|
556
- | [`scitex.db`](./src/scitex/db#readme) | SQLite3 and PostgreSQL abstractions |
557
-
558
- ### 🛠️ Utilities
559
- | Module | Description |
560
- |-------------------------------------------------------|-----------------------------------------------------|
561
- | [`scitex.decorators`](./src/scitex/decorators#readme) | Function decorators for caching, timing, validation |
562
- | [`scitex.rng`](./src/scitex/rng#readme) | Reproducible random number generation |
563
- | [`scitex.resource`](./src/scitex/resource#readme) | System resource monitoring (CPU, memory, GPU) |
564
- | [`scitex.dict`](./src/scitex/dict#readme) | Dictionary manipulation and nested access |
565
- | [`scitex.str`](./src/scitex/str#readme) | String utilities for scientific text processing |
566
-
567
- ## 📖 Documentation
568
-
569
- ### Online Documentation
570
- - **[Read the Docs](https://scitex.readthedocs.io/)**: Complete API reference and guides
571
- - **[Interactive Examples](https://scitex.readthedocs.io/en/latest/examples/index.html)**: Browse all tutorial notebooks
572
- - **[Quick Start Guide](https://scitex.readthedocs.io/en/latest/getting_started.html)**: Get up and running quickly
573
-
574
- ### Local Resources
575
- - **[Master Tutorial Index](./examples/00_SCITEX_MASTER_INDEX.ipynb)**: Comprehensive guide to all features
576
- - **[Examples Directory](./examples/)**: 25+ Jupyter notebooks covering all modules
577
- - **[Module List](./docs/scitex_modules.csv)**: Complete list of all functions
578
- - **(Experimental) [MCP Servers Documentation](./mcp_servers/README.md)**
579
-
580
- ### Key Tutorials
581
- 1. **[I/O Operations](./examples/01_scitex_io.ipynb)**: Essential file handling (start here!)
582
- 2. **[Plotting](./examples/14_scitex_plt.ipynb)**: Publication-ready visualizations
583
- 3. **[Statistics](./examples/11_scitex_stats.ipynb)**: Research-grade statistical analysis
584
- 4. **[Scholar](./examples/16_scitex_scholar.ipynb)**: Literature management with impact factors
585
- 5. **[AI/ML](./examples/16_scitex_ai.ipynb)**: Complete machine learning toolkit
586
-
587
-
588
- </details>
589
-
590
- <details>
591
- <summary><strong>Arial Font Setup</strong></summary>
592
-
593
- ``` bash
594
- # Ubuntu
595
- sudo apt update
596
- sudo apt-get install ttf-mscorefonts-installer
597
- sudo DEBIAN_FRONTEND=noninteractive \
598
- apt install -y ttf-mscorefonts-installer
599
- sudo mkdir -p /usr/share/fonts/truetype/custom
600
- sudo cp /mnt/c/Windows/Fonts/arial*.ttf /usr/share/fonts/truetype/custom/
601
- sudo fc-cache -fv
602
- rm ~/.cache/matplotlib -rf
603
-
604
- # WSL
605
- mkdir -p ~/.local/share/fonts/windows
606
- cp /mnt/c/Windows/Fonts/arial*.ttf ~/.local/share/fonts/windows/
607
- fc-cache -fv ~/.local/share/fonts/windows
608
- rm ~/.cache/matplotlib -rf
609
- ```
610
-
611
- ``` python
612
- # Check
613
- import matplotlib
614
- print(matplotlib.rcParams['font.family'])
615
-
616
- import matplotlib.font_manager as fm
617
- fonts = fm.findSystemFonts()
618
- print("Arial found:", any("Arial" in f or "arial" in f for f in fonts))
619
- [a for a in fonts if "Arial" in a or "arial" in a][:5]
620
-
621
- import matplotlib as mpl
622
- import matplotlib.pyplot as plt
623
-
624
- mpl.rcParams["font.family"] = "Arial"
625
- mpl.rcParams["font.sans-serif"] = ["Arial"] # 念のため
626
-
627
- fig, ax = plt.subplots(figsize=(3, 2))
628
- ax.text(0.5, 0.5, "Arial Test", fontsize=32, ha="center", va="center")
629
- ax.set_axis_off()
630
-
631
- fig.savefig("arial_test.png", dpi=300)
632
- plt.close(fig)
633
- ```
634
-
635
- </details>
636
-
637
- ## 🚀 Quick Start
638
-
639
-
640
- ### The SciTeX Advantage: **70% Less Code**
641
-
642
- Compare these two implementations that produce **identical research outputs**:
643
-
644
- #### With SciTeX ([57 Lines of Code]((./examples/demo_session_plt_io.py)))
645
-
646
- ```python
647
- #!/usr/bin/env python3
648
- # -*- coding: utf-8 -*-
649
- # Timestamp: "2025-11-18 09:34:36 (ywatanabe)"
650
- # File: /home/ywatanabe/proj/scitex-code/examples/demo_session_plt_io.py
651
-
652
-
653
- """Minimal Demonstration for scitex.{session,io,plt}"""
654
-
655
- import numpy as np
656
- import scitex as stx
657
-
658
-
659
- def demo(filename, verbose=False):
660
- """Show metadata without QR code (just embedded)."""
661
-
662
- # matplotlib.pyplot wrapper.
663
- fig, ax = stx.plt.subplots()
664
-
665
- t = np.linspace(0, 2, 1000)
666
- signal = np.sin(2 * np.pi * 5 * t) * np.exp(-t / 2)
667
-
668
- ax.plot_line(t, signal) # Original plot for automatic CSV export
669
- ax.set_xyt(
670
- "Time (s)",
671
- "Amplitude",
672
- "Clean Figure (metadata embedded, no QR overlay)",
673
- )
674
-
675
- # Saving: stx.io.save(obj, rel_path, **kwargs)
676
- stx.io.save(
677
- fig,
678
- filename,
679
- metadata={"exp": "s01", "subj": "S001"}, # with meatadata embedding
680
- symlink_to="./data", # Symlink for centralized outputs
681
- verbose=verbose, # Automatic terminal logging (no manual print())
682
- )
683
- fig.close()
684
-
685
- # Loading: stx.io.load(path)
686
- ldir = __file__.replace(".py", "_out")
687
- img, meta = stx.io.load(
688
- f"{ldir}/{filename}",
689
- verbose=verbose,
690
- )
691
-
692
-
693
- @stx.session
694
- def main(filename="demo.jpg", verbose=True):
695
- """Run demo for scitex.{session,plt,io}."""
696
-
697
- demo(filename, verbose=verbose)
698
-
699
- return 0
700
-
701
-
702
- if __name__ == "__main__":
703
- main()
704
- ```
705
-
706
-
707
- <details>
708
- <summary><strong>Equivalent without SciTeX ([188 Lines of Code](./examples/demo_session_plt_io_pure_python.py)), requiring 3.3× more code</strong></summary>
709
-
710
- ```python
711
- #!/usr/bin/env python3
712
- # -*- coding: utf-8 -*-
713
- # Timestamp: "2025-11-18 09:34:51 (ywatanabe)"
714
- # File: /home/ywatanabe/proj/scitex-code/examples/demo_session_plt_io_pure_python.py
715
-
716
-
717
- """Minimal Demonstration - Pure Python Version"""
718
-
719
- import argparse
720
- import json
721
- import logging
722
- import os
723
- import shutil
724
- import sys
725
- from datetime import datetime
726
- from pathlib import Path
727
- import random
728
- import string
729
-
730
- import matplotlib.pyplot as plt
731
- import numpy as np
732
- from PIL import Image
733
- from PIL.PngImagePlugin import PngInfo
734
-
735
-
736
- def generate_session_id():
737
- """Generate unique session ID."""
738
- timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
739
- random_suffix = ''.join(random.choices(string.ascii_uppercase + string.digits, k=4))
740
- return f"{timestamp}_{random_suffix}"
741
-
742
-
743
- def setup_logging(log_dir):
744
- """Set up logging infrastructure."""
745
- log_dir.mkdir(parents=True, exist_ok=True)
746
- logger = logging.getLogger(__name__)
747
- logger.setLevel(logging.INFO)
748
-
749
- stdout_handler = logging.FileHandler(log_dir / "stdout.log")
750
- stderr_handler = logging.FileHandler(log_dir / "stderr.log")
751
- console_handler = logging.StreamHandler(sys.stdout)
752
-
753
- formatter = logging.Formatter('%(levelname)s: %(message)s')
754
- stdout_handler.setFormatter(formatter)
755
- stderr_handler.setFormatter(formatter)
756
- console_handler.setFormatter(formatter)
757
-
758
- logger.addHandler(stdout_handler)
759
- logger.addHandler(stderr_handler)
760
- logger.addHandler(console_handler)
761
-
762
- return logger
763
-
764
-
765
- def save_plot_data_to_csv(fig, output_path):
766
- """Extract and save plot data."""
767
- csv_path = output_path.with_suffix('.csv')
768
- data_lines = ["ax_00_plot_line_0_line_x,ax_00_plot_line_0_line_y"]
769
-
770
- for ax in fig.get_axes():
771
- for line in ax.get_lines():
772
- x_data = line.get_xdata()
773
- y_data = line.get_ydata()
774
- for x, y in zip(x_data, y_data):
775
- data_lines.append(f"{x},{y}")
776
-
777
- csv_path.write_text('\n'.join(data_lines))
778
- return csv_path, csv_path.stat().st_size / 1024
779
-
780
-
781
- def embed_metadata_in_image(image_path, metadata):
782
- """Embed metadata into image file."""
783
- img = Image.open(image_path)
784
-
785
- if image_path.suffix.lower() in ['.png']:
786
- pnginfo = PngInfo()
787
- for key, value in metadata.items():
788
- pnginfo.add_text(key, str(value))
789
- img.save(image_path, pnginfo=pnginfo)
790
- elif image_path.suffix.lower() in ['.jpg', '.jpeg']:
791
- json_path = image_path.with_suffix(image_path.suffix + '.meta.json')
792
- json_path.write_text(json.dumps(metadata, indent=2))
793
- img.save(image_path, quality=95)
794
-
795
-
796
- def save_figure(fig, output_path, metadata=None, symlink_to=None, logger=None):
797
- """Save figure with metadata and symlink."""
798
- output_path = Path(output_path)
799
- output_path.parent.mkdir(parents=True, exist_ok=True)
800
-
801
- if metadata is None:
802
- metadata = {}
803
- metadata['url'] = 'https://scitex.ai'
804
-
805
- if logger:
806
- logger.info(f"📝 Saving figure with metadata to: {output_path}")
807
- logger.info(f" • Embedded metadata: {metadata}")
808
-
809
- csv_path, csv_size = save_plot_data_to_csv(fig, output_path)
810
- if logger:
811
- logger.info(f"✅ Saved to: {csv_path} ({csv_size:.1f} KiB)")
812
-
813
- fig.savefig(output_path, dpi=150, bbox_inches='tight')
814
- embed_metadata_in_image(output_path, metadata)
815
-
816
- if symlink_to:
817
- symlink_dir = Path(symlink_to)
818
- symlink_dir.mkdir(parents=True, exist_ok=True)
819
- symlink_path = symlink_dir / output_path.name
820
- if symlink_path.exists() or symlink_path.is_symlink():
821
- symlink_path.unlink()
822
- symlink_path.symlink_to(output_path.resolve())
823
-
824
-
825
- def demo(output_dir, filename, verbose=False, logger=None):
826
- """Generate, plot, and save signal."""
827
- fig, ax = plt.subplots(figsize=(8, 6))
828
-
829
- t = np.linspace(0, 2, 1000)
830
- signal = np.sin(2 * np.pi * 5 * t) * np.exp(-t / 2)
831
-
832
- ax.plot(t, signal)
833
- ax.set_xlabel("Time (s)")
834
- ax.set_ylabel("Amplitude")
835
- ax.set_title("Damped Oscillation")
836
- ax.grid(True, alpha=0.3)
837
-
838
- output_path = output_dir / filename
839
- save_figure(fig, output_path, metadata={"exp": "s01", "subj": "S001"},
840
- symlink_to=output_dir.parent / "data", logger=logger)
841
- plt.close(fig)
842
-
843
- return 0
844
-
845
-
846
- def main():
847
- """Run demo - Pure Python Version."""
848
- parser = argparse.ArgumentParser(description="Run demo - Pure Python Version")
849
- parser.add_argument('-f', '--filename', default='demo.jpg')
850
- parser.add_argument('-v', '--verbose', type=bool, default=True)
851
- args = parser.parse_args()
852
-
853
- session_id = generate_session_id()
854
- script_path = Path(__file__).resolve()
855
- output_base = script_path.parent / (script_path.stem + "_out")
856
- running_dir = output_base / "RUNNING" / session_id
857
- logs_dir = running_dir / "logs"
858
- config_dir = running_dir / "CONFIGS"
859
-
860
- logger = setup_logging(logs_dir)
861
-
862
- print("=" * 40)
863
- print(f"Pure Python Demo")
864
- print(f"{session_id} (PID: {os.getpid()})")
865
- print(f"\n{script_path}")
866
- print(f"\nArguments:")
867
- print(f" filename: {args.filename}")
868
- print(f" verbose: {args.verbose}")
869
- print("=" * 40)
870
-
871
- config_dir.mkdir(parents=True, exist_ok=True)
872
- config_data = {
873
- 'ID': session_id,
874
- 'FILE': str(script_path),
875
- 'SDIR_OUT': str(output_base),
876
- 'SDIR_RUN': str(running_dir),
877
- 'PID': os.getpid(),
878
- 'ARGS': vars(args)
879
- }
880
- (config_dir / "CONFIG.json").write_text(json.dumps(config_data, indent=2))
881
-
882
- try:
883
- result = demo(output_base, args.filename, args.verbose, logger)
884
- success_dir = output_base / "FINISHED_SUCCESS" / session_id
885
- success_dir.parent.mkdir(parents=True, exist_ok=True)
886
- shutil.move(str(running_dir), str(success_dir))
887
- logger.info(f"\n✅ Script completed: {success_dir}")
888
- return result
889
- except Exception as e:
890
- error_dir = output_base / "FINISHED_ERROR" / session_id
891
- error_dir.parent.mkdir(parents=True, exist_ok=True)
892
- shutil.move(str(running_dir), str(error_dir))
893
- logger.error(f"\n❌ Error: {e}", exc_info=True)
894
- raise
895
-
896
-
897
- if __name__ == "__main__":
898
- sys.exit(main())
899
- ```
900
-
901
- </details>
902
-
903
- ### What You Get With `@stx.session`
904
-
905
- Both implementations produce **identical outputs**, but SciTeX eliminates 131 lines of boilerplate:
906
- ```bash
907
- demo_session_plt_io_out/
908
- ├── demo.csv # Auto-extracted plot data
909
- ├── demo.jpg # With embedded metadata
910
- └── FINISHED_SUCCESS/
911
- └── 2025Y-11M-18D-09h12m03s_HmH5-main/
912
- ├── CONFIGS/
913
- │ ├── CONFIG.pkl # Python object
914
- │ └── CONFIG.yaml # Human-readable
915
- └── logs/
916
- ├── stderr.log
917
- └── stdout.log
918
- ```
919
-
920
- **What SciTeX Automates:**
921
- - ✅ Session ID generation and tracking
922
- - ✅ Output directory management (`RUNNING/` → `FINISHED_SUCCESS/`)
923
- - ✅ Argument parsing with auto-generated help
924
- - ✅ Logging to files and console
925
- - ✅ Config serialization (YAML + pickle)
926
- - ✅ CSV export from matplotlib plots
927
- - ✅ Metadata embedding in images
928
- - ✅ Symlink management for centralized outputs
929
- - ✅ Error handling and directory cleanup
930
- - ✅ Global variable injection (CONFIG, plt, COLORS, logger, rng_manager)
931
-
932
- **Research Benefits:**
933
- - 📊 **Figures + data always together** - CSV auto-exported from every plot
934
- - 🔄 **Perfect reproducibility** - Every run tracked with unique session ID
935
- - 🌍 **Universal format** - CSV data readable anywhere
936
- - 📝 **Zero manual work** - Metadata embedded automatically
937
- - 🎯 **3.3× less code** - Focus on research, not infrastructure
938
-
939
- ## 🤝 Contributing
940
-
941
- We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
942
-
943
-
944
- ## 📄 License
945
-
946
- AGPL-3.0.
947
-
948
- ## 📧 Contact
949
-
950
- Yusuke Watanabe (ywatanabe@scitex.ai)
951
-
952
- <!-- EOF -->