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
@@ -0,0 +1,384 @@
1
+ #!/usr/bin/env python3
2
+ # Timestamp: 2026-01-08
3
+ # File: src/scitex/stats/_mcp_tool_schemas.py
4
+ # ----------------------------------------
5
+
6
+ """Tool schemas for the scitex-stats MCP server."""
7
+
8
+ from __future__ import annotations
9
+
10
+ import mcp.types as types
11
+
12
+ __all__ = ["get_tool_schemas"]
13
+
14
+
15
+ def get_tool_schemas() -> list[types.Tool]:
16
+ """Return all tool schemas for the Stats MCP server."""
17
+ return [
18
+ # Test Recommendation
19
+ types.Tool(
20
+ name="recommend_tests",
21
+ description=(
22
+ "Recommend appropriate statistical tests based on data characteristics. "
23
+ "Returns ranked list of tests with rationale."
24
+ ),
25
+ inputSchema={
26
+ "type": "object",
27
+ "properties": {
28
+ "n_groups": {
29
+ "type": "integer",
30
+ "description": "Number of groups to compare",
31
+ "default": 2,
32
+ },
33
+ "sample_sizes": {
34
+ "type": "array",
35
+ "items": {"type": "integer"},
36
+ "description": "Sample sizes for each group",
37
+ },
38
+ "outcome_type": {
39
+ "type": "string",
40
+ "description": "Type of outcome variable",
41
+ "enum": ["continuous", "ordinal", "categorical", "binary"],
42
+ "default": "continuous",
43
+ },
44
+ "design": {
45
+ "type": "string",
46
+ "description": "Study design",
47
+ "enum": ["between", "within", "mixed"],
48
+ "default": "between",
49
+ },
50
+ "paired": {
51
+ "type": "boolean",
52
+ "description": "Whether data is paired/matched",
53
+ "default": False,
54
+ },
55
+ "has_control_group": {
56
+ "type": "boolean",
57
+ "description": "Whether there is a control group",
58
+ "default": False,
59
+ },
60
+ "top_k": {
61
+ "type": "integer",
62
+ "description": "Number of recommendations to return",
63
+ "default": 3,
64
+ },
65
+ },
66
+ },
67
+ ),
68
+ # Run Statistical Test
69
+ types.Tool(
70
+ name="run_test",
71
+ description=(
72
+ "Execute a statistical test on provided data. "
73
+ "Returns test statistic, p-value, effect size, and confidence intervals."
74
+ ),
75
+ inputSchema={
76
+ "type": "object",
77
+ "properties": {
78
+ "test_name": {
79
+ "type": "string",
80
+ "description": "Name of test to run",
81
+ "enum": [
82
+ "ttest_ind",
83
+ "ttest_paired",
84
+ "ttest_1samp",
85
+ "brunner_munzel",
86
+ "mannwhitneyu",
87
+ "wilcoxon",
88
+ "anova",
89
+ "kruskal",
90
+ "chi2",
91
+ "fisher_exact",
92
+ "pearson",
93
+ "spearman",
94
+ "kendall",
95
+ ],
96
+ },
97
+ "data": {
98
+ "type": "array",
99
+ "items": {"type": "array", "items": {"type": "number"}},
100
+ "description": "Data arrays for each group",
101
+ },
102
+ "alternative": {
103
+ "type": "string",
104
+ "description": "Alternative hypothesis",
105
+ "enum": ["two-sided", "less", "greater"],
106
+ "default": "two-sided",
107
+ },
108
+ },
109
+ "required": ["test_name", "data"],
110
+ },
111
+ ),
112
+ # Format Results
113
+ types.Tool(
114
+ name="format_results",
115
+ description=(
116
+ "Format statistical results in journal style (APA, Nature, etc.)"
117
+ ),
118
+ inputSchema={
119
+ "type": "object",
120
+ "properties": {
121
+ "test_name": {
122
+ "type": "string",
123
+ "description": "Name of the statistical test",
124
+ },
125
+ "statistic": {
126
+ "type": "number",
127
+ "description": "Test statistic value",
128
+ },
129
+ "p_value": {
130
+ "type": "number",
131
+ "description": "P-value",
132
+ },
133
+ "df": {
134
+ "type": "number",
135
+ "description": "Degrees of freedom (if applicable)",
136
+ },
137
+ "effect_size": {
138
+ "type": "number",
139
+ "description": "Effect size value",
140
+ },
141
+ "effect_size_name": {
142
+ "type": "string",
143
+ "description": "Name of effect size measure (d, r, eta2, etc.)",
144
+ },
145
+ "style": {
146
+ "type": "string",
147
+ "description": "Journal formatting style",
148
+ "enum": ["apa", "nature", "science", "brief"],
149
+ "default": "apa",
150
+ },
151
+ "ci_lower": {
152
+ "type": "number",
153
+ "description": "Lower bound of confidence interval",
154
+ },
155
+ "ci_upper": {
156
+ "type": "number",
157
+ "description": "Upper bound of confidence interval",
158
+ },
159
+ },
160
+ "required": ["test_name", "statistic", "p_value"],
161
+ },
162
+ ),
163
+ # Power Analysis
164
+ types.Tool(
165
+ name="power_analysis",
166
+ description=(
167
+ "Calculate statistical power or required sample size. "
168
+ "Supports various test types."
169
+ ),
170
+ inputSchema={
171
+ "type": "object",
172
+ "properties": {
173
+ "test_type": {
174
+ "type": "string",
175
+ "description": "Type of statistical test",
176
+ "enum": ["ttest", "anova", "correlation", "chi2"],
177
+ "default": "ttest",
178
+ },
179
+ "effect_size": {
180
+ "type": "number",
181
+ "description": "Expected effect size (Cohen's d, f, r, w)",
182
+ },
183
+ "alpha": {
184
+ "type": "number",
185
+ "description": "Significance level",
186
+ "default": 0.05,
187
+ },
188
+ "power": {
189
+ "type": "number",
190
+ "description": "Desired statistical power (for sample size calculation)",
191
+ "default": 0.8,
192
+ },
193
+ "n": {
194
+ "type": "integer",
195
+ "description": "Sample size (for power calculation)",
196
+ },
197
+ "n_groups": {
198
+ "type": "integer",
199
+ "description": "Number of groups (for ANOVA)",
200
+ "default": 2,
201
+ },
202
+ "ratio": {
203
+ "type": "number",
204
+ "description": "Ratio of group sizes (n2/n1)",
205
+ "default": 1.0,
206
+ },
207
+ },
208
+ },
209
+ ),
210
+ # Correct P-values
211
+ types.Tool(
212
+ name="correct_pvalues",
213
+ description=(
214
+ "Apply multiple comparison correction to p-values. "
215
+ "Supports Bonferroni, FDR (Benjamini-Hochberg), Holm, and Sidak methods."
216
+ ),
217
+ inputSchema={
218
+ "type": "object",
219
+ "properties": {
220
+ "pvalues": {
221
+ "type": "array",
222
+ "items": {"type": "number"},
223
+ "description": "Array of p-values to correct",
224
+ },
225
+ "method": {
226
+ "type": "string",
227
+ "description": "Correction method",
228
+ "enum": ["bonferroni", "fdr_bh", "fdr_by", "holm", "sidak"],
229
+ "default": "fdr_bh",
230
+ },
231
+ "alpha": {
232
+ "type": "number",
233
+ "description": "Family-wise error rate",
234
+ "default": 0.05,
235
+ },
236
+ },
237
+ "required": ["pvalues"],
238
+ },
239
+ ),
240
+ # Descriptive Statistics
241
+ types.Tool(
242
+ name="describe",
243
+ description=(
244
+ "Calculate descriptive statistics for data. "
245
+ "Returns mean, std, median, quartiles, skewness, kurtosis."
246
+ ),
247
+ inputSchema={
248
+ "type": "object",
249
+ "properties": {
250
+ "data": {
251
+ "type": "array",
252
+ "items": {"type": "number"},
253
+ "description": "Data array to describe",
254
+ },
255
+ "percentiles": {
256
+ "type": "array",
257
+ "items": {"type": "number"},
258
+ "description": "Percentiles to calculate (0-100)",
259
+ "default": [25, 50, 75],
260
+ },
261
+ },
262
+ "required": ["data"],
263
+ },
264
+ ),
265
+ # Effect Size Calculation
266
+ types.Tool(
267
+ name="effect_size",
268
+ description=(
269
+ "Calculate effect size between groups. "
270
+ "Returns Cohen's d, Hedges' g, or other appropriate measure."
271
+ ),
272
+ inputSchema={
273
+ "type": "object",
274
+ "properties": {
275
+ "group1": {
276
+ "type": "array",
277
+ "items": {"type": "number"},
278
+ "description": "First group data",
279
+ },
280
+ "group2": {
281
+ "type": "array",
282
+ "items": {"type": "number"},
283
+ "description": "Second group data",
284
+ },
285
+ "measure": {
286
+ "type": "string",
287
+ "description": "Effect size measure",
288
+ "enum": ["cohens_d", "hedges_g", "glass_delta", "cliffs_delta"],
289
+ "default": "cohens_d",
290
+ },
291
+ "pooled": {
292
+ "type": "boolean",
293
+ "description": "Use pooled standard deviation",
294
+ "default": True,
295
+ },
296
+ },
297
+ "required": ["group1", "group2"],
298
+ },
299
+ ),
300
+ # Normality Test
301
+ types.Tool(
302
+ name="normality_test",
303
+ description=(
304
+ "Test whether data follows a normal distribution. "
305
+ "Returns test statistic and p-value."
306
+ ),
307
+ inputSchema={
308
+ "type": "object",
309
+ "properties": {
310
+ "data": {
311
+ "type": "array",
312
+ "items": {"type": "number"},
313
+ "description": "Data to test for normality",
314
+ },
315
+ "method": {
316
+ "type": "string",
317
+ "description": "Normality test method",
318
+ "enum": ["shapiro", "dagostino", "anderson", "lilliefors"],
319
+ "default": "shapiro",
320
+ },
321
+ },
322
+ "required": ["data"],
323
+ },
324
+ ),
325
+ # Post-hoc Tests
326
+ types.Tool(
327
+ name="posthoc_test",
328
+ description=(
329
+ "Run post-hoc pairwise comparisons after significant ANOVA/Kruskal. "
330
+ "Supports Tukey HSD, Dunnett, Games-Howell, Dunn."
331
+ ),
332
+ inputSchema={
333
+ "type": "object",
334
+ "properties": {
335
+ "groups": {
336
+ "type": "array",
337
+ "items": {"type": "array", "items": {"type": "number"}},
338
+ "description": "Data arrays for each group",
339
+ },
340
+ "group_names": {
341
+ "type": "array",
342
+ "items": {"type": "string"},
343
+ "description": "Names for each group",
344
+ },
345
+ "method": {
346
+ "type": "string",
347
+ "description": "Post-hoc method",
348
+ "enum": ["tukey", "dunnett", "games_howell", "dunn"],
349
+ "default": "tukey",
350
+ },
351
+ "control_group": {
352
+ "type": "integer",
353
+ "description": "Index of control group (for Dunnett)",
354
+ "default": 0,
355
+ },
356
+ },
357
+ "required": ["groups"],
358
+ },
359
+ ),
360
+ # P-value to Stars
361
+ types.Tool(
362
+ name="p_to_stars",
363
+ description=("Convert p-value to significance stars (*, **, ***, ns)"),
364
+ inputSchema={
365
+ "type": "object",
366
+ "properties": {
367
+ "p_value": {
368
+ "type": "number",
369
+ "description": "P-value to convert",
370
+ },
371
+ "thresholds": {
372
+ "type": "array",
373
+ "items": {"type": "number"},
374
+ "description": "Significance thresholds",
375
+ "default": [0.001, 0.01, 0.05],
376
+ },
377
+ },
378
+ "required": ["p_value"],
379
+ },
380
+ ),
381
+ ]
382
+
383
+
384
+ # EOF
scitex/stats/_schema.py CHANGED
@@ -7,7 +7,7 @@ Statistical Result Schema - DEPRECATED
7
7
  This module is deprecated. Import from scitex.schema._stats instead:
8
8
  from scitex.schema._stats import Position, StatStyling, StatPositioning, StatResult
9
9
 
10
- For the new simplified API, use scitex.fts._stats.
10
+ For the new simplified API, use scitex.io.bundle._stats.
11
11
  """
12
12
 
13
13
  import warnings
@@ -536,7 +536,7 @@ def run_main():
536
536
 
537
537
  args = parse_args()
538
538
 
539
- CONFIG, sys.stdout, sys.stderr, plt, CC, rng_manager = stx.session.start(
539
+ CONFIG, sys.stdout, sys.stderr, plt, CC, rng = stx.session.start(
540
540
  sys,
541
541
  plt,
542
542
  args=args,
@@ -392,7 +392,7 @@ def demo(verbose=False):
392
392
  """Demonstrate FDR correction."""
393
393
  import scitex as stx
394
394
 
395
- # CONFIG, sys.stdout, sys.stderr, plt, CC, rng_manager
395
+ # CONFIG, sys.stdout, sys.stderr, plt, CC, rng
396
396
 
397
397
  logger.info("Demonstrating False Discovery Rate correction")
398
398
 
@@ -603,7 +603,7 @@ def run_main():
603
603
 
604
604
  args = parse_args()
605
605
 
606
- CONFIG, sys.stdout, sys.stderr, plt, CC, rng_manager = stx.session.start(
606
+ CONFIG, sys.stdout, sys.stderr, plt, CC, rng = stx.session.start(
607
607
  sys,
608
608
  plt,
609
609
  args=args,
@@ -506,7 +506,7 @@ def run_main():
506
506
 
507
507
  args = parse_args()
508
508
 
509
- CONFIG, sys.stdout, sys.stderr, plt, CC, rng_manager = stx.session.start(
509
+ CONFIG, sys.stdout, sys.stderr, plt, CC, rng = stx.session.start(
510
510
  sys,
511
511
  plt,
512
512
  args=args,
@@ -333,7 +333,7 @@ def main():
333
333
  )
334
334
  args = parser.parse_args([])
335
335
 
336
- CONFIG, sys.stdout, sys.stderr, plt, CC, rng_manager = stx.session.start(
336
+ CONFIG, sys.stdout, sys.stderr, plt, CC, rng = stx.session.start(
337
337
  sys=sys,
338
338
  plt=plt,
339
339
  args=args,
@@ -304,7 +304,7 @@ def run_main():
304
304
 
305
305
  args = parse_args()
306
306
 
307
- CONFIG, sys.stdout, sys.stderr, plt, CC, rng_manager = stx.session.start(
307
+ CONFIG, sys.stdout, sys.stderr, plt, CC, rng = stx.session.start(
308
308
  sys,
309
309
  plt,
310
310
  args=args,
@@ -317,7 +317,7 @@ def run_main():
317
317
 
318
318
  args = parse_args()
319
319
 
320
- CONFIG, sys.stdout, sys.stderr, plt, CC, rng_manager = stx.session.start(
320
+ CONFIG, sys.stdout, sys.stderr, plt, CC, rng = stx.session.start(
321
321
  sys,
322
322
  plt,
323
323
  args=args,
@@ -288,7 +288,7 @@ def run_main():
288
288
 
289
289
  args = parse_args()
290
290
 
291
- CONFIG, sys.stdout, sys.stderr, plt, CC, rng_manager = stx.session.start(
291
+ CONFIG, sys.stdout, sys.stderr, plt, CC, rng = stx.session.start(
292
292
  sys,
293
293
  plt,
294
294
  args=args,
@@ -274,7 +274,7 @@ def run_main():
274
274
 
275
275
  args = parse_args()
276
276
 
277
- CONFIG, sys.stdout, sys.stderr, plt, CC, rng_manager = stx.session.start(
277
+ CONFIG, sys.stdout, sys.stderr, plt, CC, rng = stx.session.start(
278
278
  sys,
279
279
  plt,
280
280
  args=args,
@@ -269,7 +269,7 @@ def run_main():
269
269
 
270
270
  args = parse_args()
271
271
 
272
- CONFIG, sys.stdout, sys.stderr, plt, CC, rng_manager = stx.session.start(
272
+ CONFIG, sys.stdout, sys.stderr, plt, CC, rng = stx.session.start(
273
273
  sys,
274
274
  plt,
275
275
  args=args,
@@ -1,29 +1,28 @@
1
1
  #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
2
  # Timestamp: "2025-12-13 (ywatanabe)"
4
3
  # File: /home/ywatanabe/proj/scitex-code/src/scitex/stats/io/__init__.py
5
4
 
6
5
  """
7
- I/O operations for scitex.stats - Statistical results bundles (.statsz).
6
+ I/O operations for scitex.stats - Statistical results bundles (.stats).
8
7
 
9
8
  This module handles:
10
- - .statsz bundle load/save operations
9
+ - .stats bundle load/save operations
11
10
  - Statistical comparison metadata
12
11
  - P-value and effect size validation
13
12
  """
14
13
 
15
14
  from ._bundle import (
16
- validate_statsz_spec,
17
- load_statsz_bundle,
18
- save_statsz_bundle,
19
- STATSZ_SCHEMA_SPEC,
15
+ STATS_SCHEMA_SPEC,
16
+ load_stats_bundle,
17
+ save_stats_bundle,
18
+ validate_stats_spec,
20
19
  )
21
20
 
22
21
  __all__ = [
23
- "validate_statsz_spec",
24
- "load_statsz_bundle",
25
- "save_statsz_bundle",
26
- "STATSZ_SCHEMA_SPEC",
22
+ "validate_stats_spec",
23
+ "load_stats_bundle",
24
+ "save_stats_bundle",
25
+ "STATS_SCHEMA_SPEC",
27
26
  ]
28
27
 
29
28
  # EOF
@@ -1,10 +1,9 @@
1
1
  #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
2
  # Timestamp: "2025-12-13 (ywatanabe)"
4
3
  # File: /home/ywatanabe/proj/scitex-code/src/scitex/stats/io/_bundle.py
5
4
 
6
5
  """
7
- SciTeX .statsz Bundle I/O - Statistics-specific bundle operations.
6
+ SciTeX .stats Bundle I/O - Statistics-specific bundle operations.
8
7
 
9
8
  Handles:
10
9
  - Statistical results specification validation
@@ -17,14 +16,14 @@ from pathlib import Path
17
16
  from typing import Any, Dict, List
18
17
 
19
18
  __all__ = [
20
- "validate_statsz_spec",
21
- "load_statsz_bundle",
22
- "save_statsz_bundle",
23
- "STATSZ_SCHEMA_SPEC",
19
+ "validate_stats_spec",
20
+ "load_stats_bundle",
21
+ "save_stats_bundle",
22
+ "STATS_SCHEMA_SPEC",
24
23
  ]
25
24
 
26
- # Schema specification for .statsz bundles
27
- STATSZ_SCHEMA_SPEC = {
25
+ # Schema specification for .stats bundles
26
+ STATS_SCHEMA_SPEC = {
28
27
  "name": "scitex.stats.stats",
29
28
  "version": "1.0.0",
30
29
  "required_fields": ["schema"],
@@ -32,8 +31,8 @@ STATSZ_SCHEMA_SPEC = {
32
31
  }
33
32
 
34
33
 
35
- def validate_statsz_spec(spec: Dict[str, Any]) -> List[str]:
36
- """Validate .statsz-specific fields.
34
+ def validate_stats_spec(spec: Dict[str, Any]) -> List[str]:
35
+ """Validate .stats-specific fields.
37
36
 
38
37
  Args:
39
38
  spec: The specification dictionary to validate.
@@ -91,8 +90,8 @@ def validate_statsz_spec(spec: Dict[str, Any]) -> List[str]:
91
90
  return errors
92
91
 
93
92
 
94
- def load_statsz_bundle(bundle_dir: Path) -> Dict[str, Any]:
95
- """Load .statsz bundle contents from directory.
93
+ def load_stats_bundle(bundle_dir: Path) -> Dict[str, Any]:
94
+ """Load .stats bundle contents from directory.
96
95
 
97
96
  Args:
98
97
  bundle_dir: Path to the bundle directory.
@@ -105,7 +104,7 @@ def load_statsz_bundle(bundle_dir: Path) -> Dict[str, Any]:
105
104
  # Load specification
106
105
  spec_file = bundle_dir / "stats.json"
107
106
  if spec_file.exists():
108
- with open(spec_file, "r") as f:
107
+ with open(spec_file) as f:
109
108
  result["spec"] = json.load(f)
110
109
  else:
111
110
  result["spec"] = None
@@ -115,16 +114,17 @@ def load_statsz_bundle(bundle_dir: Path) -> Dict[str, Any]:
115
114
  if data_file.exists():
116
115
  try:
117
116
  import pandas as pd
117
+
118
118
  result["data"] = pd.read_csv(data_file)
119
119
  except ImportError:
120
- with open(data_file, "r") as f:
120
+ with open(data_file) as f:
121
121
  result["data"] = f.read()
122
122
 
123
123
  return result
124
124
 
125
125
 
126
- def save_statsz_bundle(data: Dict[str, Any], dir_path: Path) -> None:
127
- """Save .statsz bundle contents to directory.
126
+ def save_stats_bundle(data: Dict[str, Any], dir_path: Path) -> None:
127
+ """Save .stats bundle contents to directory.
128
128
 
129
129
  Args:
130
130
  data: Bundle data dictionary.