scitex 2.13.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 +80 -2
- scitex/__version__.py +11 -8
- 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 +40 -0
- scitex/_mcp_tools/audio.py +200 -0
- scitex/_mcp_tools/canvas.py +128 -0
- scitex/_mcp_tools/capture.py +174 -0
- scitex/_mcp_tools/diagram.py +22 -0
- scitex/_mcp_tools/introspect.py +191 -0
- scitex/_mcp_tools/plt.py +305 -0
- scitex/_mcp_tools/scholar.py +447 -0
- scitex/_mcp_tools/social.py +244 -0
- scitex/_mcp_tools/stats.py +206 -0
- scitex/_mcp_tools/template.py +66 -0
- scitex/_mcp_tools/ui.py +80 -0
- scitex/_mcp_tools/writer.py +37 -0
- scitex/ai/_gen_ai/_PARAMS.py +10 -7
- scitex/ai/classification/reporters/_ClassificationReporter.py +0 -0
- 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/ai/classification/timeseries/_TimeSeriesBlockingSplit.py +0 -0
- scitex/ai/classification/timeseries/_TimeSeriesCalendarSplit.py +0 -0
- scitex/ai/classification/timeseries/_TimeSeriesSlidingWindowSplit.py +0 -0
- scitex/ai/classification/timeseries/_TimeSeriesSlidingWindowSplit_v01-not-using-n_splits.py +0 -0
- scitex/ai/classification/timeseries/_TimeSeriesStratifiedSplit.py +0 -0
- scitex/ai/classification/timeseries/_normalize_timestamp.py +0 -0
- scitex/ai/metrics/_calc_seizure_prediction_metrics.py +0 -0
- scitex/ai/plt/_plot_feature_importance.py +0 -0
- scitex/ai/plt/_plot_learning_curve.py +0 -0
- scitex/ai/plt/_plot_optuna_study.py +0 -0
- scitex/ai/plt/_plot_pre_rec_curve.py +0 -0
- scitex/ai/plt/_plot_roc_curve.py +0 -0
- scitex/ai/plt/_stx_conf_mat.py +0 -0
- scitex/ai/training/_LearningCurveLogger.py +0 -0
- scitex/audio/README.md +88 -7
- scitex/audio/__init__.py +127 -60
- scitex/audio/__main__.py +17 -21
- scitex/audio/_branding.py +185 -0
- scitex/audio/_mcp/__init__.py +36 -0
- scitex/audio/_mcp/handlers.py +419 -0
- scitex/audio/_mcp/speak_handlers.py +238 -0
- scitex/audio/_mcp/tool_schemas.py +203 -0
- scitex/audio/_relay.py +225 -0
- scitex/audio/engines/elevenlabs_engine.py +6 -1
- scitex/audio/mcp_server.py +355 -337
- scitex/bridge/_figrecipe.py +40 -8
- scitex/bridge/_stats_plt.py +2 -4
- scitex/bridge/_stats_vis.py +7 -5
- scitex/browser/automation/CookieHandler.py +0 -0
- scitex/browser/collaboration/__init__.py +0 -1
- scitex/browser/core/BrowserMixin.py +0 -0
- scitex/browser/core/ChromeProfileManager.py +10 -3
- scitex/browser/debugging/_browser_logger.py +6 -9
- scitex/browser/debugging/_highlight_element.py +0 -0
- scitex/browser/debugging/_show_grid.py +0 -0
- scitex/browser/interaction/click_center.py +0 -0
- scitex/browser/interaction/click_with_fallbacks.py +0 -0
- scitex/browser/interaction/close_popups.py +0 -0
- scitex/browser/interaction/fill_with_fallbacks.py +0 -0
- scitex/browser/pdf/click_download_for_chrome_pdf_viewer.py +0 -0
- scitex/browser/pdf/detect_chrome_pdf_viewer.py +0 -0
- scitex/browser/stealth/HumanBehavior.py +0 -0
- scitex/browser/stealth/StealthManager.py +0 -0
- scitex/canvas/README.md +1 -1
- scitex/canvas/_mcp/__init__.py +4 -0
- scitex/canvas/_mcp/handlers.py +372 -0
- scitex/canvas/_mcp/tool_schemas.py +219 -0
- 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/canvas/mcp_server.py +2 -2
- scitex/capture/__init__.py +0 -1
- scitex/capture/_mcp/__init__.py +11 -0
- scitex/capture/_mcp/handlers.py +438 -0
- scitex/capture/_mcp/tool_schemas.py +270 -0
- scitex/cli/__init__.py +44 -2
- scitex/cli/audio.py +150 -3
- scitex/cli/browser.py +310 -0
- scitex/cli/capture.py +14 -3
- scitex/cli/introspect.py +443 -0
- scitex/cli/main.py +230 -103
- scitex/cli/mcp.py +362 -0
- scitex/cli/repro.py +18 -0
- scitex/cli/resource.py +18 -0
- scitex/cli/scholar/__init__.py +97 -0
- scitex/cli/scholar/_crossref_scitex.py +296 -0
- scitex/cli/scholar/_fetch.py +369 -0
- scitex/cli/scholar/_jobs.py +306 -0
- scitex/cli/scholar/_library.py +152 -0
- scitex/cli/scholar/_utils.py +35 -0
- scitex/cli/social.py +314 -0
- scitex/cli/stats.py +18 -0
- scitex/cli/template.py +18 -0
- scitex/cli/tex.py +18 -0
- scitex/cli/writer.py +190 -20
- scitex/compat/__init__.py +74 -0
- scitex/config/README.md +1 -1
- scitex/config/__init__.py +16 -2
- scitex/config/_env_registry.py +191 -0
- scitex/config/default.yaml +31 -0
- scitex/cv/__init__.py +87 -0
- scitex/cv/_draw.py +236 -0
- scitex/cv/_filters.py +217 -0
- scitex/cv/_io.py +157 -0
- scitex/cv/_transform.py +184 -0
- scitex/dev/__init__.py +2 -0
- scitex/dev/cv/__init__.py +60 -0
- scitex/dev/cv/_compose.py +330 -0
- scitex/dev/cv/_title_card.py +351 -0
- scitex/dev/plt/__init__.py +0 -0
- scitex/dev/plt/demo_plotters/__init__.py +0 -0
- scitex/dev/plt/mpl/get_dir_ax.py +0 -0
- scitex/dev/plt/mpl/get_signatures.py +0 -0
- scitex/dev/plt/mpl/get_signatures_details.py +0 -0
- scitex/diagram/__init__.py +42 -19
- scitex/diagram/mcp_server.py +13 -125
- scitex/dt/_normalize_timestamp.py +0 -0
- scitex/gen/__init__.py +0 -0
- scitex/gen/misc.py +0 -0
- scitex/git/_init.py +2 -2
- scitex/git/_session.py +0 -0
- 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/io/bundle/kinds/__init__.py +0 -0
- scitex/io/bundle/kinds/_figure/__init__.py +0 -0
- scitex/io/bundle/kinds/_plot/__init__.py +0 -0
- scitex/io/bundle/kinds/_shape/__init__.py +0 -0
- scitex/io/bundle/kinds/_text/__init__.py +0 -0
- scitex/logging/_context.py +5 -4
- scitex/mcp_server.py +170 -145
- scitex/plt/__init__.py +249 -548
- scitex/plt/_figrecipe_integration.py +121 -0
- scitex/plt/_subplots/_AxisWrapperMixins/_SeabornMixin/_wrappers.py +5 -10
- scitex/plt/_subplots/_FigWrapper.py +139 -88
- scitex/plt/_subplots/_export_as_csv_formatters/_format_pcolormesh.py +0 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_stackplot.py +0 -0
- scitex/plt/docs/EXTERNAL_PACKAGE_BRANDING.md +149 -0
- scitex/plt/gallery/README.md +1 -1
- scitex/plt/styles/_plot_postprocess.py +35 -117
- scitex/plt/styles/_postprocess_helpers.py +158 -0
- 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/repro/_RandomStateManager.py +0 -0
- scitex/repro/_gen_ID.py +0 -0
- scitex/repro/_gen_timestamp.py +0 -0
- scitex/repro/_hash_array.py +0 -0
- scitex/schema/README.md +1 -1
- scitex/scholar/__init__.py +8 -0
- scitex/scholar/_mcp/__init__.py +4 -0
- scitex/scholar/_mcp/all_handlers.py +74 -0
- scitex/scholar/_mcp/crossref_handlers.py +265 -0
- scitex/scholar/_mcp/handlers.py +1478 -0
- scitex/scholar/_mcp/job_handlers.py +172 -0
- scitex/scholar/_mcp/job_tool_schemas.py +166 -0
- scitex/scholar/_mcp/tool_schemas.py +505 -0
- scitex/scholar/auth/core/BrowserAuthenticator.py +126 -9
- scitex/scholar/auth/providers/OpenAthensAuthenticator.py +55 -210
- scitex/scholar/auth/providers/_notifications.py +417 -0
- scitex/scholar/auth/sso/BaseSSOAutomator.py +36 -17
- scitex/scholar/auth/sso/UniversityOfMelbourneSSOAutomator.py +8 -15
- scitex/scholar/citation_graph/__init__.py +0 -1
- scitex/scholar/config/core/_PathManager.py +5 -1
- scitex/scholar/config/default.yaml +1 -1
- scitex/scholar/core/Paper.py +19 -41
- scitex/scholar/core/Scholar.py +64 -1688
- 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/core/journal_normalizer.py +36 -25
- 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/examples/07_storage_integration.py +0 -0
- scitex/scholar/impact_factor/estimation/__init__.py +0 -1
- scitex/scholar/impact_factor/jcr/ImpactFactorJCREngine.py +19 -6
- scitex/scholar/impact_factor/jcr/build_database.py +0 -0
- scitex/scholar/jobs/_Job.py +266 -0
- scitex/scholar/jobs/_JobManager.py +458 -0
- scitex/scholar/jobs/__init__.py +74 -0
- scitex/scholar/jobs/_errors.py +346 -0
- scitex/scholar/jobs/_executors.py +397 -0
- scitex/scholar/mcp_server.py +52 -2
- 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/chrome_pdf_viewer.py +11 -11
- scitex/scholar/pdf_download/strategies/manual_download_fallback.py +80 -3
- scitex/scholar/pipelines/ScholarPipelineBibTeX.py +73 -121
- scitex/scholar/pipelines/ScholarPipelineParallel.py +83 -140
- scitex/scholar/pipelines/ScholarPipelineSearchParallel.py +11 -13
- scitex/scholar/pipelines/ScholarPipelineSingle.py +83 -656
- scitex/scholar/pipelines/_single_steps.py +465 -0
- scitex/scholar/storage/BibTeXHandler.py +71 -23
- scitex/scholar/storage/PaperIO.py +53 -18
- scitex/scholar/storage/_BibTeXValidator.py +571 -0
- scitex/scholar/storage/_LibraryManager.py +97 -1695
- scitex/scholar/storage/__init__.py +17 -3
- 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/translators/individual/cell_press.py +131 -4
- scitex/security/README.md +3 -3
- scitex/security/__init__.py +0 -1
- scitex/session/README.md +1 -1
- scitex/session/__init__.py +0 -0
- scitex/session/_decorator.py +0 -0
- scitex/session/_lifecycle.py +0 -0
- scitex/sh/README.md +1 -1
- scitex/social/__init__.py +153 -0
- scitex/social/docs/EXTERNAL_PACKAGE_BRANDING.md +149 -0
- scitex/stats/__init__.py +14 -2
- scitex/stats/__main__.py +2 -2
- scitex/stats/_figrecipe_integration.py +116 -0
- scitex/stats/_mcp/__init__.py +4 -0
- scitex/stats/_mcp/handlers.py +1191 -0
- scitex/stats/_mcp/tool_schemas.py +384 -0
- scitex/stats/auto/__init__.py +0 -1
- scitex/stats/correct/_correct_bonferroni.py +0 -0
- scitex/stats/correct/_correct_fdr.py +0 -0
- scitex/stats/correct/_correct_fdr_.py +0 -0
- scitex/stats/correct/_correct_holm.py +0 -0
- scitex/stats/correct/_correct_sidak.py +0 -0
- scitex/stats/effect_sizes/_cliffs_delta.py +0 -0
- scitex/stats/effect_sizes/_cohens_d.py +0 -0
- scitex/stats/effect_sizes/_epsilon_squared.py +0 -0
- scitex/stats/effect_sizes/_eta_squared.py +0 -0
- scitex/stats/effect_sizes/_prob_superiority.py +0 -0
- scitex/stats/mcp_server.py +2 -2
- scitex/stats/posthoc/_dunnett.py +0 -0
- scitex/stats/posthoc/_games_howell.py +0 -0
- scitex/stats/posthoc/_tukey_hsd.py +0 -0
- scitex/stats/power/_power.py +0 -0
- scitex/stats/utils/_effect_size.py +0 -0
- scitex/stats/utils/_formatters.py +0 -0
- scitex/stats/utils/_power.py +0 -0
- scitex/template/README.md +1 -1
- scitex/template/_mcp/__init__.py +4 -0
- scitex/template/_mcp/handlers.py +259 -0
- scitex/template/_mcp/tool_schemas.py +112 -0
- scitex/template/clone_writer_directory.py +6 -6
- scitex/template/mcp_server.py +2 -2
- scitex/ui/__init__.py +173 -0
- scitex/ui/_backends/__init__.py +66 -0
- scitex/ui/_backends/_audio.py +86 -0
- scitex/ui/_backends/_config.py +250 -0
- scitex/ui/_backends/_desktop.py +184 -0
- scitex/ui/_backends/_emacs.py +210 -0
- scitex/ui/_backends/_email.py +78 -0
- scitex/ui/_backends/_matplotlib.py +118 -0
- scitex/ui/_backends/_playwright.py +109 -0
- scitex/ui/_backends/_types.py +58 -0
- scitex/ui/_backends/_webhook.py +77 -0
- scitex/ui/_backends.py +37 -0
- scitex/ui/_mcp/__init__.py +23 -0
- scitex/ui/_mcp/handlers.py +260 -0
- scitex/ui/_mcp/tool_schemas.py +107 -0
- scitex/ui/mcp_server.py +151 -0
- scitex/utils/_email.py +85 -7
- scitex/utils/_notify.py +16 -5
- scitex/utils/_search.py +11 -9
- scitex/utils/_verify_scitex_format.py +0 -0
- scitex/writer/README.md +1 -1
- scitex/writer/Writer.py +110 -111
- scitex/writer/__init__.py +26 -48
- scitex/writer/_clone_writer_project.py +0 -0
- scitex/writer/_compile/__init__.py +5 -4
- scitex/writer/_compile/_compile_async.py +130 -0
- scitex/writer/_compile/_compile_unified.py +148 -0
- scitex/writer/_compile/_runner.py +2 -2
- scitex/writer/_compile/_validator.py +3 -3
- scitex/writer/_compile/manuscript.py +1 -1
- scitex/writer/_compile/revision.py +1 -1
- scitex/writer/_compile/supplementary.py +1 -1
- scitex/writer/_dataclasses/config/_WriterConfig.py +175 -0
- scitex/writer/_dataclasses/contents/_ManuscriptContents.py +236 -0
- scitex/writer/_dataclasses/core/_Document.py +146 -0
- scitex/writer/_dataclasses/core/_DocumentSection.py +546 -0
- scitex/writer/_dataclasses/results/_CompilationResult.py +165 -0
- scitex/writer/_dataclasses/results/_LaTeXIssue.py +102 -0
- scitex/writer/_dataclasses/tree/MINIMUM_FILES.md +121 -0
- scitex/writer/_mcp/__init__.py +4 -0
- scitex/writer/_mcp/handlers.py +32 -0
- scitex/writer/_mcp/tool_schemas.py +33 -0
- scitex/writer/_project/_trees.py +2 -2
- scitex/writer/utils/__init__.py +19 -2
- scitex/writer/utils/_converters.py +635 -0
- scitex/writer/utils/_parse_latex_logs.py +1 -1
- scitex/writer/utils/_verify_tree_structure.py +205 -0
- scitex-2.15.1.dist-info/METADATA +648 -0
- scitex-2.15.1.dist-info/RECORD +2553 -0
- scitex-2.15.1.dist-info/entry_points.txt +12 -0
- scitex/audio/_mcp_handlers.py +0 -256
- scitex/audio/_mcp_tool_schemas.py +0 -203
- scitex/canvas/_mcp_handlers.py +0 -372
- scitex/canvas/_mcp_tool_schemas.py +0 -219
- scitex/canvas/editor/flask_editor/templates/_scripts.py +0 -4933
- scitex/canvas/editor/flask_editor/templates/_styles.py +0 -1658
- scitex/capture/mcp_handlers.py +0 -401
- scitex/capture/mcp_tool_defs.py +0 -192
- scitex/capture/mcp_tools.py +0 -241
- scitex/capture/mcp_utils.py +0 -30
- scitex/cli/scholar.py +0 -313
- scitex/diagram/_compile.py +0 -312
- scitex/diagram/_diagram.py +0 -355
- 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_handlers.py +0 -361
- scitex/plt/_mcp_tool_schemas.py +0 -169
- scitex/plt/mcp_server.py +0 -205
- scitex/scholar/.legacy/Scholar.py +0 -400
- scitex/scholar/.legacy/_Scholar.py +0 -1763
- scitex/scholar/.legacy/_ScholarAPI.py +0 -316
- scitex/scholar/.legacy/_tmp/search_engine/_BaseSearchEngine.py +0 -101
- scitex/scholar/.legacy/_tmp/search_engine/_UnifiedSearcher.py +0 -392
- scitex/scholar/.legacy/_tmp/search_engine/__init__.py +0 -53
- scitex/scholar/.legacy/_tmp/search_engine/local/_LocalSearchEngine.py +0 -134
- scitex/scholar/.legacy/_tmp/search_engine/local/_VectorSearchEngine.py +0 -129
- scitex/scholar/.legacy/_tmp/search_engine/web/_ArxivSearchEngine.py +0 -279
- scitex/scholar/.legacy/_tmp/search_engine/web/_CrossRefSearchEngine.py +0 -319
- scitex/scholar/.legacy/_tmp/search_engine/web/_GoogleScholarSearchEngine.py +0 -209
- scitex/scholar/.legacy/_tmp/search_engine/web/_PubMedSearchEngine.py +0 -374
- scitex/scholar/.legacy/_tmp/search_engine/web/_SemanticScholarSearchEngine.py +0 -362
- scitex/scholar/.legacy/database/README.md +0 -121
- scitex/scholar/.legacy/database/README_CONCURRENT_ACCESS.md +0 -103
- scitex/scholar/.legacy/database/_DatabaseEntry.py +0 -232
- scitex/scholar/.legacy/database/_DatabaseIndex.py +0 -426
- scitex/scholar/.legacy/database/_LibraryManager.py +0 -276
- scitex/scholar/.legacy/database/_PaperDatabase.py +0 -543
- scitex/scholar/.legacy/database/_ScholarDatabaseIntegration.py +0 -391
- scitex/scholar/.legacy/database/_StorageIntegratedDB.py +0 -619
- scitex/scholar/.legacy/database/_ZoteroCompatibleDB.py +0 -1194
- scitex/scholar/.legacy/database/__init__.py +0 -28
- scitex/scholar/.legacy/database/manage.py +0 -274
- scitex/scholar/.legacy/lookup/_LookupIndex.py +0 -470
- scitex/scholar/.legacy/lookup/__init__.py +0 -22
- scitex/scholar/.legacy/metadata/README.md +0 -62
- scitex/scholar/.legacy/metadata/__init__.py +0 -1
- scitex/scholar/.legacy/metadata/doi/README.md +0 -368
- scitex/scholar/.legacy/metadata/doi/__init__.py +0 -7
- scitex/scholar/.legacy/metadata/doi/batch/_MetadataHandlerForBatchDOIResolution.py +0 -304
- scitex/scholar/.legacy/metadata/doi/batch/_ProgressManagerForBatchDOIResolution.py +0 -304
- scitex/scholar/.legacy/metadata/doi/batch/_SourceStatsManagerForBatchDOIResolution.py +0 -299
- scitex/scholar/.legacy/metadata/doi/batch/__init__.py +0 -26
- scitex/scholar/.legacy/metadata/doi/resolvers/_BatchDOIResolver.py +0 -586
- scitex/scholar/.legacy/metadata/doi/resolvers/_BibTeXDOIResolver.py +0 -609
- scitex/scholar/.legacy/metadata/doi/resolvers/_DOIResolver.py +0 -192
- scitex/scholar/.legacy/metadata/doi/resolvers/_SingleDOIResolver.py +0 -395
- scitex/scholar/.legacy/metadata/doi/resolvers/__init__.py +0 -2
- scitex/scholar/.legacy/metadata/doi/sources/.combined-SemanticScholarSource/_SemanticScholarSource.py +0 -289
- scitex/scholar/.legacy/metadata/doi/sources/.combined-SemanticScholarSource/_SemanticScholarSourceEnhanced.py +0 -229
- scitex/scholar/.legacy/metadata/doi/sources/_ArXivSource.py +0 -306
- scitex/scholar/.legacy/metadata/doi/sources/_BaseDOISource.py +0 -347
- scitex/scholar/.legacy/metadata/doi/sources/_CrossRefLocalSource.py +0 -79
- scitex/scholar/.legacy/metadata/doi/sources/_CrossRefSource.py +0 -225
- scitex/scholar/.legacy/metadata/doi/sources/_OpenAlexSource.py +0 -306
- scitex/scholar/.legacy/metadata/doi/sources/_PubMedSource.py +0 -302
- scitex/scholar/.legacy/metadata/doi/sources/_SemanticScholarSource.py +0 -341
- scitex/scholar/.legacy/metadata/doi/sources/_SourceManager.py +0 -317
- scitex/scholar/.legacy/metadata/doi/sources/_SourceResolutionStrategy.py +0 -595
- scitex/scholar/.legacy/metadata/doi/sources/_SourceRotationManager.py +0 -585
- scitex/scholar/.legacy/metadata/doi/sources/_URLDOISource.py +0 -394
- scitex/scholar/.legacy/metadata/doi/sources/_UnifiedSource.py +0 -412
- scitex/scholar/.legacy/metadata/doi/sources/__init__.py +0 -38
- scitex/scholar/.legacy/metadata/doi/utils/_PubMedConverter.py +0 -465
- scitex/scholar/.legacy/metadata/doi/utils/_RateLimitHandler.py +0 -707
- scitex/scholar/.legacy/metadata/doi/utils/_TextNormalizer.py +0 -587
- scitex/scholar/.legacy/metadata/doi/utils/_URLDOIExtractor.py +0 -278
- scitex/scholar/.legacy/metadata/doi/utils/__init__.py +0 -40
- scitex/scholar/.legacy/metadata/doi/utils/_to_complete_metadata_structure.py +0 -315
- scitex/scholar/.legacy/metadata/enrichment/README.md +0 -51
- scitex/scholar/.legacy/metadata/enrichment/_LibraryEnricher.py +0 -99
- scitex/scholar/.legacy/metadata/enrichment/__init__.py +0 -2
- scitex/scholar/.legacy/metadata/enrichment/enrichers/_ImpactFactorEnricher.py +0 -107
- scitex/scholar/.legacy/metadata/enrichment/enrichers/_SmartEnricher.py +0 -164
- scitex/scholar/.legacy/metadata/enrichment/enrichers/__init__.py +0 -4
- scitex/scholar/.legacy/metadata/enrichment/sources/_UnifiedMetadataSource.py +0 -126
- scitex/scholar/.legacy/metadata/enrichment/sources/__init__.py +0 -3
- scitex/scholar/.legacy/metadata/query_to_full_meta_json.py +0 -184
- scitex/scholar/.legacy/metadata/urls/.tmp/open_url/KNOWN_RESOLVERS.py +0 -462
- scitex/scholar/.legacy/metadata/urls/.tmp/open_url/README.md +0 -223
- scitex/scholar/.legacy/metadata/urls/.tmp/open_url/_DOIToURLResolver.py +0 -694
- scitex/scholar/.legacy/metadata/urls/.tmp/open_url/_OpenURLResolver.py +0 -1160
- scitex/scholar/.legacy/metadata/urls/.tmp/open_url/_ResolverLinkFinder.py +0 -344
- scitex/scholar/.legacy/metadata/urls/.tmp/open_url/__init__.py +0 -24
- scitex/scholar/.legacy/metadata/urls/README.md +0 -142
- scitex/scholar/.legacy/metadata/urls/_URLMetadataHandler.py +0 -383
- scitex/scholar/.legacy/metadata/urls/_ZoteroTranslatorRunner.py +0 -294
- scitex/scholar/.legacy/metadata/urls/__init__.py +0 -39
- scitex/scholar/.legacy/metadata/urls/_finder.py +0 -319
- scitex/scholar/.legacy/metadata/urls/_handler.py +0 -326
- scitex/scholar/.legacy/metadata/urls/_resolver.py +0 -287
- scitex/scholar/.legacy/metadata/urls/docs/CORE_URL_TYPES.md +0 -187
- scitex/scholar/.legacy/metadata/urls/docs/URL_SCHEMA.md +0 -223
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/.eslintrc +0 -11
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/AGPL +0 -22
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/checkDeletedTxt.sh +0 -46
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/eslint-plugin-zotero-translator/bin/teslint.js +0 -9
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/eslint-plugin-zotero-translator/index.js +0 -15
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/eslint-plugin-zotero-translator/package-lock.json +0 -151
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/eslint-plugin-zotero-translator/package.json +0 -21
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/eslint-plugin-zotero-translator/processor.js +0 -257
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/helper.sh +0 -29
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/lint.sh +0 -12
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/pull-request-check/check-pull-request.sh +0 -39
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/pull-request-check/selenium-test.js +0 -147
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/pull-request-check/translator-server.js +0 -72
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/updateTypes.mjs +0 -75
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.editorconfig +0 -8
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.eslintrc +0 -70
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ABC News Australia.js +0 -224
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ACLS Humanities EBook.js +0 -165
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ACLWeb.js +0 -600
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ACM Digital Library.js +0 -710
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ACS Publications.js +0 -633
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ADS Bibcode.js +0 -664
- scitex/scholar/.legacy/metadata/urls/zotero_translators/AEA Web.js +0 -450
- scitex/scholar/.legacy/metadata/urls/zotero_translators/AGRIS.js +0 -311
- scitex/scholar/.legacy/metadata/urls/zotero_translators/AIP.js +0 -295
- scitex/scholar/.legacy/metadata/urls/zotero_translators/AMS Journals.js +0 -136
- scitex/scholar/.legacy/metadata/urls/zotero_translators/AMS MathSciNet (Legacy).js +0 -313
- scitex/scholar/.legacy/metadata/urls/zotero_translators/AMS MathSciNet.js +0 -288
- scitex/scholar/.legacy/metadata/urls/zotero_translators/APA PsycNET.js +0 -915
- scitex/scholar/.legacy/metadata/urls/zotero_translators/APN.ru.js +0 -132
- scitex/scholar/.legacy/metadata/urls/zotero_translators/APS-Physics.js +0 -204
- scitex/scholar/.legacy/metadata/urls/zotero_translators/APS.js +0 -542
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ARTFL Encyclopedie.js +0 -283
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ARTnews.js +0 -155
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ARTstor.js +0 -619
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ASCE.js +0 -199
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ASCO Meeting Library.js +0 -153
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ASTIS.js +0 -337
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ATS International Journal.js +0 -290
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Access Engineering.js +0 -384
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Access Medicine.js +0 -343
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Access Science.js +0 -391
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Adam Matthew Digital.js +0 -405
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Agencia del ISBN.js +0 -77
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Ahval News.js +0 -309
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Air University Journals.js +0 -236
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Airiti.js +0 -423
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Alexander Street Press.js +0 -198
- scitex/scholar/.legacy/metadata/urls/zotero_translators/AllAfrica.js +0 -291
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Alsharekh.js +0 -242
- scitex/scholar/.legacy/metadata/urls/zotero_translators/AlterNet.js +0 -134
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Aluka.js +0 -261
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Amazon.js +0 -1043
- scitex/scholar/.legacy/metadata/urls/zotero_translators/American Archive of Public Broadcasting.js +0 -592
- scitex/scholar/.legacy/metadata/urls/zotero_translators/American Institute of Aeronautics and Astronautics.js +0 -210
- scitex/scholar/.legacy/metadata/urls/zotero_translators/American Prospect.js +0 -114
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Ancestry.com US Federal Census.js +0 -164
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Annual Reviews.js +0 -329
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Antikvarium.hu.js +0 -280
- scitex/scholar/.legacy/metadata/urls/zotero_translators/AquaDocs.js +0 -390
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Archeion.js +0 -249
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Archiv fuer Sozialgeschichte.js +0 -157
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Archive Ouverte en Sciences de l'Information et de la Communication (AOSIC).js +0 -179
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Archives Canada.js +0 -142
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Ariana News.js +0 -203
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Art Institute of Chicago.js +0 -279
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Artefacts Canada.js +0 -192
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Artforum.js +0 -438
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Atlanta Journal-Constitution.js +0 -311
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Atypon Journals.js +0 -1204
- scitex/scholar/.legacy/metadata/urls/zotero_translators/AustLII and NZLII.js +0 -604
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Australian Dictionary of Biography.js +0 -196
- scitex/scholar/.legacy/metadata/urls/zotero_translators/BAILII.js +0 -176
- scitex/scholar/.legacy/metadata/urls/zotero_translators/BBC Genome.js +0 -254
- scitex/scholar/.legacy/metadata/urls/zotero_translators/BBC.js +0 -430
- scitex/scholar/.legacy/metadata/urls/zotero_translators/BIBSYS.js +0 -112
- scitex/scholar/.legacy/metadata/urls/zotero_translators/BOCC.js +0 -217
- scitex/scholar/.legacy/metadata/urls/zotero_translators/BOE.js +0 -229
- scitex/scholar/.legacy/metadata/urls/zotero_translators/BOFiP-Impots.js +0 -132
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Baidu Scholar.js +0 -276
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bangkok Post.js +0 -216
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Baruch Foundation.js +0 -175
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Beobachter.js +0 -175
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bezneng Gajit.js +0 -92
- scitex/scholar/.legacy/metadata/urls/zotero_translators/BibLaTeX.js +0 -888
- scitex/scholar/.legacy/metadata/urls/zotero_translators/BibTeX.js +0 -4236
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Biblio.com.js +0 -216
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bibliontology RDF.js +0 -1166
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Biblioteca Nacional de Maestros.js +0 -213
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bibliotheque et Archives Nationale du Quebec (Pistard).js +0 -147
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bibliotheque et Archives Nationales du Quebec.js +0 -266
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bibliotheque nationale de France.js +0 -872
- scitex/scholar/.legacy/metadata/urls/zotero_translators/BioMed Central.js +0 -585
- scitex/scholar/.legacy/metadata/urls/zotero_translators/BioOne.js +0 -233
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bioconductor.js +0 -343
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Blaetter.js +0 -192
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Blogger.js +0 -244
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bloomberg.js +0 -205
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bloomsbury Food Library.js +0 -296
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bluesky.js +0 -195
- scitex/scholar/.legacy/metadata/urls/zotero_translators/BnF ISBN.js +0 -129
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bookmarks.js +0 -282
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bookshop.org.js +0 -223
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Boston Review.js +0 -332
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bosworth Toller's Anglo-Saxon Dictionary Online.js +0 -496
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bracero History Archive.js +0 -200
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Brill.js +0 -434
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Brukerhandboken.js +0 -153
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bryn Mawr Classical Review.js +0 -303
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bundesgesetzblatt.js +0 -231
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Business Standard.js +0 -151
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CABI - CAB Abstracts.js +0 -317
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CAOD.js +0 -260
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CBC.js +0 -439
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CCfr (BnF).js +0 -162
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CERN Document Server.js +0 -277
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CEUR Workshop Proceedings.js +0 -145
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CFF References.js +0 -170
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CFF.js +0 -113
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CIA World Factbook.js +0 -128
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CLACSO.js +0 -226
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CLASE.js +0 -135
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CNKI.js +0 -731
- scitex/scholar/.legacy/metadata/urls/zotero_translators/COBISS.js +0 -1945
- scitex/scholar/.legacy/metadata/urls/zotero_translators/COinS.js +0 -336
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CQ Press.js +0 -418
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CROSBI.js +0 -227
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CSIRO Publishing.js +0 -139
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CSL JSON.js +0 -203
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CSV.js +0 -294
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Cairn.info.js +0 -368
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CalMatters.js +0 -228
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Calisphere.js +0 -355
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Camara Brasileira do Livro ISBN.js +0 -842
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Cambridge Core.js +0 -580
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Cambridge Engage Preprints.js +0 -276
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CanLII.js +0 -284
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Canada.com.js +0 -171
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Canadian Letters and Images.js +0 -148
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Canadiana.ca.js +0 -196
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Cascadilla Proceedings Project.js +0 -390
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Cell Press.js +0 -516
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Central and Eastern European Online Library Journals.js +0 -313
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Champlain Society - Collection.js +0 -220
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Chicago Journal of Theoretical Computer Science.js +0 -203
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Christian Science Monitor.js +0 -148
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Chronicling America.js +0 -131
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CiNii Research.js +0 -168
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Citavi 5 XML.js +0 -516
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CiteSeer.js +0 -196
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Citizen Lab.js +0 -347
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Civilization.ca.js +0 -146
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Climate Change and Human Health Literature Portal.js +0 -283
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Clinical Key.js +0 -367
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Code4Lib Journal.js +0 -143
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Colorado State Legislature.js +0 -215
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Columbia University Press.js +0 -238
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Common-Place.js +0 -218
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Computer History Museum Archive.js +0 -1319
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Copernicus.js +0 -461
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Cornell LII.js +0 -252
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Cornell University Press.js +0 -235
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CourtListener.js +0 -265
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Crossref REST.js +0 -1757
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Crossref Unixref XML.js +0 -965
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Current Affairs.js +0 -160
- scitex/scholar/.legacy/metadata/urls/zotero_translators/DABI.js +0 -476
- scitex/scholar/.legacy/metadata/urls/zotero_translators/DAI-Zenon.js +0 -392
- scitex/scholar/.legacy/metadata/urls/zotero_translators/DART-Europe.js +0 -176
- scitex/scholar/.legacy/metadata/urls/zotero_translators/DBLP Computer Science Bibliography.js +0 -462
- scitex/scholar/.legacy/metadata/urls/zotero_translators/DBpia.js +0 -233
- scitex/scholar/.legacy/metadata/urls/zotero_translators/DEPATISnet.js +0 -373
- scitex/scholar/.legacy/metadata/urls/zotero_translators/DOAJ.js +0 -242
- scitex/scholar/.legacy/metadata/urls/zotero_translators/DOI Content Negotiation.js +0 -352
- scitex/scholar/.legacy/metadata/urls/zotero_translators/DOI.js +0 -322
- scitex/scholar/.legacy/metadata/urls/zotero_translators/DPLA.js +0 -425
- scitex/scholar/.legacy/metadata/urls/zotero_translators/DSpace Intermediate Metadata.js +0 -208
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Dagens Nyheter.js +0 -369
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Dagstuhl Research Online Publication Server.js +0 -278
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Dar Almandumah.js +0 -253
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Data.gov.js +0 -225
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Databrary.js +0 -184
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Datacite JSON.js +0 -1182
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Dataverse.js +0 -418
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Daum News.js +0 -139
- scitex/scholar/.legacy/metadata/urls/zotero_translators/De Gruyter Brill.js +0 -674
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Defense Technical Information Center.js +0 -146
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Delpher.js +0 -413
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Demographic Research.js +0 -164
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Denik CZ.js +0 -273
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Der Freitag.js +0 -236
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Der Spiegel.js +0 -479
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Desiring God.js +0 -216
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Deutsche Fotothek.js +0 -364
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Deutsche Nationalbibliothek.js +0 -594
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Dialnet.js +0 -258
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Die Zeit.js +0 -378
- scitex/scholar/.legacy/metadata/urls/zotero_translators/DigiZeitschriften.js +0 -269
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Digital Humanities Quarterly.js +0 -207
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Digital Spy.js +0 -215
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Dimensions.js +0 -233
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Douban.js +0 -316
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Dreier Neuerscheinungsdienst.js +0 -209
- scitex/scholar/.legacy/metadata/urls/zotero_translators/DrugBank.ca.js +0 -209
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Dryad Digital Repository.js +0 -323
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Duke University Press Books.js +0 -250
- scitex/scholar/.legacy/metadata/urls/zotero_translators/E-periodica Switzerland.js +0 -347
- scitex/scholar/.legacy/metadata/urls/zotero_translators/EBSCO Discovery Layer.js +0 -147
- scitex/scholar/.legacy/metadata/urls/zotero_translators/EBSCOhost.js +0 -592
- scitex/scholar/.legacy/metadata/urls/zotero_translators/EIDR.js +0 -184
- scitex/scholar/.legacy/metadata/urls/zotero_translators/EPA National Library Catalog.js +0 -245
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ERIC.js +0 -986
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ESpacenet.js +0 -465
- scitex/scholar/.legacy/metadata/urls/zotero_translators/EUR-Lex.js +0 -423
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Eastview.js +0 -336
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Edinburgh University Press Journals.js +0 -178
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Education Week.js +0 -197
- scitex/scholar/.legacy/metadata/urls/zotero_translators/El Comercio (Peru).js +0 -347
- scitex/scholar/.legacy/metadata/urls/zotero_translators/El Pais.js +0 -262
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Electronic Colloquium on Computational Complexity.js +0 -230
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Elicit.js +0 -120
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Elsevier Health Journals.js +0 -531
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Elsevier Pure.js +0 -420
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Embedded Metadata.js +0 -1951
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Emerald Insight.js +0 -626
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Encyclopedia of Chicago.js +0 -162
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Encyclopedia of Korean Culture.js +0 -221
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Endnote XML.js +0 -1407
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Engineering Village.js +0 -139
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Envidat.js +0 -331
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Epicurious.js +0 -144
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Erudit.js +0 -272
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Euclid.js +0 -220
- scitex/scholar/.legacy/metadata/urls/zotero_translators/EurasiaNet.js +0 -109
- scitex/scholar/.legacy/metadata/urls/zotero_translators/EurogamerUSgamer.js +0 -380
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Europe PMC.js +0 -448
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Evernote.js +0 -104
- scitex/scholar/.legacy/metadata/urls/zotero_translators/F1000 Research.js +0 -655
- scitex/scholar/.legacy/metadata/urls/zotero_translators/FAO Publications.js +0 -1139
- scitex/scholar/.legacy/metadata/urls/zotero_translators/FAZ.NET.js +0 -231
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Fachportal Padagogik.js +0 -839
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Factiva.js +0 -302
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Failed Architecture.js +0 -114
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Fairfax Australia.js +0 -200
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Fatcat.js +0 -425
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Figshare.js +0 -191
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Financial Times.js +0 -187
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Finna.js +0 -357
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Flickr.js +0 -318
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Foreign Affairs.js +0 -485
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Foreign Policy.js +0 -146
- scitex/scholar/.legacy/metadata/urls/zotero_translators/FreeCite.js +0 -95
- scitex/scholar/.legacy/metadata/urls/zotero_translators/FreePatentsOnline.js +0 -265
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Frieze.js +0 -243
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Frontiers.js +0 -667
- scitex/scholar/.legacy/metadata/urls/zotero_translators/GMS German Medical Science.js +0 -319
- scitex/scholar/.legacy/metadata/urls/zotero_translators/GPO Access e-CFR.js +0 -134
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Gale Databases.js +0 -324
- scitex/scholar/.legacy/metadata/urls/zotero_translators/GaleGDC.js +0 -189
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Galegroup.js +0 -327
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Gallica.js +0 -194
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Game Studies.js +0 -155
- scitex/scholar/.legacy/metadata/urls/zotero_translators/GameSpot.js +0 -199
- scitex/scholar/.legacy/metadata/urls/zotero_translators/GameStar GamePro.js +0 -198
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Gasyrlar Awazy.js +0 -156
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Gemeinsamer Bibliotheksverbund ISBN.js +0 -23
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Gene Ontology.js +0 -128
- scitex/scholar/.legacy/metadata/urls/zotero_translators/GitHub.js +0 -501
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Globes.js +0 -243
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Gmail.js +0 -64
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Goodreads.js +0 -219
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Google Books.js +0 -552
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Google Patents.js +0 -959
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Google Play.js +0 -186
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Google Presentation.js +0 -104
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Google Research.js +0 -221
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Google Scholar.js +0 -1361
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Gulag Many Days, Many Lives.js +0 -179
- scitex/scholar/.legacy/metadata/urls/zotero_translators/HAL Archives Ouvertes.js +0 -429
- scitex/scholar/.legacy/metadata/urls/zotero_translators/HCSP.js +0 -312
- scitex/scholar/.legacy/metadata/urls/zotero_translators/HUDOC.js +0 -650
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Haaretz.js +0 -562
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Habr.js +0 -232
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Handelszeitung.js +0 -273
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Hanrei Watch.js +0 -123
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Harper's Magazine.js +0 -365
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Harvard Business Review.js +0 -326
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Harvard Caselaw Access Project.js +0 -244
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Harvard University Press Books.js +0 -286
- scitex/scholar/.legacy/metadata/urls/zotero_translators/HathiTrust.js +0 -311
- scitex/scholar/.legacy/metadata/urls/zotero_translators/HeinOnline.js +0 -266
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Heise.js +0 -200
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Herder.js +0 -236
- scitex/scholar/.legacy/metadata/urls/zotero_translators/HighBeam.js +0 -198
- scitex/scholar/.legacy/metadata/urls/zotero_translators/HighWire 2.0.js +0 -1355
- scitex/scholar/.legacy/metadata/urls/zotero_translators/HighWire.js +0 -209
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Hindawi Publishers.js +0 -177
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Hispanic-American Periodical Index.js +0 -236
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Homeland Security Digital Library.js +0 -426
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Huff Post.js +0 -223
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Human Rights Watch.js +0 -450
- scitex/scholar/.legacy/metadata/urls/zotero_translators/IBISWorld.js +0 -171
- scitex/scholar/.legacy/metadata/urls/zotero_translators/IDEA ALM.js +0 -536
- scitex/scholar/.legacy/metadata/urls/zotero_translators/IEEE Computer Society.js +0 -429
- scitex/scholar/.legacy/metadata/urls/zotero_translators/IEEE Xplore.js +0 -1000
- scitex/scholar/.legacy/metadata/urls/zotero_translators/IETF.js +0 -451
- scitex/scholar/.legacy/metadata/urls/zotero_translators/IGN.js +0 -136
- scitex/scholar/.legacy/metadata/urls/zotero_translators/IMDb.js +0 -566
- scitex/scholar/.legacy/metadata/urls/zotero_translators/INSPIRE.js +0 -247
- scitex/scholar/.legacy/metadata/urls/zotero_translators/IPCC.js +0 -757
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ISTC.js +0 -181
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Idref.js +0 -179
- scitex/scholar/.legacy/metadata/urls/zotero_translators/In These Times.js +0 -196
- scitex/scholar/.legacy/metadata/urls/zotero_translators/InfoTrac.js +0 -279
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Informationssystem Medienpaedagogik.js +0 -305
- scitex/scholar/.legacy/metadata/urls/zotero_translators/IngentaConnect.js +0 -312
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Inside Higher Ed.js +0 -167
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Insignia OPAC.js +0 -114
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Institute of Contemporary Art.js +0 -180
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Institute of Physics.js +0 -340
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Integrum.js +0 -173
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Intellixir.js +0 -264
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Inter-Research Science Center.js +0 -185
- scitex/scholar/.legacy/metadata/urls/zotero_translators/International Nuclear Information System.js +0 -285
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Internet Archive Scholar.js +0 -106
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Internet Archive Wayback Machine.js +0 -152
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Internet Archive.js +0 -552
- scitex/scholar/.legacy/metadata/urls/zotero_translators/InvenioRDM.js +0 -1260
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Isidore.js +0 -235
- scitex/scholar/.legacy/metadata/urls/zotero_translators/J-Stage.js +0 -272
- scitex/scholar/.legacy/metadata/urls/zotero_translators/JETS.js +0 -122
- scitex/scholar/.legacy/metadata/urls/zotero_translators/JISC Historical Texts.js +0 -273
- scitex/scholar/.legacy/metadata/urls/zotero_translators/JRC Publications Repository.js +0 -569
- scitex/scholar/.legacy/metadata/urls/zotero_translators/JSTOR.js +0 -821
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Jahrbuch.js +0 -213
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Japan Times Online.js +0 -138
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Journal of Electronic Publishing.js +0 -147
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Journal of Extension.js +0 -288
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Journal of Machine Learning Research.js +0 -441
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Journal of Religion and Society.js +0 -174
- scitex/scholar/.legacy/metadata/urls/zotero_translators/JurPC.js +0 -274
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Juricaf.js +0 -141
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Juris.js +0 -728
- scitex/scholar/.legacy/metadata/urls/zotero_translators/K10plus ISBN.js +0 -386
- scitex/scholar/.legacy/metadata/urls/zotero_translators/KStudy.js +0 -632
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Kanopy.js +0 -358
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Khaama Press.js +0 -249
- scitex/scholar/.legacy/metadata/urls/zotero_translators/KitapYurdu.com.js +0 -376
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Kommersant.js +0 -174
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Korean National Library.js +0 -621
- scitex/scholar/.legacy/metadata/urls/zotero_translators/L'Annee Philologique.js +0 -267
- scitex/scholar/.legacy/metadata/urls/zotero_translators/LA Times.js +0 -239
- scitex/scholar/.legacy/metadata/urls/zotero_translators/LIBRIS ISBN.js +0 -103
- scitex/scholar/.legacy/metadata/urls/zotero_translators/LIVIVO.js +0 -260
- scitex/scholar/.legacy/metadata/urls/zotero_translators/LWN.net.js +0 -315
- scitex/scholar/.legacy/metadata/urls/zotero_translators/La Croix.js +0 -237
- scitex/scholar/.legacy/metadata/urls/zotero_translators/La Nacion (Argentina).js +0 -231
- scitex/scholar/.legacy/metadata/urls/zotero_translators/La Presse.js +0 -218
- scitex/scholar/.legacy/metadata/urls/zotero_translators/La Republica (Peru).js +0 -174
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Lagen.nu.js +0 -214
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Landesbibliographie Baden-Wurttemberg.js +0 -324
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Lapham's Quarterly.js +0 -1062
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Le Devoir.js +0 -167
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Le Figaro.js +0 -225
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Le Maitron.js +0 -484
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Le Monde.js +0 -258
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Le monde diplomatique.js +0 -200
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Legifrance.js +0 -641
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Legislative Insight.js +0 -406
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Lexis+.js +0 -264
- scitex/scholar/.legacy/metadata/urls/zotero_translators/LexisNexis.js +0 -505
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Libraries Tasmania.js +0 -778
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Aleph).js +0 -385
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Amicus).js +0 -254
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Aquabrowser).js +0 -253
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (BiblioCommons).js +0 -249
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Blacklight).js +0 -341
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Capita Prism).js +0 -162
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (DRA).js +0 -203
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Dynix).js +0 -315
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Encore).js +0 -211
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (InnoPAC).js +0 -305
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Koha).js +0 -225
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Mango).js +0 -285
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (OPALS).js +0 -200
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (PICA).js +0 -2120
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (PICA2).js +0 -331
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Pika).js +0 -488
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Polaris).js +0 -183
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Quolto).js +0 -320
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (RERO ILS).js +0 -754
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (SIRSI eLibrary).js +0 -407
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (SIRSI).js +0 -452
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (SLIMS).js +0 -146
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (TIND ILS).js +0 -773
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (TLCYouSeeMore).js +0 -132
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (TinREAD).js +0 -277
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (VTLS).js +0 -125
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Visual Library 2021).js +0 -765
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Voyager 7).js +0 -199
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Voyager).js +0 -212
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Genesis.js +0 -337
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Hub Discover.js +0 -359
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library of Congress Digital Collections.js +0 -869
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library of Congress ISBN.js +0 -86
- scitex/scholar/.legacy/metadata/urls/zotero_translators/LingBuzz.js +0 -359
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Lippincott Williams and Wilkins.js +0 -341
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Literary Hub.js +0 -950
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Litres.js +0 -236
- scitex/scholar/.legacy/metadata/urls/zotero_translators/LiveJournal.js +0 -219
- scitex/scholar/.legacy/metadata/urls/zotero_translators/London Review of Books.js +0 -291
- scitex/scholar/.legacy/metadata/urls/zotero_translators/LookUs.js +0 -260
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Lulu.js +0 -264
- scitex/scholar/.legacy/metadata/urls/zotero_translators/MAB2.js +0 -373
- scitex/scholar/.legacy/metadata/urls/zotero_translators/MARC.js +0 -1080
- scitex/scholar/.legacy/metadata/urls/zotero_translators/MARCXML.js +0 -489
- scitex/scholar/.legacy/metadata/urls/zotero_translators/MCV.js +0 -258
- scitex/scholar/.legacy/metadata/urls/zotero_translators/MDPI Journals.js +0 -356
- scitex/scholar/.legacy/metadata/urls/zotero_translators/MEDLINEnbib.js +0 -1561
- scitex/scholar/.legacy/metadata/urls/zotero_translators/METS.js +0 -384
- scitex/scholar/.legacy/metadata/urls/zotero_translators/MIDAS Journals.js +0 -343
- scitex/scholar/.legacy/metadata/urls/zotero_translators/MIT Press Books.js +0 -637
- scitex/scholar/.legacy/metadata/urls/zotero_translators/MODS.js +0 -2545
- scitex/scholar/.legacy/metadata/urls/zotero_translators/MPG PuRe.js +0 -541
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Mailman.js +0 -136
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Mainichi Daily News.js +0 -189
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Mastodon.js +0 -198
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Matbugat.ru.js +0 -110
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Max Planck Institute for the History of Science Virtual Laboratory Library.js +0 -136
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Medium.js +0 -208
- scitex/scholar/.legacy/metadata/urls/zotero_translators/MetaLib.js +0 -126
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Microbiology Society Journals.js +0 -343
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Microsoft Academic.js +0 -424
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Mikromarc.js +0 -207
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Milli Kutuphane.js +0 -244
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Musee du Louvre.js +0 -265
- scitex/scholar/.legacy/metadata/urls/zotero_translators/NASA ADS.js +0 -889
- scitex/scholar/.legacy/metadata/urls/zotero_translators/NASA NTRS.js +0 -610
- scitex/scholar/.legacy/metadata/urls/zotero_translators/NCBI Nucleotide.js +0 -227
- scitex/scholar/.legacy/metadata/urls/zotero_translators/NPR.js +0 -341
- scitex/scholar/.legacy/metadata/urls/zotero_translators/NRC Research Press.js +0 -181
- scitex/scholar/.legacy/metadata/urls/zotero_translators/NRC.nl.js +0 -226
- scitex/scholar/.legacy/metadata/urls/zotero_translators/NTSB Accident Reports.js +0 -226
- scitex/scholar/.legacy/metadata/urls/zotero_translators/NYPL Menus.js +0 -275
- scitex/scholar/.legacy/metadata/urls/zotero_translators/NYPL Research Catalog.js +0 -458
- scitex/scholar/.legacy/metadata/urls/zotero_translators/NYTimes.com.js +0 -858
- scitex/scholar/.legacy/metadata/urls/zotero_translators/NZZ.ch.js +0 -272
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Nagoya University OPAC.js +0 -336
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Academies Press.js +0 -243
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Agriculture Library.js +0 -524
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Archives of Australia.js +0 -522
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Archives of South Africa.js +0 -122
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Bureau of Economic Research.js +0 -363
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Diet Library Catalogue.js +0 -333
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Gallery of Art - USA.js +0 -149
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Gallery of Australia.js +0 -252
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Library of Australia (new catalog).js +0 -223
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Library of Belarus.js +0 -171
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Library of Norway.js +0 -310
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Library of Poland ISBN.js +0 -140
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Post.js +0 -186
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Technical Reports Library.js +0 -276
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Transportation Library ROSA P.js +0 -562
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Nature Publishing Group.js +0 -3394
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Neural Information Processing Systems.js +0 -385
- scitex/scholar/.legacy/metadata/urls/zotero_translators/New Left Review.js +0 -245
- scitex/scholar/.legacy/metadata/urls/zotero_translators/New Zealand Herald.js +0 -282
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Newlines Magazine.js +0 -190
- scitex/scholar/.legacy/metadata/urls/zotero_translators/News Corp Australia.js +0 -251
- scitex/scholar/.legacy/metadata/urls/zotero_translators/NewsBank.js +0 -202
- scitex/scholar/.legacy/metadata/urls/zotero_translators/NewsnetTamedia.js +0 -509
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Noor Digital Library.js +0 -267
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Note HTML.js +0 -206
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Note Markdown.js +0 -1638
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Notre Dame Philosophical Reviews.js +0 -201
- scitex/scholar/.legacy/metadata/urls/zotero_translators/OAPEN.js +0 -331
- scitex/scholar/.legacy/metadata/urls/zotero_translators/OCLC WorldCat FirstSearch.js +0 -213
- scitex/scholar/.legacy/metadata/urls/zotero_translators/OECD.js +0 -216
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ORCID.js +0 -104
- scitex/scholar/.legacy/metadata/urls/zotero_translators/OSF Preprints.js +0 -417
- scitex/scholar/.legacy/metadata/urls/zotero_translators/OSTI Energy Citations.js +0 -202
- scitex/scholar/.legacy/metadata/urls/zotero_translators/OVID Tagged.js +0 -1226
- scitex/scholar/.legacy/metadata/urls/zotero_translators/OZON.ru.js +0 -465
- scitex/scholar/.legacy/metadata/urls/zotero_translators/OhioLINK.js +0 -43
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Old Bailey Online.js +0 -315
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Open Conf.js +0 -172
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Open Knowledge Repository.js +0 -811
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Open WorldCat.js +0 -1401
- scitex/scholar/.legacy/metadata/urls/zotero_translators/OpenAlex JSON.js +0 -740
- scitex/scholar/.legacy/metadata/urls/zotero_translators/OpenAlex.js +0 -444
- scitex/scholar/.legacy/metadata/urls/zotero_translators/OpenEdition Books.js +0 -155
- scitex/scholar/.legacy/metadata/urls/zotero_translators/OpenEdition Journals.js +0 -432
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Optical Society of America.js +0 -562
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Optimization Online.js +0 -418
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Ovid.js +0 -302
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Oxford Dictionaries Premium.js +0 -194
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Oxford English Dictionary.js +0 -122
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Oxford Music and Art Online.js +0 -120
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Oxford Reference.js +0 -202
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Oxford University Press.js +0 -277
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PC Gamer.js +0 -302
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PC Games.js +0 -128
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PEI Archival Information Network.js +0 -242
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PEP Web.js +0 -165
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PKP Catalog Systems.js +0 -1455
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PLoS Journals.js +0 -284
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PRC History Review.js +0 -298
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Pajhwok Afghan News.js +0 -198
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Papers Past.js +0 -297
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Paris Review.js +0 -227
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Pastebin.js +0 -199
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Patents - USPTO.js +0 -210
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Peeters.js +0 -587
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Perceiving Systems.js +0 -350
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Perlego.js +0 -416
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PhilPapers.js +0 -249
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Philosopher's Imprint.js +0 -169
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Pleade.js +0 -329
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Polygon.js +0 -270
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Potsdamer Neueste Nachrichten.js +0 -188
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Preprints.org.js +0 -305
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Primo 2018.js +0 -126
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Primo Normalized XML.js +0 -987
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Primo.js +0 -322
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ProMED.js +0 -66
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ProQuest Ebook Central.js +0 -226
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ProQuest PolicyFile.js +0 -115
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ProQuest.js +0 -2210
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Probing the Past.js +0 -151
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Project Gutenberg.js +0 -191
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Project MUSE.js +0 -451
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Protein Data Bank.js +0 -445
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PubFactory Journals.js +0 -712
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PubMed Central.js +0 -577
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PubMed XML.js +0 -1139
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PubMed.js +0 -1317
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PubPub.js +0 -530
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Public Record Office Victoria.js +0 -252
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Publications Office of the European Union.js +0 -540
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Publications du Quebec.js +0 -225
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PyPI.js +0 -288
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Qatar Digital Library.js +0 -802
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Queensland State Archives.js +0 -303
- scitex/scholar/.legacy/metadata/urls/zotero_translators/R-Packages.js +0 -410
- scitex/scholar/.legacy/metadata/urls/zotero_translators/RAND.js +0 -283
- scitex/scholar/.legacy/metadata/urls/zotero_translators/RDF.js +0 -1777
- scitex/scholar/.legacy/metadata/urls/zotero_translators/REDALYC.js +0 -196
- scitex/scholar/.legacy/metadata/urls/zotero_translators/RIS.js +0 -7265
- scitex/scholar/.legacy/metadata/urls/zotero_translators/RSC Publishing.js +0 -250
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Radio Free Europe Radio Liberty.js +0 -706
- scitex/scholar/.legacy/metadata/urls/zotero_translators/RePEc - Econpapers.js +0 -725
- scitex/scholar/.legacy/metadata/urls/zotero_translators/RePEc - IDEAS.js +0 -337
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Rechtspraak.nl.js +0 -295
- scitex/scholar/.legacy/metadata/urls/zotero_translators/RefWorks Tagged.js +0 -1185
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ReferBibIX.js +0 -463
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Regeringskansliet.js +0 -89
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Research Square.js +0 -335
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ResearchGate.js +0 -394
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Retsinformation.js +0 -348
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Reuters.js +0 -255
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Rock, Paper, Shotgun.js +0 -304
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Roll Call.js +0 -173
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Russian State Library.js +0 -1517
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SAE Papers.js +0 -241
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SAGE Journals.js +0 -427
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SAGE Knowledge.js +0 -505
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SAILDART.js +0 -364
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SALT Research Archives.js +0 -196
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SFU IPinCH.js +0 -946
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SIPRI.js +0 -256
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SIRS Knowledge Source.js +0 -546
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SLUB Dresden.js +0 -300
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SORA.js +0 -340
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SSOAR.js +0 -399
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SSRN.js +0 -235
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SVT Nyheter.js +0 -381
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Sacramento Bee.js +0 -274
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Safari Books Online.js +0 -391
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Scholars Portal Journals.js +0 -220
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Scholia.js +0 -189
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Schweizer Radio und Fernsehen SRF.js +0 -152
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SciELO.js +0 -440
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ScienceDirect.js +0 -1304
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Scopus.js +0 -418
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Semantic Scholar.js +0 -513
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Silverchair.js +0 -886
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Slate.js +0 -228
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SlideShare.js +0 -112
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Springer Link.js +0 -696
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Stack Exchange.js +0 -134
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Standard Ebooks.js +0 -198
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Stanford Encyclopedia of Philosophy.js +0 -285
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Stanford University Press.js +0 -343
- scitex/scholar/.legacy/metadata/urls/zotero_translators/State Records Office of Western Australia.js +0 -439
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Stitcher.js +0 -141
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Store norske leksikon.js +0 -291
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Stuff.co.nz.js +0 -446
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Substack.js +0 -237
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Sud Ouest.js +0 -181
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Sueddeutsche.de.js +0 -205
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Summon 2.js +0 -117
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Superlib.js +0 -647
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Svenska Dagbladet.js +0 -274
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Sveriges radio.js +0 -416
- scitex/scholar/.legacy/metadata/urls/zotero_translators/TEI.js +0 -648
- scitex/scholar/.legacy/metadata/urls/zotero_translators/TV by the Numbers.js +0 -194
- scitex/scholar/.legacy/metadata/urls/zotero_translators/TVNZ.js +0 -165
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Tagesspiegel.js +0 -249
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Talis Aspire.js +0 -316
- scitex/scholar/.legacy/metadata/urls/zotero_translators/TalisPrism.js +0 -445
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Tatknigafund.js +0 -174
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Tatpressa.ru.js +0 -121
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Taylor & Francis eBooks.js +0 -334
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Taylor and Francis+NEJM.js +0 -813
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Tesis Doctorals en Xarxa.js +0 -233
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Art Newspaper.js +0 -268
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Atlantic.js +0 -535
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Boston Globe.js +0 -285
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Chronicle of Higher Education.js +0 -308
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Daily Beast.js +0 -183
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Economic Times - The Times of India.js +0 -305
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Economist.js +0 -207
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Free Dictionary.js +0 -58
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Globe and Mail.js +0 -241
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Guardian.js +0 -717
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Hamilton Spectator.js +0 -129
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Hindu.js +0 -318
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Independent.js +0 -184
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Intercept.js +0 -258
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Met.js +0 -300
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Microfinance Gateway.js +0 -174
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Nation.js +0 -188
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The National Archives (UK).js +0 -242
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The New Republic.js +0 -160
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The New York Review of Books.js +0 -467
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The New Yorker.js +0 -360
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Open Library.js +0 -220
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Straits Times.js +0 -528
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Telegraph.js +0 -337
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Times and Sunday Times.js +0 -180
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Times of Israel.js +0 -151
- scitex/scholar/.legacy/metadata/urls/zotero_translators/TheMarker.js +0 -108
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Theory of Computing.js +0 -488
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ThesesFR.js +0 -298
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Thieme.js +0 -326
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Time.com.js +0 -557
- scitex/scholar/.legacy/metadata/urls/zotero_translators/TimesMachine.js +0 -222
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Tony Blair Institute for Global Change.js +0 -195
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Toronto Star.js +0 -331
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Transportation Research Board.js +0 -253
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Treesearch.js +0 -535
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Trove.js +0 -616
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Tumblr.js +0 -179
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Twitter.js +0 -413
- scitex/scholar/.legacy/metadata/urls/zotero_translators/UChicago VuFind.js +0 -907
- scitex/scholar/.legacy/metadata/urls/zotero_translators/UNZ Print Archive.js +0 -276
- scitex/scholar/.legacy/metadata/urls/zotero_translators/UPCommons.js +0 -227
- scitex/scholar/.legacy/metadata/urls/zotero_translators/US National Archives Research Catalog.js +0 -275
- scitex/scholar/.legacy/metadata/urls/zotero_translators/USENIX.js +0 -151
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Ubiquity Journals.js +0 -228
- scitex/scholar/.legacy/metadata/urls/zotero_translators/University Press Scholarship.js +0 -301
- scitex/scholar/.legacy/metadata/urls/zotero_translators/University of California Press Books.js +0 -403
- scitex/scholar/.legacy/metadata/urls/zotero_translators/University of Chicago Press Books.js +0 -378
- scitex/scholar/.legacy/metadata/urls/zotero_translators/University of Wisconsin-Madison Libraries Catalog.js +0 -298
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Unqualified Dublin Core RDF.js +0 -153
- scitex/scholar/.legacy/metadata/urls/zotero_translators/UpToDate References.js +0 -203
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Vanity Fair.js +0 -242
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Verniana-Jules Verne Studies.js +0 -190
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Verso Books.js +0 -311
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Vice.js +0 -445
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Victoria & Albert Museum.js +0 -277
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Vimeo.js +0 -188
- scitex/scholar/.legacy/metadata/urls/zotero_translators/VoxEU.js +0 -151
- scitex/scholar/.legacy/metadata/urls/zotero_translators/WHO.js +0 -458
- scitex/scholar/.legacy/metadata/urls/zotero_translators/WIPO.js +0 -189
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wall Street Journal.js +0 -525
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wanfang Data.js +0 -310
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Washington Monthly.js +0 -195
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Washington Post.js +0 -447
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Web of Science Nextgen.js +0 -715
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Web of Science Tagged.js +0 -1242
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Web of Science.js +0 -228
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Welt Online.js +0 -161
- scitex/scholar/.legacy/metadata/urls/zotero_translators/WestLaw UK.js +0 -190
- scitex/scholar/.legacy/metadata/urls/zotero_translators/WikiLeaks PlusD.js +0 -182
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wikidata QuickStatements.js +0 -306
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wikidata.js +0 -911
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wikimedia Commons.js +0 -285
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wikipedia Citation Templates.js +0 -432
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wikipedia.js +0 -385
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wikisource.js +0 -399
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wikiwand.js +0 -122
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wiktionary.js +0 -141
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wildlife Biology in Practice.js +0 -172
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wiley Online Library.js +0 -1412
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wilson Center Digital Archive.js +0 -321
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Winnipeg Free Press.js +0 -204
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wired.js +0 -249
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Womennews.js +0 -230
- scitex/scholar/.legacy/metadata/urls/zotero_translators/World Digital Library.js +0 -403
- scitex/scholar/.legacy/metadata/urls/zotero_translators/World History Connected.js +0 -185
- scitex/scholar/.legacy/metadata/urls/zotero_translators/World Shakespeare Bibliography Online.js +0 -595
- scitex/scholar/.legacy/metadata/urls/zotero_translators/WorldCat Discovery Service.js +0 -630
- scitex/scholar/.legacy/metadata/urls/zotero_translators/XML ContextObject.js +0 -274
- scitex/scholar/.legacy/metadata/urls/zotero_translators/YPSF.js +0 -224
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Yandex Books.js +0 -265
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Ynet.js +0 -171
- scitex/scholar/.legacy/metadata/urls/zotero_translators/YouTube.js +0 -209
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ZIPonline.js +0 -267
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ZOBODAT.js +0 -341
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Zotero RDF.js +0 -583
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ZoteroBib.js +0 -94
- scitex/scholar/.legacy/metadata/urls/zotero_translators/arXiv.org.js +0 -1099
- scitex/scholar/.legacy/metadata/urls/zotero_translators/artnet.js +0 -207
- scitex/scholar/.legacy/metadata/urls/zotero_translators/beck-online.js +0 -1339
- scitex/scholar/.legacy/metadata/urls/zotero_translators/clinicaltrials.gov.js +0 -331
- scitex/scholar/.legacy/metadata/urls/zotero_translators/dLibra.js +0 -367
- scitex/scholar/.legacy/metadata/urls/zotero_translators/dejure.org.js +0 -242
- scitex/scholar/.legacy/metadata/urls/zotero_translators/deleted.txt +0 -132
- scitex/scholar/.legacy/metadata/urls/zotero_translators/dhistory.js +0 -103
- scitex/scholar/.legacy/metadata/urls/zotero_translators/digibib.net.js +0 -245
- scitex/scholar/.legacy/metadata/urls/zotero_translators/eLibrary.ru.js +0 -867
- scitex/scholar/.legacy/metadata/urls/zotero_translators/eLife.js +0 -462
- scitex/scholar/.legacy/metadata/urls/zotero_translators/eMJA.js +0 -246
- scitex/scholar/.legacy/metadata/urls/zotero_translators/eMedicine.js +0 -123
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ePrint IACR.js +0 -608
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ebrary.js +0 -140
- scitex/scholar/.legacy/metadata/urls/zotero_translators/etatar.ru.js +0 -104
- scitex/scholar/.legacy/metadata/urls/zotero_translators/feb-web.ru.js +0 -167
- scitex/scholar/.legacy/metadata/urls/zotero_translators/fishpond.co.nz.js +0 -224
- scitex/scholar/.legacy/metadata/urls/zotero_translators/fr-online.de.js +0 -209
- scitex/scholar/.legacy/metadata/urls/zotero_translators/govinfo.js +0 -189
- scitex/scholar/.legacy/metadata/urls/zotero_translators/index.d.ts +0 -1646
- scitex/scholar/.legacy/metadata/urls/zotero_translators/informIT database.js +0 -248
- scitex/scholar/.legacy/metadata/urls/zotero_translators/io-port.js +0 -68
- scitex/scholar/.legacy/metadata/urls/zotero_translators/jsconfig.json +0 -10
- scitex/scholar/.legacy/metadata/urls/zotero_translators/jurion.js +0 -377
- scitex/scholar/.legacy/metadata/urls/zotero_translators/mEDRA.js +0 -597
- scitex/scholar/.legacy/metadata/urls/zotero_translators/magazines.russ.ru.js +0 -120
- scitex/scholar/.legacy/metadata/urls/zotero_translators/medes.js +0 -284
- scitex/scholar/.legacy/metadata/urls/zotero_translators/newshub.co.nz.js +0 -206
- scitex/scholar/.legacy/metadata/urls/zotero_translators/newspapers.com.js +0 -335
- scitex/scholar/.legacy/metadata/urls/zotero_translators/openJur.js +0 -161
- scitex/scholar/.legacy/metadata/urls/zotero_translators/package-lock.json +0 -2345
- scitex/scholar/.legacy/metadata/urls/zotero_translators/package.json +0 -24
- scitex/scholar/.legacy/metadata/urls/zotero_translators/reddit.js +0 -275
- scitex/scholar/.legacy/metadata/urls/zotero_translators/sbn.it.js +0 -186
- scitex/scholar/.legacy/metadata/urls/zotero_translators/scinapse.js +0 -273
- scitex/scholar/.legacy/metadata/urls/zotero_translators/semantics Visual Library.js +0 -643
- scitex/scholar/.legacy/metadata/urls/zotero_translators/taz.de.js +0 -200
- scitex/scholar/.legacy/metadata/urls/zotero_translators/unAPI.js +0 -481
- scitex/scholar/.legacy/metadata/urls/zotero_translators/wiso.js +0 -314
- scitex/scholar/.legacy/metadata/urls/zotero_translators/zbMATH.js +0 -278
- scitex/scholar/.legacy/metadata/urls/zotero_translators/zotero.org.js +0 -311
- scitex/scholar/.legacy/search/README.md +0 -205
- scitex/scholar/.legacy/search/_Embedder.py +0 -329
- scitex/scholar/.legacy/search/_SemanticSearch.py +0 -278
- scitex/scholar/.legacy/search/_SemanticSearchEngine.py +0 -452
- scitex/scholar/.legacy/search/_UnifiedSearcher.py +0 -1353
- scitex/scholar/.legacy/search/_VectorDatabase.py +0 -443
- scitex/scholar/.legacy/search/__init__.py +0 -25
- scitex/scholar/.legacy/storage/_EnhancedStorageManager.py +0 -617
- scitex/scholar/.legacy/storage/__init__.py +0 -19
- scitex/scholar/CLAUDE.md +0 -257
- scitex/scholar/TODO.md +0 -174
- scitex/scholar/_mcp_handlers.py +0 -685
- scitex/scholar/_mcp_tool_schemas.py +0 -339
- scitex/scholar/docs/backup/papers-orig.bib +0 -698
- scitex/scholar/docs/backup/papers.bib.zip +0 -0
- scitex/scholar/docs/to_claude/bin/elisp/check_parens.sh +0 -56
- scitex/scholar/docs/to_claude/bin/elisp/elisp-ci/README.md +0 -412
- scitex/scholar/docs/to_claude/bin/elisp/elisp-ci/elisp-ci +0 -622
- scitex/scholar/docs/to_claude/bin/elisp/elisp-ci/elisp-ci-simple +0 -105
- scitex/scholar/docs/to_claude/bin/elisp/find_incorrect_require_provide_statements.sh +0 -113
- scitex/scholar/docs/to_claude/bin/elisp/run_tests_elisp.sh +0 -532
- scitex/scholar/docs/to_claude/bin/elisp/run_tests_elisp_v02.sh +0 -555
- scitex/scholar/docs/to_claude/bin/elisp/sync_elisp_tdd.sh +0 -626
- scitex/scholar/docs/to_claude/bin/general/claude_emacs_server.sh +0 -192
- scitex/scholar/docs/to_claude/bin/general/create_github_release.sh +0 -36
- scitex/scholar/docs/to_claude/bin/general/find_errors.sh +0 -75
- scitex/scholar/docs/to_claude/bin/general/rename.sh +0 -145
- scitex/scholar/docs/to_claude/bin/general/render_mermaid.sh +0 -116
- scitex/scholar/docs/to_claude/bin/general/safe_rm.sh +0 -75
- scitex/scholar/docs/to_claude/bin/general/view_repo.sh +0 -4
- scitex/scholar/docs/to_claude/bin/general/wsl2-buzzer.sh +0 -73
- scitex/scholar/docs/to_claude/bin/python/black_all.sh +0 -41
- scitex/scholar/docs/to_claude/bin/python/run_tests_python_pip_package.sh +0 -291
- scitex/scholar/docs/to_claude/bin/safe_rm.sh +0 -3
- scitex/scholar/docs/to_claude/bin/slurm/README.md +0 -54
- scitex/scholar/docs/to_claude/bin/slurm/login.sh +0 -23
- scitex/scholar/docs/to_claude/bin/slurm/request.sh +0 -62
- scitex/scholar/docs/to_claude/bin/slurm/run.sh +0 -73
- scitex/scholar/docs/to_claude/examples/README.md +0 -9
- scitex/scholar/docs/to_claude/examples/example-elisp-project-emacs-hello-world/ELISP-TEST-REPORT-20250513-012234-48-PASSED-49-TOTAL-97-PERCENT.org +0 -105
- scitex/scholar/docs/to_claude/examples/example-elisp-project-emacs-hello-world/LATEST-ELISP-REPORT.org +0 -105
- scitex/scholar/docs/to_claude/examples/example-elisp-project-emacs-hello-world/README.md +0 -11
- scitex/scholar/docs/to_claude/examples/example-elisp-project-emacs-hello-world/run_tests.sh +0 -652
- scitex/scholar/docs/to_claude/examples/example-elisp-project-emacs-hello-world/tests/test-ehw-core/ELISP-TEST-REPORT-20250512-235622-0-SUCCESS-4-TOTAL-0-PERCENT.org +0 -25
- scitex/scholar/docs/to_claude/examples/example-elisp-project-emacs-hello-world/tests/test-ehw-friends/ELISP-TEST-REPORT-20250512-235622-0-SUCCESS-34-TOTAL-0-PERCENT.org +0 -66
- scitex/scholar/docs/to_claude/examples/example-elisp-project-emacs-hello-world/tests/test-ehw-prep/ELISP-TEST-REPORT-20250512-235622-0-SUCCESS-5-TOTAL-0-PERCENT.org +0 -26
- scitex/scholar/docs/to_claude/examples/example-elisp-project-emacs-hello-world/tests/test-ehw-utils/ELISP-TEST-REPORT-20250512-235622-0-SUCCESS-4-TOTAL-0-PERCENT.org +0 -25
- scitex/scholar/docs/to_claude/examples/example-python-project-scitex/.gitignore +0 -626
- scitex/scholar/docs/to_claude/examples/example-python-project-scitex/README.md +0 -155
- scitex/scholar/docs/to_claude/examples/example-python-project-scitex/config/MNIST.yaml +0 -24
- scitex/scholar/docs/to_claude/examples/example-python-project-scitex/config/PATH.yaml +0 -30
- scitex/scholar/docs/to_claude/examples/example-python-project-scitex/data/.gitkeep +0 -0
- scitex/scholar/docs/to_claude/examples/example-python-project-scitex/scripts/mnist/clf_svm.py +0 -124
- scitex/scholar/docs/to_claude/examples/example-python-project-scitex/scripts/mnist/download.py +0 -165
- scitex/scholar/docs/to_claude/examples/example-python-project-scitex/scripts/mnist/main.sh +0 -26
- scitex/scholar/docs/to_claude/examples/example-python-project-scitex/scripts/mnist/plot_conf_mat.py +0 -86
- scitex/scholar/docs/to_claude/examples/example-python-project-scitex/scripts/mnist/plot_digits.py +0 -118
- scitex/scholar/docs/to_claude/examples/example-python-project-scitex/scripts/mnist/plot_umap_space.py +0 -110
- scitex/scholar/docs/to_claude/guidelines/README.md +0 -9
- scitex/scholar/docs/to_claude/guidelines/USER_PHILOSOPHY/01_DEVELOPMENT_CYCLE.md +0 -47
- scitex/scholar/docs/to_claude/guidelines/USER_PHILOSOPHY/02_NAMING_CONVENSIONS.md +0 -91
- scitex/scholar/docs/to_claude/guidelines/USER_PHILOSOPHY/03_ARCHITECTUAL_AGREEMENT_PROCESS.md +0 -86
- scitex/scholar/docs/to_claude/guidelines/USER_PHILOSOPHY/04_ARCHITECTURE_PREDEFINED.md +0 -77
- scitex/scholar/docs/to_claude/guidelines/USER_PHILOSOPHY/05_PRIORITY_CONFIG.md +0 -22
- scitex/scholar/docs/to_claude/guidelines/USER_PHILOSOPHY/06_MULTIPLE_SPECIAL_AGENTS.md +0 -35
- scitex/scholar/docs/to_claude/guidelines/USER_PHILOSOPHY/07_DEBUGGING_TECHNIQUES.md +0 -153
- scitex/scholar/docs/to_claude/guidelines/command/IMPORTANT-rm.md +0 -69
- scitex/scholar/docs/to_claude/guidelines/command/IMPORTANT-tree.md +0 -162
- scitex/scholar/docs/to_claude/guidelines/elisp/IMPORTANT-ELISP-01-basic.md +0 -65
- scitex/scholar/docs/to_claude/guidelines/elisp/IMPORTANT-ELISP-02-project-structure.md +0 -97
- scitex/scholar/docs/to_claude/guidelines/elisp/IMPORTANT-ELISP-03-file-template.md +0 -70
- scitex/scholar/docs/to_claude/guidelines/elisp/IMPORTANT-ELISP-04-coding-style.md +0 -42
- scitex/scholar/docs/to_claude/guidelines/elisp/IMPORTANT-ELISP-05-testing-guide.md +0 -190
- scitex/scholar/docs/to_claude/guidelines/elisp/IMPORTANT-ELISP-99-example-project.md +0 -15
- scitex/scholar/docs/to_claude/guidelines/elisp/ci.md +0 -650
- scitex/scholar/docs/to_claude/guidelines/elisp/testing-with-docker.md +0 -243
- scitex/scholar/docs/to_claude/guidelines/programming_common/EXAMPLE-README-MODULE-ROOT.md +0 -32
- scitex/scholar/docs/to_claude/guidelines/programming_common/EXAMPLE-README-REPOSITORY-ROOT.md +0 -60
- scitex/scholar/docs/to_claude/guidelines/programming_common/IMPORTANT-art-of-readable-code.md +0 -1317
- scitex/scholar/docs/to_claude/guidelines/programming_common/IMPORTANT-art-of-testing.md +0 -799
- scitex/scholar/docs/to_claude/guidelines/programming_common/IMPORTANT-cleanliness.md +0 -18
- scitex/scholar/docs/to_claude/guidelines/programming_common/IMPORTANT-documentation-performance-claims.md +0 -163
- scitex/scholar/docs/to_claude/guidelines/programming_common/IMPORTANT-general.md +0 -156
- scitex/scholar/docs/to_claude/guidelines/programming_common/IMPORTANT-refactoring.md +0 -32
- scitex/scholar/docs/to_claude/guidelines/programming_common/IMPORTANT-regression-prevention.md +0 -14
- scitex/scholar/docs/to_claude/guidelines/programming_common/IMPORTANT-slurm.md +0 -73
- scitex/scholar/docs/to_claude/guidelines/programming_common/IMPORTANT-start-from-small.md +0 -30
- scitex/scholar/docs/to_claude/guidelines/programming_common/IMPORTANT-test-driven-workflow.md +0 -80
- scitex/scholar/docs/to_claude/guidelines/programming_common/IMPORTANT-version-control.md +0 -47
- scitex/scholar/docs/to_claude/guidelines/programming_common/clean-code.md +0 -305
- scitex/scholar/docs/to_claude/guidelines/programming_common/debugging-message.md +0 -52
- scitex/scholar/docs/to_claude/guidelines/programming_common/do-not-repeat-yourself.md +0 -27
- scitex/scholar/docs/to_claude/guidelines/programming_common/emacs-server.md +0 -39
- scitex/scholar/docs/to_claude/guidelines/programming_common/keep-it-simple-stupid.md +0 -19
- scitex/scholar/docs/to_claude/guidelines/programming_common/renaming-and-cleaning-workflow.md +0 -311
- scitex/scholar/docs/to_claude/guidelines/programming_common/screen.md +0 -32
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-CLAUDE_ID.md +0 -15
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-beyond-control.md +0 -14
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-bug-report.md +0 -43
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-cleanliness.md +0 -162
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-communication.md +0 -13
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-do-not-create-any-new-file-nor-directory-in-project-root.md +0 -9
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-documentation.md +0 -11
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-feature-request.md +0 -33
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-general-multi-agent-coordination.md +0 -311
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-multi-agent-protocol.md +0 -97
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-project-management-bulletin-board.md +0 -48
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-project-management-markdown.md +0 -156
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-project-management-org.org +0 -161
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-tools.md +0 -10
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-understand-message-in-filename.md +0 -12
- scitex/scholar/docs/to_claude/guidelines/project/general.md +0 -7
- scitex/scholar/docs/to_claude/guidelines/project/report.md +0 -50
- scitex/scholar/docs/to_claude/guidelines/project/timeline-gantt-chart.md +0 -49
- scitex/scholar/docs/to_claude/guidelines/python/CHECKLIST.md +0 -51
- scitex/scholar/docs/to_claude/guidelines/python/HOW-TO-DEBUG-with-MULTIPLE_AGENTS.md +0 -191
- scitex/scholar/docs/to_claude/guidelines/python/Machine-Learning.md +0 -15
- scitex/scholar/docs/to_claude/guidelines/python/NOT-FULL-PYTEST-BUT-PARTIAL-PYTEST.md +0 -21
- scitex/scholar/docs/to_claude/guidelines/python/django.md +0 -217
- scitex/scholar/docs/to_claude/guidelines/python/env.md +0 -10
- scitex/scholar/docs/to_claude/guidelines/python/general.md +0 -55
- scitex/scholar/docs/to_claude/guidelines/python/official/cipdb-README.md +0 -219
- scitex/scholar/docs/to_claude/guidelines/python/official/fastmcp-README.md +0 -442
- scitex/scholar/docs/to_claude/guidelines/python/official/fastmcp-TESTING.md +0 -146
- scitex/scholar/docs/to_claude/guidelines/python/official/icecream-README.md +0 -433
- scitex/scholar/docs/to_claude/guidelines/python/official/priority_config-README.md +0 -126
- scitex/scholar/docs/to_claude/guidelines/python/scitex/01-basic.md +0 -42
- scitex/scholar/docs/to_claude/guidelines/python/scitex/02-file-template.md +0 -132
- scitex/scholar/docs/to_claude/guidelines/python/scitex/03-configuration.md +0 -53
- scitex/scholar/docs/to_claude/guidelines/python/scitex/04-coding-style.md +0 -126
- scitex/scholar/docs/to_claude/guidelines/python/scitex/05-testing-guide.md +0 -56
- scitex/scholar/docs/to_claude/guidelines/python/scitex/06-examples-guide.md +0 -42
- scitex/scholar/docs/to_claude/guidelines/python/scitex/11-gen-module.md +0 -15
- scitex/scholar/docs/to_claude/guidelines/python/scitex/11-session-module.md +0 -24
- scitex/scholar/docs/to_claude/guidelines/python/scitex/12-io-module.md +0 -112
- scitex/scholar/docs/to_claude/guidelines/python/scitex/13-plt-module.md +0 -101
- scitex/scholar/docs/to_claude/guidelines/python/scitex/14-dsp-module.md +0 -78
- scitex/scholar/docs/to_claude/guidelines/python/scitex/15-pd-module.md +0 -24
- scitex/scholar/docs/to_claude/guidelines/python/scitex/16-stats-module.md +0 -79
- scitex/scholar/docs/to_claude/guidelines/python/scitex/17-other-modules.md +0 -23
- scitex/scholar/docs/to_claude/guidelines/python/scitex/17-str-module.md +0 -24
- scitex/scholar/docs/to_claude/guidelines/python/scitex/18-directory-structure-for-scientific-work.md +0 -48
- scitex/scholar/docs/to_claude/guidelines/python/scitex/19-directory-structure-for-pip-package.md +0 -234
- scitex/scholar/docs/to_claude/guidelines/python/scitex/99-example-project.md +0 -19
- scitex/scholar/docs/to_claude/guidelines/python/zen_of_python.md +0 -82
- scitex/scholar/docs/to_claude/guidelines/science/IMPORTANT-general.md +0 -16
- scitex/scholar/docs/to_claude/guidelines/science/IMPORTANT-scientific-attitude.md +0 -25
- scitex/scholar/docs/to_claude/guidelines/science/scientific-writing-abstract.md +0 -93
- scitex/scholar/docs/to_claude/guidelines/science/scientific-writing-discussion.md +0 -116
- scitex/scholar/docs/to_claude/guidelines/science/scientific-writing-general-1.md +0 -157
- scitex/scholar/docs/to_claude/guidelines/science/scientific-writing-general-2.md +0 -83
- scitex/scholar/docs/to_claude/guidelines/science/scientific-writing-introduction.md +0 -123
- scitex/scholar/docs/to_claude/guidelines/science/scientific-writing-methods.md +0 -88
- scitex/scholar/docs/to_claude/guidelines/shell/IMPORTANT-general.md +0 -196
- scitex/scholar/examples/SUGGESTIONS.md +0 -865
- scitex/scholar/examples/dev.py +0 -38
- scitex/scholar/library/neurovista/info/bibtex/seizure_prediction_enriched.bib +0 -1092
- scitex/stats/_mcp_handlers.py +0 -1191
- scitex/stats/_mcp_tool_schemas.py +0 -384
- scitex/template/.legacy/_clone_project.py +0 -267
- scitex/template/_mcp_handlers.py +0 -259
- scitex/template/_mcp_tool_schemas.py +0 -112
- scitex/writer/.legacy/Writer_v01-refactored.py +0 -189
- scitex/writer/.legacy/_compile.py +0 -342
- scitex/writer/_compile_async.py +0 -126
- scitex/writer/_validate_tree_structures.py +0 -197
- scitex/writer/dataclasses/config/_WriterConfig.py +0 -175
- scitex/writer/dataclasses/contents/_ManuscriptContents.py +0 -236
- scitex/writer/dataclasses/core/_Document.py +0 -146
- scitex/writer/dataclasses/core/_DocumentSection.py +0 -546
- scitex/writer/dataclasses/results/_CompilationResult.py +0 -165
- scitex/writer/dataclasses/results/_LaTeXIssue.py +0 -102
- scitex/writer/dataclasses/tree/MINIMUM_FILES.md +0 -121
- scitex/writer/tests/__init__.py +0 -3
- scitex/writer/tests/test_diff_between.py +0 -451
- scitex/writer/tests/test_document_section.py +0 -311
- scitex/writer/tests/test_document_workflow.py +0 -393
- scitex/writer/tests/test_writer.py +0 -361
- scitex/writer/tests/test_writer_integration.py +0 -303
- scitex-2.13.0.dist-info/METADATA +0 -1231
- scitex-2.13.0.dist-info/RECORD +0 -3402
- scitex-2.13.0.dist-info/entry_points.txt +0 -11
- /scitex/scholar/docs/{SUMMARY.md → 00_SUMMARY.md} +0 -0
- /scitex/scholar/docs/{STORAGE_ARCHITECTURE.md → 01_STORAGE_ARCHITECTURE.md} +0 -0
- /scitex/scholar/docs/{PIPELINE_ORGANIZATION.md → 02_PIPELINE_ORGANIZATION.md} +0 -0
- /scitex/scholar/docs/{PIPELINE_IMPLEMENTATION_PLAN.md → 03_PIPELINE_IMPLEMENTATION_PLAN.md} +0 -0
- /scitex/scholar/docs/{PIPELINE_IMPLEMENTATION_COMPLETE.md → 04_PIPELINE_IMPLEMENTATION_COMPLETE.md} +0 -0
- /scitex/scholar/docs/{DETAILS_FOR_DEVELOPERS.md → 05_DETAILS_FOR_DEVELOPERS.md} +0 -0
- /scitex/scholar/docs/{IMPACT_FACTOR_CITATION_INTEGRATION.md → 06_IMPACT_FACTOR_CITATION_INTEGRATION.md} +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/__init__.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/config/_CONSTANTS.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/config/__init__.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/contents/_RevisionContents.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/contents/_SupplementaryContents.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/contents/__init__.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/core/__init__.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/results/_SaveSectionsResponse.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/results/_SectionReadResponse.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/results/__init__.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/tree/_ConfigTree.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/tree/_ManuscriptTree.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/tree/_RevisionTree.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/tree/_ScriptsTree.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/tree/_SharedTree.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/tree/_SupplementaryTree.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/tree/__init__.py +0 -0
- {scitex-2.13.0.dist-info → scitex-2.15.1.dist-info}/WHEEL +0 -0
- {scitex-2.13.0.dist-info → scitex-2.15.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,1191 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# Timestamp: 2026-01-08
|
|
3
|
+
# File: src/scitex/stats/_mcp.handlers.py
|
|
4
|
+
# ----------------------------------------
|
|
5
|
+
|
|
6
|
+
"""Handler implementations for the scitex-stats MCP server."""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import asyncio
|
|
11
|
+
from datetime import datetime
|
|
12
|
+
|
|
13
|
+
import numpy as np
|
|
14
|
+
|
|
15
|
+
__all__ = [
|
|
16
|
+
"recommend_tests_handler",
|
|
17
|
+
"run_test_handler",
|
|
18
|
+
"format_results_handler",
|
|
19
|
+
"power_analysis_handler",
|
|
20
|
+
"correct_pvalues_handler",
|
|
21
|
+
"describe_handler",
|
|
22
|
+
"effect_size_handler",
|
|
23
|
+
"normality_test_handler",
|
|
24
|
+
"posthoc_test_handler",
|
|
25
|
+
"p_to_stars_handler",
|
|
26
|
+
]
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
async def recommend_tests_handler(
|
|
30
|
+
n_groups: int = 2,
|
|
31
|
+
sample_sizes: list[int] | None = None,
|
|
32
|
+
outcome_type: str = "continuous",
|
|
33
|
+
design: str = "between",
|
|
34
|
+
paired: bool = False,
|
|
35
|
+
has_control_group: bool = False,
|
|
36
|
+
top_k: int = 3,
|
|
37
|
+
) -> dict:
|
|
38
|
+
"""Recommend appropriate statistical tests based on data characteristics."""
|
|
39
|
+
try:
|
|
40
|
+
from scitex.stats.auto import StatContext, recommend_tests
|
|
41
|
+
|
|
42
|
+
loop = asyncio.get_event_loop()
|
|
43
|
+
|
|
44
|
+
def do_recommend():
|
|
45
|
+
ctx = StatContext(
|
|
46
|
+
n_groups=n_groups,
|
|
47
|
+
sample_sizes=sample_sizes or [30] * n_groups,
|
|
48
|
+
outcome_type=outcome_type,
|
|
49
|
+
design=design,
|
|
50
|
+
paired=paired,
|
|
51
|
+
has_control_group=has_control_group,
|
|
52
|
+
n_factors=1,
|
|
53
|
+
)
|
|
54
|
+
tests = recommend_tests(ctx, top_k=top_k)
|
|
55
|
+
|
|
56
|
+
# Get details about each recommended test
|
|
57
|
+
from scitex.stats.auto._rules import TEST_RULES
|
|
58
|
+
|
|
59
|
+
recommendations = []
|
|
60
|
+
for test_name in tests:
|
|
61
|
+
rule = TEST_RULES.get(test_name)
|
|
62
|
+
if rule:
|
|
63
|
+
recommendations.append(
|
|
64
|
+
{
|
|
65
|
+
"name": test_name,
|
|
66
|
+
"family": rule.family,
|
|
67
|
+
"priority": rule.priority,
|
|
68
|
+
"needs_normality": rule.needs_normality,
|
|
69
|
+
"needs_equal_variance": rule.needs_equal_variance,
|
|
70
|
+
"rationale": _get_test_rationale(test_name),
|
|
71
|
+
}
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
return recommendations
|
|
75
|
+
|
|
76
|
+
recommendations = await loop.run_in_executor(None, do_recommend)
|
|
77
|
+
|
|
78
|
+
return {
|
|
79
|
+
"success": True,
|
|
80
|
+
"context": {
|
|
81
|
+
"n_groups": n_groups,
|
|
82
|
+
"sample_sizes": sample_sizes,
|
|
83
|
+
"outcome_type": outcome_type,
|
|
84
|
+
"design": design,
|
|
85
|
+
"paired": paired,
|
|
86
|
+
"has_control_group": has_control_group,
|
|
87
|
+
},
|
|
88
|
+
"recommendations": recommendations,
|
|
89
|
+
"timestamp": datetime.now().isoformat(),
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
except Exception as e:
|
|
93
|
+
return {"success": False, "error": str(e)}
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def _get_test_rationale(test_name: str) -> str:
|
|
97
|
+
"""Get rationale for recommending a specific test."""
|
|
98
|
+
rationales = {
|
|
99
|
+
"brunner_munzel": "Robust nonparametric test - no normality/equal variance assumptions",
|
|
100
|
+
"ttest_ind": "Classic parametric test for comparing two independent groups",
|
|
101
|
+
"ttest_paired": "Parametric test for paired/matched samples",
|
|
102
|
+
"ttest_1samp": "One-sample t-test for comparing to a population mean",
|
|
103
|
+
"mannwhitneyu": "Nonparametric alternative to independent t-test",
|
|
104
|
+
"wilcoxon": "Nonparametric alternative to paired t-test",
|
|
105
|
+
"anova": "Parametric test for comparing 3+ groups",
|
|
106
|
+
"kruskal": "Nonparametric alternative to one-way ANOVA",
|
|
107
|
+
"chi2": "Test for independence in contingency tables",
|
|
108
|
+
"fisher_exact": "Exact test for small sample contingency tables",
|
|
109
|
+
"pearson": "Parametric correlation coefficient",
|
|
110
|
+
"spearman": "Nonparametric rank correlation",
|
|
111
|
+
"kendall": "Robust nonparametric correlation for ordinal data",
|
|
112
|
+
}
|
|
113
|
+
return rationales.get(test_name, "Applicable to the given context")
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
async def run_test_handler(
|
|
117
|
+
test_name: str,
|
|
118
|
+
data: list[list[float]],
|
|
119
|
+
alternative: str = "two-sided",
|
|
120
|
+
) -> dict:
|
|
121
|
+
"""Execute a statistical test on provided data."""
|
|
122
|
+
try:
|
|
123
|
+
from scipy import stats as scipy_stats
|
|
124
|
+
|
|
125
|
+
loop = asyncio.get_event_loop()
|
|
126
|
+
|
|
127
|
+
def do_test():
|
|
128
|
+
# Convert data to numpy arrays
|
|
129
|
+
groups = [np.array(g, dtype=float) for g in data]
|
|
130
|
+
|
|
131
|
+
result = {}
|
|
132
|
+
|
|
133
|
+
# Run the appropriate test
|
|
134
|
+
if test_name == "ttest_ind":
|
|
135
|
+
if len(groups) != 2:
|
|
136
|
+
raise ValueError("t-test requires exactly 2 groups")
|
|
137
|
+
stat, p_value = scipy_stats.ttest_ind(
|
|
138
|
+
groups[0], groups[1], alternative=alternative
|
|
139
|
+
)
|
|
140
|
+
df = len(groups[0]) + len(groups[1]) - 2
|
|
141
|
+
result = {
|
|
142
|
+
"test": "Independent t-test",
|
|
143
|
+
"statistic": float(stat),
|
|
144
|
+
"statistic_name": "t",
|
|
145
|
+
"p_value": float(p_value),
|
|
146
|
+
"df": df,
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
elif test_name == "ttest_paired":
|
|
150
|
+
if len(groups) != 2:
|
|
151
|
+
raise ValueError("Paired t-test requires exactly 2 groups")
|
|
152
|
+
stat, p_value = scipy_stats.ttest_rel(
|
|
153
|
+
groups[0], groups[1], alternative=alternative
|
|
154
|
+
)
|
|
155
|
+
df = len(groups[0]) - 1
|
|
156
|
+
result = {
|
|
157
|
+
"test": "Paired t-test",
|
|
158
|
+
"statistic": float(stat),
|
|
159
|
+
"statistic_name": "t",
|
|
160
|
+
"p_value": float(p_value),
|
|
161
|
+
"df": df,
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
elif test_name == "ttest_1samp":
|
|
165
|
+
if len(groups) != 1:
|
|
166
|
+
raise ValueError("One-sample t-test requires exactly 1 group")
|
|
167
|
+
stat, p_value = scipy_stats.ttest_1samp(
|
|
168
|
+
groups[0], 0, alternative=alternative
|
|
169
|
+
)
|
|
170
|
+
df = len(groups[0]) - 1
|
|
171
|
+
result = {
|
|
172
|
+
"test": "One-sample t-test",
|
|
173
|
+
"statistic": float(stat),
|
|
174
|
+
"statistic_name": "t",
|
|
175
|
+
"p_value": float(p_value),
|
|
176
|
+
"df": df,
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
elif test_name == "brunner_munzel":
|
|
180
|
+
if len(groups) != 2:
|
|
181
|
+
raise ValueError("Brunner-Munzel requires exactly 2 groups")
|
|
182
|
+
res = scipy_stats.brunnermunzel(
|
|
183
|
+
groups[0], groups[1], alternative=alternative
|
|
184
|
+
)
|
|
185
|
+
result = {
|
|
186
|
+
"test": "Brunner-Munzel test",
|
|
187
|
+
"statistic": float(res.statistic),
|
|
188
|
+
"statistic_name": "BM",
|
|
189
|
+
"p_value": float(res.pvalue),
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
elif test_name == "mannwhitneyu":
|
|
193
|
+
if len(groups) != 2:
|
|
194
|
+
raise ValueError("Mann-Whitney U requires exactly 2 groups")
|
|
195
|
+
stat, p_value = scipy_stats.mannwhitneyu(
|
|
196
|
+
groups[0], groups[1], alternative=alternative
|
|
197
|
+
)
|
|
198
|
+
result = {
|
|
199
|
+
"test": "Mann-Whitney U test",
|
|
200
|
+
"statistic": float(stat),
|
|
201
|
+
"statistic_name": "U",
|
|
202
|
+
"p_value": float(p_value),
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
elif test_name == "wilcoxon":
|
|
206
|
+
if len(groups) != 2:
|
|
207
|
+
raise ValueError("Wilcoxon requires exactly 2 paired groups")
|
|
208
|
+
stat, p_value = scipy_stats.wilcoxon(
|
|
209
|
+
groups[0], groups[1], alternative=alternative
|
|
210
|
+
)
|
|
211
|
+
result = {
|
|
212
|
+
"test": "Wilcoxon signed-rank test",
|
|
213
|
+
"statistic": float(stat),
|
|
214
|
+
"statistic_name": "W",
|
|
215
|
+
"p_value": float(p_value),
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
elif test_name == "anova":
|
|
219
|
+
if len(groups) < 2:
|
|
220
|
+
raise ValueError("ANOVA requires at least 2 groups")
|
|
221
|
+
stat, p_value = scipy_stats.f_oneway(*groups)
|
|
222
|
+
df_between = len(groups) - 1
|
|
223
|
+
df_within = sum(len(g) for g in groups) - len(groups)
|
|
224
|
+
result = {
|
|
225
|
+
"test": "One-way ANOVA",
|
|
226
|
+
"statistic": float(stat),
|
|
227
|
+
"statistic_name": "F",
|
|
228
|
+
"p_value": float(p_value),
|
|
229
|
+
"df_between": df_between,
|
|
230
|
+
"df_within": df_within,
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
elif test_name == "kruskal":
|
|
234
|
+
if len(groups) < 2:
|
|
235
|
+
raise ValueError("Kruskal-Wallis requires at least 2 groups")
|
|
236
|
+
stat, p_value = scipy_stats.kruskal(*groups)
|
|
237
|
+
result = {
|
|
238
|
+
"test": "Kruskal-Wallis H test",
|
|
239
|
+
"statistic": float(stat),
|
|
240
|
+
"statistic_name": "H",
|
|
241
|
+
"p_value": float(p_value),
|
|
242
|
+
"df": len(groups) - 1,
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
elif test_name == "chi2":
|
|
246
|
+
# Expects contingency table as data
|
|
247
|
+
table = np.array(data)
|
|
248
|
+
chi2, p_value, dof, expected = scipy_stats.chi2_contingency(table)
|
|
249
|
+
result = {
|
|
250
|
+
"test": "Chi-square test of independence",
|
|
251
|
+
"statistic": float(chi2),
|
|
252
|
+
"statistic_name": "chi2",
|
|
253
|
+
"p_value": float(p_value),
|
|
254
|
+
"df": int(dof),
|
|
255
|
+
"expected_frequencies": expected.tolist(),
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
elif test_name == "fisher_exact":
|
|
259
|
+
# Expects 2x2 contingency table
|
|
260
|
+
table = np.array(data)
|
|
261
|
+
if table.shape != (2, 2):
|
|
262
|
+
raise ValueError("Fisher's exact test requires a 2x2 table")
|
|
263
|
+
odds_ratio, p_value = scipy_stats.fisher_exact(
|
|
264
|
+
table, alternative=alternative
|
|
265
|
+
)
|
|
266
|
+
result = {
|
|
267
|
+
"test": "Fisher's exact test",
|
|
268
|
+
"statistic": float(odds_ratio),
|
|
269
|
+
"statistic_name": "odds_ratio",
|
|
270
|
+
"p_value": float(p_value),
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
elif test_name == "pearson":
|
|
274
|
+
if len(groups) != 2:
|
|
275
|
+
raise ValueError("Pearson correlation requires exactly 2 variables")
|
|
276
|
+
r, p_value = scipy_stats.pearsonr(groups[0], groups[1])
|
|
277
|
+
result = {
|
|
278
|
+
"test": "Pearson correlation",
|
|
279
|
+
"statistic": float(r),
|
|
280
|
+
"statistic_name": "r",
|
|
281
|
+
"p_value": float(p_value),
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
elif test_name == "spearman":
|
|
285
|
+
if len(groups) != 2:
|
|
286
|
+
raise ValueError(
|
|
287
|
+
"Spearman correlation requires exactly 2 variables"
|
|
288
|
+
)
|
|
289
|
+
r, p_value = scipy_stats.spearmanr(groups[0], groups[1])
|
|
290
|
+
result = {
|
|
291
|
+
"test": "Spearman correlation",
|
|
292
|
+
"statistic": float(r),
|
|
293
|
+
"statistic_name": "rho",
|
|
294
|
+
"p_value": float(p_value),
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
elif test_name == "kendall":
|
|
298
|
+
if len(groups) != 2:
|
|
299
|
+
raise ValueError("Kendall correlation requires exactly 2 variables")
|
|
300
|
+
tau, p_value = scipy_stats.kendalltau(groups[0], groups[1])
|
|
301
|
+
result = {
|
|
302
|
+
"test": "Kendall tau correlation",
|
|
303
|
+
"statistic": float(tau),
|
|
304
|
+
"statistic_name": "tau",
|
|
305
|
+
"p_value": float(p_value),
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
else:
|
|
309
|
+
raise ValueError(f"Unknown test: {test_name}")
|
|
310
|
+
|
|
311
|
+
# Calculate effect size if applicable
|
|
312
|
+
if test_name in [
|
|
313
|
+
"ttest_ind",
|
|
314
|
+
"ttest_paired",
|
|
315
|
+
"brunner_munzel",
|
|
316
|
+
"mannwhitneyu",
|
|
317
|
+
]:
|
|
318
|
+
from scitex.stats.effect_sizes import cliffs_delta, cohens_d
|
|
319
|
+
|
|
320
|
+
if len(groups) == 2:
|
|
321
|
+
d = cohens_d(groups[0], groups[1])
|
|
322
|
+
delta = cliffs_delta(groups[0], groups[1])
|
|
323
|
+
result["effect_size"] = {
|
|
324
|
+
"cohens_d": float(d),
|
|
325
|
+
"cliffs_delta": float(delta),
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
# Add significance determination
|
|
329
|
+
alpha = 0.05
|
|
330
|
+
result["significant"] = result["p_value"] < alpha
|
|
331
|
+
result["alpha"] = alpha
|
|
332
|
+
|
|
333
|
+
return result
|
|
334
|
+
|
|
335
|
+
result = await loop.run_in_executor(None, do_test)
|
|
336
|
+
|
|
337
|
+
return {
|
|
338
|
+
"success": True,
|
|
339
|
+
"test_name": test_name,
|
|
340
|
+
"alternative": alternative,
|
|
341
|
+
**result,
|
|
342
|
+
"timestamp": datetime.now().isoformat(),
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
except Exception as e:
|
|
346
|
+
return {"success": False, "error": str(e)}
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
async def format_results_handler(
|
|
350
|
+
test_name: str,
|
|
351
|
+
statistic: float,
|
|
352
|
+
p_value: float,
|
|
353
|
+
df: float | None = None,
|
|
354
|
+
effect_size: float | None = None,
|
|
355
|
+
effect_size_name: str | None = None,
|
|
356
|
+
style: str = "apa",
|
|
357
|
+
ci_lower: float | None = None,
|
|
358
|
+
ci_upper: float | None = None,
|
|
359
|
+
) -> dict:
|
|
360
|
+
"""Format statistical results in journal style."""
|
|
361
|
+
try:
|
|
362
|
+
loop = asyncio.get_event_loop()
|
|
363
|
+
|
|
364
|
+
def do_format():
|
|
365
|
+
from scitex.stats.auto import format_test_line, p_to_stars
|
|
366
|
+
from scitex.stats.auto._formatting import EffectResultDict, TestResultDict
|
|
367
|
+
|
|
368
|
+
# Build test result dict
|
|
369
|
+
test_result: TestResultDict = {
|
|
370
|
+
"test_name": test_name,
|
|
371
|
+
"stat": statistic,
|
|
372
|
+
"p_raw": p_value,
|
|
373
|
+
}
|
|
374
|
+
if df is not None:
|
|
375
|
+
test_result["df"] = df
|
|
376
|
+
|
|
377
|
+
# Build effect result if provided
|
|
378
|
+
effects = None
|
|
379
|
+
if effect_size is not None:
|
|
380
|
+
effects = [
|
|
381
|
+
EffectResultDict(
|
|
382
|
+
name=effect_size_name or "d",
|
|
383
|
+
label=effect_size_name or "Cohen's d",
|
|
384
|
+
value=effect_size,
|
|
385
|
+
ci_lower=ci_lower,
|
|
386
|
+
ci_upper=ci_upper,
|
|
387
|
+
)
|
|
388
|
+
]
|
|
389
|
+
|
|
390
|
+
# Map style names
|
|
391
|
+
style_map = {
|
|
392
|
+
"apa": "apa_latex",
|
|
393
|
+
"nature": "nature",
|
|
394
|
+
"science": "science",
|
|
395
|
+
"brief": "brief",
|
|
396
|
+
}
|
|
397
|
+
style_id = style_map.get(style, "apa_latex")
|
|
398
|
+
|
|
399
|
+
# Format the line
|
|
400
|
+
formatted = format_test_line(
|
|
401
|
+
test_result,
|
|
402
|
+
effects=effects,
|
|
403
|
+
style=style_id,
|
|
404
|
+
include_n=False,
|
|
405
|
+
)
|
|
406
|
+
|
|
407
|
+
# Get stars representation
|
|
408
|
+
stars = p_to_stars(p_value)
|
|
409
|
+
|
|
410
|
+
return {
|
|
411
|
+
"formatted": formatted,
|
|
412
|
+
"stars": stars,
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
result = await loop.run_in_executor(None, do_format)
|
|
416
|
+
|
|
417
|
+
return {
|
|
418
|
+
"success": True,
|
|
419
|
+
"style": style,
|
|
420
|
+
**result,
|
|
421
|
+
"timestamp": datetime.now().isoformat(),
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
except Exception as e:
|
|
425
|
+
return {"success": False, "error": str(e)}
|
|
426
|
+
|
|
427
|
+
|
|
428
|
+
async def power_analysis_handler(
|
|
429
|
+
test_type: str = "ttest",
|
|
430
|
+
effect_size: float | None = None,
|
|
431
|
+
alpha: float = 0.05,
|
|
432
|
+
power: float = 0.8,
|
|
433
|
+
n: int | None = None,
|
|
434
|
+
n_groups: int = 2,
|
|
435
|
+
ratio: float = 1.0,
|
|
436
|
+
) -> dict:
|
|
437
|
+
"""Calculate statistical power or required sample size."""
|
|
438
|
+
try:
|
|
439
|
+
loop = asyncio.get_event_loop()
|
|
440
|
+
|
|
441
|
+
def do_power():
|
|
442
|
+
from scitex.stats.power._power import power_ttest, sample_size_ttest
|
|
443
|
+
|
|
444
|
+
result = {}
|
|
445
|
+
|
|
446
|
+
if test_type == "ttest":
|
|
447
|
+
if n is not None and effect_size is not None:
|
|
448
|
+
# Calculate power given n and effect size
|
|
449
|
+
calculated_power = power_ttest(
|
|
450
|
+
effect_size=effect_size,
|
|
451
|
+
n1=n,
|
|
452
|
+
n2=int(n * ratio),
|
|
453
|
+
alpha=alpha,
|
|
454
|
+
test_type="two-sample",
|
|
455
|
+
)
|
|
456
|
+
result = {
|
|
457
|
+
"mode": "power_calculation",
|
|
458
|
+
"power": calculated_power,
|
|
459
|
+
"n1": n,
|
|
460
|
+
"n2": int(n * ratio),
|
|
461
|
+
"effect_size": effect_size,
|
|
462
|
+
"alpha": alpha,
|
|
463
|
+
}
|
|
464
|
+
elif effect_size is not None:
|
|
465
|
+
# Calculate required sample size
|
|
466
|
+
n1, n2 = sample_size_ttest(
|
|
467
|
+
effect_size=effect_size,
|
|
468
|
+
power=power,
|
|
469
|
+
alpha=alpha,
|
|
470
|
+
ratio=ratio,
|
|
471
|
+
)
|
|
472
|
+
result = {
|
|
473
|
+
"mode": "sample_size_calculation",
|
|
474
|
+
"required_n1": n1,
|
|
475
|
+
"required_n2": n2,
|
|
476
|
+
"total_n": n1 + n2,
|
|
477
|
+
"effect_size": effect_size,
|
|
478
|
+
"target_power": power,
|
|
479
|
+
"alpha": alpha,
|
|
480
|
+
}
|
|
481
|
+
else:
|
|
482
|
+
raise ValueError("Either n or effect_size must be provided")
|
|
483
|
+
|
|
484
|
+
elif test_type == "anova":
|
|
485
|
+
# Simplified ANOVA power (using f = d * sqrt(k-1) / sqrt(2k))
|
|
486
|
+
if effect_size is None:
|
|
487
|
+
raise ValueError("effect_size required for ANOVA power")
|
|
488
|
+
|
|
489
|
+
# Convert Cohen's f to d for approximation
|
|
490
|
+
# This is a simplified calculation
|
|
491
|
+
from scipy import stats as scipy_stats
|
|
492
|
+
|
|
493
|
+
if n is not None:
|
|
494
|
+
df1 = n_groups - 1
|
|
495
|
+
df2 = n_groups * n - n_groups
|
|
496
|
+
nc = effect_size**2 * n * n_groups
|
|
497
|
+
f_crit = scipy_stats.f.ppf(1 - alpha, df1, df2)
|
|
498
|
+
power_val = 1 - scipy_stats.ncf.cdf(f_crit, df1, df2, nc)
|
|
499
|
+
result = {
|
|
500
|
+
"mode": "power_calculation",
|
|
501
|
+
"power": power_val,
|
|
502
|
+
"n_per_group": n,
|
|
503
|
+
"n_groups": n_groups,
|
|
504
|
+
"effect_size_f": effect_size,
|
|
505
|
+
"alpha": alpha,
|
|
506
|
+
}
|
|
507
|
+
else:
|
|
508
|
+
# Binary search for n
|
|
509
|
+
n_min, n_max = 2, 1000
|
|
510
|
+
while n_max - n_min > 1:
|
|
511
|
+
n_mid = (n_min + n_max) // 2
|
|
512
|
+
df1 = n_groups - 1
|
|
513
|
+
df2 = n_groups * n_mid - n_groups
|
|
514
|
+
nc = effect_size**2 * n_mid * n_groups
|
|
515
|
+
f_crit = scipy_stats.f.ppf(1 - alpha, df1, df2)
|
|
516
|
+
power_val = 1 - scipy_stats.ncf.cdf(f_crit, df1, df2, nc)
|
|
517
|
+
if power_val < power:
|
|
518
|
+
n_min = n_mid
|
|
519
|
+
else:
|
|
520
|
+
n_max = n_mid
|
|
521
|
+
|
|
522
|
+
result = {
|
|
523
|
+
"mode": "sample_size_calculation",
|
|
524
|
+
"required_n_per_group": n_max,
|
|
525
|
+
"total_n": n_max * n_groups,
|
|
526
|
+
"n_groups": n_groups,
|
|
527
|
+
"effect_size_f": effect_size,
|
|
528
|
+
"target_power": power,
|
|
529
|
+
"alpha": alpha,
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
elif test_type == "correlation":
|
|
533
|
+
# Power for correlation coefficient
|
|
534
|
+
from scipy import stats as scipy_stats
|
|
535
|
+
|
|
536
|
+
if effect_size is None:
|
|
537
|
+
raise ValueError("effect_size (r) required for correlation power")
|
|
538
|
+
|
|
539
|
+
if n is not None:
|
|
540
|
+
# Calculate power
|
|
541
|
+
z = 0.5 * np.log((1 + effect_size) / (1 - effect_size))
|
|
542
|
+
se = 1 / np.sqrt(n - 3)
|
|
543
|
+
z_crit = scipy_stats.norm.ppf(1 - alpha / 2)
|
|
544
|
+
power_val = (
|
|
545
|
+
1
|
|
546
|
+
- scipy_stats.norm.cdf(z_crit - z / se)
|
|
547
|
+
+ scipy_stats.norm.cdf(-z_crit - z / se)
|
|
548
|
+
)
|
|
549
|
+
result = {
|
|
550
|
+
"mode": "power_calculation",
|
|
551
|
+
"power": power_val,
|
|
552
|
+
"n": n,
|
|
553
|
+
"effect_size_r": effect_size,
|
|
554
|
+
"alpha": alpha,
|
|
555
|
+
}
|
|
556
|
+
else:
|
|
557
|
+
# Calculate required n (binary search)
|
|
558
|
+
z = 0.5 * np.log((1 + effect_size) / (1 - effect_size))
|
|
559
|
+
z_crit = scipy_stats.norm.ppf(1 - alpha / 2)
|
|
560
|
+
z_power = scipy_stats.norm.ppf(power)
|
|
561
|
+
required_n = int(np.ceil(((z_crit + z_power) / z) ** 2 + 3))
|
|
562
|
+
result = {
|
|
563
|
+
"mode": "sample_size_calculation",
|
|
564
|
+
"required_n": required_n,
|
|
565
|
+
"effect_size_r": effect_size,
|
|
566
|
+
"target_power": power,
|
|
567
|
+
"alpha": alpha,
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
elif test_type == "chi2":
|
|
571
|
+
# Chi-square power (simplified)
|
|
572
|
+
from scipy import stats as scipy_stats
|
|
573
|
+
|
|
574
|
+
if effect_size is None:
|
|
575
|
+
raise ValueError("effect_size (w) required for chi2 power")
|
|
576
|
+
|
|
577
|
+
df = n_groups - 1 # Simplified: using n_groups as number of cells
|
|
578
|
+
|
|
579
|
+
if n is not None:
|
|
580
|
+
nc = effect_size**2 * n
|
|
581
|
+
chi2_crit = scipy_stats.chi2.ppf(1 - alpha, df)
|
|
582
|
+
power_val = 1 - scipy_stats.ncx2.cdf(chi2_crit, df, nc)
|
|
583
|
+
result = {
|
|
584
|
+
"mode": "power_calculation",
|
|
585
|
+
"power": power_val,
|
|
586
|
+
"n": n,
|
|
587
|
+
"df": df,
|
|
588
|
+
"effect_size_w": effect_size,
|
|
589
|
+
"alpha": alpha,
|
|
590
|
+
}
|
|
591
|
+
else:
|
|
592
|
+
# Binary search for n
|
|
593
|
+
n_min, n_max = 10, 10000
|
|
594
|
+
while n_max - n_min > 1:
|
|
595
|
+
n_mid = (n_min + n_max) // 2
|
|
596
|
+
nc = effect_size**2 * n_mid
|
|
597
|
+
chi2_crit = scipy_stats.chi2.ppf(1 - alpha, df)
|
|
598
|
+
power_val = 1 - scipy_stats.ncx2.cdf(chi2_crit, df, nc)
|
|
599
|
+
if power_val < power:
|
|
600
|
+
n_min = n_mid
|
|
601
|
+
else:
|
|
602
|
+
n_max = n_mid
|
|
603
|
+
|
|
604
|
+
result = {
|
|
605
|
+
"mode": "sample_size_calculation",
|
|
606
|
+
"required_n": n_max,
|
|
607
|
+
"df": df,
|
|
608
|
+
"effect_size_w": effect_size,
|
|
609
|
+
"target_power": power,
|
|
610
|
+
"alpha": alpha,
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
else:
|
|
614
|
+
raise ValueError(f"Unknown test_type: {test_type}")
|
|
615
|
+
|
|
616
|
+
return result
|
|
617
|
+
|
|
618
|
+
result = await loop.run_in_executor(None, do_power)
|
|
619
|
+
|
|
620
|
+
return {
|
|
621
|
+
"success": True,
|
|
622
|
+
"test_type": test_type,
|
|
623
|
+
**result,
|
|
624
|
+
"timestamp": datetime.now().isoformat(),
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
except Exception as e:
|
|
628
|
+
return {"success": False, "error": str(e)}
|
|
629
|
+
|
|
630
|
+
|
|
631
|
+
async def correct_pvalues_handler(
|
|
632
|
+
pvalues: list[float],
|
|
633
|
+
method: str = "fdr_bh",
|
|
634
|
+
alpha: float = 0.05,
|
|
635
|
+
) -> dict:
|
|
636
|
+
"""Apply multiple comparison correction to p-values."""
|
|
637
|
+
try:
|
|
638
|
+
loop = asyncio.get_event_loop()
|
|
639
|
+
|
|
640
|
+
def do_correct():
|
|
641
|
+
from statsmodels.stats.multitest import multipletests
|
|
642
|
+
|
|
643
|
+
# Map method names
|
|
644
|
+
method_map = {
|
|
645
|
+
"bonferroni": "bonferroni",
|
|
646
|
+
"fdr_bh": "fdr_bh",
|
|
647
|
+
"fdr_by": "fdr_by",
|
|
648
|
+
"holm": "holm",
|
|
649
|
+
"sidak": "sidak",
|
|
650
|
+
}
|
|
651
|
+
sm_method = method_map.get(method, "fdr_bh")
|
|
652
|
+
|
|
653
|
+
pvals = np.array(pvalues)
|
|
654
|
+
reject, pvals_corrected, _, _ = multipletests(
|
|
655
|
+
pvals, alpha=alpha, method=sm_method
|
|
656
|
+
)
|
|
657
|
+
|
|
658
|
+
return {
|
|
659
|
+
"original_pvalues": pvalues,
|
|
660
|
+
"corrected_pvalues": pvals_corrected.tolist(),
|
|
661
|
+
"reject_null": reject.tolist(),
|
|
662
|
+
"n_significant": int(reject.sum()),
|
|
663
|
+
"n_tests": len(pvalues),
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
result = await loop.run_in_executor(None, do_correct)
|
|
667
|
+
|
|
668
|
+
return {
|
|
669
|
+
"success": True,
|
|
670
|
+
"method": method,
|
|
671
|
+
"alpha": alpha,
|
|
672
|
+
**result,
|
|
673
|
+
"timestamp": datetime.now().isoformat(),
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
except ImportError:
|
|
677
|
+
# Fallback implementation without statsmodels
|
|
678
|
+
try:
|
|
679
|
+
n = len(pvalues)
|
|
680
|
+
pvals = np.array(pvalues)
|
|
681
|
+
|
|
682
|
+
if method == "bonferroni":
|
|
683
|
+
corrected = np.minimum(pvals * n, 1.0)
|
|
684
|
+
elif method == "holm":
|
|
685
|
+
sorted_idx = np.argsort(pvals)
|
|
686
|
+
corrected = np.empty(n)
|
|
687
|
+
cummax = 0.0
|
|
688
|
+
for rank, idx in enumerate(sorted_idx, start=1):
|
|
689
|
+
adj = min((n - rank + 1) * pvals[idx], 1.0)
|
|
690
|
+
adj = max(adj, cummax)
|
|
691
|
+
corrected[idx] = adj
|
|
692
|
+
cummax = adj
|
|
693
|
+
elif method == "fdr_bh":
|
|
694
|
+
sorted_idx = np.argsort(pvals)
|
|
695
|
+
corrected = np.empty(n)
|
|
696
|
+
prev = 1.0
|
|
697
|
+
for rank in range(n, 0, -1):
|
|
698
|
+
idx = sorted_idx[rank - 1]
|
|
699
|
+
bh = pvals[idx] * n / rank
|
|
700
|
+
val = min(bh, prev, 1.0)
|
|
701
|
+
corrected[idx] = val
|
|
702
|
+
prev = val
|
|
703
|
+
elif method == "sidak":
|
|
704
|
+
corrected = 1 - (1 - pvals) ** n
|
|
705
|
+
else:
|
|
706
|
+
corrected = pvals
|
|
707
|
+
|
|
708
|
+
return {
|
|
709
|
+
"success": True,
|
|
710
|
+
"method": method,
|
|
711
|
+
"alpha": alpha,
|
|
712
|
+
"original_pvalues": pvalues,
|
|
713
|
+
"corrected_pvalues": corrected.tolist(),
|
|
714
|
+
"reject_null": (corrected < alpha).tolist(),
|
|
715
|
+
"n_significant": int((corrected < alpha).sum()),
|
|
716
|
+
"n_tests": n,
|
|
717
|
+
"timestamp": datetime.now().isoformat(),
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
except Exception as e:
|
|
721
|
+
return {"success": False, "error": str(e)}
|
|
722
|
+
|
|
723
|
+
except Exception as e:
|
|
724
|
+
return {"success": False, "error": str(e)}
|
|
725
|
+
|
|
726
|
+
|
|
727
|
+
async def describe_handler(
|
|
728
|
+
data: list[float],
|
|
729
|
+
percentiles: list[float] | None = None,
|
|
730
|
+
) -> dict:
|
|
731
|
+
"""Calculate descriptive statistics for data."""
|
|
732
|
+
try:
|
|
733
|
+
loop = asyncio.get_event_loop()
|
|
734
|
+
|
|
735
|
+
def do_describe():
|
|
736
|
+
arr = np.array(data, dtype=float)
|
|
737
|
+
arr = arr[~np.isnan(arr)] # Remove NaN
|
|
738
|
+
|
|
739
|
+
if len(arr) == 0:
|
|
740
|
+
return {"error": "No valid data points"}
|
|
741
|
+
|
|
742
|
+
percs = percentiles or [25, 50, 75]
|
|
743
|
+
percentile_values = np.percentile(arr, percs)
|
|
744
|
+
|
|
745
|
+
result = {
|
|
746
|
+
"n": int(len(arr)),
|
|
747
|
+
"mean": float(np.mean(arr)),
|
|
748
|
+
"std": float(np.std(arr, ddof=1)) if len(arr) > 1 else 0.0,
|
|
749
|
+
"var": float(np.var(arr, ddof=1)) if len(arr) > 1 else 0.0,
|
|
750
|
+
"sem": (
|
|
751
|
+
float(np.std(arr, ddof=1) / np.sqrt(len(arr)))
|
|
752
|
+
if len(arr) > 1
|
|
753
|
+
else 0.0
|
|
754
|
+
),
|
|
755
|
+
"min": float(np.min(arr)),
|
|
756
|
+
"max": float(np.max(arr)),
|
|
757
|
+
"range": float(np.max(arr) - np.min(arr)),
|
|
758
|
+
"median": float(np.median(arr)),
|
|
759
|
+
"percentiles": {
|
|
760
|
+
str(int(p)): float(v) for p, v in zip(percs, percentile_values)
|
|
761
|
+
},
|
|
762
|
+
"iqr": float(np.percentile(arr, 75) - np.percentile(arr, 25)),
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
# Add skewness and kurtosis if scipy available
|
|
766
|
+
try:
|
|
767
|
+
from scipy import stats as scipy_stats
|
|
768
|
+
|
|
769
|
+
result["skewness"] = float(scipy_stats.skew(arr))
|
|
770
|
+
result["kurtosis"] = float(scipy_stats.kurtosis(arr))
|
|
771
|
+
except ImportError:
|
|
772
|
+
pass
|
|
773
|
+
|
|
774
|
+
return result
|
|
775
|
+
|
|
776
|
+
result = await loop.run_in_executor(None, do_describe)
|
|
777
|
+
|
|
778
|
+
return {
|
|
779
|
+
"success": True,
|
|
780
|
+
**result,
|
|
781
|
+
"timestamp": datetime.now().isoformat(),
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
except Exception as e:
|
|
785
|
+
return {"success": False, "error": str(e)}
|
|
786
|
+
|
|
787
|
+
|
|
788
|
+
async def effect_size_handler(
|
|
789
|
+
group1: list[float],
|
|
790
|
+
group2: list[float],
|
|
791
|
+
measure: str = "cohens_d",
|
|
792
|
+
pooled: bool = True,
|
|
793
|
+
) -> dict:
|
|
794
|
+
"""Calculate effect size between groups."""
|
|
795
|
+
try:
|
|
796
|
+
from scitex.stats.effect_sizes import (
|
|
797
|
+
cliffs_delta,
|
|
798
|
+
cohens_d,
|
|
799
|
+
interpret_cliffs_delta,
|
|
800
|
+
interpret_cohens_d,
|
|
801
|
+
)
|
|
802
|
+
|
|
803
|
+
loop = asyncio.get_event_loop()
|
|
804
|
+
|
|
805
|
+
def do_effect_size():
|
|
806
|
+
g1 = np.array(group1, dtype=float)
|
|
807
|
+
g2 = np.array(group2, dtype=float)
|
|
808
|
+
|
|
809
|
+
result = {}
|
|
810
|
+
|
|
811
|
+
if measure == "cohens_d":
|
|
812
|
+
d = cohens_d(g1, g2)
|
|
813
|
+
result = {
|
|
814
|
+
"measure": "Cohen's d",
|
|
815
|
+
"value": float(d),
|
|
816
|
+
"interpretation": interpret_cohens_d(d),
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
elif measure == "hedges_g":
|
|
820
|
+
# Hedges' g is Cohen's d with bias correction
|
|
821
|
+
d = cohens_d(g1, g2)
|
|
822
|
+
n1, n2 = len(g1), len(g2)
|
|
823
|
+
correction = 1 - (3 / (4 * (n1 + n2) - 9))
|
|
824
|
+
g = d * correction
|
|
825
|
+
result = {
|
|
826
|
+
"measure": "Hedges' g",
|
|
827
|
+
"value": float(g),
|
|
828
|
+
"interpretation": interpret_cohens_d(g), # Same thresholds
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
elif measure == "glass_delta":
|
|
832
|
+
# Glass's delta uses only control group std
|
|
833
|
+
mean_diff = np.mean(g1) - np.mean(g2)
|
|
834
|
+
delta = mean_diff / np.std(g2, ddof=1)
|
|
835
|
+
result = {
|
|
836
|
+
"measure": "Glass's delta",
|
|
837
|
+
"value": float(delta),
|
|
838
|
+
"interpretation": interpret_cohens_d(delta),
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
elif measure == "cliffs_delta":
|
|
842
|
+
delta = cliffs_delta(g1, g2)
|
|
843
|
+
result = {
|
|
844
|
+
"measure": "Cliff's delta",
|
|
845
|
+
"value": float(delta),
|
|
846
|
+
"interpretation": interpret_cliffs_delta(delta),
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
else:
|
|
850
|
+
raise ValueError(f"Unknown measure: {measure}")
|
|
851
|
+
|
|
852
|
+
# Add confidence interval approximation for Cohen's d
|
|
853
|
+
if measure in ["cohens_d", "hedges_g", "glass_delta"]:
|
|
854
|
+
n1, n2 = len(g1), len(g2)
|
|
855
|
+
se = np.sqrt(
|
|
856
|
+
(n1 + n2) / (n1 * n2) + result["value"] ** 2 / (2 * (n1 + n2))
|
|
857
|
+
)
|
|
858
|
+
result["ci_lower"] = float(result["value"] - 1.96 * se)
|
|
859
|
+
result["ci_upper"] = float(result["value"] + 1.96 * se)
|
|
860
|
+
|
|
861
|
+
return result
|
|
862
|
+
|
|
863
|
+
result = await loop.run_in_executor(None, do_effect_size)
|
|
864
|
+
|
|
865
|
+
return {
|
|
866
|
+
"success": True,
|
|
867
|
+
"group1_n": len(group1),
|
|
868
|
+
"group2_n": len(group2),
|
|
869
|
+
**result,
|
|
870
|
+
"timestamp": datetime.now().isoformat(),
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
except Exception as e:
|
|
874
|
+
return {"success": False, "error": str(e)}
|
|
875
|
+
|
|
876
|
+
|
|
877
|
+
async def normality_test_handler(
|
|
878
|
+
data: list[float],
|
|
879
|
+
method: str = "shapiro",
|
|
880
|
+
) -> dict:
|
|
881
|
+
"""Test whether data follows a normal distribution."""
|
|
882
|
+
try:
|
|
883
|
+
from scipy import stats as scipy_stats
|
|
884
|
+
|
|
885
|
+
loop = asyncio.get_event_loop()
|
|
886
|
+
|
|
887
|
+
def do_normality():
|
|
888
|
+
arr = np.array(data, dtype=float)
|
|
889
|
+
arr = arr[~np.isnan(arr)]
|
|
890
|
+
|
|
891
|
+
if len(arr) < 3:
|
|
892
|
+
return {"error": "Need at least 3 data points"}
|
|
893
|
+
|
|
894
|
+
result = {}
|
|
895
|
+
|
|
896
|
+
if method == "shapiro":
|
|
897
|
+
stat, p_value = scipy_stats.shapiro(arr)
|
|
898
|
+
result = {
|
|
899
|
+
"test": "Shapiro-Wilk",
|
|
900
|
+
"statistic": float(stat),
|
|
901
|
+
"statistic_name": "W",
|
|
902
|
+
"p_value": float(p_value),
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
elif method == "dagostino":
|
|
906
|
+
if len(arr) < 8:
|
|
907
|
+
return {"error": "D'Agostino test requires at least 8 samples"}
|
|
908
|
+
stat, p_value = scipy_stats.normaltest(arr)
|
|
909
|
+
result = {
|
|
910
|
+
"test": "D'Agostino-Pearson",
|
|
911
|
+
"statistic": float(stat),
|
|
912
|
+
"statistic_name": "K2",
|
|
913
|
+
"p_value": float(p_value),
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
elif method == "anderson":
|
|
917
|
+
res = scipy_stats.anderson(arr, dist="norm")
|
|
918
|
+
# Use 5% significance level
|
|
919
|
+
idx = 2 # Index for 5% level
|
|
920
|
+
result = {
|
|
921
|
+
"test": "Anderson-Darling",
|
|
922
|
+
"statistic": float(res.statistic),
|
|
923
|
+
"statistic_name": "A2",
|
|
924
|
+
"critical_value_5pct": float(res.critical_values[idx]),
|
|
925
|
+
"normal": bool(res.statistic < res.critical_values[idx]),
|
|
926
|
+
}
|
|
927
|
+
|
|
928
|
+
elif method == "lilliefors":
|
|
929
|
+
try:
|
|
930
|
+
from statsmodels.stats.diagnostic import lilliefors
|
|
931
|
+
|
|
932
|
+
stat, p_value = lilliefors(arr, dist="norm")
|
|
933
|
+
result = {
|
|
934
|
+
"test": "Lilliefors",
|
|
935
|
+
"statistic": float(stat),
|
|
936
|
+
"statistic_name": "D",
|
|
937
|
+
"p_value": float(p_value),
|
|
938
|
+
}
|
|
939
|
+
except ImportError:
|
|
940
|
+
return {"error": "statsmodels required for Lilliefors test"}
|
|
941
|
+
|
|
942
|
+
else:
|
|
943
|
+
raise ValueError(f"Unknown method: {method}")
|
|
944
|
+
|
|
945
|
+
# Add interpretation
|
|
946
|
+
if "p_value" in result:
|
|
947
|
+
result["is_normal"] = result["p_value"] >= 0.05
|
|
948
|
+
result["interpretation"] = (
|
|
949
|
+
"Data appears normally distributed (p >= 0.05)"
|
|
950
|
+
if result["is_normal"]
|
|
951
|
+
else "Data deviates from normal distribution (p < 0.05)"
|
|
952
|
+
)
|
|
953
|
+
|
|
954
|
+
return result
|
|
955
|
+
|
|
956
|
+
result = await loop.run_in_executor(None, do_normality)
|
|
957
|
+
|
|
958
|
+
return {
|
|
959
|
+
"success": True,
|
|
960
|
+
"method": method,
|
|
961
|
+
"n": len(data),
|
|
962
|
+
**result,
|
|
963
|
+
"timestamp": datetime.now().isoformat(),
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
except Exception as e:
|
|
967
|
+
return {"success": False, "error": str(e)}
|
|
968
|
+
|
|
969
|
+
|
|
970
|
+
async def posthoc_test_handler(
|
|
971
|
+
groups: list[list[float]],
|
|
972
|
+
group_names: list[str] | None = None,
|
|
973
|
+
method: str = "tukey",
|
|
974
|
+
control_group: int = 0,
|
|
975
|
+
) -> dict:
|
|
976
|
+
"""Run post-hoc pairwise comparisons."""
|
|
977
|
+
try:
|
|
978
|
+
loop = asyncio.get_event_loop()
|
|
979
|
+
|
|
980
|
+
def do_posthoc():
|
|
981
|
+
group_arrays = [np.array(g, dtype=float) for g in groups]
|
|
982
|
+
names = group_names or [f"Group_{i + 1}" for i in range(len(groups))]
|
|
983
|
+
|
|
984
|
+
comparisons = []
|
|
985
|
+
|
|
986
|
+
if method == "tukey":
|
|
987
|
+
from scipy import stats as scipy_stats
|
|
988
|
+
|
|
989
|
+
# All pairwise comparisons with Tukey HSD approximation
|
|
990
|
+
all_data = np.concatenate(group_arrays)
|
|
991
|
+
group_labels = np.concatenate(
|
|
992
|
+
[[names[i]] * len(g) for i, g in enumerate(group_arrays)]
|
|
993
|
+
)
|
|
994
|
+
|
|
995
|
+
# Use statsmodels if available, otherwise manual calculation
|
|
996
|
+
try:
|
|
997
|
+
from statsmodels.stats.multicomp import pairwise_tukeyhsd
|
|
998
|
+
|
|
999
|
+
tukey = pairwise_tukeyhsd(all_data, group_labels)
|
|
1000
|
+
|
|
1001
|
+
for i in range(len(tukey.summary().data) - 1):
|
|
1002
|
+
row = tukey.summary().data[i + 1]
|
|
1003
|
+
comparisons.append(
|
|
1004
|
+
{
|
|
1005
|
+
"group1": str(row[0]),
|
|
1006
|
+
"group2": str(row[1]),
|
|
1007
|
+
"mean_diff": float(row[2]),
|
|
1008
|
+
"p_adj": float(row[3]),
|
|
1009
|
+
"ci_lower": float(row[4]),
|
|
1010
|
+
"ci_upper": float(row[5]),
|
|
1011
|
+
"reject": bool(row[6]),
|
|
1012
|
+
}
|
|
1013
|
+
)
|
|
1014
|
+
except ImportError:
|
|
1015
|
+
# Fallback: Bonferroni-corrected t-tests
|
|
1016
|
+
n_comparisons = len(groups) * (len(groups) - 1) // 2
|
|
1017
|
+
for i in range(len(groups)):
|
|
1018
|
+
for j in range(i + 1, len(groups)):
|
|
1019
|
+
stat, p = scipy_stats.ttest_ind(
|
|
1020
|
+
group_arrays[i], group_arrays[j]
|
|
1021
|
+
)
|
|
1022
|
+
p_adj = min(p * n_comparisons, 1.0)
|
|
1023
|
+
comparisons.append(
|
|
1024
|
+
{
|
|
1025
|
+
"group1": names[i],
|
|
1026
|
+
"group2": names[j],
|
|
1027
|
+
"mean_diff": float(
|
|
1028
|
+
np.mean(group_arrays[i])
|
|
1029
|
+
- np.mean(group_arrays[j])
|
|
1030
|
+
),
|
|
1031
|
+
"t_statistic": float(stat),
|
|
1032
|
+
"p_value": float(p),
|
|
1033
|
+
"p_adj": float(p_adj),
|
|
1034
|
+
"reject": p_adj < 0.05,
|
|
1035
|
+
}
|
|
1036
|
+
)
|
|
1037
|
+
|
|
1038
|
+
elif method == "dunnett":
|
|
1039
|
+
from scipy import stats as scipy_stats
|
|
1040
|
+
|
|
1041
|
+
# Compare all groups to control
|
|
1042
|
+
control = group_arrays[control_group]
|
|
1043
|
+
n_comparisons = len(groups) - 1
|
|
1044
|
+
|
|
1045
|
+
for i, (name, group) in enumerate(zip(names, group_arrays)):
|
|
1046
|
+
if i == control_group:
|
|
1047
|
+
continue
|
|
1048
|
+
stat, p = scipy_stats.ttest_ind(group, control)
|
|
1049
|
+
p_adj = min(p * n_comparisons, 1.0)
|
|
1050
|
+
comparisons.append(
|
|
1051
|
+
{
|
|
1052
|
+
"group": name,
|
|
1053
|
+
"vs_control": names[control_group],
|
|
1054
|
+
"mean_diff": float(np.mean(group) - np.mean(control)),
|
|
1055
|
+
"t_statistic": float(stat),
|
|
1056
|
+
"p_value": float(p),
|
|
1057
|
+
"p_adj": float(p_adj),
|
|
1058
|
+
"reject": p_adj < 0.05,
|
|
1059
|
+
}
|
|
1060
|
+
)
|
|
1061
|
+
|
|
1062
|
+
elif method == "games_howell":
|
|
1063
|
+
from scipy import stats as scipy_stats
|
|
1064
|
+
|
|
1065
|
+
# Games-Howell doesn't assume equal variances
|
|
1066
|
+
for i in range(len(groups)):
|
|
1067
|
+
for j in range(i + 1, len(groups)):
|
|
1068
|
+
g1, g2 = group_arrays[i], group_arrays[j]
|
|
1069
|
+
n1, n2 = len(g1), len(g2)
|
|
1070
|
+
m1, m2 = np.mean(g1), np.mean(g2)
|
|
1071
|
+
v1, v2 = np.var(g1, ddof=1), np.var(g2, ddof=1)
|
|
1072
|
+
|
|
1073
|
+
se = np.sqrt(v1 / n1 + v2 / n2)
|
|
1074
|
+
t_stat = (m1 - m2) / se
|
|
1075
|
+
|
|
1076
|
+
# Welch-Satterthwaite df
|
|
1077
|
+
df = (v1 / n1 + v2 / n2) ** 2 / (
|
|
1078
|
+
(v1 / n1) ** 2 / (n1 - 1) + (v2 / n2) ** 2 / (n2 - 1)
|
|
1079
|
+
)
|
|
1080
|
+
|
|
1081
|
+
p = 2 * (1 - scipy_stats.t.cdf(abs(t_stat), df))
|
|
1082
|
+
n_comparisons = len(groups) * (len(groups) - 1) // 2
|
|
1083
|
+
p_adj = min(p * n_comparisons, 1.0)
|
|
1084
|
+
|
|
1085
|
+
comparisons.append(
|
|
1086
|
+
{
|
|
1087
|
+
"group1": names[i],
|
|
1088
|
+
"group2": names[j],
|
|
1089
|
+
"mean_diff": float(m1 - m2),
|
|
1090
|
+
"t_statistic": float(t_stat),
|
|
1091
|
+
"df": float(df),
|
|
1092
|
+
"p_value": float(p),
|
|
1093
|
+
"p_adj": float(p_adj),
|
|
1094
|
+
"reject": p_adj < 0.05,
|
|
1095
|
+
}
|
|
1096
|
+
)
|
|
1097
|
+
|
|
1098
|
+
elif method == "dunn":
|
|
1099
|
+
from scipy import stats as scipy_stats
|
|
1100
|
+
|
|
1101
|
+
# Dunn's test for Kruskal-Wallis post-hoc
|
|
1102
|
+
all_data = np.concatenate(group_arrays)
|
|
1103
|
+
ranks = scipy_stats.rankdata(all_data)
|
|
1104
|
+
|
|
1105
|
+
# Assign ranks to groups
|
|
1106
|
+
idx = 0
|
|
1107
|
+
group_ranks = []
|
|
1108
|
+
for g in group_arrays:
|
|
1109
|
+
group_ranks.append(ranks[idx : idx + len(g)])
|
|
1110
|
+
idx += len(g)
|
|
1111
|
+
|
|
1112
|
+
n_total = len(all_data)
|
|
1113
|
+
n_comparisons = len(groups) * (len(groups) - 1) // 2
|
|
1114
|
+
|
|
1115
|
+
for i in range(len(groups)):
|
|
1116
|
+
for j in range(i + 1, len(groups)):
|
|
1117
|
+
n_i, n_j = len(group_arrays[i]), len(group_arrays[j])
|
|
1118
|
+
r_i, r_j = np.mean(group_ranks[i]), np.mean(group_ranks[j])
|
|
1119
|
+
|
|
1120
|
+
se = np.sqrt(n_total * (n_total + 1) / 12 * (1 / n_i + 1 / n_j))
|
|
1121
|
+
z = (r_i - r_j) / se
|
|
1122
|
+
p = 2 * (1 - scipy_stats.norm.cdf(abs(z)))
|
|
1123
|
+
p_adj = min(p * n_comparisons, 1.0)
|
|
1124
|
+
|
|
1125
|
+
comparisons.append(
|
|
1126
|
+
{
|
|
1127
|
+
"group1": names[i],
|
|
1128
|
+
"group2": names[j],
|
|
1129
|
+
"mean_rank_diff": float(r_i - r_j),
|
|
1130
|
+
"z_statistic": float(z),
|
|
1131
|
+
"p_value": float(p),
|
|
1132
|
+
"p_adj": float(p_adj),
|
|
1133
|
+
"reject": p_adj < 0.05,
|
|
1134
|
+
}
|
|
1135
|
+
)
|
|
1136
|
+
|
|
1137
|
+
else:
|
|
1138
|
+
raise ValueError(f"Unknown method: {method}")
|
|
1139
|
+
|
|
1140
|
+
return comparisons
|
|
1141
|
+
|
|
1142
|
+
comparisons = await loop.run_in_executor(None, do_posthoc)
|
|
1143
|
+
|
|
1144
|
+
return {
|
|
1145
|
+
"success": True,
|
|
1146
|
+
"method": method,
|
|
1147
|
+
"n_groups": len(groups),
|
|
1148
|
+
"n_comparisons": len(comparisons),
|
|
1149
|
+
"comparisons": comparisons,
|
|
1150
|
+
"timestamp": datetime.now().isoformat(),
|
|
1151
|
+
}
|
|
1152
|
+
|
|
1153
|
+
except Exception as e:
|
|
1154
|
+
return {"success": False, "error": str(e)}
|
|
1155
|
+
|
|
1156
|
+
|
|
1157
|
+
async def p_to_stars_handler(
|
|
1158
|
+
p_value: float,
|
|
1159
|
+
thresholds: list[float] | None = None,
|
|
1160
|
+
) -> dict:
|
|
1161
|
+
"""Convert p-value to significance stars."""
|
|
1162
|
+
try:
|
|
1163
|
+
thresh = thresholds or [0.001, 0.01, 0.05]
|
|
1164
|
+
|
|
1165
|
+
if p_value < thresh[0]:
|
|
1166
|
+
stars = "***"
|
|
1167
|
+
significance = f"p < {thresh[0]}"
|
|
1168
|
+
elif p_value < thresh[1]:
|
|
1169
|
+
stars = "**"
|
|
1170
|
+
significance = f"p < {thresh[1]}"
|
|
1171
|
+
elif p_value < thresh[2]:
|
|
1172
|
+
stars = "*"
|
|
1173
|
+
significance = f"p < {thresh[2]}"
|
|
1174
|
+
else:
|
|
1175
|
+
stars = "ns"
|
|
1176
|
+
significance = f"p >= {thresh[2]} (not significant)"
|
|
1177
|
+
|
|
1178
|
+
return {
|
|
1179
|
+
"success": True,
|
|
1180
|
+
"p_value": p_value,
|
|
1181
|
+
"stars": stars,
|
|
1182
|
+
"significance": significance,
|
|
1183
|
+
"thresholds": thresh,
|
|
1184
|
+
"timestamp": datetime.now().isoformat(),
|
|
1185
|
+
}
|
|
1186
|
+
|
|
1187
|
+
except Exception as e:
|
|
1188
|
+
return {"success": False, "error": str(e)}
|
|
1189
|
+
|
|
1190
|
+
|
|
1191
|
+
# EOF
|