scitex 2.14.0__py3-none-any.whl โ†’ 2.15.2__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 (300) hide show
  1. scitex/__init__.py +71 -17
  2. scitex/_env_loader.py +156 -0
  3. scitex/_mcp_resources/__init__.py +37 -0
  4. scitex/_mcp_resources/_cheatsheet.py +135 -0
  5. scitex/_mcp_resources/_figrecipe.py +138 -0
  6. scitex/_mcp_resources/_formats.py +102 -0
  7. scitex/_mcp_resources/_modules.py +337 -0
  8. scitex/_mcp_resources/_session.py +149 -0
  9. scitex/_mcp_tools/__init__.py +4 -0
  10. scitex/_mcp_tools/audio.py +66 -0
  11. scitex/_mcp_tools/diagram.py +11 -95
  12. scitex/_mcp_tools/introspect.py +210 -0
  13. scitex/_mcp_tools/plt.py +260 -305
  14. scitex/_mcp_tools/scholar.py +74 -0
  15. scitex/_mcp_tools/social.py +244 -0
  16. scitex/_mcp_tools/template.py +24 -0
  17. scitex/_mcp_tools/writer.py +21 -204
  18. scitex/ai/_gen_ai/_PARAMS.py +10 -7
  19. scitex/ai/classification/reporters/_SingleClassificationReporter.py +45 -1603
  20. scitex/ai/classification/reporters/_mixins/__init__.py +36 -0
  21. scitex/ai/classification/reporters/_mixins/_constants.py +67 -0
  22. scitex/ai/classification/reporters/_mixins/_cv_summary.py +387 -0
  23. scitex/ai/classification/reporters/_mixins/_feature_importance.py +119 -0
  24. scitex/ai/classification/reporters/_mixins/_metrics.py +275 -0
  25. scitex/ai/classification/reporters/_mixins/_plotting.py +179 -0
  26. scitex/ai/classification/reporters/_mixins/_reports.py +153 -0
  27. scitex/ai/classification/reporters/_mixins/_storage.py +160 -0
  28. scitex/ai/classification/timeseries/_TimeSeriesSlidingWindowSplit.py +30 -1550
  29. scitex/ai/classification/timeseries/_sliding_window_core.py +467 -0
  30. scitex/ai/classification/timeseries/_sliding_window_plotting.py +369 -0
  31. scitex/audio/README.md +40 -36
  32. scitex/audio/__init__.py +129 -61
  33. scitex/audio/_branding.py +185 -0
  34. scitex/audio/_mcp/__init__.py +32 -0
  35. scitex/audio/_mcp/handlers.py +59 -6
  36. scitex/audio/_mcp/speak_handlers.py +238 -0
  37. scitex/audio/_relay.py +225 -0
  38. scitex/audio/_tts.py +18 -10
  39. scitex/audio/engines/base.py +17 -10
  40. scitex/audio/engines/elevenlabs_engine.py +7 -2
  41. scitex/audio/mcp_server.py +228 -75
  42. scitex/canvas/README.md +1 -1
  43. scitex/canvas/editor/_dearpygui/__init__.py +25 -0
  44. scitex/canvas/editor/_dearpygui/_editor.py +147 -0
  45. scitex/canvas/editor/_dearpygui/_handlers.py +476 -0
  46. scitex/canvas/editor/_dearpygui/_panels/__init__.py +17 -0
  47. scitex/canvas/editor/_dearpygui/_panels/_control.py +119 -0
  48. scitex/canvas/editor/_dearpygui/_panels/_element_controls.py +190 -0
  49. scitex/canvas/editor/_dearpygui/_panels/_preview.py +43 -0
  50. scitex/canvas/editor/_dearpygui/_panels/_sections.py +390 -0
  51. scitex/canvas/editor/_dearpygui/_plotting.py +187 -0
  52. scitex/canvas/editor/_dearpygui/_rendering.py +504 -0
  53. scitex/canvas/editor/_dearpygui/_selection.py +295 -0
  54. scitex/canvas/editor/_dearpygui/_state.py +93 -0
  55. scitex/canvas/editor/_dearpygui/_utils.py +61 -0
  56. scitex/canvas/editor/flask_editor/_core/__init__.py +27 -0
  57. scitex/canvas/editor/flask_editor/_core/_bbox_extraction.py +200 -0
  58. scitex/canvas/editor/flask_editor/_core/_editor.py +173 -0
  59. scitex/canvas/editor/flask_editor/_core/_export_helpers.py +353 -0
  60. scitex/canvas/editor/flask_editor/_core/_routes_basic.py +190 -0
  61. scitex/canvas/editor/flask_editor/_core/_routes_export.py +332 -0
  62. scitex/canvas/editor/flask_editor/_core/_routes_panels.py +252 -0
  63. scitex/canvas/editor/flask_editor/_core/_routes_save.py +218 -0
  64. scitex/canvas/editor/flask_editor/_core.py +25 -1684
  65. scitex/canvas/editor/flask_editor/templates/__init__.py +32 -70
  66. scitex/cli/__init__.py +38 -43
  67. scitex/cli/audio.py +76 -27
  68. scitex/cli/capture.py +13 -20
  69. scitex/cli/introspect.py +481 -0
  70. scitex/cli/main.py +200 -109
  71. scitex/cli/mcp.py +60 -34
  72. scitex/cli/plt.py +357 -0
  73. scitex/cli/repro.py +15 -8
  74. scitex/cli/resource.py +15 -8
  75. scitex/cli/scholar/__init__.py +23 -8
  76. scitex/cli/scholar/_crossref_scitex.py +296 -0
  77. scitex/cli/scholar/_fetch.py +25 -3
  78. scitex/cli/social.py +314 -0
  79. scitex/cli/stats.py +15 -8
  80. scitex/cli/template.py +129 -12
  81. scitex/cli/tex.py +15 -8
  82. scitex/cli/writer.py +132 -8
  83. scitex/cloud/__init__.py +41 -2
  84. scitex/config/README.md +1 -1
  85. scitex/config/__init__.py +16 -2
  86. scitex/config/_env_registry.py +256 -0
  87. scitex/context/__init__.py +22 -0
  88. scitex/dev/__init__.py +20 -1
  89. scitex/diagram/__init__.py +42 -19
  90. scitex/diagram/mcp_server.py +13 -125
  91. scitex/gen/__init__.py +50 -14
  92. scitex/gen/_list_packages.py +4 -4
  93. scitex/introspect/__init__.py +82 -0
  94. scitex/introspect/_call_graph.py +303 -0
  95. scitex/introspect/_class_hierarchy.py +163 -0
  96. scitex/introspect/_core.py +41 -0
  97. scitex/introspect/_docstring.py +131 -0
  98. scitex/introspect/_examples.py +113 -0
  99. scitex/introspect/_imports.py +271 -0
  100. scitex/{gen/_inspect_module.py โ†’ introspect/_list_api.py} +43 -54
  101. scitex/introspect/_mcp/__init__.py +41 -0
  102. scitex/introspect/_mcp/handlers.py +233 -0
  103. scitex/introspect/_members.py +155 -0
  104. scitex/introspect/_resolve.py +89 -0
  105. scitex/introspect/_signature.py +131 -0
  106. scitex/introspect/_source.py +80 -0
  107. scitex/introspect/_type_hints.py +172 -0
  108. scitex/io/_save.py +1 -2
  109. scitex/io/bundle/README.md +1 -1
  110. scitex/logging/_formatters.py +19 -9
  111. scitex/mcp_server.py +98 -5
  112. scitex/os/__init__.py +4 -0
  113. scitex/{gen โ†’ os}/_check_host.py +4 -5
  114. scitex/plt/__init__.py +245 -550
  115. scitex/plt/_subplots/_AxisWrapperMixins/_SeabornMixin/_wrappers.py +5 -10
  116. scitex/plt/docs/EXTERNAL_PACKAGE_BRANDING.md +149 -0
  117. scitex/plt/gallery/README.md +1 -1
  118. scitex/plt/utils/_hitmap/__init__.py +82 -0
  119. scitex/plt/utils/_hitmap/_artist_extraction.py +343 -0
  120. scitex/plt/utils/_hitmap/_color_application.py +346 -0
  121. scitex/plt/utils/_hitmap/_color_conversion.py +121 -0
  122. scitex/plt/utils/_hitmap/_constants.py +40 -0
  123. scitex/plt/utils/_hitmap/_hitmap_core.py +334 -0
  124. scitex/plt/utils/_hitmap/_path_extraction.py +357 -0
  125. scitex/plt/utils/_hitmap/_query.py +113 -0
  126. scitex/plt/utils/_hitmap.py +46 -1616
  127. scitex/plt/utils/_metadata/__init__.py +80 -0
  128. scitex/plt/utils/_metadata/_artists/__init__.py +25 -0
  129. scitex/plt/utils/_metadata/_artists/_base.py +195 -0
  130. scitex/plt/utils/_metadata/_artists/_collections.py +356 -0
  131. scitex/plt/utils/_metadata/_artists/_extract.py +57 -0
  132. scitex/plt/utils/_metadata/_artists/_images.py +80 -0
  133. scitex/plt/utils/_metadata/_artists/_lines.py +261 -0
  134. scitex/plt/utils/_metadata/_artists/_patches.py +247 -0
  135. scitex/plt/utils/_metadata/_artists/_text.py +106 -0
  136. scitex/plt/utils/_metadata/_csv.py +416 -0
  137. scitex/plt/utils/_metadata/_detect.py +225 -0
  138. scitex/plt/utils/_metadata/_legend.py +127 -0
  139. scitex/plt/utils/_metadata/_rounding.py +117 -0
  140. scitex/plt/utils/_metadata/_verification.py +202 -0
  141. scitex/schema/README.md +1 -1
  142. scitex/scholar/__init__.py +8 -0
  143. scitex/scholar/_mcp/crossref_handlers.py +265 -0
  144. scitex/scholar/core/Scholar.py +63 -1700
  145. scitex/scholar/core/_mixins/__init__.py +36 -0
  146. scitex/scholar/core/_mixins/_enrichers.py +270 -0
  147. scitex/scholar/core/_mixins/_library_handlers.py +100 -0
  148. scitex/scholar/core/_mixins/_loaders.py +103 -0
  149. scitex/scholar/core/_mixins/_pdf_download.py +375 -0
  150. scitex/scholar/core/_mixins/_pipeline.py +312 -0
  151. scitex/scholar/core/_mixins/_project_handlers.py +125 -0
  152. scitex/scholar/core/_mixins/_savers.py +69 -0
  153. scitex/scholar/core/_mixins/_search.py +103 -0
  154. scitex/scholar/core/_mixins/_services.py +88 -0
  155. scitex/scholar/core/_mixins/_url_finding.py +105 -0
  156. scitex/scholar/crossref_scitex.py +367 -0
  157. scitex/scholar/docs/EXTERNAL_PACKAGE_BRANDING.md +149 -0
  158. scitex/scholar/examples/00_run_all.sh +120 -0
  159. scitex/scholar/jobs/_executors.py +27 -3
  160. scitex/scholar/pdf_download/ScholarPDFDownloader.py +38 -416
  161. scitex/scholar/pdf_download/_cli.py +154 -0
  162. scitex/scholar/pdf_download/strategies/__init__.py +11 -8
  163. scitex/scholar/pdf_download/strategies/manual_download_fallback.py +80 -3
  164. scitex/scholar/pipelines/ScholarPipelineBibTeX.py +73 -121
  165. scitex/scholar/pipelines/ScholarPipelineParallel.py +80 -138
  166. scitex/scholar/pipelines/ScholarPipelineSingle.py +43 -63
  167. scitex/scholar/pipelines/_single_steps.py +71 -36
  168. scitex/scholar/storage/_LibraryManager.py +97 -1695
  169. scitex/scholar/storage/_mixins/__init__.py +30 -0
  170. scitex/scholar/storage/_mixins/_bibtex_handlers.py +128 -0
  171. scitex/scholar/storage/_mixins/_library_operations.py +218 -0
  172. scitex/scholar/storage/_mixins/_metadata_conversion.py +226 -0
  173. scitex/scholar/storage/_mixins/_paper_saving.py +456 -0
  174. scitex/scholar/storage/_mixins/_resolution.py +376 -0
  175. scitex/scholar/storage/_mixins/_storage_helpers.py +121 -0
  176. scitex/scholar/storage/_mixins/_symlink_handlers.py +226 -0
  177. scitex/scholar/url_finder/.tmp/open_url/KNOWN_RESOLVERS.py +462 -0
  178. scitex/scholar/url_finder/.tmp/open_url/README.md +223 -0
  179. scitex/scholar/url_finder/.tmp/open_url/_DOIToURLResolver.py +694 -0
  180. scitex/scholar/url_finder/.tmp/open_url/_OpenURLResolver.py +1160 -0
  181. scitex/scholar/url_finder/.tmp/open_url/_ResolverLinkFinder.py +344 -0
  182. scitex/scholar/url_finder/.tmp/open_url/__init__.py +24 -0
  183. scitex/security/README.md +3 -3
  184. scitex/session/README.md +1 -1
  185. scitex/session/__init__.py +26 -7
  186. scitex/session/_decorator.py +1 -1
  187. scitex/sh/README.md +1 -1
  188. scitex/sh/__init__.py +7 -4
  189. scitex/social/__init__.py +155 -0
  190. scitex/social/docs/EXTERNAL_PACKAGE_BRANDING.md +149 -0
  191. scitex/stats/_mcp/_handlers/__init__.py +31 -0
  192. scitex/stats/_mcp/_handlers/_corrections.py +113 -0
  193. scitex/stats/_mcp/_handlers/_descriptive.py +78 -0
  194. scitex/stats/_mcp/_handlers/_effect_size.py +106 -0
  195. scitex/stats/_mcp/_handlers/_format.py +94 -0
  196. scitex/stats/_mcp/_handlers/_normality.py +110 -0
  197. scitex/stats/_mcp/_handlers/_posthoc.py +224 -0
  198. scitex/stats/_mcp/_handlers/_power.py +247 -0
  199. scitex/stats/_mcp/_handlers/_recommend.py +102 -0
  200. scitex/stats/_mcp/_handlers/_run_test.py +279 -0
  201. scitex/stats/_mcp/_handlers/_stars.py +48 -0
  202. scitex/stats/_mcp/handlers.py +19 -1171
  203. scitex/stats/auto/_stat_style.py +175 -0
  204. scitex/stats/auto/_style_definitions.py +411 -0
  205. scitex/stats/auto/_styles.py +22 -620
  206. scitex/stats/descriptive/__init__.py +11 -8
  207. scitex/stats/descriptive/_ci.py +39 -0
  208. scitex/stats/power/_power.py +15 -4
  209. scitex/str/__init__.py +2 -1
  210. scitex/str/_title_case.py +63 -0
  211. scitex/template/README.md +1 -1
  212. scitex/template/__init__.py +25 -10
  213. scitex/template/_code_templates.py +147 -0
  214. scitex/template/_mcp/handlers.py +81 -0
  215. scitex/template/_mcp/tool_schemas.py +55 -0
  216. scitex/template/_templates/__init__.py +51 -0
  217. scitex/template/_templates/audio.py +233 -0
  218. scitex/template/_templates/canvas.py +312 -0
  219. scitex/template/_templates/capture.py +268 -0
  220. scitex/template/_templates/config.py +43 -0
  221. scitex/template/_templates/diagram.py +294 -0
  222. scitex/template/_templates/io.py +107 -0
  223. scitex/template/_templates/module.py +53 -0
  224. scitex/template/_templates/plt.py +202 -0
  225. scitex/template/_templates/scholar.py +267 -0
  226. scitex/template/_templates/session.py +130 -0
  227. scitex/template/_templates/session_minimal.py +43 -0
  228. scitex/template/_templates/session_plot.py +67 -0
  229. scitex/template/_templates/session_stats.py +77 -0
  230. scitex/template/_templates/stats.py +323 -0
  231. scitex/template/_templates/writer.py +296 -0
  232. scitex/template/clone_writer_directory.py +5 -5
  233. scitex/ui/_backends/_email.py +10 -2
  234. scitex/ui/_backends/_webhook.py +5 -1
  235. scitex/web/_search_pubmed.py +10 -6
  236. scitex/writer/README.md +1 -1
  237. scitex/writer/_mcp/handlers.py +11 -744
  238. scitex/writer/_mcp/tool_schemas.py +5 -335
  239. scitex-2.15.2.dist-info/METADATA +648 -0
  240. {scitex-2.14.0.dist-info โ†’ scitex-2.15.2.dist-info}/RECORD +246 -150
  241. scitex/canvas/editor/flask_editor/templates/_scripts.py +0 -4933
  242. scitex/canvas/editor/flask_editor/templates/_styles.py +0 -1658
  243. scitex/dev/plt/data/mpl/PLOTTING_FUNCTIONS.yaml +0 -90
  244. scitex/dev/plt/data/mpl/PLOTTING_SIGNATURES.yaml +0 -1571
  245. scitex/dev/plt/data/mpl/PLOTTING_SIGNATURES_DETAILED.yaml +0 -6262
  246. scitex/dev/plt/data/mpl/SIGNATURES_FLATTENED.yaml +0 -1274
  247. scitex/dev/plt/data/mpl/dir_ax.txt +0 -459
  248. scitex/diagram/_compile.py +0 -312
  249. scitex/diagram/_diagram.py +0 -355
  250. scitex/diagram/_mcp/__init__.py +0 -4
  251. scitex/diagram/_mcp/handlers.py +0 -400
  252. scitex/diagram/_mcp/tool_schemas.py +0 -157
  253. scitex/diagram/_presets.py +0 -173
  254. scitex/diagram/_schema.py +0 -182
  255. scitex/diagram/_split.py +0 -278
  256. scitex/gen/_ci.py +0 -12
  257. scitex/gen/_title_case.py +0 -89
  258. scitex/plt/_mcp/__init__.py +0 -4
  259. scitex/plt/_mcp/_handlers_annotation.py +0 -102
  260. scitex/plt/_mcp/_handlers_figure.py +0 -195
  261. scitex/plt/_mcp/_handlers_plot.py +0 -252
  262. scitex/plt/_mcp/_handlers_style.py +0 -219
  263. scitex/plt/_mcp/handlers.py +0 -74
  264. scitex/plt/_mcp/tool_schemas.py +0 -497
  265. scitex/plt/mcp_server.py +0 -231
  266. scitex/scholar/data/.gitkeep +0 -0
  267. scitex/scholar/data/README.md +0 -44
  268. scitex/scholar/data/bib_files/bibliography.bib +0 -1952
  269. scitex/scholar/data/bib_files/neurovista.bib +0 -277
  270. scitex/scholar/data/bib_files/neurovista_enriched.bib +0 -441
  271. scitex/scholar/data/bib_files/neurovista_enriched_enriched.bib +0 -441
  272. scitex/scholar/data/bib_files/neurovista_processed.bib +0 -338
  273. scitex/scholar/data/bib_files/openaccess.bib +0 -89
  274. scitex/scholar/data/bib_files/pac-seizure_prediction_enriched.bib +0 -2178
  275. scitex/scholar/data/bib_files/pac.bib +0 -698
  276. scitex/scholar/data/bib_files/pac_enriched.bib +0 -1061
  277. scitex/scholar/data/bib_files/pac_processed.bib +0 -0
  278. scitex/scholar/data/bib_files/pac_titles.txt +0 -75
  279. scitex/scholar/data/bib_files/paywalled.bib +0 -98
  280. scitex/scholar/data/bib_files/related-papers-by-coauthors.bib +0 -58
  281. scitex/scholar/data/bib_files/related-papers-by-coauthors_enriched.bib +0 -87
  282. scitex/scholar/data/bib_files/seizure_prediction.bib +0 -694
  283. scitex/scholar/data/bib_files/seizure_prediction_processed.bib +0 -0
  284. scitex/scholar/data/bib_files/test_complete_enriched.bib +0 -437
  285. scitex/scholar/data/bib_files/test_final_enriched.bib +0 -437
  286. scitex/scholar/data/bib_files/test_seizure.bib +0 -46
  287. scitex/scholar/data/impact_factor/JCR_IF_2022.xlsx +0 -0
  288. scitex/scholar/data/impact_factor/JCR_IF_2024.db +0 -0
  289. scitex/scholar/data/impact_factor/JCR_IF_2024.xlsx +0 -0
  290. scitex/scholar/data/impact_factor/JCR_IF_2024_v01.db +0 -0
  291. scitex/scholar/data/impact_factor.db +0 -0
  292. scitex/scholar/examples/SUGGESTIONS.md +0 -865
  293. scitex/scholar/examples/dev.py +0 -38
  294. scitex-2.14.0.dist-info/METADATA +0 -1238
  295. /scitex/{gen โ†’ context}/_detect_environment.py +0 -0
  296. /scitex/{gen โ†’ context}/_get_notebook_path.py +0 -0
  297. /scitex/{gen/_shell.py โ†’ sh/_shell_legacy.py} +0 -0
  298. {scitex-2.14.0.dist-info โ†’ scitex-2.15.2.dist-info}/WHEEL +0 -0
  299. {scitex-2.14.0.dist-info โ†’ scitex-2.15.2.dist-info}/entry_points.txt +0 -0
  300. {scitex-2.14.0.dist-info โ†’ scitex-2.15.2.dist-info}/licenses/LICENSE +0 -0
@@ -1,1238 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: scitex
3
- Version: 2.14.0
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.10
20
- Classifier: Programming Language :: Python :: 3.11
21
- Classifier: Programming Language :: Python :: 3.12
22
- Classifier: Programming Language :: Python :: 3.13
23
- Classifier: Topic :: Scientific/Engineering
24
- Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
25
- Classifier: Topic :: Scientific/Engineering :: Information Analysis
26
- Classifier: Topic :: Software Development :: Libraries :: Python Modules
27
- Requires-Python: >=3.10
28
- Requires-Dist: natsort
29
- Requires-Dist: numpy
30
- Requires-Dist: packaging
31
- Requires-Dist: pandas
32
- Requires-Dist: pyyaml
33
- Requires-Dist: tqdm
34
- Provides-Extra: ai
35
- Requires-Dist: anthropic; extra == 'ai'
36
- Requires-Dist: google-genai; extra == 'ai'
37
- Requires-Dist: groq; extra == 'ai'
38
- Requires-Dist: imbalanced-learn; extra == 'ai'
39
- Requires-Dist: joblib; extra == 'ai'
40
- Requires-Dist: markdown2; extra == 'ai'
41
- Requires-Dist: matplotlib; extra == 'ai'
42
- Requires-Dist: natsort; extra == 'ai'
43
- Requires-Dist: openai; extra == 'ai'
44
- Requires-Dist: pillow; extra == 'ai'
45
- Requires-Dist: pyyaml; extra == 'ai'
46
- Requires-Dist: requests; extra == 'ai'
47
- Requires-Dist: ruamel-yaml; extra == 'ai'
48
- Requires-Dist: scikit-learn; extra == 'ai'
49
- Requires-Dist: scipy; extra == 'ai'
50
- Requires-Dist: seaborn; extra == 'ai'
51
- Requires-Dist: sktime; extra == 'ai'
52
- Requires-Dist: umap-learn; extra == 'ai'
53
- Requires-Dist: xarray; extra == 'ai'
54
- Provides-Extra: all
55
- Requires-Dist: accelerate; extra == 'all'
56
- Requires-Dist: aiohttp; extra == 'all'
57
- Requires-Dist: anthropic; extra == 'all'
58
- Requires-Dist: beautifulsoup4; extra == 'all'
59
- Requires-Dist: bibtexparser; extra == 'all'
60
- Requires-Dist: bitsandbytes; extra == 'all'
61
- Requires-Dist: catboost; extra == 'all'
62
- Requires-Dist: celery; extra == 'all'
63
- Requires-Dist: click; extra == 'all'
64
- Requires-Dist: crawl4ai; extra == 'all'
65
- Requires-Dist: csv2latex; extra == 'all'
66
- Requires-Dist: dearpygui; extra == 'all'
67
- Requires-Dist: einops; extra == 'all'
68
- Requires-Dist: elevenlabs; extra == 'all'
69
- Requires-Dist: fairscale; extra == 'all'
70
- Requires-Dist: fastapi; extra == 'all'
71
- Requires-Dist: feedparser; extra == 'all'
72
- Requires-Dist: figrecipe; extra == 'all'
73
- Requires-Dist: flask; extra == 'all'
74
- Requires-Dist: geom-median; extra == 'all'
75
- Requires-Dist: gitpython; extra == 'all'
76
- Requires-Dist: google-genai; extra == 'all'
77
- Requires-Dist: groq; extra == 'all'
78
- Requires-Dist: gtts; extra == 'all'
79
- Requires-Dist: h5py; extra == 'all'
80
- Requires-Dist: html2text; extra == 'all'
81
- Requires-Dist: httpx; extra == 'all'
82
- Requires-Dist: imbalanced-learn; extra == 'all'
83
- Requires-Dist: ipdb; extra == 'all'
84
- Requires-Dist: ipykernel; extra == 'all'
85
- Requires-Dist: ipython; extra == 'all'
86
- Requires-Dist: joblib; extra == 'all'
87
- Requires-Dist: julius; extra == 'all'
88
- Requires-Dist: jupyter-collaboration; extra == 'all'
89
- Requires-Dist: jupyterlab; extra == 'all'
90
- Requires-Dist: jupytext; extra == 'all'
91
- Requires-Dist: llvmlite>=0.39.0; extra == 'all'
92
- Requires-Dist: lxml; extra == 'all'
93
- Requires-Dist: lxml-html-clean; extra == 'all'
94
- Requires-Dist: markdown; extra == 'all'
95
- Requires-Dist: matplotlib; extra == 'all'
96
- Requires-Dist: mcp; extra == 'all'
97
- Requires-Dist: mne; extra == 'all'
98
- Requires-Dist: mss; extra == 'all'
99
- Requires-Dist: natsort; extra == 'all'
100
- Requires-Dist: nbsphinx; extra == 'all'
101
- Requires-Dist: nest-asyncio; extra == 'all'
102
- Requires-Dist: numcodecs; extra == 'all'
103
- Requires-Dist: obspy; extra == 'all'
104
- Requires-Dist: openai; extra == 'all'
105
- Requires-Dist: opencv-python; extra == 'all'
106
- Requires-Dist: openpyxl; extra == 'all'
107
- Requires-Dist: optuna; extra == 'all'
108
- Requires-Dist: papermill; extra == 'all'
109
- Requires-Dist: pdfplumber; extra == 'all'
110
- Requires-Dist: piexif; extra == 'all'
111
- Requires-Dist: pillow; extra == 'all'
112
- Requires-Dist: playwright>=1.40.0; extra == 'all'
113
- Requires-Dist: plotly; extra == 'all'
114
- Requires-Dist: psutil; extra == 'all'
115
- Requires-Dist: psycopg2-binary; extra == 'all'
116
- Requires-Dist: pybids; extra == 'all'
117
- Requires-Dist: pydantic; extra == 'all'
118
- Requires-Dist: pydub; extra == 'all'
119
- Requires-Dist: pyedflib; extra == 'all'
120
- Requires-Dist: pymatreader; extra == 'all'
121
- Requires-Dist: pymed; extra == 'all'
122
- Requires-Dist: pymupdf; extra == 'all'
123
- Requires-Dist: pypandoc; extra == 'all'
124
- Requires-Dist: pypdf; extra == 'all'
125
- Requires-Dist: pypdf2; extra == 'all'
126
- Requires-Dist: pyperclip; extra == 'all'
127
- Requires-Dist: pyqt6; extra == 'all'
128
- Requires-Dist: pytesseract; extra == 'all'
129
- Requires-Dist: python-docx; extra == 'all'
130
- Requires-Dist: pytorch-optimizer; extra == 'all'
131
- Requires-Dist: pytorch-pretrained-vit; extra == 'all'
132
- Requires-Dist: pyttsx3; extra == 'all'
133
- Requires-Dist: qrcode[pil]; extra == 'all'
134
- Requires-Dist: readability-lxml; extra == 'all'
135
- Requires-Dist: readchar; extra == 'all'
136
- Requires-Dist: requests; extra == 'all'
137
- Requires-Dist: ripple-detection; extra == 'all'
138
- Requires-Dist: ruamel-yaml; extra == 'all'
139
- Requires-Dist: scholarly; extra == 'all'
140
- Requires-Dist: scikit-image; extra == 'all'
141
- Requires-Dist: scikit-learn; extra == 'all'
142
- Requires-Dist: scipy; extra == 'all'
143
- Requires-Dist: seaborn; extra == 'all'
144
- Requires-Dist: selenium; extra == 'all'
145
- Requires-Dist: sktime; extra == 'all'
146
- Requires-Dist: sounddevice; extra == 'all'
147
- Requires-Dist: sqlalchemy; extra == 'all'
148
- Requires-Dist: statsmodels; extra == 'all'
149
- Requires-Dist: streamlit; extra == 'all'
150
- Requires-Dist: sympy; extra == 'all'
151
- Requires-Dist: tenacity; extra == 'all'
152
- Requires-Dist: tensorpac; extra == 'all'
153
- Requires-Dist: termplotlib; extra == 'all'
154
- Requires-Dist: torch; extra == 'all'
155
- Requires-Dist: torchaudio; extra == 'all'
156
- Requires-Dist: torchsummary; extra == 'all'
157
- Requires-Dist: torchvision; extra == 'all'
158
- Requires-Dist: transformers; extra == 'all'
159
- Requires-Dist: umap-learn>=0.5.4; extra == 'all'
160
- Requires-Dist: watchdog; extra == 'all'
161
- Requires-Dist: webdriver-manager; extra == 'all'
162
- Requires-Dist: xarray; extra == 'all'
163
- Requires-Dist: xlrd; extra == 'all'
164
- Requires-Dist: xlsx2csv; extra == 'all'
165
- Requires-Dist: yq; extra == 'all'
166
- Requires-Dist: zarr; extra == 'all'
167
- Provides-Extra: audio
168
- Requires-Dist: elevenlabs; extra == 'audio'
169
- Requires-Dist: gtts; extra == 'audio'
170
- Requires-Dist: mcp; extra == 'audio'
171
- Requires-Dist: pydub; extra == 'audio'
172
- Requires-Dist: pytest-asyncio; extra == 'audio'
173
- Requires-Dist: pyttsx3; extra == 'audio'
174
- Provides-Extra: benchmark
175
- Requires-Dist: psutil; extra == 'benchmark'
176
- Provides-Extra: bridge
177
- Requires-Dist: matplotlib; extra == 'bridge'
178
- Requires-Dist: scipy; extra == 'bridge'
179
- Provides-Extra: browser
180
- Requires-Dist: aiohttp; extra == 'browser'
181
- Requires-Dist: matplotlib; extra == 'browser'
182
- Requires-Dist: playwright>=1.40.0; extra == 'browser'
183
- Provides-Extra: capture
184
- Requires-Dist: mcp; extra == 'capture'
185
- Requires-Dist: mss; extra == 'capture'
186
- Requires-Dist: pillow; extra == 'capture'
187
- Requires-Dist: playwright>=1.40.0; extra == 'capture'
188
- Provides-Extra: cli
189
- Requires-Dist: aiohttp; extra == 'cli'
190
- Requires-Dist: beautifulsoup4; extra == 'cli'
191
- Requires-Dist: click; extra == 'cli'
192
- Requires-Dist: gitpython; extra == 'cli'
193
- Requires-Dist: playwright; extra == 'cli'
194
- Requires-Dist: pyyaml; extra == 'cli'
195
- Requires-Dist: requests; extra == 'cli'
196
- Provides-Extra: cloud
197
- Requires-Dist: matplotlib; extra == 'cloud'
198
- Provides-Extra: config
199
- Requires-Dist: pyyaml; extra == 'config'
200
- Provides-Extra: db
201
- Requires-Dist: psycopg2-binary; extra == 'db'
202
- Requires-Dist: sqlalchemy; extra == 'db'
203
- Provides-Extra: decorators
204
- Requires-Dist: joblib; extra == 'decorators'
205
- Requires-Dist: matplotlib; extra == 'decorators'
206
- Requires-Dist: pytest-asyncio; extra == 'decorators'
207
- Requires-Dist: scipy; extra == 'decorators'
208
- Requires-Dist: tqdm; extra == 'decorators'
209
- Requires-Dist: xarray; extra == 'decorators'
210
- Provides-Extra: dev
211
- Requires-Dist: build; extra == 'dev'
212
- Requires-Dist: jedi; extra == 'dev'
213
- Requires-Dist: line-profiler; extra == 'dev'
214
- Requires-Dist: markdown; extra == 'dev'
215
- Requires-Dist: markdown2; extra == 'dev'
216
- Requires-Dist: matplotlib; extra == 'dev'
217
- Requires-Dist: memory-profiler; extra == 'dev'
218
- Requires-Dist: mypy; extra == 'dev'
219
- Requires-Dist: myst-parser; extra == 'dev'
220
- Requires-Dist: pre-commit; extra == 'dev'
221
- Requires-Dist: pygments; extra == 'dev'
222
- Requires-Dist: pyright; extra == 'dev'
223
- Requires-Dist: pytest; extra == 'dev'
224
- Requires-Dist: pytest-asyncio; extra == 'dev'
225
- Requires-Dist: pytest-cov; extra == 'dev'
226
- Requires-Dist: pytest-env; extra == 'dev'
227
- Requires-Dist: pytest-json-report; extra == 'dev'
228
- Requires-Dist: pytest-mock; extra == 'dev'
229
- Requires-Dist: pytest-testmon; extra == 'dev'
230
- Requires-Dist: pytest-timeout; extra == 'dev'
231
- Requires-Dist: pytest-xdist; extra == 'dev'
232
- Requires-Dist: python-lsp-server; extra == 'dev'
233
- Requires-Dist: pyyaml; extra == 'dev'
234
- Requires-Dist: rope; extra == 'dev'
235
- Requires-Dist: ruff; extra == 'dev'
236
- Requires-Dist: setuptools; extra == 'dev'
237
- Requires-Dist: sphinx; extra == 'dev'
238
- Requires-Dist: sphinx-autobuild; extra == 'dev'
239
- Requires-Dist: sphinx-autodoc-typehints; extra == 'dev'
240
- Requires-Dist: sphinx-rtd-theme; extra == 'dev'
241
- Requires-Dist: stdlib-list; extra == 'dev'
242
- Requires-Dist: tomlkit; extra == 'dev'
243
- Requires-Dist: twine; extra == 'dev'
244
- Requires-Dist: types-pyyaml; extra == 'dev'
245
- Requires-Dist: types-requests; extra == 'dev'
246
- Requires-Dist: types-setuptools; extra == 'dev'
247
- Requires-Dist: wheel; extra == 'dev'
248
- Provides-Extra: devtools
249
- Requires-Dist: joblib; extra == 'devtools'
250
- Requires-Dist: matplotlib; extra == 'devtools'
251
- Requires-Dist: ruamel-yaml; extra == 'devtools'
252
- Requires-Dist: scipy; extra == 'devtools'
253
- Requires-Dist: seaborn; extra == 'devtools'
254
- Requires-Dist: xarray; extra == 'devtools'
255
- Provides-Extra: diagram
256
- Requires-Dist: pyyaml; extra == 'diagram'
257
- Provides-Extra: dsp
258
- Requires-Dist: h5py; extra == 'dsp'
259
- Requires-Dist: joblib; extra == 'dsp'
260
- Requires-Dist: matplotlib; extra == 'dsp'
261
- Requires-Dist: readchar; extra == 'dsp'
262
- Requires-Dist: ruamel-yaml; extra == 'dsp'
263
- Requires-Dist: scipy; extra == 'dsp'
264
- Requires-Dist: seaborn; extra == 'dsp'
265
- Requires-Dist: sounddevice; extra == 'dsp'
266
- Requires-Dist: tensorpac; extra == 'dsp'
267
- Requires-Dist: xarray; extra == 'dsp'
268
- Provides-Extra: dt
269
- Requires-Dist: matplotlib; extra == 'dt'
270
- Provides-Extra: gen
271
- Requires-Dist: h5py; extra == 'gen'
272
- Requires-Dist: ipython; extra == 'gen'
273
- Requires-Dist: joblib; extra == 'gen'
274
- Requires-Dist: matplotlib; extra == 'gen'
275
- Requires-Dist: pyperclip; extra == 'gen'
276
- Requires-Dist: readchar; extra == 'gen'
277
- Requires-Dist: requests; extra == 'gen'
278
- Requires-Dist: scipy; extra == 'gen'
279
- Requires-Dist: xarray; extra == 'gen'
280
- Provides-Extra: git
281
- Requires-Dist: gitpython; extra == 'git'
282
- Requires-Dist: matplotlib; extra == 'git'
283
- Provides-Extra: heavy
284
- Requires-Dist: catboost; extra == 'heavy'
285
- Requires-Dist: jax; extra == 'heavy'
286
- Requires-Dist: julius; extra == 'heavy'
287
- Requires-Dist: mne; extra == 'heavy'
288
- Requires-Dist: optuna; extra == 'heavy'
289
- Requires-Dist: psutil; extra == 'heavy'
290
- Requires-Dist: pytorch-pretrained-vit; extra == 'heavy'
291
- Requires-Dist: ripple-detection; extra == 'heavy'
292
- Requires-Dist: tensorflow; extra == 'heavy'
293
- Requires-Dist: torch; extra == 'heavy'
294
- Requires-Dist: torchaudio; extra == 'heavy'
295
- Requires-Dist: torchsummary; extra == 'heavy'
296
- Requires-Dist: torchvision; extra == 'heavy'
297
- Requires-Dist: umap-learn; extra == 'heavy'
298
- Provides-Extra: io
299
- Requires-Dist: gitpython; extra == 'io'
300
- Requires-Dist: h5py; extra == 'io'
301
- Requires-Dist: html2text; extra == 'io'
302
- Requires-Dist: joblib; extra == 'io'
303
- Requires-Dist: lxml; extra == 'io'
304
- Requires-Dist: lxml-html-clean; extra == 'io'
305
- Requires-Dist: markdown; extra == 'io'
306
- Requires-Dist: matplotlib; extra == 'io'
307
- Requires-Dist: natsort; extra == 'io'
308
- Requires-Dist: numcodecs; extra == 'io'
309
- Requires-Dist: openpyxl; extra == 'io'
310
- Requires-Dist: pdfplumber; extra == 'io'
311
- Requires-Dist: piexif; extra == 'io'
312
- Requires-Dist: pillow; extra == 'io'
313
- Requires-Dist: plotly; extra == 'io'
314
- Requires-Dist: pyarrow; extra == 'io'
315
- Requires-Dist: pymatreader; extra == 'io'
316
- Requires-Dist: pymupdf; extra == 'io'
317
- Requires-Dist: pypdf; extra == 'io'
318
- Requires-Dist: pypdf2; extra == 'io'
319
- Requires-Dist: python-docx; extra == 'io'
320
- Requires-Dist: pyyaml; extra == 'io'
321
- Requires-Dist: qrcode[pil]; extra == 'io'
322
- Requires-Dist: ruamel-yaml; extra == 'io'
323
- Requires-Dist: scipy; extra == 'io'
324
- Requires-Dist: tqdm; extra == 'io'
325
- Requires-Dist: xarray; extra == 'io'
326
- Requires-Dist: xlrd; extra == 'io'
327
- Requires-Dist: zarr; extra == 'io'
328
- Provides-Extra: linalg
329
- Requires-Dist: geom-median; extra == 'linalg'
330
- Requires-Dist: joblib; extra == 'linalg'
331
- Requires-Dist: matplotlib; extra == 'linalg'
332
- Requires-Dist: scipy; extra == 'linalg'
333
- Requires-Dist: sympy; extra == 'linalg'
334
- Requires-Dist: xarray; extra == 'linalg'
335
- Provides-Extra: logging
336
- Requires-Dist: matplotlib; extra == 'logging'
337
- Provides-Extra: msword
338
- Requires-Dist: pypandoc; extra == 'msword'
339
- Requires-Dist: python-docx; extra == 'msword'
340
- Provides-Extra: nn
341
- Requires-Dist: h5py; extra == 'nn'
342
- Requires-Dist: ipdb; extra == 'nn'
343
- Requires-Dist: joblib; extra == 'nn'
344
- Requires-Dist: matplotlib; extra == 'nn'
345
- Requires-Dist: readchar; extra == 'nn'
346
- Requires-Dist: ruamel-yaml; extra == 'nn'
347
- Requires-Dist: seaborn; extra == 'nn'
348
- Requires-Dist: tensorpac; extra == 'nn'
349
- Requires-Dist: xarray; extra == 'nn'
350
- Provides-Extra: parallel
351
- Requires-Dist: tqdm; extra == 'parallel'
352
- Provides-Extra: path
353
- Requires-Dist: gitpython; extra == 'path'
354
- Requires-Dist: matplotlib; extra == 'path'
355
- Provides-Extra: pd
356
- Requires-Dist: xarray; extra == 'pd'
357
- Provides-Extra: plt
358
- Requires-Dist: joblib; extra == 'plt'
359
- Requires-Dist: matplotlib; extra == 'plt'
360
- Requires-Dist: piexif; extra == 'plt'
361
- Requires-Dist: pillow; extra == 'plt'
362
- Requires-Dist: pyyaml; extra == 'plt'
363
- Requires-Dist: ruamel-yaml; extra == 'plt'
364
- Requires-Dist: scipy; extra == 'plt'
365
- Requires-Dist: seaborn; extra == 'plt'
366
- Requires-Dist: termplotlib; extra == 'plt'
367
- Requires-Dist: xarray; extra == 'plt'
368
- Provides-Extra: repro
369
- Requires-Dist: matplotlib; extra == 'repro'
370
- Provides-Extra: resource
371
- Requires-Dist: h5py; extra == 'resource'
372
- Requires-Dist: joblib; extra == 'resource'
373
- Requires-Dist: matplotlib; extra == 'resource'
374
- Requires-Dist: psutil; extra == 'resource'
375
- Requires-Dist: pyyaml; extra == 'resource'
376
- Requires-Dist: readchar; extra == 'resource'
377
- Requires-Dist: ruamel-yaml; extra == 'resource'
378
- Requires-Dist: scipy; extra == 'resource'
379
- Provides-Extra: scholar
380
- Requires-Dist: aiohttp; extra == 'scholar'
381
- Requires-Dist: beautifulsoup4; extra == 'scholar'
382
- Requires-Dist: bibtexparser; extra == 'scholar'
383
- Requires-Dist: crawl4ai; extra == 'scholar'
384
- Requires-Dist: feedparser; extra == 'scholar'
385
- Requires-Dist: html2text; extra == 'scholar'
386
- Requires-Dist: httpx; extra == 'scholar'
387
- Requires-Dist: matplotlib; extra == 'scholar'
388
- Requires-Dist: natsort; extra == 'scholar'
389
- Requires-Dist: nest-asyncio; extra == 'scholar'
390
- Requires-Dist: openpyxl; extra == 'scholar'
391
- Requires-Dist: pdfplumber; extra == 'scholar'
392
- Requires-Dist: pillow; extra == 'scholar'
393
- Requires-Dist: playwright>=1.40.0; extra == 'scholar'
394
- Requires-Dist: pydantic; extra == 'scholar'
395
- Requires-Dist: pymed; extra == 'scholar'
396
- Requires-Dist: pymupdf; extra == 'scholar'
397
- Requires-Dist: pypdf2; extra == 'scholar'
398
- Requires-Dist: pytesseract; extra == 'scholar'
399
- Requires-Dist: python-docx; extra == 'scholar'
400
- Requires-Dist: pyyaml; extra == 'scholar'
401
- Requires-Dist: requests; extra == 'scholar'
402
- Requires-Dist: ruamel-yaml; extra == 'scholar'
403
- Requires-Dist: scholarly; extra == 'scholar'
404
- Requires-Dist: scikit-learn; extra == 'scholar'
405
- Requires-Dist: seaborn; extra == 'scholar'
406
- Requires-Dist: selenium; extra == 'scholar'
407
- Requires-Dist: sql-manager; extra == 'scholar'
408
- Requires-Dist: sqlalchemy; extra == 'scholar'
409
- Requires-Dist: tenacity; extra == 'scholar'
410
- Requires-Dist: tqdm; extra == 'scholar'
411
- Requires-Dist: watchdog; extra == 'scholar'
412
- Requires-Dist: webdriver-manager; extra == 'scholar'
413
- Provides-Extra: session
414
- Requires-Dist: matplotlib; extra == 'session'
415
- Requires-Dist: pyyaml; extra == 'session'
416
- Provides-Extra: sh
417
- Requires-Dist: matplotlib; extra == 'sh'
418
- Provides-Extra: stats
419
- Requires-Dist: matplotlib; extra == 'stats'
420
- Requires-Dist: scipy; extra == 'stats'
421
- Requires-Dist: statsmodels; extra == 'stats'
422
- Requires-Dist: tabulate; extra == 'stats'
423
- Provides-Extra: str
424
- Requires-Dist: matplotlib; extra == 'str'
425
- Requires-Dist: natsort; extra == 'str'
426
- Requires-Dist: xarray; extra == 'str'
427
- Provides-Extra: tex
428
- Requires-Dist: matplotlib; extra == 'tex'
429
- Provides-Extra: torch
430
- Requires-Dist: torch; extra == 'torch'
431
- Provides-Extra: types
432
- Requires-Dist: xarray; extra == 'types'
433
- Provides-Extra: utils
434
- Requires-Dist: h5py; extra == 'utils'
435
- Requires-Dist: matplotlib; extra == 'utils'
436
- Requires-Dist: natsort; extra == 'utils'
437
- Requires-Dist: tqdm; extra == 'utils'
438
- Requires-Dist: xarray; extra == 'utils'
439
- Provides-Extra: web
440
- Requires-Dist: aiohttp; extra == 'web'
441
- Requires-Dist: anthropic; extra == 'web'
442
- Requires-Dist: beautifulsoup4; extra == 'web'
443
- Requires-Dist: google-genai; extra == 'web'
444
- Requires-Dist: groq; extra == 'web'
445
- Requires-Dist: joblib; extra == 'web'
446
- Requires-Dist: markdown2; extra == 'web'
447
- Requires-Dist: matplotlib; extra == 'web'
448
- Requires-Dist: openai; extra == 'web'
449
- Requires-Dist: pillow; extra == 'web'
450
- Requires-Dist: pytest-asyncio; extra == 'web'
451
- Requires-Dist: readability-lxml; extra == 'web'
452
- Requires-Dist: requests; extra == 'web'
453
- Requires-Dist: ruamel-yaml; extra == 'web'
454
- Requires-Dist: scikit-learn; extra == 'web'
455
- Requires-Dist: scipy; extra == 'web'
456
- Requires-Dist: seaborn; extra == 'web'
457
- Requires-Dist: tqdm; extra == 'web'
458
- Requires-Dist: xarray; extra == 'web'
459
- Provides-Extra: writer
460
- Requires-Dist: csv2latex; extra == 'writer'
461
- Requires-Dist: gitpython; extra == 'writer'
462
- Requires-Dist: matplotlib; extra == 'writer'
463
- Requires-Dist: pytest-asyncio; extra == 'writer'
464
- Requires-Dist: xlsx2csv; extra == 'writer'
465
- Requires-Dist: yq; extra == 'writer'
466
- Description-Content-Type: text/markdown
467
-
468
- <!-- ---
469
- !-- Timestamp: 2026-01-09 13:47:53
470
- !-- Author: ywatanabe
471
- !-- File: /home/ywatanabe/proj/scitex-code/README.md
472
- !-- --- -->
473
-
474
- # SciTeX
475
-
476
- A Python framework for scientific research that makes the entire research pipeline more standardized, structured, and reproducible by automating repetitive processes.
477
-
478
- Part of the fully open-source SciTeX project: https://scitex.ai
479
-
480
- ## ๐Ÿ“Š Status
481
-
482
- <!-- badges -->
483
- <div align="center">
484
- <table>
485
- <tr>
486
- <td align="center"><strong>Package</strong></td>
487
- <td>
488
- <a href="https://badge.fury.io/py/scitex"><img src="https://badge.fury.io/py/scitex.svg" alt="PyPI version"></a>
489
- <a href="https://pypi.org/project/scitex/"><img src="https://img.shields.io/pypi/pyversions/scitex.svg" alt="Python Versions"></a>
490
- <a href="https://github.com/ywatanabe1989/SciTeX-Code/blob/main/LICENSE"><img src="https://img.shields.io/github/license/ywatanabe1989/SciTeX-Code" alt="License"></a>
491
- </td>
492
- </tr>
493
- <tr>
494
- <td align="center"><strong>Install</strong></td>
495
- <td>
496
- <img src="https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/core.json&label=core" alt="Core Install Time">
497
- <img src="https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/all.json&label=all" alt="All Install Time">
498
- <img src="https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/heavy.json&label=heavy" alt="Heavy Install Time">
499
- <img src="https://img.shields.io/badge/uv-recommended-blue" alt="uv recommended">
500
- </td>
501
- </tr>
502
- </table>
503
- </div>
504
-
505
- <details>
506
- <summary><strong>Module Status - Tests & Installation</strong></summary>
507
-
508
- ### Core Modules
509
-
510
- | Module | Description | Install (Time) | Tests |
511
- |--------|-------------|----------------|-------|
512
- | [`io`](./src/scitex/io#readme) | Universal I/O (30+ formats) | `scitex[io]` ![io](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/io.json) | [![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) |
513
- | [`path`](./src/scitex/path#readme) | Path utilities | `scitex[path]` ![path](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/path.json) | [![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) |
514
- | [`str`](./src/scitex/str#readme) | String processing | `scitex[str]` ![str](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/str.json) | [![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) |
515
- | [`dict`](./src/scitex/dict#readme) | Dictionary utilities | core ![dict](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/dict.json) | [![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) |
516
- | [`types`](./src/scitex/types#readme) | Type checking | core ![types](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/types.json) | [![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) |
517
- | [`config`](./src/scitex/config#readme) | Configuration management | `scitex[config]` ![config](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/config.json) | [![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) |
518
- | [`utils`](./src/scitex/utils#readme) | General utilities | `scitex[utils]` ![utils](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/utils.json) | [![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) |
519
- | [`decorators`](./src/scitex/decorators#readme) | Function decorators | `scitex[decorators]` ![decorators](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/decorators.json) | [![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) |
520
- | [`logging`](./src/scitex/logging#readme) | Structured logging | `scitex[logging]` ![logging](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/logging.json) | [![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) |
521
- | [`gen`](./src/scitex/gen#readme) | Project setup | `scitex[gen]` ![gen](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/gen.json) | [![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) |
522
-
523
- ### Data Science & Statistics
524
-
525
- | Module | Description | Install (Time) | Tests |
526
- |--------|-------------|----------------|-------|
527
- | [`stats`](./src/scitex/stats#readme) | Statistical tests & analysis | `scitex[stats]` ![stats](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/stats.json) | [![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) |
528
- | [`pd`](./src/scitex/pd#readme) | Pandas extensions | `scitex[pd]` ![pd](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/pd.json) | [![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) |
529
- | [`linalg`](./src/scitex/linalg#readme) | Linear algebra | `scitex[linalg]` ![linalg](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/linalg.json) | [![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) |
530
- | [`plt`](./src/scitex/plt#readme) | Enhanced matplotlib | `scitex[plt]` ![plt](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/plt.json) | [![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) |
531
- | [`dsp`](./src/scitex/dsp#readme) | Signal processing | `scitex[dsp]` ![dsp](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/dsp.json) | [![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) |
532
-
533
- ### AI & Machine Learning
534
-
535
- | Module | Description | Install (Time) | Tests |
536
- |--------|-------------|----------------|-------|
537
- | [`ai`](./src/scitex/ai#readme) | GenAI (7 providers) | `scitex[ai]` ![ai](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/ai.json) | [![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) |
538
- | [`nn`](./src/scitex/nn#readme) | Neural network layers | `scitex[nn]` ![nn](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/nn.json) | [![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) |
539
- | [`torch`](./src/scitex/torch#readme) | PyTorch utilities | `scitex[torch]` ![torch](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/torch.json) | [![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) |
540
-
541
- ### System & Tools
542
-
543
- | Module | Description | Install (Time) | Tests |
544
- |--------|-------------|----------------|-------|
545
- | [`cli`](./src/scitex/cli#readme) | Command-line tools | `scitex[cli]` ![cli](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/cli.json) | [![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) |
546
- | [`sh`](./src/scitex/sh#readme) | Shell utilities | `scitex[sh]` ![sh](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/sh.json) | [![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) |
547
- | [`git`](./src/scitex/git#readme) | Git operations | `scitex[git]` ![git](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/git.json) | [![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) |
548
- | [`session`](./src/scitex/session#readme) | Session management | `scitex[session]` ![session](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/session.json) | [![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) |
549
- | [`resource`](./src/scitex/resource#readme) | System monitoring | `scitex[resource]` ![resource](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/resource.json) | [![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) |
550
- | [`db`](./src/scitex/db#readme) | Database abstractions | `scitex[db]` ![db](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/db.json) | [![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) |
551
-
552
- ### Research & Publishing
553
-
554
- | Module | Description | Install (Time) | Tests |
555
- |--------|-------------|----------------|-------|
556
- | [`writer`](./src/scitex/writer#readme) | Document generation | `scitex[writer]` ![writer](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/writer.json) | [![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) |
557
- | [`tex`](./src/scitex/tex#readme) | LaTeX processing | `scitex[tex]` ![tex](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/tex.json) | [![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) |
558
- | [`msword`](./src/scitex/msword#readme) | MS Word conversion | `scitex[msword]` ![msword](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/msword.json) | [![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) |
559
- | [`scholar`](./src/scitex/scholar#readme) | Literature management | `scitex[scholar]` ![scholar](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/scholar.json) | [![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) |
560
- | [`diagram`](./src/scitex/diagram#readme) | Diagram generation | `scitex[diagram]` ![diagram](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/diagram.json) | [![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) |
561
-
562
- ### Web & Automation
563
-
564
- | Module | Description | Install (Time) | Tests |
565
- |--------|-------------|----------------|-------|
566
- | [`web`](./src/scitex/web#readme) | Web scraping | `scitex[web]` ![web](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/web.json) | [![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) |
567
- | [`browser`](./src/scitex/browser#readme) | Browser automation | `scitex[browser]` ![browser](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/browser.json) | [![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) |
568
-
569
- ### Other Modules
570
-
571
- | Module | Description | Install (Time) | Tests |
572
- |--------|-------------|----------------|-------|
573
- | [`audio`](./src/scitex/audio#readme) | Audio processing | `scitex[audio]` ![audio](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/audio.json) | [![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) |
574
- | [`capture`](./src/scitex/capture#readme) | Screen capture | `scitex[capture]` ![capture](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/capture.json) | [![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) |
575
- | [`repro`](./src/scitex/repro#readme) | Reproducibility | `scitex[repro]` ![repro](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/repro.json) | [![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) |
576
- | [`benchmark`](./src/scitex/benchmark#readme) | Performance testing | `scitex[benchmark]` ![benchmark](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/benchmark.json) | [![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) |
577
- | [`security`](./src/scitex/security#readme) | Security utilities | `scitex[security]` ![security](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/security.json) | [![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) |
578
- | [`dt`](./src/scitex/dt#readme) | Datetime utilities | `scitex[dt]` ![dt](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/dt.json) | [![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) |
579
- | [`dev`](./src/scitex/dev#readme) | Development tools | `scitex[dev]` ![dev](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/dev.json) | [![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) |
580
- | [`schema`](./src/scitex/schema#readme) | Data schemas | `scitex[schema]` ![schema](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/schema.json) | [![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) |
581
- | [`bridge`](./src/scitex/bridge#readme) | Module integration | `scitex[bridge]` ![bridge](https://img.shields.io/endpoint?url=https://ywatanabe1989.github.io/scitex-code/badges/bridge.json) | [![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) |
582
-
583
- </details>
584
-
585
- ## ๐Ÿ“ฆ Installation
586
-
587
- ``` bash
588
- uv pip install scitex[all] # Recommended: Full installation with all modules
589
- uv pip install scitex # Core only (numpy, pandas, PyYAML, tqdm)
590
- uv pip install scitex[heavy] # Include heavy deps (torch, mne, optuna, etc.)
591
- ```
592
-
593
- > **Note**: Heavy dependencies (torch, mne, optuna, catboost, jax, tensorflow, umap-learn)
594
- > are optional and NOT included by default. Install with `scitex[heavy]` if needed.
595
- > Modules gracefully handle missing dependencies with `*_AVAILABLE` flags.
596
-
597
- <details>
598
- <summary><strong>Arial Font Setup for Figures</strong></summary>
599
-
600
- ``` bash
601
- # Ubuntu
602
- sudo apt update
603
- sudo apt-get install ttf-mscorefonts-installer
604
- sudo DEBIAN_FRONTEND=noninteractive \
605
- apt install -y ttf-mscorefonts-installer
606
- sudo mkdir -p /usr/share/fonts/truetype/custom
607
- sudo cp /mnt/c/Windows/Fonts/arial*.ttf /usr/share/fonts/truetype/custom/
608
- sudo fc-cache -fv
609
- rm ~/.cache/matplotlib -rf
610
-
611
- # WSL
612
- mkdir -p ~/.local/share/fonts/windows
613
- cp /mnt/c/Windows/Fonts/arial*.ttf ~/.local/share/fonts/windows/
614
- fc-cache -fv ~/.local/share/fonts/windows
615
- rm ~/.cache/matplotlib -rf
616
- ```
617
-
618
- ``` python
619
- # Check
620
- import matplotlib
621
- print(matplotlib.rcParams['font.family'])
622
-
623
- import matplotlib.font_manager as fm
624
- fonts = fm.findSystemFonts()
625
- print("Arial found:", any("Arial" in f or "arial" in f for f in fonts))
626
- [a for a in fonts if "Arial" in a or "arial" in a][:5]
627
-
628
- import matplotlib as mpl
629
- import matplotlib.pyplot as plt
630
-
631
- mpl.rcParams["font.family"] = "Arial"
632
- mpl.rcParams["font.sans-serif"] = ["Arial"] # ๅฟตใฎใŸใ‚
633
-
634
- fig, ax = plt.subplots(figsize=(3, 2))
635
- ax.text(0.5, 0.5, "Arial Test", fontsize=32, ha="center", va="center")
636
- ax.set_axis_off()
637
-
638
- fig.savefig("arial_test.png", dpi=300)
639
- plt.close(fig)
640
- ```
641
-
642
- </details>
643
-
644
- ## Why SciTeX?
645
-
646
- SciTeX automates research analysis code.
647
-
648
- <details>
649
- <summary><strong><code>@scitex.session</code></strong> โ€” Reproducible Experiment Tracking + Auto-CLI</summary>
650
-
651
- Standardized outputs with automatic logging. Scripts and outputs closely linked for full traceability.
652
-
653
- **Auto-CLI Generation**: Function arguments automatically become argparse options:
654
-
655
- ```python
656
- # /path/to/script.py
657
- import scitex as stx
658
-
659
- @stx.session
660
- def main(
661
- # arg1, # Required: -a ARG1, --arg1 ARG1
662
- # kwarg1="value1", # Optional: -k KWARG1, --kwarg1 KWARG1 (default: value1)
663
- CONFIG=stx.INJECTED, # Auto-injected from $(pwd)/config/*.yaml files
664
- plt=stx.INJECTED, # Pre-configured matplotlib
665
- COLORS=stx.INJECTED, # Color palette
666
- rng=stx.INJECTED, # Seeded random generator
667
- logger=stx.INJECTED, # Session logger
668
- ):
669
- """This docstring becomes --help description."""
670
-
671
- stx.io.save(results, "results.csv", symlink_to="./data/")
672
- # SUCC: Saved to: /path/to/script_out/tmp.txt (4.0 B)
673
- # SUCC: Symlinked: /path/to/script_out/tmp.txt ->
674
- # SUCC: ./data/tmp.txt
675
-
676
- return 0
677
- ```
678
-
679
- ```bash
680
- $ python script.py --help
681
- usage: script.py [-a ARG1] [-k KWARG1]
682
- -a ARG1, --arg1 ARG1 (required)
683
- -k KWARG1, --kwarg1 KWARG1 (default: value1)
684
-
685
- $ python script.py -a myvalue
686
- # Runs with arg1="myvalue", kwarg1="value1"
687
- ```
688
-
689
- **Output Structure**:
690
- ```bash
691
- /path/to/script.py
692
- /path/to/script_out/
693
- โ”œโ”€โ”€ FINISHED_SUCCESS/
694
- โ”‚ โ””โ”€โ”€ 2025-01-08_12-30-00_AbC1/ # Session ID allocated
695
- โ”‚ โ”œโ”€โ”€ results.csv
696
- โ”‚ โ”œโ”€โ”€ CONFIGS/
697
- โ”‚ โ”‚ โ”œโ”€โ”€ CONFIG.pkl # Python object
698
- โ”‚ โ”‚ โ””โ”€โ”€ CONFIG.yaml # Human-readable
699
- โ”‚ โ””โ”€โ”€ logs/
700
- โ”‚ โ”œโ”€โ”€ stderr.log # Standard Errors
701
- โ”‚ โ””โ”€โ”€ stdout.log # Standard Outputs
702
- โ”œโ”€โ”€ FINISHED_FAILED/
703
- โ”‚ โ””โ”€โ”€ ...
704
- โ””โ”€โ”€ RUNNING/
705
- โ””โ”€โ”€ ...
706
- ```
707
-
708
- </details>
709
-
710
- <details>
711
- <summary><strong><code>scitex.plt</code></strong> โ€” Auto-Export Figures with Data</summary>
712
-
713
- Figures and data always together. CSV auto-exported from every plot.
714
-
715
- ```python
716
- import scitex as stx
717
-
718
- fig, ax = stx.plt.subplots()
719
- ax.plot_line(x, y) # Data tracked automatically
720
- stx.io.save(fig, "plot.png")
721
- # Creates: plot.png + plot.csv
722
- ```
723
-
724
- </details>
725
-
726
- <details>
727
- <summary><strong><code>scitex.io</code></strong> โ€” Universal File I/O (30+ formats)</summary>
728
-
729
- One API for all formats: CSV, JSON, YAML, pickle, NumPy, HDF5, Zarr, PyTorch, images, PDFs, EEG formats.
730
-
731
- ```python
732
- import scitex as stx
733
-
734
- # Unified API Call for +30 formats
735
- stx.io.save(df, "output.csv")
736
- stx.io.save(arr, "output.npy")
737
- stx.io.save(fig, "output.jpg")
738
-
739
- # Round Trip Loading
740
- df = stx.io.load("output.csv")
741
- arr = stx.io.load("output.npy")
742
- ```
743
-
744
- </details>
745
-
746
- <details>
747
- <summary><strong><code>scitex.stats</code></strong> โ€” Publication-Ready Statistics (23 tests)</summary>
748
-
749
- Automatic assumption checking, effect sizes, multiple comparison corrections, 9 export formats.
750
-
751
- ```python
752
- import scitex as stx
753
-
754
- result = stx.stats.test_ttest_ind(
755
- group1, group2,
756
- return_as="dataframe" # or "latex", "markdown", "excel"
757
- )
758
- # Includes: p-value, effect size, CI, normality check, power analysis
759
- ```
760
-
761
- </details>
762
-
763
- <details>
764
- <summary><strong><code>scitex.scholar</code></strong> โ€” Literature Management & BibTeX Enrichment</summary>
765
-
766
- BibTeX enrichment with abstracts for LLM context, DOI resolution, PDF download, Impact Factor.
767
-
768
- ```bash
769
- scitex scholar bibtex papers.bib --project myresearch --num-workers 8
770
- ```
771
-
772
- ```bibtex
773
- # Before: Minimal BibTeX
774
- @article{Smith2024,
775
- title = {Neural Networks},
776
- author = {Smith, John},
777
- doi = {10.1038/s41586-024-00001-1}
778
- }
779
-
780
- # After: Enriched with abstract for LLM context
781
- @article{Smith2024,
782
- title = {Neural Networks for Brain Signal Analysis},
783
- author = {Smith, John and Lee, Alice},
784
- doi = {10.1038/s41586-024-00001-1},
785
- journal = {Nature},
786
- year = {2024},
787
- abstract = {We present a novel deep learning approach...}, # Rich context for LLMs
788
- impact_factor = {64.8}
789
- }
790
- ```
791
-
792
- </details>
793
-
794
- <details>
795
- <summary><strong><code>scitex.writer</code></strong> โ€” LaTeX Manuscript Management</summary>
796
-
797
- Python interface for LaTeX manuscripts with git-based version control.
798
-
799
- ```python
800
- from scitex.writer import Writer
801
-
802
- writer = Writer("my_paper")
803
- intro = writer.manuscript.contents.introduction
804
-
805
- lines = intro.read()
806
- intro.write(lines + ["New paragraph..."])
807
- intro.commit("Update introduction")
808
-
809
- result = writer.compile_manuscript()
810
- ```
811
-
812
- </details>
813
-
814
- <details>
815
- <summary><strong><code>scitex.ai</code></strong> โ€” Unified AI/ML Interface (7 providers)</summary>
816
-
817
- Single API for OpenAI, Anthropic, Google, Perplexity, DeepSeek, Groq, local models.
818
-
819
- ```python
820
- from scitex.ai.genai import GenAI
821
-
822
- ai = GenAI(provider="openai")
823
- response = ai("Explain this data pattern")
824
-
825
- # Switch providers instantly
826
- ai = GenAI(provider="anthropic", model="claude-3-opus-20240229")
827
- ```
828
-
829
- </details>
830
-
831
- ## ๐Ÿ–ฅ๏ธ CLI Commands
832
-
833
- SciTeX provides a comprehensive command-line interface:
834
-
835
- <details>
836
- <summary><strong>CLI Commands</strong></summary>
837
-
838
- ```bash
839
- # SciTeX Cloud (https://scitex.ai)
840
- scitex cloud login # Login to SciTeX Cloud
841
- scitex cloud clone user/project # Clone from cloud
842
- scitex cloud create my-project # Create new repository
843
- scitex cloud enrich -i refs.bib -o enriched.bib # BibTeX enrichment API
844
-
845
- # Configuration
846
- scitex config list # Show all configured paths
847
- scitex config init # Initialize directories
848
-
849
- # Research Tools
850
- scitex scholar bibtex papers.bib # Process BibTeX, download PDFs
851
- scitex scholar single --doi "10.1038/nature12373"
852
-
853
- # TIP: Get BibTeX from Scholar QA (https://scholarqa.allen.ai/chat/)
854
- # Ask questions โ†’ Export All Citations โ†’ Save as .bib file
855
- scitex stats recommend --data data.csv
856
-
857
- # Media
858
- scitex audio speak "Hello world"
859
- scitex capture snap --output screenshot.jpg
860
-
861
- # Document Processing
862
- scitex tex compile manuscript.tex
863
- scitex writer compile my_paper
864
-
865
- # Utilities
866
- scitex resource usage # System resource monitoring
867
- scitex security check --save # Security audit
868
- scitex web get-urls https://example.com
869
- scitex completion # Enable tab completion
870
- ```
871
-
872
- </details>
873
-
874
- ## ๐Ÿ”Œ MCP Servers
875
-
876
- <details>
877
- <summary><strong>Model Context Protocol (MCP) servers for AI agent integration</strong></summary>
878
-
879
- SciTeX provides Model Context Protocol (MCP) servers for AI agent integration:
880
-
881
- | Server | Description |
882
- |--------|-------------|
883
- | `scitex-audio` | Text-to-speech for agent feedback |
884
- | `scitex-capture` | Screen monitoring and capture |
885
- | `scitex-plt` | Matplotlib figure creation |
886
- | `scitex-stats` | Automated statistical testing |
887
- | `scitex-scholar` | PDF download and metadata enrichment |
888
- | `scitex-diagram` | Mermaid and flowchart creation |
889
- | `scitex-template` | Project scaffolding |
890
- | `scitex-canvas` | Scientific figure canvas |
891
-
892
- ### All-in-One Server (Recommended)
893
-
894
- Use `scitex-mcp-server` to load all MCP modules with a single server:
895
-
896
- **Claude Desktop Configuration** (`~/.config/claude/claude_desktop_config.json`):
897
-
898
- ```json
899
- {
900
- "mcpServers": {
901
- "scitex": {
902
- "command": "scitex-mcp-server"
903
- }
904
- }
905
- }
906
- ```
907
-
908
- Tools are prefixed by module (e.g., `audio_speak`, `capture_screenshot`, `scholar_enrich_bibtex`).
909
-
910
- ### Individual Servers
911
-
912
- For selective module loading, configure servers individually:
913
-
914
- ```json
915
- {
916
- "mcpServers": {
917
- "scitex-audio": {
918
- "command": "scitex-audio"
919
- },
920
- "scitex-capture": {
921
- "command": "scitex-capture"
922
- },
923
- "scitex-scholar": {
924
- "command": "scitex-scholar"
925
- }
926
- }
927
- }
928
- ```
929
-
930
- </details>
931
-
932
- ## ๐Ÿš€ Quick Start
933
-
934
-
935
- ### Research Analysis with **70% Less Code**
936
-
937
- Compare these two implementations that produce **identical research outputs**:
938
-
939
- #### With SciTeX ([57 Lines of Code]((./examples/demo_session_plt_io.py)))
940
-
941
- ```python
942
- #!/usr/bin/env python3
943
- # -*- coding: utf-8 -*-
944
- # Timestamp: "2025-11-18 09:34:36 (ywatanabe)"
945
- # File: /home/ywatanabe/proj/scitex-code/examples/demo_session_plt_io.py
946
-
947
-
948
- """Minimal Demonstration for scitex.{session,io,plt}"""
949
-
950
- import numpy as np
951
- import scitex as stx
952
-
953
-
954
- def demo(filename, verbose=False):
955
- """Show metadata without QR code (just embedded)."""
956
-
957
- # matplotlib.pyplot wrapper.
958
- fig, ax = stx.plt.subplots()
959
-
960
- t = np.linspace(0, 2, 1000)
961
- signal = np.sin(2 * np.pi * 5 * t) * np.exp(-t / 2)
962
-
963
- ax.plot_line(t, signal) # Original plot for automatic CSV export
964
- ax.set_xyt(
965
- "Time (s)",
966
- "Amplitude",
967
- "Clean Figure (metadata embedded, no QR overlay)",
968
- )
969
-
970
- # Saving: stx.io.save(obj, rel_path, **kwargs)
971
- stx.io.save(
972
- fig,
973
- filename,
974
- metadata={"exp": "s01", "subj": "S001"}, # with meatadata embedding
975
- symlink_to="./data", # Symlink for centralized outputs
976
- verbose=verbose, # Automatic terminal logging (no manual print())
977
- )
978
- fig.close()
979
-
980
- # Loading: stx.io.load(path)
981
- ldir = __file__.replace(".py", "_out")
982
- img, meta = stx.io.load(
983
- f"{ldir}/{filename}",
984
- verbose=verbose,
985
- )
986
-
987
-
988
- @stx.session
989
- def main(filename="demo.jpg", verbose=True):
990
- """Run demo for scitex.{session,plt,io}."""
991
-
992
- demo(filename, verbose=verbose)
993
-
994
- return 0
995
-
996
-
997
- if __name__ == "__main__":
998
- main()
999
- ```
1000
-
1001
-
1002
- <details>
1003
- <summary><strong>Equivalent Script without SciTeX ([188 Lines of Code](./examples/demo_session_plt_io_pure_python.py)), requiring 3.3ร— more code</strong></summary>
1004
-
1005
- ```python
1006
- #!/usr/bin/env python3
1007
- # -*- coding: utf-8 -*-
1008
- # Timestamp: "2025-11-18 09:34:51 (ywatanabe)"
1009
- # File: /home/ywatanabe/proj/scitex-code/examples/demo_session_plt_io_pure_python.py
1010
-
1011
-
1012
- """Minimal Demonstration - Pure Python Version"""
1013
-
1014
- import argparse
1015
- import json
1016
- import logging
1017
- import os
1018
- import shutil
1019
- import sys
1020
- from datetime import datetime
1021
- from pathlib import Path
1022
- import random
1023
- import string
1024
-
1025
- import matplotlib.pyplot as plt
1026
- import numpy as np
1027
- from PIL import Image
1028
- from PIL.PngImagePlugin import PngInfo
1029
-
1030
-
1031
- def generate_session_id():
1032
- """Generate unique session ID."""
1033
- timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
1034
- random_suffix = ''.join(random.choices(string.ascii_uppercase + string.digits, k=4))
1035
- return f"{timestamp}_{random_suffix}"
1036
-
1037
-
1038
- def setup_logging(log_dir):
1039
- """Set up logging infrastructure."""
1040
- log_dir.mkdir(parents=True, exist_ok=True)
1041
- logger = logging.getLogger(__name__)
1042
- logger.setLevel(logging.INFO)
1043
-
1044
- stdout_handler = logging.FileHandler(log_dir / "stdout.log")
1045
- stderr_handler = logging.FileHandler(log_dir / "stderr.log")
1046
- console_handler = logging.StreamHandler(sys.stdout)
1047
-
1048
- formatter = logging.Formatter('%(levelname)s: %(message)s')
1049
- stdout_handler.setFormatter(formatter)
1050
- stderr_handler.setFormatter(formatter)
1051
- console_handler.setFormatter(formatter)
1052
-
1053
- logger.addHandler(stdout_handler)
1054
- logger.addHandler(stderr_handler)
1055
- logger.addHandler(console_handler)
1056
-
1057
- return logger
1058
-
1059
-
1060
- def save_plot_data_to_csv(fig, output_path):
1061
- """Extract and save plot data."""
1062
- csv_path = output_path.with_suffix('.csv')
1063
- data_lines = ["ax_00_plot_line_0_line_x,ax_00_plot_line_0_line_y"]
1064
-
1065
- for ax in fig.get_axes():
1066
- for line in ax.get_lines():
1067
- x_data = line.get_xdata()
1068
- y_data = line.get_ydata()
1069
- for x, y in zip(x_data, y_data):
1070
- data_lines.append(f"{x},{y}")
1071
-
1072
- csv_path.write_text('\n'.join(data_lines))
1073
- return csv_path, csv_path.stat().st_size / 1024
1074
-
1075
-
1076
- def embed_metadata_in_image(image_path, metadata):
1077
- """Embed metadata into image file."""
1078
- img = Image.open(image_path)
1079
-
1080
- if image_path.suffix.lower() in ['.png']:
1081
- pnginfo = PngInfo()
1082
- for key, value in metadata.items():
1083
- pnginfo.add_text(key, str(value))
1084
- img.save(image_path, pnginfo=pnginfo)
1085
- elif image_path.suffix.lower() in ['.jpg', '.jpeg']:
1086
- json_path = image_path.with_suffix(image_path.suffix + '.meta.json')
1087
- json_path.write_text(json.dumps(metadata, indent=2))
1088
- img.save(image_path, quality=95)
1089
-
1090
-
1091
- def save_figure(fig, output_path, metadata=None, symlink_to=None, logger=None):
1092
- """Save figure with metadata and symlink."""
1093
- output_path = Path(output_path)
1094
- output_path.parent.mkdir(parents=True, exist_ok=True)
1095
-
1096
- if metadata is None:
1097
- metadata = {}
1098
- metadata['url'] = 'https://scitex.ai'
1099
-
1100
- if logger:
1101
- logger.info(f"๐Ÿ“ Saving figure with metadata to: {output_path}")
1102
- logger.info(f" โ€ข Embedded metadata: {metadata}")
1103
-
1104
- csv_path, csv_size = save_plot_data_to_csv(fig, output_path)
1105
- if logger:
1106
- logger.info(f"โœ… Saved to: {csv_path} ({csv_size:.1f} KiB)")
1107
-
1108
- fig.savefig(output_path, dpi=150, bbox_inches='tight')
1109
- embed_metadata_in_image(output_path, metadata)
1110
-
1111
- if symlink_to:
1112
- symlink_dir = Path(symlink_to)
1113
- symlink_dir.mkdir(parents=True, exist_ok=True)
1114
- symlink_path = symlink_dir / output_path.name
1115
- if symlink_path.exists() or symlink_path.is_symlink():
1116
- symlink_path.unlink()
1117
- symlink_path.symlink_to(output_path.resolve())
1118
-
1119
-
1120
- def demo(output_dir, filename, verbose=False, logger=None):
1121
- """Generate, plot, and save signal."""
1122
- fig, ax = plt.subplots(figsize=(8, 6))
1123
-
1124
- t = np.linspace(0, 2, 1000)
1125
- signal = np.sin(2 * np.pi * 5 * t) * np.exp(-t / 2)
1126
-
1127
- ax.plot(t, signal)
1128
- ax.set_xlabel("Time (s)")
1129
- ax.set_ylabel("Amplitude")
1130
- ax.set_title("Damped Oscillation")
1131
- ax.grid(True, alpha=0.3)
1132
-
1133
- output_path = output_dir / filename
1134
- save_figure(fig, output_path, metadata={"exp": "s01", "subj": "S001"},
1135
- symlink_to=output_dir.parent / "data", logger=logger)
1136
- plt.close(fig)
1137
-
1138
- return 0
1139
-
1140
-
1141
- def main():
1142
- """Run demo - Pure Python Version."""
1143
- parser = argparse.ArgumentParser(description="Run demo - Pure Python Version")
1144
- parser.add_argument('-f', '--filename', default='demo.jpg')
1145
- parser.add_argument('-v', '--verbose', type=bool, default=True)
1146
- args = parser.parse_args()
1147
-
1148
- session_id = generate_session_id()
1149
- script_path = Path(__file__).resolve()
1150
- output_base = script_path.parent / (script_path.stem + "_out")
1151
- running_dir = output_base / "RUNNING" / session_id
1152
- logs_dir = running_dir / "logs"
1153
- config_dir = running_dir / "CONFIGS"
1154
-
1155
- logger = setup_logging(logs_dir)
1156
-
1157
- print("=" * 40)
1158
- print(f"Pure Python Demo")
1159
- print(f"{session_id} (PID: {os.getpid()})")
1160
- print(f"\n{script_path}")
1161
- print(f"\nArguments:")
1162
- print(f" filename: {args.filename}")
1163
- print(f" verbose: {args.verbose}")
1164
- print("=" * 40)
1165
-
1166
- config_dir.mkdir(parents=True, exist_ok=True)
1167
- config_data = {
1168
- 'ID': session_id,
1169
- 'FILE': str(script_path),
1170
- 'SDIR_OUT': str(output_base),
1171
- 'SDIR_RUN': str(running_dir),
1172
- 'PID': os.getpid(),
1173
- 'ARGS': vars(args)
1174
- }
1175
- (config_dir / "CONFIG.json").write_text(json.dumps(config_data, indent=2))
1176
-
1177
- try:
1178
- result = demo(output_base, args.filename, args.verbose, logger)
1179
- success_dir = output_base / "FINISHED_SUCCESS" / session_id
1180
- success_dir.parent.mkdir(parents=True, exist_ok=True)
1181
- shutil.move(str(running_dir), str(success_dir))
1182
- logger.info(f"\nโœ… Script completed: {success_dir}")
1183
- return result
1184
- except Exception as e:
1185
- error_dir = output_base / "FINISHED_ERROR" / session_id
1186
- error_dir.parent.mkdir(parents=True, exist_ok=True)
1187
- shutil.move(str(running_dir), str(error_dir))
1188
- logger.error(f"\nโŒ Error: {e}", exc_info=True)
1189
- raise
1190
-
1191
-
1192
- if __name__ == "__main__":
1193
- sys.exit(main())
1194
- ```
1195
-
1196
- </details>
1197
-
1198
-
1199
- ## ๐Ÿ“– Documentation
1200
-
1201
- <details>
1202
- <summary><strong>Resources</strong></summary>
1203
-
1204
- ### Online Documentation
1205
- - **[Read the Docs](https://scitex.readthedocs.io/)**: Complete API reference and guides
1206
- - **[Interactive Examples](https://scitex.readthedocs.io/en/latest/examples/index.html)**: Browse all tutorial notebooks
1207
- - **[Quick Start Guide](https://scitex.readthedocs.io/en/latest/getting_started.html)**: Get up and running quickly
1208
-
1209
- ### Local Resources
1210
- - **[Master Tutorial Index](./examples/00_SCITEX_MASTER_INDEX.ipynb)**: Comprehensive guide to all features
1211
- - **[Examples Directory](./examples/)**: 25+ Jupyter notebooks covering all modules
1212
- - **[Module List](./docs/scitex_modules.csv)**: Complete list of all functions
1213
- - **(Experimental) [MCP Servers Documentation](./mcp_servers/README.md)**
1214
-
1215
- ### Key Tutorials
1216
- 1. **[I/O Operations](./examples/01_scitex_io.ipynb)**: Essential file handling (start here!)
1217
- 2. **[Plotting](./examples/14_scitex_plt.ipynb)**: Publication-ready visualizations
1218
- 3. **[Statistics](./examples/11_scitex_stats.ipynb)**: Research-grade statistical analysis
1219
- 4. **[Scholar](./examples/16_scitex_scholar.ipynb)**: Literature management with impact factors
1220
- 5. **[AI/ML](./examples/16_scitex_ai.ipynb)**: Complete machine learning toolkit
1221
-
1222
- </details>
1223
-
1224
- ## ๐Ÿค Contributing
1225
-
1226
- We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
1227
-
1228
-
1229
-
1230
- ---
1231
-
1232
- <p align="center">
1233
- <a href="https://scitex.ai" target="_blank"><img src="docs/scitex-icon-navy-inverted.png" alt="SciTeX" width="40"/></a>
1234
- <br>
1235
- AGPL-3.0 ยท ywatanabe@scitex.ai
1236
- </p>
1237
-
1238
- <!-- EOF -->