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
@@ -0,0 +1,245 @@
1
+ #!/usr/bin/env python3
2
+ # File: ./src/scitex/vis/model/styles.py
3
+ """
4
+ Style dataclasses for scitex.fig objects.
5
+
6
+ Separating style properties from data makes:
7
+ - UI property panels easy to auto-generate
8
+ - Style copy/paste straightforward
9
+ - Batch style application simple
10
+ """
11
+
12
+ from dataclasses import asdict, dataclass, field
13
+ from typing import Any, Dict, Optional
14
+
15
+
16
+ @dataclass
17
+ class PlotStyle:
18
+ """Style properties for plots."""
19
+
20
+ # Color and transparency
21
+ color: Optional[str] = None
22
+ alpha: Optional[float] = None
23
+
24
+ # Line properties
25
+ linewidth: Optional[float] = None
26
+ linestyle: Optional[str] = None
27
+
28
+ # Marker properties
29
+ marker: Optional[str] = None
30
+ markersize: Optional[float] = None
31
+
32
+ # Fill properties (for fill_between, etc.)
33
+ fill_color: Optional[str] = None
34
+ fill_alpha: Optional[float] = None
35
+
36
+ # Heatmap/image properties
37
+ cmap: Optional[str] = None
38
+ vmin: Optional[float] = None
39
+ vmax: Optional[float] = None
40
+ interpolation: Optional[str] = None
41
+
42
+ # Error bar properties
43
+ capsize: Optional[float] = None
44
+ xerr: Optional[float] = None
45
+ yerr: Optional[float] = None
46
+
47
+ # Bar properties
48
+ width: Optional[float] = None
49
+
50
+ # Histogram properties
51
+ bins: Optional[int] = None
52
+ density: bool = False
53
+ cumulative: bool = False
54
+
55
+ # Layering
56
+ zorder: Optional[int] = None
57
+
58
+ def to_dict(self) -> Dict[str, Any]:
59
+ """Convert to dictionary, omitting None values."""
60
+ return {k: v for k, v in asdict(self).items() if v is not None}
61
+
62
+ @classmethod
63
+ def from_dict(cls, data: Dict[str, Any]) -> "PlotStyle":
64
+ """Create from dictionary."""
65
+ return cls(**{k: v for k, v in data.items() if k in cls.__annotations__})
66
+
67
+
68
+ @dataclass
69
+ class AxesStyle:
70
+ """Style properties for axes."""
71
+
72
+ # Background
73
+ facecolor: Optional[str] = None
74
+
75
+ # Grid
76
+ grid: bool = False
77
+ grid_alpha: Optional[float] = 0.3
78
+ grid_linestyle: Optional[str] = "--"
79
+ grid_linewidth: Optional[float] = 0.5
80
+
81
+ # Spines visibility
82
+ spines_visible: Dict[str, bool] = field(
83
+ default_factory=lambda: {
84
+ "top": True,
85
+ "right": True,
86
+ "bottom": True,
87
+ "left": True,
88
+ }
89
+ )
90
+
91
+ # Font sizes
92
+ label_fontsize: Optional[float] = None
93
+ title_fontsize: Optional[float] = None
94
+ tick_fontsize: Optional[float] = None
95
+
96
+ # Legend
97
+ legend: bool = False
98
+ legend_loc: str = "best"
99
+ legend_fontsize: Optional[float] = None
100
+ legend_frameon: bool = True
101
+
102
+ # Aspect
103
+ aspect: Optional[str] = None # "auto", "equal", or numeric
104
+
105
+ def to_dict(self) -> Dict[str, Any]:
106
+ """Convert to dictionary."""
107
+ return asdict(self)
108
+
109
+ @classmethod
110
+ def from_dict(cls, data: Dict[str, Any]) -> "AxesStyle":
111
+ """Create from dictionary."""
112
+ return cls(**{k: v for k, v in data.items() if k in cls.__annotations__})
113
+
114
+
115
+ @dataclass
116
+ class GuideStyle:
117
+ """Style properties for guides (reference lines/spans)."""
118
+
119
+ color: Optional[str] = None
120
+ alpha: Optional[float] = None
121
+ linestyle: Optional[str] = "--"
122
+ linewidth: Optional[float] = None
123
+ zorder: Optional[int] = None
124
+
125
+ def to_dict(self) -> Dict[str, Any]:
126
+ """Convert to dictionary, omitting None values."""
127
+ return {k: v for k, v in asdict(self).items() if v is not None}
128
+
129
+ @classmethod
130
+ def from_dict(cls, data: Dict[str, Any]) -> "GuideStyle":
131
+ """Create from dictionary."""
132
+ return cls(**{k: v for k, v in data.items() if k in cls.__annotations__})
133
+
134
+
135
+ @dataclass
136
+ class TextStyle:
137
+ """Style properties for text/annotations."""
138
+
139
+ fontsize: Optional[float] = None
140
+ fontweight: Optional[str] = None # "normal", "bold"
141
+ color: Optional[str] = None
142
+ ha: str = "center" # Horizontal alignment
143
+ va: str = "center" # Vertical alignment
144
+ rotation: Optional[float] = None
145
+ zorder: Optional[int] = None
146
+
147
+ # Bounding box (for text background)
148
+ bbox: Optional[Dict[str, Any]] = None
149
+
150
+ # Arrow properties (for annotate)
151
+ arrowprops: Optional[Dict[str, Any]] = None
152
+
153
+ def to_dict(self) -> Dict[str, Any]:
154
+ """Convert to dictionary, omitting None values."""
155
+ return {k: v for k, v in asdict(self).items() if v is not None}
156
+
157
+ @classmethod
158
+ def from_dict(cls, data: Dict[str, Any]) -> "TextStyle":
159
+ """Create from dictionary."""
160
+ return cls(**{k: v for k, v in data.items() if k in cls.__annotations__})
161
+
162
+
163
+ # ============================================================================
164
+ # Style Copy/Paste Helpers
165
+ # ============================================================================
166
+
167
+
168
+ def copy_plot_style(src_plot, dst_plot) -> None:
169
+ """
170
+ Copy style from one plot to another.
171
+
172
+ Parameters
173
+ ----------
174
+ src_plot : PlotModel
175
+ Source plot
176
+ dst_plot : PlotModel
177
+ Destination plot
178
+ """
179
+ dst_plot.style = PlotStyle.from_dict(src_plot.style.to_dict())
180
+
181
+
182
+ def copy_axes_style(src_axes, dst_axes) -> None:
183
+ """
184
+ Copy style from one axes to another.
185
+
186
+ Parameters
187
+ ----------
188
+ src_axes : AxesModel
189
+ Source axes
190
+ dst_axes : AxesModel
191
+ Destination axes
192
+ """
193
+ dst_axes.style = AxesStyle.from_dict(src_axes.style.to_dict())
194
+
195
+
196
+ def copy_guide_style(src_guide, dst_guide) -> None:
197
+ """
198
+ Copy style from one guide to another.
199
+
200
+ Parameters
201
+ ----------
202
+ src_guide : GuideModel
203
+ Source guide
204
+ dst_guide : GuideModel
205
+ Destination guide
206
+ """
207
+ dst_guide.style = GuideStyle.from_dict(src_guide.style.to_dict())
208
+
209
+
210
+ def copy_text_style(src_annotation, dst_annotation) -> None:
211
+ """
212
+ Copy style from one annotation to another.
213
+
214
+ Parameters
215
+ ----------
216
+ src_annotation : AnnotationModel
217
+ Source annotation
218
+ dst_annotation : AnnotationModel
219
+ Destination annotation
220
+ """
221
+ dst_annotation.style = TextStyle.from_dict(src_annotation.style.to_dict())
222
+
223
+
224
+ def apply_style_to_plots(style: PlotStyle, plots: list) -> None:
225
+ """
226
+ Apply the same style to multiple plots.
227
+
228
+ Parameters
229
+ ----------
230
+ style : PlotStyle
231
+ Style to apply
232
+ plots : list
233
+ List of PlotModel objects
234
+
235
+ Examples
236
+ --------
237
+ >>> blue_style = PlotStyle(color="blue", linewidth=2, alpha=0.8)
238
+ >>> apply_style_to_plots(blue_style, my_plots)
239
+ """
240
+ style_dict = style.to_dict()
241
+ for plot in plots:
242
+ plot.style = PlotStyle.from_dict(style_dict)
243
+
244
+
245
+ # EOF
@@ -0,0 +1,80 @@
1
+ #!/usr/bin/env python3
2
+ # Timestamp: 2025-12-20
3
+ # File: /home/ywatanabe/proj/scitex-code/src/scitex/fsb/_fig/_models/__init__.py
4
+
5
+ """JSON models for FTS figure specifications."""
6
+
7
+ from ._Annotations import AnnotationModel
8
+ from ._Axes import AxesModel
9
+ from ._Figure import FigureModel
10
+ from ._Guides import GuideModel
11
+ from ._Plot import PlotModel
12
+ from ._plot_types import (
13
+ PLOT_TYPE_CONFIGS,
14
+ BarHPlotConfig,
15
+ BarPlotConfig,
16
+ BoxConfig,
17
+ BoxPlotConfig,
18
+ ContourConfig,
19
+ ECDFConfig,
20
+ ErrorbarPlotConfig,
21
+ FillBetweenConfig,
22
+ HeatmapConfig,
23
+ HistPlotConfig,
24
+ ImshowConfig,
25
+ KDEConfig,
26
+ LinePlotConfig,
27
+ MeanStdConfig,
28
+ PlotLineConfig,
29
+ ScatterPlotConfig,
30
+ SeabornBarplotConfig,
31
+ SeabornBoxplotConfig,
32
+ SeabornHistplotConfig,
33
+ SeabornKDEplotConfig,
34
+ SeabornLineplotConfig,
35
+ SeabornScatterplotConfig,
36
+ SeabornStripplotConfig,
37
+ SeabornViolinplotConfig,
38
+ ShadedLineConfig,
39
+ ViolinConfig,
40
+ ViolinPlotConfig,
41
+ get_plot_config_class,
42
+ list_plot_types,
43
+ )
44
+ from ._Styles import (
45
+ AxesStyle,
46
+ GuideStyle,
47
+ PlotStyle,
48
+ TextStyle,
49
+ apply_style_to_plots,
50
+ copy_axes_style,
51
+ copy_guide_style,
52
+ copy_plot_style,
53
+ copy_text_style,
54
+ )
55
+
56
+ __all__ = [
57
+ # Core models
58
+ "FigureModel",
59
+ "AxesModel",
60
+ "PlotModel",
61
+ "GuideModel",
62
+ "AnnotationModel",
63
+ # Style models
64
+ "PlotStyle",
65
+ "AxesStyle",
66
+ "GuideStyle",
67
+ "TextStyle",
68
+ # Style helpers
69
+ "copy_plot_style",
70
+ "copy_axes_style",
71
+ "copy_guide_style",
72
+ "copy_text_style",
73
+ "apply_style_to_plots",
74
+ # Registry
75
+ "PLOT_TYPE_CONFIGS",
76
+ "get_plot_config_class",
77
+ "list_plot_types",
78
+ ]
79
+
80
+ # EOF
@@ -0,0 +1,156 @@
1
+ #!/usr/bin/env python3
2
+ # Timestamp: 2025-12-20
3
+ # File: /home/ywatanabe/proj/scitex-code/src/scitex/fsb/_fig/_models/_plot_types/__init__.py
4
+
5
+ """Plot type configurations and registry."""
6
+
7
+ from typing import List, Type
8
+
9
+ # Line plots
10
+ from ._line import LinePlotConfig, PlotLineConfig, ShadedLineConfig
11
+
12
+ # Scatter plots
13
+ from ._scatter import ScatterPlotConfig
14
+
15
+ # Bar plots
16
+ from ._bar import BarHPlotConfig, BarPlotConfig
17
+
18
+ # Histograms
19
+ from ._histogram import HistPlotConfig
20
+
21
+ # Box plots
22
+ from ._box import BoxConfig, BoxPlotConfig
23
+
24
+ # Violin plots
25
+ from ._violin import ViolinConfig, ViolinPlotConfig
26
+
27
+ # Error bars and fill
28
+ from ._errorbar import ErrorbarPlotConfig, FillBetweenConfig, MeanStdConfig
29
+
30
+ # Image plots
31
+ from ._image import ContourConfig, HeatmapConfig, ImshowConfig
32
+
33
+ # Distribution plots
34
+ from ._distribution import ECDFConfig, KDEConfig
35
+
36
+ # Seaborn plots
37
+ from ._seaborn import (
38
+ SeabornBarplotConfig,
39
+ SeabornBoxplotConfig,
40
+ SeabornHistplotConfig,
41
+ SeabornKDEplotConfig,
42
+ SeabornLineplotConfig,
43
+ SeabornScatterplotConfig,
44
+ SeabornStripplotConfig,
45
+ SeabornViolinplotConfig,
46
+ )
47
+
48
+ # =============================================================================
49
+ # PLOT TYPE REGISTRY
50
+ # =============================================================================
51
+
52
+ PLOT_TYPE_CONFIGS = {
53
+ # Matplotlib basic
54
+ "line": LinePlotConfig,
55
+ "scatter": ScatterPlotConfig,
56
+ "bar": BarPlotConfig,
57
+ "barh": BarHPlotConfig,
58
+ "hist": HistPlotConfig,
59
+ "boxplot": BoxPlotConfig,
60
+ "errorbar": ErrorbarPlotConfig,
61
+ "fill_between": FillBetweenConfig,
62
+ "imshow": ImshowConfig,
63
+ "contour": ContourConfig,
64
+ "contourf": ContourConfig,
65
+ "violinplot": ViolinPlotConfig,
66
+ # Custom scitex
67
+ "heatmap": HeatmapConfig,
68
+ "stx_line": PlotLineConfig,
69
+ "stx_shaded_line": ShadedLineConfig,
70
+ "stx_violin": ViolinConfig,
71
+ "stx_ecdf": ECDFConfig,
72
+ "stx_box": BoxConfig,
73
+ "stx_mean_std": MeanStdConfig,
74
+ "stx_kde": KDEConfig,
75
+ # Seaborn
76
+ "sns_boxplot": SeabornBoxplotConfig,
77
+ "sns_violinplot": SeabornViolinplotConfig,
78
+ "sns_scatterplot": SeabornScatterplotConfig,
79
+ "sns_lineplot": SeabornLineplotConfig,
80
+ "sns_histplot": SeabornHistplotConfig,
81
+ "sns_barplot": SeabornBarplotConfig,
82
+ "sns_stripplot": SeabornStripplotConfig,
83
+ "sns_kdeplot": SeabornKDEplotConfig,
84
+ }
85
+
86
+
87
+ def get_plot_config_class(plot_type: str) -> Type:
88
+ """Get the configuration dataclass for a plot type.
89
+
90
+ Args:
91
+ plot_type: Plot type name
92
+
93
+ Returns:
94
+ Configuration dataclass for the plot type
95
+
96
+ Raises:
97
+ ValueError: If plot type is not supported
98
+ """
99
+ if plot_type not in PLOT_TYPE_CONFIGS:
100
+ raise ValueError(
101
+ f"Unknown plot type: {plot_type}. "
102
+ f"Supported: {list(PLOT_TYPE_CONFIGS.keys())}"
103
+ )
104
+ return PLOT_TYPE_CONFIGS[plot_type]
105
+
106
+
107
+ def list_plot_types() -> List[str]:
108
+ """List all supported plot types."""
109
+ return list(PLOT_TYPE_CONFIGS.keys())
110
+
111
+
112
+ __all__ = [
113
+ # Registry
114
+ "PLOT_TYPE_CONFIGS",
115
+ "get_plot_config_class",
116
+ "list_plot_types",
117
+ # Line plots
118
+ "LinePlotConfig",
119
+ "PlotLineConfig",
120
+ "ShadedLineConfig",
121
+ # Scatter
122
+ "ScatterPlotConfig",
123
+ # Bar
124
+ "BarPlotConfig",
125
+ "BarHPlotConfig",
126
+ # Histogram
127
+ "HistPlotConfig",
128
+ # Box
129
+ "BoxPlotConfig",
130
+ "BoxConfig",
131
+ # Violin
132
+ "ViolinPlotConfig",
133
+ "ViolinConfig",
134
+ # Error/Fill
135
+ "ErrorbarPlotConfig",
136
+ "FillBetweenConfig",
137
+ "MeanStdConfig",
138
+ # Image
139
+ "ImshowConfig",
140
+ "ContourConfig",
141
+ "HeatmapConfig",
142
+ # Distribution
143
+ "ECDFConfig",
144
+ "KDEConfig",
145
+ # Seaborn
146
+ "SeabornBoxplotConfig",
147
+ "SeabornViolinplotConfig",
148
+ "SeabornScatterplotConfig",
149
+ "SeabornLineplotConfig",
150
+ "SeabornHistplotConfig",
151
+ "SeabornBarplotConfig",
152
+ "SeabornStripplotConfig",
153
+ "SeabornKDEplotConfig",
154
+ ]
155
+
156
+ # EOF
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env python3
2
+ # Timestamp: 2025-12-20
3
+ # File: /home/ywatanabe/proj/scitex-code/src/scitex/fsb/_fig/_models/_plot_types/_bar.py
4
+
5
+ """Bar plot configurations."""
6
+
7
+ from dataclasses import dataclass
8
+ from typing import List, Optional, Union
9
+
10
+
11
+ @dataclass
12
+ class BarPlotConfig:
13
+ """Bar plot configuration."""
14
+
15
+ x: Union[List[float], List[str]]
16
+ height: List[float]
17
+ width: Optional[float] = 0.8
18
+ color: Optional[str] = None
19
+ alpha: Optional[float] = None
20
+ edge_thickness_mm: Optional[float] = None
21
+ edgecolor: Optional[str] = None
22
+ label: Optional[str] = None
23
+ id: Optional[str] = None
24
+
25
+
26
+ @dataclass
27
+ class BarHPlotConfig:
28
+ """Horizontal bar plot configuration."""
29
+
30
+ y: Union[List[float], List[str]]
31
+ width: List[float]
32
+ height: Optional[float] = 0.8
33
+ color: Optional[str] = None
34
+ alpha: Optional[float] = None
35
+ edge_thickness_mm: Optional[float] = None
36
+ edgecolor: Optional[str] = None
37
+ label: Optional[str] = None
38
+ id: Optional[str] = None
39
+
40
+
41
+ __all__ = ["BarPlotConfig", "BarHPlotConfig"]
42
+
43
+ # EOF
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env python3
2
+ # Timestamp: 2025-12-20
3
+ # File: /home/ywatanabe/proj/scitex-code/src/scitex/fsb/_fig/_models/_plot_types/_box.py
4
+
5
+ """Box plot configurations."""
6
+
7
+ from dataclasses import dataclass
8
+ from typing import List, Optional, Union
9
+
10
+
11
+ @dataclass
12
+ class BoxPlotConfig:
13
+ """Box plot configuration."""
14
+
15
+ data: Union[List[List[float]], List[float]]
16
+ labels: Optional[List[str]] = None
17
+ positions: Optional[List[float]] = None
18
+ widths: Optional[float] = None
19
+ linewidth_mm: Optional[float] = None
20
+ showfliers: bool = True
21
+ showmeans: bool = False
22
+ id: Optional[str] = None
23
+
24
+
25
+ @dataclass
26
+ class BoxConfig:
27
+ """Box plot configuration (scitex.plt.ax.stx_box)."""
28
+
29
+ data: List[float]
30
+ color: Optional[str] = None
31
+ linewidth_mm: Optional[float] = None
32
+ label: Optional[str] = None
33
+ id: Optional[str] = None
34
+
35
+
36
+ __all__ = ["BoxPlotConfig", "BoxConfig"]
37
+
38
+ # EOF
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env python3
2
+ # Timestamp: 2025-12-20
3
+ # File: /home/ywatanabe/proj/scitex-code/src/scitex/fsb/_fig/_models/_plot_types/_distribution.py
4
+
5
+ """Distribution plot configurations (ECDF, KDE)."""
6
+
7
+ from dataclasses import dataclass
8
+ from typing import List, Optional
9
+
10
+
11
+ @dataclass
12
+ class ECDFConfig:
13
+ """ECDF configuration (scitex.plt.ax.stx_ecdf)."""
14
+
15
+ data: List[float]
16
+ color: Optional[str] = None
17
+ linewidth_mm: Optional[float] = None
18
+ label: Optional[str] = None
19
+ id: Optional[str] = None
20
+
21
+
22
+ @dataclass
23
+ class KDEConfig:
24
+ """KDE configuration (scitex.plt.ax.stx_kde)."""
25
+
26
+ data: List[float]
27
+ bw_method: Optional[str] = None
28
+ color: Optional[str] = None
29
+ linewidth_mm: Optional[float] = None
30
+ label: Optional[str] = None
31
+ id: Optional[str] = None
32
+
33
+
34
+ __all__ = ["ECDFConfig", "KDEConfig"]
35
+
36
+ # EOF
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/env python3
2
+ # Timestamp: 2025-12-20
3
+ # File: /home/ywatanabe/proj/scitex-code/src/scitex/fsb/_fig/_models/_plot_types/_errorbar.py
4
+
5
+ """Error bar and fill configurations."""
6
+
7
+ from dataclasses import dataclass
8
+ from typing import List, Optional, Union
9
+
10
+
11
+ @dataclass
12
+ class ErrorbarPlotConfig:
13
+ """Error bar plot configuration."""
14
+
15
+ x: List[float]
16
+ y: List[float]
17
+ xerr: Optional[Union[float, List[float]]] = None
18
+ yerr: Optional[Union[float, List[float]]] = None
19
+ fmt: str = "o-"
20
+ color: Optional[str] = None
21
+ capsize: Optional[float] = None
22
+ capthick: Optional[float] = None
23
+ thickness_mm: Optional[float] = None
24
+ cap_width_mm: Optional[float] = None
25
+ alpha: Optional[float] = None
26
+ label: Optional[str] = None
27
+ id: Optional[str] = None
28
+
29
+
30
+ @dataclass
31
+ class FillBetweenConfig:
32
+ """Fill between configuration."""
33
+
34
+ x: List[float]
35
+ y1: List[float]
36
+ y2: List[float]
37
+ color: Optional[str] = None
38
+ alpha: Optional[float] = 0.3
39
+ linewidth: Optional[float] = None
40
+ edgecolor: Optional[str] = None
41
+ label: Optional[str] = None
42
+ id: Optional[str] = None
43
+
44
+
45
+ @dataclass
46
+ class MeanStdConfig:
47
+ """Mean±Std configuration (scitex.plt.ax.stx_mean_std)."""
48
+
49
+ y_mean: List[float]
50
+ xx: Optional[List[float]] = None
51
+ sd: Union[float, List[float]] = 1.0
52
+ color: Optional[str] = None
53
+ alpha: Optional[float] = 0.3
54
+ label: Optional[str] = None
55
+ id: Optional[str] = None
56
+
57
+
58
+ __all__ = ["ErrorbarPlotConfig", "FillBetweenConfig", "MeanStdConfig"]
59
+
60
+ # EOF
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env python3
2
+ # Timestamp: 2025-12-20
3
+ # File: /home/ywatanabe/proj/scitex-code/src/scitex/fsb/_fig/_models/_plot_types/_histogram.py
4
+
5
+ """Histogram configurations."""
6
+
7
+ from dataclasses import dataclass
8
+ from typing import List, Optional, Union
9
+
10
+
11
+ @dataclass
12
+ class HistPlotConfig:
13
+ """Histogram configuration."""
14
+
15
+ x: List[float]
16
+ bins: Union[int, List[float]] = 10
17
+ density: bool = False
18
+ cumulative: bool = False
19
+ histtype: str = "bar"
20
+ color: Optional[str] = None
21
+ alpha: Optional[float] = None
22
+ edgecolor: Optional[str] = None
23
+ range: Optional[tuple] = None
24
+ label: Optional[str] = None
25
+ id: Optional[str] = None
26
+
27
+
28
+ __all__ = ["HistPlotConfig"]
29
+
30
+ # EOF