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,654 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-12-13 (ywatanabe)"
4
+ # File: _statistical.py - Statistical plot methods
5
+
6
+ """Statistical plotting methods including line plots, box plots, and violin plots."""
7
+
8
+ import os
9
+ from typing import List, Optional, Sequence, Tuple, Union
10
+
11
+ import numpy as np
12
+ import pandas as pd
13
+
14
+ from scitex.types import ArrayLike
15
+
16
+ __FILE__ = __file__
17
+ __DIR__ = os.path.dirname(__FILE__)
18
+
19
+
20
+ class StatisticalPlotMixin:
21
+ """Mixin for statistical plotting methods.
22
+
23
+ Provides methods for:
24
+ - Distribution plots (boxplot, violin)
25
+ - Line plots with uncertainty (mean±std, mean±CI, median±IQR)
26
+ - Histograms with bin alignment
27
+ - Geometric shapes (rectangles, filled regions)
28
+ """
29
+
30
+ def stx_rectangle(
31
+ self,
32
+ x: float,
33
+ y: float,
34
+ width: float,
35
+ height: float,
36
+ *,
37
+ track: bool = True,
38
+ id: Optional[str] = None,
39
+ **kwargs,
40
+ ) -> "Axes":
41
+ """Draw a rectangle on the axes.
42
+
43
+ Parameters
44
+ ----------
45
+ x : float
46
+ X coordinate of the lower-left corner.
47
+ y : float
48
+ Y coordinate of the lower-left corner.
49
+ width : float
50
+ Width of the rectangle.
51
+ height : float
52
+ Height of the rectangle.
53
+ track : bool, default True
54
+ Enable data tracking for reproducibility.
55
+ id : str, optional
56
+ Unique identifier for this plot element.
57
+ **kwargs
58
+ Additional arguments passed to the rectangle function.
59
+
60
+ Returns
61
+ -------
62
+ Axes
63
+ The axes with the rectangle added.
64
+
65
+ Examples
66
+ --------
67
+ >>> ax.stx_rectangle(0, 0, 1, 2, color='blue', alpha=0.5)
68
+ """
69
+ method_name = "stx_rectangle"
70
+
71
+ with self._no_tracking():
72
+ self._axis_mpl = self._get_ax_module().stx_rectangle(
73
+ self._axis_mpl, x, y, width, height, **kwargs
74
+ )
75
+
76
+ tracked_dict = {"x": x, "y": y, "width": width, "height": height}
77
+ self._track(track, id, method_name, tracked_dict, None)
78
+ self._apply_scitex_postprocess(method_name)
79
+
80
+ return self._axis_mpl
81
+
82
+ def stx_fillv(
83
+ self,
84
+ starts: ArrayLike,
85
+ ends: ArrayLike,
86
+ *,
87
+ color: str = "red",
88
+ alpha: float = 0.2,
89
+ track: bool = True,
90
+ id: Optional[str] = None,
91
+ **kwargs,
92
+ ) -> "Axes":
93
+ """Fill vertical spans between start and end positions.
94
+
95
+ Parameters
96
+ ----------
97
+ starts : array-like
98
+ Start x-coordinates of each span.
99
+ ends : array-like
100
+ End x-coordinates of each span.
101
+ color : str, default 'red'
102
+ Fill color.
103
+ alpha : float, default 0.2
104
+ Transparency level.
105
+ track : bool, default True
106
+ Enable data tracking for reproducibility.
107
+ id : str, optional
108
+ Unique identifier for this plot element.
109
+ **kwargs
110
+ Additional arguments passed to the fill function.
111
+
112
+ Returns
113
+ -------
114
+ Axes
115
+ The axes with the filled spans added.
116
+
117
+ Examples
118
+ --------
119
+ >>> ax.stx_fillv([0, 2, 4], [1, 3, 5], color='green')
120
+ """
121
+ method_name = "stx_fillv"
122
+
123
+ with self._no_tracking():
124
+ self._axis_mpl = self._get_ax_module().stx_fillv(
125
+ self._axis_mpl, starts, ends, color=color, alpha=alpha
126
+ )
127
+
128
+ tracked_dict = {"starts": starts, "ends": ends}
129
+ self._track(track, id, method_name, tracked_dict, None)
130
+ self._apply_scitex_postprocess(method_name)
131
+
132
+ return self._axis_mpl
133
+
134
+ def stx_box(
135
+ self,
136
+ data: Union[ArrayLike, Sequence[ArrayLike]],
137
+ *,
138
+ colors: Optional[List[str]] = None,
139
+ track: bool = True,
140
+ id: Optional[str] = None,
141
+ **kwargs,
142
+ ) -> dict:
143
+ """Create a boxplot with SciTeX styling and tracking.
144
+
145
+ Parameters
146
+ ----------
147
+ data : array-like or sequence of array-like
148
+ Data for the boxplot. Can be a single array or list of arrays
149
+ where each array represents a group.
150
+ colors : list of str, optional
151
+ Colors for each box. If None, uses default palette.
152
+ track : bool, default True
153
+ Enable data tracking for reproducibility.
154
+ id : str, optional
155
+ Unique identifier for this plot element.
156
+ **kwargs
157
+ Additional arguments passed to `matplotlib.axes.Axes.boxplot`.
158
+
159
+ Returns
160
+ -------
161
+ dict
162
+ Dictionary mapping component names ('boxes', 'whiskers', etc.)
163
+ to lists of Line2D or Patch artists.
164
+
165
+ See Also
166
+ --------
167
+ stx_boxplot : Alias for this method.
168
+ sns_boxplot : DataFrame-based boxplot.
169
+ stx_violin : Violin plot alternative.
170
+
171
+ Examples
172
+ --------
173
+ >>> ax.stx_box([data1, data2, data3], labels=['A', 'B', 'C'])
174
+ >>> ax.stx_box(data, notch=True, patch_artist=True)
175
+ """
176
+ method_name = "stx_box"
177
+
178
+ _data = data.copy()
179
+
180
+ if kwargs.get("label"):
181
+ n_per_group = [len(g) for g in data]
182
+ n_min, n_max = min(n_per_group), max(n_per_group)
183
+ n_str = str(n_min) if n_min == n_max else f"{n_min}-{n_max}"
184
+ kwargs["label"] = kwargs["label"] + f" ($n$={n_str})"
185
+
186
+ if "patch_artist" not in kwargs:
187
+ kwargs["patch_artist"] = True
188
+
189
+ with self._no_tracking():
190
+ result = self._axis_mpl.boxplot(data, **kwargs)
191
+
192
+ n_per_group = [len(g) for g in data]
193
+ tracked_dict = {"data": _data, "n": n_per_group}
194
+ self._track(track, id, method_name, tracked_dict, None)
195
+
196
+ from scitex.plt.ax import style_boxplot
197
+
198
+ style_boxplot(result, colors=colors)
199
+
200
+ self._apply_scitex_postprocess(method_name, result)
201
+
202
+ return result
203
+
204
+ def hist(
205
+ self,
206
+ x: ArrayLike,
207
+ *,
208
+ bins: Union[int, str, ArrayLike] = 10,
209
+ range: Optional[Tuple[float, float]] = None,
210
+ align_bins: bool = True,
211
+ track: bool = True,
212
+ id: Optional[str] = None,
213
+ **kwargs,
214
+ ) -> Tuple[np.ndarray, np.ndarray, "BarContainer"]:
215
+ """Plot a histogram with optional bin alignment across multiple histograms.
216
+
217
+ Parameters
218
+ ----------
219
+ x : array-like
220
+ Input data for the histogram.
221
+ bins : int, str, or array-like, default 10
222
+ Number of bins, binning strategy ('auto', 'fd', etc.), or bin edges.
223
+ range : tuple of float, optional
224
+ Lower and upper range of the bins. If None, uses data range.
225
+ align_bins : bool, default True
226
+ When True, aligns bins across multiple histograms on the same axes.
227
+ track : bool, default True
228
+ Enable data tracking for reproducibility.
229
+ id : str, optional
230
+ Unique identifier for this plot element.
231
+ **kwargs
232
+ Additional arguments passed to `matplotlib.axes.Axes.hist`.
233
+
234
+ Returns
235
+ -------
236
+ tuple
237
+ (counts, bin_edges, patches) from matplotlib hist.
238
+
239
+ See Also
240
+ --------
241
+ sns_histplot : DataFrame-based histogram with KDE support.
242
+
243
+ Examples
244
+ --------
245
+ >>> ax.hist(data, bins=20, density=True)
246
+ >>> ax.hist(data, bins='auto', alpha=0.7, label='Group A')
247
+ """
248
+ method_name = "hist"
249
+
250
+ axis_id = str(hash(self._axis_mpl))
251
+ hist_id = id if id is not None else str(self.id)
252
+
253
+ if align_bins:
254
+ from .....plt.utils import histogram_bin_manager
255
+
256
+ bins, range = histogram_bin_manager.register_histogram(
257
+ axis_id, hist_id, x, bins, range
258
+ )
259
+
260
+ with self._no_tracking():
261
+ hist_data = self._axis_mpl.hist(x, bins=bins, range=range, **kwargs)
262
+
263
+ tracked_dict = {
264
+ "args": (x,),
265
+ "hist_result": (hist_data[0], hist_data[1]),
266
+ "bins": bins,
267
+ "range": range,
268
+ }
269
+ self._track(track, id, method_name, tracked_dict, kwargs)
270
+ self._apply_scitex_postprocess(method_name, hist_data)
271
+
272
+ return hist_data
273
+
274
+ def stx_violin(
275
+ self,
276
+ data: Union[pd.DataFrame, List, ArrayLike],
277
+ *,
278
+ x: Optional[str] = None,
279
+ y: Optional[str] = None,
280
+ hue: Optional[str] = None,
281
+ labels: Optional[List[str]] = None,
282
+ colors: Optional[List[str]] = None,
283
+ half: bool = False,
284
+ track: bool = True,
285
+ id: Optional[str] = None,
286
+ **kwargs,
287
+ ) -> "Axes":
288
+ """Create a violin plot with SciTeX styling and tracking.
289
+
290
+ Parameters
291
+ ----------
292
+ data : DataFrame, list, or array-like
293
+ Data for the violin plot. Can be:
294
+ - List of arrays (one per violin)
295
+ - DataFrame with columns specified by x, y, hue
296
+ x : str, optional
297
+ Column name for x-axis grouping (DataFrame input).
298
+ y : str, optional
299
+ Column name for y-axis values (DataFrame input).
300
+ hue : str, optional
301
+ Column name for color grouping (DataFrame input).
302
+ labels : list of str, optional
303
+ Labels for each violin (list input).
304
+ colors : list of str, optional
305
+ Colors for each violin.
306
+ half : bool, default False
307
+ If True, draw half-violins (useful for paired comparisons).
308
+ track : bool, default True
309
+ Enable data tracking for reproducibility.
310
+ id : str, optional
311
+ Unique identifier for this plot element.
312
+ **kwargs
313
+ Additional arguments passed to the violin function.
314
+
315
+ Returns
316
+ -------
317
+ Axes
318
+ The axes with the violin plot.
319
+
320
+ See Also
321
+ --------
322
+ stx_violinplot : Alias for this method.
323
+ sns_violinplot : DataFrame-based violin plot.
324
+ stx_box : Boxplot alternative.
325
+
326
+ Examples
327
+ --------
328
+ >>> ax.stx_violin([data1, data2], labels=['A', 'B'])
329
+ >>> ax.stx_violin(df, x='group', y='value', hue='category')
330
+ """
331
+ method_name = "stx_violin"
332
+
333
+ with self._no_tracking():
334
+ if isinstance(data, list) and all(
335
+ isinstance(item, (list, np.ndarray)) for item in data
336
+ ):
337
+ self._axis_mpl = self._get_ax_module().stx_violin(
338
+ self._axis_mpl,
339
+ values_list=data,
340
+ labels=labels,
341
+ colors=colors,
342
+ half=half,
343
+ **kwargs,
344
+ )
345
+ else:
346
+ self._axis_mpl = self._get_ax_module().stx_violin(
347
+ self._axis_mpl,
348
+ data=data,
349
+ x=x,
350
+ y=y,
351
+ hue=hue,
352
+ half=half,
353
+ **kwargs,
354
+ )
355
+
356
+ tracked_dict = {
357
+ "data": data,
358
+ "x": x,
359
+ "y": y,
360
+ "hue": hue,
361
+ "half": half,
362
+ "labels": labels,
363
+ "colors": colors,
364
+ }
365
+ self._track(track, id, method_name, tracked_dict, None)
366
+ self._apply_scitex_postprocess(method_name)
367
+
368
+ return self._axis_mpl
369
+
370
+ def stx_line(
371
+ self,
372
+ y: ArrayLike,
373
+ *,
374
+ x: Optional[ArrayLike] = None,
375
+ track: bool = True,
376
+ id: Optional[str] = None,
377
+ **kwargs,
378
+ ) -> Tuple["Axes", pd.DataFrame]:
379
+ """Plot a simple line with SciTeX styling.
380
+
381
+ Parameters
382
+ ----------
383
+ y : array-like
384
+ Y values for the line.
385
+ x : array-like, optional
386
+ X values for the line. If None, uses integer indices.
387
+ track : bool, default True
388
+ Enable data tracking for reproducibility.
389
+ id : str, optional
390
+ Unique identifier for this plot element.
391
+ **kwargs
392
+ Additional arguments passed to the line plot function.
393
+
394
+ Returns
395
+ -------
396
+ tuple
397
+ (Axes, DataFrame) - The axes and a DataFrame with the plotted data.
398
+
399
+ See Also
400
+ --------
401
+ stx_mean_std : Line with standard deviation shading.
402
+ stx_shaded_line : Line with custom shaded region.
403
+ sns_lineplot : DataFrame-based line plot.
404
+
405
+ Examples
406
+ --------
407
+ >>> ax.stx_line(y_values)
408
+ >>> ax.stx_line(y, x=x, label='Series A', color='blue')
409
+ """
410
+ method_name = "stx_line"
411
+
412
+ with self._no_tracking():
413
+ self._axis_mpl, plot_df = self._get_ax_module().stx_line(
414
+ self._axis_mpl, y, xx=x, **kwargs
415
+ )
416
+
417
+ tracked_dict = {"plot_df": plot_df}
418
+ self._track(track, id, method_name, tracked_dict, kwargs)
419
+ self._apply_scitex_postprocess(method_name)
420
+
421
+ return self._axis_mpl, plot_df
422
+
423
+ def stx_mean_std(
424
+ self,
425
+ data: ArrayLike,
426
+ *,
427
+ x: Optional[ArrayLike] = None,
428
+ sd: float = 1.0,
429
+ track: bool = True,
430
+ id: Optional[str] = None,
431
+ **kwargs,
432
+ ) -> Tuple["Axes", pd.DataFrame]:
433
+ """Plot mean line with standard deviation shading.
434
+
435
+ Parameters
436
+ ----------
437
+ data : array-like
438
+ 2D array where each row is an observation and columns are time points.
439
+ x : array-like, optional
440
+ X values. If None, uses integer indices.
441
+ sd : float, default 1.0
442
+ Number of standard deviations for the shaded region.
443
+ track : bool, default True
444
+ Enable data tracking for reproducibility.
445
+ id : str, optional
446
+ Unique identifier for this plot element.
447
+ **kwargs
448
+ Additional arguments passed to the plot function.
449
+
450
+ Returns
451
+ -------
452
+ tuple
453
+ (Axes, DataFrame) - The axes and a DataFrame with mean, upper, lower.
454
+
455
+ See Also
456
+ --------
457
+ stx_mean_ci : Mean with confidence interval.
458
+ stx_median_iqr : Median with interquartile range.
459
+ stx_shaded_line : Custom shaded line.
460
+
461
+ Examples
462
+ --------
463
+ >>> ax.stx_mean_std(data_2d, sd=2, label='Mean±2SD')
464
+ """
465
+ method_name = "stx_mean_std"
466
+
467
+ with self._no_tracking():
468
+ self._axis_mpl, plot_df = self._get_ax_module().stx_mean_std(
469
+ self._axis_mpl, data, xx=x, sd=sd, **kwargs
470
+ )
471
+
472
+ tracked_dict = {"plot_df": plot_df}
473
+ self._track(track, id, method_name, tracked_dict, None)
474
+ self._apply_scitex_postprocess(method_name)
475
+
476
+ return self._axis_mpl, plot_df
477
+
478
+ def stx_mean_ci(
479
+ self,
480
+ data: ArrayLike,
481
+ *,
482
+ x: Optional[ArrayLike] = None,
483
+ ci: float = 95.0,
484
+ track: bool = True,
485
+ id: Optional[str] = None,
486
+ **kwargs,
487
+ ) -> Tuple["Axes", pd.DataFrame]:
488
+ """Plot mean line with confidence interval shading.
489
+
490
+ Parameters
491
+ ----------
492
+ data : array-like
493
+ 2D array where each row is an observation and columns are time points.
494
+ x : array-like, optional
495
+ X values. If None, uses integer indices.
496
+ ci : float, default 95.0
497
+ Confidence interval percentage (e.g., 95 for 95% CI).
498
+ track : bool, default True
499
+ Enable data tracking for reproducibility.
500
+ id : str, optional
501
+ Unique identifier for this plot element.
502
+ **kwargs
503
+ Additional arguments passed to the plot function.
504
+
505
+ Returns
506
+ -------
507
+ tuple
508
+ (Axes, DataFrame) - The axes and a DataFrame with mean, upper, lower.
509
+
510
+ See Also
511
+ --------
512
+ stx_mean_std : Mean with standard deviation.
513
+ stx_median_iqr : Median with interquartile range.
514
+
515
+ Examples
516
+ --------
517
+ >>> ax.stx_mean_ci(data_2d, ci=99, label='Mean±99%CI')
518
+ """
519
+ method_name = "stx_mean_ci"
520
+
521
+ with self._no_tracking():
522
+ self._axis_mpl, plot_df = self._get_ax_module().stx_mean_ci(
523
+ self._axis_mpl, data, xx=x, perc=ci, **kwargs
524
+ )
525
+
526
+ tracked_dict = {"plot_df": plot_df}
527
+ self._track(track, id, method_name, tracked_dict, None)
528
+ self._apply_scitex_postprocess(method_name)
529
+
530
+ return self._axis_mpl, plot_df
531
+
532
+ def stx_median_iqr(
533
+ self,
534
+ data: ArrayLike,
535
+ *,
536
+ x: Optional[ArrayLike] = None,
537
+ track: bool = True,
538
+ id: Optional[str] = None,
539
+ **kwargs,
540
+ ) -> Tuple["Axes", pd.DataFrame]:
541
+ """Plot median line with interquartile range shading.
542
+
543
+ Parameters
544
+ ----------
545
+ data : array-like
546
+ 2D array where each row is an observation and columns are time points.
547
+ x : array-like, optional
548
+ X values. If None, uses integer indices.
549
+ track : bool, default True
550
+ Enable data tracking for reproducibility.
551
+ id : str, optional
552
+ Unique identifier for this plot element.
553
+ **kwargs
554
+ Additional arguments passed to the plot function.
555
+
556
+ Returns
557
+ -------
558
+ tuple
559
+ (Axes, DataFrame) - The axes and a DataFrame with median, Q1, Q3.
560
+
561
+ See Also
562
+ --------
563
+ stx_mean_std : Mean with standard deviation.
564
+ stx_mean_ci : Mean with confidence interval.
565
+
566
+ Examples
567
+ --------
568
+ >>> ax.stx_median_iqr(data_2d, label='Median±IQR')
569
+ """
570
+ method_name = "stx_median_iqr"
571
+
572
+ with self._no_tracking():
573
+ self._axis_mpl, plot_df = self._get_ax_module().stx_median_iqr(
574
+ self._axis_mpl, data, xx=x, **kwargs
575
+ )
576
+
577
+ tracked_dict = {"plot_df": plot_df}
578
+ self._track(track, id, method_name, tracked_dict, None)
579
+ self._apply_scitex_postprocess(method_name)
580
+
581
+ return self._axis_mpl, plot_df
582
+
583
+ def stx_shaded_line(
584
+ self,
585
+ x: ArrayLike,
586
+ y_lower: ArrayLike,
587
+ y_middle: ArrayLike,
588
+ y_upper: ArrayLike,
589
+ *,
590
+ color: Optional[Union[str, List[str]]] = None,
591
+ label: Optional[Union[str, List[str]]] = None,
592
+ track: bool = True,
593
+ id: Optional[str] = None,
594
+ **kwargs,
595
+ ) -> Tuple["Axes", pd.DataFrame]:
596
+ """Plot a line with shaded area between lower and upper bounds.
597
+
598
+ Parameters
599
+ ----------
600
+ x : array-like
601
+ X coordinates.
602
+ y_lower : array-like
603
+ Lower bound of the shaded region.
604
+ y_middle : array-like
605
+ Center line values.
606
+ y_upper : array-like
607
+ Upper bound of the shaded region.
608
+ color : str or list of str, optional
609
+ Color(s) for the line and shading.
610
+ label : str or list of str, optional
611
+ Label(s) for the legend.
612
+ track : bool, default True
613
+ Enable data tracking for reproducibility.
614
+ id : str, optional
615
+ Unique identifier for this plot element.
616
+ **kwargs
617
+ Additional arguments passed to the plot function.
618
+
619
+ Returns
620
+ -------
621
+ tuple
622
+ (Axes, DataFrame) - The axes and a DataFrame with the plotted data.
623
+
624
+ See Also
625
+ --------
626
+ stx_mean_std : Mean with standard deviation.
627
+ stx_fill_between : Simple fill between curves.
628
+
629
+ Examples
630
+ --------
631
+ >>> ax.stx_shaded_line(x, lower, mean, upper, color='blue', label='Result')
632
+ """
633
+ method_name = "stx_shaded_line"
634
+
635
+ with self._no_tracking():
636
+ self._axis_mpl, plot_df = self._get_ax_module().stx_shaded_line(
637
+ self._axis_mpl,
638
+ x,
639
+ y_lower,
640
+ y_middle,
641
+ y_upper,
642
+ color=color,
643
+ label=label,
644
+ **kwargs,
645
+ )
646
+
647
+ tracked_dict = {"plot_df": plot_df}
648
+ self._track(track, id, method_name, tracked_dict, None)
649
+ self._apply_scitex_postprocess(method_name)
650
+
651
+ return self._axis_mpl, plot_df
652
+
653
+
654
+ # EOF