scitex 2.16.1__py3-none-any.whl → 2.16.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.
- 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-2.16.1.dist-info → scitex-2.16.2.dist-info}/METADATA +1 -1
- {scitex-2.16.1.dist-info → scitex-2.16.2.dist-info}/RECORD +11 -36
- 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/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-2.16.1.dist-info → scitex-2.16.2.dist-info}/WHEEL +0 -0
- {scitex-2.16.1.dist-info → scitex-2.16.2.dist-info}/entry_points.txt +0 -0
- {scitex-2.16.1.dist-info → scitex-2.16.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-07-29 03:10:08 (ywatanabe)"
|
|
4
|
+
# File: /home/ywatanabe/proj/scitex_repo/src/scitex/scholar/open_url/_ResolverLinkFinder.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
import os
|
|
9
|
+
|
|
10
|
+
__FILE__ = (
|
|
11
|
+
"./src/scitex/scholar/open_url/_ResolverLinkFinder.py"
|
|
12
|
+
)
|
|
13
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
14
|
+
# ----------------------------------------
|
|
15
|
+
|
|
16
|
+
"""Robust resolver link finder using a prioritized, multi-layered approach.
|
|
17
|
+
|
|
18
|
+
Priority order:
|
|
19
|
+
1. Link Target (domain matching) - Most reliable
|
|
20
|
+
2. Page Structure (CSS selectors) - Very reliable
|
|
21
|
+
3. Text Patterns - Good fallback
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
import re
|
|
25
|
+
from typing import List, Optional
|
|
26
|
+
from urllib.parse import urlparse
|
|
27
|
+
|
|
28
|
+
from playwright.async_api import ElementHandle, Page
|
|
29
|
+
|
|
30
|
+
from scitex import logging
|
|
31
|
+
|
|
32
|
+
logger = logging.getLogger(__name__)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class ResolverLinkFinder:
|
|
36
|
+
"""Finds full-text links on resolver pages using multiple strategies."""
|
|
37
|
+
|
|
38
|
+
# DOI prefix to publisher domain mapping
|
|
39
|
+
DOI_TO_DOMAIN = {
|
|
40
|
+
"10.1038": [
|
|
41
|
+
"nature.com",
|
|
42
|
+
"springernature.com",
|
|
43
|
+
], # Nature Publishing Group
|
|
44
|
+
"10.1016": ["sciencedirect.com", "elsevier.com"], # Elsevier
|
|
45
|
+
"10.1002": ["wiley.com", "onlinelibrary.wiley.com"], # Wiley
|
|
46
|
+
"10.1007": ["springer.com", "link.springer.com"], # Springer
|
|
47
|
+
"10.1126": ["science.org", "sciencemag.org"], # Science/AAAS
|
|
48
|
+
"10.1021": ["acs.org", "pubs.acs.org"], # ACS Publications
|
|
49
|
+
"10.1111": [
|
|
50
|
+
"wiley.com",
|
|
51
|
+
"onlinelibrary.wiley.com",
|
|
52
|
+
], # Wiley (alternative)
|
|
53
|
+
"10.1080": ["tandfonline.com"], # Taylor & Francis
|
|
54
|
+
"10.1177": ["sagepub.com", "journals.sagepub.com"], # SAGE
|
|
55
|
+
"10.1093": ["oup.com", "academic.oup.com"], # Oxford
|
|
56
|
+
"10.1109": ["ieee.org", "ieeexplore.ieee.org"], # IEEE
|
|
57
|
+
"10.1371": ["plos.org", "journals.plos.org"], # PLOS
|
|
58
|
+
"10.1073": ["pnas.org"], # PNAS
|
|
59
|
+
"10.1136": ["bmj.com"], # BMJ
|
|
60
|
+
"10.3389": ["frontiersin.org"], # Frontiers
|
|
61
|
+
"10.3390": ["mdpi.com"], # MDPI
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
# Common resolver page structures
|
|
65
|
+
STRUCTURE_SELECTORS = [
|
|
66
|
+
# SFX (ExLibris) - used by many universities
|
|
67
|
+
"div#fulltext a",
|
|
68
|
+
"div.sfx-fulltext a",
|
|
69
|
+
"div.results-title > a",
|
|
70
|
+
"td.object-cell a",
|
|
71
|
+
".getFullTxt a",
|
|
72
|
+
'div[id*="fulltext"] a',
|
|
73
|
+
'div[class*="fulltext"] a',
|
|
74
|
+
# SFX specific selectors for University of Melbourne
|
|
75
|
+
"a[title*='Wiley Online Library']",
|
|
76
|
+
"a[href*='wiley.com']",
|
|
77
|
+
"a[href*='onlinelibrary.wiley.com']",
|
|
78
|
+
".sfx-target a",
|
|
79
|
+
".target a",
|
|
80
|
+
"td a[href*='wiley']",
|
|
81
|
+
# Primo (ExLibris)
|
|
82
|
+
"prm-full-view-service-container a",
|
|
83
|
+
"span.availability-status-available a",
|
|
84
|
+
# Summon (ProQuest)
|
|
85
|
+
".summon-fulltext-link",
|
|
86
|
+
"a.summon-link",
|
|
87
|
+
# EDS (EBSCO)
|
|
88
|
+
"a.fulltext-link",
|
|
89
|
+
".ft-link a",
|
|
90
|
+
# Generic patterns
|
|
91
|
+
"a.full-text-link",
|
|
92
|
+
"a.fulltext",
|
|
93
|
+
"a#full-text-link",
|
|
94
|
+
".access-link a",
|
|
95
|
+
".available-link a",
|
|
96
|
+
]
|
|
97
|
+
|
|
98
|
+
# Text patterns in priority order
|
|
99
|
+
TEXT_PATTERNS = [
|
|
100
|
+
# Most specific
|
|
101
|
+
"View full text at",
|
|
102
|
+
"Available from Nature",
|
|
103
|
+
"Available from ScienceDirect",
|
|
104
|
+
"Available from Wiley",
|
|
105
|
+
"Available from Wiley Online Library",
|
|
106
|
+
"Full text available from",
|
|
107
|
+
# Common patterns
|
|
108
|
+
"View full text",
|
|
109
|
+
"Full Text from Publisher",
|
|
110
|
+
"Get full text",
|
|
111
|
+
"Access full text",
|
|
112
|
+
"Go to article",
|
|
113
|
+
"Access article",
|
|
114
|
+
# Generic but reliable
|
|
115
|
+
"Full Text",
|
|
116
|
+
"Full text",
|
|
117
|
+
"Article",
|
|
118
|
+
"View",
|
|
119
|
+
"PDF",
|
|
120
|
+
"Download",
|
|
121
|
+
]
|
|
122
|
+
|
|
123
|
+
def __init__(self):
|
|
124
|
+
self._doi_pattern = re.compile(r"10\.\d{4,}/[-._;()/:\w]+")
|
|
125
|
+
|
|
126
|
+
def get_expected_domains(self, doi: str) -> List[str]:
|
|
127
|
+
"""Get expected publisher domains for a DOI."""
|
|
128
|
+
# Extract DOI prefix
|
|
129
|
+
match = re.match(r"(10\.\d{4,})", doi)
|
|
130
|
+
if not match:
|
|
131
|
+
return []
|
|
132
|
+
|
|
133
|
+
prefix = match.group(1)
|
|
134
|
+
return self.DOI_TO_DOMAIN.get(prefix, [])
|
|
135
|
+
|
|
136
|
+
async def find_link_async(self, page, doi: str) -> dict:
|
|
137
|
+
"""Find the best full-text link using prioritized strategies."""
|
|
138
|
+
logger.info(f"Finding resolver link for DOI: {doi}")
|
|
139
|
+
|
|
140
|
+
# Strategy 1: Link Target (Most Reliable)
|
|
141
|
+
link_url = await self._find_by_domain_async(page, doi)
|
|
142
|
+
if link_url:
|
|
143
|
+
logger.info("✓ Found link using domain matching (Strategy 1)")
|
|
144
|
+
return {"success": True, "url": link_url, "method": "domain"}
|
|
145
|
+
|
|
146
|
+
# Strategy 2: Page Structure with scoring
|
|
147
|
+
link_url = await self._find_by_structure_async(page, doi)
|
|
148
|
+
if link_url:
|
|
149
|
+
logger.info("✓ Found link using page structure (Strategy 2)")
|
|
150
|
+
return {"success": True, "url": link_url, "method": "structure"}
|
|
151
|
+
|
|
152
|
+
logger.warning("✗ No suitable links found")
|
|
153
|
+
return {"success": False, "url": None, "method": None}
|
|
154
|
+
|
|
155
|
+
async def _find_by_domain_async(self, page: Page, doi: str) -> Optional[str]:
|
|
156
|
+
"""Strategy 1: Find link by expected publisher domain."""
|
|
157
|
+
expected_domains = self.get_expected_domains(doi)
|
|
158
|
+
if not expected_domains:
|
|
159
|
+
logger.debug(f"No known publisher domains for DOI prefix: {doi}")
|
|
160
|
+
return None
|
|
161
|
+
|
|
162
|
+
logger.debug(f"Looking for links to domains: {expected_domains}")
|
|
163
|
+
all_links = await page.query_selector_all("a[href]")
|
|
164
|
+
|
|
165
|
+
for link in all_links:
|
|
166
|
+
href = await link.get_attribute("href")
|
|
167
|
+
if not href:
|
|
168
|
+
continue
|
|
169
|
+
|
|
170
|
+
try:
|
|
171
|
+
parsed = urlparse(href)
|
|
172
|
+
domain = parsed.netloc.lower()
|
|
173
|
+
|
|
174
|
+
for expected in expected_domains:
|
|
175
|
+
if expected in domain:
|
|
176
|
+
text = await link.inner_text() or ""
|
|
177
|
+
logger.info(
|
|
178
|
+
f"Found domain match: {domain} (text: '{text[:50]}')"
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
if not any(
|
|
182
|
+
bad in text.lower()
|
|
183
|
+
for bad in ["abstract", "preview", "summary"]
|
|
184
|
+
):
|
|
185
|
+
return href
|
|
186
|
+
else:
|
|
187
|
+
logger.debug(
|
|
188
|
+
f"Skipping abstract/preview link: {text}"
|
|
189
|
+
)
|
|
190
|
+
except Exception as e:
|
|
191
|
+
logger.debug(f"Error parsing URL {href}: {e}")
|
|
192
|
+
|
|
193
|
+
return None
|
|
194
|
+
|
|
195
|
+
async def _find_by_structure_async(self, page, doi: str):
|
|
196
|
+
"""Find link by page structure with publisher prioritization."""
|
|
197
|
+
potential_links = []
|
|
198
|
+
expected_domains = self.get_expected_domains(doi)
|
|
199
|
+
publisher_keywords = [
|
|
200
|
+
domain.split(".")[0] for domain in expected_domains
|
|
201
|
+
]
|
|
202
|
+
aggregator_keywords = ["gale", "proquest", "ebsco", "jstor", "onefile"]
|
|
203
|
+
|
|
204
|
+
# Gather all possible links
|
|
205
|
+
for selector in self.STRUCTURE_SELECTORS:
|
|
206
|
+
try:
|
|
207
|
+
elements = await page.query_selector_all(selector)
|
|
208
|
+
logger.debug(
|
|
209
|
+
f"Found {len(elements)} elements with selector: {selector}"
|
|
210
|
+
)
|
|
211
|
+
|
|
212
|
+
for element in elements:
|
|
213
|
+
if await element.is_visible():
|
|
214
|
+
href = await element.get_attribute("href")
|
|
215
|
+
text = (await element.inner_text() or "").lower()
|
|
216
|
+
|
|
217
|
+
if href and href.strip():
|
|
218
|
+
potential_links.append(
|
|
219
|
+
{"href": href, "text": text, "score": 0}
|
|
220
|
+
)
|
|
221
|
+
except Exception as element_error:
|
|
222
|
+
logger.debug(
|
|
223
|
+
f"Error with selector '{selector}': {element_error}"
|
|
224
|
+
)
|
|
225
|
+
|
|
226
|
+
if not potential_links:
|
|
227
|
+
return None
|
|
228
|
+
|
|
229
|
+
# Score the links
|
|
230
|
+
for link in potential_links:
|
|
231
|
+
# Highest score for direct publisher match
|
|
232
|
+
if any(keyword in link["text"] for keyword in publisher_keywords):
|
|
233
|
+
link["score"] = 3
|
|
234
|
+
# High score for generic publisher
|
|
235
|
+
elif "publisher" in link["text"]:
|
|
236
|
+
link["score"] = 2
|
|
237
|
+
# Negative score for aggregators
|
|
238
|
+
elif any(
|
|
239
|
+
keyword in link["text"] for keyword in aggregator_keywords
|
|
240
|
+
):
|
|
241
|
+
link["score"] = -1
|
|
242
|
+
# Default neutral score
|
|
243
|
+
else:
|
|
244
|
+
link["score"] = 0
|
|
245
|
+
|
|
246
|
+
# Sort by score, highest first
|
|
247
|
+
sorted_links = sorted(
|
|
248
|
+
potential_links, key=lambda x: x["score"], reverse=True
|
|
249
|
+
)
|
|
250
|
+
best_link = sorted_links[0]
|
|
251
|
+
|
|
252
|
+
logger.debug(
|
|
253
|
+
f"Found structural match: '{best_link['text'][:50]}' -> {best_link['href']}"
|
|
254
|
+
)
|
|
255
|
+
return best_link["href"]
|
|
256
|
+
|
|
257
|
+
async def _find_by_text_async(self, page: Page) -> Optional[str]:
|
|
258
|
+
"""Strategy 3: Find link by text patterns."""
|
|
259
|
+
for pattern in self.TEXT_PATTERNS:
|
|
260
|
+
try:
|
|
261
|
+
selector = f'a:has-text("{pattern}")'
|
|
262
|
+
link = await page.query_selector(selector)
|
|
263
|
+
if link and await link.is_visible():
|
|
264
|
+
href = await link.get_attribute("href")
|
|
265
|
+
if href and href.strip():
|
|
266
|
+
logger.debug(
|
|
267
|
+
f"Found text match: '{pattern}' -> {href[:100]}"
|
|
268
|
+
)
|
|
269
|
+
return href
|
|
270
|
+
except Exception as e:
|
|
271
|
+
logger.debug(f"Error with text pattern '{pattern}': {e}")
|
|
272
|
+
|
|
273
|
+
return None
|
|
274
|
+
|
|
275
|
+
async def click_and_wait_async(self, page: Page, link: ElementHandle) -> bool:
|
|
276
|
+
"""Click link and wait for navigation.
|
|
277
|
+
|
|
278
|
+
Returns True if navigation succeeded.
|
|
279
|
+
"""
|
|
280
|
+
initial_url = page.url
|
|
281
|
+
|
|
282
|
+
try:
|
|
283
|
+
# Get link info for logging
|
|
284
|
+
href = await link.get_attribute("href") or ""
|
|
285
|
+
text = await link.inner_text() or ""
|
|
286
|
+
logger.info(f"Clicking link: '{text[:50]}' -> {href[:100]}")
|
|
287
|
+
|
|
288
|
+
# Click and wait for navigation
|
|
289
|
+
await link.click()
|
|
290
|
+
|
|
291
|
+
# Wait for either navigation or network idle
|
|
292
|
+
try:
|
|
293
|
+
await page.wait_for_load_state("networkidle", timeout=30000)
|
|
294
|
+
except:
|
|
295
|
+
# Fallback to domcontentloaded if network doesn't settle
|
|
296
|
+
await page.wait_for_load_state(
|
|
297
|
+
"domcontentloaded", timeout=30000
|
|
298
|
+
)
|
|
299
|
+
|
|
300
|
+
# Additional wait for JavaScript redirects
|
|
301
|
+
await page.wait_for_timeout(3000)
|
|
302
|
+
|
|
303
|
+
# Check if we navigated
|
|
304
|
+
final_url = page.url
|
|
305
|
+
if final_url != initial_url:
|
|
306
|
+
logger.info(
|
|
307
|
+
f"Successfully navigated: {initial_url} -> {final_url}"
|
|
308
|
+
)
|
|
309
|
+
return True
|
|
310
|
+
else:
|
|
311
|
+
logger.warning("No navigation occurred after click")
|
|
312
|
+
return False
|
|
313
|
+
|
|
314
|
+
except Exception as e:
|
|
315
|
+
logger.error(f"Error during click and navigation: {e}")
|
|
316
|
+
return False
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
# Convenience function for integration
|
|
320
|
+
async def find_and_click_resolver_link_async(page: Page, doi: str) -> Optional[str]:
|
|
321
|
+
"""Find and click the best resolver link.
|
|
322
|
+
|
|
323
|
+
Args:
|
|
324
|
+
page: Playwright page object
|
|
325
|
+
doi: Target DOI
|
|
326
|
+
|
|
327
|
+
Returns:
|
|
328
|
+
Final URL after navigation, or None if failed
|
|
329
|
+
"""
|
|
330
|
+
finder = ResolverLinkFinder()
|
|
331
|
+
|
|
332
|
+
# Find link
|
|
333
|
+
link = await finder.find_link_async(page, doi)
|
|
334
|
+
if not link:
|
|
335
|
+
return None
|
|
336
|
+
|
|
337
|
+
# Click and navigate
|
|
338
|
+
success = await finder.click_and_wait_async(page, link)
|
|
339
|
+
if success:
|
|
340
|
+
return page.url
|
|
341
|
+
else:
|
|
342
|
+
return None
|
|
343
|
+
|
|
344
|
+
# EOF
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-07-31 00:53:24 (ywatanabe)"
|
|
4
|
+
# File: /home/ywatanabe/proj/scitex_repo/src/scitex/scholar/open_url/__init__.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
import os
|
|
9
|
+
|
|
10
|
+
__FILE__ = (
|
|
11
|
+
"./src/scitex/scholar/open_url/__init__.py"
|
|
12
|
+
)
|
|
13
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
14
|
+
# ----------------------------------------
|
|
15
|
+
|
|
16
|
+
from ._DOIToURLResolver import DOIToURLResolver
|
|
17
|
+
from ._OpenURLResolver import OpenURLResolver
|
|
18
|
+
|
|
19
|
+
__all__ = [
|
|
20
|
+
"OpenURLResolver",
|
|
21
|
+
"DOIToURLResolver",
|
|
22
|
+
]
|
|
23
|
+
|
|
24
|
+
# EOF
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: scitex
|
|
3
|
-
Version: 2.16.
|
|
3
|
+
Version: 2.16.2
|
|
4
4
|
Summary: A comprehensive Python library for scientific computing and data analysis
|
|
5
5
|
Project-URL: Homepage, https://github.com/ywatanabe1989/scitex-python
|
|
6
6
|
Project-URL: Documentation, https://scitex.readthedocs.io
|
|
@@ -577,11 +577,6 @@ scitex/dev/plt/plot_stx_scatter.py,sha256=yJnZE0aL5Z0armnKyxCgdSIfmwSx0MO_BoDbzT
|
|
|
577
577
|
scitex/dev/plt/plot_stx_shaded_line.py,sha256=Ss4RD0qxO_uH1h_NL_meSH1-_ZXfOKnV1MAT48tegnI,718
|
|
578
578
|
scitex/dev/plt/plot_stx_violin.py,sha256=oEAWE4RwG7SQ3JlVuzfSbTFDF02VRb_vE4qBLU3tMu4,680
|
|
579
579
|
scitex/dev/plt/plot_stx_violinplot.py,sha256=wafuzIKs9WJRfXcH4bxxuigqCh75nxcZDfFq-9P1zxA,687
|
|
580
|
-
scitex/dev/plt/data/mpl/PLOTTING_FUNCTIONS.yaml,sha256=1E1RfxT1QtA3M5hrqn0zynwMrhIEIpaZSAHItRBIHdI,2843
|
|
581
|
-
scitex/dev/plt/data/mpl/PLOTTING_SIGNATURES.yaml,sha256=ambH7kkBUivqVvo7thcMfs-ZvXAdaXtEEYuPTAvSOls,28660
|
|
582
|
-
scitex/dev/plt/data/mpl/PLOTTING_SIGNATURES_DETAILED.yaml,sha256=xzytlIhc9V3Aartc-HzzlDVvcOd7QGuzIkIe9X75sdk,181125
|
|
583
|
-
scitex/dev/plt/data/mpl/SIGNATURES_FLATTENED.yaml,sha256=kvV9iS2L3x3Et7LWK9Dyo_pQBnK2eTu13EXNS619ePM,27684
|
|
584
|
-
scitex/dev/plt/data/mpl/dir_ax.txt,sha256=HuMRJLF5pw58SaNrKkX8eeAj19k219bV7EVGzSPOCUU,5686
|
|
585
580
|
scitex/dev/plt/demo_plotters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
586
581
|
scitex/dev/plt/demo_plotters/plot_mpl_axhline.py,sha256=ECGTgIGgpU82llOHVqur0gzSl1NUHjvyaB85cZewKW8,707
|
|
587
582
|
scitex/dev/plt/demo_plotters/plot_mpl_axhspan.py,sha256=WetEGSzRbppTvn5VprGNglKuzLMoM8tFXg_N0jMFgFM,704
|
|
@@ -1404,32 +1399,6 @@ scitex/scholar/core/_mixins/_savers.py,sha256=DonIcpCaobrRTs_LAuwurYEhsUTQE9otzX
|
|
|
1404
1399
|
scitex/scholar/core/_mixins/_search.py,sha256=8SyCtYtyyzTtMP85kFPrOZLK8PvL9dCCoOyI95N-SfI,3721
|
|
1405
1400
|
scitex/scholar/core/_mixins/_services.py,sha256=rnNtDTBES6RwKJzC0Wpi0G9Xiju2pudrdrSfrftB9dM,3228
|
|
1406
1401
|
scitex/scholar/core/_mixins/_url_finding.py,sha256=PawfItu2ienUW6Hj155fPT2KsKqm_sc7uukEYAXr-Rk,3241
|
|
1407
|
-
scitex/scholar/data/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1408
|
-
scitex/scholar/data/README.md,sha256=x38oaKofFr-9MdmYSX6etjt7c_37BtJ1HI2bVvGWxdc,1343
|
|
1409
|
-
scitex/scholar/data/impact_factor.db,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1410
|
-
scitex/scholar/data/bib_files/bibliography.bib,sha256=6cBOh0rNI9OpN4kOIOZMpE6jZuoEbfDJkFNgmcMDeVo,265769
|
|
1411
|
-
scitex/scholar/data/bib_files/neurovista.bib,sha256=NV7yU5UjkntfEJuLHSGdAzYR1GgddEQpngjQJWd5Pkc,12935
|
|
1412
|
-
scitex/scholar/data/bib_files/neurovista_enriched.bib,sha256=Bw7CiHo71OYVPRBO5l8bujzmy5xbExqO8Z7XYihqP98,62246
|
|
1413
|
-
scitex/scholar/data/bib_files/neurovista_enriched_enriched.bib,sha256=Bw7CiHo71OYVPRBO5l8bujzmy5xbExqO8Z7XYihqP98,62246
|
|
1414
|
-
scitex/scholar/data/bib_files/neurovista_processed.bib,sha256=CNL3LmRpLhp-qahyMEgfKRlQHuGYnDjUjitxVSiU3As,51469
|
|
1415
|
-
scitex/scholar/data/bib_files/openaccess.bib,sha256=73BIBSj5m0HbxeE-SrmI5hmDGCSbPhvbQioDXqb54Fc,3524
|
|
1416
|
-
scitex/scholar/data/bib_files/pac-seizure_prediction_enriched.bib,sha256=z5Rx7N_8wjQqYwPjwUbybeAp4fb1XyjbQ3X1LpuaqqU,272200
|
|
1417
|
-
scitex/scholar/data/bib_files/pac.bib,sha256=jxxGxT5CruEvKZfMcMQqt-48ZPcKSCuw-L4gJBUkvsc,27557
|
|
1418
|
-
scitex/scholar/data/bib_files/pac_enriched.bib,sha256=qYWT4aOp1694eEhdYUZZJ1e9uT5ZqjuSphZrmF1PwhU,142261
|
|
1419
|
-
scitex/scholar/data/bib_files/pac_processed.bib,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1420
|
-
scitex/scholar/data/bib_files/pac_titles.txt,sha256=KZI7uRGxSWCWitkI3E7dXxl3H46eeyBMJdJEavGb8Z4,7276
|
|
1421
|
-
scitex/scholar/data/bib_files/paywalled.bib,sha256=HeuYd4TxWBNFyn8BboC_SMrUe1PYhtVVZtdHM-A5UPI,3797
|
|
1422
|
-
scitex/scholar/data/bib_files/related-papers-by-coauthors.bib,sha256=sSXMtAA3zBYS2wG2yrDJSeF6li37tzO40nEXjZwgyRw,2917
|
|
1423
|
-
scitex/scholar/data/bib_files/related-papers-by-coauthors_enriched.bib,sha256=2ueaWK_0vl7seBYll5_t0BP-MjENYHDIedwod7jyZHI,12117
|
|
1424
|
-
scitex/scholar/data/bib_files/seizure_prediction.bib,sha256=SUbkEW6j10dRHNqPAtIUIKJUZIMuY6Q7eft-TJ0T0ec,27450
|
|
1425
|
-
scitex/scholar/data/bib_files/seizure_prediction_processed.bib,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1426
|
-
scitex/scholar/data/bib_files/test_complete_enriched.bib,sha256=Pmc3B9FkOXaFGdQZn3_G6kHDLGbTh5W-MLj6Rj-ejAo,60424
|
|
1427
|
-
scitex/scholar/data/bib_files/test_final_enriched.bib,sha256=Pmc3B9FkOXaFGdQZn3_G6kHDLGbTh5W-MLj6Rj-ejAo,60424
|
|
1428
|
-
scitex/scholar/data/bib_files/test_seizure.bib,sha256=vZcnnTVaDCPR1fpEBuYSv2RsrwmIbDx4ogIeObzJdis,1249
|
|
1429
|
-
scitex/scholar/data/impact_factor/JCR_IF_2022.xlsx,sha256=NJoAKC7RL3W_oBvv72j9mU5bZydEEAPDO8sza-R6JKE,929300
|
|
1430
|
-
scitex/scholar/data/impact_factor/JCR_IF_2024.db,sha256=hnpVDE8EY0OTXWtBy1NYietsglMxDcQTZs-IRsxHCjQ,2957312
|
|
1431
|
-
scitex/scholar/data/impact_factor/JCR_IF_2024.xlsx,sha256=2POoCl1Nf7WCG242KUjvU06J43RIoCpT4BEucCxIQBw,1756410
|
|
1432
|
-
scitex/scholar/data/impact_factor/JCR_IF_2024_v01.db,sha256=G5YuIOF0PJw0AeCxugL_cQvtFquH-MHoq1rXBrbnmSg,2875392
|
|
1433
1402
|
scitex/scholar/docs/00_SUMMARY.md,sha256=quFBhRq5WJ06u5Po5oSzR28A-WihrApquXZYeyqwoS8,4011
|
|
1434
1403
|
scitex/scholar/docs/01_STORAGE_ARCHITECTURE.md,sha256=sKQDAS3ejZVJ8W51GADV_BqfWnj8oI4dOpQ1XCiF4gc,3746
|
|
1435
1404
|
scitex/scholar/docs/02_PIPELINE_ORGANIZATION.md,sha256=8BS_j6S89TiLqDRiODACZsbEMs6EyOiLDj8CgILz4WU,8288
|
|
@@ -1584,6 +1553,12 @@ scitex/scholar/storage/_mixins/_symlink_handlers.py,sha256=m63ATAfDmAUDk4shsVf0a
|
|
|
1584
1553
|
scitex/scholar/url_finder/README.md,sha256=CGQpOktqpQF_5z_u-pIKMYBAeQZXT9Eh24XaPtfV6HM,2016
|
|
1585
1554
|
scitex/scholar/url_finder/ScholarURLFinder.py,sha256=C9lpYefs-9YoGcYYYBDB8GrGQyp27LmLTIv_WelDJgI,11840
|
|
1586
1555
|
scitex/scholar/url_finder/__init__.py,sha256=FV9ocQPE6520WUVVMV2u7hci_-2ha1KLJHzRUUlWGBw,93
|
|
1556
|
+
scitex/scholar/url_finder/.tmp/open_url/KNOWN_RESOLVERS.py,sha256=n37aHjOq6YrtgR0DGN0iznKy8EWCjzgBODVm7pINc-w,12926
|
|
1557
|
+
scitex/scholar/url_finder/.tmp/open_url/README.md,sha256=4CyiK7Zbdd23WjsYUU7J7FLPmhxwxA1PWc7enL9dGug,6836
|
|
1558
|
+
scitex/scholar/url_finder/.tmp/open_url/_DOIToURLResolver.py,sha256=C0cURB6BO78udjjsucqwM_rTxDy5XTaqyuxLBCNbyeU,23632
|
|
1559
|
+
scitex/scholar/url_finder/.tmp/open_url/_OpenURLResolver.py,sha256=yigbSuUZ2m6XmDFjhrIdn8Bva5ic7Y-DdwcMCUFlisA,43504
|
|
1560
|
+
scitex/scholar/url_finder/.tmp/open_url/_ResolverLinkFinder.py,sha256=s-2HZzAwBp7DxFtpqzEivLbvJ20J1pcBHSDXYmjmJ9A,11869
|
|
1561
|
+
scitex/scholar/url_finder/.tmp/open_url/__init__.py,sha256=d1umAnLQNFGYX7oui5Jl8JrjoDpwHkTmHwIiUbPbvBk,571
|
|
1587
1562
|
scitex/scholar/url_finder/docs/CORE_URL_TYPES.md,sha256=bRd2AfoypJiO4xgJBqpbC0GR6BhO4dEBo8D4fg7oDo0,6651
|
|
1588
1563
|
scitex/scholar/url_finder/docs/URL_SCHEMA.md,sha256=MDSUpqJzVwll9Mpspp2RhvYIv6bq_VCTktmTxk_DKk4,7696
|
|
1589
1564
|
scitex/scholar/url_finder/strategies/__init__.py,sha256=UIfUjfZbFhDZzfEHl3uCuIBUgMEdUMYaC9NbMEDG2Hs,1439
|
|
@@ -2576,8 +2551,8 @@ scitex/web/_summarize_url.py,sha256=PpWBk727pjC_yivI_RVNU_RMxjV_jrqlMNaD6kXQAPk,
|
|
|
2576
2551
|
scitex/web/download_images.py,sha256=g4sxWzg0ip5Wig7ElPo6fDz5DdXKyJnAsBFwIYoQI6g,9473
|
|
2577
2552
|
scitex/writer/README.md,sha256=RqUMOJD7wUiQjWoiLSf_hl_Y0IAE3_xPxhlp941zYe4,1299
|
|
2578
2553
|
scitex/writer/__init__.py,sha256=jQqdIyvQhknySoUAMKreBhAa1KwZ0ieW8SYCppBukts,3301
|
|
2579
|
-
scitex-2.16.
|
|
2580
|
-
scitex-2.16.
|
|
2581
|
-
scitex-2.16.
|
|
2582
|
-
scitex-2.16.
|
|
2583
|
-
scitex-2.16.
|
|
2554
|
+
scitex-2.16.2.dist-info/METADATA,sha256=a71IS-tqbzmEYZNYLWSqh1kkVSHPrD3pqBz_H9yA6kI,26534
|
|
2555
|
+
scitex-2.16.2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
2556
|
+
scitex-2.16.2.dist-info/entry_points.txt,sha256=ZtDrHnPNMnsSmAnQoCHNmk0xKotNyR2X_YFDDteupW8,497
|
|
2557
|
+
scitex-2.16.2.dist-info/licenses/LICENSE,sha256=TfPDBt3ar0uv_f9cqCDMZ5rIzW3CY8anRRd4PkL6ejs,34522
|
|
2558
|
+
scitex-2.16.2.dist-info/RECORD,,
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
# Timestamp: "2025-12-21 12:37:14 (ywatanabe)"
|
|
2
|
-
# File: ./src/scitex/dev/plt/data/mpl/PLOTTING_FUNCTIONS.yaml
|
|
3
|
-
|
|
4
|
-
basic:
|
|
5
|
-
- plot # Line/marker plots
|
|
6
|
-
- scatter # Scatter plots
|
|
7
|
-
- bar # Vertical bar charts
|
|
8
|
-
- barh # Horizontal bar charts
|
|
9
|
-
- stem # Stem plots
|
|
10
|
-
- step # Step plots
|
|
11
|
-
- fill # Filled polygons
|
|
12
|
-
- fill_between # Fill between y-values
|
|
13
|
-
- fill_betweenx # Fill between x-values
|
|
14
|
-
|
|
15
|
-
statistical:
|
|
16
|
-
- hist # Histogram
|
|
17
|
-
- hist2d # 2D histogram
|
|
18
|
-
- boxplot # Box and whisker plots
|
|
19
|
-
- bxp # Box plot from precomputed stats
|
|
20
|
-
- violinplot # Violin plots
|
|
21
|
-
- violin # Single violin
|
|
22
|
-
- errorbar # Error bar plots
|
|
23
|
-
- pie # Pie charts
|
|
24
|
-
- ecdf # Empirical cumulative distribution
|
|
25
|
-
|
|
26
|
-
image:
|
|
27
|
-
- imshow # Display image/array
|
|
28
|
-
- matshow # Display matrix
|
|
29
|
-
- pcolor # Pseudocolor plot
|
|
30
|
-
- pcolormesh # Pseudocolor mesh (faster)
|
|
31
|
-
- pcolorfast # Pseudocolor (fastest)
|
|
32
|
-
- contour # Contour lines
|
|
33
|
-
- contourf # Filled contours
|
|
34
|
-
- hexbin # Hexagonal binning
|
|
35
|
-
- spy # Sparsity pattern
|
|
36
|
-
|
|
37
|
-
vector:
|
|
38
|
-
- quiver # Arrow/vector field
|
|
39
|
-
- streamplot # Streamlines
|
|
40
|
-
- barbs # Wind barbs
|
|
41
|
-
|
|
42
|
-
spectral:
|
|
43
|
-
- specgram # Spectrogram
|
|
44
|
-
- psd # Power spectral density
|
|
45
|
-
- csd # Cross spectral density
|
|
46
|
-
- cohere # Coherence
|
|
47
|
-
- acorr # Autocorrelation
|
|
48
|
-
- xcorr # Cross-correlation
|
|
49
|
-
- angle_spectrum # Phase angle spectrum
|
|
50
|
-
- magnitude_spectrum # Magnitude spectrum
|
|
51
|
-
- phase_spectrum # Phase spectrum
|
|
52
|
-
|
|
53
|
-
triangulation:
|
|
54
|
-
- tricontour # Triangular contour lines
|
|
55
|
-
- tricontourf # Triangular filled contours
|
|
56
|
-
- tripcolor # Triangular pseudocolor
|
|
57
|
-
- triplot # Triangular grid lines
|
|
58
|
-
|
|
59
|
-
composite:
|
|
60
|
-
- stackplot # Stacked area plots
|
|
61
|
-
- stairs # Stair/step plots
|
|
62
|
-
- eventplot # Event sequence plots
|
|
63
|
-
- broken_barh # Broken horizontal bars
|
|
64
|
-
|
|
65
|
-
log_scale:
|
|
66
|
-
- loglog # Log-log scale plot
|
|
67
|
-
- semilogx # Semi-log x scale
|
|
68
|
-
- semilogy # Semi-log y scale
|
|
69
|
-
|
|
70
|
-
annotation:
|
|
71
|
-
- annotate # Text with arrow annotation
|
|
72
|
-
- text # Text at position
|
|
73
|
-
- arrow # Arrow patch
|
|
74
|
-
- axhline # Horizontal line across axes
|
|
75
|
-
- axvline # Vertical line across axes
|
|
76
|
-
- hlines # Horizontal lines at y positions
|
|
77
|
-
- vlines # Vertical lines at x positions
|
|
78
|
-
- axhspan # Horizontal span (shaded region)
|
|
79
|
-
- axvspan # Vertical span (shaded region)
|
|
80
|
-
- axline # Infinite line
|
|
81
|
-
|
|
82
|
-
decoration:
|
|
83
|
-
- legend # Add legend
|
|
84
|
-
- grid # Add grid
|
|
85
|
-
- table # Add table
|
|
86
|
-
- clabel # Contour labels
|
|
87
|
-
- bar_label # Bar chart labels
|
|
88
|
-
- quiverkey # Quiver key/legend
|
|
89
|
-
|
|
90
|
-
# EOF
|