scitex 2.10.2__py3-none-any.whl → 2.11.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 (363) hide show
  1. scitex/__init__.py +1 -4
  2. scitex/__version__.py +1 -1
  3. scitex/_install_guide.py +14 -2
  4. scitex/bridge/_figrecipe.py +1 -1
  5. scitex/bridge/_helpers.py +1 -1
  6. scitex/bridge/_plt_vis.py +1 -1
  7. scitex/bridge/_stats_plt.py +1 -1
  8. scitex/bridge/_stats_vis.py +2 -2
  9. scitex/{fig → canvas}/__init__.py +84 -96
  10. scitex/{fig → canvas}/backend/_parser.py +1 -1
  11. scitex/{fig → canvas}/canvas.py +13 -14
  12. scitex/{fts/_fig/_editor → canvas/editor}/_defaults.py +2 -2
  13. scitex/{fig → canvas}/editor/edit/__init__.py +11 -14
  14. scitex/{fig → canvas}/editor/edit/bundle_resolver.py +56 -48
  15. scitex/{fig → canvas}/editor/edit/editor_launcher.py +79 -26
  16. scitex/{fts/_fig/_editor/_cui/_panel_loader.py → canvas/editor/edit/panel_loader.py} +8 -8
  17. scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/_bbox.py +2 -1
  18. scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/_core.py +84 -84
  19. scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/_renderer.py +7 -6
  20. scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/static/css/features/canvas.css +2 -2
  21. scitex/{fig → canvas}/editor/flask_editor/static/css/features/panel-grid.css +1 -1
  22. scitex/{fig → canvas}/editor/flask_editor/static/js/core/api.js +3 -4
  23. scitex/{fig → canvas}/editor/flask_editor/static/js/editor/preview.js +5 -5
  24. scitex/{fig → canvas}/editor/flask_editor/templates/_html.py +3 -3
  25. scitex/{fig → canvas}/editor/flask_editor/templates/_scripts.py +10 -10
  26. scitex/{fig → canvas}/editor/flask_editor/templates/_styles.py +3 -3
  27. scitex/{fig → canvas}/io/__init__.py +32 -38
  28. scitex/{fig → canvas}/io/_bundle.py +217 -154
  29. scitex/{fig → canvas}/io/_canvas.py +1 -1
  30. scitex/{fig → canvas}/io/_data.py +1 -1
  31. scitex/{fig → canvas}/io/_export.py +1 -1
  32. scitex/{fig → canvas}/io/_load.py +1 -1
  33. scitex/{fig → canvas}/io/_panel.py +1 -1
  34. scitex/{fig → canvas}/io/_save.py +1 -1
  35. scitex/{fig → canvas}/model/__init__.py +1 -1
  36. scitex/{fig → canvas}/model/_annotations.py +1 -1
  37. scitex/{fig → canvas}/model/_axes.py +1 -1
  38. scitex/{fig → canvas}/model/_figure.py +1 -1
  39. scitex/{fig → canvas}/model/_guides.py +1 -1
  40. scitex/{fig → canvas}/model/_plot.py +1 -1
  41. scitex/{fig → canvas}/model/_styles.py +1 -1
  42. scitex/{fig → canvas}/utils/__init__.py +1 -1
  43. scitex/cli/convert.py +10 -6
  44. scitex/diagram/README.md +7 -7
  45. scitex/io/__init__.py +7 -19
  46. scitex/io/_load.py +15 -19
  47. scitex/io/_load_modules/_canvas.py +2 -2
  48. scitex/io/_load_modules/_con.py +5 -5
  49. scitex/io/_load_modules/_eeg.py +16 -12
  50. scitex/io/_save.py +11 -16
  51. scitex/io/_save_modules/__init__.py +6 -10
  52. scitex/io/_save_modules/_canvas.py +3 -3
  53. scitex/io/_save_modules/_plot_bundle.py +112 -0
  54. scitex/io/_save_modules/{_pltz_stx.py → _plot_scitex.py} +7 -7
  55. scitex/io/_save_modules/_stx_bundle.py +16 -16
  56. scitex/io/bundle/README.md +89 -80
  57. scitex/{fts/_bundle/_FTS.py → io/bundle/_Bundle.py} +197 -95
  58. scitex/io/bundle/__init__.py +67 -35
  59. scitex/{fts/_bundle → io/bundle}/_children.py +32 -40
  60. scitex/io/bundle/_core.py +184 -97
  61. scitex/{fts/_bundle/_dataclasses/_Node.py → io/bundle/_dataclasses/_Spec.py} +29 -23
  62. scitex/{fts/_bundle/_dataclasses/_NodeRefs.py → io/bundle/_dataclasses/_SpecRefs.py} +6 -6
  63. scitex/{fts/_bundle → io/bundle}/_dataclasses/__init__.py +4 -4
  64. scitex/{fts/_bundle → io/bundle}/_loader.py +19 -19
  65. scitex/io/bundle/_manifest.py +99 -0
  66. scitex/{fts/_bundle → io/bundle}/_mpl_helpers.py +119 -28
  67. scitex/io/bundle/_nested.py +113 -100
  68. scitex/{fts/_bundle → io/bundle}/_saver.py +13 -14
  69. scitex/{fts/_bundle → io/bundle}/_storage.py +3 -3
  70. scitex/io/bundle/_types.py +41 -16
  71. scitex/{fts/_bundle → io/bundle}/_validation.py +20 -18
  72. scitex/io/bundle/_zip.py +21 -31
  73. scitex/{fts/_kinds → io/bundle/kinds}/_plot/_backend/_parser.py +1 -1
  74. scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Annotations.py +1 -1
  75. scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Axes.py +1 -1
  76. scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Figure.py +1 -1
  77. scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_Guides.py +1 -1
  78. scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Plot.py +1 -1
  79. scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_Styles.py +1 -1
  80. scitex/{fts/_kinds → io/bundle/kinds}/_plot/_utils/_plot_layout.py +1 -1
  81. scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/__init__.py +1 -1
  82. scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_editor/_app.py +1 -1
  83. scitex/{fts/_tables → io/bundle/kinds/_table}/_latex/_export.py +1 -1
  84. scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_figure_exporter.py +1 -1
  85. scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_table_exporter.py +1 -1
  86. scitex/io/bundle/schemas/__init__.py +30 -0
  87. scitex/parallel/_run.py +5 -4
  88. scitex/path/_find.py +60 -83
  89. scitex/path/_get_module_path.py +23 -21
  90. scitex/path/_get_spath.py +6 -27
  91. scitex/path/_getsize.py +23 -9
  92. scitex/path/_increment_version.py +31 -38
  93. scitex/path/_mk_spath.py +26 -29
  94. scitex/path/_path.py +5 -12
  95. scitex/path/_split.py +27 -15
  96. scitex/path/_this_path.py +23 -9
  97. scitex/plt/_subplots/_AxisWrapperMixins/_MatplotlibPlotMixin/__init__.py +2 -1
  98. scitex/plt/_subplots/_AxisWrapperMixins/__init__.py +2 -2
  99. scitex/plt/gallery/_generate.py +76 -50
  100. scitex/plt/io/__init__.py +17 -19
  101. scitex/plt/io/_bundle.py +99 -52
  102. scitex/plt/io/_layered_bundle.py +303 -168
  103. scitex/plt/utils/_csv_column_naming.py +250 -118
  104. scitex/schema/__init__.py +69 -73
  105. scitex/schema/_canvas.py +1 -1
  106. scitex/schema/_stats.py +2 -2
  107. scitex/stats/__init__.py +30 -33
  108. scitex/stats/_schema.py +1 -1
  109. scitex/stats/io/__init__.py +10 -11
  110. scitex/stats/io/_bundle.py +16 -16
  111. {scitex-2.10.2.dist-info → scitex-2.11.0.dist-info}/METADATA +191 -72
  112. {scitex-2.10.2.dist-info → scitex-2.11.0.dist-info}/RECORD +237 -360
  113. scitex/fig/editor/_defaults.py +0 -300
  114. scitex/fig/editor/edit/panel_loader.py +0 -232
  115. scitex/fig/editor/flask_editor/_bbox.py +0 -1299
  116. scitex/fig/editor/flask_editor/_core.py +0 -1429
  117. scitex/fig/editor/flask_editor/_renderer.py +0 -813
  118. scitex/fig/editor/flask_editor/static/css/features/canvas.css +0 -176
  119. scitex/fts/README.md +0 -262
  120. scitex/fts/TODO.md +0 -66
  121. scitex/fts/__init__.py +0 -90
  122. scitex/fts/_bundle/README_IN_BUNDLE.md +0 -102
  123. scitex/fts/_bundle/__init__.py +0 -38
  124. scitex/fts/_bundle/_utils/__init__.py +0 -55
  125. scitex/fts/_bundle/_utils/_const.py +0 -26
  126. scitex/fts/_bundle/_utils/_errors.py +0 -73
  127. scitex/fts/_bundle/_utils/_generate.py +0 -21
  128. scitex/fts/_bundle/_utils/_types.py +0 -76
  129. scitex/fts/_bundle/_zipbundle.py +0 -165
  130. scitex/fts/_fig/__init__.py +0 -22
  131. scitex/fts/_fig/_backend/_parser.py +0 -188
  132. scitex/fts/_fig/_editor/__init__.py +0 -14
  133. scitex/fts/_fig/_editor/_cui/__init__.py +0 -33
  134. scitex/fts/_fig/_editor/_cui/_backend_detector.py +0 -39
  135. scitex/fts/_fig/_editor/_cui/_bundle_resolver.py +0 -366
  136. scitex/fts/_fig/_editor/_cui/_editor_launcher.py +0 -175
  137. scitex/fts/_fig/_editor/_cui/_manual_handler.py +0 -52
  138. scitex/fts/_fig/_editor/_cui/_path_resolver.py +0 -66
  139. scitex/fts/_fig/_editor/_gui/__init__.py +0 -11
  140. scitex/fts/_fig/_editor/_gui/_flask_editor/__init__.py +0 -20
  141. scitex/fts/_fig/_editor/_gui/_flask_editor/_plotter.py +0 -664
  142. scitex/fts/_fig/_editor/_gui/_flask_editor/_utils.py +0 -79
  143. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/base/reset.css +0 -41
  144. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/base/typography.css +0 -16
  145. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/base/variables.css +0 -85
  146. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/buttons.css +0 -217
  147. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/context-menu.css +0 -93
  148. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/dropdown.css +0 -57
  149. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/forms.css +0 -112
  150. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/modal.css +0 -59
  151. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/sections.css +0 -212
  152. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/element-inspector.css +0 -190
  153. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/loading.css +0 -59
  154. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/overlay.css +0 -45
  155. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/panel-grid.css +0 -95
  156. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/selection.css +0 -101
  157. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/statistics.css +0 -138
  158. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/index.css +0 -31
  159. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/layout/container.css +0 -7
  160. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/layout/controls.css +0 -56
  161. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/layout/preview.css +0 -78
  162. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/alignment/axis.js +0 -314
  163. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/alignment/basic.js +0 -107
  164. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/alignment/distribute.js +0 -54
  165. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/canvas.js +0 -172
  166. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/dragging.js +0 -258
  167. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/resize.js +0 -48
  168. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/selection.js +0 -71
  169. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/core/api.js +0 -288
  170. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/core/state.js +0 -143
  171. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/core/utils.js +0 -245
  172. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/dev/element-inspector.js +0 -992
  173. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/bbox.js +0 -339
  174. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/element-drag.js +0 -286
  175. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/overlay.js +0 -371
  176. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/preview.js +0 -293
  177. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/main.js +0 -426
  178. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/shortcuts/context-menu.js +0 -152
  179. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/shortcuts/keyboard.js +0 -265
  180. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/controls.js +0 -184
  181. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/download.js +0 -57
  182. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/help.js +0 -100
  183. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/theme.js +0 -34
  184. scitex/fts/_fig/_editor/_gui/_flask_editor/templates/__init__.py +0 -124
  185. scitex/fts/_fig/_editor/_gui/_flask_editor/templates/_html.py +0 -851
  186. scitex/fts/_fig/_editor/_gui/_flask_editor/templates/_scripts.py +0 -4932
  187. scitex/fts/_fig/_editor/_gui/_flask_editor/templates/_styles.py +0 -1657
  188. scitex/fts/_fig/_editor/_gui/_flask_editor.py +0 -36
  189. scitex/fts/_fig/_models/_Annotations.py +0 -115
  190. scitex/fts/_fig/_models/_Axes.py +0 -152
  191. scitex/fts/_fig/_models/_Figure.py +0 -138
  192. scitex/fts/_fig/_models/_Plot.py +0 -123
  193. scitex/fts/_fig/_utils/_plot_layout.py +0 -397
  194. scitex/fts/_kinds/_figure/_composite.py +0 -345
  195. scitex/fts/_kinds/_plot/_backend/__init__.py +0 -53
  196. scitex/fts/_kinds/_plot/_backend/_export.py +0 -165
  197. scitex/fts/_kinds/_plot/_backend/_render.py +0 -538
  198. scitex/fts/_kinds/_plot/_dataclasses/_ChannelEncoding.py +0 -46
  199. scitex/fts/_kinds/_plot/_dataclasses/_Encoding.py +0 -82
  200. scitex/fts/_kinds/_plot/_dataclasses/_Theme.py +0 -441
  201. scitex/fts/_kinds/_plot/_dataclasses/_TraceEncoding.py +0 -52
  202. scitex/fts/_kinds/_plot/_dataclasses/__init__.py +0 -47
  203. scitex/fts/_kinds/_plot/_models/_Guides.py +0 -104
  204. scitex/fts/_kinds/_plot/_models/_Styles.py +0 -245
  205. scitex/fts/_kinds/_plot/_models/__init__.py +0 -80
  206. scitex/fts/_kinds/_plot/_models/_plot_types/__init__.py +0 -156
  207. scitex/fts/_kinds/_plot/_models/_plot_types/_bar.py +0 -43
  208. scitex/fts/_kinds/_plot/_models/_plot_types/_box.py +0 -38
  209. scitex/fts/_kinds/_plot/_models/_plot_types/_distribution.py +0 -36
  210. scitex/fts/_kinds/_plot/_models/_plot_types/_errorbar.py +0 -60
  211. scitex/fts/_kinds/_plot/_models/_plot_types/_histogram.py +0 -30
  212. scitex/fts/_kinds/_plot/_models/_plot_types/_image.py +0 -61
  213. scitex/fts/_kinds/_plot/_models/_plot_types/_line.py +0 -57
  214. scitex/fts/_kinds/_plot/_models/_plot_types/_scatter.py +0 -30
  215. scitex/fts/_kinds/_plot/_models/_plot_types/_seaborn.py +0 -121
  216. scitex/fts/_kinds/_plot/_models/_plot_types/_violin.py +0 -36
  217. scitex/fts/_kinds/_plot/_utils/__init__.py +0 -129
  218. scitex/fts/_kinds/_plot/_utils/_auto_layout.py +0 -127
  219. scitex/fts/_kinds/_plot/_utils/_calc_bounds.py +0 -111
  220. scitex/fts/_kinds/_plot/_utils/_const_sizes.py +0 -48
  221. scitex/fts/_kinds/_plot/_utils/_convert_coords.py +0 -77
  222. scitex/fts/_kinds/_plot/_utils/_get_template.py +0 -178
  223. scitex/fts/_kinds/_plot/_utils/_normalize.py +0 -73
  224. scitex/fts/_kinds/_plot/_utils/_validate.py +0 -197
  225. scitex/fts/_kinds/_table/_latex/_export.py +0 -279
  226. scitex/fts/_stats/__init__.py +0 -48
  227. scitex/fts/_stats/_dataclasses/_Stats.py +0 -423
  228. scitex/fts/_stats/_dataclasses/__init__.py +0 -48
  229. scitex/fts/_tables/__init__.py +0 -65
  230. scitex/fts/_tables/_latex/__init__.py +0 -93
  231. scitex/fts/_tables/_latex/_editor/__init__.py +0 -11
  232. scitex/fts/_tables/_latex/_editor/_app.py +0 -725
  233. scitex/fts/_tables/_latex/_figure_exporter.py +0 -153
  234. scitex/fts/_tables/_latex/_stats_formatter.py +0 -274
  235. scitex/fts/_tables/_latex/_table_exporter.py +0 -362
  236. scitex/fts/_tables/_latex/_utils.py +0 -369
  237. scitex/fts/_tables/_latex/_validator.py +0 -445
  238. scitex/io/_save_modules/_pltz_bundle.py +0 -356
  239. /scitex/{fig → canvas}/README.md +0 -0
  240. /scitex/{fig → canvas}/backend/__init__.py +0 -0
  241. /scitex/{fig → canvas}/backend/_export.py +0 -0
  242. /scitex/{fig → canvas}/backend/_render.py +0 -0
  243. /scitex/{fig → canvas}/docs/CANVAS_ARCHITECTURE.md +0 -0
  244. /scitex/{fig → canvas}/editor/__init__.py +0 -0
  245. /scitex/{fig → canvas}/editor/_dearpygui_editor.py +0 -0
  246. /scitex/{fig → canvas}/editor/_flask_editor.py +0 -0
  247. /scitex/{fig → canvas}/editor/_mpl_editor.py +0 -0
  248. /scitex/{fig → canvas}/editor/_qt_editor.py +0 -0
  249. /scitex/{fig → canvas}/editor/_tkinter_editor.py +0 -0
  250. /scitex/{fig → canvas}/editor/edit/backend_detector.py +0 -0
  251. /scitex/{fig → canvas}/editor/edit/manual_handler.py +0 -0
  252. /scitex/{fig → canvas}/editor/edit/path_resolver.py +0 -0
  253. /scitex/{fig → canvas}/editor/flask_editor/__init__.py +0 -0
  254. /scitex/{fig → canvas}/editor/flask_editor/_plotter.py +0 -0
  255. /scitex/{fig → canvas}/editor/flask_editor/_utils.py +0 -0
  256. /scitex/{fig → canvas}/editor/flask_editor/static/css/base/reset.css +0 -0
  257. /scitex/{fig → canvas}/editor/flask_editor/static/css/base/typography.css +0 -0
  258. /scitex/{fig → canvas}/editor/flask_editor/static/css/base/variables.css +0 -0
  259. /scitex/{fig → canvas}/editor/flask_editor/static/css/components/buttons.css +0 -0
  260. /scitex/{fig → canvas}/editor/flask_editor/static/css/components/context-menu.css +0 -0
  261. /scitex/{fig → canvas}/editor/flask_editor/static/css/components/dropdown.css +0 -0
  262. /scitex/{fig → canvas}/editor/flask_editor/static/css/components/forms.css +0 -0
  263. /scitex/{fig → canvas}/editor/flask_editor/static/css/components/modal.css +0 -0
  264. /scitex/{fig → canvas}/editor/flask_editor/static/css/components/sections.css +0 -0
  265. /scitex/{fig → canvas}/editor/flask_editor/static/css/features/element-inspector.css +0 -0
  266. /scitex/{fig → canvas}/editor/flask_editor/static/css/features/loading.css +0 -0
  267. /scitex/{fig → canvas}/editor/flask_editor/static/css/features/overlay.css +0 -0
  268. /scitex/{fig → canvas}/editor/flask_editor/static/css/features/selection.css +0 -0
  269. /scitex/{fig → canvas}/editor/flask_editor/static/css/features/statistics.css +0 -0
  270. /scitex/{fig → canvas}/editor/flask_editor/static/css/index.css +0 -0
  271. /scitex/{fig → canvas}/editor/flask_editor/static/css/layout/container.css +0 -0
  272. /scitex/{fig → canvas}/editor/flask_editor/static/css/layout/controls.css +0 -0
  273. /scitex/{fig → canvas}/editor/flask_editor/static/css/layout/preview.css +0 -0
  274. /scitex/{fig → canvas}/editor/flask_editor/static/js/alignment/axis.js +0 -0
  275. /scitex/{fig → canvas}/editor/flask_editor/static/js/alignment/basic.js +0 -0
  276. /scitex/{fig → canvas}/editor/flask_editor/static/js/alignment/distribute.js +0 -0
  277. /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/canvas.js +0 -0
  278. /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/dragging.js +0 -0
  279. /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/resize.js +0 -0
  280. /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/selection.js +0 -0
  281. /scitex/{fig → canvas}/editor/flask_editor/static/js/core/state.js +0 -0
  282. /scitex/{fig → canvas}/editor/flask_editor/static/js/core/utils.js +0 -0
  283. /scitex/{fig → canvas}/editor/flask_editor/static/js/dev/element-inspector.js +0 -0
  284. /scitex/{fig → canvas}/editor/flask_editor/static/js/editor/bbox.js +0 -0
  285. /scitex/{fig → canvas}/editor/flask_editor/static/js/editor/element-drag.js +0 -0
  286. /scitex/{fig → canvas}/editor/flask_editor/static/js/editor/overlay.js +0 -0
  287. /scitex/{fig → canvas}/editor/flask_editor/static/js/main.js +0 -0
  288. /scitex/{fig → canvas}/editor/flask_editor/static/js/shortcuts/context-menu.js +0 -0
  289. /scitex/{fig → canvas}/editor/flask_editor/static/js/shortcuts/keyboard.js +0 -0
  290. /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/controls.js +0 -0
  291. /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/download.js +0 -0
  292. /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/help.js +0 -0
  293. /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/theme.js +0 -0
  294. /scitex/{fig → canvas}/editor/flask_editor/templates/__init__.py +0 -0
  295. /scitex/{fig → canvas}/io/_directory.py +0 -0
  296. /scitex/{fig → canvas}/model/_plot_types.py +0 -0
  297. /scitex/{fig → canvas}/utils/_defaults.py +0 -0
  298. /scitex/{fig → canvas}/utils/_validate.py +0 -0
  299. /scitex/{fts/_bundle → io/bundle}/_conversion/__init__.py +0 -0
  300. /scitex/{fts/_bundle → io/bundle}/_conversion/_bundle2dict.py +0 -0
  301. /scitex/{fts/_bundle → io/bundle}/_conversion/_dict2bundle.py +0 -0
  302. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_Axes.py +0 -0
  303. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_BBox.py +0 -0
  304. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_ColumnDef.py +0 -0
  305. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_DataFormat.py +0 -0
  306. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_DataInfo.py +0 -0
  307. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_DataSource.py +0 -0
  308. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_SizeMM.py +0 -0
  309. /scitex/{fts/_bundle → io/bundle}/_extractors/__init__.py +0 -0
  310. /scitex/{fts/_bundle → io/bundle}/_extractors/_extract_bar.py +0 -0
  311. /scitex/{fts/_bundle → io/bundle}/_extractors/_extract_line.py +0 -0
  312. /scitex/{fts/_bundle → io/bundle}/_extractors/_extract_scatter.py +0 -0
  313. /scitex/{fts/_kinds → io/bundle/kinds}/__init__.py +0 -0
  314. /scitex/{fts/_kinds → io/bundle/kinds}/_figure/__init__.py +0 -0
  315. /scitex/{fts/_fig → io/bundle/kinds/_figure}/_composite.py +0 -0
  316. /scitex/{fts/_kinds → io/bundle/kinds}/_plot/__init__.py +0 -0
  317. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_backend/__init__.py +0 -0
  318. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_backend/_export.py +0 -0
  319. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_backend/_render.py +0 -0
  320. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_ChannelEncoding.py +0 -0
  321. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_Encoding.py +0 -0
  322. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_Theme.py +0 -0
  323. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_TraceEncoding.py +0 -0
  324. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/__init__.py +0 -0
  325. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/__init__.py +0 -0
  326. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/__init__.py +0 -0
  327. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_bar.py +0 -0
  328. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_box.py +0 -0
  329. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_distribution.py +0 -0
  330. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_errorbar.py +0 -0
  331. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_histogram.py +0 -0
  332. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_image.py +0 -0
  333. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_line.py +0 -0
  334. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_scatter.py +0 -0
  335. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_seaborn.py +0 -0
  336. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_violin.py +0 -0
  337. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/__init__.py +0 -0
  338. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_auto_layout.py +0 -0
  339. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_calc_bounds.py +0 -0
  340. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_const_sizes.py +0 -0
  341. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_convert_coords.py +0 -0
  342. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_get_template.py +0 -0
  343. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_normalize.py +0 -0
  344. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_validate.py +0 -0
  345. /scitex/{fts/_kinds → io/bundle/kinds}/_shape/__init__.py +0 -0
  346. /scitex/{fts/_kinds → io/bundle/kinds}/_stats/__init__.py +0 -0
  347. /scitex/{fts/_kinds → io/bundle/kinds}/_stats/_dataclasses/_Stats.py +0 -0
  348. /scitex/{fts/_kinds → io/bundle/kinds}/_stats/_dataclasses/__init__.py +0 -0
  349. /scitex/{fts/_kinds → io/bundle/kinds}/_table/__init__.py +0 -0
  350. /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_editor/__init__.py +0 -0
  351. /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_stats_formatter.py +0 -0
  352. /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_utils.py +0 -0
  353. /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_validator.py +0 -0
  354. /scitex/{fts/_kinds → io/bundle/kinds}/_text/__init__.py +0 -0
  355. /scitex/{fts/_schemas → io/bundle/schemas}/data_info.schema.json +0 -0
  356. /scitex/{fts/_schemas → io/bundle/schemas}/encoding.schema.json +0 -0
  357. /scitex/{fts/_schemas → io/bundle/schemas}/node.schema.json +0 -0
  358. /scitex/{fts/_schemas → io/bundle/schemas}/render_manifest.schema.json +0 -0
  359. /scitex/{fts/_schemas → io/bundle/schemas}/stats.schema.json +0 -0
  360. /scitex/{fts/_schemas → io/bundle/schemas}/theme.schema.json +0 -0
  361. {scitex-2.10.2.dist-info → scitex-2.11.0.dist-info}/WHEEL +0 -0
  362. {scitex-2.10.2.dist-info → scitex-2.11.0.dist-info}/entry_points.txt +0 -0
  363. {scitex-2.10.2.dist-info → scitex-2.11.0.dist-info}/licenses/LICENSE +0 -0
scitex/__init__.py CHANGED
@@ -164,10 +164,7 @@ cloud = _LazyModule("cloud")
164
164
  config = _LazyModule("config")
165
165
  audio = _LazyModule("audio")
166
166
  msword = _LazyModule("msword")
167
- fts = _LazyModule(
168
- "fts"
169
- ) # Figure-Table-Statistics - single source of truth for bundle schemas
170
- fsb = fts # Legacy alias (FSB -> FTS)
167
+ fts = _LazyModule("fts") # Bundle schemas module
171
168
 
172
169
  # Centralized path configuration - eager loaded for convenience
173
170
  # Usage: scitex.PATHS.logs, scitex.PATHS.cache, etc.
scitex/__version__.py CHANGED
@@ -8,6 +8,6 @@ __FILE__ = "./src/scitex/__version__.py"
8
8
  __DIR__ = os.path.dirname(__FILE__)
9
9
  # ----------------------------------------
10
10
 
11
- __version__ = "2.10.2"
11
+ __version__ = "2.11.0"
12
12
 
13
13
  # EOF
scitex/_install_guide.py CHANGED
@@ -16,33 +16,45 @@ from ._optional_deps import PACKAGE_TO_EXTRA, check_optional_deps
16
16
  F = TypeVar("F", bound=Callable[..., Any])
17
17
 
18
18
  # Module name -> (required_packages, extra_name, description)
19
+ # Synced with pyproject.toml [project.optional-dependencies]
19
20
  MODULE_REQUIREMENTS: Dict[str, Tuple[List[str], str, str]] = {
20
21
  "ai": (["openai", "anthropic"], "ai", "LLM APIs"),
21
22
  "audio": (["pyttsx3", "gtts"], "audio", "Text-to-Speech"),
22
23
  "benchmark": (["psutil"], "benchmark", "Performance Monitoring"),
24
+ "bridge": (["matplotlib", "scipy"], "bridge", "External System Integration"),
23
25
  "browser": (["playwright"], "browser", "Web Automation"),
24
26
  "capture": (["mss", "PIL"], "capture", "Screenshot Capture"),
25
27
  "cli": (["click"], "cli", "Command Line Interface"),
28
+ "cloud": (["matplotlib"], "cloud", "Cloud Service Integration"),
29
+ "config": (["pyyaml"], "config", "Configuration Management"),
26
30
  "db": (["sqlalchemy"], "db", "Database"),
27
31
  "decorators": (["joblib"], "decorators", "Caching Utilities"),
32
+ "devtools": (["joblib", "ruamel.yaml"], "devtools", "Development Tools"),
33
+ "diagram": (["pyyaml"], "diagram", "Diagram Generation"),
28
34
  "dsp": (["scipy", "sounddevice"], "dsp", "Signal Processing"),
29
- "fts": (["matplotlib", "PIL", "flask"], "fts", "Figures/Tables/Stats"),
35
+ "dt": (["matplotlib"], "dt", "Date/Time Utilities"),
30
36
  "gen": (["IPython", "h5py"], "gen", "General Utilities"),
31
37
  "git": (["git"], "git", "Git Operations"),
32
38
  "io": (["h5py", "openpyxl"], "io", "File I/O"),
33
39
  "linalg": (["scipy", "sympy"], "linalg", "Linear Algebra"),
40
+ "logging": (["matplotlib"], "logging", "Enhanced Logging"),
34
41
  "msword": (["docx"], "msword", "MS Word"),
35
- "neuro": (["mne"], "neuro", "Neuroscience"),
36
42
  "nn": (["torch"], "nn", "Neural Networks"),
43
+ "parallel": (["tqdm"], "parallel", "Parallel Processing"),
37
44
  "path": (["git"], "path", "Path Utilities"),
45
+ "pd": (["xarray"], "pd", "Pandas Utilities"),
38
46
  "plt": (["matplotlib", "seaborn"], "plt", "Plotting"),
39
47
  "repro": (["torch"], "repro", "Reproducibility"),
40
48
  "resource": (["psutil"], "resource", "Resource Monitoring"),
41
49
  "scholar": (["selenium", "bs4", "playwright"], "scholar", "Paper Management"),
50
+ "session": (["matplotlib", "pyyaml"], "session", "Session Management"),
51
+ "sh": (["matplotlib"], "sh", "Shell Utilities"),
42
52
  "stats": (["scipy", "statsmodels"], "stats", "Statistical Analysis"),
43
53
  "str": (["natsort"], "str", "String Utilities"),
54
+ "tex": (["matplotlib"], "tex", "LaTeX Utilities"),
44
55
  "torch": (["torch"], "torch", "PyTorch Support"),
45
56
  "types": (["xarray"], "types", "Type Utilities"),
57
+ "utils": (["h5py", "natsort"], "utils", "General Utilities"),
46
58
  "web": (["aiohttp", "bs4"], "web", "Web Utilities"),
47
59
  "writer": (["yq"], "writer", "Academic Writing"),
48
60
  }
@@ -63,7 +63,7 @@ def save_with_recipe(
63
63
  dict
64
64
  Paths to saved files: {'image': Path, 'csv': Path, 'recipe': Path}
65
65
  """
66
- from scitex.fts._bundle._storage import get_storage
66
+ from scitex.io.bundle._bundle._storage import get_storage
67
67
 
68
68
  path = Path(path)
69
69
  result = {}
scitex/bridge/_helpers.py CHANGED
@@ -118,7 +118,7 @@ def _detect_backend(target) -> Literal["plt", "vis"]:
118
118
  """
119
119
  # Check for vis FigureModel
120
120
  try:
121
- from scitex.fig.model import FigureModel
121
+ from scitex.canvas.model import FigureModel
122
122
  if isinstance(target, FigureModel):
123
123
  return "vis"
124
124
  except ImportError:
scitex/bridge/_plt_vis.py CHANGED
@@ -16,7 +16,7 @@ import warnings
16
16
 
17
17
  # Legacy model imports - may not be available (deleted module)
18
18
  try:
19
- from scitex.fig.model import (
19
+ from scitex.canvas.model import (
20
20
  FigureModel,
21
21
  AxesModel,
22
22
  PlotModel,
@@ -29,7 +29,7 @@ from typing import Optional, Dict, Any, Union, List
29
29
  import warnings
30
30
 
31
31
  # Import GUI classes from FTS (single source of truth)
32
- from scitex.fts._stats import Position
32
+ from scitex.io.bundle._stats import Position
33
33
 
34
34
  # StatResult is now a dict - the GUI-specific StatResult is deprecated
35
35
  StatResult = dict
@@ -27,11 +27,11 @@ When bridging between plt and vis, coordinate transformation may be needed.
27
27
  from typing import Optional, Dict, Any, List, Tuple
28
28
 
29
29
  # Import GUI classes from FTS (single source of truth)
30
- from scitex.fts._stats import Position, StatPositioning
30
+ from scitex.io.bundle._stats import Position, StatPositioning
31
31
 
32
32
  # Legacy model imports - may not be available
33
33
  try:
34
- from scitex.fig.model import AnnotationModel, FigureModel, AxesModel, TextStyle
34
+ from scitex.canvas.model import AnnotationModel, FigureModel, AxesModel, TextStyle
35
35
  VIS_MODEL_AVAILABLE = True
36
36
  except ImportError:
37
37
  AnnotationModel = None
@@ -1,9 +1,8 @@
1
1
  #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
2
  # Timestamp: 2025-12-08
4
3
  # File: ./src/scitex/vis/__init__.py
5
4
  """
6
- SciTeX Visualization Module (scitex.fig)
5
+ SciTeX Visualization Module (scitex.canvas)
7
6
 
8
7
  Canvas-based composition of publication-quality figures.
9
8
 
@@ -19,7 +18,7 @@ Quick Start:
19
18
  >>> # Create canvas and add panels
20
19
  >>> stx.vis.create_canvas("/output", "fig1")
21
20
  >>> stx.vis.add_panel("/output", "fig1", "panel_a", source="plot.png",
22
- ... position=(10, 10), size=(80, 60), label="A")
21
+ ... xy_mm=(10, 10), size_mm=(80, 60), label="A")
23
22
  >>>
24
23
  >>> # Save with stx.io (auto-exports PNG/PDF/SVG)
25
24
  >>> canvas = stx.io.load("/output/fig1.canvas")
@@ -34,46 +33,31 @@ Directory Structure:
34
33
  """
35
34
 
36
35
  # Submodules for advanced use
37
- from . import io
38
- from . import model
39
- from . import backend
40
- from . import utils
41
- from . import editor
36
+ from . import backend, editor, io, model, utils
42
37
 
43
38
  # Canvas class
44
39
  from .canvas import Canvas
45
40
 
41
+ # Editor
42
+ from .editor import edit
43
+
44
+ # Data integrity
45
+ # Export (usually handled by stx.io.save, but available for explicit use)
46
46
  # =============================================================================
47
47
  # Primary API (minimal, reusable, flexible)
48
48
  # =============================================================================
49
-
50
49
  # Canvas operations
51
- from .io import (
52
- ensure_canvas_directory as create_canvas,
53
- get_canvas_directory_path as get_canvas_path,
54
- canvas_directory_exists as canvas_exists,
55
- list_canvas_directories as list_canvases,
56
- delete_canvas_directory as delete_canvas,
57
- )
58
-
59
50
  # Panel operations
60
- from .io import (
61
- add_panel_from_scitex,
62
- add_panel_from_image,
63
- update_panel,
64
- remove_panel,
65
- list_panels,
66
- )
67
-
68
- # Export (usually handled by stx.io.save, but available for explicit use)
51
+ from .io import add_panel_from_image, add_panel_from_scitex
52
+ from .io import canvas_directory_exists as canvas_exists
53
+ from .io import delete_canvas_directory as delete_canvas
54
+ from .io import ensure_canvas_directory as create_canvas
69
55
  from .io import export_canvas_to_file as export_canvas
70
-
71
- # Data integrity
56
+ from .io import get_canvas_directory_path as get_canvas_path
57
+ from .io import list_canvas_directories as list_canvases
58
+ from .io import list_panels, remove_panel, update_panel
72
59
  from .io import verify_all_data_hashes as verify_data
73
60
 
74
- # Editor
75
- from .editor import edit
76
-
77
61
 
78
62
  # =============================================================================
79
63
  # Convenience wrapper for add_panel
@@ -83,8 +67,8 @@ def add_panel(
83
67
  canvas_name,
84
68
  panel_name,
85
69
  source,
86
- position=(0, 0),
87
- size=(50, 50),
70
+ xy_mm=(0, 0),
71
+ size_mm=(50, 50),
88
72
  label="",
89
73
  bundle=False,
90
74
  **kwargs,
@@ -102,10 +86,10 @@ def add_panel(
102
86
  Name for the panel
103
87
  source : str or Path
104
88
  Source file (PNG, JPG, SVG)
105
- position : tuple
106
- (x_mm, y_mm) position on canvas
107
- size : tuple
108
- (width_mm, height_mm) panel size
89
+ xy_mm : tuple
90
+ (x_mm, y_mm) position on canvas in millimeters
91
+ size_mm : tuple
92
+ (width_mm, height_mm) panel size in millimeters
109
93
  label : str
110
94
  Panel label (A, B, C...)
111
95
  bundle : bool
@@ -117,8 +101,8 @@ def add_panel(
117
101
 
118
102
  source = Path(source)
119
103
  panel_properties = {
120
- "position": {"x_mm": position[0], "y_mm": position[1]},
121
- "size": {"width_mm": size[0], "height_mm": size[1]},
104
+ "position": {"x_mm": xy_mm[0], "y_mm": xy_mm[1]},
105
+ "size": {"width_mm": size_mm[0], "height_mm": size_mm[1]},
122
106
  **kwargs,
123
107
  }
124
108
  if label:
@@ -147,32 +131,33 @@ def add_panel(
147
131
 
148
132
 
149
133
  # =============================================================================
150
- # .figz Bundle Support
134
+ # .figure Bundle Support
151
135
  # =============================================================================
152
136
 
153
- def save_figz(
137
+
138
+ def save_figure(
154
139
  panels,
155
140
  path,
156
141
  spec=None,
157
142
  as_zip=None,
158
143
  ):
159
144
  """
160
- Save panels as a .figz publication figure bundle.
145
+ Save panels as a .figure publication figure bundle.
161
146
 
162
147
  Parameters
163
148
  ----------
164
149
  panels : dict
165
- Dictionary mapping panel IDs to .pltz bundle paths or data.
166
- Example: {"A": "timecourse.pltz.d", "B": "barplot.pltz.d"}
150
+ Dictionary mapping panel IDs to .plot bundle paths or data.
151
+ Example: {"A": "timecourse.plot", "B": "barplot.plot"}
167
152
  path : str or Path
168
- Output path (e.g., "Figure1.figz" or "Figure1.figz.d").
169
- - Path ending with ".figz" creates ZIP archive (default behavior)
170
- - Path ending with ".figz.d" creates directory bundle
153
+ Output path (e.g., "Figure1.figure.zip" or "Figure1.figure").
154
+ - Path ending with ".zip" creates ZIP archive
155
+ - Path ending with ".figure" creates directory bundle
171
156
  spec : dict, optional
172
157
  Figure specification. Auto-generated if None.
173
158
  as_zip : bool, optional
174
159
  If True, save as ZIP archive. If False, save as directory.
175
- Default: auto-detect from path (ZIP for .figz, directory for .figz.d).
160
+ Default: auto-detect from path.
176
161
 
177
162
  Returns
178
163
  -------
@@ -181,24 +166,25 @@ def save_figz(
181
166
 
182
167
  Examples
183
168
  --------
184
- >>> import scitex.fig as sfig
169
+ >>> import scitex.canvas as sfig
185
170
  >>> panels = {
186
- ... "A": "timecourse.pltz.d",
187
- ... "B": "barplot.pltz.d"
171
+ ... "A": "timecourse.plot",
172
+ ... "B": "barplot.plot"
188
173
  ... }
189
- >>> sfig.save_figz(panels, "Figure1.figz") # Creates ZIP
190
- >>> sfig.save_figz(panels, "Figure1.figz.d") # Creates directory
174
+ >>> sfig.save_figure(panels, "Figure1.figure.zip") # Creates ZIP
175
+ >>> sfig.save_figure(panels, "Figure1.figure") # Creates directory
191
176
  """
192
- from pathlib import Path
193
177
  import shutil
194
- from scitex.io.bundle import save, BundleType
178
+ from pathlib import Path
179
+
180
+ from scitex.io.bundle import BundleType, save
195
181
 
196
182
  p = Path(path)
197
183
  spath = str(path)
198
184
 
199
185
  # Auto-detect as_zip from path suffix if not specified
200
186
  if as_zip is None:
201
- as_zip = not spath.endswith(".d")
187
+ as_zip = spath.endswith(".zip")
202
188
 
203
189
  # Auto-generate spec if not provided
204
190
  if spec is None:
@@ -206,28 +192,28 @@ def save_figz(
206
192
 
207
193
  # Build bundle data - pass source paths directly for file copying
208
194
  bundle_data = {
209
- 'spec': spec,
210
- 'plots': {},
195
+ "spec": spec,
196
+ "plots": {},
211
197
  }
212
198
 
213
199
  # Pass source paths directly (not loaded data) to preserve all files
214
- for panel_id, pltz_source in panels.items():
215
- pltz_path = Path(pltz_source)
216
- if pltz_path.exists():
200
+ for panel_id, plot_source in panels.items():
201
+ plot_path = Path(plot_source)
202
+ if plot_path.exists():
217
203
  # Store source path for direct copying
218
- bundle_data['plots'][panel_id] = str(pltz_path)
204
+ bundle_data["plots"][panel_id] = str(plot_path)
219
205
 
220
- return save(bundle_data, p, bundle_type=BundleType.FIGZ, as_zip=as_zip)
206
+ return save(bundle_data, p, bundle_type=BundleType.FIGURE, as_zip=as_zip)
221
207
 
222
208
 
223
- def load_figz(path):
209
+ def load_figure(path):
224
210
  """
225
- Load a .figz bundle.
211
+ Load a .figure bundle.
226
212
 
227
213
  Parameters
228
214
  ----------
229
215
  path : str or Path
230
- Path to .figz bundle (directory or ZIP).
216
+ Path to .figure bundle (directory or ZIP).
231
217
 
232
218
  Returns
233
219
  -------
@@ -238,7 +224,7 @@ def load_figz(path):
238
224
 
239
225
  Examples
240
226
  --------
241
- >>> figure = scitex.fig.load_figz("Figure1.figz.d")
227
+ >>> figure = scitex.canvas.load_figure("Figure1.figure")
242
228
  >>> print(figure['spec']['figure']['title'])
243
229
  >>> panel_a = figure['panels']['A']
244
230
  >>> print(panel_a['spec'], panel_a['data'])
@@ -247,19 +233,19 @@ def load_figz(path):
247
233
 
248
234
  bundle = load(path)
249
235
 
250
- if bundle['type'] != 'figz':
251
- raise ValueError(f"Not a .figz bundle: {path}")
236
+ if bundle["type"] != "figure":
237
+ raise ValueError(f"Not a .figure bundle: {path}")
252
238
 
253
239
  result = {
254
- 'spec': bundle.get('spec', {}),
255
- 'panels': {},
240
+ "spec": bundle.get("spec", {}),
241
+ "panels": {},
256
242
  }
257
243
 
258
244
  # Return spec and data for each panel (reconstruction is optional)
259
- for panel_id, plot_bundle in bundle.get('plots', {}).items():
260
- result['panels'][panel_id] = {
261
- 'spec': plot_bundle.get('spec', {}),
262
- 'data': plot_bundle.get('data'),
245
+ for panel_id, plot_bundle in bundle.get("plots", {}).items():
246
+ result["panels"][panel_id] = {
247
+ "spec": plot_bundle.get("spec", {}),
248
+ "data": plot_bundle.get("data"),
263
249
  }
264
250
 
265
251
  return result
@@ -270,17 +256,17 @@ def _generate_figure_spec(panels):
270
256
  from pathlib import Path
271
257
 
272
258
  spec = {
273
- 'schema': {'name': 'scitex.fig.figure', 'version': '1.0.0'},
274
- 'figure': {
275
- 'id': 'figure',
276
- 'title': '',
277
- 'caption': '',
278
- 'styles': {
279
- 'size': {'width_mm': 180, 'height_mm': 120},
280
- 'background': '#ffffff',
259
+ "schema": {"name": "scitex.canvas.figure", "version": "1.0.0"},
260
+ "figure": {
261
+ "id": "figure",
262
+ "title": "",
263
+ "caption": "",
264
+ "styles": {
265
+ "size": {"width_mm": 180, "height_mm": 120},
266
+ "background": "#ffffff",
281
267
  },
282
268
  },
283
- 'panels': [],
269
+ "panels": [],
284
270
  }
285
271
 
286
272
  # Auto-layout panels
@@ -305,15 +291,17 @@ def _generate_figure_spec(panels):
305
291
  x = margin + col * (panel_w + margin)
306
292
  y = margin + row * (panel_h + margin)
307
293
 
308
- # Note: save_bundle uses panel_id for the directory name (e.g., A.pltz.d)
309
- spec['panels'].append({
310
- 'id': panel_id,
311
- 'label': panel_id,
312
- 'caption': '',
313
- 'plot': f"{panel_id}.pltz.d",
314
- 'position': {'x_mm': x, 'y_mm': y},
315
- 'size': {'width_mm': panel_w, 'height_mm': panel_h},
316
- })
294
+ # Note: save_bundle uses panel_id for the directory name (e.g., A.plot)
295
+ spec["panels"].append(
296
+ {
297
+ "id": panel_id,
298
+ "label": panel_id,
299
+ "caption": "",
300
+ "plot": f"{panel_id}.plot",
301
+ "position": {"x_mm": x, "y_mm": y},
302
+ "size": {"width_mm": panel_w, "height_mm": panel_h},
303
+ }
304
+ )
317
305
 
318
306
  return spec
319
307
 
@@ -344,9 +332,9 @@ __all__ = [
344
332
  "verify_data",
345
333
  # Editor
346
334
  "edit",
347
- # .figz bundle
348
- "save_figz",
349
- "load_figz",
335
+ # .figure bundle
336
+ "save_figure",
337
+ "load_figure",
350
338
  ]
351
339
 
352
340
  # EOF
@@ -161,7 +161,7 @@ def validate_figure_json(fig_json: Dict[str, Any]) -> bool:
161
161
 
162
162
  Examples
163
163
  --------
164
- >>> from scitex.fig.backend import validate_figure_json
164
+ >>> from scitex.canvas.backend import validate_figure_json
165
165
  >>> fig_json = {"width_mm": 180, "height_mm": 120, "axes": []}
166
166
  >>> validate_figure_json(fig_json)
167
167
  True
@@ -1,16 +1,15 @@
1
1
  #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
2
  # Timestamp: 2025-12-08
4
3
  # File: ./src/scitex/vis/canvas.py
5
4
  """
6
- Canvas class for scitex.fig.
5
+ Canvas class for scitex.canvas.
7
6
 
8
7
  Provides object-oriented interface to canvas operations.
9
8
  """
10
9
 
11
- from pathlib import Path
12
- from typing import Dict, Any, Union, List, Optional
13
10
  from datetime import datetime
11
+ from pathlib import Path
12
+ from typing import Any, Dict, List, Union
14
13
 
15
14
 
16
15
  class Canvas:
@@ -35,8 +34,8 @@ class Canvas:
35
34
  >>> # Create canvas
36
35
  >>> canvas = stx.vis.Canvas("fig1", width_mm=180, height_mm=120)
37
36
  >>> # Add panels
38
- >>> canvas.add_panel("panel_a", "plot.png", position=(10, 10), size=(80, 50), label="A")
39
- >>> canvas.add_panel("panel_b", "chart.png", position=(100, 10), size=(80, 50), label="B")
37
+ >>> canvas.add_panel("panel_a", "plot.png", xy_mm=(10, 10), size_mm=(80, 50), label="A")
38
+ >>> canvas.add_panel("panel_b", "chart.png", xy_mm=(100, 10), size_mm=(80, 50), label="B")
40
39
  >>> # Save (auto-exports PNG/PDF/SVG)
41
40
  >>> stx.io.save(canvas, "/output/fig1.canvas")
42
41
  """
@@ -82,8 +81,8 @@ class Canvas:
82
81
  self,
83
82
  panel_name: str,
84
83
  source: Union[str, Path],
85
- position: tuple = (0, 0),
86
- size: tuple = (50, 50),
84
+ xy_mm: tuple = (0, 0),
85
+ size_mm: tuple = (50, 50),
87
86
  label: str = "",
88
87
  **kwargs,
89
88
  ) -> "Canvas":
@@ -96,10 +95,10 @@ class Canvas:
96
95
  Name for the panel
97
96
  source : str or Path
98
97
  Path to source file (PNG, JPG, SVG)
99
- position : tuple
100
- (x_mm, y_mm) position on canvas
101
- size : tuple
102
- (width_mm, height_mm) panel size
98
+ xy_mm : tuple
99
+ (x_mm, y_mm) position on canvas in millimeters
100
+ size_mm : tuple
101
+ (width_mm, height_mm) panel size in millimeters
103
102
  label : str
104
103
  Panel label (A, B, C...)
105
104
  **kwargs
@@ -120,8 +119,8 @@ class Canvas:
120
119
  panel_entry = {
121
120
  "name": panel_name,
122
121
  "type": panel_type,
123
- "position": {"x_mm": position[0], "y_mm": position[1]},
124
- "size": {"width_mm": size[0], "height_mm": size[1]},
122
+ "position": {"x_mm": xy_mm[0], "y_mm": xy_mm[1]},
123
+ "size": {"width_mm": size_mm[0], "height_mm": size_mm[1]},
125
124
  "z_index": len(self._panels),
126
125
  "rotation_deg": kwargs.get("rotation_deg", 0),
127
126
  "opacity": kwargs.get("opacity", 1.0),
@@ -197,7 +197,7 @@ def extract_defaults_from_metadata(metadata):
197
197
  # Extract traces information - check multiple possible locations
198
198
  traces = metadata.get("traces", [])
199
199
 
200
- # Also check axes[].lines (pltz bundle format)
200
+ # Also check axes[].lines (plot bundle format)
201
201
  if not traces and isinstance(axes, list) and len(axes) > 0:
202
202
  ax = axes[0]
203
203
  lines = ax.get("lines", [])
@@ -225,7 +225,7 @@ def extract_defaults_from_metadata(metadata):
225
225
  # Extract legend information from multiple possible locations
226
226
  legend = metadata.get("legend", {})
227
227
 
228
- # Also check selectable_regions.axes[0].legend (pltz bundle format)
228
+ # Also check selectable_regions.axes[0].legend (plot bundle format)
229
229
  if not legend:
230
230
  selectable = metadata.get("selectable_regions", {})
231
231
  sel_axes = selectable.get("axes", [])
@@ -8,24 +8,21 @@
8
8
  This module provides the main edit() function and supporting utilities for:
9
9
  - Backend detection and selection (flask, dearpygui, qt, tkinter, mpl)
10
10
  - Path resolution for figure files (.json, .csv, .png)
11
- - Bundle resolution for .pltz and .figz formats
11
+ - Bundle resolution for .plot and .figure formats
12
12
  - Panel data loading for multi-panel figures
13
13
  - Manual override handling (.manual.json)
14
14
  """
15
15
 
16
- from .editor_launcher import edit
17
- from .backend_detector import (
18
- detect_best_backend,
19
- print_available_backends,
20
- )
21
- from .path_resolver import resolve_figure_paths
16
+ from .backend_detector import detect_best_backend, print_available_backends
22
17
  from .bundle_resolver import (
23
- resolve_pltz_bundle,
24
- resolve_figz_bundle,
25
- resolve_layered_pltz_bundle,
18
+ resolve_figure_bundle,
19
+ resolve_layered_plot_bundle,
20
+ resolve_plot_bundle,
26
21
  )
27
- from .panel_loader import load_panel_data
22
+ from .editor_launcher import edit
28
23
  from .manual_handler import compute_file_hash, save_manual_overrides
24
+ from .panel_loader import load_panel_data
25
+ from .path_resolver import resolve_figure_paths
29
26
 
30
27
  __all__ = [
31
28
  # Main entry point
@@ -36,9 +33,9 @@ __all__ = [
36
33
  # Path resolution
37
34
  "resolve_figure_paths",
38
35
  # Bundle resolution
39
- "resolve_pltz_bundle",
40
- "resolve_figz_bundle",
41
- "resolve_layered_pltz_bundle",
36
+ "resolve_plot_bundle",
37
+ "resolve_figure_bundle",
38
+ "resolve_layered_plot_bundle",
42
39
  # Panel loading
43
40
  "load_panel_data",
44
41
  # Manual overrides