scitex 2.7.0__py3-none-any.whl → 2.8.1__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 (355) hide show
  1. scitex/__init__.py +6 -2
  2. scitex/__version__.py +1 -1
  3. scitex/audio/README.md +52 -0
  4. scitex/audio/__init__.py +384 -0
  5. scitex/audio/__main__.py +129 -0
  6. scitex/audio/_tts.py +334 -0
  7. scitex/audio/engines/__init__.py +44 -0
  8. scitex/audio/engines/base.py +275 -0
  9. scitex/audio/engines/elevenlabs_engine.py +143 -0
  10. scitex/audio/engines/gtts_engine.py +162 -0
  11. scitex/audio/engines/pyttsx3_engine.py +131 -0
  12. scitex/audio/mcp_server.py +757 -0
  13. scitex/bridge/_helpers.py +1 -1
  14. scitex/bridge/_plt_vis.py +1 -1
  15. scitex/bridge/_stats_vis.py +1 -1
  16. scitex/dev/plt/__init__.py +272 -0
  17. scitex/dev/plt/plot_mpl_axhline.py +28 -0
  18. scitex/dev/plt/plot_mpl_axhspan.py +28 -0
  19. scitex/dev/plt/plot_mpl_axvline.py +28 -0
  20. scitex/dev/plt/plot_mpl_axvspan.py +28 -0
  21. scitex/dev/plt/plot_mpl_bar.py +29 -0
  22. scitex/dev/plt/plot_mpl_barh.py +29 -0
  23. scitex/dev/plt/plot_mpl_boxplot.py +28 -0
  24. scitex/dev/plt/plot_mpl_contour.py +31 -0
  25. scitex/dev/plt/plot_mpl_contourf.py +31 -0
  26. scitex/dev/plt/plot_mpl_errorbar.py +30 -0
  27. scitex/dev/plt/plot_mpl_eventplot.py +28 -0
  28. scitex/dev/plt/plot_mpl_fill.py +30 -0
  29. scitex/dev/plt/plot_mpl_fill_between.py +31 -0
  30. scitex/dev/plt/plot_mpl_hexbin.py +28 -0
  31. scitex/dev/plt/plot_mpl_hist.py +28 -0
  32. scitex/dev/plt/plot_mpl_hist2d.py +28 -0
  33. scitex/dev/plt/plot_mpl_imshow.py +29 -0
  34. scitex/dev/plt/plot_mpl_pcolormesh.py +31 -0
  35. scitex/dev/plt/plot_mpl_pie.py +29 -0
  36. scitex/dev/plt/plot_mpl_plot.py +29 -0
  37. scitex/dev/plt/plot_mpl_quiver.py +31 -0
  38. scitex/dev/plt/plot_mpl_scatter.py +28 -0
  39. scitex/dev/plt/plot_mpl_stackplot.py +31 -0
  40. scitex/dev/plt/plot_mpl_stem.py +29 -0
  41. scitex/dev/plt/plot_mpl_step.py +29 -0
  42. scitex/dev/plt/plot_mpl_violinplot.py +28 -0
  43. scitex/dev/plt/plot_sns_barplot.py +29 -0
  44. scitex/dev/plt/plot_sns_boxplot.py +29 -0
  45. scitex/dev/plt/plot_sns_heatmap.py +28 -0
  46. scitex/dev/plt/plot_sns_histplot.py +29 -0
  47. scitex/dev/plt/plot_sns_kdeplot.py +29 -0
  48. scitex/dev/plt/plot_sns_lineplot.py +31 -0
  49. scitex/dev/plt/plot_sns_scatterplot.py +29 -0
  50. scitex/dev/plt/plot_sns_stripplot.py +29 -0
  51. scitex/dev/plt/plot_sns_swarmplot.py +29 -0
  52. scitex/dev/plt/plot_sns_violinplot.py +29 -0
  53. scitex/dev/plt/plot_stx_bar.py +29 -0
  54. scitex/dev/plt/plot_stx_barh.py +29 -0
  55. scitex/dev/plt/plot_stx_box.py +28 -0
  56. scitex/dev/plt/plot_stx_boxplot.py +28 -0
  57. scitex/dev/plt/plot_stx_conf_mat.py +28 -0
  58. scitex/dev/plt/plot_stx_contour.py +31 -0
  59. scitex/dev/plt/plot_stx_ecdf.py +28 -0
  60. scitex/dev/plt/plot_stx_errorbar.py +30 -0
  61. scitex/dev/plt/plot_stx_fill_between.py +31 -0
  62. scitex/dev/plt/plot_stx_fillv.py +28 -0
  63. scitex/dev/plt/plot_stx_heatmap.py +28 -0
  64. scitex/dev/plt/plot_stx_image.py +28 -0
  65. scitex/dev/plt/plot_stx_imshow.py +28 -0
  66. scitex/dev/plt/plot_stx_joyplot.py +28 -0
  67. scitex/dev/plt/plot_stx_kde.py +28 -0
  68. scitex/dev/plt/plot_stx_line.py +28 -0
  69. scitex/dev/plt/plot_stx_mean_ci.py +28 -0
  70. scitex/dev/plt/plot_stx_mean_std.py +28 -0
  71. scitex/dev/plt/plot_stx_median_iqr.py +28 -0
  72. scitex/dev/plt/plot_stx_raster.py +28 -0
  73. scitex/dev/plt/plot_stx_rectangle.py +28 -0
  74. scitex/dev/plt/plot_stx_scatter.py +29 -0
  75. scitex/dev/plt/plot_stx_shaded_line.py +29 -0
  76. scitex/dev/plt/plot_stx_violin.py +28 -0
  77. scitex/dev/plt/plot_stx_violinplot.py +28 -0
  78. scitex/diagram/README.md +197 -0
  79. scitex/diagram/__init__.py +48 -0
  80. scitex/diagram/_compile.py +312 -0
  81. scitex/diagram/_diagram.py +355 -0
  82. scitex/diagram/_presets.py +173 -0
  83. scitex/diagram/_schema.py +182 -0
  84. scitex/diagram/_split.py +278 -0
  85. scitex/fig/__init__.py +352 -0
  86. scitex/{vis → fig}/backend/_parser.py +1 -1
  87. scitex/{vis → fig}/canvas.py +1 -1
  88. scitex/{vis → fig}/editor/__init__.py +5 -2
  89. scitex/{vis → fig}/editor/_dearpygui_editor.py +1 -1
  90. scitex/{vis → fig}/editor/_defaults.py +70 -5
  91. scitex/{vis → fig}/editor/_mpl_editor.py +1 -1
  92. scitex/{vis → fig}/editor/_qt_editor.py +182 -2
  93. scitex/{vis → fig}/editor/_tkinter_editor.py +1 -1
  94. scitex/fig/editor/edit/__init__.py +50 -0
  95. scitex/fig/editor/edit/backend_detector.py +109 -0
  96. scitex/fig/editor/edit/bundle_resolver.py +240 -0
  97. scitex/fig/editor/edit/editor_launcher.py +239 -0
  98. scitex/fig/editor/edit/manual_handler.py +53 -0
  99. scitex/fig/editor/edit/panel_loader.py +232 -0
  100. scitex/fig/editor/edit/path_resolver.py +67 -0
  101. scitex/fig/editor/flask_editor/_bbox.py +1299 -0
  102. scitex/fig/editor/flask_editor/_core.py +1429 -0
  103. scitex/{vis → fig}/editor/flask_editor/_plotter.py +38 -4
  104. scitex/fig/editor/flask_editor/_renderer.py +813 -0
  105. scitex/fig/editor/flask_editor/static/css/base/reset.css +41 -0
  106. scitex/fig/editor/flask_editor/static/css/base/typography.css +16 -0
  107. scitex/fig/editor/flask_editor/static/css/base/variables.css +85 -0
  108. scitex/fig/editor/flask_editor/static/css/components/buttons.css +217 -0
  109. scitex/fig/editor/flask_editor/static/css/components/context-menu.css +93 -0
  110. scitex/fig/editor/flask_editor/static/css/components/dropdown.css +57 -0
  111. scitex/fig/editor/flask_editor/static/css/components/forms.css +112 -0
  112. scitex/fig/editor/flask_editor/static/css/components/modal.css +59 -0
  113. scitex/fig/editor/flask_editor/static/css/components/sections.css +212 -0
  114. scitex/fig/editor/flask_editor/static/css/features/canvas.css +176 -0
  115. scitex/fig/editor/flask_editor/static/css/features/element-inspector.css +190 -0
  116. scitex/fig/editor/flask_editor/static/css/features/loading.css +59 -0
  117. scitex/fig/editor/flask_editor/static/css/features/overlay.css +45 -0
  118. scitex/fig/editor/flask_editor/static/css/features/panel-grid.css +95 -0
  119. scitex/fig/editor/flask_editor/static/css/features/selection.css +101 -0
  120. scitex/fig/editor/flask_editor/static/css/features/statistics.css +138 -0
  121. scitex/fig/editor/flask_editor/static/css/index.css +31 -0
  122. scitex/fig/editor/flask_editor/static/css/layout/container.css +7 -0
  123. scitex/fig/editor/flask_editor/static/css/layout/controls.css +56 -0
  124. scitex/fig/editor/flask_editor/static/css/layout/preview.css +78 -0
  125. scitex/fig/editor/flask_editor/static/js/alignment/axis.js +314 -0
  126. scitex/fig/editor/flask_editor/static/js/alignment/basic.js +107 -0
  127. scitex/fig/editor/flask_editor/static/js/alignment/distribute.js +54 -0
  128. scitex/fig/editor/flask_editor/static/js/canvas/canvas.js +172 -0
  129. scitex/fig/editor/flask_editor/static/js/canvas/dragging.js +258 -0
  130. scitex/fig/editor/flask_editor/static/js/canvas/resize.js +48 -0
  131. scitex/fig/editor/flask_editor/static/js/canvas/selection.js +71 -0
  132. scitex/fig/editor/flask_editor/static/js/core/api.js +288 -0
  133. scitex/fig/editor/flask_editor/static/js/core/state.js +143 -0
  134. scitex/fig/editor/flask_editor/static/js/core/utils.js +245 -0
  135. scitex/fig/editor/flask_editor/static/js/dev/element-inspector.js +992 -0
  136. scitex/fig/editor/flask_editor/static/js/editor/bbox.js +339 -0
  137. scitex/fig/editor/flask_editor/static/js/editor/element-drag.js +286 -0
  138. scitex/fig/editor/flask_editor/static/js/editor/overlay.js +371 -0
  139. scitex/fig/editor/flask_editor/static/js/editor/preview.js +293 -0
  140. scitex/fig/editor/flask_editor/static/js/main.js +426 -0
  141. scitex/fig/editor/flask_editor/static/js/shortcuts/context-menu.js +152 -0
  142. scitex/fig/editor/flask_editor/static/js/shortcuts/keyboard.js +265 -0
  143. scitex/fig/editor/flask_editor/static/js/ui/controls.js +184 -0
  144. scitex/fig/editor/flask_editor/static/js/ui/download.js +57 -0
  145. scitex/fig/editor/flask_editor/static/js/ui/help.js +100 -0
  146. scitex/fig/editor/flask_editor/static/js/ui/theme.js +34 -0
  147. scitex/fig/editor/flask_editor/templates/__init__.py +123 -0
  148. scitex/fig/editor/flask_editor/templates/_html.py +852 -0
  149. scitex/fig/editor/flask_editor/templates/_scripts.py +4933 -0
  150. scitex/fig/editor/flask_editor/templates/_styles.py +1658 -0
  151. scitex/{vis → fig}/io/__init__.py +13 -1
  152. scitex/fig/io/_bundle.py +1058 -0
  153. scitex/{vis → fig}/io/_canvas.py +1 -1
  154. scitex/{vis → fig}/io/_data.py +1 -1
  155. scitex/{vis → fig}/io/_export.py +1 -1
  156. scitex/{vis → fig}/io/_load.py +1 -1
  157. scitex/{vis → fig}/io/_panel.py +1 -1
  158. scitex/{vis → fig}/io/_save.py +1 -1
  159. scitex/{vis → fig}/model/__init__.py +1 -1
  160. scitex/{vis → fig}/model/_annotations.py +1 -1
  161. scitex/{vis → fig}/model/_axes.py +1 -1
  162. scitex/{vis → fig}/model/_figure.py +1 -1
  163. scitex/{vis → fig}/model/_guides.py +1 -1
  164. scitex/{vis → fig}/model/_plot.py +1 -1
  165. scitex/{vis → fig}/model/_styles.py +1 -1
  166. scitex/{vis → fig}/utils/__init__.py +1 -1
  167. scitex/io/__init__.py +22 -26
  168. scitex/io/_bundle.py +493 -0
  169. scitex/io/_flush.py +5 -2
  170. scitex/io/_load.py +98 -0
  171. scitex/io/_load_modules/_H5Explorer.py +5 -2
  172. scitex/io/_load_modules/_canvas.py +2 -2
  173. scitex/io/_load_modules/_image.py +3 -4
  174. scitex/io/_load_modules/_txt.py +4 -2
  175. scitex/io/_metadata.py +34 -324
  176. scitex/io/_metadata_modules/__init__.py +46 -0
  177. scitex/io/_metadata_modules/_embed.py +70 -0
  178. scitex/io/_metadata_modules/_read.py +64 -0
  179. scitex/io/_metadata_modules/_utils.py +79 -0
  180. scitex/io/_metadata_modules/embed_metadata_jpeg.py +74 -0
  181. scitex/io/_metadata_modules/embed_metadata_pdf.py +53 -0
  182. scitex/io/_metadata_modules/embed_metadata_png.py +26 -0
  183. scitex/io/_metadata_modules/embed_metadata_svg.py +62 -0
  184. scitex/io/_metadata_modules/read_metadata_jpeg.py +57 -0
  185. scitex/io/_metadata_modules/read_metadata_pdf.py +51 -0
  186. scitex/io/_metadata_modules/read_metadata_png.py +39 -0
  187. scitex/io/_metadata_modules/read_metadata_svg.py +44 -0
  188. scitex/io/_qr_utils.py +5 -3
  189. scitex/io/_save.py +548 -30
  190. scitex/io/_save_modules/_canvas.py +3 -3
  191. scitex/io/_save_modules/_image.py +5 -9
  192. scitex/io/_save_modules/_tex.py +7 -4
  193. scitex/io/_zip_bundle.py +439 -0
  194. scitex/io/utils/h5_to_zarr.py +11 -9
  195. scitex/msword/__init__.py +255 -0
  196. scitex/msword/profiles.py +357 -0
  197. scitex/msword/reader.py +753 -0
  198. scitex/msword/utils.py +289 -0
  199. scitex/msword/writer.py +362 -0
  200. scitex/plt/__init__.py +5 -2
  201. scitex/plt/_subplots/_AxesWrapper.py +6 -6
  202. scitex/plt/_subplots/_AxisWrapper.py +15 -9
  203. scitex/plt/_subplots/_AxisWrapperMixins/_AdjustmentMixin/__init__.py +36 -0
  204. scitex/plt/_subplots/_AxisWrapperMixins/_AdjustmentMixin/_labels.py +264 -0
  205. scitex/plt/_subplots/_AxisWrapperMixins/_AdjustmentMixin/_metadata.py +213 -0
  206. scitex/plt/_subplots/_AxisWrapperMixins/_AdjustmentMixin/_visual.py +128 -0
  207. scitex/plt/_subplots/_AxisWrapperMixins/_MatplotlibPlotMixin/__init__.py +59 -0
  208. scitex/plt/_subplots/_AxisWrapperMixins/_MatplotlibPlotMixin/_base.py +34 -0
  209. scitex/plt/_subplots/_AxisWrapperMixins/_MatplotlibPlotMixin/_scientific.py +593 -0
  210. scitex/plt/_subplots/_AxisWrapperMixins/_MatplotlibPlotMixin/_statistical.py +654 -0
  211. scitex/plt/_subplots/_AxisWrapperMixins/_MatplotlibPlotMixin/_stx_aliases.py +527 -0
  212. scitex/plt/_subplots/_AxisWrapperMixins/_RawMatplotlibMixin.py +321 -0
  213. scitex/plt/_subplots/_AxisWrapperMixins/_SeabornMixin/__init__.py +33 -0
  214. scitex/plt/_subplots/_AxisWrapperMixins/_SeabornMixin/_base.py +152 -0
  215. scitex/plt/_subplots/_AxisWrapperMixins/_SeabornMixin/_wrappers.py +600 -0
  216. scitex/plt/_subplots/_AxisWrapperMixins/__init__.py +79 -5
  217. scitex/plt/_subplots/_FigWrapper.py +6 -6
  218. scitex/plt/_subplots/_SubplotsWrapper.py +28 -18
  219. scitex/plt/_subplots/_export_as_csv.py +35 -5
  220. scitex/plt/_subplots/_export_as_csv_formatters/__init__.py +8 -0
  221. scitex/plt/_subplots/_export_as_csv_formatters/_format_annotate.py +10 -21
  222. scitex/plt/_subplots/_export_as_csv_formatters/_format_eventplot.py +18 -7
  223. scitex/plt/_subplots/_export_as_csv_formatters/_format_imshow2d.py +28 -12
  224. scitex/plt/_subplots/_export_as_csv_formatters/_format_matshow.py +10 -4
  225. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_imshow.py +13 -1
  226. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_kde.py +12 -2
  227. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_scatter.py +10 -3
  228. scitex/plt/_subplots/_export_as_csv_formatters/_format_quiver.py +10 -4
  229. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_jointplot.py +18 -3
  230. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_lineplot.py +44 -36
  231. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_pairplot.py +14 -2
  232. scitex/plt/_subplots/_export_as_csv_formatters/_format_streamplot.py +11 -5
  233. scitex/plt/_subplots/_export_as_csv_formatters/_format_stx_bar.py +84 -0
  234. scitex/plt/_subplots/_export_as_csv_formatters/_format_stx_barh.py +85 -0
  235. scitex/plt/_subplots/_export_as_csv_formatters/_format_stx_conf_mat.py +14 -3
  236. scitex/plt/_subplots/_export_as_csv_formatters/_format_stx_contour.py +54 -0
  237. scitex/plt/_subplots/_export_as_csv_formatters/_format_stx_ecdf.py +14 -2
  238. scitex/plt/_subplots/_export_as_csv_formatters/_format_stx_errorbar.py +120 -0
  239. scitex/plt/_subplots/_export_as_csv_formatters/_format_stx_heatmap.py +16 -6
  240. scitex/plt/_subplots/_export_as_csv_formatters/_format_stx_image.py +29 -19
  241. scitex/plt/_subplots/_export_as_csv_formatters/_format_stx_imshow.py +63 -0
  242. scitex/plt/_subplots/_export_as_csv_formatters/_format_stx_joyplot.py +22 -5
  243. scitex/plt/_subplots/_export_as_csv_formatters/_format_stx_mean_ci.py +18 -14
  244. scitex/plt/_subplots/_export_as_csv_formatters/_format_stx_mean_std.py +18 -14
  245. scitex/plt/_subplots/_export_as_csv_formatters/_format_stx_median_iqr.py +18 -14
  246. scitex/plt/_subplots/_export_as_csv_formatters/_format_stx_raster.py +10 -2
  247. scitex/plt/_subplots/_export_as_csv_formatters/_format_stx_scatter.py +51 -0
  248. scitex/plt/_subplots/_export_as_csv_formatters/_format_stx_scatter_hist.py +18 -9
  249. scitex/plt/ax/_plot/_stx_ecdf.py +4 -2
  250. scitex/plt/gallery/_generate.py +421 -14
  251. scitex/plt/io/__init__.py +53 -0
  252. scitex/plt/io/_bundle.py +490 -0
  253. scitex/plt/io/_layered_bundle.py +1343 -0
  254. scitex/plt/styles/SCITEX_STYLE.yaml +26 -0
  255. scitex/plt/styles/__init__.py +14 -0
  256. scitex/plt/styles/presets.py +78 -0
  257. scitex/plt/utils/__init__.py +13 -1
  258. scitex/plt/utils/_collect_figure_metadata.py +10 -14
  259. scitex/plt/utils/_configure_mpl.py +6 -18
  260. scitex/plt/utils/_crop.py +32 -14
  261. scitex/plt/utils/_csv_column_naming.py +54 -0
  262. scitex/plt/utils/_figure_mm.py +116 -1
  263. scitex/plt/utils/_hitmap.py +1643 -0
  264. scitex/plt/utils/metadata/__init__.py +25 -0
  265. scitex/plt/utils/metadata/_core.py +9 -10
  266. scitex/plt/utils/metadata/_dimensions.py +6 -3
  267. scitex/plt/utils/metadata/_editable_export.py +405 -0
  268. scitex/plt/utils/metadata/_geometry_extraction.py +570 -0
  269. scitex/schema/__init__.py +109 -16
  270. scitex/schema/_canvas.py +1 -1
  271. scitex/schema/_plot.py +1015 -0
  272. scitex/schema/_stats.py +2 -2
  273. scitex/stats/__init__.py +117 -0
  274. scitex/stats/io/__init__.py +29 -0
  275. scitex/stats/io/_bundle.py +156 -0
  276. scitex/tex/__init__.py +4 -0
  277. scitex/tex/_export.py +890 -0
  278. {scitex-2.7.0.dist-info → scitex-2.8.1.dist-info}/METADATA +11 -1
  279. {scitex-2.7.0.dist-info → scitex-2.8.1.dist-info}/RECORD +294 -170
  280. scitex/io/memo.md +0 -2827
  281. scitex/plt/REQUESTS.md +0 -191
  282. scitex/plt/_subplots/TODO.md +0 -53
  283. scitex/plt/_subplots/_AxisWrapperMixins/_AdjustmentMixin.py +0 -559
  284. scitex/plt/_subplots/_AxisWrapperMixins/_MatplotlibPlotMixin.py +0 -1609
  285. scitex/plt/_subplots/_AxisWrapperMixins/_SeabornMixin.py +0 -447
  286. scitex/plt/templates/research-master/scitex/vis/gallery/area/fill_between.json +0 -110
  287. scitex/plt/templates/research-master/scitex/vis/gallery/area/fill_betweenx.json +0 -88
  288. scitex/plt/templates/research-master/scitex/vis/gallery/area/stx_fill_between.json +0 -103
  289. scitex/plt/templates/research-master/scitex/vis/gallery/area/stx_fillv.json +0 -106
  290. scitex/plt/templates/research-master/scitex/vis/gallery/categorical/bar.json +0 -92
  291. scitex/plt/templates/research-master/scitex/vis/gallery/categorical/barh.json +0 -92
  292. scitex/plt/templates/research-master/scitex/vis/gallery/categorical/boxplot.json +0 -92
  293. scitex/plt/templates/research-master/scitex/vis/gallery/categorical/stx_bar.json +0 -84
  294. scitex/plt/templates/research-master/scitex/vis/gallery/categorical/stx_barh.json +0 -84
  295. scitex/plt/templates/research-master/scitex/vis/gallery/categorical/stx_box.json +0 -83
  296. scitex/plt/templates/research-master/scitex/vis/gallery/categorical/stx_boxplot.json +0 -93
  297. scitex/plt/templates/research-master/scitex/vis/gallery/categorical/stx_violin.json +0 -91
  298. scitex/plt/templates/research-master/scitex/vis/gallery/categorical/stx_violinplot.json +0 -91
  299. scitex/plt/templates/research-master/scitex/vis/gallery/categorical/violinplot.json +0 -91
  300. scitex/plt/templates/research-master/scitex/vis/gallery/contour/contour.json +0 -97
  301. scitex/plt/templates/research-master/scitex/vis/gallery/contour/contourf.json +0 -98
  302. scitex/plt/templates/research-master/scitex/vis/gallery/contour/stx_contour.json +0 -84
  303. scitex/plt/templates/research-master/scitex/vis/gallery/distribution/hist.json +0 -101
  304. scitex/plt/templates/research-master/scitex/vis/gallery/distribution/hist2d.json +0 -96
  305. scitex/plt/templates/research-master/scitex/vis/gallery/distribution/stx_ecdf.json +0 -95
  306. scitex/plt/templates/research-master/scitex/vis/gallery/distribution/stx_joyplot.json +0 -95
  307. scitex/plt/templates/research-master/scitex/vis/gallery/distribution/stx_kde.json +0 -93
  308. scitex/plt/templates/research-master/scitex/vis/gallery/grid/imshow.json +0 -95
  309. scitex/plt/templates/research-master/scitex/vis/gallery/grid/matshow.json +0 -95
  310. scitex/plt/templates/research-master/scitex/vis/gallery/grid/stx_conf_mat.json +0 -83
  311. scitex/plt/templates/research-master/scitex/vis/gallery/grid/stx_heatmap.json +0 -92
  312. scitex/plt/templates/research-master/scitex/vis/gallery/grid/stx_image.json +0 -121
  313. scitex/plt/templates/research-master/scitex/vis/gallery/grid/stx_imshow.json +0 -84
  314. scitex/plt/templates/research-master/scitex/vis/gallery/line/plot.json +0 -110
  315. scitex/plt/templates/research-master/scitex/vis/gallery/line/step.json +0 -92
  316. scitex/plt/templates/research-master/scitex/vis/gallery/line/stx_line.json +0 -95
  317. scitex/plt/templates/research-master/scitex/vis/gallery/line/stx_shaded_line.json +0 -96
  318. scitex/plt/templates/research-master/scitex/vis/gallery/scatter/hexbin.json +0 -95
  319. scitex/plt/templates/research-master/scitex/vis/gallery/scatter/scatter.json +0 -95
  320. scitex/plt/templates/research-master/scitex/vis/gallery/scatter/stem.json +0 -92
  321. scitex/plt/templates/research-master/scitex/vis/gallery/scatter/stx_scatter.json +0 -84
  322. scitex/plt/templates/research-master/scitex/vis/gallery/special/pie.json +0 -94
  323. scitex/plt/templates/research-master/scitex/vis/gallery/special/stx_raster.json +0 -109
  324. scitex/plt/templates/research-master/scitex/vis/gallery/special/stx_rectangle.json +0 -108
  325. scitex/plt/templates/research-master/scitex/vis/gallery/statistical/errorbar.json +0 -93
  326. scitex/plt/templates/research-master/scitex/vis/gallery/statistical/stx_errorbar.json +0 -84
  327. scitex/plt/templates/research-master/scitex/vis/gallery/statistical/stx_mean_ci.json +0 -96
  328. scitex/plt/templates/research-master/scitex/vis/gallery/statistical/stx_mean_std.json +0 -96
  329. scitex/plt/templates/research-master/scitex/vis/gallery/statistical/stx_median_iqr.json +0 -96
  330. scitex/plt/templates/research-master/scitex/vis/gallery/vector/quiver.json +0 -99
  331. scitex/plt/templates/research-master/scitex/vis/gallery/vector/streamplot.json +0 -100
  332. scitex/vis/__init__.py +0 -177
  333. scitex/vis/editor/_edit.py +0 -390
  334. scitex/vis/editor/flask_editor/_bbox.py +0 -529
  335. scitex/vis/editor/flask_editor/_core.py +0 -168
  336. scitex/vis/editor/flask_editor/_renderer.py +0 -393
  337. scitex/vis/editor/flask_editor/templates/__init__.py +0 -33
  338. scitex/vis/editor/flask_editor/templates/_html.py +0 -513
  339. scitex/vis/editor/flask_editor/templates/_scripts.py +0 -1261
  340. scitex/vis/editor/flask_editor/templates/_styles.py +0 -739
  341. /scitex/{vis → fig}/README.md +0 -0
  342. /scitex/{vis → fig}/backend/__init__.py +0 -0
  343. /scitex/{vis → fig}/backend/_export.py +0 -0
  344. /scitex/{vis → fig}/backend/_render.py +0 -0
  345. /scitex/{vis → fig}/docs/CANVAS_ARCHITECTURE.md +0 -0
  346. /scitex/{vis → fig}/editor/_flask_editor.py +0 -0
  347. /scitex/{vis → fig}/editor/flask_editor/__init__.py +0 -0
  348. /scitex/{vis → fig}/editor/flask_editor/_utils.py +0 -0
  349. /scitex/{vis → fig}/io/_directory.py +0 -0
  350. /scitex/{vis → fig}/model/_plot_types.py +0 -0
  351. /scitex/{vis → fig}/utils/_defaults.py +0 -0
  352. /scitex/{vis → fig}/utils/_validate.py +0 -0
  353. {scitex-2.7.0.dist-info → scitex-2.8.1.dist-info}/WHEEL +0 -0
  354. {scitex-2.7.0.dist-info → scitex-2.8.1.dist-info}/entry_points.txt +0 -0
  355. {scitex-2.7.0.dist-info → scitex-2.8.1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,600 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-12-13 (ywatanabe)"
4
+ # File: _wrappers.py - Seaborn plot wrappers
5
+
6
+ """Seaborn plot wrappers with SciTeX integration."""
7
+
8
+ import os
9
+ from typing import Optional, Union
10
+
11
+ import numpy as np
12
+ import pandas as pd
13
+ import seaborn as sns
14
+
15
+ from scitex.types import ArrayLike
16
+
17
+ from ._base import sns_copy_doc
18
+
19
+ __FILE__ = __file__
20
+ __DIR__ = os.path.dirname(__FILE__)
21
+
22
+
23
+ class SeabornWrappersMixin:
24
+ """Mixin providing sns_ prefixed seaborn wrappers.
25
+
26
+ All methods use the seaborn DataFrame-centric interface:
27
+ - data: DataFrame containing the data
28
+ - x, y: Column names for axes
29
+ - hue: Column name for color grouping
30
+
31
+ These methods integrate with SciTeX tracking and styling.
32
+ """
33
+
34
+ def _get_ax_module(self):
35
+ """Lazy import ax module to avoid circular imports."""
36
+ from .....plt import ax as ax_module
37
+
38
+ return ax_module
39
+
40
+ @sns_copy_doc
41
+ def sns_barplot(
42
+ self,
43
+ data: Optional[pd.DataFrame] = None,
44
+ *,
45
+ x: Optional[str] = None,
46
+ y: Optional[str] = None,
47
+ track: bool = True,
48
+ id: Optional[str] = None,
49
+ **kwargs,
50
+ ):
51
+ """Create a bar plot showing point estimates and error bars.
52
+
53
+ Parameters
54
+ ----------
55
+ data : DataFrame, optional
56
+ Input data structure.
57
+ x : str, optional
58
+ Column name for x-axis categories.
59
+ y : str, optional
60
+ Column name for y-axis values.
61
+ track : bool, default True
62
+ Enable data tracking for reproducibility.
63
+ id : str, optional
64
+ Unique identifier for this plot element.
65
+ **kwargs
66
+ Additional arguments passed to `seaborn.barplot`.
67
+
68
+ See Also
69
+ --------
70
+ stx_bar : Array-based bar plot.
71
+ """
72
+ self._sns_base_xyhue(
73
+ "sns_barplot", data=data, x=x, y=y, track=track, id=id, **kwargs
74
+ )
75
+
76
+ @sns_copy_doc
77
+ def sns_boxplot(
78
+ self,
79
+ data: Optional[pd.DataFrame] = None,
80
+ *,
81
+ x: Optional[str] = None,
82
+ y: Optional[str] = None,
83
+ strip: bool = False,
84
+ track: bool = True,
85
+ id: Optional[str] = None,
86
+ **kwargs,
87
+ ):
88
+ """Create a box plot showing distributions with quartiles.
89
+
90
+ Parameters
91
+ ----------
92
+ data : DataFrame, optional
93
+ Input data structure.
94
+ x : str, optional
95
+ Column name for x-axis grouping.
96
+ y : str, optional
97
+ Column name for y-axis values.
98
+ strip : bool, default False
99
+ If True, overlay a stripplot showing individual points.
100
+ track : bool, default True
101
+ Enable data tracking for reproducibility.
102
+ id : str, optional
103
+ Unique identifier for this plot element.
104
+ **kwargs
105
+ Additional arguments passed to `seaborn.boxplot`.
106
+
107
+ See Also
108
+ --------
109
+ stx_box : Array-based boxplot.
110
+ sns_violinplot : Violin plot alternative.
111
+ """
112
+ self._sns_base_xyhue(
113
+ "sns_boxplot", data=data, x=x, y=y, track=track, id=id, **kwargs
114
+ )
115
+
116
+ # Post-processing: Style boxplot with black medians
117
+ from scitex.plt.utils import mm_to_pt
118
+
119
+ lw_pt = mm_to_pt(0.2)
120
+
121
+ for line in self._axis_mpl.get_lines():
122
+ line.set_linewidth(lw_pt)
123
+ xdata = line.get_xdata()
124
+ ydata = line.get_ydata()
125
+ if len(xdata) == 2 and len(ydata) == 2:
126
+ if ydata[0] == ydata[1]:
127
+ x_span = abs(xdata[1] - xdata[0])
128
+ if x_span < 0.4:
129
+ line.set_color("black")
130
+
131
+ if strip:
132
+ strip_kwargs = kwargs.copy()
133
+ strip_kwargs.pop("notch", None)
134
+ strip_kwargs.pop("whis", None)
135
+ self.sns_stripplot(
136
+ data=data,
137
+ x=x,
138
+ y=y,
139
+ track=False,
140
+ id=f"{id}_strip",
141
+ **strip_kwargs,
142
+ )
143
+
144
+ @sns_copy_doc
145
+ def sns_heatmap(
146
+ self,
147
+ data: Union[pd.DataFrame, ArrayLike],
148
+ *,
149
+ xyz: bool = False,
150
+ track: bool = True,
151
+ id: Optional[str] = None,
152
+ **kwargs,
153
+ ):
154
+ """Create a heatmap from rectangular data.
155
+
156
+ Parameters
157
+ ----------
158
+ data : DataFrame or array-like
159
+ 2D dataset for the heatmap.
160
+ xyz : bool, default False
161
+ If True, convert data to XYZ format before plotting.
162
+ track : bool, default True
163
+ Enable data tracking for reproducibility.
164
+ id : str, optional
165
+ Unique identifier for this plot element.
166
+ **kwargs
167
+ Additional arguments passed to `seaborn.heatmap`.
168
+
169
+ See Also
170
+ --------
171
+ stx_heatmap : Array-based annotated heatmap.
172
+ stx_image : Simple image display.
173
+ """
174
+ import scitex
175
+
176
+ method_name = "sns_heatmap"
177
+ df = data
178
+ if xyz:
179
+ df = scitex.pd.to_xyz(df)
180
+ self._sns_base(method_name, df, track=track, track_obj=df, id=id, **kwargs)
181
+
182
+ @sns_copy_doc
183
+ def sns_histplot(
184
+ self,
185
+ data: Optional[pd.DataFrame] = None,
186
+ *,
187
+ x: Optional[str] = None,
188
+ y: Optional[str] = None,
189
+ bins: int = 10,
190
+ align_bins: bool = True,
191
+ track: bool = True,
192
+ id: Optional[str] = None,
193
+ **kwargs,
194
+ ):
195
+ """Create a histogram with optional kernel density estimate.
196
+
197
+ Parameters
198
+ ----------
199
+ data : DataFrame, optional
200
+ Input data structure.
201
+ x : str, optional
202
+ Column name for x-axis values.
203
+ y : str, optional
204
+ Column name for y-axis values.
205
+ bins : int, default 10
206
+ Number of histogram bins.
207
+ align_bins : bool, default True
208
+ Align bins across multiple histograms on same axes.
209
+ track : bool, default True
210
+ Enable data tracking for reproducibility.
211
+ id : str, optional
212
+ Unique identifier for this plot element.
213
+ **kwargs
214
+ Additional arguments passed to `seaborn.histplot`.
215
+ Common options: kde, stat, element, hue.
216
+
217
+ See Also
218
+ --------
219
+ hist : Array-based histogram.
220
+ stx_kde : Kernel density estimate.
221
+ """
222
+ method_name = "sns_histplot"
223
+
224
+ plot_data = None
225
+ if data is not None and x is not None:
226
+ plot_data = (
227
+ data[x].values
228
+ if hasattr(data, "columns") and x in data.columns
229
+ else None
230
+ )
231
+
232
+ axis_id = str(hash(self._axis_mpl))
233
+ hist_id = id if id is not None else str(self.id)
234
+ range_value = kwargs.get("binrange", None)
235
+
236
+ if align_bins and plot_data is not None:
237
+ from .....plt.utils import histogram_bin_manager
238
+
239
+ bins_val, range_val = histogram_bin_manager.register_histogram(
240
+ axis_id, hist_id, plot_data, bins, range_value
241
+ )
242
+ kwargs["bins"] = bins_val
243
+ if range_value is not None:
244
+ kwargs["binrange"] = range_val
245
+
246
+ with self._no_tracking():
247
+ sns_plot = sns.histplot(data=data, x=x, y=y, ax=self._axis_mpl, **kwargs)
248
+
249
+ hist_result = None
250
+ if hasattr(sns_plot, "patches") and sns_plot.patches:
251
+ patches = sns_plot.patches
252
+ if patches:
253
+ counts = np.array([p.get_height() for p in patches])
254
+ bin_edges = []
255
+ for p in patches:
256
+ bin_edges.append(p.get_x())
257
+ if patches:
258
+ bin_edges.append(patches[-1].get_x() + patches[-1].get_width())
259
+ hist_result = (counts, np.array(bin_edges))
260
+
261
+ track_obj = self._sns_prepare_xyhue(data, x, y, kwargs.get("hue"))
262
+ tracked_dict = {
263
+ "data": track_obj,
264
+ "args": (data, x, y),
265
+ "hist_result": hist_result,
266
+ }
267
+ self._track(track, id, method_name, tracked_dict, kwargs)
268
+
269
+ return sns_plot
270
+
271
+ @sns_copy_doc
272
+ def sns_kdeplot(
273
+ self,
274
+ data: Optional[pd.DataFrame] = None,
275
+ *,
276
+ x: Optional[str] = None,
277
+ y: Optional[str] = None,
278
+ xlim: Optional[tuple] = None,
279
+ ylim: Optional[tuple] = None,
280
+ track: bool = True,
281
+ id: Optional[str] = None,
282
+ **kwargs,
283
+ ):
284
+ """Create a kernel density estimate plot.
285
+
286
+ Parameters
287
+ ----------
288
+ data : DataFrame, optional
289
+ Input data structure.
290
+ x : str, optional
291
+ Column name for x-axis values.
292
+ y : str, optional
293
+ Column name for y-axis values.
294
+ xlim : tuple, optional
295
+ Limits for x-axis KDE range.
296
+ ylim : tuple, optional
297
+ Limits for y-axis KDE range.
298
+ track : bool, default True
299
+ Enable data tracking for reproducibility.
300
+ id : str, optional
301
+ Unique identifier for this plot element.
302
+ **kwargs
303
+ Additional arguments passed to the KDE function.
304
+
305
+ See Also
306
+ --------
307
+ stx_kde : Array-based KDE plot.
308
+ sns_histplot : Histogram with optional KDE.
309
+ """
310
+ hue_col = kwargs.pop("hue", None)
311
+
312
+ if hue_col:
313
+ hues = data[hue_col]
314
+ if x is not None:
315
+ lim = xlim
316
+ for hue in np.unique(hues):
317
+ _data = data.loc[hues == hue, x]
318
+ self.stx_kde(_data, xlim=lim, label=hue, id=hue, **kwargs)
319
+ if y is not None:
320
+ lim = ylim
321
+ for hue in np.unique(hues):
322
+ _data = data.loc[hues == hue, y]
323
+ self.stx_kde(_data, xlim=lim, label=hue, id=hue, **kwargs)
324
+ else:
325
+ if x is not None:
326
+ _data, lim = data[x], xlim
327
+ if y is not None:
328
+ _data, lim = data[y], ylim
329
+ self.stx_kde(_data, xlim=lim, **kwargs)
330
+
331
+ @sns_copy_doc
332
+ def sns_pairplot(
333
+ self,
334
+ *args,
335
+ track: bool = True,
336
+ id: Optional[str] = None,
337
+ **kwargs,
338
+ ):
339
+ """Create a grid of pairwise relationships in a dataset.
340
+
341
+ Parameters
342
+ ----------
343
+ *args
344
+ Positional arguments passed to `seaborn.pairplot`.
345
+ track : bool, default True
346
+ Enable data tracking for reproducibility.
347
+ id : str, optional
348
+ Unique identifier for this plot element.
349
+ **kwargs
350
+ Additional arguments passed to `seaborn.pairplot`.
351
+ """
352
+ self._sns_base("sns_pairplot", *args, track=track, id=id, **kwargs)
353
+
354
+ @sns_copy_doc
355
+ def sns_scatterplot(
356
+ self,
357
+ data: Optional[pd.DataFrame] = None,
358
+ *,
359
+ x: Optional[str] = None,
360
+ y: Optional[str] = None,
361
+ track: bool = True,
362
+ id: Optional[str] = None,
363
+ **kwargs,
364
+ ):
365
+ """Create a scatter plot with semantic mappings.
366
+
367
+ Parameters
368
+ ----------
369
+ data : DataFrame, optional
370
+ Input data structure.
371
+ x : str, optional
372
+ Column name for x-axis values.
373
+ y : str, optional
374
+ Column name for y-axis values.
375
+ track : bool, default True
376
+ Enable data tracking for reproducibility.
377
+ id : str, optional
378
+ Unique identifier for this plot element.
379
+ **kwargs
380
+ Additional arguments passed to `seaborn.scatterplot`.
381
+ Common options: hue, size, style.
382
+
383
+ See Also
384
+ --------
385
+ stx_scatter : Array-based scatter plot.
386
+ """
387
+ self._sns_base_xyhue(
388
+ "sns_scatterplot",
389
+ data=data,
390
+ x=x,
391
+ y=y,
392
+ track=track,
393
+ id=id,
394
+ **kwargs,
395
+ )
396
+
397
+ @sns_copy_doc
398
+ def sns_lineplot(
399
+ self,
400
+ data: Optional[pd.DataFrame] = None,
401
+ *,
402
+ x: Optional[str] = None,
403
+ y: Optional[str] = None,
404
+ track: bool = True,
405
+ id: Optional[str] = None,
406
+ **kwargs,
407
+ ):
408
+ """Create a line plot with semantic mappings.
409
+
410
+ Parameters
411
+ ----------
412
+ data : DataFrame, optional
413
+ Input data structure.
414
+ x : str, optional
415
+ Column name for x-axis values.
416
+ y : str, optional
417
+ Column name for y-axis values.
418
+ track : bool, default True
419
+ Enable data tracking for reproducibility.
420
+ id : str, optional
421
+ Unique identifier for this plot element.
422
+ **kwargs
423
+ Additional arguments passed to `seaborn.lineplot`.
424
+ Common options: hue, size, style, estimator.
425
+
426
+ See Also
427
+ --------
428
+ stx_line : Array-based line plot.
429
+ stx_mean_std : Line with uncertainty shading.
430
+ """
431
+ self._sns_base_xyhue(
432
+ "sns_lineplot",
433
+ data=data,
434
+ x=x,
435
+ y=y,
436
+ track=track,
437
+ id=id,
438
+ **kwargs,
439
+ )
440
+
441
+ @sns_copy_doc
442
+ def sns_swarmplot(
443
+ self,
444
+ data: Optional[pd.DataFrame] = None,
445
+ *,
446
+ x: Optional[str] = None,
447
+ y: Optional[str] = None,
448
+ track: bool = True,
449
+ id: Optional[str] = None,
450
+ **kwargs,
451
+ ):
452
+ """Create a categorical scatter plot with non-overlapping points.
453
+
454
+ Parameters
455
+ ----------
456
+ data : DataFrame, optional
457
+ Input data structure.
458
+ x : str, optional
459
+ Column name for x-axis grouping.
460
+ y : str, optional
461
+ Column name for y-axis values.
462
+ track : bool, default True
463
+ Enable data tracking for reproducibility.
464
+ id : str, optional
465
+ Unique identifier for this plot element.
466
+ **kwargs
467
+ Additional arguments passed to `seaborn.swarmplot`.
468
+
469
+ See Also
470
+ --------
471
+ sns_stripplot : Jittered categorical scatter.
472
+ sns_boxplot : Box plot for distributions.
473
+ """
474
+ self._sns_base_xyhue(
475
+ "sns_swarmplot", data=data, x=x, y=y, track=track, id=id, **kwargs
476
+ )
477
+
478
+ @sns_copy_doc
479
+ def sns_stripplot(
480
+ self,
481
+ data: Optional[pd.DataFrame] = None,
482
+ *,
483
+ x: Optional[str] = None,
484
+ y: Optional[str] = None,
485
+ track: bool = True,
486
+ id: Optional[str] = None,
487
+ **kwargs,
488
+ ):
489
+ """Create a categorical scatter plot with jittered points.
490
+
491
+ Parameters
492
+ ----------
493
+ data : DataFrame, optional
494
+ Input data structure.
495
+ x : str, optional
496
+ Column name for x-axis grouping.
497
+ y : str, optional
498
+ Column name for y-axis values.
499
+ track : bool, default True
500
+ Enable data tracking for reproducibility.
501
+ id : str, optional
502
+ Unique identifier for this plot element.
503
+ **kwargs
504
+ Additional arguments passed to `seaborn.stripplot`.
505
+
506
+ See Also
507
+ --------
508
+ sns_swarmplot : Non-overlapping categorical scatter.
509
+ sns_boxplot : Often combined with stripplot.
510
+ """
511
+ self._sns_base_xyhue(
512
+ "sns_stripplot", data=data, x=x, y=y, track=track, id=id, **kwargs
513
+ )
514
+
515
+ @sns_copy_doc
516
+ def sns_violinplot(
517
+ self,
518
+ data: Optional[pd.DataFrame] = None,
519
+ *,
520
+ x: Optional[str] = None,
521
+ y: Optional[str] = None,
522
+ half: bool = False,
523
+ track: bool = True,
524
+ id: Optional[str] = None,
525
+ **kwargs,
526
+ ):
527
+ """Create a violin plot combining box plot with kernel density.
528
+
529
+ Parameters
530
+ ----------
531
+ data : DataFrame, optional
532
+ Input data structure.
533
+ x : str, optional
534
+ Column name for x-axis grouping.
535
+ y : str, optional
536
+ Column name for y-axis values.
537
+ half : bool, default False
538
+ If True, draw half-violins (useful for paired comparisons).
539
+ track : bool, default True
540
+ Enable data tracking for reproducibility.
541
+ id : str, optional
542
+ Unique identifier for this plot element.
543
+ **kwargs
544
+ Additional arguments passed to `seaborn.violinplot`.
545
+
546
+ See Also
547
+ --------
548
+ stx_violin : Array-based violin plot.
549
+ sns_boxplot : Box plot alternative.
550
+ """
551
+ if half:
552
+ with self._no_tracking():
553
+ self._axis_mpl = self._get_ax_module().plot_half_violin(
554
+ self._axis_mpl, data=data, x=x, y=y, **kwargs
555
+ )
556
+ else:
557
+ self._sns_base_xyhue(
558
+ "sns_violinplot",
559
+ data=data,
560
+ x=x,
561
+ y=y,
562
+ track=track,
563
+ id=id,
564
+ **kwargs,
565
+ )
566
+
567
+ track_obj = self._sns_prepare_xyhue(data, x, y, kwargs.get("hue"))
568
+ self._track(track, id, "sns_violinplot", track_obj, kwargs)
569
+
570
+ return self._axis_mpl
571
+
572
+ @sns_copy_doc
573
+ def sns_jointplot(
574
+ self,
575
+ *args,
576
+ track: bool = True,
577
+ id: Optional[str] = None,
578
+ **kwargs,
579
+ ):
580
+ """Create a figure with joint and marginal distributions.
581
+
582
+ Parameters
583
+ ----------
584
+ *args
585
+ Positional arguments passed to `seaborn.jointplot`.
586
+ track : bool, default True
587
+ Enable data tracking for reproducibility.
588
+ id : str, optional
589
+ Unique identifier for this plot element.
590
+ **kwargs
591
+ Additional arguments passed to `seaborn.jointplot`.
592
+
593
+ See Also
594
+ --------
595
+ stx_scatter_hist : Array-based scatter with marginal histograms.
596
+ """
597
+ self._sns_base("sns_jointplot", *args, track=track, id=id, **kwargs)
598
+
599
+
600
+ # EOF
@@ -1,15 +1,89 @@
1
1
  #!/usr/bin/env python3
2
2
  # -*- coding: utf-8 -*-
3
- # Timestamp: "2025-05-01 08:54:38 (ywatanabe)"
4
- # File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/_subplots/_AxisWrapperMixins/__init__.py
5
- # ----------------------------------------
3
+ # Timestamp: "2025-12-13 (ywatanabe)"
4
+ # File: /home/ywatanabe/proj/scitex-code/src/scitex/plt/_subplots/_AxisWrapperMixins/__init__.py
5
+
6
+ """
7
+ AxisWrapper Mixins - Modular plotting API for SciTeX.
8
+
9
+ API Layers
10
+ ==========
11
+
12
+ SciTeX provides three distinct API layers for plotting, each with different
13
+ purposes and trade-offs:
14
+
15
+ stx_* (SciTeX Canonical)
16
+ ------------------------
17
+ - Input: ArrayLike / List / ndarray
18
+ - Output: (Axes, tracked_df, meta)
19
+ - Purpose: publication / reproducibility
20
+ - Features:
21
+ * Full tracking and metadata support
22
+ * Output connects to .pltz / .figz formats
23
+ * Automatic styling according to SciTeX style
24
+ * Primary API - recommended for final figures
25
+
26
+ Examples:
27
+ ax.stx_bar(x, height)
28
+ ax.stx_scatter(x, y, label="Data")
29
+ ax.stx_kde(data)
30
+
31
+ mpl_* (Matplotlib Compatibility)
32
+ --------------------------------
33
+ - Input: Same as matplotlib
34
+ - Output: matplotlib artists
35
+ - Purpose: compatibility / low-level control / escape hatch
36
+ - Features:
37
+ * No tracking, no scitex processing
38
+ * Direct matplotlib API access
39
+ * Use for unsupported operations or migration
40
+
41
+ Examples:
42
+ ax.mpl_plot(x, y)
43
+ ax.mpl_scatter(x, y)
44
+ ax.mpl_raw("some_method", *args) # Call any matplotlib method
45
+
46
+ sns_* (Seaborn / DataFrame-Centric)
47
+ -----------------------------------
48
+ - Input: DataFrame + column names (data=, x=, y=, hue=)
49
+ - Output: Axes (+ summarized df)
50
+ - Purpose: exploratory / grouped statistics
51
+ - Features:
52
+ * DataFrame-centric interface
53
+ * Statistical summaries and grouping
54
+ * Familiar seaborn UX
55
+
56
+ Examples:
57
+ ax.sns_boxplot(data=df, x="group", y="value")
58
+ ax.sns_histplot(data=df, x="measurement", hue="category")
59
+
60
+ Choosing an API Layer
61
+ =====================
62
+
63
+ Use stx_*:
64
+ - For publication-ready figures
65
+ - When you need reproducibility and tracking
66
+ - As your default choice
67
+
68
+ Use mpl_*:
69
+ - For low-level matplotlib control
70
+ - When migrating existing matplotlib code
71
+ - For matplotlib features not yet wrapped
72
+
73
+ Use sns_*:
74
+ - For exploratory data analysis
75
+ - When input is a DataFrame
76
+ - For statistical visualization with grouping
77
+ """
78
+
6
79
  import os
7
80
 
8
- __FILE__ = "./src/scitex/plt/_subplots/_AxisWrapperMixins/__init__.py"
81
+ __FILE__ = __file__
9
82
  __DIR__ = os.path.dirname(__FILE__)
10
- # ----------------------------------------
83
+
11
84
  from ._AdjustmentMixin import AdjustmentMixin
12
85
  from ._MatplotlibPlotMixin import MatplotlibPlotMixin
86
+ from ._RawMatplotlibMixin import RawMatplotlibMixin, MPL_METHODS
13
87
  from ._SeabornMixin import SeabornMixin
14
88
  from ._TrackingMixin import TrackingMixin
15
89
  from ._UnitAwareMixin import UnitAwareMixin