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/plt/io/_bundle.py CHANGED
@@ -1,10 +1,9 @@
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/_bundle.py
5
4
 
6
5
  """
7
- SciTeX .pltz Bundle I/O - Plot-specific bundle operations.
6
+ SciTeX .plot Bundle I/O - Plot-specific bundle operations.
8
7
 
9
8
  Handles:
10
9
  - Plot specification validation
@@ -24,15 +23,15 @@ import numpy as np
24
23
  from scitex.plt.styles import get_preview_dpi
25
24
 
26
25
  __all__ = [
27
- "validate_pltz_spec",
28
- "load_pltz_bundle",
29
- "save_pltz_bundle",
26
+ "validate_plot_spec",
27
+ "load_plot_bundle",
28
+ "save_plot_bundle",
30
29
  "generate_bundle_overview",
31
- "PLTZ_SCHEMA_SPEC",
30
+ "PLOT_SCHEMA_SPEC",
32
31
  ]
33
32
 
34
- # Schema specification for .pltz bundles
35
- PLTZ_SCHEMA_SPEC = {
33
+ # Schema specification for .plot bundles
34
+ PLOT_SCHEMA_SPEC = {
36
35
  "name": "scitex.plt.plot",
37
36
  "version": "1.0.0",
38
37
  "required_fields": ["schema"],
@@ -47,8 +46,8 @@ PLTZ_SCHEMA_SPEC = {
47
46
  }
48
47
 
49
48
 
50
- def validate_pltz_spec(spec: Dict[str, Any]) -> List[str]:
51
- """Validate .pltz-specific fields.
49
+ def validate_plot_spec(spec: Dict[str, Any]) -> List[str]:
50
+ """Validate .plot-specific fields.
52
51
 
53
52
  Args:
54
53
  spec: The specification dictionary to validate.
@@ -66,8 +65,8 @@ def validate_pltz_spec(spec: Dict[str, Any]) -> List[str]:
66
65
  return errors
67
66
 
68
67
 
69
- def load_pltz_bundle(bundle_dir: Path) -> Dict[str, Any]:
70
- """Load .pltz bundle contents from directory.
68
+ def load_plot_bundle(bundle_dir: Path) -> Dict[str, Any]:
69
+ """Load .plot bundle contents from directory.
71
70
 
72
71
  Args:
73
72
  bundle_dir: Path to the bundle directory.
@@ -80,12 +79,12 @@ def load_pltz_bundle(bundle_dir: Path) -> Dict[str, Any]:
80
79
  # Find the spec file (could be plot.json or {basename}.json)
81
80
  spec_file = None
82
81
  for f in bundle_dir.glob("*.json"):
83
- if not f.name.startswith('.'): # Skip hidden files
82
+ if not f.name.startswith("."): # Skip hidden files
84
83
  spec_file = f
85
84
  break
86
85
 
87
86
  if spec_file and spec_file.exists():
88
- with open(spec_file, "r") as f:
87
+ with open(spec_file) as f:
89
88
  result["spec"] = json.load(f)
90
89
  # Extract basename from spec filename
91
90
  result["basename"] = spec_file.stem
@@ -96,24 +95,25 @@ def load_pltz_bundle(bundle_dir: Path) -> Dict[str, Any]:
96
95
  # Find and load CSV data (could be plot.csv or {basename}.csv)
97
96
  csv_file = None
98
97
  for f in bundle_dir.glob("*.csv"):
99
- if not f.name.startswith('.'): # Skip hidden files
98
+ if not f.name.startswith("."): # Skip hidden files
100
99
  csv_file = f
101
100
  break
102
101
 
103
102
  if csv_file and csv_file.exists():
104
103
  try:
105
104
  import pandas as pd
105
+
106
106
  result["data"] = pd.read_csv(csv_file)
107
107
  except ImportError:
108
108
  # Fallback to basic CSV reading
109
- with open(csv_file, "r") as f:
109
+ with open(csv_file) as f:
110
110
  result["data"] = f.read()
111
111
 
112
112
  return result
113
113
 
114
114
 
115
- def save_pltz_bundle(data: Dict[str, Any], dir_path: Path) -> None:
116
- """Save .pltz bundle contents to directory.
115
+ def save_plot_bundle(data: Dict[str, Any], dir_path: Path) -> None:
116
+ """Save .plot bundle contents to directory.
117
117
 
118
118
  Args:
119
119
  data: Bundle data dictionary containing:
@@ -154,12 +154,14 @@ def save_pltz_bundle(data: Dict[str, Any], dir_path: Path) -> None:
154
154
  generate_bundle_overview(dir_path, spec, data, basename)
155
155
  except Exception as e:
156
156
  import logging
157
+
157
158
  logging.getLogger("scitex").debug(f"Could not generate overview: {e}")
158
159
 
159
160
 
160
- def _save_exports(data: Dict[str, Any], dir_path: Path, spec: Dict, basename: str = "plot") -> None:
161
+ def _save_exports(
162
+ data: Dict[str, Any], dir_path: Path, spec: Dict, basename: str = "plot"
163
+ ) -> None:
161
164
  """Save export files (PNG, SVG, PDF) with embedded metadata."""
162
- from scitex.io._metadata import embed_metadata
163
165
 
164
166
  for fmt in ["png", "svg", "pdf"]:
165
167
  if fmt not in data:
@@ -180,14 +182,13 @@ def _save_exports(data: Dict[str, Any], dir_path: Path, spec: Dict, basename: st
180
182
  _embed_metadata_in_export(out_file, spec, fmt)
181
183
  except Exception as e:
182
184
  import logging
185
+
183
186
  logging.getLogger("scitex").debug(
184
187
  f"Could not embed metadata in {out_file}: {e}"
185
188
  )
186
189
 
187
190
 
188
- def _embed_metadata_in_export(
189
- file_path: Path, spec: Dict[str, Any], fmt: str
190
- ) -> None:
191
+ def _embed_metadata_in_export(file_path: Path, spec: Dict[str, Any], fmt: str) -> None:
191
192
  """Embed bundle spec metadata into exported image files."""
192
193
  from scitex.io._metadata import embed_metadata
193
194
 
@@ -223,11 +224,15 @@ def _save_hitmaps(data: Dict[str, Any], dir_path: Path, basename: str = "plot")
223
224
  if isinstance(hitmap_svg_data, bytes):
224
225
  with open(hitmap_svg_file, "wb") as f:
225
226
  f.write(hitmap_svg_data)
226
- elif isinstance(hitmap_svg_data, (str, Path)) and Path(hitmap_svg_data).exists():
227
+ elif (
228
+ isinstance(hitmap_svg_data, (str, Path)) and Path(hitmap_svg_data).exists()
229
+ ):
227
230
  shutil.copy(hitmap_svg_data, hitmap_svg_file)
228
231
 
229
232
 
230
- def generate_bundle_overview(dir_path: Path, spec: Dict, data: Dict, basename: str = "plot") -> None:
233
+ def generate_bundle_overview(
234
+ dir_path: Path, spec: Dict, data: Dict, basename: str = "plot"
235
+ ) -> None:
231
236
  """Generate overview image showing bundle contents visually.
232
237
 
233
238
  Creates a comprehensive overview image with:
@@ -246,15 +251,22 @@ def generate_bundle_overview(dir_path: Path, spec: Dict, data: Dict, basename: s
246
251
  basename : str
247
252
  Base filename for bundle files (e.g., "myplot").
248
253
  """
249
- import matplotlib.pyplot as plt
250
254
  import matplotlib.gridspec as gridspec
255
+ import matplotlib.pyplot as plt
251
256
  from PIL import Image
252
257
 
253
258
  # Create figure with custom layout
254
259
  fig = plt.figure(figsize=(16, 10), facecolor="white")
255
260
  gs = gridspec.GridSpec(
256
- 2, 4, figure=fig, hspace=0.3, wspace=0.3,
257
- left=0.05, right=0.95, top=0.92, bottom=0.05,
261
+ 2,
262
+ 4,
263
+ figure=fig,
264
+ hspace=0.3,
265
+ wspace=0.3,
266
+ left=0.05,
267
+ right=0.95,
268
+ top=0.92,
269
+ bottom=0.05,
258
270
  )
259
271
 
260
272
  # Title
@@ -282,8 +294,12 @@ def generate_bundle_overview(dir_path: Path, spec: Dict, data: Dict, basename: s
282
294
  csv_text.append("No CSV data")
283
295
 
284
296
  ax_csv.text(
285
- 0.05, 0.95, "\n".join(csv_text),
286
- transform=ax_csv.transAxes, fontsize=9, verticalalignment="top",
297
+ 0.05,
298
+ 0.95,
299
+ "\n".join(csv_text),
300
+ transform=ax_csv.transAxes,
301
+ fontsize=9,
302
+ verticalalignment="top",
287
303
  fontfamily="monospace",
288
304
  bbox=dict(boxstyle="round", facecolor="#f0f0f0", alpha=0.8),
289
305
  )
@@ -295,8 +311,12 @@ def generate_bundle_overview(dir_path: Path, spec: Dict, data: Dict, basename: s
295
311
 
296
312
  json_lines = _json_to_tree(spec, max_depth=4, max_keys=8, max_lines=25)
297
313
  ax_json.text(
298
- 0.02, 0.98, "\n".join(json_lines),
299
- transform=ax_json.transAxes, fontsize=7, verticalalignment="top",
314
+ 0.02,
315
+ 0.98,
316
+ "\n".join(json_lines),
317
+ transform=ax_json.transAxes,
318
+ fontsize=7,
319
+ verticalalignment="top",
300
320
  fontfamily="monospace",
301
321
  bbox=dict(boxstyle="round", facecolor="#f0f0f0", alpha=0.8),
302
322
  )
@@ -328,9 +348,14 @@ def generate_bundle_overview(dir_path: Path, spec: Dict, data: Dict, basename: s
328
348
  if svg_path.exists():
329
349
  svg_size = svg_path.stat().st_size
330
350
  ax_svg.text(
331
- 0.5, 0.5, f"SVG File\n{svg_size/1024:.1f} KB",
332
- transform=ax_svg.transAxes, ha="center", va="center",
333
- fontsize=12, bbox=dict(boxstyle="round", facecolor="#e0e0ff"),
351
+ 0.5,
352
+ 0.5,
353
+ f"SVG File\n{svg_size / 1024:.1f} KB",
354
+ transform=ax_svg.transAxes,
355
+ ha="center",
356
+ va="center",
357
+ fontsize=12,
358
+ bbox=dict(boxstyle="round", facecolor="#e0e0ff"),
334
359
  )
335
360
  ax_svg.axis("off")
336
361
 
@@ -341,9 +366,14 @@ def generate_bundle_overview(dir_path: Path, spec: Dict, data: Dict, basename: s
341
366
  if hitmap_svg_path.exists():
342
367
  svg_size = hitmap_svg_path.stat().st_size
343
368
  ax_hitmap_svg.text(
344
- 0.5, 0.5, f"SVG Hitmap\n{svg_size/1024:.1f} KB",
345
- transform=ax_hitmap_svg.transAxes, ha="center", va="center",
346
- fontsize=12, bbox=dict(boxstyle="round", facecolor="#ffe0e0"),
369
+ 0.5,
370
+ 0.5,
371
+ f"SVG Hitmap\n{svg_size / 1024:.1f} KB",
372
+ transform=ax_hitmap_svg.transAxes,
373
+ ha="center",
374
+ va="center",
375
+ fontsize=12,
376
+ bbox=dict(boxstyle="round", facecolor="#ffe0e0"),
347
377
  )
348
378
  ax_hitmap_svg.axis("off")
349
379
 
@@ -363,9 +393,14 @@ def generate_bundle_overview(dir_path: Path, spec: Dict, data: Dict, basename: s
363
393
  ax_diff.set_xlabel("Red=Hitmap, Blue=PNG", fontsize=9)
364
394
  else:
365
395
  ax_diff.text(
366
- 0.5, 0.5, "Size mismatch!",
367
- transform=ax_diff.transAxes, ha="center", va="center",
368
- fontsize=14, color="red",
396
+ 0.5,
397
+ 0.5,
398
+ "Size mismatch!",
399
+ transform=ax_diff.transAxes,
400
+ ha="center",
401
+ va="center",
402
+ fontsize=14,
403
+ color="red",
369
404
  )
370
405
  ax_diff.axis("off")
371
406
 
@@ -375,13 +410,21 @@ def generate_bundle_overview(dir_path: Path, spec: Dict, data: Dict, basename: s
375
410
  ax_valid.axis("off")
376
411
 
377
412
  validation_text = _generate_alignment_validation(png_path, hitmap_path)
378
- color = "green" if all(
379
- "" in t for t in validation_text if t.startswith("✓") or t.startswith("✗")
380
- ) else "red"
413
+ color = (
414
+ "green"
415
+ if all(
416
+ "✓" in t for t in validation_text if t.startswith("✓") or t.startswith("✗")
417
+ )
418
+ else "red"
419
+ )
381
420
 
382
421
  ax_valid.text(
383
- 0.05, 0.95, "\n".join(validation_text),
384
- transform=ax_valid.transAxes, fontsize=9, verticalalignment="top",
422
+ 0.05,
423
+ 0.95,
424
+ "\n".join(validation_text),
425
+ transform=ax_valid.transAxes,
426
+ fontsize=9,
427
+ verticalalignment="top",
385
428
  fontfamily="monospace",
386
429
  bbox=dict(
387
430
  boxstyle="round",
@@ -394,7 +437,9 @@ def generate_bundle_overview(dir_path: Path, spec: Dict, data: Dict, basename: s
394
437
  overview_path = dir_path / f"{basename}_overview.png"
395
438
  with warnings.catch_warnings():
396
439
  warnings.filterwarnings("ignore", message=".*tight_layout.*")
397
- fig.savefig(overview_path, dpi=get_preview_dpi(), bbox_inches="tight", facecolor="white")
440
+ fig.savefig(
441
+ overview_path, dpi=get_preview_dpi(), bbox_inches="tight", facecolor="white"
442
+ )
398
443
  plt.close(fig)
399
444
 
400
445
 
@@ -416,9 +461,11 @@ def _json_to_tree(
416
461
  if isinstance(v, dict):
417
462
  if depth < max_depth - 1 and v:
418
463
  lines.append(prefix + branch + f"{k}:")
419
- lines.extend(_json_to_tree(
420
- v, next_prefix, max_depth, depth + 1, max_keys, max_lines
421
- ))
464
+ lines.extend(
465
+ _json_to_tree(
466
+ v, next_prefix, max_depth, depth + 1, max_keys, max_lines
467
+ )
468
+ )
422
469
  else:
423
470
  lines.append(prefix + branch + f"{k}: {{{len(v)} keys}}")
424
471
  elif isinstance(v, list):
@@ -473,9 +520,9 @@ def _generate_alignment_validation(png_path: Path, hitmap_path: Path) -> List[st
473
520
 
474
521
  bounds_match = png_bounds == hitmap_bounds
475
522
  validation_text.append(
476
- f"✓ Content aligned"
523
+ "✓ Content aligned"
477
524
  if bounds_match
478
- else f"✗ Content offset: {hitmap_bounds[0]-png_bounds[0]}, {hitmap_bounds[1]-png_bounds[1]}"
525
+ else f"✗ Content offset: {hitmap_bounds[0] - png_bounds[0]}, {hitmap_bounds[1] - png_bounds[1]}"
479
526
  )
480
527
 
481
528
  validation_text.append("")