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
scitex/plt/mcp_server.py DELETED
@@ -1,231 +0,0 @@
1
- #!/usr/bin/env python3
2
- # Timestamp: 2026-01-08
3
- # File: src/scitex/plt/mcp_server.py
4
- # ----------------------------------------
5
-
6
- """
7
- MCP Server for SciTeX plt - Publication-quality plotting.
8
-
9
- Provides tools for:
10
- - Style configuration (get/set publication styles)
11
- - Style presets (journal-specific configurations)
12
- - Figure cropping (auto-crop whitespace)
13
- - DPI management
14
- - Color palette access
15
- """
16
-
17
- from __future__ import annotations
18
-
19
- import asyncio
20
-
21
- # Graceful MCP dependency handling
22
- try:
23
- import mcp.types as types
24
- from mcp.server import NotificationOptions, Server
25
- from mcp.server.models import InitializationOptions
26
- from mcp.server.stdio import stdio_server
27
-
28
- MCP_AVAILABLE = True
29
- except ImportError:
30
- MCP_AVAILABLE = False
31
- types = None # type: ignore
32
- Server = None # type: ignore
33
- NotificationOptions = None # type: ignore
34
- InitializationOptions = None # type: ignore
35
- stdio_server = None # type: ignore
36
-
37
- __all__ = ["PltServer", "main", "MCP_AVAILABLE"]
38
-
39
-
40
- class PltServer:
41
- """MCP Server for Publication-quality Plotting."""
42
-
43
- def __init__(self):
44
- self.server = Server("scitex-plt")
45
- self.setup_handlers()
46
-
47
- def setup_handlers(self):
48
- """Set up MCP server handlers."""
49
- from ._mcp.handlers import (
50
- add_panel_label_handler,
51
- add_significance_handler,
52
- close_figure_handler,
53
- create_figure_handler,
54
- crop_figure_handler,
55
- get_color_palette_handler,
56
- get_dpi_settings_handler,
57
- get_style_handler,
58
- list_presets_handler,
59
- plot_bar_handler,
60
- plot_box_handler,
61
- plot_line_handler,
62
- plot_scatter_handler,
63
- plot_violin_handler,
64
- save_figure_handler,
65
- set_style_handler,
66
- )
67
- from ._mcp.tool_schemas import get_tool_schemas
68
-
69
- @self.server.list_tools()
70
- async def handle_list_tools():
71
- return get_tool_schemas()
72
-
73
- @self.server.call_tool()
74
- async def handle_call_tool(name: str, arguments: dict):
75
- # Style tools
76
- if name == "get_style":
77
- return await self._wrap_result(get_style_handler())
78
- elif name == "set_style":
79
- return await self._wrap_result(set_style_handler(**arguments))
80
- elif name == "list_presets":
81
- return await self._wrap_result(list_presets_handler())
82
- elif name == "crop_figure":
83
- return await self._wrap_result(crop_figure_handler(**arguments))
84
- elif name == "get_dpi_settings":
85
- return await self._wrap_result(get_dpi_settings_handler())
86
- elif name == "get_color_palette":
87
- return await self._wrap_result(get_color_palette_handler(**arguments))
88
- # Plotting tools
89
- elif name == "create_figure":
90
- return await self._wrap_result(create_figure_handler(**arguments))
91
- elif name == "plot_bar":
92
- return await self._wrap_result(plot_bar_handler(**arguments))
93
- elif name == "plot_scatter":
94
- return await self._wrap_result(plot_scatter_handler(**arguments))
95
- elif name == "plot_line":
96
- return await self._wrap_result(plot_line_handler(**arguments))
97
- elif name == "plot_box":
98
- return await self._wrap_result(plot_box_handler(**arguments))
99
- elif name == "plot_violin":
100
- return await self._wrap_result(plot_violin_handler(**arguments))
101
- elif name == "add_significance":
102
- return await self._wrap_result(add_significance_handler(**arguments))
103
- elif name == "add_panel_label":
104
- return await self._wrap_result(add_panel_label_handler(**arguments))
105
- elif name == "save_figure":
106
- return await self._wrap_result(save_figure_handler(**arguments))
107
- elif name == "close_figure":
108
- return await self._wrap_result(close_figure_handler(**arguments))
109
- else:
110
- raise ValueError(f"Unknown tool: {name}")
111
-
112
- @self.server.list_resources()
113
- async def handle_list_resources():
114
- """List available plt resources."""
115
- resources = [
116
- types.Resource(
117
- uri="plt://style/current",
118
- name="Current Style",
119
- description="Current publication style configuration",
120
- mimeType="application/json",
121
- ),
122
- types.Resource(
123
- uri="plt://presets",
124
- name="Style Presets",
125
- description="Available journal style presets",
126
- mimeType="application/json",
127
- ),
128
- types.Resource(
129
- uri="plt://colors",
130
- name="Color Palette",
131
- description="SciTeX color palette",
132
- mimeType="application/json",
133
- ),
134
- ]
135
- return resources
136
-
137
- @self.server.read_resource()
138
- async def handle_read_resource(uri: str):
139
- """Read a plt resource."""
140
- import json
141
-
142
- if uri == "plt://style/current":
143
- result = await get_style_handler()
144
- return types.TextResourceContents(
145
- uri=uri,
146
- mimeType="application/json",
147
- text=json.dumps(result, indent=2),
148
- )
149
-
150
- elif uri == "plt://presets":
151
- result = await list_presets_handler()
152
- return types.TextResourceContents(
153
- uri=uri,
154
- mimeType="application/json",
155
- text=json.dumps(result, indent=2),
156
- )
157
-
158
- elif uri == "plt://colors":
159
- result = await get_color_palette_handler()
160
- return types.TextResourceContents(
161
- uri=uri,
162
- mimeType="application/json",
163
- text=json.dumps(result, indent=2),
164
- )
165
-
166
- else:
167
- raise ValueError(f"Unknown resource URI: {uri}")
168
-
169
- async def _wrap_result(self, coro):
170
- """Wrap handler result as MCP TextContent."""
171
- import json
172
-
173
- try:
174
- result = await coro
175
- return [
176
- types.TextContent(
177
- type="text",
178
- text=json.dumps(result, indent=2, default=str),
179
- )
180
- ]
181
- except Exception as e:
182
- return [
183
- types.TextContent(
184
- type="text",
185
- text=json.dumps({"success": False, "error": str(e)}, indent=2),
186
- )
187
- ]
188
-
189
-
190
- async def _run_server():
191
- """Run the MCP server (internal)."""
192
- server = PltServer()
193
- async with stdio_server() as (read_stream, write_stream):
194
- await server.server.run(
195
- read_stream,
196
- write_stream,
197
- InitializationOptions(
198
- server_name="scitex-plt",
199
- server_version="0.1.0",
200
- capabilities=server.server.get_capabilities(
201
- notification_options=NotificationOptions(),
202
- experimental_capabilities={},
203
- ),
204
- ),
205
- )
206
-
207
-
208
- def main():
209
- """Main entry point for the MCP server."""
210
- if not MCP_AVAILABLE:
211
- import sys
212
-
213
- print("=" * 60)
214
- print("MCP Server 'scitex-plt' requires the 'mcp' package.")
215
- print()
216
- print("Install with:")
217
- print(" pip install mcp")
218
- print()
219
- print("Or install scitex with MCP support:")
220
- print(" pip install scitex[mcp]")
221
- print("=" * 60)
222
- sys.exit(1)
223
-
224
- asyncio.run(_run_server())
225
-
226
-
227
- if __name__ == "__main__":
228
- main()
229
-
230
-
231
- # EOF
File without changes
@@ -1,44 +0,0 @@
1
- # Scholar Data Directory
2
-
3
- User-provided data files. This directory is gitignored.
4
-
5
- ## Structure
6
-
7
- ```
8
- data/
9
- └── impact_factor/
10
- ├── JCR_IF_2024.xlsx # JCR Excel file (user-provided)
11
- ├── JCR_IF_2024.db # SQLite database (generated)
12
- └── impact_factor.db -> JCR_IF_2024.db (symlink to active DB)
13
- ```
14
-
15
- ## Important
16
-
17
- - **Data NOT included in git**: This directory is gitignored
18
- - **User responsibility**: Users must provide their own JCR data
19
- - **Licensing**: Users must ensure proper licensing for any data
20
-
21
- ## Adding JCR Data
22
-
23
- 1. Obtain JCR Excel file from Clarivate or authorized source
24
- 2. Place in `src/scitex/scholar/data/impact_factor/JCR_IF_YYYY.xlsx`
25
- 3. Build database (optional - will auto-build if needed):
26
- ```python
27
- from scitex.scholar.impact_factor.jcr import build_database
28
- build_database("JCR_IF_2024.xlsx")
29
- ```
30
-
31
- ## File Naming Convention
32
-
33
- - Excel: `JCR_IF_YYYY.xlsx` (e.g., JCR_IF_2024.xlsx)
34
- - Database: `JCR_IF_YYYY.db` (e.g., JCR_IF_2024.db)
35
- - Symlink: `impact_factor.db` → points to current year DB
36
-
37
- ## Legal Notice
38
-
39
- JCR data is proprietary (Clarivate Analytics). Users are responsible for:
40
- - Obtaining data through authorized channels
41
- - Compliance with licensing terms
42
- - Not distributing data files
43
-
44
- We provide only the code to use the data, not the data itself.