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
@@ -82,9 +82,7 @@ def get_conda_packages(run_lambda):
82
82
  if get_platform() == "win32":
83
83
  system_root = os.environ.get("SYSTEMROOT", "C:\\Windows")
84
84
  findstr_cmd = os.path.join(system_root, "System32", "findstr")
85
- grep_cmd = r'{} /R "torch numpy cudatoolkit soumith mkl magma"'.format(
86
- findstr_cmd
87
- )
85
+ grep_cmd = rf'{findstr_cmd} /R "torch numpy cudatoolkit soumith mkl magma"'
88
86
  else:
89
87
  grep_cmd = r'grep "torch\|numpy\|cudatoolkit\|soumith\|mkl\|magma"'
90
88
  conda = os.environ.get("CONDA_EXE", "conda")
@@ -148,7 +146,7 @@ def get_cudnn_version(run_lambda):
148
146
  system_root = os.environ.get("SYSTEMROOT", "C:\\Windows")
149
147
  cuda_path = os.environ.get("CUDA_PATH", "%CUDA_PATH%")
150
148
  where_cmd = os.path.join(system_root, "System32", "where")
151
- cudnn_cmd = '{} /R "{}\\bin" cudnn*.dll'.format(where_cmd, cuda_path)
149
+ cudnn_cmd = f'{where_cmd} /R "{cuda_path}\\bin" cudnn*.dll'
152
150
  elif get_platform() == "darwin":
153
151
  # CUDA libraries and drivers can be found in /usr/local/cuda/. See
154
152
  # https://docs.nvidia.com/cuda/cuda-installation-guide-mac-os-x/index.html#install
@@ -172,11 +170,11 @@ def get_cudnn_version(run_lambda):
172
170
  if not files_set:
173
171
  return None
174
172
  # Alphabetize the result because the order is non-deterministic otherwise
175
- files = list(sorted(files_set))
173
+ files = sorted(files_set)
176
174
  if len(files) == 1:
177
175
  return files[0]
178
176
  result = "\n".join(files)
179
- return "Probably one of the following:\n{}".format(result)
177
+ return f"Probably one of the following:\n{result}"
180
178
 
181
179
 
182
180
  def get_nvidia_smi():
@@ -220,7 +218,7 @@ def get_windows_version(run_lambda):
220
218
  findstr_cmd = os.path.join(system_root, "System32", "findstr")
221
219
  return run_and_read_all(
222
220
  run_lambda,
223
- "{} os get Caption | {} /v Caption".format(wmic_cmd, findstr_cmd),
221
+ f"{wmic_cmd} os get Caption | {findstr_cmd} /v Caption",
224
222
  )
225
223
 
226
224
 
@@ -248,20 +246,20 @@ def get_os(run_lambda):
248
246
  version = get_mac_version(run_lambda)
249
247
  if version is None:
250
248
  return None
251
- return "macOS {} ({})".format(version, machine())
249
+ return f"macOS {version} ({machine()})"
252
250
 
253
251
  if platform == "linux":
254
252
  # Ubuntu/Debian based
255
253
  desc = get_lsb_version(run_lambda)
256
254
  if desc is not None:
257
- return "{} ({})".format(desc, machine())
255
+ return f"{desc} ({machine()})"
258
256
 
259
257
  # Try reading /etc/*-release
260
258
  desc = check_release_file(run_lambda)
261
259
  if desc is not None:
262
- return "{} ({})".format(desc, machine())
260
+ return f"{desc} ({machine()})"
263
261
 
264
- return "{} ({})".format(platform, machine())
262
+ return f"{platform} ({machine()})"
265
263
 
266
264
  # Unknown platform
267
265
  return platform
@@ -276,7 +274,7 @@ def get_pip_packages(run_lambda):
276
274
  if get_platform() == "win32":
277
275
  system_root = os.environ.get("SYSTEMROOT", "C:\\Windows")
278
276
  findstr_cmd = os.path.join(system_root, "System32", "findstr")
279
- grep_cmd = r'{} /R "numpy torch"'.format(findstr_cmd)
277
+ grep_cmd = rf'{findstr_cmd} /R "numpy torch"'
280
278
  else:
281
279
  grep_cmd = r'grep "torch\|numpy"'
282
280
  return run_and_read_all(run_lambda, pip + " list --format=freeze | " + grep_cmd)
@@ -329,11 +327,7 @@ def get_env_info():
329
327
  return SystemEnv(
330
328
  torch_version=version_str,
331
329
  is_debug_build=debug_mode_str,
332
- python_version="{}.{} ({}-bit runtime)".format(
333
- sys.version_info[0],
334
- sys.version_info[1],
335
- sys.maxsize.bit_length() + 1,
336
- ),
330
+ python_version=f"{sys.version_info[0]}.{sys.version_info[1]} ({sys.maxsize.bit_length() + 1}-bit runtime)",
337
331
  is_cuda_available=cuda_available_str,
338
332
  cuda_compiled_version=cuda_version_str,
339
333
  cuda_runtime_version=get_running_cuda_version(run_lambda),
@@ -408,7 +402,7 @@ def pretty_str(envinfo):
408
402
  def maybe_start_on_next_line(string):
409
403
  # If `string` is multiline, prepend a \n to it.
410
404
  if string is not None and len(string.split("\n")) > 1:
411
- return "\n{}\n".format(string)
405
+ return f"\n{string}\n"
412
406
  return string
413
407
 
414
408
  mutable_dict = envinfo._asdict()
@@ -452,7 +446,7 @@ def pretty_str(envinfo):
452
446
  # If they were previously None, they'll show up as ie '[conda] Could not collect'
453
447
  if mutable_dict["pip_packages"]:
454
448
  mutable_dict["pip_packages"] = prepend(
455
- mutable_dict["pip_packages"], "[{}] ".format(envinfo.pip_version)
449
+ mutable_dict["pip_packages"], f"[{envinfo.pip_version}] "
456
450
  )
457
451
  if mutable_dict["conda_packages"]:
458
452
  mutable_dict["conda_packages"] = prepend(
@@ -473,9 +467,3 @@ def main():
473
467
 
474
468
  if __name__ == "__main__":
475
469
  main()
476
-
477
-
478
- def main():
479
- print("Collecting environment information...")
480
- env_info = get_env_info()
481
- print(env_info)
scitex/schema/__init__.py CHANGED
@@ -1,237 +1,226 @@
1
1
  #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
2
  # File: ./src/scitex/schema/__init__.py
4
- # Timestamp: "2025-12-13 (ywatanabe)"
3
+ # Timestamp: "2025-12-20 (ywatanabe)"
5
4
  """
6
- SciTeX Schema Module - Central source of truth for cross-module data structures.
7
-
8
- This module provides standardized schemas for data that crosses module boundaries:
9
- - Plot specifications (plt fig cloud) - NEW layered architecture
10
- - Figure specifications (fig ↔ writer ↔ cloud)
11
- - Statistical results (stats plt ↔ fig)
12
- - Canvas metadata (fig io cloud)
13
-
14
- Design Principles:
15
- - Anything serialized to JSON/disk → defined here
16
- - Anything shared across modules → defined here
17
- - Internal module implementations → stay per-module
18
- - Canonical units: ratio (0-1) for axes bbox, mm for panel size
19
- - px data is ALWAYS derived/cached, never source of truth
20
-
21
- Usage:
22
- # New layered plot schema (recommended)
23
- from scitex.schema import PltzSpec, PltzStyle, PltzGeometry
24
-
25
- # Legacy figure model
26
- from scitex.schema import FigureSpec, StatResult, CanvasSpec
27
- from scitex.schema import validate_figure, validate_stat_result
5
+ SciTeX Schema Module - DEPRECATED
6
+
7
+ This module is scheduled for removal. All schemas are being consolidated
8
+ in scitex.fts as the single source of truth.
9
+
10
+ For new code, import from scitex.fts:
11
+ from scitex.fts import FTS, Node, Encoding, Theme, Stats
12
+
13
+ This module exists temporarily for backward compatibility.
28
14
  """
29
15
 
30
- # Schema version for all cross-module specs
31
- SCHEMA_VERSION = "0.2.0"
16
+ import warnings
32
17
 
33
- # =============================================================================
34
- # Plot Schemas - NEW Layered Architecture (SOURCE OF TRUTH for .pltz files)
35
- # =============================================================================
36
- from scitex.schema._plot import (
37
- # Version constants
38
- PLOT_SPEC_VERSION,
39
- PLOT_STYLE_VERSION,
40
- PLOT_GEOMETRY_VERSION,
41
- # DPI fallback for legacy data
42
- DPI_FALLBACK,
43
- # Type aliases
44
- TraceType,
45
- CoordinateSpace,
46
- LegendLocation,
47
- # Bbox classes
48
- BboxRatio,
49
- BboxPx,
50
- # Spec classes (canonical) - prefixed with Pltz to avoid collision
51
- TraceSpec as PltzTraceSpec,
52
- AxesLimits as PltzAxesLimits,
53
- AxesLabels as PltzAxesLabels,
54
- AxesSpecItem as PltzAxesItem,
55
- DataSourceSpec as PltzDataSource,
56
- PlotSpec as PltzSpec,
57
- # Style classes
58
- TraceStyleSpec as PltzTraceStyle,
59
- ThemeSpec as PltzTheme,
60
- FontSpec as PltzFont,
61
- SizeSpec as PltzSize,
62
- LegendSpec as PltzLegendSpec,
63
- PlotStyle as PltzStyle,
64
- # Geometry classes (cache)
65
- RenderedArtist as PltzRenderedArtist,
66
- RenderedAxes as PltzRenderedAxes,
67
- HitRegionEntry as PltzHitRegion,
68
- SelectableRegion as PltzSelectableRegion,
69
- PlotGeometry as PltzGeometry,
70
- # Manifest
71
- RenderManifest as PltzRenderManifest,
18
+ warnings.warn(
19
+ "scitex.schema is deprecated. Import from scitex.fts instead. "
20
+ "This module will be removed in a future version.",
21
+ DeprecationWarning,
22
+ stacklevel=2
72
23
  )
73
24
 
25
+ # Schema version
26
+ SCHEMA_VERSION = "0.2.0"
27
+
74
28
  # =============================================================================
75
- # Figure Schemas (re-exported from fig.model for central access)
76
- # These are for figure COMPOSITION (multi-panel), not individual plots
29
+ # Re-export from scitex.fts (new single source of truth)
77
30
  # =============================================================================
78
- from scitex.fig.model import (
79
- # Core models
80
- FigureModel as FigureSpec,
81
- AxesModel as FigAxesSpec,
82
- PlotModel as FigPlotSpec,
83
- AnnotationModel as AnnotationSpec,
84
- GuideModel as GuideSpec,
85
- # Style models
86
- PlotStyle as FigPlotStyle,
87
- AxesStyle as FigAxesStyle,
88
- GuideStyle,
89
- TextStyle,
90
- # Style utilities
91
- copy_plot_style,
92
- copy_axes_style,
93
- copy_guide_style,
94
- copy_text_style,
95
- apply_style_to_plots,
96
- )
31
+ try:
32
+ from scitex.fts import (
33
+ # Core bundle classes
34
+ FTS,
35
+ Node,
36
+ BBox,
37
+ SizeMM,
38
+ DataInfo,
39
+ # Encoding and Theme
40
+ Encoding,
41
+ Theme,
42
+ # Stats
43
+ Stats,
44
+ )
45
+ except ImportError:
46
+ # FTS not fully configured yet
47
+ FTS = None
48
+ Node = None
49
+ Encoding = None
50
+ Theme = None
51
+ Stats = None
97
52
 
98
53
  # =============================================================================
99
- # Statistical Result Schemas (SOURCE OF TRUTH)
54
+ # Independent schemas (still defined here temporarily)
55
+ # These will be migrated to scitex.fts in subsequent phases
100
56
  # =============================================================================
57
+
58
+ # Stats schema (GUI-focused version - to be merged with FTS Stats)
101
59
  from scitex.schema._stats import (
102
- # Type aliases
60
+ Position,
103
61
  PositionMode,
104
- UnitType,
105
- SymbolStyle,
106
- # Classes
107
- StatResult,
108
62
  StatPositioning,
63
+ StatResult,
109
64
  StatStyling,
110
- Position,
111
- # Convenience function
65
+ SymbolStyle,
66
+ UnitType,
112
67
  create_stat_result,
113
68
  )
114
69
 
115
- # =============================================================================
116
- # Canvas Schemas
117
- # =============================================================================
118
- from scitex.schema._canvas import (
119
- CanvasSpec,
120
- PanelSpec,
121
- CanvasAnnotationSpec,
122
- CanvasTitleSpec,
123
- CanvasCaptionSpec,
124
- CanvasMetadataSpec,
125
- DataFileSpec,
70
+ # Encoding schema
71
+ from scitex.schema._encoding import (
72
+ ENCODING_VERSION,
73
+ ChannelBinding,
74
+ PlotEncoding,
75
+ TraceEncoding,
126
76
  )
127
77
 
128
- # =============================================================================
129
- # Validation Functions
130
- # =============================================================================
78
+ # Figure elements
79
+ from scitex.schema._figure_elements import (
80
+ FIGURE_ELEMENTS_VERSION,
81
+ Caption,
82
+ FigureTitle,
83
+ PanelInfo,
84
+ PanelLabels,
85
+ generate_caption,
86
+ generate_caption_latex,
87
+ generate_caption_markdown,
88
+ )
89
+
90
+ # Theme schema
91
+ from scitex.schema._theme import (
92
+ THEME_VERSION,
93
+ ColorScheme,
94
+ LegendStyle,
95
+ LineDefaults,
96
+ MarkerDefaults,
97
+ PlotTheme,
98
+ Typography,
99
+ )
100
+ from scitex.schema._theme import TraceStyle as ThemeTraceStyle
101
+
102
+ # Plot schema
103
+ from scitex.schema._plot import (
104
+ DPI_FALLBACK,
105
+ PLOT_GEOMETRY_VERSION,
106
+ PLOT_SPEC_VERSION,
107
+ PLOT_STYLE_VERSION,
108
+ BboxPx,
109
+ BboxRatio,
110
+ CoordinateSpace,
111
+ LegendLocation,
112
+ TraceType,
113
+ )
114
+ from scitex.schema._plot import AxesLabels as PltzAxesLabels
115
+ from scitex.schema._plot import AxesLimits as PltzAxesLimits
116
+ from scitex.schema._plot import AxesSpecItem as PltzAxesItem
117
+ from scitex.schema._plot import DataSourceSpec as PltzDataSource
118
+ from scitex.schema._plot import FontSpec as PltzFont
119
+ from scitex.schema._plot import HitRegionEntry as PltzHitRegion
120
+ from scitex.schema._plot import LegendSpec as PltzLegendSpec
121
+ from scitex.schema._plot import PlotGeometry as PltzGeometry
122
+ from scitex.schema._plot import PlotSpec as PltzSpec
123
+ from scitex.schema._plot import PlotStyle as PltzStyle
124
+ from scitex.schema._plot import RenderedArtist as PltzRenderedArtist
125
+ from scitex.schema._plot import RenderedAxes as PltzRenderedAxes
126
+ from scitex.schema._plot import RenderManifest as PltzRenderManifest
127
+ from scitex.schema._plot import SelectableRegion as PltzSelectableRegion
128
+ from scitex.schema._plot import SizeSpec as PltzSize
129
+ from scitex.schema._plot import ThemeSpec as PltzTheme
130
+ from scitex.schema._plot import TraceSpec as PltzTraceSpec
131
+ from scitex.schema._plot import TraceStyleSpec as PltzTraceStyle
132
+
133
+ # Validation (temporarily keep here)
131
134
  from scitex.schema._validation import (
132
- validate_figure,
135
+ ValidationError,
133
136
  validate_axes,
137
+ validate_color,
138
+ validate_figure,
134
139
  validate_plot,
135
140
  validate_stat_result,
136
- validate_canvas,
137
- validate_color,
138
- ValidationError,
139
141
  )
140
142
 
141
143
  # =============================================================================
142
- # Public API
144
+ # Public API (maintaining backward compatibility)
143
145
  # =============================================================================
144
146
  __all__ = [
145
147
  # Version
146
148
  "SCHEMA_VERSION",
147
- # ==========================================================================
148
- # NEW: Plot Schemas (layered architecture for .pltz files)
149
- # ==========================================================================
150
- # Version constants
149
+ # FTS re-exports
150
+ "FTS",
151
+ "Node",
152
+ "BBox",
153
+ "SizeMM",
154
+ "DataInfo",
155
+ "Encoding",
156
+ "Theme",
157
+ "Stats",
158
+ # Plot specs
151
159
  "PLOT_SPEC_VERSION",
152
160
  "PLOT_STYLE_VERSION",
153
161
  "PLOT_GEOMETRY_VERSION",
154
- # Type aliases
155
162
  "TraceType",
156
163
  "CoordinateSpace",
157
164
  "LegendLocation",
158
- # Bbox classes
159
165
  "BboxRatio",
160
166
  "BboxPx",
161
- # Spec classes (canonical)
162
167
  "PltzTraceSpec",
163
168
  "PltzAxesLimits",
164
169
  "PltzAxesLabels",
165
170
  "PltzAxesItem",
166
171
  "PltzDataSource",
167
172
  "PltzSpec",
168
- # Style classes
169
173
  "PltzTraceStyle",
170
174
  "PltzTheme",
171
175
  "PltzFont",
172
176
  "PltzSize",
173
177
  "PltzLegendSpec",
174
178
  "PltzStyle",
175
- # Geometry classes (cache)
176
179
  "PltzRenderedArtist",
177
180
  "PltzRenderedAxes",
178
181
  "PltzHitRegion",
179
182
  "PltzSelectableRegion",
180
183
  "PltzGeometry",
181
- # Manifest
182
184
  "PltzRenderManifest",
183
- # ==========================================================================
184
- # Figure specs (for multi-panel composition)
185
- # ==========================================================================
186
- "FigureSpec",
187
- "FigAxesSpec",
188
- "FigPlotSpec",
189
- "AnnotationSpec",
190
- "GuideSpec",
191
- # Style specs
192
- "FigPlotStyle",
193
- "FigAxesStyle",
194
- "GuideStyle",
195
- "TextStyle",
196
- # Style utilities
197
- "copy_plot_style",
198
- "copy_axes_style",
199
- "copy_guide_style",
200
- "copy_text_style",
201
- "apply_style_to_plots",
202
- # ==========================================================================
203
- # Stats type aliases
204
- # ==========================================================================
185
+ # Encoding
186
+ "ENCODING_VERSION",
187
+ "ChannelBinding",
188
+ "TraceEncoding",
189
+ "PlotEncoding",
190
+ # Theme
191
+ "THEME_VERSION",
192
+ "ColorScheme",
193
+ "Typography",
194
+ "LineDefaults",
195
+ "MarkerDefaults",
196
+ "ThemeTraceStyle",
197
+ "LegendStyle",
198
+ "PlotTheme",
199
+ # Figure elements
200
+ "FIGURE_ELEMENTS_VERSION",
201
+ "FigureTitle",
202
+ "Caption",
203
+ "PanelLabels",
204
+ "PanelInfo",
205
+ "generate_caption",
206
+ "generate_caption_latex",
207
+ "generate_caption_markdown",
208
+ # Stats
205
209
  "PositionMode",
206
210
  "UnitType",
207
211
  "SymbolStyle",
208
- # Stats specs
209
212
  "StatResult",
210
213
  "StatPositioning",
211
214
  "StatStyling",
212
215
  "Position",
213
216
  "create_stat_result",
214
- # ==========================================================================
215
- # Canvas specs
216
- # ==========================================================================
217
- "CanvasSpec",
218
- "PanelSpec",
219
- "CanvasAnnotationSpec",
220
- "CanvasTitleSpec",
221
- "CanvasCaptionSpec",
222
- "CanvasMetadataSpec",
223
- "DataFileSpec",
224
- # ==========================================================================
225
217
  # Validation
226
- # ==========================================================================
227
218
  "validate_figure",
228
219
  "validate_axes",
229
220
  "validate_plot",
230
221
  "validate_stat_result",
231
- "validate_canvas",
232
222
  "validate_color",
233
223
  "ValidationError",
234
224
  ]
235
225
 
236
-
237
226
  # EOF