scitex 2.10.3__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.3.dist-info → scitex-2.11.0.dist-info}/METADATA +190 -73
  112. {scitex-2.10.3.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.3.dist-info → scitex-2.11.0.dist-info}/WHEEL +0 -0
  362. {scitex-2.10.3.dist-info → scitex-2.11.0.dist-info}/entry_points.txt +0 -0
  363. {scitex-2.10.3.dist-info → scitex-2.11.0.dist-info}/licenses/LICENSE +0 -0
@@ -24,10 +24,10 @@ def generate(
24
24
  save_csv=True,
25
25
  save_png=True,
26
26
  save_svg=True,
27
- save_pltz=True,
27
+ save_plot=True,
28
28
  verbose=True,
29
29
  ):
30
- """Generate gallery plots with CSVs and optional .pltz bundles.
30
+ """Generate gallery plots with CSVs and optional .plot bundles.
31
31
 
32
32
  Parameters
33
33
  ----------
@@ -49,8 +49,8 @@ def generate(
49
49
  Whether to save PNG image files.
50
50
  save_svg : bool
51
51
  Whether to save SVG image files for element selection.
52
- save_pltz : bool
53
- Whether to save .pltz bundles (reproducible plot packages).
52
+ save_plot : bool
53
+ Whether to save .plot bundles (reproducible plot packages).
54
54
  verbose : bool
55
55
  Print progress messages.
56
56
 
@@ -78,7 +78,7 @@ def generate(
78
78
  if verbose:
79
79
  print(f"Generating {len(plots_to_generate)} plots to {output_dir}")
80
80
 
81
- results = {"png": [], "svg": [], "csv": [], "pltz": [], "errors": []}
81
+ results = {"png": [], "svg": [], "csv": [], "plot": [], "errors": []}
82
82
 
83
83
  for plot_name in plots_to_generate:
84
84
  if plot_name not in PLOT_FUNCTIONS:
@@ -102,31 +102,34 @@ def generate(
102
102
  # Generate plot
103
103
  fig, ax = plot_func(fig, ax, stx)
104
104
 
105
- # Save as .pltz bundle - this is the single source of truth
105
+ # Save as .plot bundle - this is the single source of truth
106
106
  # All other formats (PNG, SVG, CSV, hitmap) are extracted from the bundle
107
- pltz_path = cat_dir / f"{plot_name}.pltz.d"
108
- stx.io.save(fig, pltz_path, dpi=dpi)
107
+ plot_path = cat_dir / f"{plot_name}.plot"
108
+ stx.io.save(fig, plot_path, dpi=dpi)
109
109
 
110
110
  if verbose:
111
- print(f" [PLTZ] {pltz_path}")
111
+ print(f" [PLTZ] {plot_path}")
112
112
 
113
113
  # Extract files from bundle to gallery directory
114
- # The pltz bundle contains: plot.png, plot.svg, plot.pdf, plot.csv, plot.json, plot_hitmap.png
114
+ # The plot bundle contains: plot.png, plot.svg, plot.pdf, plot.csv, plot.json, plot_hitmap.png
115
115
  import shutil
116
116
 
117
117
  if save_png:
118
- bundle_png = pltz_path / "plot.png"
118
+ bundle_png = plot_path / "plot.png"
119
119
  gallery_png = cat_dir / f"{plot_name}.png"
120
120
  if bundle_png.exists():
121
121
  shutil.copy(bundle_png, gallery_png)
122
122
  results["png"].append(str(gallery_png))
123
123
  if verbose:
124
124
  from PIL import Image
125
+
125
126
  with Image.open(gallery_png) as img:
126
- print(f" [PNG] {gallery_png} ({img.size[0]}x{img.size[1]})")
127
+ print(
128
+ f" [PNG] {gallery_png} ({img.size[0]}x{img.size[1]})"
129
+ )
127
130
 
128
131
  if save_csv:
129
- bundle_csv = pltz_path / "plot.csv"
132
+ bundle_csv = plot_path / "plot.csv"
130
133
  gallery_csv = cat_dir / f"{plot_name}.csv"
131
134
  if bundle_csv.exists():
132
135
  shutil.copy(bundle_csv, gallery_csv)
@@ -135,7 +138,7 @@ def generate(
135
138
  print(f" [CSV] {gallery_csv}")
136
139
 
137
140
  if save_svg:
138
- bundle_svg = pltz_path / "plot.svg"
141
+ bundle_svg = plot_path / "plot.svg"
139
142
  gallery_svg = cat_dir / f"{plot_name}.svg"
140
143
  if bundle_svg.exists():
141
144
  shutil.copy(bundle_svg, gallery_svg)
@@ -144,28 +147,31 @@ def generate(
144
147
  print(f" [SVG] {gallery_svg}")
145
148
 
146
149
  # Copy hitmap from bundle
147
- bundle_hitmap = pltz_path / "plot_hitmap.png"
150
+ bundle_hitmap = plot_path / "plot_hitmap.png"
148
151
  gallery_hitmap = cat_dir / f"{plot_name}_hitmap.png"
149
152
  if bundle_hitmap.exists():
150
153
  shutil.copy(bundle_hitmap, gallery_hitmap)
151
154
  if verbose:
152
155
  from PIL import Image
156
+
153
157
  with Image.open(gallery_hitmap) as img:
154
- print(f" [HITMAP] {gallery_hitmap} ({img.size[0]}x{img.size[1]})")
158
+ print(
159
+ f" [HITMAP] {gallery_hitmap} ({img.size[0]}x{img.size[1]})"
160
+ )
155
161
 
156
162
  # Copy and update JSON from bundle
157
- bundle_json = pltz_path / "plot.json"
163
+ bundle_json = plot_path / "plot.json"
158
164
  gallery_json = cat_dir / f"{plot_name}.json"
159
165
  if bundle_json.exists():
160
166
  shutil.copy(bundle_json, gallery_json)
161
167
  # Add element_bboxes to the copied JSON
162
168
  _add_element_bboxes_to_json(fig, ax, dpi, gallery_json, verbose)
163
169
 
164
- if save_pltz:
165
- results["pltz"].append(str(pltz_path))
170
+ if save_plot:
171
+ results["plot"].append(str(plot_path))
166
172
  else:
167
173
  # Remove bundle if not requested
168
- shutil.rmtree(pltz_path)
174
+ shutil.rmtree(plot_path)
169
175
 
170
176
  stx.plt.close(fig._fig_mpl if hasattr(fig, "_fig_mpl") else fig)
171
177
 
@@ -175,7 +181,9 @@ def generate(
175
181
  print(f" [ERROR] {plot_name}: {e}")
176
182
 
177
183
  if verbose:
178
- print(f"\nGenerated: {len(results['png'])} PNG, {len(results['svg'])} SVG, {len(results['csv'])} CSV, {len(results['pltz'])} PLTZ")
184
+ print(
185
+ f"\nGenerated: {len(results['png'])} PNG, {len(results['svg'])} SVG, {len(results['csv'])} CSV, {len(results['plot'])} PLTZ"
186
+ )
179
187
  if results["errors"]:
180
188
  print(f"Errors: {len(results['errors'])}")
181
189
 
@@ -229,11 +237,12 @@ def _add_element_bboxes_to_json(fig, ax, dpi, json_path, verbose=True):
229
237
  Print progress messages
230
238
  """
231
239
  from PIL import Image
240
+
232
241
  from scitex.plt.utils.metadata._geometry_extraction import (
233
242
  extract_axes_bbox_px,
234
243
  extract_line_geometry,
235
- extract_scatter_geometry,
236
244
  extract_polygon_geometry,
245
+ extract_scatter_geometry,
237
246
  )
238
247
 
239
248
  try:
@@ -249,7 +258,7 @@ def _add_element_bboxes_to_json(fig, ax, dpi, json_path, verbose=True):
249
258
  renderer = mpl_fig.canvas.get_renderer()
250
259
 
251
260
  # Get saved image dimensions (needed for coordinate transformation)
252
- png_path = json_path.with_suffix('.png')
261
+ png_path = json_path.with_suffix(".png")
253
262
  if png_path.exists():
254
263
  with Image.open(png_path) as img:
255
264
  img_width, img_height = img.size
@@ -267,26 +276,28 @@ def _add_element_bboxes_to_json(fig, ax, dpi, json_path, verbose=True):
267
276
  return
268
277
 
269
278
  # Load existing JSON
270
- with open(json_path, 'r') as f:
279
+ with open(json_path, "r") as f:
271
280
  metadata = json.load(f)
272
281
 
273
282
  # Add element_bboxes
274
- metadata['element_bboxes'] = element_bboxes
283
+ metadata["element_bboxes"] = element_bboxes
275
284
 
276
285
  # Also ensure figure_size_px is present
277
- if 'dimensions' not in metadata:
278
- metadata['dimensions'] = {}
279
- metadata['dimensions']['figure_size_px'] = {
280
- 'width': img_width,
281
- 'height': img_height
286
+ if "dimensions" not in metadata:
287
+ metadata["dimensions"] = {}
288
+ metadata["dimensions"]["figure_size_px"] = {
289
+ "width": img_width,
290
+ "height": img_height,
282
291
  }
283
292
 
284
293
  # Save updated JSON
285
- with open(json_path, 'w') as f:
294
+ with open(json_path, "w") as f:
286
295
  json.dump(metadata, f, indent=4)
287
296
 
288
297
  if verbose:
289
- print(f" [BBOXES] Added {len(element_bboxes)} element bboxes to {json_path.name}")
298
+ print(
299
+ f" [BBOXES] Added {len(element_bboxes)} element bboxes to {json_path.name}"
300
+ )
290
301
 
291
302
  except Exception as e:
292
303
  if verbose:
@@ -323,8 +334,12 @@ def _extract_element_bboxes_for_gallery(fig, ax, renderer, img_width, img_height
323
334
  """Get element bbox in image pixel coordinates."""
324
335
  try:
325
336
  bbox = element.get_window_extent(renderer)
326
- if not (np.isfinite(bbox.x0) and np.isfinite(bbox.x1) and
327
- np.isfinite(bbox.y0) and np.isfinite(bbox.y1)):
337
+ if not (
338
+ np.isfinite(bbox.x0)
339
+ and np.isfinite(bbox.x1)
340
+ and np.isfinite(bbox.y0)
341
+ and np.isfinite(bbox.y1)
342
+ ):
328
343
  return
329
344
 
330
345
  elem_x0_inches = bbox.x0 / fig.dpi
@@ -447,7 +462,9 @@ def _extract_element_bboxes_for_gallery(fig, ax, renderer, img_width, img_height
447
462
  return bboxes
448
463
 
449
464
 
450
- def _generate_and_save_hitmap(fig, dpi, hitmap_path, json_path, verbose=True, crop_box=None):
465
+ def _generate_and_save_hitmap(
466
+ fig, dpi, hitmap_path, json_path, verbose=True, crop_box=None
467
+ ):
451
468
  """Generate hitmap PNG and add color_map to JSON.
452
469
 
453
470
  The hitmap is generated at the same size as the PNG by:
@@ -471,6 +488,7 @@ def _generate_and_save_hitmap(fig, dpi, hitmap_path, json_path, verbose=True, cr
471
488
  If provided, applies the same crop to hitmap for exact size matching.
472
489
  """
473
490
  from PIL import Image
491
+
474
492
  from scitex.plt.utils._hitmap import generate_hitmap_id_colors
475
493
 
476
494
  try:
@@ -492,10 +510,10 @@ def _generate_and_save_hitmap(fig, dpi, hitmap_path, json_path, verbose=True, cr
492
510
  rgb[:, :, 0] = (hitmap_array >> 16) & 0xFF
493
511
  rgb[:, :, 1] = (hitmap_array >> 8) & 0xFF
494
512
  rgb[:, :, 2] = hitmap_array & 0xFF
495
- hitmap_full = Image.fromarray(rgb, mode='RGB')
513
+ hitmap_full = Image.fromarray(rgb, mode="RGB")
496
514
 
497
515
  # Save full hitmap first (before cropping)
498
- hitmap_full.save(hitmap_path, format='PNG')
516
+ hitmap_full.save(hitmap_path, format="PNG")
499
517
 
500
518
  if verbose:
501
519
  print(f" [HITMAP] Full size: {w}x{h}")
@@ -503,6 +521,7 @@ def _generate_and_save_hitmap(fig, dpi, hitmap_path, json_path, verbose=True, cr
503
521
  # Apply same crop as PNG if crop_box provided
504
522
  if crop_box is not None:
505
523
  from scitex.plt.utils._crop import crop
524
+
506
525
  crop(
507
526
  str(hitmap_path),
508
527
  output_path=str(hitmap_path),
@@ -515,45 +534,52 @@ def _generate_and_save_hitmap(fig, dpi, hitmap_path, json_path, verbose=True, cr
515
534
  print(f" [HITMAP] Cropped to: {cropped.size[0]}x{cropped.size[1]}")
516
535
 
517
536
  # Validate sizes match
518
- png_path = hitmap_path.parent / hitmap_path.name.replace('_hitmap.png', '.png')
537
+ png_path = hitmap_path.parent / hitmap_path.name.replace("_hitmap.png", ".png")
519
538
  if png_path.exists():
520
539
  with Image.open(png_path) as png_img, Image.open(hitmap_path) as hitmap_img:
521
540
  png_size = png_img.size
522
541
  hitmap_size = hitmap_img.size
523
542
  if png_size != hitmap_size:
524
- print(f" [ERROR] Size mismatch! PNG={png_size}, Hitmap={hitmap_size}")
525
- raise ValueError(f"Hitmap size {hitmap_size} doesn't match PNG size {png_size}")
543
+ print(
544
+ f" [ERROR] Size mismatch! PNG={png_size}, Hitmap={hitmap_size}"
545
+ )
546
+ raise ValueError(
547
+ f"Hitmap size {hitmap_size} doesn't match PNG size {png_size}"
548
+ )
526
549
  elif verbose:
527
- print(f" [HITMAP] Size validated: {hitmap_size[0]}x{hitmap_size[1]} (matches PNG)")
550
+ print(
551
+ f" [HITMAP] Size validated: {hitmap_size[0]}x{hitmap_size[1]} (matches PNG)"
552
+ )
528
553
 
529
554
  if verbose:
530
555
  print(f" [HITMAP] {hitmap_path.name} ({len(color_map)} elements)")
531
556
 
532
557
  # Add hitmap_color_map to JSON
533
558
  if json_path.exists():
534
- with open(json_path, 'r') as f:
559
+ with open(json_path, "r") as f:
535
560
  metadata = json.load(f)
536
561
 
537
562
  # Store color_map with string keys for JSON compatibility
538
- metadata['hitmap_color_map'] = {str(k): v for k, v in color_map.items()}
539
- metadata['hitmap_file'] = hitmap_path.name
563
+ metadata["hitmap_color_map"] = {str(k): v for k, v in color_map.items()}
564
+ metadata["hitmap_file"] = hitmap_path.name
540
565
 
541
566
  # Store crop_box in metadata for reference
542
567
  if crop_box is not None:
543
- metadata['hitmap_crop_box'] = {
544
- 'left': int(crop_box[0]),
545
- 'upper': int(crop_box[1]),
546
- 'right': int(crop_box[2]),
547
- 'lower': int(crop_box[3]),
568
+ metadata["hitmap_crop_box"] = {
569
+ "left": int(crop_box[0]),
570
+ "upper": int(crop_box[1]),
571
+ "right": int(crop_box[2]),
572
+ "lower": int(crop_box[3]),
548
573
  }
549
574
 
550
- with open(json_path, 'w') as f:
575
+ with open(json_path, "w") as f:
551
576
  json.dump(metadata, f, indent=4)
552
577
 
553
578
  except Exception as e:
554
579
  if verbose:
555
580
  print(f" [WARN] Could not generate hitmap: {e}")
556
581
  import traceback
582
+
557
583
  traceback.print_exc()
558
584
 
559
585
 
scitex/plt/io/__init__.py CHANGED
@@ -1,19 +1,18 @@
1
1
  #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
2
  # Timestamp: "2025-12-13 (ywatanabe)"
4
3
  # File: /home/ywatanabe/proj/scitex-code/src/scitex/plt/io/__init__.py
5
4
 
6
5
  """
7
- I/O operations for scitex.plt - Plot bundles (.pltz).
6
+ I/O operations for scitex.plt - Plot bundles (.plot).
8
7
 
9
8
  This module handles:
10
- - .pltz bundle load/save operations (legacy and layered formats)
9
+ - .plot bundle load/save operations (legacy and layered formats)
11
10
  - CSV data export/import
12
11
  - Hitmap generation and storage
13
12
  - Bundle overview generation
14
13
 
15
14
  Layered Format (v2.0):
16
- plot.pltz.d/
15
+ plot.plot/
17
16
  spec.json # Semantic: WHAT to plot
18
17
  style.json # Appearance: HOW it looks
19
18
  data.csv # Raw data
@@ -22,30 +21,29 @@ Layered Format (v2.0):
22
21
  """
23
22
 
24
23
  from ._bundle import (
25
- validate_pltz_spec,
26
- load_pltz_bundle,
27
- save_pltz_bundle,
24
+ PLOT_SCHEMA_SPEC,
28
25
  generate_bundle_overview,
29
- PLTZ_SCHEMA_SPEC,
26
+ load_plot_bundle,
27
+ save_plot_bundle,
28
+ validate_plot_spec,
30
29
  )
31
-
32
30
  from ._layered_bundle import (
33
- save_layered_pltz_bundle,
34
- load_layered_pltz_bundle,
35
- merge_layered_bundle,
36
31
  is_layered_bundle,
32
+ load_layered_plot_bundle,
33
+ merge_layered_bundle,
34
+ save_layered_plot_bundle,
37
35
  )
38
36
 
39
37
  __all__ = [
40
- # Legacy bundle operations
41
- "validate_pltz_spec",
42
- "load_pltz_bundle",
43
- "save_pltz_bundle",
38
+ # Bundle operations
39
+ "validate_plot_spec",
40
+ "load_plot_bundle",
41
+ "save_plot_bundle",
44
42
  "generate_bundle_overview",
45
- "PLTZ_SCHEMA_SPEC",
43
+ "PLOT_SCHEMA_SPEC",
46
44
  # Layered bundle operations (v2.0)
47
- "save_layered_pltz_bundle",
48
- "load_layered_pltz_bundle",
45
+ "save_layered_plot_bundle",
46
+ "load_layered_plot_bundle",
49
47
  "merge_layered_bundle",
50
48
  "is_layered_bundle",
51
49
  ]