scitex 2.10.3__py3-none-any.whl → 2.13.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 (504) hide show
  1. scitex/__init__.py +1 -4
  2. scitex/__main__.py +24 -5
  3. scitex/__version__.py +1 -1
  4. scitex/_install_guide.py +14 -2
  5. scitex/_optional_deps.py +33 -0
  6. scitex/ai/classification/reporters/_ClassificationReporter.py +1 -1
  7. scitex/ai/classification/timeseries/_TimeSeriesBlockingSplit.py +2 -2
  8. scitex/ai/classification/timeseries/_TimeSeriesCalendarSplit.py +2 -2
  9. scitex/ai/classification/timeseries/_TimeSeriesSlidingWindowSplit.py +2 -2
  10. scitex/ai/classification/timeseries/_TimeSeriesSlidingWindowSplit_v01-not-using-n_splits.py +2 -2
  11. scitex/ai/classification/timeseries/_TimeSeriesStratifiedSplit.py +2 -2
  12. scitex/ai/classification/timeseries/_normalize_timestamp.py +1 -1
  13. scitex/ai/metrics/_calc_seizure_prediction_metrics.py +1 -1
  14. scitex/ai/plt/_plot_feature_importance.py +1 -1
  15. scitex/ai/plt/_plot_learning_curve.py +1 -1
  16. scitex/ai/plt/_plot_optuna_study.py +1 -1
  17. scitex/ai/plt/_plot_pre_rec_curve.py +1 -1
  18. scitex/ai/plt/_plot_roc_curve.py +1 -1
  19. scitex/ai/plt/_stx_conf_mat.py +1 -1
  20. scitex/ai/training/_LearningCurveLogger.py +1 -1
  21. scitex/audio/mcp_server.py +38 -8
  22. scitex/bridge/_figrecipe.py +1 -1
  23. scitex/bridge/_helpers.py +1 -1
  24. scitex/bridge/_plt_vis.py +1 -1
  25. scitex/bridge/_stats_plt.py +1 -1
  26. scitex/bridge/_stats_vis.py +2 -2
  27. scitex/browser/automation/CookieHandler.py +1 -1
  28. scitex/browser/core/BrowserMixin.py +1 -1
  29. scitex/browser/core/ChromeProfileManager.py +1 -1
  30. scitex/browser/debugging/_browser_logger.py +1 -1
  31. scitex/browser/debugging/_highlight_element.py +1 -1
  32. scitex/browser/debugging/_show_grid.py +1 -1
  33. scitex/browser/interaction/click_center.py +1 -1
  34. scitex/browser/interaction/click_with_fallbacks.py +1 -1
  35. scitex/browser/interaction/close_popups.py +1 -1
  36. scitex/browser/interaction/fill_with_fallbacks.py +1 -1
  37. scitex/browser/pdf/click_download_for_chrome_pdf_viewer.py +1 -1
  38. scitex/browser/pdf/detect_chrome_pdf_viewer.py +1 -1
  39. scitex/browser/stealth/HumanBehavior.py +1 -1
  40. scitex/browser/stealth/StealthManager.py +1 -1
  41. scitex/{fig → canvas}/__init__.py +84 -96
  42. scitex/canvas/_mcp_handlers.py +372 -0
  43. scitex/canvas/_mcp_tool_schemas.py +219 -0
  44. scitex/{fig → canvas}/backend/_parser.py +1 -1
  45. scitex/{fig → canvas}/canvas.py +13 -14
  46. scitex/{fts/_fig/_editor → canvas/editor}/_defaults.py +2 -2
  47. scitex/{fig → canvas}/editor/edit/__init__.py +11 -14
  48. scitex/{fig → canvas}/editor/edit/bundle_resolver.py +56 -48
  49. scitex/{fig → canvas}/editor/edit/editor_launcher.py +79 -26
  50. scitex/{fts/_fig/_editor/_cui/_panel_loader.py → canvas/editor/edit/panel_loader.py} +8 -8
  51. scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/_bbox.py +2 -1
  52. scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/_core.py +84 -84
  53. scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/_renderer.py +7 -6
  54. scitex/{fts/_fig/_editor/_gui/_flask_editor → canvas/editor/flask_editor}/static/css/features/canvas.css +2 -2
  55. scitex/{fig → canvas}/editor/flask_editor/static/css/features/panel-grid.css +1 -1
  56. scitex/{fig → canvas}/editor/flask_editor/static/js/core/api.js +3 -4
  57. scitex/{fig → canvas}/editor/flask_editor/static/js/editor/preview.js +5 -5
  58. scitex/{fig → canvas}/editor/flask_editor/templates/_html.py +3 -3
  59. scitex/{fig → canvas}/editor/flask_editor/templates/_scripts.py +10 -10
  60. scitex/{fig → canvas}/editor/flask_editor/templates/_styles.py +3 -3
  61. scitex/{fig → canvas}/io/__init__.py +32 -38
  62. scitex/{fig → canvas}/io/_bundle.py +217 -154
  63. scitex/{fig → canvas}/io/_canvas.py +1 -1
  64. scitex/{fig → canvas}/io/_data.py +1 -1
  65. scitex/{fig → canvas}/io/_export.py +1 -1
  66. scitex/{fig → canvas}/io/_load.py +1 -1
  67. scitex/{fig → canvas}/io/_panel.py +1 -1
  68. scitex/{fig → canvas}/io/_save.py +1 -1
  69. scitex/canvas/mcp_server.py +151 -0
  70. scitex/{fig → canvas}/model/__init__.py +1 -1
  71. scitex/{fig → canvas}/model/_annotations.py +1 -1
  72. scitex/{fig → canvas}/model/_axes.py +1 -1
  73. scitex/{fig → canvas}/model/_figure.py +1 -1
  74. scitex/{fig → canvas}/model/_guides.py +1 -1
  75. scitex/{fig → canvas}/model/_plot.py +1 -1
  76. scitex/{fig → canvas}/model/_styles.py +1 -1
  77. scitex/{fig → canvas}/utils/__init__.py +1 -1
  78. scitex/capture/mcp_server.py +41 -12
  79. scitex/cli/audio.py +233 -0
  80. scitex/cli/capture.py +307 -0
  81. scitex/cli/convert.py +10 -6
  82. scitex/cli/main.py +27 -4
  83. scitex/cli/repro.py +233 -0
  84. scitex/cli/resource.py +240 -0
  85. scitex/cli/stats.py +325 -0
  86. scitex/cli/template.py +236 -0
  87. scitex/cli/tex.py +286 -0
  88. scitex/cli/web.py +11 -12
  89. scitex/dev/__init__.py +3 -0
  90. scitex/dev/_pyproject.py +405 -0
  91. scitex/dev/plt/__init__.py +2 -2
  92. scitex/dev/plt/mpl/get_dir_ax.py +1 -1
  93. scitex/dev/plt/mpl/get_signatures.py +1 -1
  94. scitex/dev/plt/mpl/get_signatures_details.py +1 -1
  95. scitex/diagram/README.md +7 -7
  96. scitex/diagram/_mcp_handlers.py +400 -0
  97. scitex/diagram/_mcp_tool_schemas.py +157 -0
  98. scitex/diagram/mcp_server.py +151 -0
  99. scitex/dsp/_demo_sig.py +51 -5
  100. scitex/dsp/_mne.py +13 -2
  101. scitex/dsp/_modulation_index.py +15 -3
  102. scitex/dsp/_pac.py +23 -5
  103. scitex/dsp/_psd.py +16 -4
  104. scitex/dsp/_resample.py +24 -4
  105. scitex/dsp/_transform.py +16 -3
  106. scitex/dsp/add_noise.py +15 -1
  107. scitex/dsp/norm.py +17 -2
  108. scitex/dsp/reference.py +17 -1
  109. scitex/dsp/utils/_differential_bandpass_filters.py +20 -2
  110. scitex/dsp/utils/_zero_pad.py +18 -4
  111. scitex/dt/_normalize_timestamp.py +1 -1
  112. scitex/git/_session.py +1 -1
  113. scitex/io/__init__.py +7 -19
  114. scitex/io/_load.py +15 -19
  115. scitex/io/_load_modules/_canvas.py +2 -2
  116. scitex/io/_load_modules/_con.py +17 -6
  117. scitex/io/_load_modules/_eeg.py +28 -13
  118. scitex/io/_load_modules/_optuna.py +21 -63
  119. scitex/io/_load_modules/_torch.py +11 -3
  120. scitex/io/_save.py +11 -16
  121. scitex/io/_save_modules/__init__.py +6 -10
  122. scitex/io/_save_modules/_canvas.py +3 -3
  123. scitex/io/_save_modules/_optuna_study_as_csv_and_pngs.py +13 -2
  124. scitex/io/_save_modules/_plot_bundle.py +112 -0
  125. scitex/io/_save_modules/{_pltz_stx.py → _plot_scitex.py} +7 -7
  126. scitex/io/_save_modules/_stx_bundle.py +16 -16
  127. scitex/io/_save_modules/_torch.py +11 -3
  128. scitex/io/bundle/README.md +89 -80
  129. scitex/{fts/_bundle/_FTS.py → io/bundle/_Bundle.py} +197 -95
  130. scitex/io/bundle/__init__.py +67 -35
  131. scitex/{fts/_bundle → io/bundle}/_children.py +32 -40
  132. scitex/io/bundle/_core.py +184 -97
  133. scitex/{fts/_bundle/_dataclasses/_Node.py → io/bundle/_dataclasses/_Spec.py} +29 -23
  134. scitex/{fts/_bundle/_dataclasses/_NodeRefs.py → io/bundle/_dataclasses/_SpecRefs.py} +6 -6
  135. scitex/{fts/_bundle → io/bundle}/_dataclasses/__init__.py +4 -4
  136. scitex/{fts/_bundle → io/bundle}/_loader.py +19 -19
  137. scitex/io/bundle/_manifest.py +99 -0
  138. scitex/{fts/_bundle → io/bundle}/_mpl_helpers.py +119 -28
  139. scitex/io/bundle/_nested.py +113 -100
  140. scitex/{fts/_bundle → io/bundle}/_saver.py +13 -14
  141. scitex/{fts/_bundle → io/bundle}/_storage.py +3 -3
  142. scitex/io/bundle/_types.py +41 -16
  143. scitex/{fts/_bundle → io/bundle}/_validation.py +20 -18
  144. scitex/io/bundle/_zip.py +21 -31
  145. scitex/{fts/_kinds → io/bundle/kinds}/_plot/_backend/_parser.py +1 -1
  146. scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Annotations.py +1 -1
  147. scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Axes.py +1 -1
  148. scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Figure.py +1 -1
  149. scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_Guides.py +1 -1
  150. scitex/{fts/_kinds → io/bundle/kinds}/_plot/_models/_Plot.py +1 -1
  151. scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_Styles.py +1 -1
  152. scitex/{fts/_kinds → io/bundle/kinds}/_plot/_utils/_plot_layout.py +1 -1
  153. scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/__init__.py +1 -1
  154. scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_editor/_app.py +1 -1
  155. scitex/{fts/_tables → io/bundle/kinds/_table}/_latex/_export.py +1 -1
  156. scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_figure_exporter.py +1 -1
  157. scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_table_exporter.py +1 -1
  158. scitex/io/bundle/schemas/__init__.py +30 -0
  159. scitex/mcp_server.py +159 -0
  160. scitex/parallel/_run.py +5 -4
  161. scitex/path/_find.py +60 -83
  162. scitex/path/_get_module_path.py +23 -21
  163. scitex/path/_get_spath.py +6 -27
  164. scitex/path/_getsize.py +23 -9
  165. scitex/path/_increment_version.py +31 -38
  166. scitex/path/_mk_spath.py +26 -29
  167. scitex/path/_path.py +5 -12
  168. scitex/path/_split.py +27 -15
  169. scitex/path/_this_path.py +23 -9
  170. scitex/plt/_mcp_handlers.py +361 -0
  171. scitex/plt/_mcp_tool_schemas.py +169 -0
  172. scitex/plt/_subplots/_AxisWrapperMixins/_MatplotlibPlotMixin/__init__.py +2 -1
  173. scitex/plt/_subplots/_AxisWrapperMixins/__init__.py +2 -2
  174. scitex/plt/gallery/_generate.py +76 -50
  175. scitex/plt/io/__init__.py +17 -19
  176. scitex/plt/io/_bundle.py +99 -52
  177. scitex/plt/io/_layered_bundle.py +303 -168
  178. scitex/plt/mcp_server.py +205 -0
  179. scitex/plt/utils/_csv_column_naming.py +250 -118
  180. scitex/repro/README_RandomStateManager.md +3 -3
  181. scitex/repro/_RandomStateManager.py +14 -14
  182. scitex/repro/_gen_ID.py +1 -1
  183. scitex/repro/_gen_timestamp.py +1 -1
  184. scitex/repro/_hash_array.py +4 -4
  185. scitex/schema/__init__.py +69 -73
  186. scitex/schema/_canvas.py +1 -1
  187. scitex/schema/_stats.py +2 -2
  188. scitex/scholar/__main__.py +24 -2
  189. scitex/scholar/_mcp_handlers.py +685 -0
  190. scitex/scholar/_mcp_tool_schemas.py +339 -0
  191. scitex/scholar/docs/template.py +1 -1
  192. scitex/scholar/examples/07_storage_integration.py +1 -1
  193. scitex/scholar/impact_factor/jcr/ImpactFactorJCREngine.py +1 -1
  194. scitex/scholar/impact_factor/jcr/build_database.py +1 -1
  195. scitex/scholar/mcp_server.py +315 -0
  196. scitex/scholar/pdf_download/ScholarPDFDownloader.py +1 -1
  197. scitex/scholar/pipelines/ScholarPipelineBibTeX.py +1 -1
  198. scitex/scholar/pipelines/ScholarPipelineParallel.py +1 -1
  199. scitex/scholar/pipelines/ScholarPipelineSingle.py +1 -1
  200. scitex/scholar/storage/PaperIO.py +1 -1
  201. scitex/session/README.md +4 -4
  202. scitex/session/__init__.py +1 -1
  203. scitex/session/_decorator.py +9 -9
  204. scitex/session/_lifecycle.py +5 -5
  205. scitex/session/template.py +1 -1
  206. scitex/stats/__init__.py +30 -33
  207. scitex/stats/__main__.py +281 -0
  208. scitex/stats/_mcp_handlers.py +1191 -0
  209. scitex/stats/_mcp_tool_schemas.py +384 -0
  210. scitex/stats/_schema.py +1 -1
  211. scitex/stats/correct/_correct_bonferroni.py +1 -1
  212. scitex/stats/correct/_correct_fdr.py +1 -1
  213. scitex/stats/correct/_correct_fdr_.py +1 -1
  214. scitex/stats/correct/_correct_holm.py +1 -1
  215. scitex/stats/correct/_correct_sidak.py +1 -1
  216. scitex/stats/effect_sizes/_cliffs_delta.py +1 -1
  217. scitex/stats/effect_sizes/_cohens_d.py +1 -1
  218. scitex/stats/effect_sizes/_epsilon_squared.py +1 -1
  219. scitex/stats/effect_sizes/_eta_squared.py +1 -1
  220. scitex/stats/effect_sizes/_prob_superiority.py +1 -1
  221. scitex/stats/io/__init__.py +10 -11
  222. scitex/stats/io/_bundle.py +16 -16
  223. scitex/stats/mcp_server.py +405 -0
  224. scitex/stats/posthoc/_dunnett.py +1 -1
  225. scitex/stats/posthoc/_games_howell.py +1 -1
  226. scitex/stats/posthoc/_tukey_hsd.py +1 -1
  227. scitex/stats/power/_power.py +1 -1
  228. scitex/stats/utils/_effect_size.py +1 -1
  229. scitex/stats/utils/_formatters.py +1 -1
  230. scitex/stats/utils/_power.py +1 -1
  231. scitex/template/_mcp_handlers.py +259 -0
  232. scitex/template/_mcp_tool_schemas.py +112 -0
  233. scitex/template/mcp_server.py +186 -0
  234. scitex/utils/_verify_scitex_format.py +2 -2
  235. scitex/utils/template.py +1 -1
  236. scitex/web/__init__.py +12 -11
  237. scitex/web/_scraping.py +26 -265
  238. scitex/web/download_images.py +316 -0
  239. scitex/writer/Writer.py +1 -1
  240. scitex/writer/_clone_writer_project.py +1 -1
  241. scitex/writer/_validate_tree_structures.py +1 -1
  242. scitex/writer/dataclasses/config/_WriterConfig.py +1 -1
  243. scitex/writer/dataclasses/contents/_ManuscriptContents.py +1 -1
  244. scitex/writer/dataclasses/core/_Document.py +1 -1
  245. scitex/writer/dataclasses/core/_DocumentSection.py +1 -1
  246. scitex/writer/dataclasses/results/_CompilationResult.py +1 -1
  247. scitex/writer/dataclasses/results/_LaTeXIssue.py +1 -1
  248. scitex/writer/utils/.legacy_git_retry.py +7 -5
  249. scitex/writer/utils/_parse_latex_logs.py +1 -1
  250. scitex-2.13.0.dist-info/METADATA +1231 -0
  251. {scitex-2.10.3.dist-info → scitex-2.13.0.dist-info}/RECORD +376 -470
  252. scitex-2.13.0.dist-info/entry_points.txt +11 -0
  253. scitex/fig/editor/_defaults.py +0 -300
  254. scitex/fig/editor/edit/panel_loader.py +0 -232
  255. scitex/fig/editor/flask_editor/_bbox.py +0 -1299
  256. scitex/fig/editor/flask_editor/_core.py +0 -1429
  257. scitex/fig/editor/flask_editor/_renderer.py +0 -813
  258. scitex/fig/editor/flask_editor/static/css/features/canvas.css +0 -176
  259. scitex/fts/README.md +0 -262
  260. scitex/fts/TODO.md +0 -66
  261. scitex/fts/__init__.py +0 -90
  262. scitex/fts/_bundle/README_IN_BUNDLE.md +0 -102
  263. scitex/fts/_bundle/__init__.py +0 -38
  264. scitex/fts/_bundle/_utils/__init__.py +0 -55
  265. scitex/fts/_bundle/_utils/_const.py +0 -26
  266. scitex/fts/_bundle/_utils/_errors.py +0 -73
  267. scitex/fts/_bundle/_utils/_generate.py +0 -21
  268. scitex/fts/_bundle/_utils/_types.py +0 -76
  269. scitex/fts/_bundle/_zipbundle.py +0 -165
  270. scitex/fts/_fig/__init__.py +0 -22
  271. scitex/fts/_fig/_backend/_parser.py +0 -188
  272. scitex/fts/_fig/_editor/__init__.py +0 -14
  273. scitex/fts/_fig/_editor/_cui/__init__.py +0 -33
  274. scitex/fts/_fig/_editor/_cui/_backend_detector.py +0 -39
  275. scitex/fts/_fig/_editor/_cui/_bundle_resolver.py +0 -366
  276. scitex/fts/_fig/_editor/_cui/_editor_launcher.py +0 -175
  277. scitex/fts/_fig/_editor/_cui/_manual_handler.py +0 -52
  278. scitex/fts/_fig/_editor/_cui/_path_resolver.py +0 -66
  279. scitex/fts/_fig/_editor/_gui/__init__.py +0 -11
  280. scitex/fts/_fig/_editor/_gui/_flask_editor/__init__.py +0 -20
  281. scitex/fts/_fig/_editor/_gui/_flask_editor/_plotter.py +0 -664
  282. scitex/fts/_fig/_editor/_gui/_flask_editor/_utils.py +0 -79
  283. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/base/reset.css +0 -41
  284. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/base/typography.css +0 -16
  285. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/base/variables.css +0 -85
  286. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/buttons.css +0 -217
  287. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/context-menu.css +0 -93
  288. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/dropdown.css +0 -57
  289. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/forms.css +0 -112
  290. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/modal.css +0 -59
  291. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/components/sections.css +0 -212
  292. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/element-inspector.css +0 -190
  293. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/loading.css +0 -59
  294. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/overlay.css +0 -45
  295. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/panel-grid.css +0 -95
  296. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/selection.css +0 -101
  297. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/features/statistics.css +0 -138
  298. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/index.css +0 -31
  299. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/layout/container.css +0 -7
  300. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/layout/controls.css +0 -56
  301. scitex/fts/_fig/_editor/_gui/_flask_editor/static/css/layout/preview.css +0 -78
  302. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/alignment/axis.js +0 -314
  303. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/alignment/basic.js +0 -107
  304. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/alignment/distribute.js +0 -54
  305. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/canvas.js +0 -172
  306. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/dragging.js +0 -258
  307. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/resize.js +0 -48
  308. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/canvas/selection.js +0 -71
  309. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/core/api.js +0 -288
  310. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/core/state.js +0 -143
  311. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/core/utils.js +0 -245
  312. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/dev/element-inspector.js +0 -992
  313. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/bbox.js +0 -339
  314. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/element-drag.js +0 -286
  315. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/overlay.js +0 -371
  316. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/editor/preview.js +0 -293
  317. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/main.js +0 -426
  318. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/shortcuts/context-menu.js +0 -152
  319. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/shortcuts/keyboard.js +0 -265
  320. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/controls.js +0 -184
  321. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/download.js +0 -57
  322. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/help.js +0 -100
  323. scitex/fts/_fig/_editor/_gui/_flask_editor/static/js/ui/theme.js +0 -34
  324. scitex/fts/_fig/_editor/_gui/_flask_editor/templates/__init__.py +0 -124
  325. scitex/fts/_fig/_editor/_gui/_flask_editor/templates/_html.py +0 -851
  326. scitex/fts/_fig/_editor/_gui/_flask_editor/templates/_scripts.py +0 -4932
  327. scitex/fts/_fig/_editor/_gui/_flask_editor/templates/_styles.py +0 -1657
  328. scitex/fts/_fig/_editor/_gui/_flask_editor.py +0 -36
  329. scitex/fts/_fig/_models/_Annotations.py +0 -115
  330. scitex/fts/_fig/_models/_Axes.py +0 -152
  331. scitex/fts/_fig/_models/_Figure.py +0 -138
  332. scitex/fts/_fig/_models/_Plot.py +0 -123
  333. scitex/fts/_fig/_utils/_plot_layout.py +0 -397
  334. scitex/fts/_kinds/_figure/_composite.py +0 -345
  335. scitex/fts/_kinds/_plot/_backend/__init__.py +0 -53
  336. scitex/fts/_kinds/_plot/_backend/_export.py +0 -165
  337. scitex/fts/_kinds/_plot/_backend/_render.py +0 -538
  338. scitex/fts/_kinds/_plot/_dataclasses/_ChannelEncoding.py +0 -46
  339. scitex/fts/_kinds/_plot/_dataclasses/_Encoding.py +0 -82
  340. scitex/fts/_kinds/_plot/_dataclasses/_Theme.py +0 -441
  341. scitex/fts/_kinds/_plot/_dataclasses/_TraceEncoding.py +0 -52
  342. scitex/fts/_kinds/_plot/_dataclasses/__init__.py +0 -47
  343. scitex/fts/_kinds/_plot/_models/_Guides.py +0 -104
  344. scitex/fts/_kinds/_plot/_models/_Styles.py +0 -245
  345. scitex/fts/_kinds/_plot/_models/__init__.py +0 -80
  346. scitex/fts/_kinds/_plot/_models/_plot_types/__init__.py +0 -156
  347. scitex/fts/_kinds/_plot/_models/_plot_types/_bar.py +0 -43
  348. scitex/fts/_kinds/_plot/_models/_plot_types/_box.py +0 -38
  349. scitex/fts/_kinds/_plot/_models/_plot_types/_distribution.py +0 -36
  350. scitex/fts/_kinds/_plot/_models/_plot_types/_errorbar.py +0 -60
  351. scitex/fts/_kinds/_plot/_models/_plot_types/_histogram.py +0 -30
  352. scitex/fts/_kinds/_plot/_models/_plot_types/_image.py +0 -61
  353. scitex/fts/_kinds/_plot/_models/_plot_types/_line.py +0 -57
  354. scitex/fts/_kinds/_plot/_models/_plot_types/_scatter.py +0 -30
  355. scitex/fts/_kinds/_plot/_models/_plot_types/_seaborn.py +0 -121
  356. scitex/fts/_kinds/_plot/_models/_plot_types/_violin.py +0 -36
  357. scitex/fts/_kinds/_plot/_utils/__init__.py +0 -129
  358. scitex/fts/_kinds/_plot/_utils/_auto_layout.py +0 -127
  359. scitex/fts/_kinds/_plot/_utils/_calc_bounds.py +0 -111
  360. scitex/fts/_kinds/_plot/_utils/_const_sizes.py +0 -48
  361. scitex/fts/_kinds/_plot/_utils/_convert_coords.py +0 -77
  362. scitex/fts/_kinds/_plot/_utils/_get_template.py +0 -178
  363. scitex/fts/_kinds/_plot/_utils/_normalize.py +0 -73
  364. scitex/fts/_kinds/_plot/_utils/_validate.py +0 -197
  365. scitex/fts/_kinds/_table/_latex/_export.py +0 -279
  366. scitex/fts/_stats/__init__.py +0 -48
  367. scitex/fts/_stats/_dataclasses/_Stats.py +0 -423
  368. scitex/fts/_stats/_dataclasses/__init__.py +0 -48
  369. scitex/fts/_tables/__init__.py +0 -65
  370. scitex/fts/_tables/_latex/__init__.py +0 -93
  371. scitex/fts/_tables/_latex/_editor/__init__.py +0 -11
  372. scitex/fts/_tables/_latex/_editor/_app.py +0 -725
  373. scitex/fts/_tables/_latex/_figure_exporter.py +0 -153
  374. scitex/fts/_tables/_latex/_stats_formatter.py +0 -274
  375. scitex/fts/_tables/_latex/_table_exporter.py +0 -362
  376. scitex/fts/_tables/_latex/_utils.py +0 -369
  377. scitex/fts/_tables/_latex/_validator.py +0 -445
  378. scitex/io/_save_modules/_pltz_bundle.py +0 -356
  379. scitex-2.10.3.dist-info/METADATA +0 -952
  380. scitex-2.10.3.dist-info/entry_points.txt +0 -2
  381. /scitex/{fig → canvas}/README.md +0 -0
  382. /scitex/{fig → canvas}/backend/__init__.py +0 -0
  383. /scitex/{fig → canvas}/backend/_export.py +0 -0
  384. /scitex/{fig → canvas}/backend/_render.py +0 -0
  385. /scitex/{fig → canvas}/docs/CANVAS_ARCHITECTURE.md +0 -0
  386. /scitex/{fig → canvas}/editor/__init__.py +0 -0
  387. /scitex/{fig → canvas}/editor/_dearpygui_editor.py +0 -0
  388. /scitex/{fig → canvas}/editor/_flask_editor.py +0 -0
  389. /scitex/{fig → canvas}/editor/_mpl_editor.py +0 -0
  390. /scitex/{fig → canvas}/editor/_qt_editor.py +0 -0
  391. /scitex/{fig → canvas}/editor/_tkinter_editor.py +0 -0
  392. /scitex/{fig → canvas}/editor/edit/backend_detector.py +0 -0
  393. /scitex/{fig → canvas}/editor/edit/manual_handler.py +0 -0
  394. /scitex/{fig → canvas}/editor/edit/path_resolver.py +0 -0
  395. /scitex/{fig → canvas}/editor/flask_editor/__init__.py +0 -0
  396. /scitex/{fig → canvas}/editor/flask_editor/_plotter.py +0 -0
  397. /scitex/{fig → canvas}/editor/flask_editor/_utils.py +0 -0
  398. /scitex/{fig → canvas}/editor/flask_editor/static/css/base/reset.css +0 -0
  399. /scitex/{fig → canvas}/editor/flask_editor/static/css/base/typography.css +0 -0
  400. /scitex/{fig → canvas}/editor/flask_editor/static/css/base/variables.css +0 -0
  401. /scitex/{fig → canvas}/editor/flask_editor/static/css/components/buttons.css +0 -0
  402. /scitex/{fig → canvas}/editor/flask_editor/static/css/components/context-menu.css +0 -0
  403. /scitex/{fig → canvas}/editor/flask_editor/static/css/components/dropdown.css +0 -0
  404. /scitex/{fig → canvas}/editor/flask_editor/static/css/components/forms.css +0 -0
  405. /scitex/{fig → canvas}/editor/flask_editor/static/css/components/modal.css +0 -0
  406. /scitex/{fig → canvas}/editor/flask_editor/static/css/components/sections.css +0 -0
  407. /scitex/{fig → canvas}/editor/flask_editor/static/css/features/element-inspector.css +0 -0
  408. /scitex/{fig → canvas}/editor/flask_editor/static/css/features/loading.css +0 -0
  409. /scitex/{fig → canvas}/editor/flask_editor/static/css/features/overlay.css +0 -0
  410. /scitex/{fig → canvas}/editor/flask_editor/static/css/features/selection.css +0 -0
  411. /scitex/{fig → canvas}/editor/flask_editor/static/css/features/statistics.css +0 -0
  412. /scitex/{fig → canvas}/editor/flask_editor/static/css/index.css +0 -0
  413. /scitex/{fig → canvas}/editor/flask_editor/static/css/layout/container.css +0 -0
  414. /scitex/{fig → canvas}/editor/flask_editor/static/css/layout/controls.css +0 -0
  415. /scitex/{fig → canvas}/editor/flask_editor/static/css/layout/preview.css +0 -0
  416. /scitex/{fig → canvas}/editor/flask_editor/static/js/alignment/axis.js +0 -0
  417. /scitex/{fig → canvas}/editor/flask_editor/static/js/alignment/basic.js +0 -0
  418. /scitex/{fig → canvas}/editor/flask_editor/static/js/alignment/distribute.js +0 -0
  419. /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/canvas.js +0 -0
  420. /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/dragging.js +0 -0
  421. /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/resize.js +0 -0
  422. /scitex/{fig → canvas}/editor/flask_editor/static/js/canvas/selection.js +0 -0
  423. /scitex/{fig → canvas}/editor/flask_editor/static/js/core/state.js +0 -0
  424. /scitex/{fig → canvas}/editor/flask_editor/static/js/core/utils.js +0 -0
  425. /scitex/{fig → canvas}/editor/flask_editor/static/js/dev/element-inspector.js +0 -0
  426. /scitex/{fig → canvas}/editor/flask_editor/static/js/editor/bbox.js +0 -0
  427. /scitex/{fig → canvas}/editor/flask_editor/static/js/editor/element-drag.js +0 -0
  428. /scitex/{fig → canvas}/editor/flask_editor/static/js/editor/overlay.js +0 -0
  429. /scitex/{fig → canvas}/editor/flask_editor/static/js/main.js +0 -0
  430. /scitex/{fig → canvas}/editor/flask_editor/static/js/shortcuts/context-menu.js +0 -0
  431. /scitex/{fig → canvas}/editor/flask_editor/static/js/shortcuts/keyboard.js +0 -0
  432. /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/controls.js +0 -0
  433. /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/download.js +0 -0
  434. /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/help.js +0 -0
  435. /scitex/{fig → canvas}/editor/flask_editor/static/js/ui/theme.js +0 -0
  436. /scitex/{fig → canvas}/editor/flask_editor/templates/__init__.py +0 -0
  437. /scitex/{fig → canvas}/io/_directory.py +0 -0
  438. /scitex/{fig → canvas}/model/_plot_types.py +0 -0
  439. /scitex/{fig → canvas}/utils/_defaults.py +0 -0
  440. /scitex/{fig → canvas}/utils/_validate.py +0 -0
  441. /scitex/{fts/_bundle → io/bundle}/_conversion/__init__.py +0 -0
  442. /scitex/{fts/_bundle → io/bundle}/_conversion/_bundle2dict.py +0 -0
  443. /scitex/{fts/_bundle → io/bundle}/_conversion/_dict2bundle.py +0 -0
  444. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_Axes.py +0 -0
  445. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_BBox.py +0 -0
  446. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_ColumnDef.py +0 -0
  447. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_DataFormat.py +0 -0
  448. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_DataInfo.py +0 -0
  449. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_DataSource.py +0 -0
  450. /scitex/{fts/_bundle → io/bundle}/_dataclasses/_SizeMM.py +0 -0
  451. /scitex/{fts/_bundle → io/bundle}/_extractors/__init__.py +0 -0
  452. /scitex/{fts/_bundle → io/bundle}/_extractors/_extract_bar.py +0 -0
  453. /scitex/{fts/_bundle → io/bundle}/_extractors/_extract_line.py +0 -0
  454. /scitex/{fts/_bundle → io/bundle}/_extractors/_extract_scatter.py +0 -0
  455. /scitex/{fts/_kinds → io/bundle/kinds}/__init__.py +0 -0
  456. /scitex/{fts/_kinds → io/bundle/kinds}/_figure/__init__.py +0 -0
  457. /scitex/{fts/_fig → io/bundle/kinds/_figure}/_composite.py +0 -0
  458. /scitex/{fts/_kinds → io/bundle/kinds}/_plot/__init__.py +0 -0
  459. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_backend/__init__.py +0 -0
  460. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_backend/_export.py +0 -0
  461. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_backend/_render.py +0 -0
  462. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_ChannelEncoding.py +0 -0
  463. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_Encoding.py +0 -0
  464. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_Theme.py +0 -0
  465. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/_TraceEncoding.py +0 -0
  466. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_dataclasses/__init__.py +0 -0
  467. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/__init__.py +0 -0
  468. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/__init__.py +0 -0
  469. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_bar.py +0 -0
  470. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_box.py +0 -0
  471. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_distribution.py +0 -0
  472. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_errorbar.py +0 -0
  473. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_histogram.py +0 -0
  474. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_image.py +0 -0
  475. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_line.py +0 -0
  476. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_scatter.py +0 -0
  477. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_seaborn.py +0 -0
  478. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_models/_plot_types/_violin.py +0 -0
  479. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/__init__.py +0 -0
  480. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_auto_layout.py +0 -0
  481. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_calc_bounds.py +0 -0
  482. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_const_sizes.py +0 -0
  483. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_convert_coords.py +0 -0
  484. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_get_template.py +0 -0
  485. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_normalize.py +0 -0
  486. /scitex/{fts/_fig → io/bundle/kinds/_plot}/_utils/_validate.py +0 -0
  487. /scitex/{fts/_kinds → io/bundle/kinds}/_shape/__init__.py +0 -0
  488. /scitex/{fts/_kinds → io/bundle/kinds}/_stats/__init__.py +0 -0
  489. /scitex/{fts/_kinds → io/bundle/kinds}/_stats/_dataclasses/_Stats.py +0 -0
  490. /scitex/{fts/_kinds → io/bundle/kinds}/_stats/_dataclasses/__init__.py +0 -0
  491. /scitex/{fts/_kinds → io/bundle/kinds}/_table/__init__.py +0 -0
  492. /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_editor/__init__.py +0 -0
  493. /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_stats_formatter.py +0 -0
  494. /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_utils.py +0 -0
  495. /scitex/{fts/_kinds → io/bundle/kinds}/_table/_latex/_validator.py +0 -0
  496. /scitex/{fts/_kinds → io/bundle/kinds}/_text/__init__.py +0 -0
  497. /scitex/{fts/_schemas → io/bundle/schemas}/data_info.schema.json +0 -0
  498. /scitex/{fts/_schemas → io/bundle/schemas}/encoding.schema.json +0 -0
  499. /scitex/{fts/_schemas → io/bundle/schemas}/node.schema.json +0 -0
  500. /scitex/{fts/_schemas → io/bundle/schemas}/render_manifest.schema.json +0 -0
  501. /scitex/{fts/_schemas → io/bundle/schemas}/stats.schema.json +0 -0
  502. /scitex/{fts/_schemas → io/bundle/schemas}/theme.schema.json +0 -0
  503. {scitex-2.10.3.dist-info → scitex-2.13.0.dist-info}/WHEEL +0 -0
  504. {scitex-2.10.3.dist-info → scitex-2.13.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