scitex 2.1.2__py3-none-any.whl → 2.4.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1399) hide show
  1. scitex/__init__.py +90 -10
  2. scitex/__main__.py +0 -110
  3. scitex/__version__.py +1 -1
  4. scitex/_optional_deps.py +0 -0
  5. scitex/ai/_gen_ai/_BaseGenAI.py +1 -1
  6. scitex/ai/classification/examples/timeseries_cv_demo.py +0 -0
  7. scitex/ai/classification/reporters/_ClassificationReporter.py +1 -1
  8. scitex/ai/classification/reporters/__init__.py +0 -0
  9. scitex/ai/classification/reporters/reporter_utils/_Plotter.py +1 -1
  10. scitex/ai/classification/reporters/reporter_utils/__init__.py +0 -0
  11. scitex/ai/classification/reporters/reporter_utils/aggregation.py +0 -0
  12. scitex/ai/classification/reporters/reporter_utils/data_models.py +0 -0
  13. scitex/ai/classification/reporters/reporter_utils/reporting.py +0 -0
  14. scitex/ai/classification/reporters/reporter_utils/validation.py +0 -0
  15. scitex/ai/classification/timeseries/_TimeSeriesBlockingSplit.py +2 -2
  16. scitex/ai/classification/timeseries/_TimeSeriesCalendarSplit.py +2 -2
  17. scitex/ai/classification/timeseries/_TimeSeriesSlidingWindowSplit.py +6 -6
  18. scitex/ai/classification/timeseries/_TimeSeriesSlidingWindowSplit_v01-not-using-n_splits.py +6 -6
  19. scitex/ai/classification/timeseries/_TimeSeriesStratifiedSplit.py +2 -2
  20. scitex/ai/classification/timeseries/_normalize_timestamp.py +1 -1
  21. scitex/ai/feature_extraction/vit.py +1 -1
  22. scitex/ai/feature_selection/__init__.py +0 -0
  23. scitex/ai/feature_selection/feature_selection.py +0 -0
  24. scitex/ai/loss/multi_task_loss.py +1 -1
  25. scitex/ai/metrics/_calc_bacc.py +0 -0
  26. scitex/ai/metrics/_calc_bacc_from_conf_mat.py +0 -0
  27. scitex/ai/metrics/_calc_clf_report.py +0 -0
  28. scitex/ai/metrics/_calc_conf_mat.py +0 -0
  29. scitex/ai/metrics/_calc_feature_importance.py +0 -0
  30. scitex/ai/metrics/_calc_mcc.py +0 -0
  31. scitex/ai/metrics/_calc_pre_rec_auc.py +0 -0
  32. scitex/ai/metrics/_calc_roc_auc.py +0 -0
  33. scitex/ai/metrics/_calc_seizure_prediction_metrics.py +1 -1
  34. scitex/ai/metrics/_normalize_labels.py +0 -0
  35. scitex/ai/plt/__init__.py +2 -2
  36. scitex/ai/plt/_plot_feature_importance.py +1 -1
  37. scitex/ai/plt/_plot_learning_curve.py +1 -1
  38. scitex/ai/plt/_plot_optuna_study.py +1 -1
  39. scitex/ai/plt/_plot_pre_rec_curve.py +1 -1
  40. scitex/ai/plt/_plot_roc_curve.py +1 -1
  41. scitex/ai/plt/{_plot_conf_mat.py → _stx_conf_mat.py} +4 -4
  42. scitex/ai/sampling/undersample.py +1 -1
  43. scitex/ai/training/_LearningCurveLogger.py +1 -1
  44. scitex/benchmark/__init__.py +3 -3
  45. scitex/benchmark/benchmark.py +0 -0
  46. scitex/benchmark/monitor.py +0 -0
  47. scitex/benchmark/profiler.py +0 -0
  48. scitex/browser/__init__.py +0 -0
  49. scitex/browser/auth/__init__.py +35 -0
  50. scitex/browser/auth/google.py +381 -0
  51. scitex/browser/automation/CookieHandler.py +1 -1
  52. scitex/browser/automation/__init__.py +0 -0
  53. scitex/browser/collaboration/__init__.py +5 -0
  54. scitex/browser/collaboration/auth_helpers.py +0 -0
  55. scitex/browser/collaboration/collaborative_agent.py +0 -0
  56. scitex/browser/collaboration/credential_manager.py +0 -0
  57. scitex/browser/collaboration/interactive_panel.py +0 -0
  58. scitex/browser/collaboration/persistent_browser.py +0 -0
  59. scitex/browser/collaboration/shared_session.py +0 -0
  60. scitex/browser/collaboration/standard_interactions.py +0 -0
  61. scitex/browser/collaboration/visual_feedback.py +0 -0
  62. scitex/browser/core/BrowserMixin.py +1 -1
  63. scitex/browser/core/ChromeProfileManager.py +1 -1
  64. scitex/browser/core/__init__.py +0 -0
  65. scitex/browser/debugging/_browser_logger.py +1 -1
  66. scitex/browser/debugging/_highlight_element.py +1 -1
  67. scitex/browser/debugging/_show_grid.py +1 -1
  68. scitex/browser/interaction/click_center.py +1 -1
  69. scitex/browser/interaction/click_with_fallbacks.py +1 -1
  70. scitex/browser/interaction/close_popups.py +1 -1
  71. scitex/browser/interaction/fill_with_fallbacks.py +1 -1
  72. scitex/browser/pdf/__init__.py +0 -0
  73. scitex/browser/pdf/click_download_for_chrome_pdf_viewer.py +1 -1
  74. scitex/browser/pdf/detect_chrome_pdf_viewer.py +1 -1
  75. scitex/browser/remote/CaptchaHandler.py +0 -0
  76. scitex/browser/remote/ZenRowsAPIClient.py +0 -0
  77. scitex/browser/remote/__init__.py +0 -0
  78. scitex/browser/stealth/HumanBehavior.py +1 -1
  79. scitex/browser/stealth/StealthManager.py +1 -1
  80. scitex/browser/stealth/__init__.py +0 -0
  81. scitex/cli/__init__.py +0 -0
  82. scitex/cli/cloud.py +200 -9
  83. scitex/cli/main.py +139 -10
  84. scitex/cli/scholar.py +0 -0
  85. scitex/cli/security.py +109 -0
  86. scitex/cli/web.py +409 -0
  87. scitex/cli/writer.py +270 -0
  88. scitex/cloud/__init__.py +131 -0
  89. scitex/cloud/_matplotlib_hook.py +146 -0
  90. scitex/config/PriorityConfig.py +195 -0
  91. scitex/config/__init__.py +24 -0
  92. scitex/db/_delete_duplicates.py +1 -1
  93. scitex/db/_inspect_optimized.py +0 -0
  94. scitex/db/_postgresql/_PostgreSQL.py +1 -1
  95. scitex/db/_sqlite3/_SQLite3.py +1 -1
  96. scitex/decorators/__init__.py +9 -0
  97. scitex/dict/_DotDict.py +65 -138
  98. scitex/dict/__init__.py +1 -0
  99. scitex/dict/_flatten.py +2 -10
  100. scitex/dict/_listed_dict.py +2 -3
  101. scitex/dict/_pop_keys.py +2 -3
  102. scitex/dict/_replace.py +1 -3
  103. scitex/dict/_safe_merge.py +6 -16
  104. scitex/dict/_to_str.py +6 -3
  105. scitex/dsp/_demo_sig.py +1 -1
  106. scitex/dsp/_detect_ripples.py +1 -1
  107. scitex/dsp/_ensure_3d.py +1 -1
  108. scitex/dsp/_hilbert.py +2 -2
  109. scitex/dsp/_misc.py +1 -1
  110. scitex/dsp/_modulation_index.py +2 -2
  111. scitex/dsp/_pac.py +3 -3
  112. scitex/dsp/_psd.py +2 -2
  113. scitex/dsp/_resample.py +1 -1
  114. scitex/dsp/_transform.py +1 -1
  115. scitex/dsp/_wavelet.py +2 -2
  116. scitex/dsp/add_noise.py +1 -1
  117. scitex/dsp/filt.py +6 -6
  118. scitex/dsp/norm.py +1 -1
  119. scitex/dsp/reference.py +1 -1
  120. scitex/dsp/utils/_differential_bandpass_filters.py +3 -3
  121. scitex/dsp/utils/_ensure_3d.py +1 -1
  122. scitex/dsp/utils/_zero_pad.py +1 -1
  123. scitex/dsp/utils/filter.py +2 -2
  124. scitex/dt/_normalize_timestamp.py +1 -1
  125. scitex/gen/_check_host.py +1 -1
  126. scitex/gen/_deprecated_close.py +3 -3
  127. scitex/gen/_deprecated_start.py +1 -1
  128. scitex/gen/_norm.py +2 -2
  129. scitex/gen/_norm_cache.py +1 -1
  130. scitex/gen/_symlink.py +1 -1
  131. scitex/gen/_to_rank.py +1 -1
  132. scitex/gen/_transpose.py +1 -1
  133. scitex/git/__init__.py +0 -0
  134. scitex/git/_branch.py +5 -3
  135. scitex/git/_clone.py +35 -6
  136. scitex/git/_commit.py +3 -2
  137. scitex/git/_constants.py +0 -0
  138. scitex/git/_init.py +0 -0
  139. scitex/git/_remote.py +1 -1
  140. scitex/git/_result.py +0 -0
  141. scitex/git/_retry.py +0 -0
  142. scitex/git/_session.py +1 -1
  143. scitex/git/_types.py +0 -0
  144. scitex/git/_utils.py +0 -0
  145. scitex/git/_validation.py +0 -0
  146. scitex/git/_workflow.py +1 -1
  147. scitex/io/README.md +65 -1
  148. scitex/io/__init__.py +12 -0
  149. scitex/io/_glob.py +1 -1
  150. scitex/io/_load.py +59 -9
  151. scitex/io/_load_cache.py +0 -0
  152. scitex/io/_load_configs.py +9 -4
  153. scitex/io/_load_modules/_image.py +48 -4
  154. scitex/io/_load_modules/_pdf.py +95 -32
  155. scitex/io/_load_modules/_sqlite3.py +1 -1
  156. scitex/io/_metadata.py +298 -0
  157. scitex/io/_path.py +2 -2
  158. scitex/io/_qr_utils.py +75 -0
  159. scitex/io/_save.py +324 -45
  160. scitex/io/_save_modules/_image.py +92 -23
  161. scitex/io/_save_modules/_tex.py +1 -1
  162. scitex/io/memo.md +2827 -0
  163. scitex/io/utils/h5_to_zarr.py +1 -1
  164. scitex/linalg/_distance.py +2 -2
  165. scitex/linalg/_geometric_median.py +1 -1
  166. scitex/logging/README.md +1 -1
  167. scitex/logging/_Tee.py +2 -2
  168. scitex/logging/_context.py +0 -0
  169. scitex/logging/_formatters.py +9 -2
  170. scitex/logging/_handlers.py +0 -0
  171. scitex/logging/_levels.py +0 -0
  172. scitex/logging/_logger.py +59 -20
  173. scitex/logging/_print_capture.py +0 -0
  174. scitex/ml/__init__.py +1 -1
  175. scitex/nn/_Filters.py +6 -6
  176. scitex/nn/_Spectrogram.py +1 -1
  177. scitex/nn/_Wavelet.py +2 -2
  178. scitex/pd/_force_df.py +1 -1
  179. scitex/plt/README.md +26 -1
  180. scitex/plt/__init__.py +559 -8
  181. scitex/plt/_subplots/_AxesWrapper.py +2 -1
  182. scitex/plt/_subplots/_AxisWrapper.py +98 -50
  183. scitex/plt/_subplots/_AxisWrapperMixins/_AdjustmentMixin.py +93 -4
  184. scitex/plt/_subplots/_AxisWrapperMixins/_MatplotlibPlotMixin.py +572 -127
  185. scitex/plt/_subplots/_AxisWrapperMixins/_SeabornMixin.py +49 -8
  186. scitex/plt/_subplots/_AxisWrapperMixins/_UnitAwareMixin.py +2 -2
  187. scitex/plt/_subplots/_FigWrapper.py +104 -10
  188. scitex/plt/_subplots/_SubplotsWrapper.py +471 -26
  189. scitex/plt/_subplots/_export_as_csv.py +193 -57
  190. scitex/plt/_subplots/_export_as_csv_formatters/__init__.py +26 -16
  191. scitex/plt/_subplots/_export_as_csv_formatters/_format_annotate.py +0 -0
  192. scitex/plt/_subplots/_export_as_csv_formatters/_format_contourf.py +54 -0
  193. scitex/plt/_subplots/_export_as_csv_formatters/_format_hexbin.py +41 -0
  194. scitex/plt/_subplots/_export_as_csv_formatters/_format_hist2d.py +41 -0
  195. scitex/plt/_subplots/_export_as_csv_formatters/_format_imshow.py +59 -47
  196. scitex/plt/_subplots/_export_as_csv_formatters/_format_matshow.py +42 -0
  197. scitex/plt/_subplots/_export_as_csv_formatters/_format_pie.py +42 -0
  198. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot.py +72 -35
  199. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_box.py +1 -1
  200. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_imshow.py +40 -0
  201. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_kde.py +2 -2
  202. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_scatter.py +0 -0
  203. scitex/plt/_subplots/_export_as_csv_formatters/_format_quiver.py +53 -0
  204. scitex/plt/_subplots/_export_as_csv_formatters/_format_stem.py +42 -0
  205. scitex/plt/_subplots/_export_as_csv_formatters/_format_step.py +42 -0
  206. scitex/plt/_subplots/_export_as_csv_formatters/_format_streamplot.py +48 -0
  207. scitex/plt/_subplots/_export_as_csv_formatters/{_format_plot_conf_mat.py → _format_stx_conf_mat.py} +2 -2
  208. scitex/plt/_subplots/_export_as_csv_formatters/{_format_plot_ecdf.py → _format_stx_ecdf.py} +2 -2
  209. scitex/plt/_subplots/_export_as_csv_formatters/{_format_plot_fillv.py → _format_stx_fillv.py} +2 -2
  210. scitex/plt/_subplots/_export_as_csv_formatters/{_format_plot_heatmap.py → _format_stx_heatmap.py} +2 -2
  211. scitex/plt/_subplots/_export_as_csv_formatters/{_format_plot_image.py → _format_stx_image.py} +2 -2
  212. scitex/plt/_subplots/_export_as_csv_formatters/{_format_plot_joyplot.py → _format_stx_joyplot.py} +2 -2
  213. scitex/plt/_subplots/_export_as_csv_formatters/{_format_plot_line.py → _format_stx_line.py} +3 -3
  214. scitex/plt/_subplots/_export_as_csv_formatters/{_format_plot_mean_ci.py → _format_stx_mean_ci.py} +2 -2
  215. scitex/plt/_subplots/_export_as_csv_formatters/{_format_plot_mean_std.py → _format_stx_mean_std.py} +2 -2
  216. scitex/plt/_subplots/_export_as_csv_formatters/{_format_plot_median_iqr.py → _format_stx_median_iqr.py} +2 -2
  217. scitex/plt/_subplots/_export_as_csv_formatters/{_format_plot_raster.py → _format_stx_raster.py} +2 -2
  218. scitex/plt/_subplots/_export_as_csv_formatters/{_format_plot_rectangle.py → _format_stx_rectangle.py} +1 -1
  219. scitex/plt/_subplots/_export_as_csv_formatters/{_format_plot_scatter_hist.py → _format_stx_scatter_hist.py} +2 -2
  220. scitex/plt/_subplots/_export_as_csv_formatters/{_format_plot_shaded_line.py → _format_stx_shaded_line.py} +2 -2
  221. scitex/plt/_subplots/_export_as_csv_formatters/{_format_plot_violin.py → _format_stx_violin.py} +2 -2
  222. scitex/plt/_subplots/_export_as_csv_formatters/verify_formatters.py +23 -23
  223. scitex/plt/ax/__init__.py +25 -16
  224. scitex/plt/ax/_plot/__init__.py +32 -30
  225. scitex/plt/ax/_plot/_add_fitted_line.py +151 -0
  226. scitex/plt/ax/_plot/_plot_statistical_shaded_line.py +104 -76
  227. scitex/plt/ax/_plot/{_plot_conf_mat.py → _stx_conf_mat.py} +12 -12
  228. scitex/plt/ax/_plot/_stx_ecdf.py +109 -0
  229. scitex/plt/ax/_plot/{_plot_fillv.py → _stx_fillv.py} +7 -7
  230. scitex/plt/ax/_plot/_stx_heatmap.py +366 -0
  231. scitex/plt/ax/_plot/{_plot_image.py → _stx_image.py} +1 -1
  232. scitex/plt/ax/_plot/_stx_joyplot.py +113 -0
  233. scitex/plt/ax/_plot/{_plot_raster.py → _stx_raster.py} +37 -25
  234. scitex/plt/ax/_plot/{_plot_rectangle.py → _stx_rectangle.py} +10 -9
  235. scitex/plt/ax/_plot/{_plot_scatter_hist.py → _stx_scatter_hist.py} +1 -1
  236. scitex/plt/ax/_plot/_stx_shaded_line.py +215 -0
  237. scitex/plt/ax/_plot/{_plot_violin.py → _stx_violin.py} +13 -6
  238. scitex/plt/ax/_style/__init__.py +4 -0
  239. scitex/plt/ax/_style/_auto_scale_axis.py +195 -0
  240. scitex/plt/ax/_style/_format_units.py +103 -0
  241. scitex/plt/ax/_style/_set_ticks.py +2 -2
  242. scitex/plt/ax/_style/_style_barplot.py +69 -0
  243. scitex/plt/ax/_style/_style_boxplot.py +144 -0
  244. scitex/plt/ax/_style/_style_errorbar.py +82 -0
  245. scitex/plt/ax/_style/_style_scatter.py +82 -0
  246. scitex/plt/ax/_style/_style_suptitles.py +76 -0
  247. scitex/plt/ax/_style/_style_violinplot.py +109 -0
  248. scitex/plt/color/_PARAMS.py +2 -2
  249. scitex/plt/color/_colors.py +1 -1
  250. scitex/plt/color/_vizualize_colors.py +3 -3
  251. scitex/plt/styles/SCITEX_STYLE.yaml +104 -0
  252. scitex/plt/styles/__init__.py +57 -0
  253. scitex/plt/styles/_plot_defaults.py +209 -0
  254. scitex/plt/styles/_plot_postprocess.py +518 -0
  255. scitex/plt/styles/_style_loader.py +268 -0
  256. scitex/plt/styles/presets.py +208 -0
  257. scitex/plt/utils/__init__.py +21 -0
  258. scitex/plt/utils/_calc_bacc_from_conf_mat.py +1 -1
  259. scitex/plt/utils/_collect_figure_metadata.py +620 -0
  260. scitex/plt/utils/_colorbar.py +72 -10
  261. scitex/plt/utils/_configure_mpl.py +194 -68
  262. scitex/plt/utils/_crop.py +246 -0
  263. scitex/plt/utils/_dimension_viewer.py +437 -0
  264. scitex/plt/utils/_figure_from_axes_mm.py +353 -0
  265. scitex/plt/utils/_figure_mm.py +356 -0
  266. scitex/plt/utils/_get_actual_font.py +56 -0
  267. scitex/plt/utils/_units.py +123 -0
  268. scitex/{rng/README.md → repro/README_RandomStateManager.md} +2 -2
  269. scitex/{rng → repro}/_RandomStateManager.py +99 -10
  270. scitex/repro/__init__.py +32 -50
  271. scitex/repro/_gen_ID.py +84 -0
  272. scitex/repro/_gen_timestamp.py +78 -0
  273. scitex/repro/_hash_array.py +143 -0
  274. scitex/reproduce/__init__.py +2 -2
  275. scitex/resource/_get_specs.py +1 -1
  276. scitex/resource/_log_processor_usages.py +4 -4
  277. scitex/rng/__init__.py +20 -27
  278. scitex/scholar/auth/core/__init__.py +0 -0
  279. scitex/scholar/auth/gateway/__init__.py +0 -0
  280. scitex/scholar/auth/providers/OpenAthensAuthenticator.py +3 -3
  281. scitex/scholar/auth/providers/__init__.py +0 -0
  282. scitex/scholar/auth/session/__init__.py +0 -0
  283. scitex/scholar/auth/sso/BaseSSOAutomator.py +1 -1
  284. scitex/scholar/auth/sso/__init__.py +0 -0
  285. scitex/scholar/browser/utils/__init__.py +0 -0
  286. scitex/scholar/citation_graph/README.md +117 -0
  287. scitex/scholar/citation_graph/__init__.py +29 -0
  288. scitex/scholar/citation_graph/builder.py +214 -0
  289. scitex/scholar/citation_graph/database.py +239 -0
  290. scitex/scholar/citation_graph/example.py +96 -0
  291. scitex/scholar/citation_graph/models.py +80 -0
  292. scitex/scholar/cli/_CentralArgumentParser.py +0 -0
  293. scitex/scholar/cli/_argument_groups.py +0 -0
  294. scitex/scholar/cli/_doi_operations.py +0 -0
  295. scitex/scholar/cli/_url_utils.py +0 -0
  296. scitex/scholar/cli/handlers/__init__.py +0 -0
  297. scitex/scholar/cli/handlers/bibtex_handler.py +0 -0
  298. scitex/scholar/cli/handlers/doi_handler.py +0 -0
  299. scitex/scholar/cli/handlers/project_handler.py +0 -0
  300. scitex/scholar/cli/open_browser.py +0 -0
  301. scitex/scholar/cli/open_browser_auto.py +0 -0
  302. scitex/scholar/cli/open_browser_monitored.py +0 -0
  303. scitex/scholar/config/PublisherRules.py +0 -0
  304. scitex/scholar/config/core/_PathManager.py +42 -0
  305. scitex/scholar/config/default.yaml +1 -0
  306. scitex/scholar/core/__init__.py +0 -0
  307. scitex/scholar/docs/template.py +1 -1
  308. scitex/scholar/docs/to_claude/guidelines/python/env.md +1 -1
  309. scitex/scholar/docs/to_claude/guidelines/python/general.md +1 -1
  310. scitex/scholar/examples/07_storage_integration.py +1 -1
  311. scitex/scholar/examples/zotero_integration.py +0 -0
  312. scitex/scholar/impact_factor/estimation/ImpactFactorEstimationEngine.py +0 -0
  313. scitex/scholar/impact_factor/estimation/__init__.py +0 -0
  314. scitex/scholar/impact_factor/estimation/build_database.py +0 -0
  315. scitex/scholar/impact_factor/estimation/core/__init__.py +0 -0
  316. scitex/scholar/impact_factor/estimation/core/cache_manager.py +0 -0
  317. scitex/scholar/impact_factor/estimation/core/calculator.py +0 -0
  318. scitex/scholar/impact_factor/estimation/core/journal_matcher.py +0 -0
  319. scitex/scholar/impact_factor/jcr/ImpactFactorJCREngine.py +1 -1
  320. scitex/scholar/impact_factor/jcr/build_database.py +1 -1
  321. scitex/scholar/integration/__init__.py +0 -0
  322. scitex/scholar/integration/base.py +0 -0
  323. scitex/scholar/integration/mendeley/__init__.py +0 -0
  324. scitex/scholar/integration/mendeley/exporter.py +0 -0
  325. scitex/scholar/integration/mendeley/importer.py +0 -0
  326. scitex/scholar/integration/mendeley/linker.py +0 -0
  327. scitex/scholar/integration/mendeley/mapper.py +0 -0
  328. scitex/scholar/integration/zotero/__init__.py +0 -0
  329. scitex/scholar/integration/zotero/__main__.py +0 -0
  330. scitex/scholar/integration/zotero/exporter.py +0 -0
  331. scitex/scholar/integration/zotero/importer.py +0 -0
  332. scitex/scholar/integration/zotero/linker.py +0 -0
  333. scitex/scholar/integration/zotero/mapper.py +0 -0
  334. scitex/scholar/metadata_engines/ScholarEngine.py +9 -1
  335. scitex/scholar/metadata_engines/individual/ArXivEngine.py +4 -1
  336. scitex/scholar/metadata_engines/individual/CrossRefEngine.py +20 -3
  337. scitex/scholar/metadata_engines/individual/CrossRefLocalEngine.py +82 -21
  338. scitex/scholar/metadata_engines/individual/__init__.py +0 -0
  339. scitex/scholar/metadata_engines/utils/_URLDOIExtractor.py +19 -1
  340. scitex/scholar/pdf_download/ScholarPDFDownloader.py +1 -1
  341. scitex/scholar/pdf_download/__init__.py +0 -0
  342. scitex/scholar/pipelines/ScholarPipelineBibTeX.py +1 -1
  343. scitex/scholar/pipelines/ScholarPipelineMetadataParallel.py +0 -0
  344. scitex/scholar/pipelines/ScholarPipelineMetadataSingle.py +102 -7
  345. scitex/scholar/pipelines/ScholarPipelineParallel.py +1 -1
  346. scitex/scholar/pipelines/ScholarPipelineSearchParallel.py +9 -6
  347. scitex/scholar/pipelines/ScholarPipelineSearchSingle.py +9 -6
  348. scitex/scholar/pipelines/ScholarPipelineSingle.py +1 -1
  349. scitex/scholar/pipelines/SearchQueryParser.py +0 -0
  350. scitex/scholar/pipelines/__init__.py +0 -0
  351. scitex/scholar/search_engines/ScholarSearchEngine.py +6 -1
  352. scitex/scholar/search_engines/_BaseSearchEngine.py +0 -0
  353. scitex/scholar/search_engines/__init__.py +0 -0
  354. scitex/scholar/search_engines/individual/ArXivSearchEngine.py +0 -0
  355. scitex/scholar/search_engines/individual/CrossRefSearchEngine.py +0 -0
  356. scitex/scholar/search_engines/individual/OpenAlexSearchEngine.py +0 -0
  357. scitex/scholar/search_engines/individual/PubMedSearchEngine.py +0 -0
  358. scitex/scholar/search_engines/individual/SemanticScholarSearchEngine.py +0 -0
  359. scitex/scholar/search_engines/individual/__init__.py +0 -0
  360. scitex/scholar/storage/BibTeXHandler.py +35 -5
  361. scitex/scholar/storage/PaperIO.py +1 -1
  362. scitex/scholar/storage/_DeduplicationManager.py +0 -0
  363. scitex/scholar/storage/_LibraryManager.py +0 -0
  364. scitex/scholar/storage/__init__.py +0 -0
  365. scitex/scholar/url_finder/strategies/find_pdf_urls_by_direct_links.py +0 -0
  366. scitex/scholar/url_finder/strategies/find_pdf_urls_by_dropdown.py +0 -0
  367. scitex/scholar/url_finder/strategies/find_pdf_urls_by_href.py +0 -0
  368. scitex/scholar/url_finder/translators/__init__.py +0 -0
  369. scitex/scholar/url_finder/translators/core/__init__.py +0 -0
  370. scitex/scholar/url_finder/translators/core/base.py +0 -0
  371. scitex/scholar/url_finder/translators/core/patterns.py +0 -0
  372. scitex/scholar/url_finder/translators/individual/BOFiP_Impots.py +0 -0
  373. scitex/scholar/url_finder/translators/individual/Baidu_Scholar.py +0 -0
  374. scitex/scholar/url_finder/translators/individual/Bangkok_Post.py +0 -0
  375. scitex/scholar/url_finder/translators/individual/Baruch_Foundation.py +0 -0
  376. scitex/scholar/url_finder/translators/individual/Beobachter.py +0 -0
  377. scitex/scholar/url_finder/translators/individual/Bezneng_Gajit.py +0 -0
  378. scitex/scholar/url_finder/translators/individual/BibLaTeX.py +0 -0
  379. scitex/scholar/url_finder/translators/individual/BibTeX.py +0 -0
  380. scitex/scholar/url_finder/translators/individual/Biblio_com.py +0 -0
  381. scitex/scholar/url_finder/translators/individual/Bibliontology_RDF.py +0 -0
  382. scitex/scholar/url_finder/translators/individual/CLASE.py +0 -0
  383. scitex/scholar/url_finder/translators/individual/COBISS.py +0 -0
  384. scitex/scholar/url_finder/translators/individual/COinS.py +0 -0
  385. scitex/scholar/url_finder/translators/individual/CQ_Press.py +0 -0
  386. scitex/scholar/url_finder/translators/individual/CROSBI.py +0 -0
  387. scitex/scholar/url_finder/translators/individual/CSL_JSON.py +0 -0
  388. scitex/scholar/url_finder/translators/individual/CSV.py +0 -0
  389. scitex/scholar/url_finder/translators/individual/CalMatters.py +0 -0
  390. scitex/scholar/url_finder/translators/individual/Calisphere.py +0 -0
  391. scitex/scholar/url_finder/translators/individual/Camara_Brasileira_do_Livro_ISBN.py +0 -0
  392. scitex/scholar/url_finder/translators/individual/CanLII.py +0 -0
  393. scitex/scholar/url_finder/translators/individual/Canada_com.py +0 -0
  394. scitex/scholar/url_finder/translators/individual/Canadian_Letters_and_Images.py +0 -0
  395. scitex/scholar/url_finder/translators/individual/Canadiana_ca.py +0 -0
  396. scitex/scholar/url_finder/translators/individual/Cascadilla_Proceedings_Project.py +0 -0
  397. scitex/scholar/url_finder/translators/individual/Central_and_Eastern_European_Online_Library_Journals.py +0 -0
  398. scitex/scholar/url_finder/translators/individual/Champlain_Society_Collection.py +0 -0
  399. scitex/scholar/url_finder/translators/individual/Chicago_Journal_of_Theoretical_Computer_Science.py +0 -0
  400. scitex/scholar/url_finder/translators/individual/Christian_Science_Monitor.py +0 -0
  401. scitex/scholar/url_finder/translators/individual/Columbia_University_Press.py +0 -0
  402. scitex/scholar/url_finder/translators/individual/Common_Place.py +0 -0
  403. scitex/scholar/url_finder/translators/individual/Cornell_LII.py +0 -0
  404. scitex/scholar/url_finder/translators/individual/Cornell_University_Press.py +0 -0
  405. scitex/scholar/url_finder/translators/individual/CourtListener.py +0 -0
  406. scitex/scholar/url_finder/translators/individual/DAI_Zenon.py +0 -0
  407. scitex/scholar/url_finder/translators/individual/__init__.py +0 -0
  408. scitex/scholar/url_finder/translators/individual/abc_news_australia.py +0 -0
  409. scitex/scholar/url_finder/translators/individual/access_engineering.py +0 -0
  410. scitex/scholar/url_finder/translators/individual/access_medicine.py +0 -0
  411. scitex/scholar/url_finder/translators/individual/access_science.py +0 -0
  412. scitex/scholar/url_finder/translators/individual/acls_humanities_ebook.py +0 -0
  413. scitex/scholar/url_finder/translators/individual/aclweb.py +0 -0
  414. scitex/scholar/url_finder/translators/individual/acm.py +0 -0
  415. scitex/scholar/url_finder/translators/individual/acm_digital_library.py +0 -0
  416. scitex/scholar/url_finder/translators/individual/acs.py +0 -0
  417. scitex/scholar/url_finder/translators/individual/acs_publications.py +0 -0
  418. scitex/scholar/url_finder/translators/individual/adam_matthew_digital.py +0 -0
  419. scitex/scholar/url_finder/translators/individual/ads_bibcode.py +0 -0
  420. scitex/scholar/url_finder/translators/individual/aea_web.py +0 -0
  421. scitex/scholar/url_finder/translators/individual/agencia_del_isbn.py +0 -0
  422. scitex/scholar/url_finder/translators/individual/agris.py +0 -0
  423. scitex/scholar/url_finder/translators/individual/ahval_news.py +0 -0
  424. scitex/scholar/url_finder/translators/individual/aip.py +0 -0
  425. scitex/scholar/url_finder/translators/individual/air_university_journals.py +0 -0
  426. scitex/scholar/url_finder/translators/individual/airiti.py +0 -0
  427. scitex/scholar/url_finder/translators/individual/alexander_street_press.py +0 -0
  428. scitex/scholar/url_finder/translators/individual/all_africa.py +0 -0
  429. scitex/scholar/url_finder/translators/individual/allafrica.py +0 -0
  430. scitex/scholar/url_finder/translators/individual/alsharekh.py +0 -0
  431. scitex/scholar/url_finder/translators/individual/alternet.py +0 -0
  432. scitex/scholar/url_finder/translators/individual/aluka.py +0 -0
  433. scitex/scholar/url_finder/translators/individual/amazon.py +0 -0
  434. scitex/scholar/url_finder/translators/individual/american_archive_public_broadcasting.py +0 -0
  435. scitex/scholar/url_finder/translators/individual/american_institute_aeronautics_astronautics.py +0 -0
  436. scitex/scholar/url_finder/translators/individual/american_prospect.py +0 -0
  437. scitex/scholar/url_finder/translators/individual/ams_journals.py +0 -0
  438. scitex/scholar/url_finder/translators/individual/ams_mathscinet.py +0 -0
  439. scitex/scholar/url_finder/translators/individual/ams_mathscinet_legacy.py +0 -0
  440. scitex/scholar/url_finder/translators/individual/ancestry_com_us_federal_census.py +0 -0
  441. scitex/scholar/url_finder/translators/individual/ancestry_us_federal_census.py +0 -0
  442. scitex/scholar/url_finder/translators/individual/annual_reviews.py +0 -0
  443. scitex/scholar/url_finder/translators/individual/antikvarium_hu.py +0 -0
  444. scitex/scholar/url_finder/translators/individual/aosic.py +0 -0
  445. scitex/scholar/url_finder/translators/individual/apa_psycnet.py +0 -0
  446. scitex/scholar/url_finder/translators/individual/apn_ru.py +0 -0
  447. scitex/scholar/url_finder/translators/individual/aps.py +0 -0
  448. scitex/scholar/url_finder/translators/individual/aps_physics.py +0 -0
  449. scitex/scholar/url_finder/translators/individual/aquadocs.py +0 -0
  450. scitex/scholar/url_finder/translators/individual/archeion.py +0 -0
  451. scitex/scholar/url_finder/translators/individual/archiv_fuer_sozialgeschichte.py +0 -0
  452. scitex/scholar/url_finder/translators/individual/ariana_news.py +0 -0
  453. scitex/scholar/url_finder/translators/individual/art_institute_of_chicago.py +0 -0
  454. scitex/scholar/url_finder/translators/individual/artefacts_canada.py +0 -0
  455. scitex/scholar/url_finder/translators/individual/artfl_encyclopedie.py +0 -0
  456. scitex/scholar/url_finder/translators/individual/artforum.py +0 -0
  457. scitex/scholar/url_finder/translators/individual/artnet.py +0 -0
  458. scitex/scholar/url_finder/translators/individual/artnews.py +0 -0
  459. scitex/scholar/url_finder/translators/individual/artstor.py +0 -0
  460. scitex/scholar/url_finder/translators/individual/arxiv.py +0 -0
  461. scitex/scholar/url_finder/translators/individual/asce.py +0 -0
  462. scitex/scholar/url_finder/translators/individual/asco_meeting_library.py +0 -0
  463. scitex/scholar/url_finder/translators/individual/astis.py +0 -0
  464. scitex/scholar/url_finder/translators/individual/atlanta_journal_constitution.py +0 -0
  465. scitex/scholar/url_finder/translators/individual/ats_international_journal.py +0 -0
  466. scitex/scholar/url_finder/translators/individual/atypon.py +0 -0
  467. scitex/scholar/url_finder/translators/individual/atypon_journals.py +0 -0
  468. scitex/scholar/url_finder/translators/individual/austlii_and_nzlii.py +0 -0
  469. scitex/scholar/url_finder/translators/individual/australian_dictionary_of_biography.py +0 -0
  470. scitex/scholar/url_finder/translators/individual/bailii.py +0 -0
  471. scitex/scholar/url_finder/translators/individual/bbc.py +0 -0
  472. scitex/scholar/url_finder/translators/individual/bbc_genome.py +0 -0
  473. scitex/scholar/url_finder/translators/individual/beck_online.py +0 -0
  474. scitex/scholar/url_finder/translators/individual/biblioteca_nacional_de_maestros.py +0 -0
  475. scitex/scholar/url_finder/translators/individual/bibliotheque_archives_nationale_quebec_pistard.py +0 -0
  476. scitex/scholar/url_finder/translators/individual/bibliotheque_archives_nationales_quebec.py +0 -0
  477. scitex/scholar/url_finder/translators/individual/bibliotheque_et_archives_nationale_du_quebec__pistard_.py +0 -0
  478. scitex/scholar/url_finder/translators/individual/bibliotheque_et_archives_nationales_du_quebec.py +0 -0
  479. scitex/scholar/url_finder/translators/individual/bibliotheque_nationale_de_france.py +0 -0
  480. scitex/scholar/url_finder/translators/individual/bibliotheque_nationale_france.py +0 -0
  481. scitex/scholar/url_finder/translators/individual/bibsys.py +0 -0
  482. scitex/scholar/url_finder/translators/individual/bioconductor.py +0 -0
  483. scitex/scholar/url_finder/translators/individual/biomed_central.py +0 -0
  484. scitex/scholar/url_finder/translators/individual/bioone.py +0 -0
  485. scitex/scholar/url_finder/translators/individual/biorxiv.py +0 -0
  486. scitex/scholar/url_finder/translators/individual/blaetter.py +0 -0
  487. scitex/scholar/url_finder/translators/individual/blogger.py +0 -0
  488. scitex/scholar/url_finder/translators/individual/bloomberg.py +0 -0
  489. scitex/scholar/url_finder/translators/individual/bloomsbury_food_library.py +0 -0
  490. scitex/scholar/url_finder/translators/individual/bluesky.py +0 -0
  491. scitex/scholar/url_finder/translators/individual/bnf_isbn.py +0 -0
  492. scitex/scholar/url_finder/translators/individual/bocc.py +0 -0
  493. scitex/scholar/url_finder/translators/individual/boe.py +0 -0
  494. scitex/scholar/url_finder/translators/individual/bookmarks.py +0 -0
  495. scitex/scholar/url_finder/translators/individual/bookshop_org.py +0 -0
  496. scitex/scholar/url_finder/translators/individual/boston_review.py +0 -0
  497. scitex/scholar/url_finder/translators/individual/bosworth_toller_anglo_saxon_dictionary.py +0 -0
  498. scitex/scholar/url_finder/translators/individual/bosworth_toller_s_anglo_saxon_dictionary_online.py +0 -0
  499. scitex/scholar/url_finder/translators/individual/bracero_history_archive.py +0 -0
  500. scitex/scholar/url_finder/translators/individual/brill.py +0 -0
  501. scitex/scholar/url_finder/translators/individual/brukerhandboken.py +0 -0
  502. scitex/scholar/url_finder/translators/individual/bryn_mawr_classical_review.py +0 -0
  503. scitex/scholar/url_finder/translators/individual/bundesgesetzblatt.py +0 -0
  504. scitex/scholar/url_finder/translators/individual/business_standard.py +0 -0
  505. scitex/scholar/url_finder/translators/individual/cabi___cab_abstracts.py +0 -0
  506. scitex/scholar/url_finder/translators/individual/cabi_cab_abstracts.py +0 -0
  507. scitex/scholar/url_finder/translators/individual/cairn.py +0 -0
  508. scitex/scholar/url_finder/translators/individual/cairn_info.py +0 -0
  509. scitex/scholar/url_finder/translators/individual/cambridge.py +0 -0
  510. scitex/scholar/url_finder/translators/individual/cambridge_core.py +0 -0
  511. scitex/scholar/url_finder/translators/individual/cambridge_engage_preprints.py +0 -0
  512. scitex/scholar/url_finder/translators/individual/caod.py +0 -0
  513. scitex/scholar/url_finder/translators/individual/cbc.py +0 -0
  514. scitex/scholar/url_finder/translators/individual/ccfr__bnf_.py +0 -0
  515. scitex/scholar/url_finder/translators/individual/ccfr_bnf.py +0 -0
  516. scitex/scholar/url_finder/translators/individual/cell_press.py +0 -0
  517. scitex/scholar/url_finder/translators/individual/cern_document_server.py +0 -0
  518. scitex/scholar/url_finder/translators/individual/ceur_workshop_proceedings.py +0 -0
  519. scitex/scholar/url_finder/translators/individual/cff.py +0 -0
  520. scitex/scholar/url_finder/translators/individual/cff_references.py +0 -0
  521. scitex/scholar/url_finder/translators/individual/champlain_society___collection.py +0 -0
  522. scitex/scholar/url_finder/translators/individual/chronicling_america.py +0 -0
  523. scitex/scholar/url_finder/translators/individual/cia_world_factbook.py +0 -0
  524. scitex/scholar/url_finder/translators/individual/cinii_research.py +0 -0
  525. scitex/scholar/url_finder/translators/individual/citavi_5_xml.py +0 -0
  526. scitex/scholar/url_finder/translators/individual/citeseer.py +0 -0
  527. scitex/scholar/url_finder/translators/individual/citizen_lab.py +0 -0
  528. scitex/scholar/url_finder/translators/individual/civilization_ca.py +0 -0
  529. scitex/scholar/url_finder/translators/individual/clacso.py +0 -0
  530. scitex/scholar/url_finder/translators/individual/climate_change_and_human_health_literature_portal.py +0 -0
  531. scitex/scholar/url_finder/translators/individual/climate_change_human_health.py +0 -0
  532. scitex/scholar/url_finder/translators/individual/clinical_key.py +0 -0
  533. scitex/scholar/url_finder/translators/individual/clinicaltrials_gov.py +0 -0
  534. scitex/scholar/url_finder/translators/individual/cnki.py +0 -0
  535. scitex/scholar/url_finder/translators/individual/code4lib_journal.py +0 -0
  536. scitex/scholar/url_finder/translators/individual/colorado_state_legislature.py +0 -0
  537. scitex/scholar/url_finder/translators/individual/computer_history_museum_archive.py +0 -0
  538. scitex/scholar/url_finder/translators/individual/copernicus.py +0 -0
  539. scitex/scholar/url_finder/translators/individual/crossref_rest.py +0 -0
  540. scitex/scholar/url_finder/translators/individual/crossref_unixref_xml.py +0 -0
  541. scitex/scholar/url_finder/translators/individual/csiro_publishing.py +0 -0
  542. scitex/scholar/url_finder/translators/individual/csiro_publishing_dup.py +0 -0
  543. scitex/scholar/url_finder/translators/individual/current_affairs.py +0 -0
  544. scitex/scholar/url_finder/translators/individual/dabi.py +0 -0
  545. scitex/scholar/url_finder/translators/individual/dagens_nyheter.py +0 -0
  546. scitex/scholar/url_finder/translators/individual/dagstuhl.py +0 -0
  547. scitex/scholar/url_finder/translators/individual/dagstuhl_research_online_publication_server.py +0 -0
  548. scitex/scholar/url_finder/translators/individual/dar_almandumah.py +0 -0
  549. scitex/scholar/url_finder/translators/individual/dart_europe.py +0 -0
  550. scitex/scholar/url_finder/translators/individual/data_gov.py +0 -0
  551. scitex/scholar/url_finder/translators/individual/databrary.py +0 -0
  552. scitex/scholar/url_finder/translators/individual/datacite_json.py +0 -0
  553. scitex/scholar/url_finder/translators/individual/dataverse.py +0 -0
  554. scitex/scholar/url_finder/translators/individual/daum_news.py +0 -0
  555. scitex/scholar/url_finder/translators/individual/dblp.py +0 -0
  556. scitex/scholar/url_finder/translators/individual/dblp_computer_science_bibliography.py +0 -0
  557. scitex/scholar/url_finder/translators/individual/dbpia.py +0 -0
  558. scitex/scholar/url_finder/translators/individual/de_gruyter_brill.py +0 -0
  559. scitex/scholar/url_finder/translators/individual/defense_technical_information_center.py +0 -0
  560. scitex/scholar/url_finder/translators/individual/dejure_org.py +0 -0
  561. scitex/scholar/url_finder/translators/individual/delpher.py +0 -0
  562. scitex/scholar/url_finder/translators/individual/demographic_research.py +0 -0
  563. scitex/scholar/url_finder/translators/individual/denik_cz.py +0 -0
  564. scitex/scholar/url_finder/translators/individual/depatisnet.py +0 -0
  565. scitex/scholar/url_finder/translators/individual/der_freitag.py +0 -0
  566. scitex/scholar/url_finder/translators/individual/der_spiegel.py +0 -0
  567. scitex/scholar/url_finder/translators/individual/desiring_god.py +0 -0
  568. scitex/scholar/url_finder/translators/individual/deutsche_fotothek.py +0 -0
  569. scitex/scholar/url_finder/translators/individual/deutsche_nationalbibliothek.py +0 -0
  570. scitex/scholar/url_finder/translators/individual/dhistory.py +0 -0
  571. scitex/scholar/url_finder/translators/individual/dialnet.py +0 -0
  572. scitex/scholar/url_finder/translators/individual/die_zeit.py +0 -0
  573. scitex/scholar/url_finder/translators/individual/digibib_net.py +0 -0
  574. scitex/scholar/url_finder/translators/individual/digital_humanities_quarterly.py +0 -0
  575. scitex/scholar/url_finder/translators/individual/digital_spy.py +0 -0
  576. scitex/scholar/url_finder/translators/individual/digizeitschriften.py +0 -0
  577. scitex/scholar/url_finder/translators/individual/dimensions.py +0 -0
  578. scitex/scholar/url_finder/translators/individual/dlibra.py +0 -0
  579. scitex/scholar/url_finder/translators/individual/doaj.py +0 -0
  580. scitex/scholar/url_finder/translators/individual/doi.py +0 -0
  581. scitex/scholar/url_finder/translators/individual/doi_content_negotiation.py +0 -0
  582. scitex/scholar/url_finder/translators/individual/douban.py +0 -0
  583. scitex/scholar/url_finder/translators/individual/dpla.py +0 -0
  584. scitex/scholar/url_finder/translators/individual/dreier_neuerscheinungsdienst.py +0 -0
  585. scitex/scholar/url_finder/translators/individual/drugbank_ca.py +0 -0
  586. scitex/scholar/url_finder/translators/individual/dryad.py +0 -0
  587. scitex/scholar/url_finder/translators/individual/dryad_digital_repository.py +0 -0
  588. scitex/scholar/url_finder/translators/individual/dspace.py +0 -0
  589. scitex/scholar/url_finder/translators/individual/dspace_intermediate_metadata.py +0 -0
  590. scitex/scholar/url_finder/translators/individual/duke_university_press_books.py +0 -0
  591. scitex/scholar/url_finder/translators/individual/e_periodica_switzerland.py +0 -0
  592. scitex/scholar/url_finder/translators/individual/eastview.py +0 -0
  593. scitex/scholar/url_finder/translators/individual/ebrary.py +0 -0
  594. scitex/scholar/url_finder/translators/individual/ebsco_discovery_layer.py +0 -0
  595. scitex/scholar/url_finder/translators/individual/ebscohost.py +0 -0
  596. scitex/scholar/url_finder/translators/individual/edinburgh_university_press_journals.py +0 -0
  597. scitex/scholar/url_finder/translators/individual/education_week.py +0 -0
  598. scitex/scholar/url_finder/translators/individual/eidr.py +0 -0
  599. scitex/scholar/url_finder/translators/individual/el_comercio__peru_.py +0 -0
  600. scitex/scholar/url_finder/translators/individual/el_pais.py +0 -0
  601. scitex/scholar/url_finder/translators/individual/electronic_colloquium_on_computational_complexity.py +0 -0
  602. scitex/scholar/url_finder/translators/individual/elibrary_ru.py +0 -0
  603. scitex/scholar/url_finder/translators/individual/elicit.py +0 -0
  604. scitex/scholar/url_finder/translators/individual/elife.py +0 -0
  605. scitex/scholar/url_finder/translators/individual/elsevier_health.py +0 -0
  606. scitex/scholar/url_finder/translators/individual/elsevier_health_journals.py +0 -0
  607. scitex/scholar/url_finder/translators/individual/elsevier_pure.py +0 -0
  608. scitex/scholar/url_finder/translators/individual/embedded_metadata.py +0 -0
  609. scitex/scholar/url_finder/translators/individual/emedicine.py +0 -0
  610. scitex/scholar/url_finder/translators/individual/emerald.py +0 -0
  611. scitex/scholar/url_finder/translators/individual/emerald_insight.py +0 -0
  612. scitex/scholar/url_finder/translators/individual/emja.py +0 -0
  613. scitex/scholar/url_finder/translators/individual/encyclopedia_of_chicago.py +0 -0
  614. scitex/scholar/url_finder/translators/individual/encyclopedia_of_korean_culture.py +0 -0
  615. scitex/scholar/url_finder/translators/individual/endnote_xml.py +0 -0
  616. scitex/scholar/url_finder/translators/individual/engineering_village.py +0 -0
  617. scitex/scholar/url_finder/translators/individual/envidat.py +0 -0
  618. scitex/scholar/url_finder/translators/individual/epa_national_library_catalog.py +0 -0
  619. scitex/scholar/url_finder/translators/individual/epicurious.py +0 -0
  620. scitex/scholar/url_finder/translators/individual/eprint_iacr.py +0 -0
  621. scitex/scholar/url_finder/translators/individual/eric.py +0 -0
  622. scitex/scholar/url_finder/translators/individual/erudit.py +0 -0
  623. scitex/scholar/url_finder/translators/individual/espacenet.py +0 -0
  624. scitex/scholar/url_finder/translators/individual/etatar_ru.py +0 -0
  625. scitex/scholar/url_finder/translators/individual/euclid.py +0 -0
  626. scitex/scholar/url_finder/translators/individual/eur_lex.py +0 -0
  627. scitex/scholar/url_finder/translators/individual/eurasianet.py +0 -0
  628. scitex/scholar/url_finder/translators/individual/eurogamerusgamer.py +0 -0
  629. scitex/scholar/url_finder/translators/individual/europe_pmc.py +0 -0
  630. scitex/scholar/url_finder/translators/individual/evernote.py +0 -0
  631. scitex/scholar/url_finder/translators/individual/f1000_research.py +0 -0
  632. scitex/scholar/url_finder/translators/individual/fachportal_padagogik.py +0 -0
  633. scitex/scholar/url_finder/translators/individual/factiva.py +0 -0
  634. scitex/scholar/url_finder/translators/individual/failed_architecture.py +0 -0
  635. scitex/scholar/url_finder/translators/individual/fairfax_australia.py +0 -0
  636. scitex/scholar/url_finder/translators/individual/fao_publications.py +0 -0
  637. scitex/scholar/url_finder/translators/individual/fatcat.py +0 -0
  638. scitex/scholar/url_finder/translators/individual/faz_net.py +0 -0
  639. scitex/scholar/url_finder/translators/individual/feb_web_ru.py +0 -0
  640. scitex/scholar/url_finder/translators/individual/figshare.py +0 -0
  641. scitex/scholar/url_finder/translators/individual/financial_times.py +0 -0
  642. scitex/scholar/url_finder/translators/individual/finna.py +0 -0
  643. scitex/scholar/url_finder/translators/individual/fishpond_co_nz.py +0 -0
  644. scitex/scholar/url_finder/translators/individual/flickr.py +0 -0
  645. scitex/scholar/url_finder/translators/individual/foreign_affairs.py +0 -0
  646. scitex/scholar/url_finder/translators/individual/foreign_policy.py +0 -0
  647. scitex/scholar/url_finder/translators/individual/fr_online_de.py +0 -0
  648. scitex/scholar/url_finder/translators/individual/freecite.py +0 -0
  649. scitex/scholar/url_finder/translators/individual/freepatentsonline.py +0 -0
  650. scitex/scholar/url_finder/translators/individual/frieze.py +0 -0
  651. scitex/scholar/url_finder/translators/individual/frontiers.py +0 -0
  652. scitex/scholar/url_finder/translators/individual/gale_databases.py +0 -0
  653. scitex/scholar/url_finder/translators/individual/galegdc.py +0 -0
  654. scitex/scholar/url_finder/translators/individual/galegroup.py +0 -0
  655. scitex/scholar/url_finder/translators/individual/gallica.py +0 -0
  656. scitex/scholar/url_finder/translators/individual/game_studies.py +0 -0
  657. scitex/scholar/url_finder/translators/individual/gamespot.py +0 -0
  658. scitex/scholar/url_finder/translators/individual/gamestar_gamepro.py +0 -0
  659. scitex/scholar/url_finder/translators/individual/gasyrlar_awazy.py +0 -0
  660. scitex/scholar/url_finder/translators/individual/gemeinsamer_bibliotheksverbund_isbn.py +0 -0
  661. scitex/scholar/url_finder/translators/individual/gene_ontology.py +0 -0
  662. scitex/scholar/url_finder/translators/individual/github.py +0 -0
  663. scitex/scholar/url_finder/translators/individual/globes.py +0 -0
  664. scitex/scholar/url_finder/translators/individual/gmail.py +0 -0
  665. scitex/scholar/url_finder/translators/individual/gms_german_medical_science.py +0 -0
  666. scitex/scholar/url_finder/translators/individual/goodreads.py +0 -0
  667. scitex/scholar/url_finder/translators/individual/google_books.py +0 -0
  668. scitex/scholar/url_finder/translators/individual/google_patents.py +0 -0
  669. scitex/scholar/url_finder/translators/individual/google_play.py +0 -0
  670. scitex/scholar/url_finder/translators/individual/google_presentation.py +0 -0
  671. scitex/scholar/url_finder/translators/individual/google_research.py +0 -0
  672. scitex/scholar/url_finder/translators/individual/google_scholar.py +0 -0
  673. scitex/scholar/url_finder/translators/individual/govinfo.py +0 -0
  674. scitex/scholar/url_finder/translators/individual/gpo_access_e_cfr.py +0 -0
  675. scitex/scholar/url_finder/translators/individual/gulag_many_days__many_lives.py +0 -0
  676. scitex/scholar/url_finder/translators/individual/haaretz.py +0 -0
  677. scitex/scholar/url_finder/translators/individual/habr.py +0 -0
  678. scitex/scholar/url_finder/translators/individual/hal.py +0 -0
  679. scitex/scholar/url_finder/translators/individual/hal_archives_ouvertes.py +0 -0
  680. scitex/scholar/url_finder/translators/individual/handelszeitung.py +0 -0
  681. scitex/scholar/url_finder/translators/individual/hanrei_watch.py +0 -0
  682. scitex/scholar/url_finder/translators/individual/harper_s_magazine.py +0 -0
  683. scitex/scholar/url_finder/translators/individual/harvard_business_review.py +0 -0
  684. scitex/scholar/url_finder/translators/individual/harvard_caselaw_access_project.py +0 -0
  685. scitex/scholar/url_finder/translators/individual/harvard_university_press_books.py +0 -0
  686. scitex/scholar/url_finder/translators/individual/hathitrust.py +0 -0
  687. scitex/scholar/url_finder/translators/individual/hcsp.py +0 -0
  688. scitex/scholar/url_finder/translators/individual/heinonline.py +0 -0
  689. scitex/scholar/url_finder/translators/individual/heise.py +0 -0
  690. scitex/scholar/url_finder/translators/individual/herder.py +0 -0
  691. scitex/scholar/url_finder/translators/individual/highbeam.py +0 -0
  692. scitex/scholar/url_finder/translators/individual/highwire.py +0 -0
  693. scitex/scholar/url_finder/translators/individual/highwire2.py +0 -0
  694. scitex/scholar/url_finder/translators/individual/highwire_2_0.py +0 -0
  695. scitex/scholar/url_finder/translators/individual/hindawi.py +0 -0
  696. scitex/scholar/url_finder/translators/individual/hindawi_publishers.py +0 -0
  697. scitex/scholar/url_finder/translators/individual/hispanic_american_periodical_index.py +0 -0
  698. scitex/scholar/url_finder/translators/individual/homeland_security_digital_library.py +0 -0
  699. scitex/scholar/url_finder/translators/individual/hudoc.py +0 -0
  700. scitex/scholar/url_finder/translators/individual/huff_post.py +0 -0
  701. scitex/scholar/url_finder/translators/individual/human_rights_watch.py +0 -0
  702. scitex/scholar/url_finder/translators/individual/ibisworld.py +0 -0
  703. scitex/scholar/url_finder/translators/individual/idea_alm.py +0 -0
  704. scitex/scholar/url_finder/translators/individual/idref.py +0 -0
  705. scitex/scholar/url_finder/translators/individual/ieee_computer_society.py +0 -0
  706. scitex/scholar/url_finder/translators/individual/ieee_xplore.py +0 -0
  707. scitex/scholar/url_finder/translators/individual/ietf.py +0 -0
  708. scitex/scholar/url_finder/translators/individual/ign.py +0 -0
  709. scitex/scholar/url_finder/translators/individual/imdb.py +0 -0
  710. scitex/scholar/url_finder/translators/individual/imf.py +0 -0
  711. scitex/scholar/url_finder/translators/individual/in_these_times.py +0 -0
  712. scitex/scholar/url_finder/translators/individual/informationssystem_medienpaedagogik.py +0 -0
  713. scitex/scholar/url_finder/translators/individual/informit_database.py +0 -0
  714. scitex/scholar/url_finder/translators/individual/infotrac.py +0 -0
  715. scitex/scholar/url_finder/translators/individual/ingenta_connect.py +0 -0
  716. scitex/scholar/url_finder/translators/individual/ingentaconnect.py +0 -0
  717. scitex/scholar/url_finder/translators/individual/inside_higher_ed.py +0 -0
  718. scitex/scholar/url_finder/translators/individual/insignia_opac.py +0 -0
  719. scitex/scholar/url_finder/translators/individual/inspire.py +0 -0
  720. scitex/scholar/url_finder/translators/individual/institute_of_contemporary_art.py +0 -0
  721. scitex/scholar/url_finder/translators/individual/institute_of_physics.py +0 -0
  722. scitex/scholar/url_finder/translators/individual/integrum.py +0 -0
  723. scitex/scholar/url_finder/translators/individual/intellixir.py +0 -0
  724. scitex/scholar/url_finder/translators/individual/inter_research_science_center.py +0 -0
  725. scitex/scholar/url_finder/translators/individual/international_nuclear_information_system.py +0 -0
  726. scitex/scholar/url_finder/translators/individual/internet_archive.py +0 -0
  727. scitex/scholar/url_finder/translators/individual/internet_archive_scholar.py +0 -0
  728. scitex/scholar/url_finder/translators/individual/internet_archive_wayback.py +0 -0
  729. scitex/scholar/url_finder/translators/individual/internet_archive_wayback_machine.py +0 -0
  730. scitex/scholar/url_finder/translators/individual/invenio_rdm.py +0 -0
  731. scitex/scholar/url_finder/translators/individual/inveniordm.py +0 -0
  732. scitex/scholar/url_finder/translators/individual/io_port.py +0 -0
  733. scitex/scholar/url_finder/translators/individual/iop.py +0 -0
  734. scitex/scholar/url_finder/translators/individual/ipcc.py +0 -0
  735. scitex/scholar/url_finder/translators/individual/isidore.py +0 -0
  736. scitex/scholar/url_finder/translators/individual/istc.py +0 -0
  737. scitex/scholar/url_finder/translators/individual/j_stage.py +0 -0
  738. scitex/scholar/url_finder/translators/individual/jahrbuch.py +0 -0
  739. scitex/scholar/url_finder/translators/individual/japan_times_online.py +0 -0
  740. scitex/scholar/url_finder/translators/individual/jets.py +0 -0
  741. scitex/scholar/url_finder/translators/individual/jisc_historical_texts.py +0 -0
  742. scitex/scholar/url_finder/translators/individual/journal_of_electronic_publishing.py +0 -0
  743. scitex/scholar/url_finder/translators/individual/journal_of_extension.py +0 -0
  744. scitex/scholar/url_finder/translators/individual/journal_of_machine_learning_research.py +0 -0
  745. scitex/scholar/url_finder/translators/individual/journal_of_religion_and_society.py +0 -0
  746. scitex/scholar/url_finder/translators/individual/jrc_publications_repository.py +0 -0
  747. scitex/scholar/url_finder/translators/individual/jstage.py +0 -0
  748. scitex/scholar/url_finder/translators/individual/juricaf.py +0 -0
  749. scitex/scholar/url_finder/translators/individual/jurion.py +0 -0
  750. scitex/scholar/url_finder/translators/individual/juris.py +0 -0
  751. scitex/scholar/url_finder/translators/individual/jurpc.py +0 -0
  752. scitex/scholar/url_finder/translators/individual/k10plus_isbn.py +0 -0
  753. scitex/scholar/url_finder/translators/individual/kanopy.py +0 -0
  754. scitex/scholar/url_finder/translators/individual/karger.py +0 -0
  755. scitex/scholar/url_finder/translators/individual/khaama_press.py +0 -0
  756. scitex/scholar/url_finder/translators/individual/kitapyurdu_com.py +0 -0
  757. scitex/scholar/url_finder/translators/individual/kommersant.py +0 -0
  758. scitex/scholar/url_finder/translators/individual/korean_national_library.py +0 -0
  759. scitex/scholar/url_finder/translators/individual/kstudy.py +0 -0
  760. scitex/scholar/url_finder/translators/individual/l_annee_philologique.py +0 -0
  761. scitex/scholar/url_finder/translators/individual/la_croix.py +0 -0
  762. scitex/scholar/url_finder/translators/individual/la_nacion__argentina_.py +0 -0
  763. scitex/scholar/url_finder/translators/individual/la_presse.py +0 -0
  764. scitex/scholar/url_finder/translators/individual/la_republica__peru_.py +0 -0
  765. scitex/scholar/url_finder/translators/individual/la_times.py +0 -0
  766. scitex/scholar/url_finder/translators/individual/lagen_nu.py +0 -0
  767. scitex/scholar/url_finder/translators/individual/landesbibliographie_baden_wurttemberg.py +0 -0
  768. scitex/scholar/url_finder/translators/individual/lapham_s_quarterly.py +0 -0
  769. scitex/scholar/url_finder/translators/individual/le_devoir.py +0 -0
  770. scitex/scholar/url_finder/translators/individual/le_figaro.py +0 -0
  771. scitex/scholar/url_finder/translators/individual/le_maitron.py +0 -0
  772. scitex/scholar/url_finder/translators/individual/le_monde.py +0 -0
  773. scitex/scholar/url_finder/translators/individual/le_monde_diplomatique.py +0 -0
  774. scitex/scholar/url_finder/translators/individual/legifrance.py +0 -0
  775. scitex/scholar/url_finder/translators/individual/legislative_insight.py +0 -0
  776. scitex/scholar/url_finder/translators/individual/lexis_.py +0 -0
  777. scitex/scholar/url_finder/translators/individual/lexisnexis.py +0 -0
  778. scitex/scholar/url_finder/translators/individual/libraries_tasmania.py +0 -0
  779. scitex/scholar/url_finder/translators/individual/library_catalog__aleph_.py +0 -0
  780. scitex/scholar/url_finder/translators/individual/library_catalog__amicus_.py +0 -0
  781. scitex/scholar/url_finder/translators/individual/library_catalog__aquabrowser_.py +0 -0
  782. scitex/scholar/url_finder/translators/individual/library_catalog__bibliocommons_.py +0 -0
  783. scitex/scholar/url_finder/translators/individual/library_catalog__blacklight_.py +0 -0
  784. scitex/scholar/url_finder/translators/individual/library_catalog__capita_prism_.py +0 -0
  785. scitex/scholar/url_finder/translators/individual/library_catalog__dra_.py +0 -0
  786. scitex/scholar/url_finder/translators/individual/library_catalog__dynix_.py +0 -0
  787. scitex/scholar/url_finder/translators/individual/library_catalog__encore_.py +0 -0
  788. scitex/scholar/url_finder/translators/individual/library_catalog__innopac_.py +0 -0
  789. scitex/scholar/url_finder/translators/individual/library_catalog__koha_.py +0 -0
  790. scitex/scholar/url_finder/translators/individual/library_catalog__mango_.py +0 -0
  791. scitex/scholar/url_finder/translators/individual/library_catalog__opals_.py +0 -0
  792. scitex/scholar/url_finder/translators/individual/library_catalog__pica2_.py +0 -0
  793. scitex/scholar/url_finder/translators/individual/library_catalog__pica_.py +0 -0
  794. scitex/scholar/url_finder/translators/individual/library_catalog__pika_.py +0 -0
  795. scitex/scholar/url_finder/translators/individual/library_catalog__polaris_.py +0 -0
  796. scitex/scholar/url_finder/translators/individual/library_catalog__quolto_.py +0 -0
  797. scitex/scholar/url_finder/translators/individual/library_catalog__rero_ils_.py +0 -0
  798. scitex/scholar/url_finder/translators/individual/library_catalog__sirsi_.py +0 -0
  799. scitex/scholar/url_finder/translators/individual/library_catalog__sirsi_elibrary_.py +0 -0
  800. scitex/scholar/url_finder/translators/individual/library_catalog__slims_.py +0 -0
  801. scitex/scholar/url_finder/translators/individual/library_catalog__tind_ils_.py +0 -0
  802. scitex/scholar/url_finder/translators/individual/library_catalog__tinread_.py +0 -0
  803. scitex/scholar/url_finder/translators/individual/library_catalog__tlcyouseemore_.py +0 -0
  804. scitex/scholar/url_finder/translators/individual/library_catalog__visual_library_2021_.py +0 -0
  805. scitex/scholar/url_finder/translators/individual/library_catalog__voyager_.py +0 -0
  806. scitex/scholar/url_finder/translators/individual/library_catalog__voyager_7_.py +0 -0
  807. scitex/scholar/url_finder/translators/individual/library_catalog__vtls_.py +0 -0
  808. scitex/scholar/url_finder/translators/individual/library_genesis.py +0 -0
  809. scitex/scholar/url_finder/translators/individual/library_hub_discover.py +0 -0
  810. scitex/scholar/url_finder/translators/individual/library_of_congress_digital_collections.py +0 -0
  811. scitex/scholar/url_finder/translators/individual/library_of_congress_isbn.py +0 -0
  812. scitex/scholar/url_finder/translators/individual/libris_isbn.py +0 -0
  813. scitex/scholar/url_finder/translators/individual/lingbuzz.py +0 -0
  814. scitex/scholar/url_finder/translators/individual/lippincott_williams_and_wilkins.py +0 -0
  815. scitex/scholar/url_finder/translators/individual/literary_hub.py +0 -0
  816. scitex/scholar/url_finder/translators/individual/litres.py +0 -0
  817. scitex/scholar/url_finder/translators/individual/livejournal.py +0 -0
  818. scitex/scholar/url_finder/translators/individual/livivo.py +0 -0
  819. scitex/scholar/url_finder/translators/individual/london_review_of_books.py +0 -0
  820. scitex/scholar/url_finder/translators/individual/lookus.py +0 -0
  821. scitex/scholar/url_finder/translators/individual/lulu.py +0 -0
  822. scitex/scholar/url_finder/translators/individual/lwn_net.py +0 -0
  823. scitex/scholar/url_finder/translators/individual/lww.py +0 -0
  824. scitex/scholar/url_finder/translators/individual/mab2.py +0 -0
  825. scitex/scholar/url_finder/translators/individual/magazines_russ_ru.py +0 -0
  826. scitex/scholar/url_finder/translators/individual/mailman.py +0 -0
  827. scitex/scholar/url_finder/translators/individual/mainichi_daily_news.py +0 -0
  828. scitex/scholar/url_finder/translators/individual/marc.py +0 -0
  829. scitex/scholar/url_finder/translators/individual/marcxml.py +0 -0
  830. scitex/scholar/url_finder/translators/individual/mastodon.py +0 -0
  831. scitex/scholar/url_finder/translators/individual/matbugat_ru.py +0 -0
  832. scitex/scholar/url_finder/translators/individual/max_planck_institute_for_the_history_of_science_virtual_laboratory_library.py +0 -0
  833. scitex/scholar/url_finder/translators/individual/mcv.py +0 -0
  834. scitex/scholar/url_finder/translators/individual/mdpi.py +0 -0
  835. scitex/scholar/url_finder/translators/individual/mdpi_journals.py +0 -0
  836. scitex/scholar/url_finder/translators/individual/medes.py +0 -0
  837. scitex/scholar/url_finder/translators/individual/medium.py +0 -0
  838. scitex/scholar/url_finder/translators/individual/medline_nbib.py +0 -0
  839. scitex/scholar/url_finder/translators/individual/medlinenbib.py +0 -0
  840. scitex/scholar/url_finder/translators/individual/medra.py +0 -0
  841. scitex/scholar/url_finder/translators/individual/metalib.py +0 -0
  842. scitex/scholar/url_finder/translators/individual/mets.py +0 -0
  843. scitex/scholar/url_finder/translators/individual/microbiology_society_journals.py +0 -0
  844. scitex/scholar/url_finder/translators/individual/microsoft_academic.py +0 -0
  845. scitex/scholar/url_finder/translators/individual/midas_journals.py +0 -0
  846. scitex/scholar/url_finder/translators/individual/mikromarc.py +0 -0
  847. scitex/scholar/url_finder/translators/individual/milli_kutuphane.py +0 -0
  848. scitex/scholar/url_finder/translators/individual/mit_press_books.py +0 -0
  849. scitex/scholar/url_finder/translators/individual/mods.py +0 -0
  850. scitex/scholar/url_finder/translators/individual/mpg_pure.py +0 -0
  851. scitex/scholar/url_finder/translators/individual/musee_du_louvre.py +0 -0
  852. scitex/scholar/url_finder/translators/individual/nagoya_university_opac.py +0 -0
  853. scitex/scholar/url_finder/translators/individual/nasa_ads.py +0 -0
  854. scitex/scholar/url_finder/translators/individual/nasa_ntrs.py +0 -0
  855. scitex/scholar/url_finder/translators/individual/national_academies_press.py +0 -0
  856. scitex/scholar/url_finder/translators/individual/national_agriculture_library.py +0 -0
  857. scitex/scholar/url_finder/translators/individual/national_archives_of_australia.py +0 -0
  858. scitex/scholar/url_finder/translators/individual/national_archives_of_south_africa.py +0 -0
  859. scitex/scholar/url_finder/translators/individual/national_bureau_of_economic_research.py +0 -0
  860. scitex/scholar/url_finder/translators/individual/national_diet_library_catalogue.py +0 -0
  861. scitex/scholar/url_finder/translators/individual/national_gallery_of_art___usa.py +0 -0
  862. scitex/scholar/url_finder/translators/individual/national_gallery_of_australia.py +0 -0
  863. scitex/scholar/url_finder/translators/individual/national_library_of_australia__new_catalog_.py +0 -0
  864. scitex/scholar/url_finder/translators/individual/national_library_of_belarus.py +0 -0
  865. scitex/scholar/url_finder/translators/individual/national_library_of_norway.py +0 -0
  866. scitex/scholar/url_finder/translators/individual/national_library_of_poland_isbn.py +0 -0
  867. scitex/scholar/url_finder/translators/individual/national_post.py +0 -0
  868. scitex/scholar/url_finder/translators/individual/national_technical_reports_library.py +0 -0
  869. scitex/scholar/url_finder/translators/individual/national_transportation_library_rosa_p.py +0 -0
  870. scitex/scholar/url_finder/translators/individual/nature.py +0 -0
  871. scitex/scholar/url_finder/translators/individual/nber.py +0 -0
  872. scitex/scholar/url_finder/translators/individual/ncbi_nucleotide.py +0 -0
  873. scitex/scholar/url_finder/translators/individual/neural_information_processing_systems.py +0 -0
  874. scitex/scholar/url_finder/translators/individual/new_left_review.py +0 -0
  875. scitex/scholar/url_finder/translators/individual/new_zealand_herald.py +0 -0
  876. scitex/scholar/url_finder/translators/individual/newlines_magazine.py +0 -0
  877. scitex/scholar/url_finder/translators/individual/news_corp_australia.py +0 -0
  878. scitex/scholar/url_finder/translators/individual/newsbank.py +0 -0
  879. scitex/scholar/url_finder/translators/individual/newshub_co_nz.py +0 -0
  880. scitex/scholar/url_finder/translators/individual/newsnettamedia.py +0 -0
  881. scitex/scholar/url_finder/translators/individual/newspapers_com.py +0 -0
  882. scitex/scholar/url_finder/translators/individual/noor_digital_library.py +0 -0
  883. scitex/scholar/url_finder/translators/individual/note_html.py +0 -0
  884. scitex/scholar/url_finder/translators/individual/note_markdown.py +0 -0
  885. scitex/scholar/url_finder/translators/individual/notre_dame_philosophical_reviews.py +0 -0
  886. scitex/scholar/url_finder/translators/individual/npr.py +0 -0
  887. scitex/scholar/url_finder/translators/individual/nrc_nl.py +0 -0
  888. scitex/scholar/url_finder/translators/individual/nrc_research_press.py +0 -0
  889. scitex/scholar/url_finder/translators/individual/ntsb_accident_reports.py +0 -0
  890. scitex/scholar/url_finder/translators/individual/nypl_menus.py +0 -0
  891. scitex/scholar/url_finder/translators/individual/nypl_research_catalog.py +0 -0
  892. scitex/scholar/url_finder/translators/individual/nytimes_com.py +0 -0
  893. scitex/scholar/url_finder/translators/individual/nzz_ch.py +0 -0
  894. scitex/scholar/url_finder/translators/individual/oapen.py +0 -0
  895. scitex/scholar/url_finder/translators/individual/oclc_worldcat_firstsearch.py +0 -0
  896. scitex/scholar/url_finder/translators/individual/oecd.py +0 -0
  897. scitex/scholar/url_finder/translators/individual/oecd_ilibrary.py +0 -0
  898. scitex/scholar/url_finder/translators/individual/ohiolink.py +0 -0
  899. scitex/scholar/url_finder/translators/individual/open_conf.py +0 -0
  900. scitex/scholar/url_finder/translators/individual/open_knowledge_repository.py +0 -0
  901. scitex/scholar/url_finder/translators/individual/open_worldcat.py +0 -0
  902. scitex/scholar/url_finder/translators/individual/openalex.py +0 -0
  903. scitex/scholar/url_finder/translators/individual/openalex_json.py +0 -0
  904. scitex/scholar/url_finder/translators/individual/openedition_books.py +0 -0
  905. scitex/scholar/url_finder/translators/individual/openedition_journals.py +0 -0
  906. scitex/scholar/url_finder/translators/individual/openjur.py +0 -0
  907. scitex/scholar/url_finder/translators/individual/optical_society_of_america.py +0 -0
  908. scitex/scholar/url_finder/translators/individual/optimization_online.py +0 -0
  909. scitex/scholar/url_finder/translators/individual/orcid.py +0 -0
  910. scitex/scholar/url_finder/translators/individual/osa.py +0 -0
  911. scitex/scholar/url_finder/translators/individual/osf_preprints.py +0 -0
  912. scitex/scholar/url_finder/translators/individual/osti_energy_citations.py +0 -0
  913. scitex/scholar/url_finder/translators/individual/ovid.py +0 -0
  914. scitex/scholar/url_finder/translators/individual/ovid_tagged.py +0 -0
  915. scitex/scholar/url_finder/translators/individual/oxford.py +0 -0
  916. scitex/scholar/url_finder/translators/individual/oxford_dictionaries_premium.py +0 -0
  917. scitex/scholar/url_finder/translators/individual/oxford_english_dictionary.py +0 -0
  918. scitex/scholar/url_finder/translators/individual/oxford_music_and_art_online.py +0 -0
  919. scitex/scholar/url_finder/translators/individual/oxford_reference.py +0 -0
  920. scitex/scholar/url_finder/translators/individual/oxford_university_press.py +0 -0
  921. scitex/scholar/url_finder/translators/individual/ozon_ru.py +0 -0
  922. scitex/scholar/url_finder/translators/individual/pajhwok_afghan_news.py +0 -0
  923. scitex/scholar/url_finder/translators/individual/papers_past.py +0 -0
  924. scitex/scholar/url_finder/translators/individual/paris_review.py +0 -0
  925. scitex/scholar/url_finder/translators/individual/pastebin.py +0 -0
  926. scitex/scholar/url_finder/translators/individual/patents___uspto.py +0 -0
  927. scitex/scholar/url_finder/translators/individual/pc_gamer.py +0 -0
  928. scitex/scholar/url_finder/translators/individual/pc_games.py +0 -0
  929. scitex/scholar/url_finder/translators/individual/peeters.py +0 -0
  930. scitex/scholar/url_finder/translators/individual/pei_archival_information_network.py +0 -0
  931. scitex/scholar/url_finder/translators/individual/pep_web.py +0 -0
  932. scitex/scholar/url_finder/translators/individual/perceiving_systems.py +0 -0
  933. scitex/scholar/url_finder/translators/individual/perlego.py +0 -0
  934. scitex/scholar/url_finder/translators/individual/philosopher_s_imprint.py +0 -0
  935. scitex/scholar/url_finder/translators/individual/philpapers.py +0 -0
  936. scitex/scholar/url_finder/translators/individual/pkp_catalog_systems.py +0 -0
  937. scitex/scholar/url_finder/translators/individual/pleade.py +0 -0
  938. scitex/scholar/url_finder/translators/individual/plos.py +0 -0
  939. scitex/scholar/url_finder/translators/individual/plos_journals.py +0 -0
  940. scitex/scholar/url_finder/translators/individual/pnas.py +0 -0
  941. scitex/scholar/url_finder/translators/individual/polygon.py +0 -0
  942. scitex/scholar/url_finder/translators/individual/potsdamer_neueste_nachrichten.py +0 -0
  943. scitex/scholar/url_finder/translators/individual/prc_history_review.py +0 -0
  944. scitex/scholar/url_finder/translators/individual/preprints_org.py +0 -0
  945. scitex/scholar/url_finder/translators/individual/primo.py +0 -0
  946. scitex/scholar/url_finder/translators/individual/primo_2018.py +0 -0
  947. scitex/scholar/url_finder/translators/individual/primo_normalized_xml.py +0 -0
  948. scitex/scholar/url_finder/translators/individual/probing_the_past.py +0 -0
  949. scitex/scholar/url_finder/translators/individual/project_gutenberg.py +0 -0
  950. scitex/scholar/url_finder/translators/individual/project_muse.py +0 -0
  951. scitex/scholar/url_finder/translators/individual/promed.py +0 -0
  952. scitex/scholar/url_finder/translators/individual/proquest.py +0 -0
  953. scitex/scholar/url_finder/translators/individual/proquest_ebook_central.py +0 -0
  954. scitex/scholar/url_finder/translators/individual/proquest_policyfile.py +0 -0
  955. scitex/scholar/url_finder/translators/individual/protein_data_bank.py +0 -0
  956. scitex/scholar/url_finder/translators/individual/pubfactory_journals.py +0 -0
  957. scitex/scholar/url_finder/translators/individual/public_record_office_victoria.py +0 -0
  958. scitex/scholar/url_finder/translators/individual/publications_du_quebec.py +0 -0
  959. scitex/scholar/url_finder/translators/individual/publications_office_of_the_european_union.py +0 -0
  960. scitex/scholar/url_finder/translators/individual/pubmed.py +0 -0
  961. scitex/scholar/url_finder/translators/individual/pubmed_central.py +0 -0
  962. scitex/scholar/url_finder/translators/individual/pubmed_xml.py +0 -0
  963. scitex/scholar/url_finder/translators/individual/pubpub.py +0 -0
  964. scitex/scholar/url_finder/translators/individual/pypi.py +0 -0
  965. scitex/scholar/url_finder/translators/individual/qatar_digital_library.py +0 -0
  966. scitex/scholar/url_finder/translators/individual/queensland_state_archives.py +0 -0
  967. scitex/scholar/url_finder/translators/individual/r_packages.py +0 -0
  968. scitex/scholar/url_finder/translators/individual/radio_free_europe__radio_liberty.py +0 -0
  969. scitex/scholar/url_finder/translators/individual/rand.py +0 -0
  970. scitex/scholar/url_finder/translators/individual/rdf.py +0 -0
  971. scitex/scholar/url_finder/translators/individual/rechtspraak_nl.py +0 -0
  972. scitex/scholar/url_finder/translators/individual/redalyc.py +0 -0
  973. scitex/scholar/url_finder/translators/individual/reddit.py +0 -0
  974. scitex/scholar/url_finder/translators/individual/referbibix.py +0 -0
  975. scitex/scholar/url_finder/translators/individual/refworks_tagged.py +0 -0
  976. scitex/scholar/url_finder/translators/individual/regeringskansliet.py +0 -0
  977. scitex/scholar/url_finder/translators/individual/repec___econpapers.py +0 -0
  978. scitex/scholar/url_finder/translators/individual/repec___ideas.py +0 -0
  979. scitex/scholar/url_finder/translators/individual/repec_ideas.py +0 -0
  980. scitex/scholar/url_finder/translators/individual/research_square.py +0 -0
  981. scitex/scholar/url_finder/translators/individual/researchgate.py +0 -0
  982. scitex/scholar/url_finder/translators/individual/retsinformation.py +0 -0
  983. scitex/scholar/url_finder/translators/individual/reuters.py +0 -0
  984. scitex/scholar/url_finder/translators/individual/ris.py +0 -0
  985. scitex/scholar/url_finder/translators/individual/rock__paper__shotgun.py +0 -0
  986. scitex/scholar/url_finder/translators/individual/roll_call.py +0 -0
  987. scitex/scholar/url_finder/translators/individual/rsc.py +0 -0
  988. scitex/scholar/url_finder/translators/individual/rsc_publishing.py +0 -0
  989. scitex/scholar/url_finder/translators/individual/russian_state_library.py +0 -0
  990. scitex/scholar/url_finder/translators/individual/sacramento_bee.py +0 -0
  991. scitex/scholar/url_finder/translators/individual/sae_papers.py +0 -0
  992. scitex/scholar/url_finder/translators/individual/safari_books_online.py +0 -0
  993. scitex/scholar/url_finder/translators/individual/sage.py +0 -0
  994. scitex/scholar/url_finder/translators/individual/sage_journals.py +0 -0
  995. scitex/scholar/url_finder/translators/individual/sage_knowledge.py +0 -0
  996. scitex/scholar/url_finder/translators/individual/saildart.py +0 -0
  997. scitex/scholar/url_finder/translators/individual/salt_research_archives.py +0 -0
  998. scitex/scholar/url_finder/translators/individual/sbn_it.py +0 -0
  999. scitex/scholar/url_finder/translators/individual/scholars_portal_journals.py +0 -0
  1000. scitex/scholar/url_finder/translators/individual/scholia.py +0 -0
  1001. scitex/scholar/url_finder/translators/individual/schweizer_radio_und_fernsehen_srf.py +0 -0
  1002. scitex/scholar/url_finder/translators/individual/scielo.py +0 -0
  1003. scitex/scholar/url_finder/translators/individual/sciencedirect.py +0 -0
  1004. scitex/scholar/url_finder/translators/individual/scinapse.py +0 -0
  1005. scitex/scholar/url_finder/translators/individual/scopus.py +0 -0
  1006. scitex/scholar/url_finder/translators/individual/semantic_scholar.py +0 -0
  1007. scitex/scholar/url_finder/translators/individual/semantics_visual_library.py +0 -0
  1008. scitex/scholar/url_finder/translators/individual/sfu_ipinch.py +0 -0
  1009. scitex/scholar/url_finder/translators/individual/silverchair.py +0 -0
  1010. scitex/scholar/url_finder/translators/individual/sipri.py +0 -0
  1011. scitex/scholar/url_finder/translators/individual/sirs_knowledge_source.py +0 -0
  1012. scitex/scholar/url_finder/translators/individual/slate.py +0 -0
  1013. scitex/scholar/url_finder/translators/individual/slideshare.py +0 -0
  1014. scitex/scholar/url_finder/translators/individual/slub_dresden.py +0 -0
  1015. scitex/scholar/url_finder/translators/individual/sora.py +0 -0
  1016. scitex/scholar/url_finder/translators/individual/springer.py +0 -0
  1017. scitex/scholar/url_finder/translators/individual/springer_link.py +0 -0
  1018. scitex/scholar/url_finder/translators/individual/ssoar.py +0 -0
  1019. scitex/scholar/url_finder/translators/individual/stack_exchange.py +0 -0
  1020. scitex/scholar/url_finder/translators/individual/standard_ebooks.py +0 -0
  1021. scitex/scholar/url_finder/translators/individual/stanford_encyclopedia_of_philosophy.py +0 -0
  1022. scitex/scholar/url_finder/translators/individual/stanford_university_press.py +0 -0
  1023. scitex/scholar/url_finder/translators/individual/state_records_office_of_western_australia.py +0 -0
  1024. scitex/scholar/url_finder/translators/individual/state_records_office_wa.py +0 -0
  1025. scitex/scholar/url_finder/translators/individual/stitcher.py +0 -0
  1026. scitex/scholar/url_finder/translators/individual/store_norske_leksikon.py +0 -0
  1027. scitex/scholar/url_finder/translators/individual/stuff_co_nz.py +0 -0
  1028. scitex/scholar/url_finder/translators/individual/substack.py +0 -0
  1029. scitex/scholar/url_finder/translators/individual/sud_ouest.py +0 -0
  1030. scitex/scholar/url_finder/translators/individual/sueddeutsche_de.py +0 -0
  1031. scitex/scholar/url_finder/translators/individual/summon_2.py +0 -0
  1032. scitex/scholar/url_finder/translators/individual/superlib.py +0 -0
  1033. scitex/scholar/url_finder/translators/individual/svenska_dagbladet.py +0 -0
  1034. scitex/scholar/url_finder/translators/individual/sveriges_radio.py +0 -0
  1035. scitex/scholar/url_finder/translators/individual/svt_nyheter.py +0 -0
  1036. scitex/scholar/url_finder/translators/individual/tagesspiegel.py +0 -0
  1037. scitex/scholar/url_finder/translators/individual/talis_aspire.py +0 -0
  1038. scitex/scholar/url_finder/translators/individual/talisprism.py +0 -0
  1039. scitex/scholar/url_finder/translators/individual/tatknigafund.py +0 -0
  1040. scitex/scholar/url_finder/translators/individual/tatpressa_ru.py +0 -0
  1041. scitex/scholar/url_finder/translators/individual/taylor___francis_ebooks.py +0 -0
  1042. scitex/scholar/url_finder/translators/individual/taylor_and_francis_nejm.py +0 -0
  1043. scitex/scholar/url_finder/translators/individual/taylor_francis.py +0 -0
  1044. scitex/scholar/url_finder/translators/individual/taylor_francis_nejm.py +0 -0
  1045. scitex/scholar/url_finder/translators/individual/taz_de.py +0 -0
  1046. scitex/scholar/url_finder/translators/individual/tei.py +0 -0
  1047. scitex/scholar/url_finder/translators/individual/tesis_doctorals_en_xarxa.py +0 -0
  1048. scitex/scholar/url_finder/translators/individual/the_art_newspaper.py +0 -0
  1049. scitex/scholar/url_finder/translators/individual/the_atlantic.py +0 -0
  1050. scitex/scholar/url_finder/translators/individual/the_boston_globe.py +0 -0
  1051. scitex/scholar/url_finder/translators/individual/the_chronicle_of_higher_education.py +0 -0
  1052. scitex/scholar/url_finder/translators/individual/the_daily_beast.py +0 -0
  1053. scitex/scholar/url_finder/translators/individual/the_economic_times___the_times_of_india.py +0 -0
  1054. scitex/scholar/url_finder/translators/individual/the_economist.py +0 -0
  1055. scitex/scholar/url_finder/translators/individual/the_free_dictionary.py +0 -0
  1056. scitex/scholar/url_finder/translators/individual/the_globe_and_mail.py +0 -0
  1057. scitex/scholar/url_finder/translators/individual/the_guardian.py +0 -0
  1058. scitex/scholar/url_finder/translators/individual/the_hamilton_spectator.py +0 -0
  1059. scitex/scholar/url_finder/translators/individual/the_hindu.py +0 -0
  1060. scitex/scholar/url_finder/translators/individual/the_independent.py +0 -0
  1061. scitex/scholar/url_finder/translators/individual/the_intercept.py +0 -0
  1062. scitex/scholar/url_finder/translators/individual/the_met.py +0 -0
  1063. scitex/scholar/url_finder/translators/individual/the_microfinance_gateway.py +0 -0
  1064. scitex/scholar/url_finder/translators/individual/the_nation.py +0 -0
  1065. scitex/scholar/url_finder/translators/individual/the_national_archives__uk_.py +0 -0
  1066. scitex/scholar/url_finder/translators/individual/the_new_republic.py +0 -0
  1067. scitex/scholar/url_finder/translators/individual/the_new_york_review_of_books.py +0 -0
  1068. scitex/scholar/url_finder/translators/individual/the_new_yorker.py +0 -0
  1069. scitex/scholar/url_finder/translators/individual/the_open_library.py +0 -0
  1070. scitex/scholar/url_finder/translators/individual/the_straits_times.py +0 -0
  1071. scitex/scholar/url_finder/translators/individual/the_telegraph.py +0 -0
  1072. scitex/scholar/url_finder/translators/individual/the_times_and_sunday_times.py +0 -0
  1073. scitex/scholar/url_finder/translators/individual/the_times_of_israel.py +0 -0
  1074. scitex/scholar/url_finder/translators/individual/themarker.py +0 -0
  1075. scitex/scholar/url_finder/translators/individual/theory_of_computing.py +0 -0
  1076. scitex/scholar/url_finder/translators/individual/thesesfr.py +0 -0
  1077. scitex/scholar/url_finder/translators/individual/thieme.py +0 -0
  1078. scitex/scholar/url_finder/translators/individual/time_com.py +0 -0
  1079. scitex/scholar/url_finder/translators/individual/timesmachine.py +0 -0
  1080. scitex/scholar/url_finder/translators/individual/tony_blair_institute.py +0 -0
  1081. scitex/scholar/url_finder/translators/individual/tony_blair_institute_for_global_change.py +0 -0
  1082. scitex/scholar/url_finder/translators/individual/toronto_star.py +0 -0
  1083. scitex/scholar/url_finder/translators/individual/transportation_research_board.py +0 -0
  1084. scitex/scholar/url_finder/translators/individual/treesearch.py +0 -0
  1085. scitex/scholar/url_finder/translators/individual/trove.py +0 -0
  1086. scitex/scholar/url_finder/translators/individual/tumblr.py +0 -0
  1087. scitex/scholar/url_finder/translators/individual/tv_by_the_numbers.py +0 -0
  1088. scitex/scholar/url_finder/translators/individual/tvnz.py +0 -0
  1089. scitex/scholar/url_finder/translators/individual/twitter.py +0 -0
  1090. scitex/scholar/url_finder/translators/individual/ubiquity_journals.py +0 -0
  1091. scitex/scholar/url_finder/translators/individual/uchicago_vufind.py +0 -0
  1092. scitex/scholar/url_finder/translators/individual/unapi.py +0 -0
  1093. scitex/scholar/url_finder/translators/individual/unesco.py +0 -0
  1094. scitex/scholar/url_finder/translators/individual/university_of_california_press_books.py +0 -0
  1095. scitex/scholar/url_finder/translators/individual/university_of_chicago_press_books.py +0 -0
  1096. scitex/scholar/url_finder/translators/individual/university_of_wisconsin_madison_libraries_catalog.py +0 -0
  1097. scitex/scholar/url_finder/translators/individual/university_press_scholarship.py +0 -0
  1098. scitex/scholar/url_finder/translators/individual/unqualified_dublin_core_rdf.py +0 -0
  1099. scitex/scholar/url_finder/translators/individual/unz_print_archive.py +0 -0
  1100. scitex/scholar/url_finder/translators/individual/upcommons.py +0 -0
  1101. scitex/scholar/url_finder/translators/individual/uptodate_references.py +0 -0
  1102. scitex/scholar/url_finder/translators/individual/us_national_archives_research_catalog.py +0 -0
  1103. scitex/scholar/url_finder/translators/individual/usenix.py +0 -0
  1104. scitex/scholar/url_finder/translators/individual/vanity_fair.py +0 -0
  1105. scitex/scholar/url_finder/translators/individual/verniana.py +0 -0
  1106. scitex/scholar/url_finder/translators/individual/verniana_jules_verne_studies.py +0 -0
  1107. scitex/scholar/url_finder/translators/individual/verso_books.py +0 -0
  1108. scitex/scholar/url_finder/translators/individual/vice.py +0 -0
  1109. scitex/scholar/url_finder/translators/individual/victoria___albert_museum.py +0 -0
  1110. scitex/scholar/url_finder/translators/individual/vimeo.py +0 -0
  1111. scitex/scholar/url_finder/translators/individual/vlex.py +0 -0
  1112. scitex/scholar/url_finder/translators/individual/voxeu.py +0 -0
  1113. scitex/scholar/url_finder/translators/individual/wall_street_journal.py +0 -0
  1114. scitex/scholar/url_finder/translators/individual/wanfang_data.py +0 -0
  1115. scitex/scholar/url_finder/translators/individual/washington_monthly.py +0 -0
  1116. scitex/scholar/url_finder/translators/individual/washington_post.py +0 -0
  1117. scitex/scholar/url_finder/translators/individual/web_of_science.py +0 -0
  1118. scitex/scholar/url_finder/translators/individual/web_of_science_nextgen.py +0 -0
  1119. scitex/scholar/url_finder/translators/individual/web_of_science_tagged.py +0 -0
  1120. scitex/scholar/url_finder/translators/individual/welt_online.py +0 -0
  1121. scitex/scholar/url_finder/translators/individual/westlaw_uk.py +0 -0
  1122. scitex/scholar/url_finder/translators/individual/who.py +0 -0
  1123. scitex/scholar/url_finder/translators/individual/wikidata.py +0 -0
  1124. scitex/scholar/url_finder/translators/individual/wikidata_quickstatements.py +0 -0
  1125. scitex/scholar/url_finder/translators/individual/wikileaks_plusd.py +0 -0
  1126. scitex/scholar/url_finder/translators/individual/wikimedia_commons.py +0 -0
  1127. scitex/scholar/url_finder/translators/individual/wikipedia.py +0 -0
  1128. scitex/scholar/url_finder/translators/individual/wikipedia_citation_templates.py +0 -0
  1129. scitex/scholar/url_finder/translators/individual/wikisource.py +0 -0
  1130. scitex/scholar/url_finder/translators/individual/wikiwand.py +0 -0
  1131. scitex/scholar/url_finder/translators/individual/wiktionary.py +0 -0
  1132. scitex/scholar/url_finder/translators/individual/wildlife_biology_in_practice.py +0 -0
  1133. scitex/scholar/url_finder/translators/individual/wiley.py +0 -0
  1134. scitex/scholar/url_finder/translators/individual/wiley_online_library.py +0 -0
  1135. scitex/scholar/url_finder/translators/individual/wilson_center_digital_archive.py +0 -0
  1136. scitex/scholar/url_finder/translators/individual/winnipeg_free_press.py +0 -0
  1137. scitex/scholar/url_finder/translators/individual/wipo.py +0 -0
  1138. scitex/scholar/url_finder/translators/individual/wired.py +0 -0
  1139. scitex/scholar/url_finder/translators/individual/wiso.py +0 -0
  1140. scitex/scholar/url_finder/translators/individual/womennews.py +0 -0
  1141. scitex/scholar/url_finder/translators/individual/world_bank.py +0 -0
  1142. scitex/scholar/url_finder/translators/individual/world_digital_library.py +0 -0
  1143. scitex/scholar/url_finder/translators/individual/world_history_connected.py +0 -0
  1144. scitex/scholar/url_finder/translators/individual/world_shakespeare_bibliography_online.py +0 -0
  1145. scitex/scholar/url_finder/translators/individual/worldcat_discovery_service.py +0 -0
  1146. scitex/scholar/url_finder/translators/individual/xml_contextobject.py +0 -0
  1147. scitex/scholar/url_finder/translators/individual/yandex_books.py +0 -0
  1148. scitex/scholar/url_finder/translators/individual/ynet.py +0 -0
  1149. scitex/scholar/url_finder/translators/individual/youtube.py +0 -0
  1150. scitex/scholar/url_finder/translators/individual/ypfs.py +0 -0
  1151. scitex/scholar/url_finder/translators/individual/ypsf.py +0 -0
  1152. scitex/scholar/url_finder/translators/individual/zbmath.py +0 -0
  1153. scitex/scholar/url_finder/translators/individual/zenodo.py +0 -0
  1154. scitex/scholar/url_finder/translators/individual/ziponline.py +0 -0
  1155. scitex/scholar/url_finder/translators/individual/zobodat.py +0 -0
  1156. scitex/scholar/url_finder/translators/individual/zotero_org.py +0 -0
  1157. scitex/scholar/url_finder/translators/individual/zotero_rdf.py +0 -0
  1158. scitex/scholar/url_finder/translators/individual/zoterobib.py +0 -0
  1159. scitex/scholar/utils/__init__.py +3 -0
  1160. scitex/scholar/utils/bibtex/__init__.py +0 -0
  1161. scitex/scholar/utils/cleanup/__init__.py +0 -0
  1162. scitex/scholar/utils/text/_TextNormalizer.py +0 -0
  1163. scitex/scholar/utils/text/__init__.py +0 -0
  1164. scitex/scholar/utils/validation/DOIValidator.py +289 -0
  1165. scitex/scholar/utils/validation/README.md +169 -0
  1166. scitex/scholar/utils/validation/__init__.py +13 -0
  1167. scitex/scholar/utils/validation/validate_library_dois.py +221 -0
  1168. scitex/scholar/zotero/__init__.py +0 -0
  1169. scitex/security/README.md +255 -0
  1170. scitex/security/__init__.py +35 -0
  1171. scitex/security/cli.py +140 -0
  1172. scitex/security/github.py +358 -0
  1173. scitex/session/README.md +95 -30
  1174. scitex/session/__init__.py +8 -3
  1175. scitex/session/_decorator.py +610 -0
  1176. scitex/session/_lifecycle.py +155 -62
  1177. scitex/session/_manager.py +0 -0
  1178. scitex/session/template.py +16 -110
  1179. scitex/sh/README.md +1 -1
  1180. scitex/sh/__init__.py +0 -0
  1181. scitex/stats/__init__.py +17 -3
  1182. scitex/stats/_schema.py +578 -0
  1183. scitex/stats/correct/_correct_bonferroni.py +3 -3
  1184. scitex/stats/correct/_correct_fdr.py +62 -62
  1185. scitex/stats/correct/_correct_fdr_.py +634 -0
  1186. scitex/stats/correct/_correct_holm.py +2 -2
  1187. scitex/stats/correct/_correct_sidak.py +2 -2
  1188. scitex/stats/descriptive/_circular.py +2 -2
  1189. scitex/stats/descriptive/_describe.py +2 -2
  1190. scitex/stats/descriptive/_nan.py +2 -2
  1191. scitex/stats/descriptive/_real.py +2 -2
  1192. scitex/stats/effect_sizes/_cliffs_delta.py +1 -1
  1193. scitex/stats/effect_sizes/_cohens_d.py +1 -1
  1194. scitex/stats/effect_sizes/_epsilon_squared.py +1 -1
  1195. scitex/stats/effect_sizes/_eta_squared.py +1 -1
  1196. scitex/stats/effect_sizes/_prob_superiority.py +1 -1
  1197. scitex/stats/posthoc/_dunnett.py +3 -3
  1198. scitex/stats/posthoc/_games_howell.py +3 -3
  1199. scitex/stats/posthoc/_tukey_hsd.py +3 -3
  1200. scitex/stats/power/_power.py +1 -1
  1201. scitex/stats/tests/__init__.py +13 -0
  1202. scitex/stats/tests/correlation/__init__.py +3 -22
  1203. scitex/stats/tests/correlation/_test_pearson.py +180 -506
  1204. scitex/stats/utils/_effect_size.py +1 -1
  1205. scitex/stats/utils/_formatters.py +1 -1
  1206. scitex/stats/utils/_normalizers.py +8 -5
  1207. scitex/stats/utils/_power.py +1 -1
  1208. scitex/str/_parse.py +1 -1
  1209. scitex/str/_replace.py +1 -1
  1210. scitex/template/_clone_project.py +58 -41
  1211. scitex/template/_copy.py +22 -15
  1212. scitex/template/_customize.py +9 -4
  1213. scitex/template/_git_strategy.py +32 -32
  1214. scitex/template/_logging_helpers.py +122 -0
  1215. scitex/template/clone_pip_project.py +24 -17
  1216. scitex/template/clone_research.py +26 -21
  1217. scitex/template/clone_singularity.py +25 -22
  1218. scitex/template/clone_writer_directory.py +24 -17
  1219. scitex/tex/_preview.py +2 -2
  1220. scitex/tex/_to_vec.py +1 -1
  1221. scitex/utils/_email.py +1 -1
  1222. scitex/utils/_verify_scitex_format.py +2 -2
  1223. scitex/utils/template.py +1 -1
  1224. scitex/vis/DJANGO_INTEGRATION.md +677 -0
  1225. scitex/vis/README.md +755 -0
  1226. scitex/vis/__init__.py +117 -0
  1227. scitex/vis/backend/__init__.py +56 -0
  1228. scitex/vis/backend/export.py +166 -0
  1229. scitex/vis/backend/parser.py +190 -0
  1230. scitex/vis/backend/render.py +385 -0
  1231. scitex/vis/editor/__init__.py +23 -0
  1232. scitex/vis/editor/_defaults.py +205 -0
  1233. scitex/vis/editor/_edit.py +342 -0
  1234. scitex/vis/editor/_mpl_editor.py +231 -0
  1235. scitex/vis/editor/_tkinter_editor.py +466 -0
  1236. scitex/vis/editor/_web_editor.py +1440 -0
  1237. scitex/vis/io/__init__.py +36 -0
  1238. scitex/vis/io/load.py +168 -0
  1239. scitex/vis/io/save.py +131 -0
  1240. scitex/vis/model/__init__.py +118 -0
  1241. scitex/vis/model/annotations.py +118 -0
  1242. scitex/vis/model/axes.py +153 -0
  1243. scitex/vis/model/figure.py +139 -0
  1244. scitex/vis/model/guides.py +105 -0
  1245. scitex/vis/model/plot.py +126 -0
  1246. scitex/vis/model/plot_types.py +682 -0
  1247. scitex/vis/model/styles.py +246 -0
  1248. scitex/vis/tmp.txt +239 -0
  1249. scitex/vis/utils/__init__.py +75 -0
  1250. scitex/vis/utils/defaults.py +335 -0
  1251. scitex/vis/utils/validate.py +204 -0
  1252. scitex/web/__init__.py +4 -0
  1253. scitex/web/_scraping.py +373 -0
  1254. scitex/writer/README.md +11 -2
  1255. scitex/writer/Writer.py +75 -15
  1256. scitex/writer/_clone_writer_project.py +41 -28
  1257. scitex/writer/_compile/__init__.py +9 -67
  1258. scitex/writer/_compile/_parser.py +0 -0
  1259. scitex/writer/_compile/_runner.py +249 -28
  1260. scitex/writer/_compile/_validator.py +0 -0
  1261. scitex/writer/_compile/manuscript.py +109 -0
  1262. scitex/writer/_compile/revision.py +81 -0
  1263. scitex/writer/_compile/supplementary.py +99 -0
  1264. scitex/writer/_project/__init__.py +0 -0
  1265. scitex/writer/_project/_create.py +10 -12
  1266. scitex/writer/_project/_trees.py +0 -0
  1267. scitex/writer/_project/_validate.py +1 -1
  1268. scitex/writer/_validate_tree_structures.py +4 -4
  1269. scitex/writer/dataclasses/__init__.py +0 -0
  1270. scitex/writer/dataclasses/config/_WriterConfig.py +3 -3
  1271. scitex/writer/dataclasses/config/__init__.py +0 -0
  1272. scitex/writer/dataclasses/contents/_ManuscriptContents.py +4 -3
  1273. scitex/writer/dataclasses/contents/_RevisionContents.py +9 -5
  1274. scitex/writer/dataclasses/contents/_SupplementaryContents.py +7 -4
  1275. scitex/writer/dataclasses/contents/__init__.py +0 -0
  1276. scitex/writer/dataclasses/core/_Document.py +1 -1
  1277. scitex/writer/dataclasses/core/_DocumentSection.py +1 -1
  1278. scitex/writer/dataclasses/core/__init__.py +0 -0
  1279. scitex/writer/dataclasses/results/_CompilationResult.py +1 -1
  1280. scitex/writer/dataclasses/results/_LaTeXIssue.py +1 -1
  1281. scitex/writer/dataclasses/results/_SaveSectionsResponse.py +107 -0
  1282. scitex/writer/dataclasses/results/_SectionReadResponse.py +117 -0
  1283. scitex/writer/dataclasses/results/__init__.py +4 -0
  1284. scitex/writer/dataclasses/tree/_ConfigTree.py +3 -2
  1285. scitex/writer/dataclasses/tree/_ManuscriptTree.py +5 -3
  1286. scitex/writer/dataclasses/tree/_RevisionTree.py +7 -4
  1287. scitex/writer/dataclasses/tree/_ScriptsTree.py +5 -3
  1288. scitex/writer/dataclasses/tree/_SharedTree.py +5 -4
  1289. scitex/writer/dataclasses/tree/_SupplementaryTree.py +7 -4
  1290. scitex/writer/dataclasses/tree/__init__.py +0 -0
  1291. scitex/writer/tests/__init__.py +0 -0
  1292. scitex/writer/utils/.legacy_git_retry.py +1 -1
  1293. scitex/writer/utils/__init__.py +0 -0
  1294. scitex/writer/utils/_parse_latex_logs.py +1 -1
  1295. scitex/writer/utils/_parse_script_args.py +0 -0
  1296. scitex/writer/utils/_watch.py +0 -0
  1297. {scitex-2.1.2.dist-info → scitex-2.4.2.dist-info}/METADATA +373 -363
  1298. {scitex-2.1.2.dist-info → scitex-2.4.2.dist-info}/RECORD +375 -370
  1299. {scitex-2.1.2.dist-info → scitex-2.4.2.dist-info}/WHEEL +1 -1
  1300. scitex-2.4.2.dist-info/licenses/LICENSE +661 -0
  1301. scitex/.claude/mcp-config.json +0 -42
  1302. scitex/_sh.py +0 -18
  1303. scitex/ai/training/legacy/early_stopping.py +0 -150
  1304. scitex/ai/training/legacy/learning_curve_logger.py +0 -557
  1305. scitex/ai/viewed-ai.md +0 -4984
  1306. scitex/browser/ARCHITECTURE_PROPOSAL.md +0 -795
  1307. scitex/browser/INTERACTIVE_COLLABORATION.md +0 -782
  1308. scitex/browser/SAFE_IMPLEMENTATION_PLAN.md +0 -363
  1309. scitex/browser/SHARED_BROWSER_SESSION.md +0 -652
  1310. scitex/browser/TODO.md +0 -11
  1311. scitex/browser/collaboration/CLIENTSERVER_ARCHITECTURE.md +0 -165
  1312. scitex/browser/collaboration/INTERACTION_STRATEGY.md +0 -547
  1313. scitex/browser/collaboration/NON_INTERFERING_LOGIC.md +0 -730
  1314. scitex/browser/template.py +0 -122
  1315. scitex/db/legacy/_inspect_v02.py +0 -171
  1316. scitex/db/legacy/_inspect_v03-not-optimized.py +0 -179
  1317. scitex/db/legacy/_inspect_v04-working-but-printing-both-scheme-and-first-row.py +0 -337
  1318. scitex/db/legacy/_inspect_v05-working-but-no-clear-separation-between-dtype-and-actual-values.py +0 -358
  1319. scitex/dict/_DotDict_v01-not-handling-recursive-instantiations.py +0 -442
  1320. scitex/dict/_DotDict_v02-not-serializing-Path-object.py +0 -446
  1321. scitex/plt/KNOWN_ISSUES.md +0 -68
  1322. scitex/plt/TODO.md +0 -7
  1323. scitex/plt/ax/_plot/_plot_ecdf.py +0 -84
  1324. scitex/plt/ax/_plot/_plot_heatmap.py +0 -266
  1325. scitex/plt/ax/_plot/_plot_joyplot.py +0 -77
  1326. scitex/plt/ax/_plot/_plot_shaded_line.py +0 -142
  1327. scitex/project/DESIGN.md +0 -423
  1328. scitex/project/DJANGO_INTEGRATION.md +0 -546
  1329. scitex/project/NAMING.md +0 -251
  1330. scitex/project/README.md +0 -441
  1331. scitex/project/__init__.py +0 -80
  1332. scitex/project/core.py +0 -466
  1333. scitex/project/metadata.py +0 -345
  1334. scitex/project/storage.py +0 -321
  1335. scitex/project/validators.py +0 -296
  1336. scitex/reproduce/_hash_array.py +0 -22
  1337. scitex/rng/_RandomStateManager_v01-no-verbose-options.py +0 -414
  1338. scitex/scholar/.claude/agents/ArchitectAgent.md +0 -50
  1339. scitex/scholar/.claude/agents/BulletinBoardOrganizerAgent.md +0 -24
  1340. scitex/scholar/.claude/agents/DebuggerAgent.md +0 -38
  1341. scitex/scholar/.claude/agents/ExamplesDeveloperAgent.md +0 -49
  1342. scitex/scholar/.claude/agents/ExperimentationAgent.md +0 -13
  1343. scitex/scholar/.claude/agents/GitHandlerAgent.md +0 -38
  1344. scitex/scholar/.claude/agents/ResearcherAgent.md +0 -35
  1345. scitex/scholar/.claude/agents/ReviewerAgent.md +0 -70
  1346. scitex/scholar/.claude/agents/SciTeXTranslatorAgent.md +0 -55
  1347. scitex/scholar/.claude/agents/SourceDeveloperAgent.md +0 -48
  1348. scitex/scholar/.claude/agents/TestDeveloperAgent.md +0 -48
  1349. scitex/scholar/.claude/agents/TestResultsReportAgent.md +0 -52
  1350. scitex/scholar/.claude/agents/TestRunnerAgent.md +0 -48
  1351. scitex/scholar/.claude/mcp-config.json +0 -42
  1352. scitex/scholar/.legacy/metadata/doi/utils/legacy/_ConfigurationResolver.py +0 -387
  1353. scitex/scholar/.legacy/metadata/urls/.tmp/open_url/legacy/_MultiInstitutionalResolver.py +0 -397
  1354. scitex/scholar/.legacy/metadata/urls/.tmp/open_url/legacy/_OpenURLResolverWithZenRows.py +0 -718
  1355. scitex/scholar/.legacy/metadata/urls/.tmp/open_url/legacy/_ResumableOpenURLResolver.py +0 -298
  1356. scitex/scholar/.legacy/metadata/urls/.tmp/open_url/legacy/_UnimelbLibraryGoButtonSelector.py +0 -466
  1357. scitex/scholar/.legacy/metadata/urls/.tmp/open_url/legacy/_ZenRowsOpenURLResolver.py +0 -372
  1358. scitex/scholar/docs/to_claude/guidelines/.claude/mcp-config.json +0 -0
  1359. scitex/scholar/docs/to_claude/guidelines/.claude/settings.json +0 -231
  1360. scitex/scholar/url_finder/.tmp/open_url/legacy/_MultiInstitutionalResolver.py +0 -397
  1361. scitex/scholar/url_finder/.tmp/open_url/legacy/_OpenURLResolverWithZenRows.py +0 -718
  1362. scitex/scholar/url_finder/.tmp/open_url/legacy/_ResumableOpenURLResolver.py +0 -298
  1363. scitex/scholar/url_finder/.tmp/open_url/legacy/_UnimelbLibraryGoButtonSelector.py +0 -466
  1364. scitex/scholar/url_finder/.tmp/open_url/legacy/_ZenRowsOpenURLResolver.py +0 -372
  1365. scitex/stats/QUICKSTART.md +0 -260
  1366. scitex/stats/TODO.md +0 -19
  1367. scitex/stats/docs/API.md +0 -165
  1368. scitex/stats/docs/ARCHITECTURE.md +0 -732
  1369. scitex/stats/docs/MIGRATION_GUIDE.md +0 -253
  1370. scitex/stats/docs/PROGRESS.md +0 -635
  1371. scitex/stats/docs/SUMMARY.md +0 -241
  1372. scitex/stats/docs/TODO.md +0 -181
  1373. scitex/stats/docs/ax_parameter_migration.md +0 -125
  1374. scitex/stats/template.py +0 -119
  1375. scitex/stats/tests/categorical/__init__.py +0 -20
  1376. scitex/stats/tests/categorical/_test_chi2.py +0 -708
  1377. scitex/stats/tests/categorical/_test_cochran_q.py +0 -609
  1378. scitex/stats/tests/categorical/_test_fisher.py +0 -585
  1379. scitex/stats/tests/categorical/_test_mcnemar.py +0 -567
  1380. scitex/stats/tests/correlation/_test_kendall.py +0 -508
  1381. scitex/stats/tests/correlation/_test_spearman.py +0 -485
  1382. scitex/stats/tests/correlation/_test_theilsen.py +0 -193
  1383. scitex/stats/tests/nonparametric/__init__.py +0 -23
  1384. scitex/stats/tests/nonparametric/_test_brunner_munzel.py +0 -559
  1385. scitex/stats/tests/nonparametric/_test_friedman.py +0 -595
  1386. scitex/stats/tests/nonparametric/_test_kruskal.py +0 -557
  1387. scitex/stats/tests/nonparametric/_test_mannwhitneyu.py +0 -518
  1388. scitex/stats/tests/nonparametric/_test_wilcoxon.py +0 -505
  1389. scitex/stats/tests/normality/__init__.py +0 -17
  1390. scitex/stats/tests/normality/_test_ks.py +0 -702
  1391. scitex/stats/tests/normality/_test_shapiro.py +0 -498
  1392. scitex/stats/tests/parametric/__init__.py +0 -27
  1393. scitex/stats/tests/parametric/_test_anova.py +0 -625
  1394. scitex/stats/tests/parametric/_test_anova_2way.py +0 -665
  1395. scitex/stats/tests/parametric/_test_anova_rm.py +0 -717
  1396. scitex/stats/tests/parametric/_test_ttest.py +0 -835
  1397. scitex/template/ANALYSIS.md +0 -202
  1398. scitex-2.1.2.dist-info/licenses/LICENSE +0 -21
  1399. {scitex-2.1.2.dist-info → scitex-2.4.2.dist-info}/entry_points.txt +0 -0
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  # -*- coding: utf-8 -*-
3
- # Timestamp: "2025-05-18 17:51:44 (ywatanabe)"
4
- # File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/_subplots/_AxisWrapperMixins/_MatplotlibPlotMixin.py
3
+ # Timestamp: "2025-12-01 12:00:00 (ywatanabe)"
4
+ # File: /home/ywatanabe/proj/scitex-code/src/scitex/plt/_subplots/_AxisWrapperMixins/_MatplotlibPlotMixin.py
5
5
  # ----------------------------------------
6
6
  import os
7
7
 
@@ -17,19 +17,39 @@ import numpy as np
17
17
  import pandas as pd
18
18
  from scipy.stats import gaussian_kde
19
19
 
20
- from ....pd import to_xyz
21
- from ....types import ArrayLike
20
+ from scitex.pd import to_xyz
21
+ from scitex.types import ArrayLike
22
+ from scitex.plt.utils import mm_to_pt
23
+
24
+
25
+ # ============================================================================
26
+ # Constants for default styling (same as styles/_plot_defaults.py)
27
+ # ============================================================================
28
+ DEFAULT_LINE_WIDTH_MM = 0.2
29
+ DEFAULT_MARKER_SIZE_MM = 0.8
30
+ DEFAULT_FILL_ALPHA = 0.3
22
31
 
23
32
 
24
33
  class MatplotlibPlotMixin:
25
34
  """Mixin class for basic plotting operations."""
26
-
35
+
27
36
  def _get_ax_module(self):
28
37
  """Lazy import ax module to avoid circular imports."""
29
38
  from ....plt import ax as ax_module
30
39
  return ax_module
31
40
 
32
- def plot_image(
41
+ def _apply_scitex_postprocess(self, method_name, result=None, kwargs=None, args=None):
42
+ """Apply scitex post-processing styling after plotting.
43
+
44
+ This ensures all scitex wrapper methods get the same styling
45
+ as matplotlib methods going through __getattr__ (tick locator, spines, etc.).
46
+ """
47
+ from scitex.plt.styles import apply_plot_postprocess
48
+ apply_plot_postprocess(
49
+ method_name, result, self._axis_mpl, kwargs or {}, args
50
+ )
51
+
52
+ def stx_image(
33
53
  self,
34
54
  arr_2d: ArrayLike,
35
55
  track: bool = True,
@@ -37,11 +57,11 @@ class MatplotlibPlotMixin:
37
57
  **kwargs,
38
58
  ) -> None:
39
59
  # Method Name for downstream csv exporting
40
- method_name = "plot_image"
60
+ method_name = "stx_image"
41
61
 
42
62
  # Plotting with pure matplotlib methods under non-tracking context
43
63
  with self._no_tracking():
44
- self._axis_mpl = self._get_ax_module().plot_image(self._axis_mpl, arr_2d, **kwargs)
64
+ self._axis_mpl = self._get_ax_module().stx_image(self._axis_mpl, arr_2d, **kwargs)
45
65
 
46
66
  # Tracking
47
67
  tracked_dict = {"image_df": pd.DataFrame(arr_2d)}
@@ -55,11 +75,14 @@ class MatplotlibPlotMixin:
55
75
  None,
56
76
  )
57
77
 
78
+ # Apply post-processing (tick locator, spines, etc.)
79
+ self._apply_scitex_postprocess(method_name)
80
+
58
81
  return self._axis_mpl
59
82
 
60
- def plot_kde(
83
+ def stx_kde(
61
84
  self,
62
- data: ArrayLike,
85
+ values_1d: ArrayLike,
63
86
  cumulative=False,
64
87
  fill=False,
65
88
  track: bool = True,
@@ -67,23 +90,23 @@ class MatplotlibPlotMixin:
67
90
  **kwargs,
68
91
  ) -> None:
69
92
  # Method Name for downstream csv exporting
70
- method_name = "plot_kde"
93
+ method_name = "stx_kde"
71
94
 
72
95
  # Sample count as label
73
- n_samples = (~np.isnan(data)).sum()
96
+ n_samples = (~np.isnan(values_1d)).sum()
74
97
  if kwargs.get("label"):
75
- kwargs["label"] = f"{kwargs['label']} (n={n_samples})"
98
+ kwargs["label"] = f"{kwargs['label']} ($n$={n_samples})"
76
99
 
77
100
  # Xlim (kwargs["xlim"] is not accepted in downstream plotters)
78
- xlim = kwargs.get("xlim")
101
+ xlim = kwargs.pop("xlim", None)
79
102
  if not xlim:
80
- xlim = (np.nanmin(data), np.nanmax(data))
103
+ xlim = (np.nanmin(values_1d), np.nanmax(values_1d))
81
104
 
82
105
  # X
83
106
  xx = np.linspace(xlim[0], xlim[1], int(1e3))
84
107
 
85
108
  # Y
86
- density = gaussian_kde(data)(xx)
109
+ density = gaussian_kde(values_1d)(xx)
87
110
  density /= density.sum()
88
111
 
89
112
  # Cumulative
@@ -92,15 +115,29 @@ class MatplotlibPlotMixin:
92
115
 
93
116
  # Plotting with pure matplotlib methods under non-tracking context
94
117
  with self._no_tracking():
118
+ # Get line width from kwargs or use default (0.2mm for KDE)
119
+ from scitex.plt.utils import mm_to_pt
120
+ if 'linewidth' not in kwargs and 'lw' not in kwargs:
121
+ kwargs['linewidth'] = mm_to_pt(0.2) # Default 0.2mm for KDE
122
+
123
+ # Set default color to black (customizable via color kwarg)
124
+ if 'color' not in kwargs and 'c' not in kwargs:
125
+ kwargs['color'] = 'black'
126
+
127
+ # Set default linestyle to dashed (customizable via linestyle kwarg)
128
+ if 'linestyle' not in kwargs and 'ls' not in kwargs:
129
+ kwargs['linestyle'] = '--'
130
+
95
131
  # Filled Line
96
132
  if fill:
97
133
  self._axis_mpl.fill_between(
98
134
  xx,
99
135
  density,
136
+ **kwargs,
100
137
  )
101
138
  # Simple Line
102
139
  else:
103
- self._axis_mpl.plot(xx, density)
140
+ self._axis_mpl.plot(xx, density, **kwargs)
104
141
 
105
142
  # Tracking
106
143
  tracked_dict = {
@@ -116,11 +153,14 @@ class MatplotlibPlotMixin:
116
153
  None,
117
154
  )
118
155
 
156
+ # Apply post-processing (tick locator, spines, etc.)
157
+ self._apply_scitex_postprocess(method_name)
158
+
119
159
  return self._axis_mpl
120
160
 
121
- def plot_conf_mat(
161
+ def stx_conf_mat(
122
162
  self,
123
- data: ArrayLike,
163
+ conf_mat_2d: ArrayLike,
124
164
  x_labels: Optional[List[str]] = None,
125
165
  y_labels: Optional[List[str]] = None,
126
166
  title: str = "Confusion Matrix",
@@ -136,13 +176,13 @@ class MatplotlibPlotMixin:
136
176
  **kwargs,
137
177
  ) -> None:
138
178
  # Method Name for downstream csv exporting
139
- method_name = "plot_conf_mat"
179
+ method_name = "stx_conf_mat"
140
180
 
141
181
  # Plotting with pure matplotlib methods under non-tracking context
142
182
  with self._no_tracking():
143
- self._axis_mpl, bacc_val = self._get_ax_module().plot_conf_mat(
183
+ self._axis_mpl, bacc_val = self._get_ax_module().stx_conf_mat(
144
184
  self._axis_mpl,
145
- data,
185
+ conf_mat_2d,
146
186
  x_labels=x_labels,
147
187
  y_labels=y_labels,
148
188
  title=title,
@@ -160,10 +200,13 @@ class MatplotlibPlotMixin:
160
200
  # Tracking
161
201
  self._track(track, id, method_name, tracked_dict, None)
162
202
 
203
+ # Apply post-processing (tick locator, spines, etc.)
204
+ self._apply_scitex_postprocess(method_name)
205
+
163
206
  return self._axis_mpl, bacc_val
164
207
 
165
208
  # @wraps removed to avoid circular import
166
- def plot_rectangle(
209
+ def stx_rectangle(
167
210
  self,
168
211
  xx: float,
169
212
  yy: float,
@@ -174,11 +217,11 @@ class MatplotlibPlotMixin:
174
217
  **kwargs,
175
218
  ) -> None:
176
219
  # Method Name for downstream csv exporting
177
- method_name = "plot_rectangle"
220
+ method_name = "stx_rectangle"
178
221
 
179
222
  # Plotting with pure matplotlib methods under non-tracking context
180
223
  with self._no_tracking():
181
- self._axis_mpl = self._get_ax_module().plot_rectangle(
224
+ self._axis_mpl = self._get_ax_module().stx_rectangle(
182
225
  self._axis_mpl, xx, yy, width, height, **kwargs
183
226
  )
184
227
 
@@ -186,13 +229,16 @@ class MatplotlibPlotMixin:
186
229
  tracked_dict = {"xx": xx, "yy": yy, "width": width, "height": height}
187
230
  self._track(track, id, method_name, tracked_dict, None)
188
231
 
232
+ # Apply post-processing (tick locator, spines, etc.)
233
+ self._apply_scitex_postprocess(method_name)
234
+
189
235
  return self._axis_mpl
190
236
 
191
237
  # @wraps removed to avoid circular import
192
- def plot_fillv(
238
+ def stx_fillv(
193
239
  self,
194
- starts: ArrayLike,
195
- ends: ArrayLike,
240
+ starts_1d: ArrayLike,
241
+ ends_1d: ArrayLike,
196
242
  color: str = "red",
197
243
  alpha: float = 0.2,
198
244
  track: bool = True,
@@ -200,51 +246,70 @@ class MatplotlibPlotMixin:
200
246
  **kwargs,
201
247
  ) -> None:
202
248
  # Method Name for downstream csv exporting
203
- method_name = "plot_fillv"
249
+ method_name = "stx_fillv"
204
250
 
205
251
  # Plotting with pure matplotlib methods under non-tracking context
206
252
  with self._no_tracking():
207
- self._axis_mpl = self._get_ax_module().plot_fillv(
208
- self._axis_mpl, starts, ends, color=color, alpha=alpha
253
+ self._axis_mpl = self._get_ax_module().stx_fillv(
254
+ self._axis_mpl, starts_1d, ends_1d, color=color, alpha=alpha
209
255
  )
210
256
 
211
257
  # Tracking
212
- tracked_dict = {"starts": starts, "ends": ends}
258
+ tracked_dict = {"starts": starts_1d, "ends": ends_1d}
213
259
  self._track(track, id, method_name, tracked_dict, None)
214
260
 
261
+ # Apply post-processing (tick locator, spines, etc.)
262
+ self._apply_scitex_postprocess(method_name)
263
+
215
264
  return self._axis_mpl
216
265
 
217
- def plot_box(
266
+ def stx_box(
218
267
  self,
219
- data: ArrayLike,
268
+ values_list: ArrayLike,
269
+ colors: Optional[List] = None,
220
270
  track: bool = True,
221
271
  id: Optional[str] = None,
222
272
  **kwargs,
223
- ) -> None:
273
+ ) -> dict:
224
274
  # Method Name for downstream csv exporting
225
- method_name = "plot_box"
275
+ method_name = "stx_box"
226
276
 
227
277
  # Copy data
228
- _data = data.copy()
278
+ _data = values_list.copy()
229
279
 
230
- # Sample count as label
231
- n = len(data)
280
+ # Sample count per group as label (show range if variable)
232
281
  if kwargs.get("label"):
233
- kwargs["label"] = kwargs["label"] + f" (n={n})"
282
+ n_per_group = [len(g) for g in values_list]
283
+ n_min, n_max = min(n_per_group), max(n_per_group)
284
+ n_str = str(n_min) if n_min == n_max else f"{n_min}-{n_max}"
285
+ kwargs["label"] = kwargs["label"] + f" ($n$={n_str})"
286
+
287
+ # Enable patch_artist for styling (fill colors, edges)
288
+ if "patch_artist" not in kwargs:
289
+ kwargs["patch_artist"] = True
234
290
 
235
291
  # Plotting with pure matplotlib methods under non-tracking context
236
292
  with self._no_tracking():
237
- self._axis_mpl.boxplot(data, **kwargs)
293
+ result = self._axis_mpl.boxplot(values_list, **kwargs)
238
294
 
239
- # Tracking
295
+ # Tracking - calculate sample size per group
296
+ n_per_group = [len(g) for g in values_list]
240
297
  tracked_dict = {
241
298
  "data": _data,
242
- "n": [n for ii in range(len(data))],
299
+ "n": n_per_group,
243
300
  }
244
301
  self._track(track, id, method_name, tracked_dict, None)
245
302
 
246
- return self._axis_mpl
247
-
303
+ # Apply style_boxplot automatically for publication quality
304
+ # Uses scitex palette by default, or custom colors if provided
305
+ from scitex.plt.ax import style_boxplot
306
+ style_boxplot(result, colors=colors)
307
+
308
+ # Apply post-processing (tick locator, spines, etc.)
309
+ self._apply_scitex_postprocess(method_name, result)
310
+
311
+ return result
312
+
248
313
  def hist(
249
314
  self,
250
315
  x: ArrayLike,
@@ -302,13 +367,16 @@ class MatplotlibPlotMixin:
302
367
  }
303
368
 
304
369
  self._track(track, id, method_name, tracked_dict, kwargs)
305
-
370
+
371
+ # Apply post-processing (tick locator, spines, etc.)
372
+ self._apply_scitex_postprocess(method_name, hist_data)
373
+
306
374
  return hist_data
307
375
 
308
376
  # @wraps removed to avoid circular import
309
- def plot_raster(
377
+ def stx_raster(
310
378
  self,
311
- positions: List[ArrayLike],
379
+ spike_times_list: List[ArrayLike],
312
380
  time: Optional[ArrayLike] = None,
313
381
  labels: Optional[List[str]] = None,
314
382
  colors: Optional[List[str]] = None,
@@ -317,90 +385,77 @@ class MatplotlibPlotMixin:
317
385
  **kwargs,
318
386
  ) -> None:
319
387
  # Method Name for downstream csv exporting
320
- method_name = "plot_raster"
388
+ method_name = "stx_raster"
321
389
 
322
390
  # Plotting with pure matplotlib methods under non-tracking context
323
391
  with self._no_tracking():
324
- self._axis_mpl, raster_digit_df = self._get_ax_module().plot_raster(
325
- self._axis_mpl, positions, time=time
392
+ self._axis_mpl, raster_digit_df = self._get_ax_module().stx_raster(
393
+ self._axis_mpl, spike_times_list, time=time
326
394
  )
327
395
 
328
396
  # Tracking
329
397
  tracked_dict = {"raster_digit_df": raster_digit_df}
330
398
  self._track(track, id, method_name, tracked_dict, None)
331
399
 
400
+ # Apply post-processing (tick locator, spines, etc.)
401
+ self._apply_scitex_postprocess(method_name)
402
+
332
403
  return self._axis_mpl, raster_digit_df
333
404
 
334
405
  # @wraps removed to avoid circular import
335
- def plot_ecdf(
406
+ def stx_ecdf(
336
407
  self,
337
- data: ArrayLike,
408
+ values_1d: ArrayLike,
338
409
  track: bool = True,
339
410
  id: Optional[str] = None,
340
411
  **kwargs,
341
412
  ) -> None:
342
413
  # Method Name for downstream csv exporting
343
- method_name = "plot_ecdf"
414
+ method_name = "stx_ecdf"
344
415
 
345
416
  # Plotting with pure matplotlib methods under non-tracking context
346
417
  with self._no_tracking():
347
- self._axis_mpl, ecdf_df = self._get_ax_module().plot_ecdf(
348
- self._axis_mpl, data, **kwargs
418
+ self._axis_mpl, ecdf_df = self._get_ax_module().stx_ecdf(
419
+ self._axis_mpl, values_1d, **kwargs
349
420
  )
350
421
 
351
422
  # Tracking
352
423
  tracked_dict = {"ecdf_df": ecdf_df}
353
424
  self._track(track, id, method_name, tracked_dict, None)
354
425
 
426
+ # Apply post-processing (tick locator, spines, etc.)
427
+ self._apply_scitex_postprocess(method_name)
428
+
355
429
  return self._axis_mpl, ecdf_df
356
430
 
357
431
  # @wraps removed to avoid circular import
358
- def plot_joyplot(
432
+ def stx_joyplot(
359
433
  self,
360
- data: ArrayLike,
361
- orientation: str = "vertical",
434
+ arrays: ArrayLike,
362
435
  track: bool = True,
363
436
  id: Optional[str] = None,
364
437
  **kwargs,
365
438
  ) -> None:
366
439
  # Method Name for downstream csv exporting
367
- method_name = "plot_joyplot"
440
+ method_name = "stx_joyplot"
368
441
 
369
442
  # Plotting with pure matplotlib methods under non-tracking context
370
443
  with self._no_tracking():
371
- self._axis_mpl = self._get_ax_module().plot_joyplot(
372
- self._axis_mpl, data, orientation=orientation, **kwargs
444
+ self._axis_mpl = self._get_ax_module().stx_joyplot(
445
+ self._axis_mpl, arrays, **kwargs
373
446
  )
374
447
 
375
448
  # Tracking
376
- tracked_dict = {"joyplot_data": data}
449
+ tracked_dict = {"joyplot_arrays": arrays}
377
450
  self._track(track, id, method_name, tracked_dict, None)
378
451
 
379
- return self._axis_mpl
380
-
381
- # @wraps removed to avoid circular import
382
- def plot_joyplot(
383
- self,
384
- data: ArrayLike,
385
- track: bool = True,
386
- id: Optional[str] = None,
387
- **kwargs,
388
- ) -> None:
389
- # Method Name for downstream csv exporting
390
- method_name = "plot_joyplot"
391
-
392
- # Plotting with pure matplotlib methods under non-tracking context
393
- with self._no_tracking():
394
- self._axis_mpl = self._get_ax_module().plot_joyplot(self._axis_mpl, data, **kwargs)
395
-
396
- # Tracking
397
- tracked_dict = {"joyplot_data": data}
398
- self._track(track, id, method_name, tracked_dict, None)
452
+ # Apply post-processing (tick locator, spines, etc.)
453
+ self._apply_scitex_postprocess(method_name)
399
454
 
400
455
  return self._axis_mpl
401
456
 
402
457
  # @wraps removed to avoid circular import
403
- def plot_scatter_hist(
458
+ def stx_scatter_hist(
404
459
  self,
405
460
  x: ArrayLike,
406
461
  y: ArrayLike,
@@ -418,11 +473,11 @@ class MatplotlibPlotMixin:
418
473
  ) -> None:
419
474
  """Plot a scatter plot with marginal histograms."""
420
475
  # Method Name for downstream csv exporting
421
- method_name = "plot_scatter_hist"
476
+ method_name = "stx_scatter_hist"
422
477
 
423
478
  # Plotting with pure matplotlib methods under non-tracking context
424
479
  with self._no_tracking():
425
- self._axis_mpl, ax_histx, ax_histy, hist_data = self._get_ax_module().plot_scatter_hist(
480
+ self._axis_mpl, ax_histx, ax_histy, hist_data = self._get_ax_module().stx_scatter_hist(
426
481
  self._axis_mpl,
427
482
  x,
428
483
  y,
@@ -448,12 +503,15 @@ class MatplotlibPlotMixin:
448
503
  }
449
504
  self._track(track, id, method_name, tracked_dict, None)
450
505
 
506
+ # Apply post-processing (tick locator, spines, etc.)
507
+ self._apply_scitex_postprocess(method_name)
508
+
451
509
  return self._axis_mpl, ax_histx, ax_histy, hist_data
452
510
 
453
511
  # @wraps removed to avoid circular import
454
- def plot_heatmap(
512
+ def stx_heatmap(
455
513
  self,
456
- data: ArrayLike,
514
+ values_2d: ArrayLike,
457
515
  x_labels: Optional[List[str]] = None,
458
516
  y_labels: Optional[List[str]] = None,
459
517
  cmap: str = "viridis",
@@ -468,13 +526,13 @@ class MatplotlibPlotMixin:
468
526
  ) -> Tuple[matplotlib.image.AxesImage, matplotlib.colorbar.Colorbar]:
469
527
  """Plot a heatmap on the axes."""
470
528
  # Method Name for downstream csv exporting
471
- method_name = "plot_heatmap"
529
+ method_name = "stx_heatmap"
472
530
 
473
531
  # Plotting with pure matplotlib methods under non-tracking context
474
532
  with self._no_tracking():
475
- ax, im, cbar = self._get_ax_module().plot_heatmap(
533
+ ax, im, cbar = self._get_ax_module().stx_heatmap(
476
534
  self._axis_mpl,
477
- data,
535
+ values_2d,
478
536
  x_labels=x_labels,
479
537
  y_labels=y_labels,
480
538
  cmap=cmap,
@@ -488,18 +546,21 @@ class MatplotlibPlotMixin:
488
546
 
489
547
  # Tracking
490
548
  tracked_dict = {
491
- "data": data,
549
+ "data": values_2d,
492
550
  "x_labels": x_labels,
493
551
  "y_labels": y_labels,
494
552
  }
495
553
  self._track(track, id, method_name, tracked_dict, None)
496
554
 
555
+ # Apply post-processing (tick locator, spines, etc.)
556
+ self._apply_scitex_postprocess(method_name)
557
+
497
558
  return ax, im, cbar
498
559
 
499
560
  # @wraps removed to avoid circular import
500
- def plot_violin(
561
+ def stx_violin(
501
562
  self,
502
- data: Union[pd.DataFrame, List, ArrayLike],
563
+ values_list: Union[pd.DataFrame, List, ArrayLike],
503
564
  x=None,
504
565
  y=None,
505
566
  hue=None,
@@ -512,17 +573,17 @@ class MatplotlibPlotMixin:
512
573
  ) -> None:
513
574
  """Plot a violin plot."""
514
575
  # Method Name for downstream csv exporting
515
- method_name = "plot_violin"
576
+ method_name = "stx_violin"
516
577
 
517
578
  # Plotting with pure matplotlib methods under non-tracking context
518
579
  with self._no_tracking():
519
580
  # Handle the list-style input case
520
- if isinstance(data, list) and all(
521
- isinstance(item, (list, np.ndarray)) for item in data
581
+ if isinstance(values_list, list) and all(
582
+ isinstance(item, (list, np.ndarray)) for item in values_list
522
583
  ):
523
- self._axis_mpl = self._get_ax_module().plot_violin(
584
+ self._axis_mpl = self._get_ax_module().stx_violin(
524
585
  self._axis_mpl,
525
- data_list=data,
586
+ values_list=values_list,
526
587
  labels=labels,
527
588
  colors=colors,
528
589
  half=half,
@@ -530,9 +591,9 @@ class MatplotlibPlotMixin:
530
591
  )
531
592
  # Handle DataFrame or other inputs
532
593
  else:
533
- self._axis_mpl = self._get_ax_module().plot_violin(
594
+ self._axis_mpl = self._get_ax_module().stx_violin(
534
595
  self._axis_mpl,
535
- data=data,
596
+ data=values_list,
536
597
  x=x,
537
598
  y=y,
538
599
  hue=hue,
@@ -542,7 +603,7 @@ class MatplotlibPlotMixin:
542
603
 
543
604
  # Tracking
544
605
  tracked_dict = {
545
- "data": data,
606
+ "data": values_list,
546
607
  "x": x,
547
608
  "y": y,
548
609
  "hue": hue,
@@ -551,6 +612,10 @@ class MatplotlibPlotMixin:
551
612
  "colors": colors,
552
613
  }
553
614
  self._track(track, id, method_name, tracked_dict, None)
615
+
616
+ # Apply post-processing (tick locator, spines, etc.)
617
+ self._apply_scitex_postprocess(method_name)
618
+
554
619
  return self._axis_mpl
555
620
 
556
621
  # def plot_area(
@@ -756,9 +821,9 @@ class MatplotlibPlotMixin:
756
821
  # return self._axis_mpl
757
822
 
758
823
  # @wraps removed to avoid circular import
759
- def plot_line(
824
+ def stx_line(
760
825
  self,
761
- data: ArrayLike,
826
+ values_1d: ArrayLike,
762
827
  xx: Optional[ArrayLike] = None,
763
828
  track: bool = True,
764
829
  id: Optional[str] = None,
@@ -766,24 +831,27 @@ class MatplotlibPlotMixin:
766
831
  ) -> None:
767
832
  """Plot a simple line."""
768
833
  # Method Name for downstream csv exporting
769
- method_name = "plot_line"
834
+ method_name = "stx_line"
770
835
 
771
836
  # Plotting with pure matplotlib methods under non-tracking context
772
837
  with self._no_tracking():
773
- self._axis_mpl, plot_df = self._get_ax_module().plot_line(
774
- self._axis_mpl, data, xx=xx, **kwargs
838
+ self._axis_mpl, plot_df = self._get_ax_module().stx_line(
839
+ self._axis_mpl, values_1d, xx=xx, **kwargs
775
840
  )
776
841
 
777
842
  # Tracking
778
843
  tracked_dict = {"plot_df": plot_df}
779
844
  self._track(track, id, method_name, tracked_dict, None)
780
845
 
846
+ # Apply post-processing (tick locator, spines, etc.)
847
+ self._apply_scitex_postprocess(method_name)
848
+
781
849
  return self._axis_mpl, plot_df
782
850
 
783
851
  # @wraps removed to avoid circular import
784
- def plot_mean_std(
852
+ def stx_mean_std(
785
853
  self,
786
- data: ArrayLike,
854
+ values_2d: ArrayLike,
787
855
  xx: Optional[ArrayLike] = None,
788
856
  sd: float = 1,
789
857
  track: bool = True,
@@ -792,24 +860,27 @@ class MatplotlibPlotMixin:
792
860
  ) -> None:
793
861
  """Plot mean line with standard deviation shading."""
794
862
  # Method Name for downstream csv exporting
795
- method_name = "plot_mean_std"
863
+ method_name = "stx_mean_std"
796
864
 
797
865
  # Plotting with pure matplotlib methods under non-tracking context
798
866
  with self._no_tracking():
799
- self._axis_mpl, plot_df = self._get_ax_module().plot_mean_std(
800
- self._axis_mpl, data, xx=xx, sd=sd, **kwargs
867
+ self._axis_mpl, plot_df = self._get_ax_module().stx_mean_std(
868
+ self._axis_mpl, values_2d, xx=xx, sd=sd, **kwargs
801
869
  )
802
870
 
803
871
  # Tracking
804
872
  tracked_dict = {"plot_df": plot_df}
805
873
  self._track(track, id, method_name, tracked_dict, None)
806
874
 
875
+ # Apply post-processing (tick locator, spines, etc.)
876
+ self._apply_scitex_postprocess(method_name)
877
+
807
878
  return self._axis_mpl, plot_df
808
879
 
809
880
  # @wraps removed to avoid circular import
810
- def plot_mean_ci(
881
+ def stx_mean_ci(
811
882
  self,
812
- data: ArrayLike,
883
+ values_2d: ArrayLike,
813
884
  xx: Optional[ArrayLike] = None,
814
885
  perc: float = 95,
815
886
  track: bool = True,
@@ -818,24 +889,27 @@ class MatplotlibPlotMixin:
818
889
  ) -> None:
819
890
  """Plot mean line with confidence interval shading."""
820
891
  # Method Name for downstream csv exporting
821
- method_name = "plot_mean_ci"
892
+ method_name = "stx_mean_ci"
822
893
 
823
894
  # Plotting with pure matplotlib methods under non-tracking context
824
895
  with self._no_tracking():
825
- self._axis_mpl, plot_df = self._get_ax_module().plot_mean_ci(
826
- self._axis_mpl, data, xx=xx, perc=perc, **kwargs
896
+ self._axis_mpl, plot_df = self._get_ax_module().stx_mean_ci(
897
+ self._axis_mpl, values_2d, xx=xx, perc=perc, **kwargs
827
898
  )
828
899
 
829
900
  # Tracking
830
901
  tracked_dict = {"plot_df": plot_df}
831
902
  self._track(track, id, method_name, tracked_dict, None)
832
903
 
904
+ # Apply post-processing (tick locator, spines, etc.)
905
+ self._apply_scitex_postprocess(method_name)
906
+
833
907
  return self._axis_mpl, plot_df
834
908
 
835
909
  # @wraps removed to avoid circular import
836
- def plot_median_iqr(
910
+ def stx_median_iqr(
837
911
  self,
838
- data: ArrayLike,
912
+ values_2d: ArrayLike,
839
913
  xx: Optional[ArrayLike] = None,
840
914
  track: bool = True,
841
915
  id: Optional[str] = None,
@@ -843,22 +917,25 @@ class MatplotlibPlotMixin:
843
917
  ) -> None:
844
918
  """Plot median line with interquartile range shading."""
845
919
  # Method Name for downstream csv exporting
846
- method_name = "plot_median_iqr"
920
+ method_name = "stx_median_iqr"
847
921
 
848
922
  # Plotting with pure matplotlib methods under non-tracking context
849
923
  with self._no_tracking():
850
- self._axis_mpl, plot_df = self._get_ax_module().plot_median_iqr(
851
- self._axis_mpl, data, xx=xx, **kwargs
924
+ self._axis_mpl, plot_df = self._get_ax_module().stx_median_iqr(
925
+ self._axis_mpl, values_2d, xx=xx, **kwargs
852
926
  )
853
927
 
854
928
  # Tracking
855
929
  tracked_dict = {"plot_df": plot_df}
856
930
  self._track(track, id, method_name, tracked_dict, None)
857
931
 
932
+ # Apply post-processing (tick locator, spines, etc.)
933
+ self._apply_scitex_postprocess(method_name)
934
+
858
935
  return self._axis_mpl, plot_df
859
936
 
860
937
  # @wraps removed to avoid circular import
861
- def plot_shaded_line(
938
+ def stx_shaded_line(
862
939
  self,
863
940
  xs: ArrayLike,
864
941
  ys_lower: ArrayLike,
@@ -872,11 +949,11 @@ class MatplotlibPlotMixin:
872
949
  ) -> None:
873
950
  """Plot a line with shaded area between lower and upper bounds."""
874
951
  # Method Name for downstream csv exporting
875
- method_name = "plot_shaded_line"
952
+ method_name = "stx_shaded_line"
876
953
 
877
954
  # Plotting with pure matplotlib methods under non-tracking context
878
955
  with self._no_tracking():
879
- self._axis_mpl, plot_df = self._get_ax_module().plot_shaded_line(
956
+ self._axis_mpl, plot_df = self._get_ax_module().stx_shaded_line(
880
957
  self._axis_mpl,
881
958
  xs,
882
959
  ys_lower,
@@ -891,8 +968,316 @@ class MatplotlibPlotMixin:
891
968
  tracked_dict = {"plot_df": plot_df}
892
969
  self._track(track, id, method_name, tracked_dict, None)
893
970
 
971
+ # Apply post-processing (tick locator, spines, etc.)
972
+ self._apply_scitex_postprocess(method_name)
973
+
894
974
  return self._axis_mpl, plot_df
895
975
 
976
+ # =========================================================================
977
+ # stx_ aliases for standard matplotlib methods
978
+ # These provide a consistent stx_ prefix for all scitex wrapper methods
979
+ # =========================================================================
980
+
981
+ def stx_bar(self, x, height, track: bool = True, id: Optional[str] = None, **kwargs):
982
+ """Bar plot with scitex styling and tracking.
983
+
984
+ Parameters
985
+ ----------
986
+ x : array-like
987
+ The x coordinates of the bars
988
+ height : array-like
989
+ The heights of the bars
990
+ track : bool
991
+ Whether to track data for CSV export
992
+ id : str, optional
993
+ Identifier for tracking
994
+ **kwargs
995
+ Additional arguments passed to matplotlib bar
996
+ """
997
+ method_name = "stx_bar"
998
+
999
+ # Add sample size to label if provided
1000
+ if kwargs.get("label"):
1001
+ n_samples = len(x)
1002
+ kwargs["label"] = f"{kwargs['label']} ($n$={n_samples})"
1003
+
1004
+ with self._no_tracking():
1005
+ result = self._axis_mpl.bar(x, height, **kwargs)
1006
+
1007
+ # Track bar data
1008
+ tracked_dict = {"bar_df": pd.DataFrame({"x": x, "height": height})}
1009
+ self._track(track, id, method_name, tracked_dict, None)
1010
+
1011
+ # Apply style_barplot automatically for publication quality
1012
+ from scitex.plt.ax import style_barplot
1013
+ style_barplot(result)
1014
+
1015
+ # Apply post-processing (tick locator, spines, etc.)
1016
+ self._apply_scitex_postprocess(method_name, result)
1017
+
1018
+ return result
1019
+
1020
+ def stx_barh(self, y, width, track: bool = True, id: Optional[str] = None, **kwargs):
1021
+ """Horizontal bar plot with scitex styling and tracking.
1022
+
1023
+ Parameters
1024
+ ----------
1025
+ y : array-like
1026
+ The y coordinates of the bars
1027
+ width : array-like
1028
+ The widths of the bars
1029
+ track : bool
1030
+ Whether to track data for CSV export
1031
+ id : str, optional
1032
+ Identifier for tracking
1033
+ **kwargs
1034
+ Additional arguments passed to matplotlib barh
1035
+ """
1036
+ method_name = "stx_barh"
1037
+
1038
+ # Add sample size to label if provided
1039
+ if kwargs.get("label"):
1040
+ n_samples = len(y)
1041
+ kwargs["label"] = f"{kwargs['label']} ($n$={n_samples})"
1042
+
1043
+ with self._no_tracking():
1044
+ result = self._axis_mpl.barh(y, width, **kwargs)
1045
+
1046
+ # Track bar data
1047
+ tracked_dict = {"barh_df": pd.DataFrame({"y": y, "width": width})}
1048
+ self._track(track, id, method_name, tracked_dict, None)
1049
+
1050
+ # Apply post-processing (tick locator, spines, etc.)
1051
+ self._apply_scitex_postprocess(method_name, result)
1052
+
1053
+ return result
1054
+
1055
+ def stx_scatter(self, x, y, track: bool = True, id: Optional[str] = None, **kwargs):
1056
+ """Scatter plot with scitex styling and tracking.
1057
+
1058
+ Parameters
1059
+ ----------
1060
+ x : array-like
1061
+ The x coordinates of the points
1062
+ y : array-like
1063
+ The y coordinates of the points
1064
+ track : bool
1065
+ Whether to track data for CSV export
1066
+ id : str, optional
1067
+ Identifier for tracking
1068
+ **kwargs
1069
+ Additional arguments passed to matplotlib scatter
1070
+ """
1071
+ method_name = "stx_scatter"
1072
+
1073
+ # Add sample size to label if provided
1074
+ if kwargs.get("label"):
1075
+ n_samples = len(x)
1076
+ kwargs["label"] = f"{kwargs['label']} ($n$={n_samples})"
1077
+
1078
+ with self._no_tracking():
1079
+ result = self._axis_mpl.scatter(x, y, **kwargs)
1080
+
1081
+ # Track scatter data
1082
+ tracked_dict = {"scatter_df": pd.DataFrame({"x": x, "y": y})}
1083
+ self._track(track, id, method_name, tracked_dict, None)
1084
+
1085
+ # Apply style_scatter automatically for publication quality
1086
+ from scitex.plt.ax import style_scatter
1087
+ style_scatter(result)
1088
+
1089
+ # Apply post-processing (tick locator, spines, etc.)
1090
+ self._apply_scitex_postprocess(method_name, result)
1091
+
1092
+ return result
1093
+
1094
+ def stx_errorbar(self, x, y, yerr=None, xerr=None, track: bool = True, id: Optional[str] = None, **kwargs):
1095
+ """Error bar plot with scitex styling and tracking.
1096
+
1097
+ Parameters
1098
+ ----------
1099
+ x : array-like
1100
+ The x coordinates of the data points
1101
+ y : array-like
1102
+ The y coordinates of the data points
1103
+ yerr : array-like, optional
1104
+ The y error values
1105
+ xerr : array-like, optional
1106
+ The x error values
1107
+ track : bool
1108
+ Whether to track data for CSV export
1109
+ id : str, optional
1110
+ Identifier for tracking
1111
+ **kwargs
1112
+ Additional arguments passed to matplotlib errorbar
1113
+ """
1114
+ method_name = "stx_errorbar"
1115
+
1116
+ # Add sample size to label if provided
1117
+ if kwargs.get("label"):
1118
+ n_samples = len(x)
1119
+ kwargs["label"] = f"{kwargs['label']} ($n$={n_samples})"
1120
+
1121
+ with self._no_tracking():
1122
+ result = self._axis_mpl.errorbar(x, y, yerr=yerr, xerr=xerr, **kwargs)
1123
+
1124
+ # Track errorbar data
1125
+ df_dict = {"x": x, "y": y}
1126
+ if yerr is not None:
1127
+ df_dict["yerr"] = yerr
1128
+ if xerr is not None:
1129
+ df_dict["xerr"] = xerr
1130
+ tracked_dict = {"errorbar_df": pd.DataFrame(df_dict)}
1131
+ self._track(track, id, method_name, tracked_dict, None)
1132
+
1133
+ # Apply style_errorbar automatically for publication quality
1134
+ from scitex.plt.ax import style_errorbar
1135
+ style_errorbar(result)
1136
+
1137
+ # Apply post-processing (tick locator, spines, etc.)
1138
+ self._apply_scitex_postprocess(method_name, result)
1139
+
1140
+ return result
1141
+
1142
+ def stx_fill_between(self, x, y1, y2=0, track: bool = True, id: Optional[str] = None, **kwargs):
1143
+ """Fill between plot with scitex styling and tracking.
1144
+
1145
+ Parameters
1146
+ ----------
1147
+ x : array-like
1148
+ The x coordinates
1149
+ y1 : array-like
1150
+ The first y boundary
1151
+ y2 : array-like or scalar, optional
1152
+ The second y boundary (default 0)
1153
+ track : bool
1154
+ Whether to track data for CSV export
1155
+ id : str, optional
1156
+ Identifier for tracking
1157
+ **kwargs
1158
+ Additional arguments passed to matplotlib fill_between
1159
+ """
1160
+ method_name = "stx_fill_between"
1161
+
1162
+ with self._no_tracking():
1163
+ result = self._axis_mpl.fill_between(x, y1, y2, **kwargs)
1164
+
1165
+ # Track fill_between data
1166
+ tracked_dict = {"fill_between_df": pd.DataFrame({
1167
+ "x": x,
1168
+ "y1": y1,
1169
+ "y2": y2 if hasattr(y2, '__len__') else [y2] * len(x)
1170
+ })}
1171
+ self._track(track, id, method_name, tracked_dict, None)
1172
+
1173
+ # Apply post-processing (tick locator, spines, etc.)
1174
+ self._apply_scitex_postprocess(method_name, result)
1175
+
1176
+ return result
1177
+
1178
+ def stx_contour(self, *args, track: bool = True, id: Optional[str] = None, **kwargs):
1179
+ """Contour plot with scitex styling and tracking.
1180
+
1181
+ Parameters
1182
+ ----------
1183
+ *args
1184
+ Positional arguments passed to matplotlib contour (X, Y, Z)
1185
+ track : bool
1186
+ Whether to track data for CSV export
1187
+ id : str, optional
1188
+ Identifier for tracking
1189
+ **kwargs
1190
+ Additional arguments passed to matplotlib contour
1191
+ """
1192
+ method_name = "stx_contour"
1193
+
1194
+ with self._no_tracking():
1195
+ result = self._axis_mpl.contour(*args, **kwargs)
1196
+
1197
+ # Track contour data
1198
+ if len(args) >= 3:
1199
+ X, Y, Z = args[0], args[1], args[2]
1200
+ tracked_dict = {"contour_df": pd.DataFrame({
1201
+ "X": np.ravel(X),
1202
+ "Y": np.ravel(Y),
1203
+ "Z": np.ravel(Z)
1204
+ })}
1205
+ self._track(track, id, method_name, tracked_dict, None)
1206
+
1207
+ # Apply post-processing (tick locator, spines, etc.)
1208
+ self._apply_scitex_postprocess(method_name, result)
1209
+
1210
+ return result
1211
+
1212
+ def stx_imshow(self, data, track: bool = True, id: Optional[str] = None, **kwargs):
1213
+ """Image display with scitex styling and tracking.
1214
+
1215
+ Parameters
1216
+ ----------
1217
+ data : array-like
1218
+ 2D array of image data
1219
+ track : bool
1220
+ Whether to track data for CSV export
1221
+ id : str, optional
1222
+ Identifier for tracking
1223
+ **kwargs
1224
+ Additional arguments passed to matplotlib imshow
1225
+ """
1226
+ method_name = "stx_imshow"
1227
+
1228
+ with self._no_tracking():
1229
+ result = self._axis_mpl.imshow(data, **kwargs)
1230
+
1231
+ # Track image data
1232
+ if hasattr(data, 'shape') and len(data.shape) == 2:
1233
+ n_rows, n_cols = data.shape
1234
+ df = pd.DataFrame(data, columns=[f"col_{i}" for i in range(n_cols)])
1235
+ else:
1236
+ df = pd.DataFrame(data)
1237
+ tracked_dict = {"imshow_df": df}
1238
+ self._track(track, id, method_name, tracked_dict, None)
1239
+
1240
+ # Apply post-processing (tick locator, spines, etc.)
1241
+ self._apply_scitex_postprocess(method_name, result)
1242
+
1243
+ return result
1244
+
1245
+ def stx_boxplot(self, data, colors: Optional[List] = None, track: bool = True, id: Optional[str] = None, **kwargs):
1246
+ """Boxplot with scitex styling and tracking (alias for stx_box).
1247
+
1248
+ Parameters
1249
+ ----------
1250
+ data : list of array-like
1251
+ List of data arrays for each box
1252
+ colors : list, optional
1253
+ Colors for each box
1254
+ track : bool
1255
+ Whether to track data for CSV export
1256
+ id : str, optional
1257
+ Identifier for tracking
1258
+ **kwargs
1259
+ Additional arguments passed to matplotlib boxplot
1260
+ """
1261
+ return self.stx_box(data, colors=colors, track=track, id=id, **kwargs)
1262
+
1263
+ def stx_violinplot(self, data, colors: Optional[List] = None, track: bool = True, id: Optional[str] = None, **kwargs):
1264
+ """Violinplot with scitex styling and tracking (alias for stx_violin).
1265
+
1266
+ Parameters
1267
+ ----------
1268
+ data : list of array-like or DataFrame
1269
+ Data for violin plot
1270
+ colors : list, optional
1271
+ Colors for each violin
1272
+ track : bool
1273
+ Whether to track data for CSV export
1274
+ id : str, optional
1275
+ Identifier for tracking
1276
+ **kwargs
1277
+ Additional arguments passed to stx_violin
1278
+ """
1279
+ return self.stx_violin(data, colors=colors, track=track, id=id, **kwargs)
1280
+
896
1281
  # Standard matplotlib plot methods with plot_ prefix
897
1282
  def plot_bar(self, *args, track: bool = True, id: Optional[str] = None, **kwargs):
898
1283
  """Wrapper for matplotlib bar plot with tracking support."""
@@ -906,6 +1291,9 @@ class MatplotlibPlotMixin:
906
1291
  tracked_dict = {"bar_df": pd.DataFrame({"x": args[0], "height": args[1]})}
907
1292
  self._track(track, id, method_name, tracked_dict, None)
908
1293
 
1294
+ # Apply post-processing (tick locator, spines, etc.)
1295
+ self._apply_scitex_postprocess(method_name, result)
1296
+
909
1297
  return result
910
1298
 
911
1299
  def plot_barh(self, *args, track: bool = True, id: Optional[str] = None, **kwargs):
@@ -920,12 +1308,20 @@ class MatplotlibPlotMixin:
920
1308
  tracked_dict = {"barh_df": pd.DataFrame({"y": args[0], "width": args[1]})}
921
1309
  self._track(track, id, method_name, tracked_dict, None)
922
1310
 
1311
+ # Apply post-processing (tick locator, spines, etc.)
1312
+ self._apply_scitex_postprocess(method_name, result)
1313
+
923
1314
  return result
924
1315
 
925
1316
  def plot_scatter(self, *args, track: bool = True, id: Optional[str] = None, **kwargs):
926
1317
  """Wrapper for matplotlib scatter plot with tracking support."""
927
1318
  method_name = "plot_scatter"
928
1319
 
1320
+ # Add sample size to label if provided
1321
+ if kwargs.get("label") and len(args) >= 1:
1322
+ n_samples = len(args[0])
1323
+ kwargs["label"] = f"{kwargs['label']} ($n$={n_samples})"
1324
+
929
1325
  with self._no_tracking():
930
1326
  result = self._axis_mpl.scatter(*args, **kwargs)
931
1327
 
@@ -934,6 +1330,9 @@ class MatplotlibPlotMixin:
934
1330
  tracked_dict = {"scatter_df": pd.DataFrame({"x": args[0], "y": args[1]})}
935
1331
  self._track(track, id, method_name, tracked_dict, None)
936
1332
 
1333
+ # Apply post-processing (tick locator, spines, etc.)
1334
+ self._apply_scitex_postprocess(method_name, result)
1335
+
937
1336
  return result
938
1337
 
939
1338
  def plot_errorbar(self, *args, track: bool = True, id: Optional[str] = None, **kwargs):
@@ -953,6 +1352,9 @@ class MatplotlibPlotMixin:
953
1352
  tracked_dict = {"errorbar_df": pd.DataFrame(df_dict)}
954
1353
  self._track(track, id, method_name, tracked_dict, None)
955
1354
 
1355
+ # Apply post-processing (tick locator, spines, etc.)
1356
+ self._apply_scitex_postprocess(method_name, result)
1357
+
956
1358
  return result
957
1359
 
958
1360
  def plot_fill_between(self, *args, track: bool = True, id: Optional[str] = None, **kwargs):
@@ -971,6 +1373,9 @@ class MatplotlibPlotMixin:
971
1373
  })}
972
1374
  self._track(track, id, method_name, tracked_dict, None)
973
1375
 
1376
+ # Apply post-processing (tick locator, spines, etc.)
1377
+ self._apply_scitex_postprocess(method_name, result)
1378
+
974
1379
  return result
975
1380
 
976
1381
  def plot_contour(self, *args, track: bool = True, id: Optional[str] = None, **kwargs):
@@ -991,6 +1396,9 @@ class MatplotlibPlotMixin:
991
1396
  })}
992
1397
  self._track(track, id, method_name, tracked_dict, None)
993
1398
 
1399
+ # Apply post-processing (tick locator, spines, etc.)
1400
+ self._apply_scitex_postprocess(method_name, result)
1401
+
994
1402
  return result
995
1403
 
996
1404
  def plot_imshow(self, *args, track: bool = True, id: Optional[str] = None, **kwargs):
@@ -1013,12 +1421,28 @@ class MatplotlibPlotMixin:
1013
1421
  tracked_dict = {"imshow_df": df}
1014
1422
  self._track(track, id, method_name, tracked_dict, None)
1015
1423
 
1424
+ # Apply post-processing (tick locator, spines, etc.)
1425
+ self._apply_scitex_postprocess(method_name, result)
1426
+
1016
1427
  return result
1017
1428
 
1018
- def plot_boxplot(self, *args, track: bool = True, id: Optional[str] = None, **kwargs):
1019
- """Wrapper for matplotlib boxplot with tracking support."""
1429
+ def plot_boxplot(self, *args, colors: Optional[List] = None, track: bool = True, id: Optional[str] = None, **kwargs):
1430
+ """Wrapper for matplotlib boxplot with tracking support and auto-styling."""
1020
1431
  method_name = "plot_boxplot"
1021
1432
 
1433
+ # Add sample size per group to label if provided (show range if variable)
1434
+ if kwargs.get("label") and len(args) >= 1:
1435
+ data = args[0]
1436
+ if isinstance(data, list):
1437
+ n_per_group = [len(g) for g in data]
1438
+ n_min, n_max = min(n_per_group), max(n_per_group)
1439
+ n_str = str(n_min) if n_min == n_max else f"{n_min}-{n_max}"
1440
+ kwargs["label"] = f"{kwargs['label']} ($n$={n_str})"
1441
+
1442
+ # Enable patch_artist for styling (fill colors, edges)
1443
+ if "patch_artist" not in kwargs:
1444
+ kwargs["patch_artist"] = True
1445
+
1022
1446
  with self._no_tracking():
1023
1447
  result = self._axis_mpl.boxplot(*args, **kwargs)
1024
1448
 
@@ -1031,12 +1455,29 @@ class MatplotlibPlotMixin:
1031
1455
  tracked_dict = {"boxplot_df": pd.DataFrame({"data": data})}
1032
1456
  self._track(track, id, method_name, tracked_dict, None)
1033
1457
 
1458
+ # Apply style_boxplot automatically for publication quality
1459
+ # Uses scitex palette by default, or custom colors if provided
1460
+ from scitex.plt.ax import style_boxplot
1461
+ style_boxplot(result, colors=colors)
1462
+
1463
+ # Apply post-processing (tick locator, spines, etc.)
1464
+ self._apply_scitex_postprocess(method_name, result)
1465
+
1034
1466
  return result
1035
1467
 
1036
1468
  def plot_violinplot(self, *args, track: bool = True, id: Optional[str] = None, **kwargs):
1037
1469
  """Wrapper for matplotlib violinplot with tracking support."""
1038
1470
  method_name = "plot_violinplot"
1039
1471
 
1472
+ # Add sample size per group to label if provided (show range if variable)
1473
+ if kwargs.get("label") and len(args) >= 1:
1474
+ data = args[0]
1475
+ if isinstance(data, list):
1476
+ n_per_group = [len(g) for g in data]
1477
+ n_min, n_max = min(n_per_group), max(n_per_group)
1478
+ n_str = str(n_min) if n_min == n_max else f"{n_min}-{n_max}"
1479
+ kwargs["label"] = f"{kwargs['label']} ($n$={n_str})"
1480
+
1040
1481
  with self._no_tracking():
1041
1482
  result = self._axis_mpl.violinplot(*args, **kwargs)
1042
1483
 
@@ -1049,6 +1490,10 @@ class MatplotlibPlotMixin:
1049
1490
  tracked_dict = {"violinplot_df": pd.DataFrame({"data": data})}
1050
1491
  self._track(track, id, method_name, tracked_dict, None)
1051
1492
 
1493
+ # Apply post-processing (tick locator, spines, etc.)
1494
+ self._apply_scitex_postprocess(method_name, result, kwargs, args)
1495
+
1052
1496
  return result
1053
1497
 
1498
+
1054
1499
  # EOF