scitex 2.0.0__py2.py3-none-any.whl → 2.1.0__py2.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 (704) hide show
  1. scitex/__init__.py +53 -15
  2. scitex/__main__.py +72 -26
  3. scitex/__version__.py +1 -1
  4. scitex/_sh.py +145 -23
  5. scitex/ai/__init__.py +30 -16
  6. scitex/ai/_gen_ai/_Anthropic.py +5 -7
  7. scitex/ai/_gen_ai/_BaseGenAI.py +2 -2
  8. scitex/ai/_gen_ai/_DeepSeek.py +10 -2
  9. scitex/ai/_gen_ai/_Google.py +2 -2
  10. scitex/ai/_gen_ai/_Llama.py +2 -2
  11. scitex/ai/_gen_ai/_OpenAI.py +2 -2
  12. scitex/ai/_gen_ai/_PARAMS.py +51 -65
  13. scitex/ai/_gen_ai/_Perplexity.py +2 -2
  14. scitex/ai/_gen_ai/__init__.py +25 -14
  15. scitex/ai/_gen_ai/_format_output_func.py +4 -4
  16. scitex/ai/classification/{classifier_server.py → Classifier.py} +5 -5
  17. scitex/ai/classification/CrossValidationExperiment.py +374 -0
  18. scitex/ai/classification/__init__.py +43 -4
  19. scitex/ai/classification/reporters/_BaseClassificationReporter.py +281 -0
  20. scitex/ai/classification/reporters/_ClassificationReporter.py +773 -0
  21. scitex/ai/classification/reporters/_MultiClassificationReporter.py +406 -0
  22. scitex/ai/classification/reporters/_SingleClassificationReporter.py +1834 -0
  23. scitex/ai/classification/reporters/__init__.py +11 -0
  24. scitex/ai/classification/reporters/reporter_utils/_Plotter.py +1028 -0
  25. scitex/ai/classification/reporters/reporter_utils/__init__.py +80 -0
  26. scitex/ai/classification/reporters/reporter_utils/aggregation.py +457 -0
  27. scitex/ai/classification/reporters/reporter_utils/data_models.py +313 -0
  28. scitex/ai/classification/reporters/reporter_utils/reporting.py +1056 -0
  29. scitex/ai/classification/reporters/reporter_utils/storage.py +221 -0
  30. scitex/ai/classification/reporters/reporter_utils/validation.py +395 -0
  31. scitex/ai/classification/timeseries/_TimeSeriesBlockingSplit.py +568 -0
  32. scitex/ai/classification/timeseries/_TimeSeriesCalendarSplit.py +688 -0
  33. scitex/ai/classification/timeseries/_TimeSeriesMetadata.py +139 -0
  34. scitex/ai/classification/timeseries/_TimeSeriesSlidingWindowSplit.py +1716 -0
  35. scitex/ai/classification/timeseries/_TimeSeriesSlidingWindowSplit_v01-not-using-n_splits.py +1685 -0
  36. scitex/ai/classification/timeseries/_TimeSeriesStrategy.py +84 -0
  37. scitex/ai/classification/timeseries/_TimeSeriesStratifiedSplit.py +610 -0
  38. scitex/ai/classification/timeseries/__init__.py +39 -0
  39. scitex/ai/classification/timeseries/_normalize_timestamp.py +436 -0
  40. scitex/ai/clustering/_umap.py +2 -2
  41. scitex/ai/feature_extraction/vit.py +1 -0
  42. scitex/ai/feature_selection/__init__.py +30 -0
  43. scitex/ai/feature_selection/feature_selection.py +364 -0
  44. scitex/ai/loss/multi_task_loss.py +1 -1
  45. scitex/ai/metrics/__init__.py +51 -4
  46. scitex/ai/metrics/_calc_bacc.py +61 -0
  47. scitex/ai/metrics/_calc_bacc_from_conf_mat.py +38 -0
  48. scitex/ai/metrics/_calc_clf_report.py +78 -0
  49. scitex/ai/metrics/_calc_conf_mat.py +93 -0
  50. scitex/ai/metrics/_calc_feature_importance.py +183 -0
  51. scitex/ai/metrics/_calc_mcc.py +61 -0
  52. scitex/ai/metrics/_calc_pre_rec_auc.py +116 -0
  53. scitex/ai/metrics/_calc_roc_auc.py +110 -0
  54. scitex/ai/metrics/_calc_seizure_prediction_metrics.py +490 -0
  55. scitex/ai/metrics/{silhoute_score_block.py → _calc_silhouette_score.py} +15 -8
  56. scitex/ai/metrics/_normalize_labels.py +83 -0
  57. scitex/ai/plt/__init__.py +47 -8
  58. scitex/ai/plt/{_conf_mat.py → _plot_conf_mat.py} +158 -87
  59. scitex/ai/plt/_plot_feature_importance.py +323 -0
  60. scitex/ai/plt/_plot_learning_curve.py +345 -0
  61. scitex/ai/plt/_plot_optuna_study.py +225 -0
  62. scitex/ai/plt/_plot_pre_rec_curve.py +290 -0
  63. scitex/ai/plt/_plot_roc_curve.py +255 -0
  64. scitex/ai/training/{learning_curve_logger.py → _LearningCurveLogger.py} +197 -213
  65. scitex/ai/training/__init__.py +2 -2
  66. scitex/ai/utils/grid_search.py +3 -3
  67. scitex/benchmark/__init__.py +52 -0
  68. scitex/benchmark/benchmark.py +400 -0
  69. scitex/benchmark/monitor.py +370 -0
  70. scitex/benchmark/profiler.py +297 -0
  71. scitex/browser/__init__.py +48 -0
  72. scitex/browser/automation/CookieHandler.py +216 -0
  73. scitex/browser/automation/__init__.py +7 -0
  74. scitex/browser/collaboration/__init__.py +55 -0
  75. scitex/browser/collaboration/auth_helpers.py +94 -0
  76. scitex/browser/collaboration/collaborative_agent.py +136 -0
  77. scitex/browser/collaboration/credential_manager.py +188 -0
  78. scitex/browser/collaboration/interactive_panel.py +400 -0
  79. scitex/browser/collaboration/persistent_browser.py +170 -0
  80. scitex/browser/collaboration/shared_session.py +383 -0
  81. scitex/browser/collaboration/standard_interactions.py +246 -0
  82. scitex/browser/collaboration/visual_feedback.py +181 -0
  83. scitex/browser/core/BrowserMixin.py +326 -0
  84. scitex/browser/core/ChromeProfileManager.py +446 -0
  85. scitex/browser/core/__init__.py +9 -0
  86. scitex/browser/debugging/__init__.py +18 -0
  87. scitex/browser/debugging/_browser_logger.py +657 -0
  88. scitex/browser/debugging/_highlight_element.py +143 -0
  89. scitex/browser/debugging/_show_grid.py +154 -0
  90. scitex/browser/interaction/__init__.py +24 -0
  91. scitex/browser/interaction/click_center.py +149 -0
  92. scitex/browser/interaction/click_with_fallbacks.py +206 -0
  93. scitex/browser/interaction/close_popups.py +498 -0
  94. scitex/browser/interaction/fill_with_fallbacks.py +209 -0
  95. scitex/browser/pdf/__init__.py +14 -0
  96. scitex/browser/pdf/click_download_for_chrome_pdf_viewer.py +200 -0
  97. scitex/browser/pdf/detect_chrome_pdf_viewer.py +198 -0
  98. scitex/browser/remote/CaptchaHandler.py +434 -0
  99. scitex/browser/remote/ZenRowsAPIClient.py +347 -0
  100. scitex/browser/remote/ZenRowsBrowserManager.py +570 -0
  101. scitex/browser/remote/__init__.py +11 -0
  102. scitex/browser/stealth/HumanBehavior.py +344 -0
  103. scitex/browser/stealth/StealthManager.py +1008 -0
  104. scitex/browser/stealth/__init__.py +9 -0
  105. scitex/browser/template.py +122 -0
  106. scitex/capture/__init__.py +110 -0
  107. scitex/capture/__main__.py +25 -0
  108. scitex/capture/capture.py +848 -0
  109. scitex/capture/cli.py +233 -0
  110. scitex/capture/gif.py +344 -0
  111. scitex/capture/mcp_server.py +961 -0
  112. scitex/capture/session.py +70 -0
  113. scitex/capture/utils.py +705 -0
  114. scitex/cli/__init__.py +17 -0
  115. scitex/cli/cloud.py +447 -0
  116. scitex/cli/main.py +42 -0
  117. scitex/cli/scholar.py +280 -0
  118. scitex/context/_suppress_output.py +5 -3
  119. scitex/db/__init__.py +30 -3
  120. scitex/db/__main__.py +75 -0
  121. scitex/db/_check_health.py +381 -0
  122. scitex/db/_delete_duplicates.py +25 -386
  123. scitex/db/_inspect.py +335 -114
  124. scitex/db/_inspect_optimized.py +301 -0
  125. scitex/db/{_PostgreSQL.py → _postgresql/_PostgreSQL.py} +3 -3
  126. scitex/db/{_PostgreSQLMixins → _postgresql/_PostgreSQLMixins}/_BackupMixin.py +1 -1
  127. scitex/db/{_PostgreSQLMixins → _postgresql/_PostgreSQLMixins}/_BatchMixin.py +1 -1
  128. scitex/db/{_PostgreSQLMixins → _postgresql/_PostgreSQLMixins}/_BlobMixin.py +1 -1
  129. scitex/db/{_PostgreSQLMixins → _postgresql/_PostgreSQLMixins}/_ConnectionMixin.py +1 -1
  130. scitex/db/{_PostgreSQLMixins → _postgresql/_PostgreSQLMixins}/_MaintenanceMixin.py +1 -1
  131. scitex/db/{_PostgreSQLMixins → _postgresql/_PostgreSQLMixins}/_QueryMixin.py +1 -1
  132. scitex/db/{_PostgreSQLMixins → _postgresql/_PostgreSQLMixins}/_SchemaMixin.py +1 -1
  133. scitex/db/{_PostgreSQLMixins → _postgresql/_PostgreSQLMixins}/_TransactionMixin.py +1 -1
  134. scitex/db/_postgresql/__init__.py +6 -0
  135. scitex/db/_sqlite3/_SQLite3.py +210 -0
  136. scitex/db/_sqlite3/_SQLite3Mixins/_ArrayMixin.py +581 -0
  137. scitex/db/_sqlite3/_SQLite3Mixins/_ArrayMixin_v01-need-_hash-col.py +517 -0
  138. scitex/db/{_SQLite3Mixins → _sqlite3/_SQLite3Mixins}/_BatchMixin.py +1 -1
  139. scitex/db/_sqlite3/_SQLite3Mixins/_BlobMixin.py +281 -0
  140. scitex/db/_sqlite3/_SQLite3Mixins/_ColumnMixin.py +548 -0
  141. scitex/db/_sqlite3/_SQLite3Mixins/_ColumnMixin_v01-indentation-issues.py +583 -0
  142. scitex/db/{_SQLite3Mixins → _sqlite3/_SQLite3Mixins}/_ConnectionMixin.py +29 -13
  143. scitex/db/_sqlite3/_SQLite3Mixins/_GitMixin.py +583 -0
  144. scitex/db/{_SQLite3Mixins → _sqlite3/_SQLite3Mixins}/_ImportExportMixin.py +1 -1
  145. scitex/db/{_SQLite3Mixins → _sqlite3/_SQLite3Mixins}/_IndexMixin.py +1 -1
  146. scitex/db/{_SQLite3Mixins → _sqlite3/_SQLite3Mixins}/_MaintenanceMixin.py +2 -1
  147. scitex/db/{_SQLite3Mixins → _sqlite3/_SQLite3Mixins}/_QueryMixin.py +37 -10
  148. scitex/db/{_SQLite3Mixins → _sqlite3/_SQLite3Mixins}/_RowMixin.py +46 -6
  149. scitex/db/{_SQLite3Mixins → _sqlite3/_SQLite3Mixins}/_TableMixin.py +56 -10
  150. scitex/db/{_SQLite3Mixins → _sqlite3/_SQLite3Mixins}/_TransactionMixin.py +1 -1
  151. scitex/db/{_SQLite3Mixins → _sqlite3/_SQLite3Mixins}/__init__.py +14 -2
  152. scitex/db/_sqlite3/__init__.py +7 -0
  153. scitex/db/_sqlite3/_delete_duplicates.py +274 -0
  154. scitex/decorators/__init__.py +2 -0
  155. scitex/decorators/_cache_disk.py +13 -5
  156. scitex/decorators/_cache_disk_async.py +49 -0
  157. scitex/decorators/_deprecated.py +175 -10
  158. scitex/decorators/_timeout.py +1 -1
  159. scitex/dev/_analyze_code_flow.py +2 -2
  160. scitex/dict/_DotDict.py +73 -15
  161. scitex/dict/_DotDict_v01-not-handling-recursive-instantiations.py +442 -0
  162. scitex/dict/_DotDict_v02-not-serializing-Path-object.py +446 -0
  163. scitex/dict/__init__.py +2 -0
  164. scitex/dict/_flatten.py +27 -0
  165. scitex/dsp/_crop.py +2 -2
  166. scitex/dsp/_demo_sig.py +2 -2
  167. scitex/dsp/_detect_ripples.py +2 -2
  168. scitex/dsp/_hilbert.py +2 -2
  169. scitex/dsp/_listen.py +6 -6
  170. scitex/dsp/_modulation_index.py +2 -2
  171. scitex/dsp/_pac.py +1 -1
  172. scitex/dsp/_psd.py +2 -2
  173. scitex/dsp/_resample.py +2 -1
  174. scitex/dsp/_time.py +3 -2
  175. scitex/dsp/_wavelet.py +3 -2
  176. scitex/dsp/add_noise.py +2 -2
  177. scitex/dsp/example.py +1 -0
  178. scitex/dsp/filt.py +10 -9
  179. scitex/dsp/template.py +3 -2
  180. scitex/dsp/utils/_differential_bandpass_filters.py +1 -1
  181. scitex/dsp/utils/pac.py +2 -2
  182. scitex/dt/_normalize_timestamp.py +432 -0
  183. scitex/errors.py +572 -0
  184. scitex/gen/_DimHandler.py +2 -2
  185. scitex/gen/__init__.py +37 -7
  186. scitex/gen/_deprecated_close.py +80 -0
  187. scitex/gen/_deprecated_start.py +26 -0
  188. scitex/gen/_detect_environment.py +152 -0
  189. scitex/gen/_detect_notebook_path.py +169 -0
  190. scitex/gen/_embed.py +6 -2
  191. scitex/gen/_get_notebook_path.py +257 -0
  192. scitex/gen/_less.py +1 -1
  193. scitex/gen/_list_packages.py +2 -2
  194. scitex/gen/_norm.py +44 -9
  195. scitex/gen/_norm_cache.py +269 -0
  196. scitex/gen/_src.py +3 -5
  197. scitex/gen/_title_case.py +3 -3
  198. scitex/io/__init__.py +28 -6
  199. scitex/io/_glob.py +13 -7
  200. scitex/io/_load.py +108 -21
  201. scitex/io/_load_cache.py +303 -0
  202. scitex/io/_load_configs.py +40 -15
  203. scitex/io/{_H5Explorer.py → _load_modules/_H5Explorer.py} +80 -17
  204. scitex/io/_load_modules/_ZarrExplorer.py +114 -0
  205. scitex/io/_load_modules/_bibtex.py +207 -0
  206. scitex/io/_load_modules/_hdf5.py +53 -178
  207. scitex/io/_load_modules/_json.py +5 -3
  208. scitex/io/_load_modules/_pdf.py +871 -16
  209. scitex/io/_load_modules/_sqlite3.py +15 -0
  210. scitex/io/_load_modules/_txt.py +41 -12
  211. scitex/io/_load_modules/_yaml.py +4 -3
  212. scitex/io/_load_modules/_zarr.py +126 -0
  213. scitex/io/_save.py +429 -171
  214. scitex/io/_save_modules/__init__.py +6 -0
  215. scitex/io/_save_modules/_bibtex.py +194 -0
  216. scitex/io/_save_modules/_csv.py +8 -4
  217. scitex/io/_save_modules/_excel.py +174 -15
  218. scitex/io/_save_modules/_hdf5.py +251 -226
  219. scitex/io/_save_modules/_image.py +1 -3
  220. scitex/io/_save_modules/_json.py +49 -4
  221. scitex/io/_save_modules/_listed_dfs_as_csv.py +1 -3
  222. scitex/io/_save_modules/_listed_scalars_as_csv.py +1 -3
  223. scitex/io/_save_modules/_tex.py +277 -0
  224. scitex/io/_save_modules/_yaml.py +42 -3
  225. scitex/io/_save_modules/_zarr.py +160 -0
  226. scitex/io/utils/__init__.py +20 -0
  227. scitex/io/utils/h5_to_zarr.py +616 -0
  228. scitex/linalg/_geometric_median.py +6 -2
  229. scitex/{gen/_tee.py → logging/_Tee.py} +43 -84
  230. scitex/logging/__init__.py +122 -0
  231. scitex/logging/_config.py +158 -0
  232. scitex/logging/_context.py +103 -0
  233. scitex/logging/_formatters.py +128 -0
  234. scitex/logging/_handlers.py +64 -0
  235. scitex/logging/_levels.py +35 -0
  236. scitex/logging/_logger.py +163 -0
  237. scitex/logging/_print_capture.py +95 -0
  238. scitex/ml/__init__.py +69 -0
  239. scitex/{ai/genai/anthropic.py → ml/_gen_ai/_Anthropic.py} +13 -19
  240. scitex/{ai/genai/base_genai.py → ml/_gen_ai/_BaseGenAI.py} +5 -5
  241. scitex/{ai/genai/deepseek.py → ml/_gen_ai/_DeepSeek.py} +11 -16
  242. scitex/{ai/genai/google.py → ml/_gen_ai/_Google.py} +7 -15
  243. scitex/{ai/genai/groq.py → ml/_gen_ai/_Groq.py} +1 -8
  244. scitex/{ai/genai/llama.py → ml/_gen_ai/_Llama.py} +3 -16
  245. scitex/{ai/genai/openai.py → ml/_gen_ai/_OpenAI.py} +3 -3
  246. scitex/{ai/genai/params.py → ml/_gen_ai/_PARAMS.py} +51 -65
  247. scitex/{ai/genai/perplexity.py → ml/_gen_ai/_Perplexity.py} +3 -14
  248. scitex/ml/_gen_ai/__init__.py +43 -0
  249. scitex/{ai/genai/calc_cost.py → ml/_gen_ai/_calc_cost.py} +1 -1
  250. scitex/{ai/genai/format_output_func.py → ml/_gen_ai/_format_output_func.py} +4 -4
  251. scitex/{ai/genai/genai_factory.py → ml/_gen_ai/_genai_factory.py} +8 -8
  252. scitex/ml/activation/__init__.py +8 -0
  253. scitex/ml/activation/_define.py +11 -0
  254. scitex/{ai/classifier_server.py → ml/classification/Classifier.py} +5 -5
  255. scitex/ml/classification/CrossValidationExperiment.py +374 -0
  256. scitex/ml/classification/__init__.py +46 -0
  257. scitex/ml/classification/reporters/_BaseClassificationReporter.py +281 -0
  258. scitex/ml/classification/reporters/_ClassificationReporter.py +773 -0
  259. scitex/ml/classification/reporters/_MultiClassificationReporter.py +406 -0
  260. scitex/ml/classification/reporters/_SingleClassificationReporter.py +1834 -0
  261. scitex/ml/classification/reporters/__init__.py +11 -0
  262. scitex/ml/classification/reporters/reporter_utils/_Plotter.py +1028 -0
  263. scitex/ml/classification/reporters/reporter_utils/__init__.py +80 -0
  264. scitex/ml/classification/reporters/reporter_utils/aggregation.py +457 -0
  265. scitex/ml/classification/reporters/reporter_utils/data_models.py +313 -0
  266. scitex/ml/classification/reporters/reporter_utils/reporting.py +1056 -0
  267. scitex/ml/classification/reporters/reporter_utils/storage.py +221 -0
  268. scitex/ml/classification/reporters/reporter_utils/validation.py +395 -0
  269. scitex/ml/classification/timeseries/_TimeSeriesBlockingSplit.py +568 -0
  270. scitex/ml/classification/timeseries/_TimeSeriesCalendarSplit.py +688 -0
  271. scitex/ml/classification/timeseries/_TimeSeriesMetadata.py +139 -0
  272. scitex/ml/classification/timeseries/_TimeSeriesSlidingWindowSplit.py +1716 -0
  273. scitex/ml/classification/timeseries/_TimeSeriesSlidingWindowSplit_v01-not-using-n_splits.py +1685 -0
  274. scitex/ml/classification/timeseries/_TimeSeriesStrategy.py +84 -0
  275. scitex/ml/classification/timeseries/_TimeSeriesStratifiedSplit.py +610 -0
  276. scitex/ml/classification/timeseries/__init__.py +39 -0
  277. scitex/ml/classification/timeseries/_normalize_timestamp.py +436 -0
  278. scitex/ml/clustering/__init__.py +11 -0
  279. scitex/ml/clustering/_pca.py +115 -0
  280. scitex/ml/clustering/_umap.py +376 -0
  281. scitex/ml/feature_extraction/__init__.py +56 -0
  282. scitex/ml/feature_extraction/vit.py +149 -0
  283. scitex/ml/feature_selection/__init__.py +30 -0
  284. scitex/ml/feature_selection/feature_selection.py +364 -0
  285. scitex/ml/loss/_L1L2Losses.py +34 -0
  286. scitex/ml/loss/__init__.py +12 -0
  287. scitex/ml/loss/multi_task_loss.py +47 -0
  288. scitex/ml/metrics/__init__.py +56 -0
  289. scitex/ml/metrics/_calc_bacc.py +61 -0
  290. scitex/ml/metrics/_calc_bacc_from_conf_mat.py +38 -0
  291. scitex/ml/metrics/_calc_clf_report.py +78 -0
  292. scitex/ml/metrics/_calc_conf_mat.py +93 -0
  293. scitex/ml/metrics/_calc_feature_importance.py +183 -0
  294. scitex/ml/metrics/_calc_mcc.py +61 -0
  295. scitex/ml/metrics/_calc_pre_rec_auc.py +116 -0
  296. scitex/ml/metrics/_calc_roc_auc.py +110 -0
  297. scitex/ml/metrics/_calc_seizure_prediction_metrics.py +490 -0
  298. scitex/ml/metrics/_calc_silhouette_score.py +503 -0
  299. scitex/ml/metrics/_normalize_labels.py +83 -0
  300. scitex/ml/optim/Ranger_Deep_Learning_Optimizer/__init__.py +0 -0
  301. scitex/ml/optim/Ranger_Deep_Learning_Optimizer/ranger/__init__.py +3 -0
  302. scitex/ml/optim/Ranger_Deep_Learning_Optimizer/ranger/ranger.py +207 -0
  303. scitex/ml/optim/Ranger_Deep_Learning_Optimizer/ranger/ranger2020.py +238 -0
  304. scitex/ml/optim/Ranger_Deep_Learning_Optimizer/ranger/ranger913A.py +215 -0
  305. scitex/ml/optim/Ranger_Deep_Learning_Optimizer/ranger/rangerqh.py +184 -0
  306. scitex/ml/optim/Ranger_Deep_Learning_Optimizer/setup.py +24 -0
  307. scitex/ml/optim/__init__.py +13 -0
  308. scitex/ml/optim/_get_set.py +31 -0
  309. scitex/ml/optim/_optimizers.py +71 -0
  310. scitex/ml/plt/__init__.py +60 -0
  311. scitex/ml/plt/_plot_conf_mat.py +663 -0
  312. scitex/ml/plt/_plot_feature_importance.py +323 -0
  313. scitex/ml/plt/_plot_learning_curve.py +345 -0
  314. scitex/ml/plt/_plot_optuna_study.py +225 -0
  315. scitex/ml/plt/_plot_pre_rec_curve.py +290 -0
  316. scitex/ml/plt/_plot_roc_curve.py +255 -0
  317. scitex/ml/sk/__init__.py +11 -0
  318. scitex/ml/sk/_clf.py +58 -0
  319. scitex/ml/sk/_to_sktime.py +100 -0
  320. scitex/ml/sklearn/__init__.py +26 -0
  321. scitex/ml/sklearn/clf.py +58 -0
  322. scitex/ml/sklearn/to_sktime.py +100 -0
  323. scitex/{ai/training/early_stopping.py → ml/training/_EarlyStopping.py} +1 -2
  324. scitex/{ai → ml/training}/_LearningCurveLogger.py +198 -242
  325. scitex/ml/training/__init__.py +7 -0
  326. scitex/ml/utils/__init__.py +22 -0
  327. scitex/ml/utils/_check_params.py +50 -0
  328. scitex/ml/utils/_default_dataset.py +46 -0
  329. scitex/ml/utils/_format_samples_for_sktime.py +26 -0
  330. scitex/ml/utils/_label_encoder.py +134 -0
  331. scitex/ml/utils/_merge_labels.py +22 -0
  332. scitex/ml/utils/_sliding_window_data_augmentation.py +11 -0
  333. scitex/ml/utils/_under_sample.py +51 -0
  334. scitex/ml/utils/_verify_n_gpus.py +16 -0
  335. scitex/ml/utils/grid_search.py +148 -0
  336. scitex/nn/_BNet.py +15 -9
  337. scitex/nn/_Filters.py +2 -2
  338. scitex/nn/_ModulationIndex.py +2 -2
  339. scitex/nn/_PAC.py +1 -1
  340. scitex/nn/_Spectrogram.py +12 -3
  341. scitex/nn/__init__.py +9 -10
  342. scitex/path/__init__.py +18 -0
  343. scitex/path/_clean.py +4 -0
  344. scitex/path/_find.py +9 -4
  345. scitex/path/_symlink.py +348 -0
  346. scitex/path/_version.py +4 -3
  347. scitex/pd/__init__.py +2 -0
  348. scitex/pd/_get_unique.py +99 -0
  349. scitex/plt/__init__.py +114 -5
  350. scitex/plt/_subplots/_AxesWrapper.py +1 -3
  351. scitex/plt/_subplots/_AxisWrapper.py +7 -3
  352. scitex/plt/_subplots/_AxisWrapperMixins/_AdjustmentMixin.py +47 -13
  353. scitex/plt/_subplots/_AxisWrapperMixins/_MatplotlibPlotMixin.py +160 -2
  354. scitex/plt/_subplots/_AxisWrapperMixins/_SeabornMixin.py +26 -4
  355. scitex/plt/_subplots/_AxisWrapperMixins/_UnitAwareMixin.py +322 -0
  356. scitex/plt/_subplots/_AxisWrapperMixins/__init__.py +1 -0
  357. scitex/plt/_subplots/_FigWrapper.py +62 -6
  358. scitex/plt/_subplots/_export_as_csv.py +43 -27
  359. scitex/plt/_subplots/_export_as_csv_formatters/__init__.py +5 -4
  360. scitex/plt/_subplots/_export_as_csv_formatters/_format_annotate.py +81 -0
  361. scitex/plt/_subplots/_export_as_csv_formatters/_format_bar.py +1 -3
  362. scitex/plt/_subplots/_export_as_csv_formatters/_format_barh.py +20 -5
  363. scitex/plt/_subplots/_export_as_csv_formatters/_format_boxplot.py +1 -3
  364. scitex/plt/_subplots/_export_as_csv_formatters/_format_contour.py +1 -3
  365. scitex/plt/_subplots/_export_as_csv_formatters/_format_errorbar.py +35 -18
  366. scitex/plt/_subplots/_export_as_csv_formatters/_format_eventplot.py +1 -3
  367. scitex/plt/_subplots/_export_as_csv_formatters/_format_fill.py +1 -3
  368. scitex/plt/_subplots/_export_as_csv_formatters/_format_fill_between.py +1 -3
  369. scitex/plt/_subplots/_export_as_csv_formatters/_format_hist.py +1 -3
  370. scitex/plt/_subplots/_export_as_csv_formatters/_format_imshow.py +1 -3
  371. scitex/plt/_subplots/_export_as_csv_formatters/_format_imshow2d.py +1 -3
  372. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot.py +15 -3
  373. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_box.py +1 -3
  374. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_conf_mat.py +1 -3
  375. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_ecdf.py +1 -3
  376. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_fillv.py +1 -3
  377. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_heatmap.py +1 -3
  378. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_image.py +1 -3
  379. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_joyplot.py +1 -3
  380. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_kde.py +1 -3
  381. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_line.py +1 -3
  382. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_mean_ci.py +1 -3
  383. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_mean_std.py +1 -3
  384. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_median_iqr.py +1 -3
  385. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_raster.py +1 -3
  386. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_rectangle.py +1 -3
  387. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_scatter.py +35 -0
  388. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_scatter_hist.py +1 -3
  389. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_shaded_line.py +1 -3
  390. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_violin.py +1 -3
  391. scitex/plt/_subplots/_export_as_csv_formatters/_format_scatter.py +6 -4
  392. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_barplot.py +1 -3
  393. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_boxplot.py +1 -3
  394. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_heatmap.py +1 -3
  395. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_histplot.py +1 -3
  396. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_jointplot.py +1 -3
  397. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_kdeplot.py +1 -3
  398. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_lineplot.py +1 -3
  399. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_pairplot.py +1 -3
  400. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_scatterplot.py +1 -3
  401. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_stripplot.py +1 -3
  402. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_swarmplot.py +1 -3
  403. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_violinplot.py +1 -3
  404. scitex/plt/_subplots/_export_as_csv_formatters/_format_text.py +60 -0
  405. scitex/plt/_subplots/_export_as_csv_formatters/_format_violin.py +1 -3
  406. scitex/plt/_subplots/_export_as_csv_formatters/_format_violinplot.py +1 -3
  407. scitex/plt/_subplots/_export_as_csv_formatters/test_formatters.py +1 -3
  408. scitex/plt/_subplots/_export_as_csv_formatters.py +56 -59
  409. scitex/plt/ax/_style/_hide_spines.py +1 -3
  410. scitex/plt/ax/_style/_rotate_labels.py +180 -76
  411. scitex/plt/ax/_style/_rotate_labels_v01.py +248 -0
  412. scitex/plt/ax/_style/_set_meta.py +11 -4
  413. scitex/plt/ax/_style/_set_supxyt.py +3 -3
  414. scitex/plt/ax/_style/_set_xyt.py +3 -3
  415. scitex/plt/ax/_style/_share_axes.py +2 -2
  416. scitex/plt/color/__init__.py +4 -4
  417. scitex/plt/color/{_get_colors_from_cmap.py → _get_colors_from_conf_matap.py} +7 -7
  418. scitex/plt/utils/_configure_mpl.py +99 -86
  419. scitex/plt/utils/_histogram_utils.py +1 -3
  420. scitex/plt/utils/_is_valid_axis.py +1 -3
  421. scitex/plt/utils/_scitex_config.py +1 -0
  422. scitex/repro/__init__.py +75 -0
  423. scitex/{reproduce → repro}/_gen_ID.py +1 -1
  424. scitex/{reproduce → repro}/_gen_timestamp.py +1 -1
  425. scitex/repro_rng/_RandomStateManager.py +590 -0
  426. scitex/repro_rng/_RandomStateManager_v01-no-verbose-options.py +414 -0
  427. scitex/repro_rng/__init__.py +39 -0
  428. scitex/reproduce/__init__.py +25 -13
  429. scitex/reproduce/_hash_array.py +22 -0
  430. scitex/resource/_get_processor_usages.py +4 -4
  431. scitex/resource/_get_specs.py +2 -2
  432. scitex/resource/_log_processor_usages.py +2 -2
  433. scitex/rng/_RandomStateManager.py +590 -0
  434. scitex/rng/_RandomStateManager_v01-no-verbose-options.py +414 -0
  435. scitex/rng/__init__.py +39 -0
  436. scitex/scholar/__init__.py +309 -19
  437. scitex/scholar/__main__.py +319 -0
  438. scitex/scholar/auth/ScholarAuthManager.py +308 -0
  439. scitex/scholar/auth/__init__.py +12 -0
  440. scitex/scholar/auth/core/AuthenticationGateway.py +473 -0
  441. scitex/scholar/auth/core/BrowserAuthenticator.py +386 -0
  442. scitex/scholar/auth/core/StrategyResolver.py +309 -0
  443. scitex/scholar/auth/core/__init__.py +16 -0
  444. scitex/scholar/auth/gateway/_OpenURLLinkFinder.py +120 -0
  445. scitex/scholar/auth/gateway/_OpenURLResolver.py +209 -0
  446. scitex/scholar/auth/gateway/__init__.py +38 -0
  447. scitex/scholar/auth/gateway/_resolve_functions.py +101 -0
  448. scitex/scholar/auth/providers/BaseAuthenticator.py +166 -0
  449. scitex/scholar/auth/providers/EZProxyAuthenticator.py +484 -0
  450. scitex/scholar/auth/providers/OpenAthensAuthenticator.py +619 -0
  451. scitex/scholar/auth/providers/ShibbolethAuthenticator.py +686 -0
  452. scitex/scholar/auth/providers/__init__.py +18 -0
  453. scitex/scholar/auth/session/AuthCacheManager.py +189 -0
  454. scitex/scholar/auth/session/SessionManager.py +159 -0
  455. scitex/scholar/auth/session/__init__.py +11 -0
  456. scitex/scholar/auth/sso/BaseSSOAutomator.py +373 -0
  457. scitex/scholar/auth/sso/OpenAthensSSOAutomator.py +378 -0
  458. scitex/scholar/auth/sso/SSOAutomator.py +180 -0
  459. scitex/scholar/auth/sso/UniversityOfMelbourneSSOAutomator.py +380 -0
  460. scitex/scholar/auth/sso/__init__.py +15 -0
  461. scitex/scholar/browser/ScholarBrowserManager.py +705 -0
  462. scitex/scholar/browser/__init__.py +38 -0
  463. scitex/scholar/browser/utils/__init__.py +13 -0
  464. scitex/scholar/browser/utils/click_and_wait.py +205 -0
  465. scitex/scholar/browser/utils/close_unwanted_pages.py +140 -0
  466. scitex/scholar/browser/utils/wait_redirects.py +732 -0
  467. scitex/scholar/config/PublisherRules.py +132 -0
  468. scitex/scholar/config/ScholarConfig.py +126 -0
  469. scitex/scholar/config/__init__.py +17 -0
  470. scitex/scholar/core/Paper.py +627 -0
  471. scitex/scholar/core/Papers.py +722 -0
  472. scitex/scholar/core/Scholar.py +1975 -0
  473. scitex/scholar/core/__init__.py +9 -0
  474. scitex/scholar/impact_factor/ImpactFactorEngine.py +204 -0
  475. scitex/scholar/impact_factor/__init__.py +20 -0
  476. scitex/scholar/impact_factor/estimation/ImpactFactorEstimationEngine.py +0 -0
  477. scitex/scholar/impact_factor/estimation/__init__.py +40 -0
  478. scitex/scholar/impact_factor/estimation/build_database.py +0 -0
  479. scitex/scholar/impact_factor/estimation/core/__init__.py +28 -0
  480. scitex/scholar/impact_factor/estimation/core/cache_manager.py +523 -0
  481. scitex/scholar/impact_factor/estimation/core/calculator.py +355 -0
  482. scitex/scholar/impact_factor/estimation/core/journal_matcher.py +428 -0
  483. scitex/scholar/integration/__init__.py +59 -0
  484. scitex/scholar/integration/base.py +502 -0
  485. scitex/scholar/integration/mendeley/__init__.py +22 -0
  486. scitex/scholar/integration/mendeley/exporter.py +166 -0
  487. scitex/scholar/integration/mendeley/importer.py +236 -0
  488. scitex/scholar/integration/mendeley/linker.py +79 -0
  489. scitex/scholar/integration/mendeley/mapper.py +212 -0
  490. scitex/scholar/integration/zotero/__init__.py +27 -0
  491. scitex/scholar/integration/zotero/__main__.py +264 -0
  492. scitex/scholar/integration/zotero/exporter.py +351 -0
  493. scitex/scholar/integration/zotero/importer.py +372 -0
  494. scitex/scholar/integration/zotero/linker.py +415 -0
  495. scitex/scholar/integration/zotero/mapper.py +286 -0
  496. scitex/scholar/metadata_engines/ScholarEngine.py +588 -0
  497. scitex/scholar/metadata_engines/__init__.py +21 -0
  498. scitex/scholar/metadata_engines/individual/ArXivEngine.py +397 -0
  499. scitex/scholar/metadata_engines/individual/CrossRefEngine.py +274 -0
  500. scitex/scholar/metadata_engines/individual/CrossRefLocalEngine.py +263 -0
  501. scitex/scholar/metadata_engines/individual/OpenAlexEngine.py +350 -0
  502. scitex/scholar/metadata_engines/individual/PubMedEngine.py +329 -0
  503. scitex/scholar/metadata_engines/individual/SemanticScholarEngine.py +438 -0
  504. scitex/scholar/metadata_engines/individual/URLDOIEngine.py +410 -0
  505. scitex/scholar/metadata_engines/individual/_BaseDOIEngine.py +487 -0
  506. scitex/scholar/metadata_engines/individual/__init__.py +7 -0
  507. scitex/scholar/metadata_engines/utils/_PubMedConverter.py +469 -0
  508. scitex/scholar/metadata_engines/utils/_URLDOIExtractor.py +283 -0
  509. scitex/scholar/metadata_engines/utils/__init__.py +30 -0
  510. scitex/scholar/metadata_engines/utils/_metadata2bibtex.py +103 -0
  511. scitex/scholar/metadata_engines/utils/_standardize_metadata.py +376 -0
  512. scitex/scholar/pdf_download/ScholarPDFDownloader.py +579 -0
  513. scitex/scholar/pdf_download/__init__.py +5 -0
  514. scitex/scholar/pdf_download/strategies/__init__.py +38 -0
  515. scitex/scholar/pdf_download/strategies/chrome_pdf_viewer.py +376 -0
  516. scitex/scholar/pdf_download/strategies/direct_download.py +131 -0
  517. scitex/scholar/pdf_download/strategies/manual_download_fallback.py +167 -0
  518. scitex/scholar/pdf_download/strategies/manual_download_utils.py +996 -0
  519. scitex/scholar/pdf_download/strategies/response_body.py +207 -0
  520. scitex/scholar/pipelines/ScholarPipelineBibTeX.py +364 -0
  521. scitex/scholar/pipelines/ScholarPipelineParallel.py +478 -0
  522. scitex/scholar/pipelines/ScholarPipelineSingle.py +767 -0
  523. scitex/scholar/pipelines/__init__.py +49 -0
  524. scitex/scholar/storage/BibTeXHandler.py +1018 -0
  525. scitex/scholar/storage/PaperIO.py +468 -0
  526. scitex/scholar/storage/ScholarLibrary.py +182 -0
  527. scitex/scholar/storage/_DeduplicationManager.py +548 -0
  528. scitex/scholar/storage/_LibraryCacheManager.py +724 -0
  529. scitex/scholar/storage/_LibraryManager.py +1835 -0
  530. scitex/scholar/storage/__init__.py +28 -0
  531. scitex/scholar/url_finder/ScholarURLFinder.py +379 -0
  532. scitex/scholar/url_finder/__init__.py +7 -0
  533. scitex/scholar/url_finder/strategies/__init__.py +33 -0
  534. scitex/scholar/url_finder/strategies/find_pdf_urls_by_direct_links.py +261 -0
  535. scitex/scholar/url_finder/strategies/find_pdf_urls_by_dropdown.py +67 -0
  536. scitex/scholar/url_finder/strategies/find_pdf_urls_by_href.py +204 -0
  537. scitex/scholar/url_finder/strategies/find_pdf_urls_by_navigation.py +256 -0
  538. scitex/scholar/url_finder/strategies/find_pdf_urls_by_publisher_patterns.py +165 -0
  539. scitex/scholar/url_finder/strategies/find_pdf_urls_by_zotero_translators.py +163 -0
  540. scitex/scholar/url_finder/strategies/find_supplementary_urls_by_href.py +70 -0
  541. scitex/scholar/utils/__init__.py +22 -0
  542. scitex/scholar/utils/bibtex/__init__.py +9 -0
  543. scitex/scholar/utils/bibtex/_parse_bibtex.py +71 -0
  544. scitex/scholar/utils/cleanup/__init__.py +8 -0
  545. scitex/scholar/utils/cleanup/_cleanup_scholar_processes.py +96 -0
  546. scitex/scholar/utils/cleanup/cleanup_old_extractions.py +117 -0
  547. scitex/scholar/utils/text/_TextNormalizer.py +407 -0
  548. scitex/scholar/utils/text/__init__.py +9 -0
  549. scitex/scholar/zotero/__init__.py +38 -0
  550. scitex/session/__init__.py +51 -0
  551. scitex/session/_lifecycle.py +736 -0
  552. scitex/session/_manager.py +102 -0
  553. scitex/session/template.py +122 -0
  554. scitex/stats/__init__.py +30 -26
  555. scitex/stats/correct/__init__.py +21 -0
  556. scitex/stats/correct/_correct_bonferroni.py +551 -0
  557. scitex/stats/correct/_correct_fdr.py +634 -0
  558. scitex/stats/correct/_correct_holm.py +548 -0
  559. scitex/stats/correct/_correct_sidak.py +499 -0
  560. scitex/stats/descriptive/__init__.py +85 -0
  561. scitex/stats/descriptive/_circular.py +540 -0
  562. scitex/stats/descriptive/_describe.py +219 -0
  563. scitex/stats/descriptive/_nan.py +518 -0
  564. scitex/stats/descriptive/_real.py +189 -0
  565. scitex/stats/effect_sizes/__init__.py +41 -0
  566. scitex/stats/effect_sizes/_cliffs_delta.py +325 -0
  567. scitex/stats/effect_sizes/_cohens_d.py +342 -0
  568. scitex/stats/effect_sizes/_epsilon_squared.py +315 -0
  569. scitex/stats/effect_sizes/_eta_squared.py +302 -0
  570. scitex/stats/effect_sizes/_prob_superiority.py +296 -0
  571. scitex/stats/posthoc/__init__.py +19 -0
  572. scitex/stats/posthoc/_dunnett.py +463 -0
  573. scitex/stats/posthoc/_games_howell.py +383 -0
  574. scitex/stats/posthoc/_tukey_hsd.py +367 -0
  575. scitex/stats/power/__init__.py +19 -0
  576. scitex/stats/power/_power.py +433 -0
  577. scitex/stats/template.py +119 -0
  578. scitex/stats/utils/__init__.py +62 -0
  579. scitex/stats/utils/_effect_size.py +985 -0
  580. scitex/stats/utils/_formatters.py +270 -0
  581. scitex/stats/utils/_normalizers.py +927 -0
  582. scitex/stats/utils/_power.py +433 -0
  583. scitex/stats_v01/_EffectSizeCalculator.py +488 -0
  584. scitex/stats_v01/_StatisticalValidator.py +411 -0
  585. scitex/stats_v01/__init__.py +60 -0
  586. scitex/stats_v01/_additional_tests.py +415 -0
  587. scitex/{stats → stats_v01}/_p2stars.py +19 -5
  588. scitex/stats_v01/_two_sample_tests.py +141 -0
  589. scitex/stats_v01/desc/__init__.py +83 -0
  590. scitex/stats_v01/desc/_circular.py +540 -0
  591. scitex/stats_v01/desc/_describe.py +219 -0
  592. scitex/stats_v01/desc/_nan.py +518 -0
  593. scitex/{stats/desc/_nan.py → stats_v01/desc/_nan_v01-20250920_145731.py} +23 -12
  594. scitex/stats_v01/desc/_real.py +189 -0
  595. scitex/stats_v01/tests/__corr_test_optimized.py +221 -0
  596. scitex/stats_v01/tests/_corr_test_optimized.py +179 -0
  597. scitex/str/__init__.py +1 -3
  598. scitex/str/_clean_path.py +6 -2
  599. scitex/str/_latex_fallback.py +267 -160
  600. scitex/str/_parse.py +44 -36
  601. scitex/str/_printc.py +1 -3
  602. scitex/template/__init__.py +87 -0
  603. scitex/template/_create_project.py +267 -0
  604. scitex/template/create_pip_project.py +80 -0
  605. scitex/template/create_research.py +80 -0
  606. scitex/template/create_singularity.py +80 -0
  607. scitex/units.py +291 -0
  608. scitex/utils/_compress_hdf5.py +14 -3
  609. scitex/utils/_email.py +21 -2
  610. scitex/utils/_grid.py +6 -4
  611. scitex/utils/_notify.py +13 -10
  612. scitex/utils/_verify_scitex_format.py +589 -0
  613. scitex/utils/_verify_scitex_format_v01.py +370 -0
  614. scitex/utils/template.py +122 -0
  615. scitex/web/_search_pubmed.py +62 -16
  616. scitex-2.1.0.dist-info/LICENSE +21 -0
  617. scitex-2.1.0.dist-info/METADATA +677 -0
  618. scitex-2.1.0.dist-info/RECORD +919 -0
  619. {scitex-2.0.0.dist-info → scitex-2.1.0.dist-info}/WHEEL +1 -1
  620. scitex-2.1.0.dist-info/entry_points.txt +3 -0
  621. scitex/ai/__Classifiers.py +0 -101
  622. scitex/ai/classification/classification_reporter.py +0 -1137
  623. scitex/ai/classification/classifiers.py +0 -101
  624. scitex/ai/classification_reporter.py +0 -1161
  625. scitex/ai/genai/__init__.py +0 -277
  626. scitex/ai/genai/anthropic_provider.py +0 -320
  627. scitex/ai/genai/anthropic_refactored.py +0 -109
  628. scitex/ai/genai/auth_manager.py +0 -200
  629. scitex/ai/genai/base_provider.py +0 -291
  630. scitex/ai/genai/chat_history.py +0 -307
  631. scitex/ai/genai/cost_tracker.py +0 -276
  632. scitex/ai/genai/deepseek_provider.py +0 -251
  633. scitex/ai/genai/google_provider.py +0 -228
  634. scitex/ai/genai/groq_provider.py +0 -248
  635. scitex/ai/genai/image_processor.py +0 -250
  636. scitex/ai/genai/llama_provider.py +0 -214
  637. scitex/ai/genai/mock_provider.py +0 -127
  638. scitex/ai/genai/model_registry.py +0 -304
  639. scitex/ai/genai/openai_provider.py +0 -293
  640. scitex/ai/genai/perplexity_provider.py +0 -205
  641. scitex/ai/genai/provider_base.py +0 -302
  642. scitex/ai/genai/provider_factory.py +0 -370
  643. scitex/ai/genai/response_handler.py +0 -235
  644. scitex/ai/layer/_Pass.py +0 -21
  645. scitex/ai/layer/__init__.py +0 -10
  646. scitex/ai/layer/_switch.py +0 -8
  647. scitex/ai/metrics/_bACC.py +0 -51
  648. scitex/ai/plt/_learning_curve.py +0 -194
  649. scitex/ai/plt/_optuna_study.py +0 -111
  650. scitex/ai/plt/aucs/__init__.py +0 -2
  651. scitex/ai/plt/aucs/example.py +0 -60
  652. scitex/ai/plt/aucs/pre_rec_auc.py +0 -223
  653. scitex/ai/plt/aucs/roc_auc.py +0 -246
  654. scitex/ai/sampling/undersample.py +0 -29
  655. scitex/db/_SQLite3.py +0 -2136
  656. scitex/db/_SQLite3Mixins/_BlobMixin.py +0 -229
  657. scitex/gen/_close.py +0 -222
  658. scitex/gen/_start.py +0 -451
  659. scitex/general/__init__.py +0 -5
  660. scitex/io/_load_modules/_db.py +0 -24
  661. scitex/life/__init__.py +0 -10
  662. scitex/life/_monitor_rain.py +0 -49
  663. scitex/reproduce/_fix_seeds.py +0 -45
  664. scitex/res/__init__.py +0 -5
  665. scitex/scholar/_local_search.py +0 -454
  666. scitex/scholar/_paper.py +0 -244
  667. scitex/scholar/_pdf_downloader.py +0 -325
  668. scitex/scholar/_search.py +0 -393
  669. scitex/scholar/_vector_search.py +0 -370
  670. scitex/scholar/_web_sources.py +0 -457
  671. scitex/stats/desc/__init__.py +0 -40
  672. scitex-2.0.0.dist-info/METADATA +0 -307
  673. scitex-2.0.0.dist-info/RECORD +0 -572
  674. scitex-2.0.0.dist-info/licenses/LICENSE +0 -7
  675. /scitex/ai/{act → activation}/__init__.py +0 -0
  676. /scitex/ai/{act → activation}/_define.py +0 -0
  677. /scitex/ai/{early_stopping.py → training/_EarlyStopping.py} +0 -0
  678. /scitex/db/{_PostgreSQLMixins → _postgresql/_PostgreSQLMixins}/_ImportExportMixin.py +0 -0
  679. /scitex/db/{_PostgreSQLMixins → _postgresql/_PostgreSQLMixins}/_IndexMixin.py +0 -0
  680. /scitex/db/{_PostgreSQLMixins → _postgresql/_PostgreSQLMixins}/_RowMixin.py +0 -0
  681. /scitex/db/{_PostgreSQLMixins → _postgresql/_PostgreSQLMixins}/_TableMixin.py +0 -0
  682. /scitex/db/{_PostgreSQLMixins → _postgresql/_PostgreSQLMixins}/__init__.py +0 -0
  683. /scitex/{stats → stats_v01}/_calc_partial_corr.py +0 -0
  684. /scitex/{stats → stats_v01}/_corr_test_multi.py +0 -0
  685. /scitex/{stats → stats_v01}/_corr_test_wrapper.py +0 -0
  686. /scitex/{stats → stats_v01}/_describe_wrapper.py +0 -0
  687. /scitex/{stats → stats_v01}/_multiple_corrections.py +0 -0
  688. /scitex/{stats → stats_v01}/_nan_stats.py +0 -0
  689. /scitex/{stats → stats_v01}/_p2stars_wrapper.py +0 -0
  690. /scitex/{stats → stats_v01}/_statistical_tests.py +0 -0
  691. /scitex/{stats/desc/_describe.py → stats_v01/desc/_describe_v01-20250920_145731.py} +0 -0
  692. /scitex/{stats/desc/_real.py → stats_v01/desc/_real_v01-20250920_145731.py} +0 -0
  693. /scitex/{stats → stats_v01}/multiple/__init__.py +0 -0
  694. /scitex/{stats → stats_v01}/multiple/_bonferroni_correction.py +0 -0
  695. /scitex/{stats → stats_v01}/multiple/_fdr_correction.py +0 -0
  696. /scitex/{stats → stats_v01}/multiple/_multicompair.py +0 -0
  697. /scitex/{stats → stats_v01}/tests/__corr_test.py +0 -0
  698. /scitex/{stats → stats_v01}/tests/__corr_test_multi.py +0 -0
  699. /scitex/{stats → stats_v01}/tests/__corr_test_single.py +0 -0
  700. /scitex/{stats → stats_v01}/tests/__init__.py +0 -0
  701. /scitex/{stats → stats_v01}/tests/_brunner_munzel_test.py +0 -0
  702. /scitex/{stats → stats_v01}/tests/_nocorrelation_test.py +0 -0
  703. /scitex/{stats → stats_v01}/tests/_smirnov_grubbs.py +0 -0
  704. {scitex-2.0.0.dist-info → scitex-2.1.0.dist-info}/top_level.txt +0 -0
@@ -1,23 +1,28 @@
1
1
  #!/usr/bin/env python3
2
2
  # -*- coding: utf-8 -*-
3
- # Time-stamp: "2024-11-20 08:49:50 (ywatanabe)"
4
- # File: ./scitex_repo/src/scitex/ai/_LearningCurveLogger.py
5
-
6
- THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/ai/_LearningCurveLogger.py"
3
+ # Timestamp: "2024-11-20 08:49:50 (ywatanabe)"
4
+ # File: /home/ywatanabe/proj/scitex_repo/src/scitex/ml/training/_LearningCurveLogger.py
5
+ # ----------------------------------------
6
+ from __future__ import annotations
7
+ import os
8
+ __FILE__ = __file__
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
7
11
 
8
12
  """
9
13
  Functionality:
10
14
  - Records and visualizes learning curves during model training
11
15
  - Supports tracking of multiple metrics across training/validation/test phases
12
16
  - Generates plots showing training progress over iterations and epochs
17
+ - Delegates plotting to scitex.ml.plt.plot_learning_curve for consistency
13
18
 
14
19
  Input:
15
20
  - Training metrics dictionary containing loss, accuracy, predictions etc.
16
21
  - Step information (Training/Validation/Test)
17
22
 
18
23
  Output:
19
- - Learning curve plots
20
- - Dataframes with recorded metrics
24
+ - Learning curve plots via scitex.ml.plt.plot_learning_curve
25
+ - DataFrames with recorded metrics
21
26
  - Training progress prints
22
27
 
23
28
  Prerequisites:
@@ -26,22 +31,19 @@ Prerequisites:
26
31
  - matplotlib
27
32
  - pandas
28
33
  - numpy
34
+ - scitex
29
35
  """
30
36
 
31
- import re as _re
32
- from collections import defaultdict as _defaultdict
33
- from pprint import pprint as _pprint
34
- from typing import Dict as _Dict
35
- from typing import List as _List
36
- from typing import Union as _Union
37
- from typing import Optional as _Optional
38
- from typing import Any as _Any
37
+ import re
38
+ import warnings
39
+ from collections import defaultdict
40
+ from pprint import pprint
41
+ from typing import Any, Dict, List, Optional, Union
39
42
 
40
- import matplotlib as _matplotlib
41
- import pandas as _pd
42
- import numpy as _np
43
- import warnings as _warnings
44
- import torch as _torch
43
+ import matplotlib
44
+ import matplotlib.pyplot as plt
45
+ import numpy as np
46
+ import pandas as pd
45
47
 
46
48
 
47
49
  class LearningCurveLogger:
@@ -60,89 +62,96 @@ class LearningCurveLogger:
60
62
  ... "i_global": 100
61
63
  ... }
62
64
  >>> logger(metrics, "Training")
63
- >>> fig = logger.plot_learning_curves(plt)
65
+ >>> fig = logger.plot_learning_curves()
64
66
  """
65
67
 
66
68
  def __init__(self) -> None:
67
- self.logged_dict: _Dict[str, _Dict] = _defaultdict(dict)
69
+ self.logged_dict: Dict[str, Dict] = defaultdict(dict)
68
70
 
69
- _warnings.warn(
71
+ warnings.warn(
70
72
  '\n"gt_label" will be removed in the future. Please use "true_class" instead.\n',
71
73
  DeprecationWarning,
72
74
  )
73
75
 
74
- def __call__(self, dict_to_log: _Dict[str, _Any], step: str) -> None:
76
+ def __call__(self, dict_to_log: Dict[str, Any], step: str) -> None:
75
77
  """Logs metrics for a training step.
76
78
 
77
79
  Parameters
78
80
  ----------
79
- dict_to_log : _Dict[str, _Any]
80
- _Dictionary containing metrics to log
81
+ dict_to_log : Dict[str, Any]
82
+ Dictionary containing metrics to log
81
83
  step : str
82
84
  Phase of training ('Training', 'Validation', or 'Test')
83
85
  """
86
+ # Handle deprecated gt_label
84
87
  if "gt_label" in dict_to_log:
85
88
  dict_to_log["true_class"] = dict_to_log.pop("gt_label")
86
89
 
87
90
  for k_to_log in dict_to_log:
88
91
  try:
89
92
  self.logged_dict[step][k_to_log].append(dict_to_log[k_to_log])
90
- except:
93
+ except KeyError:
91
94
  self.logged_dict[step][k_to_log] = [dict_to_log[k_to_log]]
92
95
 
93
96
  @property
94
- def dfs(self) -> _Dict[str, _pd.DataFrame]:
97
+ def dfs(self) -> Dict[str, pd.DataFrame]:
95
98
  """Returns DataFrames of logged metrics.
96
99
 
97
100
  Returns
98
101
  -------
99
- _Dict[str, _pd.DataFrame]
100
- _Dictionary of DataFrames for each step
102
+ Dict[str, pd.DataFrame]
103
+ Dictionary of DataFrames for each step
101
104
  """
102
- return self._to_dfs_pivot(
103
- self.logged_dict,
104
- pivot_column=None,
105
- )
106
-
107
- def get_x_of_i_epoch(self, x: str, step: str, i_epoch: int) -> _np.ndarray:
108
- """Gets metric values for a specific epoch.
105
+ return self._to_dfs_pivot(self.logged_dict, pivot_column=None)
109
106
 
110
- Parameters
111
- ----------
112
- x : str
113
- Name of metric to retrieve
114
- step : str
115
- Training phase
116
- i_epoch : int
117
- Epoch number
107
+ def to_metrics_df(self) -> pd.DataFrame:
108
+ """Convert logged data to metrics DataFrame for plot_learning_curve.
118
109
 
119
110
  Returns
120
111
  -------
121
- _np.ndarray
122
- Array of metric values for specified epoch
112
+ pd.DataFrame
113
+ DataFrame with columns: step, i_global, i_epoch, i_batch, and metric columns
123
114
  """
124
- indi = _np.array(self.logged_dict[step]["i_epoch"]) == i_epoch
125
- x_all_arr = _np.array(self.logged_dict[step][x])
126
- assert len(indi) == len(x_all_arr)
127
- return x_all_arr[indi]
115
+ all_rows = []
116
+
117
+ for step, metrics in self.logged_dict.items():
118
+ n_samples = len(metrics['i_global'])
119
+
120
+ for i in range(n_samples):
121
+ row = {'step': step}
122
+ for key, values in metrics.items():
123
+ # Only include scalar metrics for the DataFrame
124
+ if key.endswith('_plot') or key in ['i_global', 'i_epoch', 'i_batch', 'i_fold']:
125
+ row[key] = values[i]
126
+ all_rows.append(row)
127
+
128
+ df = pd.DataFrame(all_rows)
129
+
130
+ # Rename _plot columns
131
+ df.columns = [col.replace('_plot', '') if col.endswith('_plot') else col
132
+ for col in df.columns]
133
+
134
+ # Ensure i_batch exists (create dummy if not logged)
135
+ if 'i_batch' not in df.columns:
136
+ df['i_batch'] = df.groupby(['step', 'i_epoch']).cumcount()
137
+
138
+ return df
128
139
 
129
140
  def plot_learning_curves(
130
141
  self,
131
- plt: _Any,
132
- plt_config_dict: _Optional[_Dict] = None,
133
- title: _Optional[str] = None,
142
+ title: Optional[str] = None,
134
143
  max_n_ticks: int = 4,
135
144
  linewidth: float = 1,
136
- scattersize: float = 50,
137
- ) -> _matplotlib.figure.Figure:
145
+ scattersize: float = 3,
146
+ yscale: str = "linear",
147
+ spath: Optional[str] = None,
148
+ ) -> matplotlib.figure.Figure:
138
149
  """Plots learning curves from logged metrics.
139
150
 
151
+ Delegates to scitex.ml.plt.plot_learning_curve for consistent plotting.
152
+
140
153
  Parameters
141
154
  ----------
142
- plt : _matplotlib.pyplot
143
- _Matplotlib pyplot object
144
- plt_config_dict : _Dict, optional
145
- Plot configuration parameters
146
155
  title : str, optional
147
156
  Plot title
148
157
  max_n_ticks : int
@@ -151,94 +160,72 @@ class LearningCurveLogger:
151
160
  Width of plot lines
152
161
  scattersize : float
153
162
  Size of scatter points
163
+ yscale : str
164
+ Y-axis scale ('linear' or 'log')
165
+ spath : str, optional
166
+ Save path for the figure
154
167
 
155
168
  Returns
156
169
  -------
157
- _matplotlib.figure.Figure
170
+ matplotlib.figure.Figure
158
171
  Figure containing learning curves
159
172
  """
173
+ from scitex.ml.plt import plot_learning_curve
160
174
 
161
- if plt_config_dict is not None:
162
- # Skip configure_mpl for now - would need to import plt module
163
- pass
175
+ # Convert to metrics DataFrame
176
+ metrics_df = self.to_metrics_df()
164
177
 
165
- self.dfs_pivot_i_global = self._to_dfs_pivot(
166
- self.logged_dict, pivot_column="i_global"
167
- )
168
-
169
- COLOR_DICT = {
170
- "Training": "blue",
171
- "Validation": "green",
172
- "Test": "red",
173
- }
178
+ # Find keys to plot (exclude metadata columns)
179
+ keys_to_plot = [
180
+ col for col in metrics_df.columns
181
+ if col not in ['step', 'i_global', 'i_epoch', 'i_batch', 'i_fold']
182
+ ]
174
183
 
175
- keys_to_plot = self._find_keys_to_plot(self.logged_dict)
176
-
177
184
  if len(keys_to_plot) == 0:
178
- # No keys to plot, return empty figure
185
+ # Create empty plot when no plot keys found
179
186
  fig, ax = plt.subplots(1, 1)
180
- ax.text(0.5, 0.5, 'No data to plot', ha='center', va='center')
187
+ ax.set_xlabel("Iteration #")
188
+ ax.set_ylabel("No metrics to plot")
189
+ if title:
190
+ fig.text(0.5, 0.95, title, ha="center")
181
191
  return fig
182
192
 
183
- fig, axes = plt.subplots(len(keys_to_plot), 1, sharex=True, sharey=False)
184
- if len(keys_to_plot) == 1:
185
- axes = [axes] # Make it a list for consistency
186
- axes[-1].set_xlabel("Iteration#")
187
- fig.text(0.5, 0.95, title, ha="center")
188
-
189
- for i_plt, plt_k in enumerate(keys_to_plot):
190
- ax = axes[i_plt]
191
- ax.set_ylabel(self._rename_if_key_to_plot(plt_k))
192
- ax.xaxis.set_major_locator(_matplotlib.ticker.MaxNLocator(max_n_ticks))
193
- ax.yaxis.set_major_locator(_matplotlib.ticker.MaxNLocator(max_n_ticks))
194
-
195
- if _re.search("[aA][cC][cC]", plt_k):
196
- ax.set_ylim(0, 1)
197
- ax.set_yticks([0, 0.5, 1.0])
198
-
199
- for step_k in self.dfs_pivot_i_global.keys():
200
- if step_k == _re.search("^[Tt]rain", step_k):
201
- ax.plot(
202
- self.dfs_pivot_i_global[step_k].index,
203
- self.dfs_pivot_i_global[step_k][plt_k],
204
- label=step_k,
205
- color=COLOR_DICT[step_k],
206
- linewidth=linewidth,
207
- )
208
- ax.legend()
209
-
210
- epoch_starts = abs(
211
- self.dfs_pivot_i_global[step_k]["i_epoch"]
212
- - self.dfs_pivot_i_global[step_k]["i_epoch"].shift(-1)
213
- )
214
- indi_global_epoch_starts = [0] + list(
215
- epoch_starts[epoch_starts == 1].index
216
- )
217
-
218
- for i_epoch, i_global_epoch_start in enumerate(
219
- indi_global_epoch_starts
220
- ):
221
- ax.axvline(
222
- x=i_global_epoch_start,
223
- ymin=-1e4,
224
- ymax=1e4,
225
- linestyle="--",
226
- color=_plt_module.colors.to_RGBA("gray", alpha=0.5),
227
- )
228
-
229
- if (step_k == "Validation") or (step_k == "Test"):
230
- ax.scatter(
231
- self.dfs_pivot_i_global[step_k].index,
232
- self.dfs_pivot_i_global[step_k][plt_k],
233
- label=step_k,
234
- color=COLOR_DICT[step_k],
235
- s=scattersize,
236
- alpha=0.9,
237
- )
238
- ax.legend()
193
+ # Delegate to centralized plotting function
194
+ fig = plot_learning_curve(
195
+ metrics_df=metrics_df,
196
+ keys=keys_to_plot,
197
+ title=title or "Learning Curves",
198
+ max_n_ticks=max_n_ticks,
199
+ scattersize=scattersize,
200
+ linewidth=linewidth,
201
+ yscale=yscale,
202
+ spath=spath,
203
+ )
239
204
 
240
205
  return fig
241
206
 
207
+ def get_x_of_i_epoch(self, x: str, step: str, i_epoch: int) -> np.ndarray:
208
+ """Gets metric values for a specific epoch.
209
+
210
+ Parameters
211
+ ----------
212
+ x : str
213
+ Name of metric to retrieve
214
+ step : str
215
+ Training phase
216
+ i_epoch : int
217
+ Epoch number
218
+
219
+ Returns
220
+ -------
221
+ np.ndarray
222
+ Array of metric values for specified epoch
223
+ """
224
+ indi = np.array(self.logged_dict[step]["i_epoch"]) == i_epoch
225
+ x_all_arr = np.array(self.logged_dict[step][x])
226
+ assert len(indi) == len(x_all_arr)
227
+ return x_all_arr[indi]
228
+
242
229
  def print(self, step: str) -> None:
243
230
  """Prints metrics for given step.
244
231
 
@@ -254,48 +241,25 @@ class LearningCurveLogger:
254
241
  )
255
242
  print("\n----------------------------------------\n")
256
243
  print(f"\n{step}: (mean of batches)\n")
257
- _pprint(df_pivot_i_epoch_step)
244
+ pprint(df_pivot_i_epoch_step)
258
245
  print("\n----------------------------------------\n")
259
246
 
260
247
  @staticmethod
261
- def _find_keys_to_plot(logged_dict: _Dict) -> _List[str]:
262
- """Find metrics to plot from logged dictionary.
263
-
264
- Parameters
265
- ----------
266
- logged_dict : _Dict
267
- _Dictionary of logged metrics
268
-
269
- Returns
270
- -------
271
- _List[str]
272
- _List of metric names to plot
273
- """
274
- for step_k in logged_dict.keys():
275
- break
276
-
277
- keys_to_plot = []
278
- for k in logged_dict[step_k].keys():
279
- if _re.search("_plot$", k):
280
- keys_to_plot.append(k)
281
- return keys_to_plot
282
-
283
- @staticmethod
284
- def _rename_if_key_to_plot(x: _Union[str, _pd.Index]) -> _Union[str, _pd.Index]:
248
+ def _rename_if_key_to_plot(x: Union[str, pd.Index]) -> Union[str, pd.Index]:
285
249
  """Rename metric keys for plotting.
286
250
 
287
251
  Parameters
288
252
  ----------
289
- x : str or _pd.Index
253
+ x : str or pd.Index
290
254
  Metric name(s) to rename
291
255
 
292
256
  Returns
293
257
  -------
294
- str or _pd.Index
258
+ str or pd.Index
295
259
  Renamed metric name(s)
296
260
  """
297
261
  if isinstance(x, str):
298
- if _re.search("_plot$", x):
262
+ if re.search("_plot$", x):
299
263
  return x.replace("_plot", "")
300
264
  else:
301
265
  return x
@@ -304,31 +268,30 @@ class LearningCurveLogger:
304
268
 
305
269
  @staticmethod
306
270
  def _to_dfs_pivot(
307
- logged_dict: _Dict[str, _Dict],
308
- pivot_column: _Optional[str] = None,
309
- ) -> _Dict[str, _pd.DataFrame]:
271
+ logged_dict: Dict[str, Dict],
272
+ pivot_column: Optional[str] = None,
273
+ ) -> Dict[str, pd.DataFrame]:
310
274
  """Convert logged dictionary to pivot DataFrames.
311
275
 
312
276
  Parameters
313
277
  ----------
314
- logged_dict : _Dict[str, _Dict]
315
- _Dictionary of logged metrics
278
+ logged_dict : Dict[str, Dict]
279
+ Dictionary of logged metrics
316
280
  pivot_column : str, optional
317
281
  Column to pivot on
318
282
 
319
283
  Returns
320
284
  -------
321
- _Dict[str, _pd.DataFrame]
322
- _Dictionary of pivot DataFrames
285
+ Dict[str, pd.DataFrame]
286
+ Dictionary of pivot DataFrames
323
287
  """
324
-
325
288
  dfs_pivot = {}
326
289
  for step_k in logged_dict.keys():
327
290
  if pivot_column is None:
328
- df = _pd.DataFrame(logged_dict[step_k])
291
+ df = pd.DataFrame(logged_dict[step_k])
329
292
  else:
330
293
  df = (
331
- _pd.DataFrame(logged_dict[step_k])
294
+ pd.DataFrame(logged_dict[step_k])
332
295
  .groupby(pivot_column)
333
296
  .mean()
334
297
  .reset_index()
@@ -338,24 +301,16 @@ class LearningCurveLogger:
338
301
  return dfs_pivot
339
302
 
340
303
 
341
- if __name__ == "__main__":
342
- import warnings
343
-
344
- import matplotlib.pyplot as plt
304
+ """Functions & Classes"""
305
+ def main(args):
306
+ """Demo learning curve logger with MNIST training."""
345
307
  import torch
346
308
  import torch.nn as nn
347
309
  from sklearn.metrics import balanced_accuracy_score
348
310
  from torch.utils.data import DataLoader, TensorDataset
349
311
  from torch.utils.data.dataset import Subset
350
312
  from torchvision import datasets
351
-
352
- import sys
353
-
354
- ################################################################################
355
- ## Sets tee
356
- ################################################################################
357
- sdir = scitex.io.path.mk_spath("") # "/tmp/sdir/"
358
- sys.stdout, sys.stderr = scitex.gen.tee(sys, sdir)
313
+ import scitex
359
314
 
360
315
  ################################################################################
361
316
  ## NN
@@ -373,33 +328,33 @@ if __name__ == "__main__":
373
328
  return x
374
329
 
375
330
  ################################################################################
376
- ## Prepaires demo data
331
+ ## Prepare demo data
377
332
  ################################################################################
378
333
  ## Downloads
379
334
  _ds_tra_val = datasets.MNIST("/tmp/mnist", train=True, download=True)
380
335
  _ds_tes = datasets.MNIST("/tmp/mnist", train=False, download=True)
381
336
 
382
337
  ## Training-Validation splitting
383
- n_samples = len(_ds_tra_val) # n_samples is 60000
384
- train_size = int(n_samples * 0.8) # train_size is 48000
338
+ n_samples = len(_ds_tra_val)
339
+ train_size = int(n_samples * 0.8)
385
340
 
386
- subset1_indices = list(range(0, train_size)) # [0,1,.....47999]
387
- subset2_indices = list(range(train_size, n_samples)) # [48000,48001,.....59999]
341
+ subset1_indices = list(range(0, train_size))
342
+ subset2_indices = list(range(train_size, n_samples))
388
343
 
389
344
  _ds_tra = Subset(_ds_tra_val, subset1_indices)
390
345
  _ds_val = Subset(_ds_tra_val, subset2_indices)
391
346
 
392
347
  ## to tensors
393
348
  ds_tra = TensorDataset(
394
- _ds_tra.dataset.data.to(_torch.float32),
349
+ _ds_tra.dataset.data.to(torch.float32),
395
350
  _ds_tra.dataset.targets,
396
351
  )
397
352
  ds_val = TensorDataset(
398
- _ds_val.dataset.data.to(_torch.float32),
353
+ _ds_val.dataset.data.to(torch.float32),
399
354
  _ds_val.dataset.targets,
400
355
  )
401
356
  ds_tes = TensorDataset(
402
- _ds_tes.data.to(_torch.float32),
357
+ _ds_tes.data.to(torch.float32),
403
358
  _ds_tes.targets,
404
359
  )
405
360
 
@@ -431,7 +386,7 @@ if __name__ == "__main__":
431
386
  ################################################################################
432
387
  model = Perceptron()
433
388
  loss_func = nn.CrossEntropyLoss()
434
- optimizer = _torch.optim.SGD(model.parameters(), lr=1e-3)
389
+ optimizer = torch.optim.SGD(model.parameters(), lr=1e-3)
435
390
  softmax = nn.Softmax(dim=-1)
436
391
 
437
392
  ################################################################################
@@ -440,14 +395,12 @@ if __name__ == "__main__":
440
395
  lc_logger = LearningCurveLogger()
441
396
  i_global = 0
442
397
 
443
- n_classes = len(dl_tra.dataset.tensors[1].unique())
444
398
  i_fold = 0
445
399
  max_epochs = 3
446
400
 
447
401
  for i_epoch in range(max_epochs):
448
402
  step = "Validation"
449
403
  for i_batch, batch in enumerate(dl_val):
450
-
451
404
  X, T = batch
452
405
  logits = model(X)
453
406
  pred_proba = softmax(logits)
@@ -462,10 +415,10 @@ if __name__ == "__main__":
462
415
  "loss_plot": float(loss),
463
416
  "balanced_ACC_plot": float(bACC),
464
417
  "pred_proba": pred_proba.detach().cpu().numpy(),
465
- "gt_label": T.cpu().numpy(),
466
- # "true_class": T.cpu().numpy(),
418
+ "true_class": T.cpu().numpy(),
467
419
  "i_fold": i_fold,
468
420
  "i_epoch": i_epoch,
421
+ "i_batch": i_batch,
469
422
  "i_global": i_global,
470
423
  }
471
424
  lc_logger(dict_to_log, step)
@@ -493,10 +446,10 @@ if __name__ == "__main__":
493
446
  "loss_plot": float(loss),
494
447
  "balanced_ACC_plot": float(bACC),
495
448
  "pred_proba": pred_proba.detach().cpu().numpy(),
496
- "gt_label": T.cpu().numpy(),
497
- # "true_class": T.cpu().numpy(),
449
+ "true_class": T.cpu().numpy(),
498
450
  "i_fold": i_fold,
499
451
  "i_epoch": i_epoch,
452
+ "i_batch": i_batch,
500
453
  "i_global": i_global,
501
454
  }
502
455
  lc_logger(dict_to_log, step)
@@ -507,7 +460,6 @@ if __name__ == "__main__":
507
460
 
508
461
  step = "Test"
509
462
  for i_batch, batch in enumerate(dl_tes):
510
-
511
463
  X, T = batch
512
464
  logits = model(X)
513
465
  pred_proba = softmax(logits)
@@ -522,34 +474,66 @@ if __name__ == "__main__":
522
474
  "loss_plot": float(loss),
523
475
  "balanced_ACC_plot": float(bACC),
524
476
  "pred_proba": pred_proba.detach().cpu().numpy(),
525
- # "gt_label": T.cpu().numpy(),
526
477
  "true_class": T.cpu().numpy(),
527
478
  "i_fold": i_fold,
528
479
  "i_epoch": i_epoch,
480
+ "i_batch": i_batch,
529
481
  "i_global": i_global,
530
482
  }
531
483
  lc_logger(dict_to_log, step)
532
484
 
533
485
  lc_logger.print(step)
534
486
 
535
- plt_config_dict = dict(
536
- # figsize=(8.7, 10),
537
- figscale=2.5,
538
- labelsize=16,
539
- fontsize=12,
540
- legendfontsize=12,
541
- tick_size=0.8,
542
- tick_width=0.2,
543
- )
544
-
487
+ # Plot using refactored method
545
488
  fig = lc_logger.plot_learning_curves(
546
- plt,
547
- plt_config_dict=plt_config_dict,
548
489
  title=f"fold#{i_fold}",
549
490
  linewidth=1,
550
491
  scattersize=50,
492
+ spath="learning_curve_logger_demo.jpg",
551
493
  )
552
- fig.show()
553
- # scitex.gen.save(fig, sdir + f"fold#{i_fold}.png")
494
+
495
+ return 0
496
+
497
+
498
+ import argparse
499
+ def parse_args() -> argparse.Namespace:
500
+ """Parse command line arguments."""
501
+ parser = argparse.ArgumentParser(description='Demo learning curve logger')
502
+ return parser.parse_args()
503
+
504
+
505
+ def run_main() -> None:
506
+ """Initialize scitex framework, run main function, and cleanup."""
507
+ global CONFIG, CC, sys, plt, rng
508
+
509
+ import sys
510
+ import matplotlib.pyplot as plt
511
+ import scitex as stx
512
+
513
+ args = parse_args()
514
+
515
+ CONFIG, sys.stdout, sys.stderr, plt, CC, rng = stx.session.start(
516
+ sys,
517
+ plt,
518
+ args=args,
519
+ file=__FILE__,
520
+ sdir_suffix=None,
521
+ verbose=False,
522
+ agg=True,
523
+ )
524
+
525
+ exit_status = main(args)
526
+
527
+ stx.session.close(
528
+ CONFIG,
529
+ verbose=False,
530
+ notify=False,
531
+ message="",
532
+ exit_status=exit_status,
533
+ )
534
+
535
+
536
+ if __name__ == "__main__":
537
+ run_main()
554
538
 
555
539
  # EOF
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  """Training utilities."""
3
3
 
4
- from .early_stopping import EarlyStopping
5
- from .learning_curve_logger import LearningCurveLogger
4
+ from ._EarlyStopping import EarlyStopping
5
+ from ._LearningCurveLogger import LearningCurveLogger
6
6
 
7
7
  __all__ = ["EarlyStopping", "LearningCurveLogger"]
@@ -1,7 +1,7 @@
1
1
  #!./env/bin/python3
2
2
  # -*- coding: utf-8 -*-
3
3
  # Time-stamp: "2024-04-22 23:54:02"
4
- # Author: Yusuke Watanabe (ywata1989@gmail.com)
4
+ # Author: Yusuke Watanabe (ywatanabe@scitex.ai)
5
5
 
6
6
  """
7
7
  This script defines scitex.ml.utils.grid_search
@@ -110,7 +110,7 @@ if __name__ == "__main__":
110
110
  import pandas as pd
111
111
 
112
112
  # Start
113
- CONFIG, _sys.stdout, _sys.stderr, _plt, CC = _scitex.gen.start(
113
+ CONFIG, _sys.stdout, _sys.stderr, _plt, CC = _scitex.session.start(
114
114
  _sys, _plt, verbose=False
115
115
  )
116
116
 
@@ -139,7 +139,7 @@ if __name__ == "__main__":
139
139
  print(param_dict)
140
140
 
141
141
  # Close
142
- _scitex.gen.close(CONFIG, verbose=False, notify=False)
142
+ _scitex.session.close(CONFIG, verbose=False, notify=False)
143
143
 
144
144
  # EOF
145
145