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,423 +0,0 @@
1
- #!/usr/bin/env python3
2
- # Timestamp: 2025-12-20
3
- # File: /home/ywatanabe/proj/scitex-code/src/scitex/fts/_stats/_dataclasses/_Stats.py
4
-
5
- """
6
- Stats - Statistical analysis results with provenance and GUI support.
7
-
8
- This module provides the single source of truth for statistical result schemas,
9
- supporting both:
10
- 1. Bundle storage (data provenance, test results)
11
- 2. GUI annotation (positioning, styling for interactive editing)
12
- """
13
-
14
- import json
15
- from dataclasses import dataclass, field, asdict
16
- from datetime import datetime
17
- from typing import Any, Dict, List, Literal, Optional, Union
18
-
19
- STATS_VERSION = "1.1.0"
20
-
21
- # Type aliases for GUI support
22
- PositionMode = Literal["absolute", "relative_to_plot", "above_whisker", "auto"]
23
- UnitType = Literal["mm", "px", "inch", "data"]
24
- SymbolStyle = Literal["asterisk", "text", "bracket", "compact", "detailed", "publication"]
25
-
26
-
27
- @dataclass
28
- class DataRef:
29
- """Reference to data used in analysis."""
30
-
31
- path: str
32
- columns: Optional[List[str]] = None
33
- filter: Optional[str] = None
34
-
35
- def to_dict(self) -> Dict[str, Any]:
36
- result = {"path": self.path}
37
- if self.columns:
38
- result["columns"] = self.columns
39
- if self.filter:
40
- result["filter"] = self.filter
41
- return result
42
-
43
- @classmethod
44
- def from_dict(cls, data: Dict[str, Any]) -> "DataRef":
45
- return cls(
46
- path=data.get("path", ""),
47
- columns=data.get("columns"),
48
- filter=data.get("filter"),
49
- )
50
-
51
-
52
- # =============================================================================
53
- # GUI Position and Styling Classes (merged from scitex.schema._stats)
54
- # =============================================================================
55
-
56
-
57
- @dataclass
58
- class Position:
59
- """
60
- Position specification with unit support for GUI integration.
61
-
62
- Supports multiple coordinate systems for flexibility across
63
- matplotlib (mm), Fabric.js (px), and data coordinates.
64
- """
65
-
66
- x: float
67
- y: float
68
- unit: UnitType = "mm"
69
- relative_to: Optional[str] = None # Plot ID or "axes"
70
- offset: Optional[Dict[str, float]] = None # {"dx": 0, "dy": 0}
71
-
72
- def to_dict(self) -> Dict[str, Any]:
73
- return {
74
- "x": self.x,
75
- "y": self.y,
76
- "unit": self.unit,
77
- "relative_to": self.relative_to,
78
- "offset": self.offset,
79
- }
80
-
81
- @classmethod
82
- def from_dict(cls, data: Dict[str, Any]) -> "Position":
83
- return cls(**data)
84
-
85
- def to_mm(self, dpi: float = 300.0) -> "Position":
86
- """Convert position to mm (for matplotlib)."""
87
- if self.unit == "mm":
88
- return self
89
- elif self.unit == "px":
90
- mm_per_px = 25.4 / dpi
91
- return Position(
92
- x=self.x * mm_per_px,
93
- y=self.y * mm_per_px,
94
- unit="mm",
95
- relative_to=self.relative_to,
96
- offset=self.offset,
97
- )
98
- elif self.unit == "inch":
99
- return Position(
100
- x=self.x * 25.4,
101
- y=self.y * 25.4,
102
- unit="mm",
103
- relative_to=self.relative_to,
104
- offset=self.offset,
105
- )
106
- return self
107
-
108
- def to_px(self, dpi: float = 300.0) -> "Position":
109
- """Convert position to px (for Fabric.js canvas)."""
110
- mm_pos = self.to_mm(dpi)
111
- px_per_mm = dpi / 25.4
112
- return Position(
113
- x=mm_pos.x * px_per_mm,
114
- y=mm_pos.y * px_per_mm,
115
- unit="px",
116
- relative_to=self.relative_to,
117
- offset=self.offset,
118
- )
119
-
120
-
121
- @dataclass
122
- class StatStyling:
123
- """Styling configuration for statistical annotation display."""
124
-
125
- font_size_pt: float = 7.0
126
- font_family: str = "Arial"
127
- color: str = "#000000"
128
- symbol_style: SymbolStyle = "asterisk"
129
- line_width_mm: Optional[float] = None
130
- bracket_height_mm: Optional[float] = None
131
- theme: Literal["light", "dark", "auto"] = "auto"
132
-
133
- def to_dict(self) -> Dict[str, Any]:
134
- return asdict(self)
135
-
136
- @classmethod
137
- def from_dict(cls, data: Dict[str, Any]) -> "StatStyling":
138
- return cls(**data)
139
-
140
- def get_theme_color(self, is_dark: bool = False) -> str:
141
- """Get appropriate color for theme."""
142
- if self.theme == "auto":
143
- return "#ffffff" if is_dark else "#000000"
144
- elif self.theme == "dark":
145
- return "#ffffff"
146
- return "#000000"
147
-
148
-
149
- @dataclass
150
- class StatPositioning:
151
- """Position configuration for GUI-ready annotation placement."""
152
-
153
- mode: PositionMode = "auto"
154
- position: Optional[Position] = None
155
- preferred_corner: Optional[str] = None # "top-right", "bottom-left", etc.
156
- avoid_overlap: bool = True
157
- min_distance_mm: float = 2.0
158
- anchor_to: Optional[str] = None # "plot_center", "whisker_top", etc.
159
-
160
- def to_dict(self) -> Dict[str, Any]:
161
- return {
162
- "mode": self.mode,
163
- "position": self.position.to_dict() if self.position else None,
164
- "preferred_corner": self.preferred_corner,
165
- "avoid_overlap": self.avoid_overlap,
166
- "min_distance_mm": self.min_distance_mm,
167
- "anchor_to": self.anchor_to,
168
- }
169
-
170
- @classmethod
171
- def from_dict(cls, data: Dict[str, Any]) -> "StatPositioning":
172
- data_copy = data.copy()
173
- if data_copy.get("position"):
174
- data_copy["position"] = Position.from_dict(data_copy["position"])
175
- return cls(**data_copy)
176
-
177
-
178
- @dataclass
179
- class EffectSize:
180
- """Effect size with confidence interval."""
181
-
182
- name: str # cohens_d, hedges_g, eta_squared, r_squared, etc.
183
- value: float
184
- ci_lower: Optional[float] = None
185
- ci_upper: Optional[float] = None
186
- ci_level: float = 0.95
187
-
188
- def to_dict(self) -> Dict[str, Any]:
189
- result = {"name": self.name, "value": self.value}
190
- if self.ci_lower is not None:
191
- result["ci_lower"] = self.ci_lower
192
- if self.ci_upper is not None:
193
- result["ci_upper"] = self.ci_upper
194
- if self.ci_level != 0.95:
195
- result["ci_level"] = self.ci_level
196
- return result
197
-
198
- @classmethod
199
- def from_dict(cls, data: Dict[str, Any]) -> "EffectSize":
200
- return cls(
201
- name=data.get("name", ""),
202
- value=data.get("value", 0.0),
203
- ci_lower=data.get("ci_lower"),
204
- ci_upper=data.get("ci_upper"),
205
- ci_level=data.get("ci_level", 0.95),
206
- )
207
-
208
-
209
- @dataclass
210
- class StatMethod:
211
- """Statistical method specification."""
212
-
213
- name: str # t-test, anova, chi-squared, correlation, etc.
214
- variant: Optional[str] = None # independent, paired, one-way, etc.
215
- parameters: Dict[str, Any] = field(default_factory=dict)
216
-
217
- def to_dict(self) -> Dict[str, Any]:
218
- result = {"name": self.name}
219
- if self.variant:
220
- result["variant"] = self.variant
221
- if self.parameters:
222
- result["parameters"] = self.parameters
223
- return result
224
-
225
- @classmethod
226
- def from_dict(cls, data: Dict[str, Any]) -> "StatMethod":
227
- return cls(
228
- name=data.get("name", ""),
229
- variant=data.get("variant"),
230
- parameters=data.get("parameters", {}),
231
- )
232
-
233
-
234
- @dataclass
235
- class StatResult:
236
- """Statistical test result."""
237
-
238
- statistic: float
239
- statistic_name: str # t, F, chi2, r, etc.
240
- p_value: float
241
- df: Optional[float] = None
242
- effect_size: Optional[EffectSize] = None
243
- significant: Optional[bool] = None
244
- alpha: float = 0.05
245
-
246
- def to_dict(self) -> Dict[str, Any]:
247
- result = {
248
- "statistic": self.statistic,
249
- "statistic_name": self.statistic_name,
250
- "p_value": self.p_value,
251
- }
252
- if self.df is not None:
253
- result["df"] = self.df
254
- if self.effect_size:
255
- result["effect_size"] = self.effect_size.to_dict()
256
- if self.significant is not None:
257
- result["significant"] = self.significant
258
- if self.alpha != 0.05:
259
- result["alpha"] = self.alpha
260
- return result
261
-
262
- @classmethod
263
- def from_dict(cls, data: Dict[str, Any]) -> "StatResult":
264
- effect_size = None
265
- if "effect_size" in data:
266
- effect_size = EffectSize.from_dict(data["effect_size"])
267
- return cls(
268
- statistic=data.get("statistic", 0.0),
269
- statistic_name=data.get("statistic_name", ""),
270
- p_value=data.get("p_value", 1.0),
271
- df=data.get("df"),
272
- effect_size=effect_size,
273
- significant=data.get("significant"),
274
- alpha=data.get("alpha", 0.05),
275
- )
276
-
277
-
278
- @dataclass
279
- class StatDisplay:
280
- """How to display the statistical result (with GUI support)."""
281
-
282
- show_stars: bool = True
283
- show_p_value: bool = True
284
- show_effect_size: bool = False
285
- bracket_groups: Optional[List[str]] = None
286
- # Enhanced GUI support
287
- positioning: Optional[StatPositioning] = None
288
- styling: Optional[StatStyling] = None
289
- plot_id: Optional[str] = None # Associated plot in TrackingMixin
290
-
291
- def to_dict(self) -> Dict[str, Any]:
292
- result = {
293
- "show_stars": self.show_stars,
294
- "show_p_value": self.show_p_value,
295
- "show_effect_size": self.show_effect_size,
296
- }
297
- if self.bracket_groups:
298
- result["bracket_groups"] = self.bracket_groups
299
- if self.positioning:
300
- result["positioning"] = self.positioning.to_dict()
301
- if self.styling:
302
- result["styling"] = self.styling.to_dict()
303
- if self.plot_id:
304
- result["plot_id"] = self.plot_id
305
- return result
306
-
307
- @classmethod
308
- def from_dict(cls, data: Dict[str, Any]) -> "StatDisplay":
309
- positioning = None
310
- if "positioning" in data and data["positioning"]:
311
- positioning = StatPositioning.from_dict(data["positioning"])
312
- styling = None
313
- if "styling" in data and data["styling"]:
314
- styling = StatStyling.from_dict(data["styling"])
315
- return cls(
316
- show_stars=data.get("show_stars", True),
317
- show_p_value=data.get("show_p_value", True),
318
- show_effect_size=data.get("show_effect_size", False),
319
- bracket_groups=data.get("bracket_groups"),
320
- positioning=positioning,
321
- styling=styling,
322
- plot_id=data.get("plot_id"),
323
- )
324
-
325
-
326
- @dataclass
327
- class Analysis:
328
- """Complete analysis record with provenance."""
329
-
330
- result_id: str
331
- method: StatMethod
332
- results: StatResult
333
- data_refs: List[DataRef] = field(default_factory=list)
334
- inputs: Dict[str, Any] = field(default_factory=dict)
335
- display: Optional[StatDisplay] = None
336
-
337
- def to_dict(self) -> Dict[str, Any]:
338
- result = {
339
- "result_id": self.result_id,
340
- "method": self.method.to_dict(),
341
- "results": self.results.to_dict(),
342
- }
343
- if self.data_refs:
344
- result["data_refs"] = [d.to_dict() for d in self.data_refs]
345
- if self.inputs:
346
- result["inputs"] = self.inputs
347
- if self.display:
348
- result["display"] = self.display.to_dict()
349
- return result
350
-
351
- @classmethod
352
- def from_dict(cls, data: Dict[str, Any]) -> "Analysis":
353
- display = None
354
- if "display" in data:
355
- display = StatDisplay.from_dict(data["display"])
356
- return cls(
357
- result_id=data.get("result_id", ""),
358
- method=StatMethod.from_dict(data.get("method", {})),
359
- results=StatResult.from_dict(data.get("results", {})),
360
- data_refs=[DataRef.from_dict(d) for d in data.get("data_refs", [])],
361
- inputs=data.get("inputs", {}),
362
- display=display,
363
- )
364
-
365
-
366
- @dataclass
367
- class Stats:
368
- """Complete statistics specification for a bundle.
369
-
370
- Stored in stats/stats.json.
371
- """
372
-
373
- analyses: List[Analysis] = field(default_factory=list)
374
- software: Dict[str, str] = field(default_factory=dict)
375
-
376
- # Schema metadata
377
- schema_name: str = "fsb.stats"
378
- schema_version: str = STATS_VERSION
379
-
380
- def to_dict(self) -> Dict[str, Any]:
381
- result = {"analyses": [a.to_dict() for a in self.analyses]}
382
- if self.software:
383
- result["software"] = self.software
384
- return result
385
-
386
- def to_json(self, indent: int = 2) -> str:
387
- return json.dumps(self.to_dict(), indent=indent)
388
-
389
- @classmethod
390
- def from_dict(cls, data: Dict[str, Any]) -> "Stats":
391
- return cls(
392
- analyses=[Analysis.from_dict(a) for a in data.get("analyses", [])],
393
- software=data.get("software", {}),
394
- )
395
-
396
- @classmethod
397
- def from_json(cls, json_str: str) -> "Stats":
398
- return cls.from_dict(json.loads(json_str))
399
-
400
-
401
- __all__ = [
402
- # Version
403
- "STATS_VERSION",
404
- # Type aliases
405
- "PositionMode",
406
- "UnitType",
407
- "SymbolStyle",
408
- # Data reference
409
- "DataRef",
410
- # GUI classes (merged from scitex.schema._stats)
411
- "Position",
412
- "StatStyling",
413
- "StatPositioning",
414
- # Core stats classes
415
- "EffectSize",
416
- "StatMethod",
417
- "StatResult",
418
- "StatDisplay",
419
- "Analysis",
420
- "Stats",
421
- ]
422
-
423
- # EOF
@@ -1,48 +0,0 @@
1
- #!/usr/bin/env python3
2
- # Timestamp: 2025-12-20
3
- # File: /home/ywatanabe/proj/scitex-code/src/scitex/fts/_stats/_dataclasses/__init__.py
4
-
5
- """Statistics-specific dataclasses for FTS with GUI support."""
6
-
7
- from ._Stats import (
8
- STATS_VERSION,
9
- # Type aliases
10
- PositionMode,
11
- UnitType,
12
- SymbolStyle,
13
- # GUI classes
14
- Position,
15
- StatStyling,
16
- StatPositioning,
17
- # Core classes
18
- Analysis,
19
- DataRef,
20
- EffectSize,
21
- StatDisplay,
22
- StatMethod,
23
- StatResult,
24
- Stats,
25
- )
26
-
27
- __all__ = [
28
- # Version
29
- "STATS_VERSION",
30
- # Type aliases
31
- "PositionMode",
32
- "UnitType",
33
- "SymbolStyle",
34
- # GUI classes
35
- "Position",
36
- "StatStyling",
37
- "StatPositioning",
38
- # Core classes
39
- "DataRef",
40
- "EffectSize",
41
- "StatMethod",
42
- "StatResult",
43
- "StatDisplay",
44
- "Analysis",
45
- "Stats",
46
- ]
47
-
48
- # EOF
@@ -1,65 +0,0 @@
1
- #!/usr/bin/env python3
2
- # Timestamp: 2025-12-20
3
- # File: /home/ywatanabe/proj/scitex-code/src/scitex/fsb/_tables/__init__.py
4
-
5
- """Table handling and LaTeX export for FTS bundles.
6
-
7
- This module provides:
8
- - LaTeX export for figures and tables (booktabs style)
9
- - Statistical result formatting
10
- - LaTeX validation and error editor
11
- """
12
-
13
- from ._latex import (
14
- ColumnDef,
15
- ErrorSeverity,
16
- FigureExportOptions,
17
- FormattedStat,
18
- LaTeXError,
19
- LaTeXExportOptions,
20
- LaTeXResult,
21
- TableExportOptions,
22
- ValidationResult,
23
- export_figure_to_latex,
24
- export_multiple,
25
- export_table_to_latex,
26
- export_to_latex,
27
- format_inline_stat,
28
- format_stat_note,
29
- format_stats_for_latex,
30
- generate_figure_preamble,
31
- generate_table_preamble,
32
- launch_editor,
33
- validate_latex,
34
- )
35
-
36
- __all__ = [
37
- # Main export API
38
- "export_to_latex",
39
- "export_multiple",
40
- "LaTeXExportOptions",
41
- "LaTeXResult",
42
- # Figure export
43
- "export_figure_to_latex",
44
- "FigureExportOptions",
45
- "generate_figure_preamble",
46
- # Table export
47
- "export_table_to_latex",
48
- "TableExportOptions",
49
- "ColumnDef",
50
- "generate_table_preamble",
51
- # Stats formatting
52
- "format_stats_for_latex",
53
- "format_inline_stat",
54
- "format_stat_note",
55
- "FormattedStat",
56
- # Validation
57
- "validate_latex",
58
- "ValidationResult",
59
- "LaTeXError",
60
- "ErrorSeverity",
61
- # Editor
62
- "launch_editor",
63
- ]
64
-
65
- # EOF
@@ -1,93 +0,0 @@
1
- #!/usr/bin/env python3
2
- # Timestamp: 2025-12-20
3
- # File: /home/ywatanabe/proj/scitex-code/src/scitex/fsb/_tables/_latex/__init__.py
4
-
5
- """LaTeX export for FTS bundles.
6
-
7
- This module provides LaTeX export capabilities for FTS figure and table bundles.
8
-
9
- Usage:
10
- from scitex.fts._tables._latex import export_to_latex, launch_editor
11
-
12
- # Export a bundle to LaTeX
13
- result = export_to_latex(bundle)
14
- print(result.latex_code)
15
-
16
- # Open editor for manual fixes
17
- launch_editor(result.latex_code, bundle=bundle)
18
- """
19
-
20
- from ._editor import launch_editor
21
- from ._export import LaTeXExportOptions, LaTeXResult, export_multiple, export_to_latex
22
- from ._figure_exporter import FigureExportOptions, export_figure_to_latex, generate_figure_preamble
23
- from ._stats_formatter import (
24
- FormattedStat,
25
- format_inline_stat,
26
- format_stat_note,
27
- format_stats_for_latex,
28
- format_stats_paragraph,
29
- )
30
- from ._table_exporter import (
31
- ColumnDef,
32
- TableExportOptions,
33
- export_table_to_latex,
34
- generate_table_preamble,
35
- )
36
- from ._utils import (
37
- column_spec,
38
- escape_latex,
39
- escape_latex_minimal,
40
- format_effect_size,
41
- format_number,
42
- format_p_value,
43
- format_statistic,
44
- format_unit,
45
- sanitize_label,
46
- significance_stars,
47
- wrap_math,
48
- )
49
- from ._validator import ErrorSeverity, LaTeXError, ValidationResult, validate_latex
50
-
51
- __all__ = [
52
- # Main export API
53
- "export_to_latex",
54
- "export_multiple",
55
- "LaTeXExportOptions",
56
- "LaTeXResult",
57
- # Figure export
58
- "export_figure_to_latex",
59
- "FigureExportOptions",
60
- "generate_figure_preamble",
61
- # Table export
62
- "export_table_to_latex",
63
- "TableExportOptions",
64
- "ColumnDef",
65
- "generate_table_preamble",
66
- # Stats formatting
67
- "format_stats_for_latex",
68
- "format_inline_stat",
69
- "format_stat_note",
70
- "format_stats_paragraph",
71
- "FormattedStat",
72
- # Validation
73
- "validate_latex",
74
- "ValidationResult",
75
- "LaTeXError",
76
- "ErrorSeverity",
77
- # Editor
78
- "launch_editor",
79
- # Utilities
80
- "escape_latex",
81
- "escape_latex_minimal",
82
- "format_unit",
83
- "format_number",
84
- "format_p_value",
85
- "format_statistic",
86
- "format_effect_size",
87
- "significance_stars",
88
- "sanitize_label",
89
- "wrap_math",
90
- "column_spec",
91
- ]
92
-
93
- # EOF
@@ -1,11 +0,0 @@
1
- #!/usr/bin/env python3
2
- # Timestamp: 2025-12-20
3
- # File: /home/ywatanabe/proj/scitex-code/src/scitex/fsb/_tables/_latex/_editor/__init__.py
4
-
5
- """Flask-based LaTeX error editor."""
6
-
7
- from ._app import launch_editor
8
-
9
- __all__ = ["launch_editor"]
10
-
11
- # EOF