scitex 2.14.0__py3-none-any.whl → 2.15.2__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 (300) hide show
  1. scitex/__init__.py +71 -17
  2. scitex/_env_loader.py +156 -0
  3. scitex/_mcp_resources/__init__.py +37 -0
  4. scitex/_mcp_resources/_cheatsheet.py +135 -0
  5. scitex/_mcp_resources/_figrecipe.py +138 -0
  6. scitex/_mcp_resources/_formats.py +102 -0
  7. scitex/_mcp_resources/_modules.py +337 -0
  8. scitex/_mcp_resources/_session.py +149 -0
  9. scitex/_mcp_tools/__init__.py +4 -0
  10. scitex/_mcp_tools/audio.py +66 -0
  11. scitex/_mcp_tools/diagram.py +11 -95
  12. scitex/_mcp_tools/introspect.py +210 -0
  13. scitex/_mcp_tools/plt.py +260 -305
  14. scitex/_mcp_tools/scholar.py +74 -0
  15. scitex/_mcp_tools/social.py +244 -0
  16. scitex/_mcp_tools/template.py +24 -0
  17. scitex/_mcp_tools/writer.py +21 -204
  18. scitex/ai/_gen_ai/_PARAMS.py +10 -7
  19. scitex/ai/classification/reporters/_SingleClassificationReporter.py +45 -1603
  20. scitex/ai/classification/reporters/_mixins/__init__.py +36 -0
  21. scitex/ai/classification/reporters/_mixins/_constants.py +67 -0
  22. scitex/ai/classification/reporters/_mixins/_cv_summary.py +387 -0
  23. scitex/ai/classification/reporters/_mixins/_feature_importance.py +119 -0
  24. scitex/ai/classification/reporters/_mixins/_metrics.py +275 -0
  25. scitex/ai/classification/reporters/_mixins/_plotting.py +179 -0
  26. scitex/ai/classification/reporters/_mixins/_reports.py +153 -0
  27. scitex/ai/classification/reporters/_mixins/_storage.py +160 -0
  28. scitex/ai/classification/timeseries/_TimeSeriesSlidingWindowSplit.py +30 -1550
  29. scitex/ai/classification/timeseries/_sliding_window_core.py +467 -0
  30. scitex/ai/classification/timeseries/_sliding_window_plotting.py +369 -0
  31. scitex/audio/README.md +40 -36
  32. scitex/audio/__init__.py +129 -61
  33. scitex/audio/_branding.py +185 -0
  34. scitex/audio/_mcp/__init__.py +32 -0
  35. scitex/audio/_mcp/handlers.py +59 -6
  36. scitex/audio/_mcp/speak_handlers.py +238 -0
  37. scitex/audio/_relay.py +225 -0
  38. scitex/audio/_tts.py +18 -10
  39. scitex/audio/engines/base.py +17 -10
  40. scitex/audio/engines/elevenlabs_engine.py +7 -2
  41. scitex/audio/mcp_server.py +228 -75
  42. scitex/canvas/README.md +1 -1
  43. scitex/canvas/editor/_dearpygui/__init__.py +25 -0
  44. scitex/canvas/editor/_dearpygui/_editor.py +147 -0
  45. scitex/canvas/editor/_dearpygui/_handlers.py +476 -0
  46. scitex/canvas/editor/_dearpygui/_panels/__init__.py +17 -0
  47. scitex/canvas/editor/_dearpygui/_panels/_control.py +119 -0
  48. scitex/canvas/editor/_dearpygui/_panels/_element_controls.py +190 -0
  49. scitex/canvas/editor/_dearpygui/_panels/_preview.py +43 -0
  50. scitex/canvas/editor/_dearpygui/_panels/_sections.py +390 -0
  51. scitex/canvas/editor/_dearpygui/_plotting.py +187 -0
  52. scitex/canvas/editor/_dearpygui/_rendering.py +504 -0
  53. scitex/canvas/editor/_dearpygui/_selection.py +295 -0
  54. scitex/canvas/editor/_dearpygui/_state.py +93 -0
  55. scitex/canvas/editor/_dearpygui/_utils.py +61 -0
  56. scitex/canvas/editor/flask_editor/_core/__init__.py +27 -0
  57. scitex/canvas/editor/flask_editor/_core/_bbox_extraction.py +200 -0
  58. scitex/canvas/editor/flask_editor/_core/_editor.py +173 -0
  59. scitex/canvas/editor/flask_editor/_core/_export_helpers.py +353 -0
  60. scitex/canvas/editor/flask_editor/_core/_routes_basic.py +190 -0
  61. scitex/canvas/editor/flask_editor/_core/_routes_export.py +332 -0
  62. scitex/canvas/editor/flask_editor/_core/_routes_panels.py +252 -0
  63. scitex/canvas/editor/flask_editor/_core/_routes_save.py +218 -0
  64. scitex/canvas/editor/flask_editor/_core.py +25 -1684
  65. scitex/canvas/editor/flask_editor/templates/__init__.py +32 -70
  66. scitex/cli/__init__.py +38 -43
  67. scitex/cli/audio.py +76 -27
  68. scitex/cli/capture.py +13 -20
  69. scitex/cli/introspect.py +481 -0
  70. scitex/cli/main.py +200 -109
  71. scitex/cli/mcp.py +60 -34
  72. scitex/cli/plt.py +357 -0
  73. scitex/cli/repro.py +15 -8
  74. scitex/cli/resource.py +15 -8
  75. scitex/cli/scholar/__init__.py +23 -8
  76. scitex/cli/scholar/_crossref_scitex.py +296 -0
  77. scitex/cli/scholar/_fetch.py +25 -3
  78. scitex/cli/social.py +314 -0
  79. scitex/cli/stats.py +15 -8
  80. scitex/cli/template.py +129 -12
  81. scitex/cli/tex.py +15 -8
  82. scitex/cli/writer.py +132 -8
  83. scitex/cloud/__init__.py +41 -2
  84. scitex/config/README.md +1 -1
  85. scitex/config/__init__.py +16 -2
  86. scitex/config/_env_registry.py +256 -0
  87. scitex/context/__init__.py +22 -0
  88. scitex/dev/__init__.py +20 -1
  89. scitex/diagram/__init__.py +42 -19
  90. scitex/diagram/mcp_server.py +13 -125
  91. scitex/gen/__init__.py +50 -14
  92. scitex/gen/_list_packages.py +4 -4
  93. scitex/introspect/__init__.py +82 -0
  94. scitex/introspect/_call_graph.py +303 -0
  95. scitex/introspect/_class_hierarchy.py +163 -0
  96. scitex/introspect/_core.py +41 -0
  97. scitex/introspect/_docstring.py +131 -0
  98. scitex/introspect/_examples.py +113 -0
  99. scitex/introspect/_imports.py +271 -0
  100. scitex/{gen/_inspect_module.py → introspect/_list_api.py} +43 -54
  101. scitex/introspect/_mcp/__init__.py +41 -0
  102. scitex/introspect/_mcp/handlers.py +233 -0
  103. scitex/introspect/_members.py +155 -0
  104. scitex/introspect/_resolve.py +89 -0
  105. scitex/introspect/_signature.py +131 -0
  106. scitex/introspect/_source.py +80 -0
  107. scitex/introspect/_type_hints.py +172 -0
  108. scitex/io/_save.py +1 -2
  109. scitex/io/bundle/README.md +1 -1
  110. scitex/logging/_formatters.py +19 -9
  111. scitex/mcp_server.py +98 -5
  112. scitex/os/__init__.py +4 -0
  113. scitex/{gen → os}/_check_host.py +4 -5
  114. scitex/plt/__init__.py +245 -550
  115. scitex/plt/_subplots/_AxisWrapperMixins/_SeabornMixin/_wrappers.py +5 -10
  116. scitex/plt/docs/EXTERNAL_PACKAGE_BRANDING.md +149 -0
  117. scitex/plt/gallery/README.md +1 -1
  118. scitex/plt/utils/_hitmap/__init__.py +82 -0
  119. scitex/plt/utils/_hitmap/_artist_extraction.py +343 -0
  120. scitex/plt/utils/_hitmap/_color_application.py +346 -0
  121. scitex/plt/utils/_hitmap/_color_conversion.py +121 -0
  122. scitex/plt/utils/_hitmap/_constants.py +40 -0
  123. scitex/plt/utils/_hitmap/_hitmap_core.py +334 -0
  124. scitex/plt/utils/_hitmap/_path_extraction.py +357 -0
  125. scitex/plt/utils/_hitmap/_query.py +113 -0
  126. scitex/plt/utils/_hitmap.py +46 -1616
  127. scitex/plt/utils/_metadata/__init__.py +80 -0
  128. scitex/plt/utils/_metadata/_artists/__init__.py +25 -0
  129. scitex/plt/utils/_metadata/_artists/_base.py +195 -0
  130. scitex/plt/utils/_metadata/_artists/_collections.py +356 -0
  131. scitex/plt/utils/_metadata/_artists/_extract.py +57 -0
  132. scitex/plt/utils/_metadata/_artists/_images.py +80 -0
  133. scitex/plt/utils/_metadata/_artists/_lines.py +261 -0
  134. scitex/plt/utils/_metadata/_artists/_patches.py +247 -0
  135. scitex/plt/utils/_metadata/_artists/_text.py +106 -0
  136. scitex/plt/utils/_metadata/_csv.py +416 -0
  137. scitex/plt/utils/_metadata/_detect.py +225 -0
  138. scitex/plt/utils/_metadata/_legend.py +127 -0
  139. scitex/plt/utils/_metadata/_rounding.py +117 -0
  140. scitex/plt/utils/_metadata/_verification.py +202 -0
  141. scitex/schema/README.md +1 -1
  142. scitex/scholar/__init__.py +8 -0
  143. scitex/scholar/_mcp/crossref_handlers.py +265 -0
  144. scitex/scholar/core/Scholar.py +63 -1700
  145. scitex/scholar/core/_mixins/__init__.py +36 -0
  146. scitex/scholar/core/_mixins/_enrichers.py +270 -0
  147. scitex/scholar/core/_mixins/_library_handlers.py +100 -0
  148. scitex/scholar/core/_mixins/_loaders.py +103 -0
  149. scitex/scholar/core/_mixins/_pdf_download.py +375 -0
  150. scitex/scholar/core/_mixins/_pipeline.py +312 -0
  151. scitex/scholar/core/_mixins/_project_handlers.py +125 -0
  152. scitex/scholar/core/_mixins/_savers.py +69 -0
  153. scitex/scholar/core/_mixins/_search.py +103 -0
  154. scitex/scholar/core/_mixins/_services.py +88 -0
  155. scitex/scholar/core/_mixins/_url_finding.py +105 -0
  156. scitex/scholar/crossref_scitex.py +367 -0
  157. scitex/scholar/docs/EXTERNAL_PACKAGE_BRANDING.md +149 -0
  158. scitex/scholar/examples/00_run_all.sh +120 -0
  159. scitex/scholar/jobs/_executors.py +27 -3
  160. scitex/scholar/pdf_download/ScholarPDFDownloader.py +38 -416
  161. scitex/scholar/pdf_download/_cli.py +154 -0
  162. scitex/scholar/pdf_download/strategies/__init__.py +11 -8
  163. scitex/scholar/pdf_download/strategies/manual_download_fallback.py +80 -3
  164. scitex/scholar/pipelines/ScholarPipelineBibTeX.py +73 -121
  165. scitex/scholar/pipelines/ScholarPipelineParallel.py +80 -138
  166. scitex/scholar/pipelines/ScholarPipelineSingle.py +43 -63
  167. scitex/scholar/pipelines/_single_steps.py +71 -36
  168. scitex/scholar/storage/_LibraryManager.py +97 -1695
  169. scitex/scholar/storage/_mixins/__init__.py +30 -0
  170. scitex/scholar/storage/_mixins/_bibtex_handlers.py +128 -0
  171. scitex/scholar/storage/_mixins/_library_operations.py +218 -0
  172. scitex/scholar/storage/_mixins/_metadata_conversion.py +226 -0
  173. scitex/scholar/storage/_mixins/_paper_saving.py +456 -0
  174. scitex/scholar/storage/_mixins/_resolution.py +376 -0
  175. scitex/scholar/storage/_mixins/_storage_helpers.py +121 -0
  176. scitex/scholar/storage/_mixins/_symlink_handlers.py +226 -0
  177. scitex/scholar/url_finder/.tmp/open_url/KNOWN_RESOLVERS.py +462 -0
  178. scitex/scholar/url_finder/.tmp/open_url/README.md +223 -0
  179. scitex/scholar/url_finder/.tmp/open_url/_DOIToURLResolver.py +694 -0
  180. scitex/scholar/url_finder/.tmp/open_url/_OpenURLResolver.py +1160 -0
  181. scitex/scholar/url_finder/.tmp/open_url/_ResolverLinkFinder.py +344 -0
  182. scitex/scholar/url_finder/.tmp/open_url/__init__.py +24 -0
  183. scitex/security/README.md +3 -3
  184. scitex/session/README.md +1 -1
  185. scitex/session/__init__.py +26 -7
  186. scitex/session/_decorator.py +1 -1
  187. scitex/sh/README.md +1 -1
  188. scitex/sh/__init__.py +7 -4
  189. scitex/social/__init__.py +155 -0
  190. scitex/social/docs/EXTERNAL_PACKAGE_BRANDING.md +149 -0
  191. scitex/stats/_mcp/_handlers/__init__.py +31 -0
  192. scitex/stats/_mcp/_handlers/_corrections.py +113 -0
  193. scitex/stats/_mcp/_handlers/_descriptive.py +78 -0
  194. scitex/stats/_mcp/_handlers/_effect_size.py +106 -0
  195. scitex/stats/_mcp/_handlers/_format.py +94 -0
  196. scitex/stats/_mcp/_handlers/_normality.py +110 -0
  197. scitex/stats/_mcp/_handlers/_posthoc.py +224 -0
  198. scitex/stats/_mcp/_handlers/_power.py +247 -0
  199. scitex/stats/_mcp/_handlers/_recommend.py +102 -0
  200. scitex/stats/_mcp/_handlers/_run_test.py +279 -0
  201. scitex/stats/_mcp/_handlers/_stars.py +48 -0
  202. scitex/stats/_mcp/handlers.py +19 -1171
  203. scitex/stats/auto/_stat_style.py +175 -0
  204. scitex/stats/auto/_style_definitions.py +411 -0
  205. scitex/stats/auto/_styles.py +22 -620
  206. scitex/stats/descriptive/__init__.py +11 -8
  207. scitex/stats/descriptive/_ci.py +39 -0
  208. scitex/stats/power/_power.py +15 -4
  209. scitex/str/__init__.py +2 -1
  210. scitex/str/_title_case.py +63 -0
  211. scitex/template/README.md +1 -1
  212. scitex/template/__init__.py +25 -10
  213. scitex/template/_code_templates.py +147 -0
  214. scitex/template/_mcp/handlers.py +81 -0
  215. scitex/template/_mcp/tool_schemas.py +55 -0
  216. scitex/template/_templates/__init__.py +51 -0
  217. scitex/template/_templates/audio.py +233 -0
  218. scitex/template/_templates/canvas.py +312 -0
  219. scitex/template/_templates/capture.py +268 -0
  220. scitex/template/_templates/config.py +43 -0
  221. scitex/template/_templates/diagram.py +294 -0
  222. scitex/template/_templates/io.py +107 -0
  223. scitex/template/_templates/module.py +53 -0
  224. scitex/template/_templates/plt.py +202 -0
  225. scitex/template/_templates/scholar.py +267 -0
  226. scitex/template/_templates/session.py +130 -0
  227. scitex/template/_templates/session_minimal.py +43 -0
  228. scitex/template/_templates/session_plot.py +67 -0
  229. scitex/template/_templates/session_stats.py +77 -0
  230. scitex/template/_templates/stats.py +323 -0
  231. scitex/template/_templates/writer.py +296 -0
  232. scitex/template/clone_writer_directory.py +5 -5
  233. scitex/ui/_backends/_email.py +10 -2
  234. scitex/ui/_backends/_webhook.py +5 -1
  235. scitex/web/_search_pubmed.py +10 -6
  236. scitex/writer/README.md +1 -1
  237. scitex/writer/_mcp/handlers.py +11 -744
  238. scitex/writer/_mcp/tool_schemas.py +5 -335
  239. scitex-2.15.2.dist-info/METADATA +648 -0
  240. {scitex-2.14.0.dist-info → scitex-2.15.2.dist-info}/RECORD +246 -150
  241. scitex/canvas/editor/flask_editor/templates/_scripts.py +0 -4933
  242. scitex/canvas/editor/flask_editor/templates/_styles.py +0 -1658
  243. scitex/dev/plt/data/mpl/PLOTTING_FUNCTIONS.yaml +0 -90
  244. scitex/dev/plt/data/mpl/PLOTTING_SIGNATURES.yaml +0 -1571
  245. scitex/dev/plt/data/mpl/PLOTTING_SIGNATURES_DETAILED.yaml +0 -6262
  246. scitex/dev/plt/data/mpl/SIGNATURES_FLATTENED.yaml +0 -1274
  247. scitex/dev/plt/data/mpl/dir_ax.txt +0 -459
  248. scitex/diagram/_compile.py +0 -312
  249. scitex/diagram/_diagram.py +0 -355
  250. scitex/diagram/_mcp/__init__.py +0 -4
  251. scitex/diagram/_mcp/handlers.py +0 -400
  252. scitex/diagram/_mcp/tool_schemas.py +0 -157
  253. scitex/diagram/_presets.py +0 -173
  254. scitex/diagram/_schema.py +0 -182
  255. scitex/diagram/_split.py +0 -278
  256. scitex/gen/_ci.py +0 -12
  257. scitex/gen/_title_case.py +0 -89
  258. scitex/plt/_mcp/__init__.py +0 -4
  259. scitex/plt/_mcp/_handlers_annotation.py +0 -102
  260. scitex/plt/_mcp/_handlers_figure.py +0 -195
  261. scitex/plt/_mcp/_handlers_plot.py +0 -252
  262. scitex/plt/_mcp/_handlers_style.py +0 -219
  263. scitex/plt/_mcp/handlers.py +0 -74
  264. scitex/plt/_mcp/tool_schemas.py +0 -497
  265. scitex/plt/mcp_server.py +0 -231
  266. scitex/scholar/data/.gitkeep +0 -0
  267. scitex/scholar/data/README.md +0 -44
  268. scitex/scholar/data/bib_files/bibliography.bib +0 -1952
  269. scitex/scholar/data/bib_files/neurovista.bib +0 -277
  270. scitex/scholar/data/bib_files/neurovista_enriched.bib +0 -441
  271. scitex/scholar/data/bib_files/neurovista_enriched_enriched.bib +0 -441
  272. scitex/scholar/data/bib_files/neurovista_processed.bib +0 -338
  273. scitex/scholar/data/bib_files/openaccess.bib +0 -89
  274. scitex/scholar/data/bib_files/pac-seizure_prediction_enriched.bib +0 -2178
  275. scitex/scholar/data/bib_files/pac.bib +0 -698
  276. scitex/scholar/data/bib_files/pac_enriched.bib +0 -1061
  277. scitex/scholar/data/bib_files/pac_processed.bib +0 -0
  278. scitex/scholar/data/bib_files/pac_titles.txt +0 -75
  279. scitex/scholar/data/bib_files/paywalled.bib +0 -98
  280. scitex/scholar/data/bib_files/related-papers-by-coauthors.bib +0 -58
  281. scitex/scholar/data/bib_files/related-papers-by-coauthors_enriched.bib +0 -87
  282. scitex/scholar/data/bib_files/seizure_prediction.bib +0 -694
  283. scitex/scholar/data/bib_files/seizure_prediction_processed.bib +0 -0
  284. scitex/scholar/data/bib_files/test_complete_enriched.bib +0 -437
  285. scitex/scholar/data/bib_files/test_final_enriched.bib +0 -437
  286. scitex/scholar/data/bib_files/test_seizure.bib +0 -46
  287. scitex/scholar/data/impact_factor/JCR_IF_2022.xlsx +0 -0
  288. scitex/scholar/data/impact_factor/JCR_IF_2024.db +0 -0
  289. scitex/scholar/data/impact_factor/JCR_IF_2024.xlsx +0 -0
  290. scitex/scholar/data/impact_factor/JCR_IF_2024_v01.db +0 -0
  291. scitex/scholar/data/impact_factor.db +0 -0
  292. scitex/scholar/examples/SUGGESTIONS.md +0 -865
  293. scitex/scholar/examples/dev.py +0 -38
  294. scitex-2.14.0.dist-info/METADATA +0 -1238
  295. /scitex/{gen → context}/_detect_environment.py +0 -0
  296. /scitex/{gen → context}/_get_notebook_path.py +0 -0
  297. /scitex/{gen/_shell.py → sh/_shell_legacy.py} +0 -0
  298. {scitex-2.14.0.dist-info → scitex-2.15.2.dist-info}/WHEEL +0 -0
  299. {scitex-2.14.0.dist-info → scitex-2.15.2.dist-info}/entry_points.txt +0 -0
  300. {scitex-2.14.0.dist-info → scitex-2.15.2.dist-info}/licenses/LICENSE +0 -0
@@ -1,219 +0,0 @@
1
- #!/usr/bin/env python3
2
- # Timestamp: 2026-01-13
3
- # File: src/scitex/plt/_mcp/_handlers_style.py
4
-
5
- """Style-related MCP handlers for SciTeX plt module."""
6
-
7
- from __future__ import annotations
8
-
9
- from typing import Optional
10
-
11
-
12
- async def get_style_handler() -> dict:
13
- """Get current SciTeX publication style configuration."""
14
- try:
15
- from scitex.plt.styles.presets import get_style
16
-
17
- style = get_style()
18
-
19
- return {
20
- "success": True,
21
- "style": style,
22
- "description": "Current SciTeX publication style configuration",
23
- }
24
- except Exception as e:
25
- return {"success": False, "error": str(e)}
26
-
27
-
28
- async def set_style_handler(
29
- axes_width_mm: Optional[float] = None,
30
- axes_height_mm: Optional[float] = None,
31
- margin_left_mm: Optional[float] = None,
32
- margin_right_mm: Optional[float] = None,
33
- margin_top_mm: Optional[float] = None,
34
- margin_bottom_mm: Optional[float] = None,
35
- dpi: Optional[int] = None,
36
- axis_font_size_pt: Optional[float] = None,
37
- tick_font_size_pt: Optional[float] = None,
38
- title_font_size_pt: Optional[float] = None,
39
- legend_font_size_pt: Optional[float] = None,
40
- trace_thickness_mm: Optional[float] = None,
41
- reset: bool = False,
42
- ) -> dict:
43
- """Set global style overrides for publication figures."""
44
- try:
45
- from scitex.plt.styles.presets import get_style, set_style
46
-
47
- if reset:
48
- set_style(None)
49
-
50
- style_updates = {}
51
- if axes_width_mm is not None:
52
- style_updates["axes_width_mm"] = axes_width_mm
53
- if axes_height_mm is not None:
54
- style_updates["axes_height_mm"] = axes_height_mm
55
- if margin_left_mm is not None:
56
- style_updates["margin_left_mm"] = margin_left_mm
57
- if margin_right_mm is not None:
58
- style_updates["margin_right_mm"] = margin_right_mm
59
- if margin_top_mm is not None:
60
- style_updates["margin_top_mm"] = margin_top_mm
61
- if margin_bottom_mm is not None:
62
- style_updates["margin_bottom_mm"] = margin_bottom_mm
63
- if dpi is not None:
64
- style_updates["dpi"] = dpi
65
- if axis_font_size_pt is not None:
66
- style_updates["axis_font_size_pt"] = axis_font_size_pt
67
- if tick_font_size_pt is not None:
68
- style_updates["tick_font_size_pt"] = tick_font_size_pt
69
- if title_font_size_pt is not None:
70
- style_updates["title_font_size_pt"] = title_font_size_pt
71
- if legend_font_size_pt is not None:
72
- style_updates["legend_font_size_pt"] = legend_font_size_pt
73
- if trace_thickness_mm is not None:
74
- style_updates["trace_thickness_mm"] = trace_thickness_mm
75
-
76
- if style_updates:
77
- set_style(style_updates)
78
-
79
- final_style = get_style()
80
-
81
- return {
82
- "success": True,
83
- "updated_parameters": list(style_updates.keys()),
84
- "style": final_style,
85
- "message": f"Updated {len(style_updates)} style parameters",
86
- }
87
- except Exception as e:
88
- return {"success": False, "error": str(e)}
89
-
90
-
91
- async def list_presets_handler() -> dict:
92
- """List available publication style presets."""
93
- try:
94
- presets = [
95
- {
96
- "name": "SCITEX_STYLE",
97
- "description": "Default SciTeX publication style",
98
- "axes_size_mm": "40x28",
99
- "dpi": 300,
100
- "font_sizes_pt": {"axis": 7, "tick": 7, "title": 8, "legend": 6},
101
- },
102
- {
103
- "name": "nature",
104
- "description": "Nature journal style (single column)",
105
- "axes_size_mm": "89x60",
106
- "dpi": 300,
107
- "notes": "Single column width: 89mm",
108
- },
109
- {
110
- "name": "science",
111
- "description": "Science journal style",
112
- "axes_size_mm": "85x60",
113
- "dpi": 300,
114
- "notes": "Single column width: 85mm",
115
- },
116
- {
117
- "name": "pnas",
118
- "description": "PNAS journal style",
119
- "axes_size_mm": "87x60",
120
- "dpi": 300,
121
- "notes": "Single column width: 8.7cm",
122
- },
123
- {
124
- "name": "ieee",
125
- "description": "IEEE journal style",
126
- "axes_size_mm": "88x60",
127
- "dpi": 300,
128
- "notes": "Single column width: 3.5 inches",
129
- },
130
- ]
131
-
132
- return {
133
- "success": True,
134
- "count": len(presets),
135
- "presets": presets,
136
- "usage": "Use set_style() to apply custom dimensions",
137
- }
138
- except Exception as e:
139
- return {"success": False, "error": str(e)}
140
-
141
-
142
- async def get_dpi_settings_handler() -> dict:
143
- """Get DPI settings for different output contexts."""
144
- try:
145
- from scitex.plt.styles.presets import (
146
- get_default_dpi,
147
- get_display_dpi,
148
- get_preview_dpi,
149
- )
150
-
151
- return {
152
- "success": True,
153
- "dpi_settings": {
154
- "save": {
155
- "value": get_default_dpi(),
156
- "description": "Publication-quality output (high resolution)",
157
- },
158
- "display": {
159
- "value": get_display_dpi(),
160
- "description": "Screen display (lower resolution for speed)",
161
- },
162
- "preview": {
163
- "value": get_preview_dpi(),
164
- "description": "Editor previews and thumbnails",
165
- },
166
- },
167
- "recommendation": "Use 'save' DPI for final figures, 'display' for iterating",
168
- }
169
- except Exception as e:
170
- return {"success": False, "error": str(e)}
171
-
172
-
173
- async def get_color_palette_handler(format: str = "hex") -> dict:
174
- """Get the SciTeX color palette."""
175
- try:
176
- from scitex.plt import color as color_module
177
-
178
- params = getattr(color_module, "PARAMS", {})
179
- rgba_cycle = params.get("RGBA_NORM_FOR_CYCLE", {})
180
-
181
- colors = {}
182
- for name, rgba in rgba_cycle.items():
183
- if format == "hex":
184
- r, g, b = int(rgba[0] * 255), int(rgba[1] * 255), int(rgba[2] * 255)
185
- colors[name] = f"#{r:02x}{g:02x}{b:02x}"
186
- elif format == "rgb":
187
- colors[name] = {
188
- "r": int(rgba[0] * 255),
189
- "g": int(rgba[1] * 255),
190
- "b": int(rgba[2] * 255),
191
- }
192
- else: # rgba
193
- colors[name] = {
194
- "r": rgba[0],
195
- "g": rgba[1],
196
- "b": rgba[2],
197
- "a": rgba[3] if len(rgba) > 3 else 1.0,
198
- }
199
-
200
- return {
201
- "success": True,
202
- "format": format,
203
- "count": len(colors),
204
- "colors": colors,
205
- "usage": "Colors are used in matplotlib's default color cycle",
206
- }
207
- except Exception as e:
208
- return {"success": False, "error": str(e)}
209
-
210
-
211
- __all__ = [
212
- "get_style_handler",
213
- "set_style_handler",
214
- "list_presets_handler",
215
- "get_dpi_settings_handler",
216
- "get_color_palette_handler",
217
- ]
218
-
219
- # EOF
@@ -1,74 +0,0 @@
1
- #!/usr/bin/env python3
2
- # Timestamp: 2026-01-13
3
- # File: src/scitex/plt/_mcp/handlers.py
4
-
5
- """MCP Handler implementations for SciTeX plt module.
6
-
7
- Provides async handlers for publication-quality plotting operations.
8
- This module re-exports handlers from submodules for backward compatibility.
9
- """
10
-
11
- from __future__ import annotations
12
-
13
- # Re-export annotation handlers
14
- from ._handlers_annotation import (
15
- add_panel_label_handler,
16
- add_significance_handler,
17
- )
18
-
19
- # Re-export figure registry and helper
20
- # Re-export figure management handlers
21
- from ._handlers_figure import (
22
- _FIGURE_REGISTRY,
23
- _get_axes,
24
- close_figure_handler,
25
- create_figure_handler,
26
- crop_figure_handler,
27
- save_figure_handler,
28
- )
29
-
30
- # Re-export plot handlers
31
- from ._handlers_plot import (
32
- plot_bar_handler,
33
- plot_box_handler,
34
- plot_line_handler,
35
- plot_scatter_handler,
36
- plot_violin_handler,
37
- )
38
-
39
- # Re-export style handlers
40
- from ._handlers_style import (
41
- get_color_palette_handler,
42
- get_dpi_settings_handler,
43
- get_style_handler,
44
- list_presets_handler,
45
- set_style_handler,
46
- )
47
-
48
- __all__ = [
49
- # Style handlers
50
- "get_style_handler",
51
- "set_style_handler",
52
- "list_presets_handler",
53
- "get_dpi_settings_handler",
54
- "get_color_palette_handler",
55
- # Figure management
56
- "create_figure_handler",
57
- "crop_figure_handler",
58
- "save_figure_handler",
59
- "close_figure_handler",
60
- # Plot handlers
61
- "plot_bar_handler",
62
- "plot_scatter_handler",
63
- "plot_line_handler",
64
- "plot_box_handler",
65
- "plot_violin_handler",
66
- # Annotation handlers
67
- "add_significance_handler",
68
- "add_panel_label_handler",
69
- # Internal (for submodules)
70
- "_FIGURE_REGISTRY",
71
- "_get_axes",
72
- ]
73
-
74
- # EOF