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
@@ -1,176 +0,0 @@
1
- /* =============================================================================
2
- * Unified Panel Canvas (matches figz export layout)
3
- * Exactly matches SciTeX Cloud's .plot-preview-area styling
4
- * ============================================================================= */
5
- .panel-canvas {
6
- position: relative;
7
- min-height: 400px;
8
- /* White background with grid pattern - exact match to SciTeX Cloud */
9
- background: #ffffff;
10
- background-image:
11
- linear-gradient(0deg, transparent 23px, #e5e5e5 23px),
12
- linear-gradient(90deg, transparent 23px, #e5e5e5 23px);
13
- background-size: 24px 24px;
14
- border-radius: 8px;
15
- overflow: visible; /* Allow panels to extend slightly if needed */
16
- }
17
-
18
- /* Dark mode: dark canvas background for eye comfort */
19
- [data-theme="dark"] .panel-canvas,
20
- .dark-mode .panel-canvas {
21
- background: #1a1a1a;
22
- background-image:
23
- linear-gradient(0deg, transparent 23px, #2a2a2a 23px),
24
- linear-gradient(90deg, transparent 23px, #2a2a2a 23px);
25
- background-size: 24px 24px;
26
- }
27
-
28
- /* Hide grid when toggled off (G key) */
29
- .panel-canvas.hide-grid {
30
- background-image: none !important;
31
- }
32
-
33
- /* Unified canvas - panels appear as single figure matching figz export */
34
- .panel-canvas-item {
35
- position: absolute;
36
- user-select: none;
37
- background: transparent;
38
- overflow: visible;
39
- border: none;
40
- cursor: grab; /* Indicate draggability */
41
- }
42
-
43
- .panel-canvas-item:hover {
44
- z-index: 10;
45
- }
46
-
47
- .panel-canvas-item:active {
48
- cursor: grabbing;
49
- }
50
-
51
- .panel-canvas-item.active {
52
- outline: 2px solid var(--status-success);
53
- outline-offset: 2px;
54
- }
55
-
56
- .panel-canvas-item .panel-card-container {
57
- width: 100%;
58
- height: 100%;
59
- position: relative;
60
- }
61
-
62
- .panel-canvas-item img {
63
- width: 100%;
64
- height: 100%;
65
- object-fit: contain; /* Preserve aspect ratio - never distort figures */
66
- pointer-events: none;
67
- display: block;
68
- }
69
-
70
- /* Dark mode: invert plot colors for visibility */
71
- [data-theme="dark"] .panel-canvas-item img,
72
- [data-theme="dark"] .panel-card img,
73
- [data-theme="dark"] .preview-wrapper img {
74
- filter: invert(0.88) hue-rotate(180deg);
75
- }
76
-
77
- .panel-canvas-label {
78
- position: absolute;
79
- top: 4px;
80
- left: 4px;
81
- background: rgba(0,0,0,0.6);
82
- color: white;
83
- padding: 2px 6px;
84
- border-radius: 3px;
85
- font-size: 0.65em;
86
- font-weight: 600;
87
- cursor: move;
88
- opacity: 1; /* Show by default */
89
- transition: opacity 0.2s, background 0.2s;
90
- z-index: 5;
91
- }
92
-
93
- .panel-canvas-item:hover .panel-canvas-label {
94
- opacity: 1;
95
- background: rgba(0,0,0,0.8); /* Slightly darker on hover */
96
- }
97
-
98
- /* Drag handle for panel repositioning */
99
- .panel-drag-handle {
100
- position: absolute;
101
- top: 4px;
102
- right: 4px;
103
- background: rgba(0,0,0,0.5);
104
- color: white;
105
- padding: 2px 4px;
106
- border-radius: 3px;
107
- font-size: 0.7em;
108
- cursor: move;
109
- opacity: 0;
110
- transition: opacity 0.2s, background 0.2s;
111
- z-index: 5;
112
- user-select: none;
113
- }
114
-
115
- .panel-canvas-item:hover .panel-drag-handle {
116
- opacity: 1;
117
- }
118
-
119
- .panel-drag-handle:hover {
120
- background: rgba(0,0,0,0.8);
121
- }
122
-
123
- .panel-drag-handle:active {
124
- background: var(--accent-primary);
125
- }
126
-
127
- /* Position indicator while dragging */
128
- .panel-position-indicator {
129
- position: absolute;
130
- bottom: 4px;
131
- left: 4px;
132
- background: rgba(0,0,0,0.7);
133
- color: #4fc3f7;
134
- padding: 2px 6px;
135
- border-radius: 3px;
136
- font-size: 0.6em;
137
- font-family: monospace;
138
- pointer-events: none;
139
- opacity: 0;
140
- transition: opacity 0.3s;
141
- z-index: 5;
142
- }
143
-
144
- /* Dragging state */
145
- .panel-canvas-item.dragging {
146
- opacity: 0.85;
147
- z-index: 100;
148
- box-shadow: 0 8px 24px rgba(0,0,0,0.3);
149
- outline: 2px dashed var(--accent-primary);
150
- outline-offset: 2px;
151
- cursor: grabbing;
152
- }
153
-
154
- .panel-canvas-item.dragging .panel-position-indicator {
155
- opacity: 1;
156
- }
157
-
158
- .canvas-controls {
159
- display: flex;
160
- gap: 8px;
161
- margin-bottom: 8px;
162
- align-items: center;
163
- }
164
-
165
- .canvas-controls button {
166
- padding: 4px 12px;
167
- font-size: 0.8em;
168
- }
169
-
170
- /* Toolbar separator */
171
- .toolbar-separator {
172
- width: 1px;
173
- height: 24px;
174
- background: #555;
175
- margin: 0 4px;
176
- }
scitex/fts/README.md DELETED
@@ -1,262 +0,0 @@
1
- <!-- ---
2
- !-- Timestamp: 2025-12-20 07:20:45
3
- !-- Author: ywatanabe
4
- !-- File: /home/ywatanabe/proj/scitex-code/src/scitex/fsb/README.md
5
- !-- --- -->
6
-
7
- # SciTeX FTS (Figure-Table-Statistics)
8
-
9
- **FTS is the single source of truth for bundle schemas in SciTeX.**
10
-
11
- FTS defines a standardized, self-contained format for reproducible scientific figures with:
12
- - Complete data provenance
13
- - Statistical analysis results
14
- - Visual encoding specifications
15
- - Theme/aesthetic configuration
16
-
17
- ## Design Philosophy
18
-
19
- ### Separation of Concerns
20
-
21
- FTS strictly separates:
22
-
23
- | Layer | File | Purpose | Affects Science? |
24
- |-------|------|---------|------------------|
25
- | **Node** | `spec.json` | Structure (id, type, bbox, children) | Yes |
26
- | **Encoding** | `encoding.json` | Data-to-Visual mapping (columns, scales) | Yes |
27
- | **Theme** | `theme.json` | Aesthetics (colors, fonts, lines) | No |
28
- | **Stats** | `stats.json` | Statistical results with provenance | Yes |
29
- | **Data Info** | `data_info.json` | Column metadata, units, data source | Yes |
30
-
31
- **Key insight**: Theme changes don't affect reproducibility. Encoding changes do.
32
-
33
- ### Canonical vs Artifacts
34
-
35
- ```
36
- bundle_root/
37
- ├── canonical/ # Source of truth (editable, human-readable)
38
- │ ├── spec.json # Main specification
39
- │ ├── data.csv # Source data
40
- │ ├── encoding.json # Data-to-visual mappings
41
- │ ├── theme.json # Visual aesthetics
42
- │ ├── stats.json # Statistical results
43
- │ ├── data_info.json # Column metadata
44
- │ └── runtime.json # Runtime configuration
45
- ├── artifacts/ # Derived/cached (can be deleted and regenerated)
46
- │ ├── cache/
47
- │ │ ├── geometry_px.json
48
- │ │ └── render_manifest.json
49
- │ └── exports/
50
- │ ├── figure.svg
51
- │ ├── figure.png
52
- │ └── figure.pdf
53
- └── children/ # Child bundles (for multi-panel figures)
54
- ├── panel_a/
55
- └── panel_b/
56
- ```
57
-
58
- ## Quick Start
59
-
60
- ```python
61
- from scitex import fts
62
-
63
- # Create a new bundle
64
- bundle = fts.FTS("my_plot.zip", create=True, node_type="plot", name="My Plot")
65
-
66
- # Set encoding (data-to-visual mapping)
67
- bundle.encoding = {
68
- "traces": [
69
- {
70
- "trace_id": "main",
71
- "data_ref": "data/experiment.csv",
72
- "x": {"column": "time", "scale": "linear"},
73
- "y": {"column": "amplitude", "scale": "log"},
74
- "color": {"column": "condition"},
75
- }
76
- ]
77
- }
78
-
79
- # Set theme (pure aesthetics)
80
- bundle.theme = {
81
- "colors": {"palette": ["#1f77b4", "#ff7f0e", "#2ca02c"]},
82
- "typography": {"family": "Arial", "size_pt": 10},
83
- "lines": {"width_pt": 1.5},
84
- }
85
-
86
- # Save
87
- bundle.save()
88
- ```
89
-
90
- ## Module Structure
91
-
92
- ```
93
- scitex/fts/
94
- ├── __init__.py # Public API exports
95
- ├── _bundle.py # FTS class
96
- ├── _models.py # Core models (Node, BBox, SizeMM, Axes)
97
- ├── _encoding.py # Encoding models (TraceEncoding, ChannelEncoding)
98
- ├── _theme.py # Theme models (Theme, Colors, Typography)
99
- ├── _stats.py # Stats models (Analysis, StatResult, EffectSize)
100
- ├── _data_info.py # Data info models (DataInfo, ColumnDef)
101
- ├── _validation.py # JSON schema validation
102
- ├── _conversion.py # scitex to FTS format conversion
103
- └── schemas/ # JSON Schema definitions
104
- ├── node.schema.json
105
- ├── encoding.schema.json
106
- ├── theme.schema.json
107
- ├── stats.schema.json
108
- └── data_info.schema.json
109
- ```
110
-
111
- ## Core Models
112
-
113
- ### Node (spec.json)
114
-
115
- Structural metadata for the bundle:
116
-
117
- ```python
118
- from scitex.fts import Node, BBox, SizeMM
119
-
120
- node = Node(
121
- id="plot_001",
122
- type="plot", # figure, plot, text, shape, image
123
- name="Figure 1A",
124
- bbox_norm=BBox(x0=0, y0=0, x1=1, y1=1),
125
- size_mm=SizeMM(width=85, height=60), # Single column
126
- children=["panel_a", "panel_b"], # For figures
127
- )
128
- ```
129
-
130
- ### Encoding (encoding.json)
131
-
132
- Data-to-visual channel mappings:
133
-
134
- ```python
135
- from scitex.fts import Encoding, TraceEncoding, ChannelEncoding
136
-
137
- encoding = Encoding(
138
- traces=[
139
- TraceEncoding(
140
- trace_id="line_1",
141
- data_ref="data/timeseries.csv",
142
- x=ChannelEncoding(column="time_ms", scale="linear"),
143
- y=ChannelEncoding(column="voltage_mV", scale="linear"),
144
- color=ChannelEncoding(column="channel", scale="categorical"),
145
- )
146
- ]
147
- )
148
- ```
149
-
150
- ### Theme (theme.json)
151
-
152
- Pure aesthetics (doesn't affect scientific meaning):
153
-
154
- ```python
155
- from scitex.fts import Theme, Colors, Typography
156
-
157
- theme = Theme(
158
- colors=Colors(
159
- palette=["#1f77b4", "#ff7f0e", "#2ca02c"],
160
- background="#ffffff",
161
- text="#000000",
162
- ),
163
- typography=Typography(
164
- family="Arial",
165
- size_pt=8,
166
- title_size_pt=10,
167
- ),
168
- preset="nature", # Named presets: nature, science, dark
169
- )
170
- ```
171
-
172
- ### Stats (stats/stats.json)
173
-
174
- Statistical analysis results with full provenance:
175
-
176
- ```python
177
- from scitex.fts import Stats, Analysis, StatMethod, StatResult, EffectSize
178
-
179
- stats = Stats(
180
- analyses=[
181
- Analysis(
182
- result_id="ttest_1",
183
- method=StatMethod(
184
- name="t-test",
185
- variant="independent",
186
- parameters={"equal_var": False},
187
- ),
188
- inputs={
189
- "groups": ["control", "treatment"],
190
- "n_per_group": [30, 28],
191
- },
192
- results=StatResult(
193
- statistic=2.45,
194
- statistic_name="t",
195
- p_value=0.018,
196
- df=56,
197
- effect_size=EffectSize(
198
- name="cohens_d",
199
- value=0.65,
200
- ci_lower=0.12,
201
- ci_upper=1.18,
202
- ),
203
- ),
204
- )
205
- ],
206
- software={"python": "3.11", "scipy": "1.11.0"},
207
- )
208
- ```
209
-
210
- ## Validation
211
-
212
- Validate bundles against JSON schemas:
213
-
214
- ```python
215
- from scitex.fts import validate_bundle, validate_node
216
-
217
- # Validate entire bundle
218
- errors = validate_bundle("my_figure.zip")
219
- if errors:
220
- for filename, error_list in errors.items():
221
- print(f"{filename}: {error_list}")
222
-
223
- # Validate individual components
224
- node_errors = validate_node({"id": "test", "type": "plot", "bbox_norm": {...}})
225
- ```
226
-
227
- ## Conversion Utilities
228
-
229
- Convert between scitex internal format and FTS format:
230
-
231
- ```python
232
- from scitex.fts import from_scitex_spec, to_scitex_spec
233
-
234
- # scitex spec to FTS format
235
- fts_data = from_scitex_spec(spec_dict, style_dict)
236
- # Returns: {"node": {...}, "encoding": {...}, "theme": {...}}
237
-
238
- # FTS bundle to scitex format
239
- spec, style = to_scitex_spec(bundle)
240
- ```
241
-
242
- ## Backward Compatibility
243
-
244
- FTS is also available via the legacy import path:
245
-
246
- ```python
247
- # Old path (still works)
248
- from scitex import fsb # Alias for fts
249
-
250
- # New path (preferred)
251
- from scitex import fts
252
- ```
253
-
254
- ## Best Practices
255
-
256
- 1. **Always specify units in data_info.json** - Critical for reproducibility
257
- 2. **Use encoding for data-driven styling** - Color by condition, size by value
258
- 3. **Keep theme separate from encoding** - Enables style changes without data loss
259
- 4. **Include stats provenance** - Software versions, parameters, correction methods
260
- 5. **Use canonical/ for source files** - artifacts/ can be regenerated
261
-
262
- <!-- EOF -->
scitex/fts/TODO.md DELETED
@@ -1,66 +0,0 @@
1
- <!-- ---
2
- !-- Timestamp: 2025-12-21 11:02:24
3
- !-- Author: ywatanabe
4
- !-- File: /home/ywatanabe/proj/scitex-code/src/scitex/fts/TODO.md
5
- !-- --- -->
6
-
7
- ## Simplify Things
8
- ## Explict Names
9
- ## Kinds
10
- ### figure
11
- ### plot
12
-
13
- #### Current
14
- ```
15
- ├── artifacts
16
- │   ├── cache
17
- │   │   ├── geometry_px.json
18
- │   │   ├── hitmap.png
19
- │   │   ├── hitmap.svg
20
- │   │   └── render_manifest.json
21
- │   └── exports
22
- │   ├── figure.pdf
23
- │   ├── figure.png
24
- │   └── figure.svg
25
- ├── canonical
26
- │   ├── data_info.json
27
- │   ├── encoding.json
28
- │   ├── spec.json
29
- │   └── theme.json
30
- ├── children
31
- └── payload
32
- └── data.csv
33
-
34
- ```
35
-
36
- #### Revised
37
- ```
38
- ├── artifacts
39
- │   ├── cache
40
- │   │   ├── coordinates/
41
-
42
- │   │   ├── hitmap.png
43
- │   │   ├── hitmap.svg
44
- │   │   └── render_manifest.json
45
- │   └── exports
46
- │   ├── figure.pdf
47
- │   ├── figure.png
48
- │   └── figure.svg
49
- ├── canonical
50
- │   ├── data_info.json
51
- │   ├── encoding.json
52
- │   ├── spec.json
53
- │   └── theme.json
54
- ├── children
55
- └── payload
56
- └── data.csv
57
-
58
- ```
59
-
60
- ### image
61
- ### shape
62
- ### stats
63
- ### table
64
- ### text
65
-
66
- <!-- EOF -->
scitex/fts/__init__.py DELETED
@@ -1,90 +0,0 @@
1
- #!/usr/bin/env python3
2
- # Timestamp: 2025-12-20
3
- # File: /home/ywatanabe/proj/scitex-code/src/scitex/fts/__init__.py
4
-
5
- """
6
- SciTeX FTS (Figure-Table-Statistics) - The single source of truth for bundle schemas.
7
-
8
- FTS defines a standardized format for reproducible scientific figures and tables:
9
- - Self-contained bundles with data, visualization spec, and stats
10
- - Clear separation: Node (structure), Encoding (data mapping), Theme (aesthetics)
11
- - Full provenance tracking for scientific reproducibility
12
-
13
- Usage:
14
- from scitex.fts import FTS, Node, Encoding, Theme
15
-
16
- # Create new bundle
17
- bundle = FTS("my_plot.zip", create=True, node_type="plot")
18
- bundle.encoding = {"traces": [{"trace_id": "t1", "x": {"column": "time"}}]}
19
- bundle.save()
20
-
21
- # Load existing bundle
22
- bundle = FTS("my_plot.zip")
23
- print(bundle.node.type) # "plot"
24
- """
25
-
26
- # Version
27
- __version__ = "1.0.0"
28
-
29
- # =============================================================================
30
- # Public API - What users need
31
- # =============================================================================
32
-
33
- # FTS class (main entry point)
34
- from ._bundle import FTS, create_bundle, from_matplotlib, load_bundle
35
-
36
- # Core dataclasses users interact with
37
- from ._bundle import Node, BBox, SizeMM, DataInfo
38
- from ._fig import Encoding, Theme
39
- from ._stats import Stats
40
-
41
- # Type enumeration
42
- from ._bundle import NodeType
43
-
44
- # Error classes for exception handling
45
- from ._bundle import (
46
- BundleError,
47
- BundleNotFoundError,
48
- BundleValidationError,
49
- )
50
-
51
- # Availability flags
52
- FTS_AVAILABLE = True
53
- FTS_VERSION = __version__
54
-
55
- # Legacy aliases for backwards compatibility
56
- FSB = FTS
57
- FSB_AVAILABLE = FTS_AVAILABLE
58
- FSB_VERSION = FTS_VERSION
59
-
60
- __all__ = [
61
- # Version
62
- "__version__",
63
- "FTS_AVAILABLE",
64
- "FTS_VERSION",
65
- # Legacy aliases
66
- "FSB_AVAILABLE",
67
- "FSB_VERSION",
68
- "FSB",
69
- # FTS class
70
- "FTS",
71
- "load_bundle",
72
- "create_bundle",
73
- "from_matplotlib",
74
- # Core dataclasses
75
- "Node",
76
- "Encoding",
77
- "Theme",
78
- "Stats",
79
- "BBox",
80
- "SizeMM",
81
- "DataInfo",
82
- # Types
83
- "NodeType",
84
- # Errors
85
- "BundleError",
86
- "BundleNotFoundError",
87
- "BundleValidationError",
88
- ]
89
-
90
- # EOF
@@ -1,102 +0,0 @@
1
- # FTS Bundle (Figure-Table-Statistics)
2
-
3
- This is a self-contained scientific figure bundle created with SciTeX.
4
-
5
- ## Bundle Structure
6
-
7
- ```
8
- bundle_root/
9
- ├── README.md # This file
10
- ├── canonical/ # Source of truth (editable)
11
- │ ├── spec.json # Main specification (type, id, elements)
12
- │ ├── data.csv # Source data
13
- │ ├── encoding.json # Data-to-visual channel mappings
14
- │ ├── theme.json # Visual aesthetics (colors, fonts)
15
- │ ├── stats.json # Statistical analysis results
16
- │ ├── data_info.json # Column metadata and units
17
- │ └── runtime.json # Runtime configuration
18
- ├── artifacts/ # Derived files (can be regenerated)
19
- │ ├── cache/ # Computed values
20
- │ └── exports/ # Rendered outputs (PNG, SVG, PDF)
21
- └── children/ # Child bundles (for multi-panel figures)
22
- ```
23
-
24
- ## Key Files
25
-
26
- ### canonical/spec.json
27
- Main specification defining the bundle structure:
28
- - `id`: Unique bundle identifier
29
- - `type`: Bundle type (figure, plot, text, etc.)
30
- - `bbox_norm`: Normalized bounding box (0-1 coordinates)
31
- - `size_mm`: Physical size in millimeters
32
- - `elements`: Child elements or references
33
-
34
- ### canonical/encoding.json
35
- Data-to-visual mappings for scientific reproducibility:
36
- - `traces`: List of data series with column bindings
37
- - Each trace maps data columns to visual channels (x, y, color, size)
38
-
39
- ### canonical/theme.json
40
- Pure visual aesthetics (can be changed without affecting data):
41
- - `colors`: Color palette and scheme
42
- - `typography`: Font settings
43
- - `lines`: Line styles and widths
44
- - `markers`: Marker styles
45
-
46
- ### canonical/stats.json
47
- Statistical analysis results with full provenance:
48
- - `analyses`: List of statistical tests performed
49
- - Each analysis includes method, inputs, and results
50
- - `software`: Version information for reproducibility
51
-
52
- ### canonical/data_info.json
53
- Metadata about data columns:
54
- - Column names, types, and units
55
- - Data source and hash for integrity
56
- - Basic statistics for validation
57
-
58
- ## Opening This Bundle
59
-
60
- ### With Python (SciTeX)
61
- ```python
62
- from scitex import fsb
63
-
64
- # Load the bundle
65
- bundle = fsb.Bundle("path/to/this/bundle.zip")
66
-
67
- # Access components
68
- print(bundle.node.name)
69
- print(bundle.encoding)
70
- print(bundle.theme)
71
- ```
72
-
73
- ### With Any JSON Tool
74
- All files in `canonical/` are standard JSON and can be viewed/edited with any text editor or JSON tool.
75
-
76
- ### Exported Figures
77
- Ready-to-use figures are in `artifacts/exports/`:
78
- - `figure.svg` - Vector format (scalable)
79
- - `figure.png` - Raster format (web/screen)
80
- - `figure.pdf` - Print format
81
-
82
- ## Reproducibility
83
-
84
- This bundle contains everything needed to reproduce the figure:
85
- 1. **Data**: Original data in `canonical/data.csv`
86
- 2. **Encoding**: How data maps to visuals in `encoding.json`
87
- 3. **Stats**: Statistical results with full provenance
88
- 4. **Software**: Version info in `stats.json`
89
-
90
- To regenerate exports:
91
- ```python
92
- from scitex import fsb
93
- bundle = fsb.Bundle("this_bundle.zip")
94
- # Exports will be regenerated on render
95
- ```
96
-
97
- ## License
98
-
99
- The figure and data in this bundle are subject to the license terms specified by the original author. Contact information may be found in `spec.json`.
100
-
101
- ---
102
- *Created with [SciTeX](https://scitex.ai) FTS v1.0.0*