scitex 2.8.1__py3-none-any.whl → 2.10.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 (415) hide show
  1. scitex/__init__.py +15 -7
  2. scitex/__version__.py +1 -2
  3. scitex/_install_guide.py +250 -0
  4. scitex/_optional_deps.py +206 -39
  5. scitex/ai/_gen_ai/_Groq.py +2 -4
  6. scitex/ai/_gen_ai/_OpenAI.py +5 -2
  7. scitex/ai/_gen_ai/_Perplexity.py +20 -6
  8. scitex/audio/__init__.py +24 -15
  9. scitex/audio/_cross_process_lock.py +139 -0
  10. scitex/audio/_mcp_handlers.py +256 -0
  11. scitex/audio/_mcp_tool_schemas.py +203 -0
  12. scitex/audio/engines/elevenlabs_engine.py +5 -2
  13. scitex/audio/mcp_server.py +98 -457
  14. scitex/bridge/__init__.py +30 -19
  15. scitex/bridge/_figrecipe.py +245 -0
  16. scitex/bridge/_helpers.py +2 -1
  17. scitex/bridge/_plt_vis.py +23 -10
  18. scitex/bridge/_stats_plt.py +18 -5
  19. scitex/bridge/_stats_vis.py +16 -2
  20. scitex/browser/__init__.py +84 -44
  21. scitex/browser/automation/__init__.py +5 -1
  22. scitex/browser/core/BrowserMixin.py +17 -4
  23. scitex/browser/core/__init__.py +11 -2
  24. scitex/browser/remote/CaptchaHandler.py +1 -1
  25. scitex/browser/remote/ZenRowsAPIClient.py +1 -1
  26. scitex/capture/grid.py +487 -0
  27. scitex/capture/mcp_handlers.py +401 -0
  28. scitex/capture/mcp_tool_defs.py +192 -0
  29. scitex/capture/mcp_tools.py +241 -0
  30. scitex/capture/mcp_utils.py +30 -0
  31. scitex/cli/convert.py +421 -0
  32. scitex/cli/main.py +6 -4
  33. scitex/datetime/__init__.py +46 -0
  34. scitex/datetime/_linspace.py +100 -0
  35. scitex/datetime/_normalize_timestamp.py +306 -0
  36. scitex/db/_delete_duplicates.py +4 -4
  37. scitex/db/_sqlite3/_delete_duplicates.py +11 -2
  38. scitex/dev/plt/__init__.py +61 -62
  39. scitex/dev/plt/demo_plotters/__init__.py +0 -0
  40. scitex/dev/plt/demo_plotters/plot_mpl_axhline.py +28 -0
  41. scitex/dev/plt/demo_plotters/plot_mpl_axhspan.py +28 -0
  42. scitex/dev/plt/demo_plotters/plot_mpl_axvline.py +28 -0
  43. scitex/dev/plt/demo_plotters/plot_mpl_axvspan.py +28 -0
  44. scitex/dev/plt/demo_plotters/plot_mpl_bar.py +29 -0
  45. scitex/dev/plt/demo_plotters/plot_mpl_barh.py +29 -0
  46. scitex/dev/plt/demo_plotters/plot_mpl_boxplot.py +28 -0
  47. scitex/dev/plt/demo_plotters/plot_mpl_contour.py +31 -0
  48. scitex/dev/plt/demo_plotters/plot_mpl_contourf.py +31 -0
  49. scitex/dev/plt/demo_plotters/plot_mpl_errorbar.py +30 -0
  50. scitex/dev/plt/demo_plotters/plot_mpl_eventplot.py +28 -0
  51. scitex/dev/plt/demo_plotters/plot_mpl_fill.py +30 -0
  52. scitex/dev/plt/demo_plotters/plot_mpl_fill_between.py +31 -0
  53. scitex/dev/plt/demo_plotters/plot_mpl_hexbin.py +28 -0
  54. scitex/dev/plt/demo_plotters/plot_mpl_hist.py +28 -0
  55. scitex/dev/plt/demo_plotters/plot_mpl_hist2d.py +28 -0
  56. scitex/dev/plt/demo_plotters/plot_mpl_imshow.py +29 -0
  57. scitex/dev/plt/demo_plotters/plot_mpl_pcolormesh.py +31 -0
  58. scitex/dev/plt/demo_plotters/plot_mpl_pie.py +29 -0
  59. scitex/dev/plt/demo_plotters/plot_mpl_plot.py +29 -0
  60. scitex/dev/plt/demo_plotters/plot_mpl_quiver.py +31 -0
  61. scitex/dev/plt/demo_plotters/plot_mpl_scatter.py +28 -0
  62. scitex/dev/plt/demo_plotters/plot_mpl_stackplot.py +31 -0
  63. scitex/dev/plt/demo_plotters/plot_mpl_stem.py +29 -0
  64. scitex/dev/plt/demo_plotters/plot_mpl_step.py +29 -0
  65. scitex/dev/plt/demo_plotters/plot_mpl_violinplot.py +28 -0
  66. scitex/dev/plt/demo_plotters/plot_sns_barplot.py +29 -0
  67. scitex/dev/plt/demo_plotters/plot_sns_boxplot.py +29 -0
  68. scitex/dev/plt/demo_plotters/plot_sns_heatmap.py +28 -0
  69. scitex/dev/plt/demo_plotters/plot_sns_histplot.py +29 -0
  70. scitex/dev/plt/demo_plotters/plot_sns_kdeplot.py +29 -0
  71. scitex/dev/plt/demo_plotters/plot_sns_lineplot.py +31 -0
  72. scitex/dev/plt/demo_plotters/plot_sns_scatterplot.py +29 -0
  73. scitex/dev/plt/demo_plotters/plot_sns_stripplot.py +29 -0
  74. scitex/dev/plt/demo_plotters/plot_sns_swarmplot.py +29 -0
  75. scitex/dev/plt/demo_plotters/plot_sns_violinplot.py +29 -0
  76. scitex/dev/plt/demo_plotters/plot_stx_bar.py +29 -0
  77. scitex/dev/plt/demo_plotters/plot_stx_barh.py +29 -0
  78. scitex/dev/plt/demo_plotters/plot_stx_box.py +28 -0
  79. scitex/dev/plt/demo_plotters/plot_stx_boxplot.py +28 -0
  80. scitex/dev/plt/demo_plotters/plot_stx_conf_mat.py +28 -0
  81. scitex/dev/plt/demo_plotters/plot_stx_contour.py +31 -0
  82. scitex/dev/plt/demo_plotters/plot_stx_ecdf.py +28 -0
  83. scitex/dev/plt/demo_plotters/plot_stx_errorbar.py +30 -0
  84. scitex/dev/plt/demo_plotters/plot_stx_fill_between.py +31 -0
  85. scitex/dev/plt/demo_plotters/plot_stx_fillv.py +28 -0
  86. scitex/dev/plt/demo_plotters/plot_stx_heatmap.py +28 -0
  87. scitex/dev/plt/demo_plotters/plot_stx_image.py +28 -0
  88. scitex/dev/plt/demo_plotters/plot_stx_imshow.py +28 -0
  89. scitex/dev/plt/demo_plotters/plot_stx_joyplot.py +28 -0
  90. scitex/dev/plt/demo_plotters/plot_stx_kde.py +28 -0
  91. scitex/dev/plt/demo_plotters/plot_stx_line.py +28 -0
  92. scitex/dev/plt/demo_plotters/plot_stx_mean_ci.py +28 -0
  93. scitex/dev/plt/demo_plotters/plot_stx_mean_std.py +28 -0
  94. scitex/dev/plt/demo_plotters/plot_stx_median_iqr.py +28 -0
  95. scitex/dev/plt/demo_plotters/plot_stx_raster.py +28 -0
  96. scitex/dev/plt/demo_plotters/plot_stx_rectangle.py +28 -0
  97. scitex/dev/plt/demo_plotters/plot_stx_scatter.py +29 -0
  98. scitex/dev/plt/demo_plotters/plot_stx_shaded_line.py +29 -0
  99. scitex/dev/plt/demo_plotters/plot_stx_violin.py +28 -0
  100. scitex/dev/plt/demo_plotters/plot_stx_violinplot.py +28 -0
  101. scitex/dev/plt/mpl/get_dir_ax.py +46 -0
  102. scitex/dev/plt/mpl/get_signatures.py +176 -0
  103. scitex/dev/plt/mpl/get_signatures_details.py +522 -0
  104. scitex/dict/_pop_keys.py +1 -7
  105. scitex/dsp/__init__.py +15 -10
  106. scitex/dsp/add_noise.py +5 -2
  107. scitex/dsp/example.py +35 -22
  108. scitex/dsp/filt.py +8 -3
  109. scitex/dsp/reference.py +3 -2
  110. scitex/dsp/utils/__init__.py +2 -1
  111. scitex/dsp/utils/_differential_bandpass_filters.py +14 -4
  112. scitex/dt/__init__.py +39 -2
  113. scitex/errors.py +82 -521
  114. scitex/fig/__init__.py +4 -4
  115. scitex/fig/editor/edit/panel_loader.py +1 -1
  116. scitex/fig/io/_bundle.py +7 -7
  117. scitex/fts/README.md +262 -0
  118. scitex/fts/TODO.md +66 -0
  119. scitex/fts/__init__.py +90 -0
  120. scitex/fts/_bundle/README_IN_BUNDLE.md +102 -0
  121. scitex/fts/_bundle/_FTS.py +657 -0
  122. scitex/fts/_bundle/__init__.py +38 -0
  123. scitex/fts/_bundle/_children.py +216 -0
  124. scitex/fts/_bundle/_conversion/__init__.py +15 -0
  125. scitex/fts/_bundle/_conversion/_bundle2dict.py +44 -0
  126. scitex/fts/_bundle/_conversion/_dict2bundle.py +50 -0
  127. scitex/fts/_bundle/_dataclasses/_Axes.py +57 -0
  128. scitex/fts/_bundle/_dataclasses/_BBox.py +54 -0
  129. scitex/fts/_bundle/_dataclasses/_ColumnDef.py +72 -0
  130. scitex/fts/_bundle/_dataclasses/_DataFormat.py +40 -0
  131. scitex/fts/_bundle/_dataclasses/_DataInfo.py +135 -0
  132. scitex/fts/_bundle/_dataclasses/_DataSource.py +44 -0
  133. scitex/fts/_bundle/_dataclasses/_Node.py +319 -0
  134. scitex/fts/_bundle/_dataclasses/_NodeRefs.py +45 -0
  135. scitex/fts/_bundle/_dataclasses/_SizeMM.py +38 -0
  136. scitex/fts/_bundle/_dataclasses/__init__.py +35 -0
  137. scitex/fts/_bundle/_extractors/__init__.py +32 -0
  138. scitex/fts/_bundle/_extractors/_extract_bar.py +131 -0
  139. scitex/fts/_bundle/_extractors/_extract_line.py +71 -0
  140. scitex/fts/_bundle/_extractors/_extract_scatter.py +79 -0
  141. scitex/fts/_bundle/_loader.py +134 -0
  142. scitex/fts/_bundle/_mpl_helpers.py +389 -0
  143. scitex/fts/_bundle/_saver.py +269 -0
  144. scitex/fts/_bundle/_storage.py +200 -0
  145. scitex/fts/_bundle/_utils/__init__.py +55 -0
  146. scitex/fts/_bundle/_utils/_const.py +26 -0
  147. scitex/fts/_bundle/_utils/_errors.py +73 -0
  148. scitex/fts/_bundle/_utils/_generate.py +21 -0
  149. scitex/fts/_bundle/_utils/_types.py +76 -0
  150. scitex/fts/_bundle/_validation.py +434 -0
  151. scitex/fts/_bundle/_zipbundle.py +165 -0
  152. scitex/fts/_fig/__init__.py +22 -0
  153. scitex/fts/_fig/_backend/__init__.py +53 -0
  154. scitex/fts/_fig/_backend/_export.py +165 -0
  155. scitex/fts/_fig/_backend/_parser.py +188 -0
  156. scitex/fts/_fig/_backend/_render.py +538 -0
  157. scitex/fts/_fig/_composite.py +345 -0
  158. scitex/fts/_fig/_dataclasses/_ChannelEncoding.py +46 -0
  159. scitex/fts/_fig/_dataclasses/_Encoding.py +82 -0
  160. scitex/fts/_fig/_dataclasses/_Theme.py +441 -0
  161. scitex/fts/_fig/_dataclasses/_TraceEncoding.py +52 -0
  162. scitex/fts/_fig/_dataclasses/__init__.py +47 -0
  163. scitex/fts/_fig/_editor/__init__.py +14 -0
  164. scitex/fts/_fig/_editor/_cui/__init__.py +33 -0
  165. scitex/fts/_fig/_editor/_cui/_backend_detector.py +39 -0
  166. scitex/fts/_fig/_editor/_cui/_bundle_resolver.py +366 -0
  167. scitex/fts/_fig/_editor/_cui/_editor_launcher.py +175 -0
  168. scitex/fts/_fig/_editor/_cui/_manual_handler.py +52 -0
  169. scitex/fts/_fig/_editor/_cui/_panel_loader.py +246 -0
  170. scitex/fts/_fig/_editor/_cui/_path_resolver.py +66 -0
  171. scitex/fts/_fig/_editor/_defaults.py +300 -0
  172. scitex/fts/_fig/_editor/_gui/__init__.py +11 -0
  173. scitex/fts/_fig/_editor/_gui/_flask_editor/__init__.py +20 -0
  174. scitex/fts/_fig/_editor/_gui/_flask_editor/_bbox.py +1339 -0
  175. scitex/fts/_fig/_editor/_gui/_flask_editor/_core.py +1688 -0
  176. scitex/fts/_fig/_editor/_gui/_flask_editor/_plotter.py +664 -0
  177. scitex/fts/_fig/_editor/_gui/_flask_editor/_renderer.py +853 -0
  178. scitex/fts/_fig/_editor/_gui/_flask_editor/_utils.py +79 -0
  179. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/base/reset.css +41 -0
  180. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/base/typography.css +16 -0
  181. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/base/variables.css +85 -0
  182. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/buttons.css +217 -0
  183. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/context-menu.css +93 -0
  184. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/dropdown.css +57 -0
  185. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/forms.css +112 -0
  186. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/modal.css +59 -0
  187. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/sections.css +212 -0
  188. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/canvas.css +176 -0
  189. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/element-inspector.css +190 -0
  190. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/loading.css +59 -0
  191. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/overlay.css +45 -0
  192. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/panel-grid.css +95 -0
  193. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/selection.css +101 -0
  194. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/statistics.css +138 -0
  195. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/index.css +31 -0
  196. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/layout/container.css +7 -0
  197. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/layout/controls.css +56 -0
  198. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/layout/preview.css +78 -0
  199. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/alignment/axis.js +314 -0
  200. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/alignment/basic.js +107 -0
  201. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/alignment/distribute.js +54 -0
  202. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/canvas.js +172 -0
  203. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/dragging.js +258 -0
  204. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/resize.js +48 -0
  205. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/selection.js +71 -0
  206. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/core/api.js +288 -0
  207. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/core/state.js +143 -0
  208. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/core/utils.js +245 -0
  209. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/dev/element-inspector.js +992 -0
  210. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/bbox.js +339 -0
  211. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/element-drag.js +286 -0
  212. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/overlay.js +371 -0
  213. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/preview.js +293 -0
  214. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/main.js +426 -0
  215. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/shortcuts/context-menu.js +152 -0
  216. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/shortcuts/keyboard.js +265 -0
  217. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/controls.js +184 -0
  218. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/download.js +57 -0
  219. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/help.js +100 -0
  220. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/theme.js +34 -0
  221. scitex/fts/_fig/_editor/_gui/_flask_editor/templates/__init__.py +124 -0
  222. scitex/fts/_fig/_editor/_gui/_flask_editor/templates/_html.py +851 -0
  223. scitex/fts/_fig/_editor/_gui/_flask_editor/templates/_scripts.py +4932 -0
  224. scitex/fts/_fig/_editor/_gui/_flask_editor/templates/_styles.py +1657 -0
  225. scitex/fts/_fig/_editor/_gui/_flask_editor.py +36 -0
  226. scitex/fts/_fig/_models/_Annotations.py +115 -0
  227. scitex/fts/_fig/_models/_Axes.py +152 -0
  228. scitex/fts/_fig/_models/_Figure.py +138 -0
  229. scitex/fts/_fig/_models/_Guides.py +104 -0
  230. scitex/fts/_fig/_models/_Plot.py +123 -0
  231. scitex/fts/_fig/_models/_Styles.py +245 -0
  232. scitex/fts/_fig/_models/__init__.py +80 -0
  233. scitex/fts/_fig/_models/_plot_types/__init__.py +156 -0
  234. scitex/fts/_fig/_models/_plot_types/_bar.py +43 -0
  235. scitex/fts/_fig/_models/_plot_types/_box.py +38 -0
  236. scitex/fts/_fig/_models/_plot_types/_distribution.py +36 -0
  237. scitex/fts/_fig/_models/_plot_types/_errorbar.py +60 -0
  238. scitex/fts/_fig/_models/_plot_types/_histogram.py +30 -0
  239. scitex/fts/_fig/_models/_plot_types/_image.py +61 -0
  240. scitex/fts/_fig/_models/_plot_types/_line.py +57 -0
  241. scitex/fts/_fig/_models/_plot_types/_scatter.py +30 -0
  242. scitex/fts/_fig/_models/_plot_types/_seaborn.py +121 -0
  243. scitex/fts/_fig/_models/_plot_types/_violin.py +36 -0
  244. scitex/fts/_fig/_utils/__init__.py +129 -0
  245. scitex/fts/_fig/_utils/_auto_layout.py +127 -0
  246. scitex/fts/_fig/_utils/_calc_bounds.py +111 -0
  247. scitex/fts/_fig/_utils/_const_sizes.py +48 -0
  248. scitex/fts/_fig/_utils/_convert_coords.py +77 -0
  249. scitex/fts/_fig/_utils/_get_template.py +178 -0
  250. scitex/fts/_fig/_utils/_normalize.py +73 -0
  251. scitex/fts/_fig/_utils/_plot_layout.py +397 -0
  252. scitex/fts/_fig/_utils/_validate.py +197 -0
  253. scitex/fts/_kinds/__init__.py +45 -0
  254. scitex/fts/_kinds/_figure/__init__.py +19 -0
  255. scitex/fts/_kinds/_figure/_composite.py +345 -0
  256. scitex/fts/_kinds/_plot/__init__.py +25 -0
  257. scitex/fts/_kinds/_plot/_backend/__init__.py +53 -0
  258. scitex/fts/_kinds/_plot/_backend/_export.py +165 -0
  259. scitex/fts/_kinds/_plot/_backend/_parser.py +188 -0
  260. scitex/fts/_kinds/_plot/_backend/_render.py +538 -0
  261. scitex/fts/_kinds/_plot/_dataclasses/_ChannelEncoding.py +46 -0
  262. scitex/fts/_kinds/_plot/_dataclasses/_Encoding.py +82 -0
  263. scitex/fts/_kinds/_plot/_dataclasses/_Theme.py +441 -0
  264. scitex/fts/_kinds/_plot/_dataclasses/_TraceEncoding.py +52 -0
  265. scitex/fts/_kinds/_plot/_dataclasses/__init__.py +47 -0
  266. scitex/fts/_kinds/_plot/_models/_Annotations.py +115 -0
  267. scitex/fts/_kinds/_plot/_models/_Axes.py +152 -0
  268. scitex/fts/_kinds/_plot/_models/_Figure.py +138 -0
  269. scitex/fts/_kinds/_plot/_models/_Guides.py +104 -0
  270. scitex/fts/_kinds/_plot/_models/_Plot.py +123 -0
  271. scitex/fts/_kinds/_plot/_models/_Styles.py +245 -0
  272. scitex/fts/_kinds/_plot/_models/__init__.py +80 -0
  273. scitex/fts/_kinds/_plot/_models/_plot_types/__init__.py +156 -0
  274. scitex/fts/_kinds/_plot/_models/_plot_types/_bar.py +43 -0
  275. scitex/fts/_kinds/_plot/_models/_plot_types/_box.py +38 -0
  276. scitex/fts/_kinds/_plot/_models/_plot_types/_distribution.py +36 -0
  277. scitex/fts/_kinds/_plot/_models/_plot_types/_errorbar.py +60 -0
  278. scitex/fts/_kinds/_plot/_models/_plot_types/_histogram.py +30 -0
  279. scitex/fts/_kinds/_plot/_models/_plot_types/_image.py +61 -0
  280. scitex/fts/_kinds/_plot/_models/_plot_types/_line.py +57 -0
  281. scitex/fts/_kinds/_plot/_models/_plot_types/_scatter.py +30 -0
  282. scitex/fts/_kinds/_plot/_models/_plot_types/_seaborn.py +121 -0
  283. scitex/fts/_kinds/_plot/_models/_plot_types/_violin.py +36 -0
  284. scitex/fts/_kinds/_plot/_utils/__init__.py +129 -0
  285. scitex/fts/_kinds/_plot/_utils/_auto_layout.py +127 -0
  286. scitex/fts/_kinds/_plot/_utils/_calc_bounds.py +111 -0
  287. scitex/fts/_kinds/_plot/_utils/_const_sizes.py +48 -0
  288. scitex/fts/_kinds/_plot/_utils/_convert_coords.py +77 -0
  289. scitex/fts/_kinds/_plot/_utils/_get_template.py +178 -0
  290. scitex/fts/_kinds/_plot/_utils/_normalize.py +73 -0
  291. scitex/fts/_kinds/_plot/_utils/_plot_layout.py +397 -0
  292. scitex/fts/_kinds/_plot/_utils/_validate.py +197 -0
  293. scitex/fts/_kinds/_shape/__init__.py +141 -0
  294. scitex/fts/_kinds/_stats/__init__.py +56 -0
  295. scitex/fts/_kinds/_stats/_dataclasses/_Stats.py +423 -0
  296. scitex/fts/_kinds/_stats/_dataclasses/__init__.py +48 -0
  297. scitex/fts/_kinds/_table/__init__.py +72 -0
  298. scitex/fts/_kinds/_table/_latex/__init__.py +93 -0
  299. scitex/fts/_kinds/_table/_latex/_editor/__init__.py +11 -0
  300. scitex/fts/_kinds/_table/_latex/_editor/_app.py +725 -0
  301. scitex/fts/_kinds/_table/_latex/_export.py +279 -0
  302. scitex/fts/_kinds/_table/_latex/_figure_exporter.py +153 -0
  303. scitex/fts/_kinds/_table/_latex/_stats_formatter.py +274 -0
  304. scitex/fts/_kinds/_table/_latex/_table_exporter.py +362 -0
  305. scitex/fts/_kinds/_table/_latex/_utils.py +369 -0
  306. scitex/fts/_kinds/_table/_latex/_validator.py +445 -0
  307. scitex/fts/_kinds/_text/__init__.py +77 -0
  308. scitex/fts/_schemas/data_info.schema.json +75 -0
  309. scitex/fts/_schemas/encoding.schema.json +90 -0
  310. scitex/fts/_schemas/node.schema.json +145 -0
  311. scitex/fts/_schemas/render_manifest.schema.json +62 -0
  312. scitex/fts/_schemas/stats.schema.json +132 -0
  313. scitex/fts/_schemas/theme.schema.json +141 -0
  314. scitex/fts/_stats/__init__.py +48 -0
  315. scitex/fts/_stats/_dataclasses/_Stats.py +423 -0
  316. scitex/fts/_stats/_dataclasses/__init__.py +48 -0
  317. scitex/fts/_tables/__init__.py +65 -0
  318. scitex/fts/_tables/_latex/__init__.py +93 -0
  319. scitex/fts/_tables/_latex/_editor/__init__.py +11 -0
  320. scitex/fts/_tables/_latex/_editor/_app.py +725 -0
  321. scitex/fts/_tables/_latex/_export.py +279 -0
  322. scitex/fts/_tables/_latex/_figure_exporter.py +153 -0
  323. scitex/fts/_tables/_latex/_stats_formatter.py +274 -0
  324. scitex/fts/_tables/_latex/_table_exporter.py +362 -0
  325. scitex/fts/_tables/_latex/_utils.py +369 -0
  326. scitex/fts/_tables/_latex/_validator.py +445 -0
  327. scitex/gen/__init__.py +66 -25
  328. scitex/gen/misc.py +28 -0
  329. scitex/io/__init__.py +47 -32
  330. scitex/io/_load.py +87 -36
  331. scitex/io/_load_modules/__init__.py +10 -7
  332. scitex/io/_load_modules/_pandas.py +6 -1
  333. scitex/io/_save.py +299 -1556
  334. scitex/io/_save_modules/__init__.py +76 -19
  335. scitex/io/_save_modules/_figure_utils.py +90 -0
  336. scitex/io/_save_modules/_image_csv.py +497 -0
  337. scitex/io/_save_modules/_legends.py +91 -0
  338. scitex/io/_save_modules/_pltz_bundle.py +356 -0
  339. scitex/io/_save_modules/_pltz_stx.py +536 -0
  340. scitex/io/_save_modules/_stx_bundle.py +104 -0
  341. scitex/io/_save_modules/_symlink.py +96 -0
  342. scitex/io/_save_modules/_yaml.py +1 -1
  343. scitex/io/_save_modules/_zarr.py +64 -18
  344. scitex/io/bundle/README.md +212 -0
  345. scitex/io/bundle/__init__.py +110 -0
  346. scitex/io/{_bundle.py → bundle/_core.py} +168 -97
  347. scitex/io/bundle/_nested.py +713 -0
  348. scitex/io/bundle/_types.py +74 -0
  349. scitex/io/{_zip_bundle.py → bundle/_zip.py} +93 -45
  350. scitex/io/utils/h5_to_zarr.py +1 -1
  351. scitex/logging/__init__.py +108 -13
  352. scitex/logging/_errors.py +508 -0
  353. scitex/logging/_formatters.py +30 -6
  354. scitex/logging/_warnings.py +261 -0
  355. scitex/plt/__init__.py +4 -1
  356. scitex/plt/_figrecipe.py +236 -0
  357. scitex/plt/_subplots/_AxisWrapper.py +6 -0
  358. scitex/plt/_subplots/_AxisWrapperMixins/_UnitAwareMixin.py +112 -1
  359. scitex/plt/_subplots/_FigWrapper.py +15 -0
  360. scitex/plt/_subplots/_SubplotsWrapper.py +125 -489
  361. scitex/plt/_subplots/_export_as_csv.py +11 -0
  362. scitex/plt/_subplots/_export_as_csv_formatters/__init__.py +2 -0
  363. scitex/plt/_subplots/_export_as_csv_formatters/_format_pcolormesh.py +66 -0
  364. scitex/plt/_subplots/_export_as_csv_formatters/_format_stackplot.py +62 -0
  365. scitex/plt/_subplots/_export_as_csv_formatters/test_formatters.py +208 -0
  366. scitex/plt/_subplots/_fonts.py +71 -0
  367. scitex/plt/_subplots/_mm_layout.py +282 -0
  368. scitex/plt/gallery/__init__.py +99 -2
  369. scitex/plt/styles/_plot_postprocess.py +3 -1
  370. scitex/plt/utils/_configure_mpl.py +16 -19
  371. scitex/repro/_RandomStateManager.py +13 -8
  372. scitex/resource/__init__.py +19 -1
  373. scitex/resource/_utils/_get_env_info.py +13 -25
  374. scitex/schema/__init__.py +149 -160
  375. scitex/schema/_encoding.py +273 -0
  376. scitex/schema/_figure_elements.py +406 -0
  377. scitex/schema/_theme.py +360 -0
  378. scitex/schema/_validation.py +0 -98
  379. scitex/scholar/__init__.py +56 -14
  380. scitex/scholar/auth/ScholarAuthManager.py +1 -1
  381. scitex/scholar/auth/__init__.py +11 -2
  382. scitex/scholar/auth/providers/BaseAuthenticator.py +1 -1
  383. scitex/scholar/auth/providers/EZProxyAuthenticator.py +1 -1
  384. scitex/scholar/auth/providers/OpenAthensAuthenticator.py +1 -1
  385. scitex/scholar/auth/providers/ShibbolethAuthenticator.py +1 -1
  386. scitex/scholar/config/ScholarConfig.py +1 -1
  387. scitex/scholar/core/Scholar.py +1 -1
  388. scitex/session/_decorator.py +18 -16
  389. scitex/session/_lifecycle.py +9 -11
  390. scitex/session/template.py +9 -8
  391. scitex/sh/test_sh.py +72 -0
  392. scitex/sh/test_sh_simple.py +61 -0
  393. scitex/stats/__init__.py +221 -97
  394. scitex/stats/_schema.py +21 -22
  395. scitex/stats/descriptive/_circular.py +212 -351
  396. scitex/stats/descriptive/_describe.py +81 -132
  397. scitex/stats/descriptive/_nan.py +205 -433
  398. scitex/stats/descriptive/_real.py +127 -141
  399. scitex/str/_format_plot_text.py +5 -5
  400. scitex/str/_latex.py +26 -84
  401. scitex/str/_latex_fallback.py +53 -47
  402. scitex/web/_search_pubmed.py +5 -4
  403. scitex/writer/tests/test_diff_between.py +451 -0
  404. scitex/writer/tests/test_document_section.py +311 -0
  405. scitex/writer/tests/test_document_workflow.py +393 -0
  406. scitex/writer/tests/test_writer.py +361 -0
  407. scitex/writer/tests/test_writer_integration.py +303 -0
  408. {scitex-2.8.1.dist-info → scitex-2.10.0.dist-info}/METADATA +364 -181
  409. {scitex-2.8.1.dist-info → scitex-2.10.0.dist-info}/RECORD +412 -97
  410. scitex/scholar/docs/to_claude/guidelines/examples/mgmt/ARCHITECTURE_EXAMPLE.md +0 -905
  411. scitex/scholar/docs/to_claude/guidelines/examples/mgmt/BULLETIN_BOARD_EXAMPLE.md +0 -99
  412. scitex/scholar/docs/to_claude/guidelines/examples/mgmt/PROJECT_DESCRIPTION_EXAMPLE.md +0 -96
  413. {scitex-2.8.1.dist-info → scitex-2.10.0.dist-info}/WHEEL +0 -0
  414. {scitex-2.8.1.dist-info → scitex-2.10.0.dist-info}/entry_points.txt +0 -0
  415. {scitex-2.8.1.dist-info → scitex-2.10.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,19 +1,19 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: scitex
3
- Version: 2.8.1
3
+ Version: 2.10.0
4
4
  Summary: A comprehensive Python library for scientific computing and data analysis
5
5
  Project-URL: Homepage, https://github.com/ywatanabe1989/scitex-code
6
6
  Project-URL: Documentation, https://scitex.readthedocs.io
7
7
  Project-URL: Repository, https://github.com/ywatanabe1989/scitex-code
8
8
  Project-URL: Bug Tracker, https://github.com/ywatanabe1989/scitex-code/issues
9
9
  Author-email: Yusuke Watanabe <ywatanabe@scitex.ai>
10
- License: MIT
10
+ License: AGPL-3.0
11
11
  License-File: LICENSE
12
12
  Keywords: data-analysis,machine-learning,neural-networks,research,scientific-computing,signal-processing
13
13
  Classifier: Development Status :: 4 - Beta
14
14
  Classifier: Intended Audience :: Developers
15
15
  Classifier: Intended Audience :: Science/Research
16
- Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: License :: OSI Approved :: GNU Affero General Public License v3
17
17
  Classifier: Operating System :: OS Independent
18
18
  Classifier: Programming Language :: Python :: 3
19
19
  Classifier: Programming Language :: Python :: 3.8
@@ -26,128 +26,122 @@ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
26
26
  Classifier: Topic :: Scientific/Engineering :: Information Analysis
27
27
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
28
28
  Requires-Python: >=3.8
29
- Requires-Dist: aiohttp
30
- Requires-Dist: ansi-escapes
31
- Requires-Dist: attrdict
32
- Requires-Dist: chardet
33
- Requires-Dist: click
34
- Requires-Dist: gitpython
35
- Requires-Dist: google-search-results
36
- Requires-Dist: googlesearch-python
37
- Requires-Dist: h5py
38
- Requires-Dist: icecream
39
- Requires-Dist: impact-factor
40
- Requires-Dist: ipython
41
- Requires-Dist: joblib
42
- Requires-Dist: joypy
43
- Requires-Dist: julius
44
- Requires-Dist: lxml
45
- Requires-Dist: lxml-html-clean
46
- Requires-Dist: matplotlib
47
- Requires-Dist: more-itertools
48
29
  Requires-Dist: natsort
49
- Requires-Dist: nest-asyncio
50
- Requires-Dist: numcodecs
51
30
  Requires-Dist: numpy
52
- Requires-Dist: openpyxl
53
31
  Requires-Dist: packaging
54
32
  Requires-Dist: pandas
55
- Requires-Dist: pebble
56
- Requires-Dist: piexif
57
- Requires-Dist: pillow
58
- Requires-Dist: plotly
59
- Requires-Dist: plyer
60
- Requires-Dist: psutil
61
- Requires-Dist: psycopg2-binary
62
- Requires-Dist: pyarrow
63
- Requires-Dist: pyautogui
64
- Requires-Dist: pymatreader
65
- Requires-Dist: pypdf
66
- Requires-Dist: pyperclip
67
- Requires-Dist: python-magic
68
33
  Requires-Dist: pyyaml
69
- Requires-Dist: qrcode[pil]
70
- Requires-Dist: readability
71
- Requires-Dist: readability-lxml
72
- Requires-Dist: readchar
73
- Requires-Dist: reportlab
74
- Requires-Dist: requests
75
- Requires-Dist: ruamel-yaml
76
- Requires-Dist: scikit-learn
77
- Requires-Dist: scipy
78
- Requires-Dist: seaborn
79
- Requires-Dist: six
80
- Requires-Dist: sounddevice
81
- Requires-Dist: sql-manager
82
- Requires-Dist: sqlalchemy
83
- Requires-Dist: statsmodels
84
- Requires-Dist: tabulate
85
- Requires-Dist: termplotlib
86
- Requires-Dist: thefuzz
87
- Requires-Dist: timeout-decorator
88
- Requires-Dist: tk
89
- Requires-Dist: tldr
90
34
  Requires-Dist: tqdm
91
- Requires-Dist: webrequests
92
- Requires-Dist: xarray
93
- Requires-Dist: xlrd
94
- Requires-Dist: xmltodict
95
- Requires-Dist: zarr
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'
96
46
  Provides-Extra: all
97
47
  Requires-Dist: accelerate; extra == 'all'
48
+ Requires-Dist: aiohttp; extra == 'all'
98
49
  Requires-Dist: anthropic; extra == 'all'
50
+ Requires-Dist: beautifulsoup4; extra == 'all'
99
51
  Requires-Dist: bibtexparser; extra == 'all'
100
52
  Requires-Dist: bitsandbytes; extra == 'all'
101
- Requires-Dist: bs4; extra == 'all'
102
53
  Requires-Dist: catboost; extra == 'all'
54
+ Requires-Dist: celery; extra == 'all'
55
+ Requires-Dist: click; extra == 'all'
103
56
  Requires-Dist: crawl4ai; extra == 'all'
57
+ Requires-Dist: csv2latex; extra == 'all'
104
58
  Requires-Dist: dearpygui; extra == 'all'
105
59
  Requires-Dist: einops; extra == 'all'
60
+ Requires-Dist: elevenlabs; extra == 'all'
106
61
  Requires-Dist: fairscale; extra == 'all'
107
62
  Requires-Dist: fastapi; extra == 'all'
108
63
  Requires-Dist: feedparser; extra == 'all'
64
+ Requires-Dist: figrecipe; extra == 'all'
109
65
  Requires-Dist: flask; extra == 'all'
110
66
  Requires-Dist: geom-median; extra == 'all'
67
+ Requires-Dist: gitpython; extra == 'all'
111
68
  Requires-Dist: google-genai; extra == 'all'
112
69
  Requires-Dist: groq; extra == 'all'
70
+ Requires-Dist: gtts; extra == 'all'
71
+ Requires-Dist: h5py; extra == 'all'
113
72
  Requires-Dist: html2text; extra == 'all'
114
73
  Requires-Dist: httpx; extra == 'all'
115
74
  Requires-Dist: imbalanced-learn; extra == 'all'
116
75
  Requires-Dist: ipdb; extra == 'all'
117
76
  Requires-Dist: ipykernel; extra == 'all'
77
+ Requires-Dist: ipython; extra == 'all'
78
+ Requires-Dist: joblib; extra == 'all'
79
+ Requires-Dist: julius; extra == 'all'
118
80
  Requires-Dist: jupyter-collaboration; extra == 'all'
119
81
  Requires-Dist: jupyterlab; extra == 'all'
120
82
  Requires-Dist: jupytext; extra == 'all'
121
- Requires-Dist: llama-stack; extra == 'all'
83
+ Requires-Dist: lxml; extra == 'all'
84
+ Requires-Dist: lxml-html-clean; extra == 'all'
85
+ Requires-Dist: markdown; extra == 'all'
86
+ Requires-Dist: matplotlib; extra == 'all'
87
+ Requires-Dist: mcp; extra == 'all'
122
88
  Requires-Dist: mne; extra == 'all'
89
+ Requires-Dist: mss; extra == 'all'
90
+ Requires-Dist: natsort; extra == 'all'
123
91
  Requires-Dist: nbsphinx; extra == 'all'
92
+ Requires-Dist: nest-asyncio; extra == 'all'
93
+ Requires-Dist: numcodecs; extra == 'all'
124
94
  Requires-Dist: obspy; extra == 'all'
125
95
  Requires-Dist: openai; extra == 'all'
126
96
  Requires-Dist: opencv-python; extra == 'all'
97
+ Requires-Dist: openpyxl; extra == 'all'
127
98
  Requires-Dist: optuna; extra == 'all'
128
99
  Requires-Dist: papermill; extra == 'all'
129
100
  Requires-Dist: pdfplumber; extra == 'all'
101
+ Requires-Dist: piexif; extra == 'all'
102
+ Requires-Dist: pillow; extra == 'all'
130
103
  Requires-Dist: playwright>=1.40.0; extra == 'all'
104
+ Requires-Dist: plotly; extra == 'all'
105
+ Requires-Dist: psutil; extra == 'all'
106
+ Requires-Dist: psycopg2-binary; extra == 'all'
131
107
  Requires-Dist: pybids; extra == 'all'
132
108
  Requires-Dist: pydantic; extra == 'all'
109
+ Requires-Dist: pydub; extra == 'all'
133
110
  Requires-Dist: pyedflib; extra == 'all'
111
+ Requires-Dist: pymatreader; extra == 'all'
134
112
  Requires-Dist: pymed; extra == 'all'
135
113
  Requires-Dist: pymupdf; extra == 'all'
114
+ Requires-Dist: pypandoc; extra == 'all'
115
+ Requires-Dist: pypdf; extra == 'all'
136
116
  Requires-Dist: pypdf2; extra == 'all'
117
+ Requires-Dist: pyperclip; extra == 'all'
137
118
  Requires-Dist: pyqt6; extra == 'all'
138
119
  Requires-Dist: pytesseract; extra == 'all'
139
120
  Requires-Dist: python-docx; extra == 'all'
140
121
  Requires-Dist: pytorch-optimizer; extra == 'all'
141
122
  Requires-Dist: pytorch-pretrained-vit; extra == 'all'
123
+ Requires-Dist: pyttsx3; extra == 'all'
124
+ Requires-Dist: qrcode[pil]; extra == 'all'
125
+ Requires-Dist: readability-lxml; extra == 'all'
126
+ Requires-Dist: readchar; extra == 'all'
127
+ Requires-Dist: requests; extra == 'all'
142
128
  Requires-Dist: ripple-detection; extra == 'all'
129
+ Requires-Dist: ruamel-yaml; extra == 'all'
143
130
  Requires-Dist: scholarly; extra == 'all'
144
131
  Requires-Dist: scikit-image; extra == 'all'
132
+ Requires-Dist: scikit-learn; extra == 'all'
133
+ Requires-Dist: scipy; extra == 'all'
134
+ Requires-Dist: seaborn; extra == 'all'
145
135
  Requires-Dist: selenium; extra == 'all'
146
136
  Requires-Dist: sktime; extra == 'all'
137
+ Requires-Dist: sounddevice; extra == 'all'
138
+ Requires-Dist: sqlalchemy; extra == 'all'
139
+ Requires-Dist: statsmodels; extra == 'all'
147
140
  Requires-Dist: streamlit; extra == 'all'
148
141
  Requires-Dist: sympy; extra == 'all'
149
142
  Requires-Dist: tenacity; extra == 'all'
150
143
  Requires-Dist: tensorpac; extra == 'all'
144
+ Requires-Dist: termplotlib; extra == 'all'
151
145
  Requires-Dist: torch; extra == 'all'
152
146
  Requires-Dist: torchaudio; extra == 'all'
153
147
  Requires-Dist: torchsummary; extra == 'all'
@@ -156,13 +150,35 @@ Requires-Dist: transformers; extra == 'all'
156
150
  Requires-Dist: umap-learn; extra == 'all'
157
151
  Requires-Dist: watchdog; extra == 'all'
158
152
  Requires-Dist: webdriver-manager; extra == 'all'
153
+ Requires-Dist: xarray; extra == 'all'
154
+ Requires-Dist: xlrd; extra == 'all'
155
+ Requires-Dist: xlsx2csv; extra == 'all'
159
156
  Requires-Dist: yq; extra == 'all'
157
+ Requires-Dist: zarr; extra == 'all'
160
158
  Provides-Extra: audio
161
159
  Requires-Dist: elevenlabs; extra == 'audio'
162
160
  Requires-Dist: gtts; extra == 'audio'
163
161
  Requires-Dist: mcp; extra == 'audio'
164
162
  Requires-Dist: pydub; extra == 'audio'
165
163
  Requires-Dist: pyttsx3; extra == 'audio'
164
+ Provides-Extra: benchmark
165
+ Requires-Dist: psutil; extra == 'benchmark'
166
+ Provides-Extra: browser
167
+ Requires-Dist: aiohttp; extra == 'browser'
168
+ Requires-Dist: playwright>=1.40.0; extra == 'browser'
169
+ Provides-Extra: capture
170
+ Requires-Dist: mcp; extra == 'capture'
171
+ Requires-Dist: mss; extra == 'capture'
172
+ Requires-Dist: pillow; extra == 'capture'
173
+ Requires-Dist: playwright>=1.40.0; extra == 'capture'
174
+ Provides-Extra: cli
175
+ Requires-Dist: click; extra == 'cli'
176
+ Requires-Dist: requests; extra == 'cli'
177
+ Provides-Extra: db
178
+ Requires-Dist: psycopg2-binary; extra == 'db'
179
+ Requires-Dist: sqlalchemy; extra == 'db'
180
+ Provides-Extra: decorators
181
+ Requires-Dist: joblib; extra == 'decorators'
166
182
  Provides-Extra: dev
167
183
  Requires-Dist: build; extra == 'dev'
168
184
  Requires-Dist: jedi; extra == 'dev'
@@ -179,6 +195,7 @@ Requires-Dist: pytest; extra == 'dev'
179
195
  Requires-Dist: pytest-asyncio; extra == 'dev'
180
196
  Requires-Dist: pytest-cov; extra == 'dev'
181
197
  Requires-Dist: pytest-env; extra == 'dev'
198
+ Requires-Dist: pytest-json-report; extra == 'dev'
182
199
  Requires-Dist: pytest-mock; extra == 'dev'
183
200
  Requires-Dist: pytest-testmon; extra == 'dev'
184
201
  Requires-Dist: pytest-timeout; extra == 'dev'
@@ -208,30 +225,79 @@ Requires-Dist: torchaudio; extra == 'dl'
208
225
  Requires-Dist: torchsummary; extra == 'dl'
209
226
  Requires-Dist: torchvision; extra == 'dl'
210
227
  Requires-Dist: transformers; extra == 'dl'
228
+ Provides-Extra: dsp
229
+ Requires-Dist: matplotlib; extra == 'dsp'
230
+ Requires-Dist: scipy; extra == 'dsp'
231
+ Requires-Dist: sounddevice; extra == 'dsp'
232
+ Provides-Extra: figures
233
+ Requires-Dist: figrecipe; extra == 'figures'
234
+ Provides-Extra: fts
235
+ Requires-Dist: flask; extra == 'fts'
236
+ Requires-Dist: matplotlib; extra == 'fts'
237
+ Requires-Dist: pillow; extra == 'fts'
238
+ Provides-Extra: gen
239
+ Requires-Dist: h5py; extra == 'gen'
240
+ Requires-Dist: ipython; extra == 'gen'
241
+ Requires-Dist: matplotlib; extra == 'gen'
242
+ Requires-Dist: pyperclip; extra == 'gen'
243
+ Requires-Dist: readchar; extra == 'gen'
244
+ Requires-Dist: scipy; extra == 'gen'
245
+ Requires-Dist: xarray; extra == 'gen'
246
+ Provides-Extra: git
247
+ Requires-Dist: gitpython; extra == 'git'
248
+ Requires-Dist: matplotlib; extra == 'git'
211
249
  Provides-Extra: gui
212
250
  Requires-Dist: dearpygui; extra == 'gui'
213
251
  Requires-Dist: flask; extra == 'gui'
214
252
  Requires-Dist: pyqt6; extra == 'gui'
253
+ Provides-Extra: io
254
+ Requires-Dist: gitpython; extra == 'io'
255
+ Requires-Dist: h5py; extra == 'io'
256
+ Requires-Dist: html2text; extra == 'io'
257
+ Requires-Dist: joblib; extra == 'io'
258
+ Requires-Dist: lxml; extra == 'io'
259
+ Requires-Dist: lxml-html-clean; extra == 'io'
260
+ Requires-Dist: markdown; extra == 'io'
261
+ Requires-Dist: matplotlib; extra == 'io'
262
+ Requires-Dist: natsort; extra == 'io'
263
+ Requires-Dist: numcodecs; extra == 'io'
264
+ Requires-Dist: openpyxl; extra == 'io'
265
+ Requires-Dist: pdfplumber; extra == 'io'
266
+ Requires-Dist: piexif; extra == 'io'
267
+ Requires-Dist: pillow; extra == 'io'
268
+ Requires-Dist: plotly; extra == 'io'
269
+ Requires-Dist: pymatreader; extra == 'io'
270
+ Requires-Dist: pymupdf; extra == 'io'
271
+ Requires-Dist: pypdf; extra == 'io'
272
+ Requires-Dist: pypdf2; extra == 'io'
273
+ Requires-Dist: python-docx; extra == 'io'
274
+ Requires-Dist: qrcode[pil]; extra == 'io'
275
+ Requires-Dist: ruamel-yaml; extra == 'io'
276
+ Requires-Dist: scipy; extra == 'io'
277
+ Requires-Dist: xarray; extra == 'io'
278
+ Requires-Dist: xlrd; extra == 'io'
279
+ Requires-Dist: zarr; extra == 'io'
215
280
  Provides-Extra: jupyter
216
281
  Requires-Dist: ipdb; extra == 'jupyter'
217
282
  Requires-Dist: ipykernel; extra == 'jupyter'
283
+ Requires-Dist: ipython; extra == 'jupyter'
218
284
  Requires-Dist: jupyter-collaboration; extra == 'jupyter'
219
285
  Requires-Dist: jupyterlab; extra == 'jupyter'
220
286
  Requires-Dist: jupytext; extra == 'jupyter'
221
287
  Requires-Dist: nbsphinx; extra == 'jupyter'
222
288
  Requires-Dist: papermill; extra == 'jupyter'
289
+ Provides-Extra: linalg
290
+ Requires-Dist: geom-median; extra == 'linalg'
291
+ Requires-Dist: matplotlib; extra == 'linalg'
292
+ Requires-Dist: scipy; extra == 'linalg'
293
+ Requires-Dist: sympy; extra == 'linalg'
223
294
  Provides-Extra: ml
224
- Requires-Dist: anthropic; extra == 'ml'
225
295
  Requires-Dist: catboost; extra == 'ml'
226
- Requires-Dist: elevenlabs; extra == 'ml'
227
- Requires-Dist: google-genai; extra == 'ml'
228
- Requires-Dist: groq; extra == 'ml'
229
296
  Requires-Dist: imbalanced-learn; extra == 'ml'
230
- Requires-Dist: llama-stack; extra == 'ml'
231
- Requires-Dist: openai; extra == 'ml'
232
297
  Requires-Dist: opencv-python; extra == 'ml'
233
298
  Requires-Dist: optuna; extra == 'ml'
234
299
  Requires-Dist: scikit-image; extra == 'ml'
300
+ Requires-Dist: scikit-learn; extra == 'ml'
235
301
  Requires-Dist: sktime; extra == 'ml'
236
302
  Requires-Dist: sympy; extra == 'ml'
237
303
  Requires-Dist: umap-learn; extra == 'ml'
@@ -246,15 +312,45 @@ Requires-Dist: pybids; extra == 'neuro'
246
312
  Requires-Dist: pyedflib; extra == 'neuro'
247
313
  Requires-Dist: ripple-detection; extra == 'neuro'
248
314
  Requires-Dist: tensorpac; extra == 'neuro'
315
+ Provides-Extra: nn
316
+ Requires-Dist: ipdb; extra == 'nn'
317
+ Requires-Dist: julius; extra == 'nn'
318
+ Requires-Dist: matplotlib; extra == 'nn'
319
+ Requires-Dist: seaborn; extra == 'nn'
320
+ Requires-Dist: torch; extra == 'nn'
321
+ Requires-Dist: torchaudio; extra == 'nn'
322
+ Requires-Dist: torchsummary; extra == 'nn'
323
+ Provides-Extra: path
324
+ Requires-Dist: gitpython; extra == 'path'
325
+ Requires-Dist: matplotlib; extra == 'path'
326
+ Provides-Extra: plt
327
+ Requires-Dist: matplotlib; extra == 'plt'
328
+ Requires-Dist: piexif; extra == 'plt'
329
+ Requires-Dist: pillow; extra == 'plt'
330
+ Requires-Dist: scipy; extra == 'plt'
331
+ Requires-Dist: seaborn; extra == 'plt'
332
+ Requires-Dist: termplotlib; extra == 'plt'
333
+ Requires-Dist: xarray; extra == 'plt'
334
+ Provides-Extra: repro
335
+ Requires-Dist: matplotlib; extra == 'repro'
336
+ Requires-Dist: torch; extra == 'repro'
337
+ Provides-Extra: resource
338
+ Requires-Dist: matplotlib; extra == 'resource'
339
+ Requires-Dist: psutil; extra == 'resource'
249
340
  Provides-Extra: scholar
341
+ Requires-Dist: aiohttp; extra == 'scholar'
342
+ Requires-Dist: beautifulsoup4; extra == 'scholar'
250
343
  Requires-Dist: bibtexparser; extra == 'scholar'
251
- Requires-Dist: bs4; extra == 'scholar'
252
344
  Requires-Dist: crawl4ai; extra == 'scholar'
253
345
  Requires-Dist: feedparser; extra == 'scholar'
254
346
  Requires-Dist: html2text; extra == 'scholar'
255
347
  Requires-Dist: httpx; extra == 'scholar'
348
+ Requires-Dist: matplotlib; extra == 'scholar'
256
349
  Requires-Dist: natsort; extra == 'scholar'
350
+ Requires-Dist: nest-asyncio; extra == 'scholar'
351
+ Requires-Dist: openpyxl; extra == 'scholar'
257
352
  Requires-Dist: pdfplumber; extra == 'scholar'
353
+ Requires-Dist: pillow; extra == 'scholar'
258
354
  Requires-Dist: playwright>=1.40.0; extra == 'scholar'
259
355
  Requires-Dist: pydantic; extra == 'scholar'
260
356
  Requires-Dist: pymed; extra == 'scholar'
@@ -262,24 +358,64 @@ Requires-Dist: pymupdf; extra == 'scholar'
262
358
  Requires-Dist: pypdf2; extra == 'scholar'
263
359
  Requires-Dist: pytesseract; extra == 'scholar'
264
360
  Requires-Dist: python-docx; extra == 'scholar'
361
+ Requires-Dist: requests; extra == 'scholar'
265
362
  Requires-Dist: scholarly; extra == 'scholar'
363
+ Requires-Dist: scikit-learn; extra == 'scholar'
364
+ Requires-Dist: seaborn; extra == 'scholar'
266
365
  Requires-Dist: selenium; extra == 'scholar'
366
+ Requires-Dist: sqlalchemy; extra == 'scholar'
267
367
  Requires-Dist: tenacity; extra == 'scholar'
268
368
  Requires-Dist: watchdog; extra == 'scholar'
269
369
  Requires-Dist: webdriver-manager; extra == 'scholar'
370
+ Provides-Extra: science
371
+ Requires-Dist: h5py; extra == 'science'
372
+ Requires-Dist: matplotlib; extra == 'science'
373
+ Requires-Dist: pillow; extra == 'science'
374
+ Requires-Dist: plotly; extra == 'science'
375
+ Requires-Dist: scikit-learn; extra == 'science'
376
+ Requires-Dist: scipy; extra == 'science'
377
+ Requires-Dist: seaborn; extra == 'science'
378
+ Requires-Dist: statsmodels; extra == 'science'
379
+ Requires-Dist: xarray; extra == 'science'
380
+ Provides-Extra: stats
381
+ Requires-Dist: matplotlib; extra == 'stats'
382
+ Requires-Dist: scipy; extra == 'stats'
383
+ Requires-Dist: statsmodels; extra == 'stats'
384
+ Provides-Extra: str
385
+ Requires-Dist: matplotlib; extra == 'str'
386
+ Requires-Dist: natsort; extra == 'str'
387
+ Requires-Dist: xarray; extra == 'str'
388
+ Provides-Extra: torch
389
+ Requires-Dist: torch; extra == 'torch'
390
+ Provides-Extra: types
391
+ Requires-Dist: torch; extra == 'types'
392
+ Requires-Dist: xarray; extra == 'types'
393
+ Provides-Extra: utils
394
+ Requires-Dist: h5py; extra == 'utils'
395
+ Requires-Dist: matplotlib; extra == 'utils'
396
+ Requires-Dist: natsort; extra == 'utils'
397
+ Requires-Dist: xarray; extra == 'utils'
270
398
  Provides-Extra: web
271
- Requires-Dist: celery; extra == 'web'
272
- Requires-Dist: fastapi; extra == 'web'
273
- Requires-Dist: flask; extra == 'web'
274
- Requires-Dist: streamlit; extra == 'web'
399
+ Requires-Dist: aiohttp; extra == 'web'
400
+ Requires-Dist: beautifulsoup4; extra == 'web'
401
+ Requires-Dist: matplotlib; extra == 'web'
402
+ Requires-Dist: pillow; extra == 'web'
403
+ Requires-Dist: readability-lxml; extra == 'web'
404
+ Requires-Dist: requests; extra == 'web'
405
+ Provides-Extra: webdev
406
+ Requires-Dist: celery; extra == 'webdev'
407
+ Requires-Dist: fastapi; extra == 'webdev'
408
+ Requires-Dist: flask; extra == 'webdev'
409
+ Requires-Dist: streamlit; extra == 'webdev'
275
410
  Provides-Extra: writer
276
411
  Requires-Dist: csv2latex; extra == 'writer'
412
+ Requires-Dist: matplotlib; extra == 'writer'
277
413
  Requires-Dist: xlsx2csv; extra == 'writer'
278
414
  Requires-Dist: yq; extra == 'writer'
279
415
  Description-Content-Type: text/markdown
280
416
 
281
417
  <!-- ---
282
- !-- Timestamp: 2025-12-09 04:00:22
418
+ !-- Timestamp: 2026-01-05 16:58:59
283
419
  !-- Author: ywatanabe
284
420
  !-- File: /home/ywatanabe/proj/scitex-code/README.md
285
421
  !-- --- -->
@@ -294,22 +430,161 @@ Part of the fully open-source SciTeX project: https://scitex.ai
294
430
  [![PyPI version](https://badge.fury.io/py/scitex.svg)](https://badge.fury.io/py/scitex)
295
431
  [![Python Versions](https://img.shields.io/pypi/pyversions/scitex.svg)](https://pypi.org/project/scitex/)
296
432
  [![License](https://img.shields.io/github/license/ywatanabe1989/SciTeX-Code)](https://github.com/ywatanabe1989/SciTeX-Code/blob/main/LICENSE)
297
- [![Tests](https://github.com/ywatanabe1989/SciTeX-Code/actions/workflows/ci.yml/badge.svg)](https://github.com/ywatanabe1989/SciTeX-Code/actions)
298
- [![Coverage](https://codecov.io/gh/ywatanabe1989/SciTeX-Code/branch/main/graph/badge.svg)](https://codecov.io/gh/ywatanabe1989/SciTeX-Code)
299
- [![Stats Coverage](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/ywatanabe1989/GIST_ID/raw/scitex-stats-coverage.json)](https://github.com/ywatanabe1989/SciTeX-Code/actions/workflows/stats-coverage.yml)
300
- [![Logging Coverage](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/ywatanabe1989/GIST_ID/raw/scitex-logging-coverage.json)](https://github.com/ywatanabe1989/SciTeX-Code/actions/workflows/logging-coverage.yml)
301
433
  [![Documentation](https://readthedocs.org/projects/scitex/badge/?version=latest)](https://scitex.readthedocs.io/en/latest/?badge=latest)
302
434
  [![Code Style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
303
435
  [![Pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)
304
436
 
437
+ <details>
438
+ <summary><strong>Module Test Status (v2.10.0) - 41 modules</strong></summary>
439
+
440
+ **Core Modules**
441
+
442
+ [![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)
443
+ [![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)
444
+ [![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)
445
+ [![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)
446
+ [![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)
447
+ [![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)
448
+ [![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)
449
+ [![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)
450
+ [![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)
451
+ [![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)
452
+ [![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)
453
+ [![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)
454
+ [![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)
455
+ [![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)
456
+
457
+ **Extended Modules**
458
+
459
+ [![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)
460
+ [![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)
461
+ [![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)
462
+ [![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)
463
+ [![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)
464
+ [![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)
465
+ [![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)
466
+ [![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)
467
+ [![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)
468
+ [![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)
469
+ [![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)
470
+ [![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)
471
+ [![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)
472
+ [![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)
473
+ [![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)
474
+ [![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)
475
+ [![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)
476
+ [![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)
477
+ [![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)
478
+ [![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)
479
+
480
+ **Pending Modules**
481
+
482
+ [![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)
483
+ [![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)
484
+ [![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)
485
+ [![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)
486
+ [![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)
487
+ [![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)
488
+ [![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)
489
+
490
+ </details>
491
+
305
492
  ## 📦 Installation
306
493
 
307
494
  ``` bash
308
- pip install scitex # ~600 MB, Core + utilities
309
- pip install scitex[dl,ml,jupyter,neuro,web,gui,scholar,writer,dev] # ~2-5 GB, Complete toolkit
495
+ pip install scitex # Full installation with all modules
496
+ ```
497
+
498
+ <details>
499
+ <summary><strong>Module Overview</strong></summary>
500
+
501
+ SciTeX is organized into focused modules for different aspects of scientific computing:
502
+
503
+ **Modular Installation** (See [./src/scitex](./src/scitex) for all available modules):
504
+ ``` bash
505
+ # Examples
506
+ pip install scitex[ai]
507
+ pip install scitex[ai,audio,writer]
310
508
  ```
311
509
 
312
- ### Alial
510
+ ## 📦 Module Overview
511
+
512
+ ### 🔧 Core Utilities
513
+ | Module | Description |
514
+ |-------------------------------------------------|---------------------------------------------------------------------|
515
+ | [`scitex.gen`](./src/scitex/gen#readme) | Project setup, session management, and experiment tracking |
516
+ | [`scitex.io`](./src/scitex/io#readme) | Universal I/O for 30+ formats (CSV, JSON, HDF5, Zarr, pickle, etc.) |
517
+ | [`scitex.path`](./src/scitex/path#readme) | Path manipulation and project structure utilities |
518
+ | [`scitex.logging`](./src/scitex/logging#readme) | Structured logging with color support and context |
519
+
520
+ ### 📊 Data Science & Statistics
521
+ | Module | Description |
522
+ |---------------------------------------------|--------------------------------------------------------------------------|
523
+ | [`scitex.stats`](./src/scitex/stats#readme) | 16 statistical tests, effect sizes, power analysis, multiple corrections |
524
+ | [`scitex.plt`](./src/scitex/plt#readme) | Enhanced matplotlib with auto-export and scientific captions |
525
+ | [`scitex.pd`](./src/scitex/pd#readme) | Pandas extensions for research workflows |
526
+
527
+ ### 🧠 AI & Machine Learning
528
+ | Module | Description |
529
+ |---------------------------------------------|---------------------------------------------------------|
530
+ | [`scitex.ai`](./src/scitex/ai#readme) | GenAI (7 providers), classification, training utilities |
531
+ | [`scitex.torch`](./src/scitex/torch#readme) | PyTorch training loops, metrics, and utilities |
532
+ | [`scitex.nn`](./src/scitex/nn#readme) | Custom neural network layers |
533
+
534
+ ### 🌊 Signal Processing
535
+ | Module | Description |
536
+ |-----------------------------------------|---------------------------------------------------------------|
537
+ | [`scitex.dsp`](./src/scitex/dsp#readme) | Filtering, spectral analysis, wavelets, PAC, ripple detection |
538
+
539
+ ### 📚 Literature Management
540
+ | Module | Description |
541
+ |-------------------------------------------------|-----------------------------------------------------------------|
542
+ | [`scitex.scholar`](./src/scitex/scholar#readme) | Paper search, PDF download, BibTeX enrichment with IF/citations |
543
+
544
+ ### 🌐 Web & Browser
545
+ | Module | Description |
546
+ |-------------------------------------------------|------------------------------------------------------------|
547
+ | [`scitex.browser`](./src/scitex/browser#readme) | Playwright automation with debugging, PDF handling, popups |
548
+
549
+ ### 🗄️ Data Management
550
+ | Module | Description |
551
+ |---------------------------------------|-------------------------------------|
552
+ | [`scitex.db`](./src/scitex/db#readme) | SQLite3 and PostgreSQL abstractions |
553
+
554
+ ### 🛠️ Utilities
555
+ | Module | Description |
556
+ |-------------------------------------------------------|-----------------------------------------------------|
557
+ | [`scitex.decorators`](./src/scitex/decorators#readme) | Function decorators for caching, timing, validation |
558
+ | [`scitex.rng`](./src/scitex/rng#readme) | Reproducible random number generation |
559
+ | [`scitex.resource`](./src/scitex/resource#readme) | System resource monitoring (CPU, memory, GPU) |
560
+ | [`scitex.dict`](./src/scitex/dict#readme) | Dictionary manipulation and nested access |
561
+ | [`scitex.str`](./src/scitex/str#readme) | String utilities for scientific text processing |
562
+
563
+ ## 📖 Documentation
564
+
565
+ ### Online Documentation
566
+ - **[Read the Docs](https://scitex.readthedocs.io/)**: Complete API reference and guides
567
+ - **[Interactive Examples](https://scitex.readthedocs.io/en/latest/examples/index.html)**: Browse all tutorial notebooks
568
+ - **[Quick Start Guide](https://scitex.readthedocs.io/en/latest/getting_started.html)**: Get up and running quickly
569
+
570
+ ### Local Resources
571
+ - **[Master Tutorial Index](./examples/00_SCITEX_MASTER_INDEX.ipynb)**: Comprehensive guide to all features
572
+ - **[Examples Directory](./examples/)**: 25+ Jupyter notebooks covering all modules
573
+ - **[Module List](./docs/scitex_modules.csv)**: Complete list of all functions
574
+ - **(Experimental) [MCP Servers Documentation](./mcp_servers/README.md)**
575
+
576
+ ### Key Tutorials
577
+ 1. **[I/O Operations](./examples/01_scitex_io.ipynb)**: Essential file handling (start here!)
578
+ 2. **[Plotting](./examples/14_scitex_plt.ipynb)**: Publication-ready visualizations
579
+ 3. **[Statistics](./examples/11_scitex_stats.ipynb)**: Research-grade statistical analysis
580
+ 4. **[Scholar](./examples/16_scitex_scholar.ipynb)**: Literature management with impact factors
581
+ 5. **[AI/ML](./examples/16_scitex_ai.ipynb)**: Complete machine learning toolkit
582
+
583
+
584
+ </details>
585
+
586
+ <details>
587
+ <summary><strong>Arial Font Setup</strong></summary>
313
588
 
314
589
  ``` bash
315
590
  # Ubuntu
@@ -353,19 +628,7 @@ fig.savefig("arial_test.png", dpi=300)
353
628
  plt.close(fig)
354
629
  ```
355
630
 
356
- **Optional Groups**:
357
-
358
- | Group | Packages | Size Impact |
359
- |-------------|---------------------------------------------------------|-------------|
360
- | **dl** | PyTorch, transformers | +2-4 GB |
361
- | **ml** | scikit-image, catboost, optuna, OpenAI, Anthropic, Groq | ~200 MB |
362
- | **jupyter** | JupyterLab, papermill | ~100 MB |
363
- | **neuro** | MNE, obspy (EEG/MEG analysis) | ~200 MB |
364
- | **web** | FastAPI, Flask, Streamlit | ~50 MB |
365
- | **gui** | Flask, DearPyGui, PyQt6 (multi-backend figure editors) | ~100 MB |
366
- | **scholar** | Selenium, PDF tools, paper management | ~150 MB |
367
- | **writer** | LaTeX compilation tools | ~10 MB |
368
- | **dev** | Testing, linting (dev only) | ~100 MB |
631
+ </details>
369
632
 
370
633
  ## 🚀 Quick Start
371
634
 
@@ -436,9 +699,10 @@ if __name__ == "__main__":
436
699
  main()
437
700
  ```
438
701
 
439
- #### Without SciTeX ([188 Lines of Code](./examples/demo_session_plt_io_pure_python.py))
702
+
440
703
  <details>
441
- <summary>Click to see the pure Python equivalent requiring 3.3× more code</summary>
704
+ <summary><strong>Equivalent without SciTeX ([188 Lines of Code](./examples/demo_session_plt_io_pure_python.py)), requiring 3.3× more code</strong></summary>
705
+
442
706
  ```python
443
707
  #!/usr/bin/env python3
444
708
  # -*- coding: utf-8 -*-
@@ -668,87 +932,6 @@ demo_session_plt_io_out/
668
932
  - 📝 **Zero manual work** - Metadata embedded automatically
669
933
  - 🎯 **3.3× less code** - Focus on research, not infrastructure
670
934
 
671
- ### Try It Yourself
672
- ```bash
673
- pip install scitex
674
- python ./examples/demo_session_plt_io.py
675
- ```
676
-
677
- ## 📦 Module Overview
678
-
679
- SciTeX is organized into focused modules for different aspects of scientific computing:
680
-
681
- ### 🔧 Core Utilities
682
- | Module | Description |
683
- |-------------------------------------------------|---------------------------------------------------------------------|
684
- | [`scitex.gen`](./src/scitex/gen#readme) | Project setup, session management, and experiment tracking |
685
- | [`scitex.io`](./src/scitex/io#readme) | Universal I/O for 30+ formats (CSV, JSON, HDF5, Zarr, pickle, etc.) |
686
- | [`scitex.path`](./src/scitex/path#readme) | Path manipulation and project structure utilities |
687
- | [`scitex.logging`](./src/scitex/logging#readme) | Structured logging with color support and context |
688
-
689
- ### 📊 Data Science & Statistics
690
- | Module | Description |
691
- |---------------------------------------------|--------------------------------------------------------------------------|
692
- | [`scitex.stats`](./src/scitex/stats#readme) | 16 statistical tests, effect sizes, power analysis, multiple corrections |
693
- | [`scitex.plt`](./src/scitex/plt#readme) | Enhanced matplotlib with auto-export and scientific captions |
694
- | [`scitex.pd`](./src/scitex/pd#readme) | Pandas extensions for research workflows |
695
-
696
- ### 🧠 AI & Machine Learning
697
- | Module | Description |
698
- |---------------------------------------------|---------------------------------------------------------|
699
- | [`scitex.ai`](./src/scitex/ai#readme) | GenAI (7 providers), classification, training utilities |
700
- | [`scitex.torch`](./src/scitex/torch#readme) | PyTorch training loops, metrics, and utilities |
701
- | [`scitex.nn`](./src/scitex/nn#readme) | Custom neural network layers |
702
-
703
- ### 🌊 Signal Processing
704
- | Module | Description |
705
- |-----------------------------------------|---------------------------------------------------------------|
706
- | [`scitex.dsp`](./src/scitex/dsp#readme) | Filtering, spectral analysis, wavelets, PAC, ripple detection |
707
-
708
- ### 📚 Literature Management
709
- | Module | Description |
710
- |-------------------------------------------------|-----------------------------------------------------------------|
711
- | [`scitex.scholar`](./src/scitex/scholar#readme) | Paper search, PDF download, BibTeX enrichment with IF/citations |
712
-
713
- ### 🌐 Web & Browser
714
- | Module | Description |
715
- |-------------------------------------------------|------------------------------------------------------------|
716
- | [`scitex.browser`](./src/scitex/browser#readme) | Playwright automation with debugging, PDF handling, popups |
717
-
718
- ### 🗄️ Data Management
719
- | Module | Description |
720
- |---------------------------------------|-------------------------------------|
721
- | [`scitex.db`](./src/scitex/db#readme) | SQLite3 and PostgreSQL abstractions |
722
-
723
- ### 🛠️ Utilities
724
- | Module | Description |
725
- |-------------------------------------------------------|-----------------------------------------------------|
726
- | [`scitex.decorators`](./src/scitex/decorators#readme) | Function decorators for caching, timing, validation |
727
- | [`scitex.rng`](./src/scitex/rng#readme) | Reproducible random number generation |
728
- | [`scitex.resource`](./src/scitex/resource#readme) | System resource monitoring (CPU, memory, GPU) |
729
- | [`scitex.dict`](./src/scitex/dict#readme) | Dictionary manipulation and nested access |
730
- | [`scitex.str`](./src/scitex/str#readme) | String utilities for scientific text processing |
731
-
732
- ## 📖 Documentation
733
-
734
- ### Online Documentation
735
- - **[Read the Docs](https://scitex.readthedocs.io/)**: Complete API reference and guides
736
- - **[Interactive Examples](https://scitex.readthedocs.io/en/latest/examples/index.html)**: Browse all tutorial notebooks
737
- - **[Quick Start Guide](https://scitex.readthedocs.io/en/latest/getting_started.html)**: Get up and running quickly
738
-
739
- ### Local Resources
740
- - **[Master Tutorial Index](./examples/00_SCITEX_MASTER_INDEX.ipynb)**: Comprehensive guide to all features
741
- - **[Examples Directory](./examples/)**: 25+ Jupyter notebooks covering all modules
742
- - **[Module List](./docs/scitex_modules.csv)**: Complete list of all functions
743
- - **(Experimental) [MCP Servers Documentation](./mcp_servers/README.md)**
744
-
745
- ### Key Tutorials
746
- 1. **[I/O Operations](./examples/01_scitex_io.ipynb)**: Essential file handling (start here!)
747
- 2. **[Plotting](./examples/14_scitex_plt.ipynb)**: Publication-ready visualizations
748
- 3. **[Statistics](./examples/11_scitex_stats.ipynb)**: Research-grade statistical analysis
749
- 4. **[Scholar](./examples/16_scitex_scholar.ipynb)**: Literature management with impact factors
750
- 5. **[AI/ML](./examples/16_scitex_ai.ipynb)**: Complete machine learning toolkit
751
-
752
935
  ## 🤝 Contributing
753
936
 
754
937
  We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.