scitex 2.14.0__py3-none-any.whl → 2.15.1__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.
- scitex/__init__.py +47 -0
- scitex/_env_loader.py +156 -0
- scitex/_mcp_resources/__init__.py +37 -0
- scitex/_mcp_resources/_cheatsheet.py +135 -0
- scitex/_mcp_resources/_figrecipe.py +138 -0
- scitex/_mcp_resources/_formats.py +102 -0
- scitex/_mcp_resources/_modules.py +337 -0
- scitex/_mcp_resources/_session.py +149 -0
- scitex/_mcp_tools/__init__.py +4 -0
- scitex/_mcp_tools/audio.py +66 -0
- scitex/_mcp_tools/diagram.py +11 -95
- scitex/_mcp_tools/introspect.py +191 -0
- scitex/_mcp_tools/plt.py +260 -305
- scitex/_mcp_tools/scholar.py +74 -0
- scitex/_mcp_tools/social.py +244 -0
- scitex/_mcp_tools/writer.py +21 -204
- scitex/ai/_gen_ai/_PARAMS.py +10 -7
- scitex/ai/classification/reporters/_SingleClassificationReporter.py +45 -1603
- scitex/ai/classification/reporters/_mixins/__init__.py +36 -0
- scitex/ai/classification/reporters/_mixins/_constants.py +67 -0
- scitex/ai/classification/reporters/_mixins/_cv_summary.py +387 -0
- scitex/ai/classification/reporters/_mixins/_feature_importance.py +119 -0
- scitex/ai/classification/reporters/_mixins/_metrics.py +275 -0
- scitex/ai/classification/reporters/_mixins/_plotting.py +179 -0
- scitex/ai/classification/reporters/_mixins/_reports.py +153 -0
- scitex/ai/classification/reporters/_mixins/_storage.py +160 -0
- scitex/audio/README.md +40 -36
- scitex/audio/__init__.py +127 -59
- scitex/audio/_branding.py +185 -0
- scitex/audio/_mcp/__init__.py +32 -0
- scitex/audio/_mcp/handlers.py +59 -6
- scitex/audio/_mcp/speak_handlers.py +238 -0
- scitex/audio/_relay.py +225 -0
- scitex/audio/engines/elevenlabs_engine.py +6 -1
- scitex/audio/mcp_server.py +228 -75
- scitex/canvas/README.md +1 -1
- scitex/canvas/editor/_dearpygui/__init__.py +25 -0
- scitex/canvas/editor/_dearpygui/_editor.py +147 -0
- scitex/canvas/editor/_dearpygui/_handlers.py +476 -0
- scitex/canvas/editor/_dearpygui/_panels/__init__.py +17 -0
- scitex/canvas/editor/_dearpygui/_panels/_control.py +119 -0
- scitex/canvas/editor/_dearpygui/_panels/_element_controls.py +190 -0
- scitex/canvas/editor/_dearpygui/_panels/_preview.py +43 -0
- scitex/canvas/editor/_dearpygui/_panels/_sections.py +390 -0
- scitex/canvas/editor/_dearpygui/_plotting.py +187 -0
- scitex/canvas/editor/_dearpygui/_rendering.py +504 -0
- scitex/canvas/editor/_dearpygui/_selection.py +295 -0
- scitex/canvas/editor/_dearpygui/_state.py +93 -0
- scitex/canvas/editor/_dearpygui/_utils.py +61 -0
- scitex/canvas/editor/flask_editor/templates/__init__.py +32 -70
- scitex/cli/__init__.py +38 -43
- scitex/cli/audio.py +76 -27
- scitex/cli/capture.py +13 -20
- scitex/cli/introspect.py +443 -0
- scitex/cli/main.py +198 -109
- scitex/cli/mcp.py +60 -34
- scitex/cli/scholar/__init__.py +8 -0
- scitex/cli/scholar/_crossref_scitex.py +296 -0
- scitex/cli/scholar/_fetch.py +25 -3
- scitex/cli/social.py +314 -0
- scitex/cli/writer.py +117 -0
- scitex/config/README.md +1 -1
- scitex/config/__init__.py +16 -2
- scitex/config/_env_registry.py +191 -0
- scitex/diagram/__init__.py +42 -19
- scitex/diagram/mcp_server.py +13 -125
- scitex/introspect/__init__.py +75 -0
- scitex/introspect/_call_graph.py +303 -0
- scitex/introspect/_class_hierarchy.py +163 -0
- scitex/introspect/_core.py +42 -0
- scitex/introspect/_docstring.py +131 -0
- scitex/introspect/_examples.py +113 -0
- scitex/introspect/_imports.py +271 -0
- scitex/introspect/_mcp/__init__.py +37 -0
- scitex/introspect/_mcp/handlers.py +208 -0
- scitex/introspect/_members.py +151 -0
- scitex/introspect/_resolve.py +89 -0
- scitex/introspect/_signature.py +131 -0
- scitex/introspect/_source.py +80 -0
- scitex/introspect/_type_hints.py +172 -0
- scitex/io/bundle/README.md +1 -1
- scitex/mcp_server.py +98 -5
- scitex/plt/__init__.py +248 -550
- scitex/plt/_subplots/_AxisWrapperMixins/_SeabornMixin/_wrappers.py +5 -10
- scitex/plt/docs/EXTERNAL_PACKAGE_BRANDING.md +149 -0
- scitex/plt/gallery/README.md +1 -1
- scitex/plt/utils/_hitmap/__init__.py +82 -0
- scitex/plt/utils/_hitmap/_artist_extraction.py +343 -0
- scitex/plt/utils/_hitmap/_color_application.py +346 -0
- scitex/plt/utils/_hitmap/_color_conversion.py +121 -0
- scitex/plt/utils/_hitmap/_constants.py +40 -0
- scitex/plt/utils/_hitmap/_hitmap_core.py +334 -0
- scitex/plt/utils/_hitmap/_path_extraction.py +357 -0
- scitex/plt/utils/_hitmap/_query.py +113 -0
- scitex/plt/utils/_hitmap.py +46 -1616
- scitex/plt/utils/_metadata/__init__.py +80 -0
- scitex/plt/utils/_metadata/_artists/__init__.py +25 -0
- scitex/plt/utils/_metadata/_artists/_base.py +195 -0
- scitex/plt/utils/_metadata/_artists/_collections.py +356 -0
- scitex/plt/utils/_metadata/_artists/_extract.py +57 -0
- scitex/plt/utils/_metadata/_artists/_images.py +80 -0
- scitex/plt/utils/_metadata/_artists/_lines.py +261 -0
- scitex/plt/utils/_metadata/_artists/_patches.py +247 -0
- scitex/plt/utils/_metadata/_artists/_text.py +106 -0
- scitex/plt/utils/_metadata/_csv.py +416 -0
- scitex/plt/utils/_metadata/_detect.py +225 -0
- scitex/plt/utils/_metadata/_legend.py +127 -0
- scitex/plt/utils/_metadata/_rounding.py +117 -0
- scitex/plt/utils/_metadata/_verification.py +202 -0
- scitex/schema/README.md +1 -1
- scitex/scholar/__init__.py +8 -0
- scitex/scholar/_mcp/crossref_handlers.py +265 -0
- scitex/scholar/core/Scholar.py +63 -1700
- scitex/scholar/core/_mixins/__init__.py +36 -0
- scitex/scholar/core/_mixins/_enrichers.py +270 -0
- scitex/scholar/core/_mixins/_library_handlers.py +100 -0
- scitex/scholar/core/_mixins/_loaders.py +103 -0
- scitex/scholar/core/_mixins/_pdf_download.py +375 -0
- scitex/scholar/core/_mixins/_pipeline.py +312 -0
- scitex/scholar/core/_mixins/_project_handlers.py +125 -0
- scitex/scholar/core/_mixins/_savers.py +69 -0
- scitex/scholar/core/_mixins/_search.py +103 -0
- scitex/scholar/core/_mixins/_services.py +88 -0
- scitex/scholar/core/_mixins/_url_finding.py +105 -0
- scitex/scholar/crossref_scitex.py +367 -0
- scitex/scholar/docs/EXTERNAL_PACKAGE_BRANDING.md +149 -0
- scitex/scholar/examples/00_run_all.sh +120 -0
- scitex/scholar/jobs/_executors.py +27 -3
- scitex/scholar/pdf_download/ScholarPDFDownloader.py +38 -416
- scitex/scholar/pdf_download/_cli.py +154 -0
- scitex/scholar/pdf_download/strategies/__init__.py +11 -8
- scitex/scholar/pdf_download/strategies/manual_download_fallback.py +80 -3
- scitex/scholar/pipelines/ScholarPipelineBibTeX.py +73 -121
- scitex/scholar/pipelines/ScholarPipelineParallel.py +80 -138
- scitex/scholar/pipelines/ScholarPipelineSingle.py +43 -63
- scitex/scholar/pipelines/_single_steps.py +71 -36
- scitex/scholar/storage/_LibraryManager.py +97 -1695
- scitex/scholar/storage/_mixins/__init__.py +30 -0
- scitex/scholar/storage/_mixins/_bibtex_handlers.py +128 -0
- scitex/scholar/storage/_mixins/_library_operations.py +218 -0
- scitex/scholar/storage/_mixins/_metadata_conversion.py +226 -0
- scitex/scholar/storage/_mixins/_paper_saving.py +456 -0
- scitex/scholar/storage/_mixins/_resolution.py +376 -0
- scitex/scholar/storage/_mixins/_storage_helpers.py +121 -0
- scitex/scholar/storage/_mixins/_symlink_handlers.py +226 -0
- scitex/scholar/url_finder/.tmp/open_url/KNOWN_RESOLVERS.py +462 -0
- scitex/scholar/url_finder/.tmp/open_url/README.md +223 -0
- scitex/scholar/url_finder/.tmp/open_url/_DOIToURLResolver.py +694 -0
- scitex/scholar/url_finder/.tmp/open_url/_OpenURLResolver.py +1160 -0
- scitex/scholar/url_finder/.tmp/open_url/_ResolverLinkFinder.py +344 -0
- scitex/scholar/url_finder/.tmp/open_url/__init__.py +24 -0
- scitex/security/README.md +3 -3
- scitex/session/README.md +1 -1
- scitex/sh/README.md +1 -1
- scitex/social/__init__.py +153 -0
- scitex/social/docs/EXTERNAL_PACKAGE_BRANDING.md +149 -0
- scitex/template/README.md +1 -1
- scitex/template/clone_writer_directory.py +5 -5
- scitex/writer/README.md +1 -1
- scitex/writer/_mcp/handlers.py +11 -744
- scitex/writer/_mcp/tool_schemas.py +5 -335
- scitex-2.15.1.dist-info/METADATA +648 -0
- {scitex-2.14.0.dist-info → scitex-2.15.1.dist-info}/RECORD +166 -111
- scitex/canvas/editor/flask_editor/templates/_scripts.py +0 -4933
- scitex/canvas/editor/flask_editor/templates/_styles.py +0 -1658
- scitex/dev/plt/data/mpl/PLOTTING_FUNCTIONS.yaml +0 -90
- scitex/dev/plt/data/mpl/PLOTTING_SIGNATURES.yaml +0 -1571
- scitex/dev/plt/data/mpl/PLOTTING_SIGNATURES_DETAILED.yaml +0 -6262
- scitex/dev/plt/data/mpl/SIGNATURES_FLATTENED.yaml +0 -1274
- scitex/dev/plt/data/mpl/dir_ax.txt +0 -459
- scitex/diagram/_compile.py +0 -312
- scitex/diagram/_diagram.py +0 -355
- scitex/diagram/_mcp/__init__.py +0 -4
- scitex/diagram/_mcp/handlers.py +0 -400
- scitex/diagram/_mcp/tool_schemas.py +0 -157
- scitex/diagram/_presets.py +0 -173
- scitex/diagram/_schema.py +0 -182
- scitex/diagram/_split.py +0 -278
- scitex/plt/_mcp/__init__.py +0 -4
- scitex/plt/_mcp/_handlers_annotation.py +0 -102
- scitex/plt/_mcp/_handlers_figure.py +0 -195
- scitex/plt/_mcp/_handlers_plot.py +0 -252
- scitex/plt/_mcp/_handlers_style.py +0 -219
- scitex/plt/_mcp/handlers.py +0 -74
- scitex/plt/_mcp/tool_schemas.py +0 -497
- scitex/plt/mcp_server.py +0 -231
- scitex/scholar/data/.gitkeep +0 -0
- scitex/scholar/data/README.md +0 -44
- scitex/scholar/data/bib_files/bibliography.bib +0 -1952
- scitex/scholar/data/bib_files/neurovista.bib +0 -277
- scitex/scholar/data/bib_files/neurovista_enriched.bib +0 -441
- scitex/scholar/data/bib_files/neurovista_enriched_enriched.bib +0 -441
- scitex/scholar/data/bib_files/neurovista_processed.bib +0 -338
- scitex/scholar/data/bib_files/openaccess.bib +0 -89
- scitex/scholar/data/bib_files/pac-seizure_prediction_enriched.bib +0 -2178
- scitex/scholar/data/bib_files/pac.bib +0 -698
- scitex/scholar/data/bib_files/pac_enriched.bib +0 -1061
- scitex/scholar/data/bib_files/pac_processed.bib +0 -0
- scitex/scholar/data/bib_files/pac_titles.txt +0 -75
- scitex/scholar/data/bib_files/paywalled.bib +0 -98
- scitex/scholar/data/bib_files/related-papers-by-coauthors.bib +0 -58
- scitex/scholar/data/bib_files/related-papers-by-coauthors_enriched.bib +0 -87
- scitex/scholar/data/bib_files/seizure_prediction.bib +0 -694
- scitex/scholar/data/bib_files/seizure_prediction_processed.bib +0 -0
- scitex/scholar/data/bib_files/test_complete_enriched.bib +0 -437
- scitex/scholar/data/bib_files/test_final_enriched.bib +0 -437
- scitex/scholar/data/bib_files/test_seizure.bib +0 -46
- scitex/scholar/data/impact_factor/JCR_IF_2022.xlsx +0 -0
- scitex/scholar/data/impact_factor/JCR_IF_2024.db +0 -0
- scitex/scholar/data/impact_factor/JCR_IF_2024.xlsx +0 -0
- scitex/scholar/data/impact_factor/JCR_IF_2024_v01.db +0 -0
- scitex/scholar/data/impact_factor.db +0 -0
- scitex/scholar/examples/SUGGESTIONS.md +0 -865
- scitex/scholar/examples/dev.py +0 -38
- scitex-2.14.0.dist-info/METADATA +0 -1238
- {scitex-2.14.0.dist-info → scitex-2.15.1.dist-info}/WHEEL +0 -0
- {scitex-2.14.0.dist-info → scitex-2.15.1.dist-info}/entry_points.txt +0 -0
- {scitex-2.14.0.dist-info → scitex-2.15.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# Timestamp: 2025-01-20
|
|
3
|
+
# File: /home/ywatanabe/proj/scitex-code/src/scitex/_mcp_tools/introspect.py
|
|
4
|
+
|
|
5
|
+
"""Introspection module tools for FastMCP unified server."""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import json
|
|
10
|
+
from typing import Optional
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _json(data: dict) -> str:
|
|
14
|
+
return json.dumps(data, indent=2, default=str)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def register_introspect_tools(mcp) -> None:
|
|
18
|
+
"""Register introspection tools with FastMCP server."""
|
|
19
|
+
|
|
20
|
+
@mcp.tool()
|
|
21
|
+
async def introspect_signature(
|
|
22
|
+
dotted_path: str,
|
|
23
|
+
include_defaults: bool = True,
|
|
24
|
+
include_annotations: bool = True,
|
|
25
|
+
) -> str:
|
|
26
|
+
"""[introspect] Get function/class signature (like IPython's func?)."""
|
|
27
|
+
from scitex.introspect._mcp.handlers import signature_handler
|
|
28
|
+
|
|
29
|
+
result = await signature_handler(
|
|
30
|
+
dotted_path=dotted_path,
|
|
31
|
+
include_defaults=include_defaults,
|
|
32
|
+
include_annotations=include_annotations,
|
|
33
|
+
)
|
|
34
|
+
return _json(result)
|
|
35
|
+
|
|
36
|
+
@mcp.tool()
|
|
37
|
+
async def introspect_docstring(
|
|
38
|
+
dotted_path: str,
|
|
39
|
+
format: str = "raw",
|
|
40
|
+
) -> str:
|
|
41
|
+
"""[introspect] Get docstring of a Python object. format: raw|parsed|summary."""
|
|
42
|
+
from scitex.introspect._mcp.handlers import docstring_handler
|
|
43
|
+
|
|
44
|
+
result = await docstring_handler(
|
|
45
|
+
dotted_path=dotted_path,
|
|
46
|
+
format=format,
|
|
47
|
+
)
|
|
48
|
+
return _json(result)
|
|
49
|
+
|
|
50
|
+
@mcp.tool()
|
|
51
|
+
async def introspect_source(
|
|
52
|
+
dotted_path: str,
|
|
53
|
+
max_lines: Optional[int] = None,
|
|
54
|
+
include_decorators: bool = True,
|
|
55
|
+
) -> str:
|
|
56
|
+
"""[introspect] Get source code of a Python object (like IPython's func??)."""
|
|
57
|
+
from scitex.introspect._mcp.handlers import source_handler
|
|
58
|
+
|
|
59
|
+
result = await source_handler(
|
|
60
|
+
dotted_path=dotted_path,
|
|
61
|
+
max_lines=max_lines,
|
|
62
|
+
include_decorators=include_decorators,
|
|
63
|
+
)
|
|
64
|
+
return _json(result)
|
|
65
|
+
|
|
66
|
+
@mcp.tool()
|
|
67
|
+
async def introspect_members(
|
|
68
|
+
dotted_path: str,
|
|
69
|
+
filter: str = "public",
|
|
70
|
+
kind: Optional[str] = None,
|
|
71
|
+
include_inherited: bool = False,
|
|
72
|
+
) -> str:
|
|
73
|
+
"""[introspect] List members of module/class (like dir()). filter: all|public|private|dunder."""
|
|
74
|
+
from scitex.introspect._mcp.handlers import members_handler
|
|
75
|
+
|
|
76
|
+
result = await members_handler(
|
|
77
|
+
dotted_path=dotted_path,
|
|
78
|
+
filter=filter,
|
|
79
|
+
kind=kind,
|
|
80
|
+
include_inherited=include_inherited,
|
|
81
|
+
)
|
|
82
|
+
return _json(result)
|
|
83
|
+
|
|
84
|
+
@mcp.tool()
|
|
85
|
+
async def introspect_exports(dotted_path: str) -> str:
|
|
86
|
+
"""[introspect] Get __all__ exports of a module."""
|
|
87
|
+
from scitex.introspect._mcp.handlers import exports_handler
|
|
88
|
+
|
|
89
|
+
result = await exports_handler(dotted_path=dotted_path)
|
|
90
|
+
return _json(result)
|
|
91
|
+
|
|
92
|
+
@mcp.tool()
|
|
93
|
+
async def introspect_examples(
|
|
94
|
+
dotted_path: str,
|
|
95
|
+
search_paths: Optional[str] = None,
|
|
96
|
+
max_results: int = 10,
|
|
97
|
+
) -> str:
|
|
98
|
+
"""[introspect] Find usage examples in tests/examples directories."""
|
|
99
|
+
from scitex.introspect._mcp.handlers import examples_handler
|
|
100
|
+
|
|
101
|
+
# Parse search_paths if provided as comma-separated string
|
|
102
|
+
paths_list = None
|
|
103
|
+
if search_paths:
|
|
104
|
+
paths_list = [p.strip() for p in search_paths.split(",")]
|
|
105
|
+
|
|
106
|
+
result = await examples_handler(
|
|
107
|
+
dotted_path=dotted_path,
|
|
108
|
+
search_paths=paths_list,
|
|
109
|
+
max_results=max_results,
|
|
110
|
+
)
|
|
111
|
+
return _json(result)
|
|
112
|
+
|
|
113
|
+
# Advanced introspection tools
|
|
114
|
+
|
|
115
|
+
@mcp.tool()
|
|
116
|
+
async def introspect_class_hierarchy(
|
|
117
|
+
dotted_path: str,
|
|
118
|
+
include_builtins: bool = False,
|
|
119
|
+
max_depth: int = 10,
|
|
120
|
+
) -> str:
|
|
121
|
+
"""[introspect] Get class inheritance hierarchy (MRO + subclasses)."""
|
|
122
|
+
from scitex.introspect._mcp.handlers import class_hierarchy_handler
|
|
123
|
+
|
|
124
|
+
result = await class_hierarchy_handler(
|
|
125
|
+
dotted_path=dotted_path,
|
|
126
|
+
include_builtins=include_builtins,
|
|
127
|
+
max_depth=max_depth,
|
|
128
|
+
)
|
|
129
|
+
return _json(result)
|
|
130
|
+
|
|
131
|
+
@mcp.tool()
|
|
132
|
+
async def introspect_type_hints(
|
|
133
|
+
dotted_path: str,
|
|
134
|
+
include_extras: bool = True,
|
|
135
|
+
) -> str:
|
|
136
|
+
"""[introspect] Get detailed type hint analysis for function/class."""
|
|
137
|
+
from scitex.introspect._mcp.handlers import type_hints_handler
|
|
138
|
+
|
|
139
|
+
result = await type_hints_handler(
|
|
140
|
+
dotted_path=dotted_path,
|
|
141
|
+
include_extras=include_extras,
|
|
142
|
+
)
|
|
143
|
+
return _json(result)
|
|
144
|
+
|
|
145
|
+
@mcp.tool()
|
|
146
|
+
async def introspect_imports(
|
|
147
|
+
dotted_path: str,
|
|
148
|
+
categorize: bool = True,
|
|
149
|
+
) -> str:
|
|
150
|
+
"""[introspect] Get all imports from a module (AST-based static analysis)."""
|
|
151
|
+
from scitex.introspect._mcp.handlers import imports_handler
|
|
152
|
+
|
|
153
|
+
result = await imports_handler(
|
|
154
|
+
dotted_path=dotted_path,
|
|
155
|
+
categorize=categorize,
|
|
156
|
+
)
|
|
157
|
+
return _json(result)
|
|
158
|
+
|
|
159
|
+
@mcp.tool()
|
|
160
|
+
async def introspect_dependencies(
|
|
161
|
+
dotted_path: str,
|
|
162
|
+
recursive: bool = False,
|
|
163
|
+
max_depth: int = 3,
|
|
164
|
+
) -> str:
|
|
165
|
+
"""[introspect] Get module dependencies (what it imports)."""
|
|
166
|
+
from scitex.introspect._mcp.handlers import dependencies_handler
|
|
167
|
+
|
|
168
|
+
result = await dependencies_handler(
|
|
169
|
+
dotted_path=dotted_path,
|
|
170
|
+
recursive=recursive,
|
|
171
|
+
max_depth=max_depth,
|
|
172
|
+
)
|
|
173
|
+
return _json(result)
|
|
174
|
+
|
|
175
|
+
@mcp.tool()
|
|
176
|
+
async def introspect_call_graph(
|
|
177
|
+
dotted_path: str,
|
|
178
|
+
max_depth: int = 2,
|
|
179
|
+
timeout_seconds: int = 10,
|
|
180
|
+
internal_only: bool = True,
|
|
181
|
+
) -> str:
|
|
182
|
+
"""[introspect] Get function call graph (with timeout protection)."""
|
|
183
|
+
from scitex.introspect._mcp.handlers import call_graph_handler
|
|
184
|
+
|
|
185
|
+
result = await call_graph_handler(
|
|
186
|
+
dotted_path=dotted_path,
|
|
187
|
+
max_depth=max_depth,
|
|
188
|
+
timeout_seconds=timeout_seconds,
|
|
189
|
+
internal_only=internal_only,
|
|
190
|
+
)
|
|
191
|
+
return _json(result)
|