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
@@ -0,0 +1,663 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-10-02 07:15:10 (ywatanabe)"
4
+ # File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/ml/plt/plot_conf_mat.py
5
+ # ----------------------------------------
6
+ from __future__ import annotations
7
+ import os
8
+ __FILE__ = __file__
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ import argparse
13
+
14
+ import matplotlib
15
+ import numpy as np
16
+ import pandas as pd
17
+ import scitex
18
+ import seaborn as sns
19
+ from matplotlib import ticker
20
+ from mpl_toolkits.axes_grid1 import make_axes_locatable
21
+ from sklearn.metrics import balanced_accuracy_score
22
+ from sklearn.metrics import confusion_matrix as sklearn_confusion_matrix
23
+
24
+ # Import metric calculation from centralized location (SoC: metrics in scitex.ml.metrics)
25
+ from scitex.ml.metrics import calc_bacc_from_conf_mat
26
+
27
+ # Aliases for backward compatibility
28
+ calc_bACC_from_conf_mat = calc_bacc_from_conf_mat
29
+
30
+
31
+ def plot_conf_mat(
32
+ cm=None,
33
+ y_true=None,
34
+ y_pred=None,
35
+ y_pred_proba=None,
36
+ labels=None,
37
+ sorted_labels=None,
38
+ pred_labels=None,
39
+ sorted_pred_labels=None,
40
+ true_labels=None,
41
+ sorted_true_labels=None,
42
+ label_rotation_xy=(15, 15),
43
+ title="Confusion Matrix",
44
+ colorbar=True,
45
+ x_extend_ratio=1.0,
46
+ y_extend_ratio=1.0,
47
+ ax=None,
48
+ spath=None,
49
+ ):
50
+ """
51
+ Plot confusion matrix as a heatmap with inverted y-axis.
52
+
53
+ Parameters
54
+ ----------
55
+ cm : array-like, optional
56
+ Pre-computed confusion matrix
57
+ y_true : array-like, optional
58
+ True labels
59
+ y_pred : array-like, optional
60
+ Predicted labels
61
+ y_pred_proba : array-like, optional
62
+ Predicted probabilities
63
+ labels : list, optional
64
+ List of labels
65
+ sorted_labels : list, optional
66
+ Sorted list of labels
67
+ pred_labels : list, optional
68
+ Predicted label names
69
+ sorted_pred_labels : list, optional
70
+ Sorted predicted label names
71
+ true_labels : list, optional
72
+ True label names
73
+ sorted_true_labels : list, optional
74
+ Sorted true label names
75
+ label_rotation_xy : tuple, optional
76
+ Rotation angles for x and y labels
77
+ title : str, optional
78
+ Title of the plot
79
+ colorbar : bool, optional
80
+ Whether to include a colorbar
81
+ x_extend_ratio : float, optional
82
+ Ratio to extend x-axis
83
+ y_extend_ratio : float, optional
84
+ Ratio to extend y-axis
85
+ spath : str, optional
86
+ Path to save the figure
87
+ plt : deprecated
88
+ Kept for backward compatibility only
89
+ cm : array-like, optional
90
+ Pre-computed confusion matrix
91
+ y_true : array-like, optional
92
+ True labels
93
+ y_pred : array-like, optional
94
+ Predicted labels
95
+ y_pred_proba : array-like, optional
96
+ Predicted probabilities
97
+ labels : list, optional
98
+ List of labels
99
+ sorted_labels : list, optional
100
+ Sorted list of labels
101
+ pred_labels : list, optional
102
+ Predicted label names
103
+ sorted_pred_labels : list, optional
104
+ Sorted predicted label names
105
+ true_labels : list, optional
106
+ True label names
107
+ sorted_true_labels : list, optional
108
+ Sorted true label names
109
+ label_rotation_xy : tuple, optional
110
+ Rotation angles for x and y labels
111
+ title : str, optional
112
+ Title of the plot
113
+ colorbar : bool, optional
114
+ Whether to include a colorbar
115
+ x_extend_ratio : float, optional
116
+ Ratio to extend x-axis
117
+ y_extend_ratio : float, optional
118
+ Ratio to extend y-axis
119
+ spath : str, optional
120
+ Path to save the figure
121
+
122
+ Returns
123
+ -------
124
+ fig : matplotlib.figure.Figure
125
+ The figure object containing the plot
126
+ cm : pandas.DataFrame
127
+ The confusion matrix as a DataFrame
128
+
129
+ Example
130
+ -------
131
+ y_true = [0, 1, 2, 0, 1, 2]
132
+ y_pred = [0, 2, 1, 0, 0, 1]
133
+ labels = ['A', 'B', 'C']
134
+ fig, cm = conf_mat(plt, y_true=y_true, y_pred=y_pred, labels=labels)
135
+ plt.show()
136
+ """
137
+
138
+ if (y_pred_proba is not None) and (y_pred is None):
139
+ y_pred = y_pred_proba.argmax(axis=-1)
140
+
141
+ assert (cm is not None) or ((y_true is not None) and (y_pred is not None))
142
+
143
+ if cm is None:
144
+ with scitex.context.suppress_output():
145
+ cm = sklearn_confusion_matrix(y_true, y_pred, labels=labels)
146
+
147
+ bacc = calc_bACC_from_conf_mat(cm)
148
+
149
+ title = f"{title} (bACC = {bacc:.3f})"
150
+
151
+ # Only reconstruct full confusion matrix if we have y_true and y_pred
152
+ # When cm is passed directly, use it as-is
153
+ if labels is not None and y_true is not None and y_pred is not None:
154
+ full_cm = np.zeros((len(labels), len(labels)))
155
+ unique_true = np.unique(y_true)
156
+ unique_pred = np.unique(y_pred)
157
+ for idx_true, true_label in enumerate(labels):
158
+ for idx_pred, pred_label in enumerate(labels):
159
+ if true_label in unique_true and pred_label in unique_pred:
160
+ full_cm[idx_true, idx_pred] = cm[
161
+ np.where(unique_true == true_label)[0][0],
162
+ np.where(unique_pred == pred_label)[0][0],
163
+ ]
164
+ cm = full_cm
165
+
166
+ cm = pd.DataFrame(data=cm).copy()
167
+
168
+ labels_to_latex = lambda labels: (
169
+ [scitex.str.to_latex_style(label) for label in labels]
170
+ if labels is not None
171
+ else None
172
+ )
173
+ pred_labels = labels_to_latex(pred_labels)
174
+ true_labels = labels_to_latex(true_labels)
175
+ labels = labels_to_latex(labels)
176
+ sorted_labels = labels_to_latex(sorted_labels)
177
+
178
+ if pred_labels is not None:
179
+ cm.columns = pred_labels
180
+ elif labels is not None:
181
+ cm.columns = labels
182
+
183
+ if true_labels is not None:
184
+ cm.index = true_labels
185
+ elif labels is not None:
186
+ cm.index = labels
187
+
188
+ if sorted_labels is not None:
189
+ assert set(sorted_labels) == set(labels)
190
+ cm = cm.reindex(index=sorted_labels, columns=sorted_labels)
191
+
192
+ # Use stx.plt.subplots() for CSV export functionality
193
+ # The AxisWrapper provides export_as_csv method for automatic data export
194
+ import matplotlib.pyplot as mpl_plt
195
+ import scitex as stx
196
+
197
+ if ax is None:
198
+ fig, ax = stx.plt.subplots()
199
+ else:
200
+ fig = ax.get_figure()
201
+ res = sns.heatmap(
202
+ cm,
203
+ annot=True,
204
+ annot_kws={"size": mpl_plt.rcParams["font.size"]},
205
+ fmt=".0f",
206
+ cmap="Blues",
207
+ cbar=False,
208
+ vmin=0,
209
+ )
210
+
211
+ for text in ax.texts:
212
+ text.set_text("{:,d}".format(int(text.get_text())))
213
+
214
+ res.invert_yaxis()
215
+
216
+ for _, spine in res.spines.items():
217
+ spine.set_visible(False)
218
+
219
+ ax.set_xlabel("Predicted label")
220
+ ax.set_ylabel("True label")
221
+ ax.set_title(title)
222
+
223
+ ax = scitex.plt.ax.extend(ax, x_extend_ratio, y_extend_ratio)
224
+ if cm.shape[0] == cm.shape[1]:
225
+ ax.set_box_aspect(1)
226
+ ax.set_xticklabels(
227
+ ax.get_xticklabels(),
228
+ rotation=label_rotation_xy[0],
229
+ fontdict={"verticalalignment": "top"},
230
+ )
231
+ ax.set_yticklabels(
232
+ ax.get_yticklabels(),
233
+ rotation=label_rotation_xy[1],
234
+ fontdict={"horizontalalignment": "right"},
235
+ )
236
+
237
+ bbox = ax.get_position()
238
+ left_orig = bbox.x0
239
+ width_orig = bbox.x1 - bbox.x0
240
+ width_tgt = width_orig * x_extend_ratio
241
+ dx = width_orig - width_tgt
242
+
243
+ if colorbar:
244
+ # Extract underlying matplotlib axes if wrapped by SciTeX
245
+ ax_mpl = ax._axis_mpl if hasattr(ax, '_axis_mpl') else ax
246
+
247
+ divider = make_axes_locatable(ax_mpl)
248
+ cax = divider.append_axes("right", size="5%", pad=0.15)
249
+
250
+ # Get the underlying figure
251
+ fig_mpl = fig._fig_mpl if hasattr(fig, '_fig_mpl') else fig
252
+
253
+ vmax = np.array(cm).max().astype(int)
254
+ norm = matplotlib.colors.Normalize(vmin=0, vmax=vmax)
255
+ cbar = fig_mpl.colorbar(
256
+ matplotlib.cm.ScalarMappable(norm=norm, cmap="Blues"),
257
+ cax=cax,
258
+ )
259
+ cbar.locator = ticker.MaxNLocator(nbins=4)
260
+ cbar.update_ticks()
261
+ cbar.outline.set_edgecolor("white")
262
+
263
+ if spath is not None:
264
+ from pathlib import Path
265
+ # Resolve to absolute path to prevent _out directory creation
266
+ spath_abs = Path(spath).resolve() if isinstance(spath, (str, Path)) else spath
267
+ scitex.io.save(fig, str(spath_abs), use_caller_path=False)
268
+
269
+ return fig, cm
270
+
271
+
272
+ # Backward compatibility alias
273
+ conf_mat = plot_conf_mat
274
+
275
+
276
+ # Metric calculation functions have been moved to scitex.ml.metrics
277
+ # They are imported above for use in this module
278
+ # This maintains SoC: plotting in scitex.ml.plt, metrics in scitex.ml.metrics
279
+
280
+
281
+ def main(args):
282
+ """Demo confusion matrix plotting with Iris dataset."""
283
+ import sklearn
284
+ from sklearn import datasets, svm
285
+ from sklearn.model_selection import train_test_split
286
+
287
+ iris = datasets.load_iris()
288
+ X = iris.data
289
+ y = iris.target
290
+ class_names = iris.target_names
291
+
292
+ X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
293
+
294
+ classifier = svm.SVC(kernel="linear", C=0.01, random_state=42).fit(
295
+ X_train, y_train
296
+ )
297
+
298
+ y_pred = classifier.predict(X_test)
299
+ cm_data = sklearn.metrics.confusion_matrix(y_test, y_pred)
300
+ cm_data **= 3
301
+
302
+ fig, cm_result = conf_mat(
303
+ cm=cm_data,
304
+ pred_labels=["A", "B", "C"],
305
+ true_labels=["a", "b", "c"],
306
+ label_rotation_xy=(60, 60),
307
+ x_extend_ratio=1.0,
308
+ colorbar=True,
309
+ )
310
+
311
+ fig.axes[-1] = scitex.plt.ax.sci_note(
312
+ fig.axes[-1],
313
+ fformat="%3.1f",
314
+ y=True,
315
+ )
316
+
317
+ scitex.io.save(fig, "plot_conf_mat_demo.jpg")
318
+ return 0
319
+
320
+
321
+ def parse_args() -> argparse.Namespace:
322
+ """Parse command line arguments."""
323
+ import argparse
324
+ parser = argparse.ArgumentParser(description='Demo confusion matrix plotting')
325
+ return parser.parse_args()
326
+
327
+
328
+ def run_main() -> None:
329
+ """Initialize scitex framework, run main function, and cleanup."""
330
+ global CONFIG, CC, sys, plt, rng
331
+
332
+ import sys
333
+ import matplotlib.pyplot as plt
334
+ import scitex as stx
335
+
336
+ args = parse_args()
337
+
338
+ CONFIG, sys.stdout, sys.stderr, plt, CC, rng = stx.session.start(
339
+ sys,
340
+ plt,
341
+ args=args,
342
+ file=__FILE__,
343
+ sdir_suffix=None,
344
+ verbose=False,
345
+ agg=True,
346
+ )
347
+
348
+ exit_status = main(args)
349
+
350
+ stx.session.close(
351
+ CONFIG,
352
+ verbose=False,
353
+ notify=False,
354
+ message="",
355
+ exit_status=exit_status,
356
+ )
357
+
358
+
359
+ if __name__ == "__main__":
360
+ run_main()
361
+
362
+ # EOF
363
+
364
+ # #!/usr/bin/env python3
365
+ # import matplotlib
366
+ # import scitex
367
+ # import numpy as np
368
+ # import pandas as pd
369
+ # import seaborn as sns
370
+ # from matplotlib import ticker
371
+ # from mpl_toolkits.axes_grid1 import make_axes_locatable
372
+ # from sklearn.metrics import balanced_accuracy_score
373
+ # from sklearn.metrics import confusion_matrix as sklearn_confusion_matrix
374
+
375
+
376
+ # def conf_mat(
377
+ # plt,
378
+ # cm=None,
379
+ # y_true=None,
380
+ # y_pred=None,
381
+ # y_pred_proba=None,
382
+ # labels=None,
383
+ # sorted_labels=None,
384
+ # pred_labels=None,
385
+ # sorted_pred_labels=None,
386
+ # true_labels=None,
387
+ # sorted_true_labels=None,
388
+ # label_rotation_xy=(15, 15),
389
+ # title="Confuxion Matrix",
390
+ # colorbar=True,
391
+ # x_extend_ratio=1.0,
392
+ # y_extend_ratio=1.0,
393
+ # spath=None,
394
+ # ):
395
+ # """
396
+ # Inverse the y-axis and plot the confusion matrix as a heatmap.
397
+ # The predicted labels (in x-axis) is symboled with hat (^).
398
+ # The plt object is passed to adjust the figure size
399
+
400
+ # cm = sklearn.metrics.confusion_matrix(y_test, y_pred)
401
+
402
+
403
+ # cm = np.random.randint(low=0, high=10, size=[3,4])
404
+ # x: predicted labels
405
+ # y: true_labels
406
+
407
+
408
+ # kwargs:
409
+
410
+ # "extend_ratio":
411
+ # Determines how much the axes objects (not the fig object) are extended
412
+ # in the vertical direction.
413
+
414
+ # """
415
+
416
+ # if (y_pred_proba is not None) and (y_pred is None):
417
+ # y_pred = y_pred_proba.argmax(axis=-1)
418
+
419
+ # assert (cm is not None) or ((y_true is not None) and (y_pred is not None))
420
+
421
+ # if cm is None:
422
+ # with scitex.context.suppress_output():
423
+ # cm = sklearn_confusion_matrix(y_true, y_pred, labels=labels)
424
+ # # cm = sklearn_confusion_matrix(y_true, y_pred)
425
+
426
+ # bacc = calc_bACC_from_conf_mat(cm)
427
+
428
+ # title = f"{title} (bACC = {bacc})"
429
+
430
+ # # Ensure all labels are present in the confusion matrix
431
+ # if labels is not None:
432
+ # full_cm = np.zeros((len(labels), len(labels)))
433
+ # unique_true = np.unique(y_true)
434
+ # unique_pred = np.unique(y_pred)
435
+ # for i, true_label in enumerate(labels):
436
+ # for j, pred_label in enumerate(labels):
437
+ # if true_label in unique_true and pred_label in unique_pred:
438
+ # full_cm[i, j] = cm[
439
+ # np.where(unique_true == true_label)[0][0],
440
+ # np.where(unique_pred == pred_label)[0][0],
441
+ # ]
442
+ # cm = full_cm
443
+
444
+ # # Dataframe
445
+ # cm = pd.DataFrame(
446
+ # data=cm,
447
+ # ).copy()
448
+
449
+ # # To LaTeX styles
450
+ # if pred_labels is not None:
451
+ # pred_labels = [scitex.str.to_latex_style(l) for l in pred_labels]
452
+ # if true_labels is not None:
453
+ # true_labels = [scitex.str.to_latex_style(l) for l in true_labels]
454
+ # if labels is not None:
455
+ # labels = [scitex.str.to_latex_style(l) for l in labels]
456
+ # if sorted_labels is not None:
457
+ # sorted_labels = [scitex.str.to_latex_style(l) for l in sorted_labels]
458
+
459
+ # # Prediction Labels: columns
460
+ # if pred_labels is not None:
461
+ # cm.columns = pred_labels
462
+ # elif (pred_labels is None) and (labels is not None):
463
+ # cm.columns = labels
464
+
465
+ # # Ground Truth Labels: index
466
+ # if true_labels is not None:
467
+ # cm.index = true_labels
468
+ # elif (true_labels is None) and (labels is not None):
469
+ # cm.index = labels
470
+
471
+ # # Sort based on sorted_labels here
472
+ # if sorted_labels is not None:
473
+ # assert set(sorted_labels) == set(labels)
474
+ # cm = cm.reindex(index=sorted_labels, columns=sorted_labels)
475
+
476
+ # # Main
477
+ # # Use stx.plt.subplots for advanced CSV export and SciTeX Viz integration
478
+ import matplotlib.pyplot as mpl_plt
479
+ import scitex as stx
480
+ fig, ax = stx.plt.subplots()
481
+ # res = sns.heatmap(
482
+ # cm,
483
+ # annot=True,
484
+ # annot_kws={"size": mpl_plt.rcParams["font.size"]},
485
+ # fmt=".0f",
486
+ # cmap="Blues",
487
+ # cbar=False,
488
+ # vmin=0,
489
+ # ) # Here, don't plot color bar.
490
+
491
+ # # Adds comma separator for the annotated int texts
492
+ # for t in ax.texts:
493
+ # t.set_text("{:,d}".format(int(t.get_text())))
494
+
495
+ # # Inverts the y-axis
496
+ # res.invert_yaxis()
497
+
498
+ # # Makes the frame visible
499
+ # for _, spine in res.spines.items():
500
+ # spine.set_visible(False)
501
+
502
+ # # Labels
503
+ # ax.set_xlabel("Predicted label")
504
+ # ax.set_ylabel("True label")
505
+ # ax.set_title(title)
506
+
507
+ # # Appearances
508
+ # ax = scitex.plt.ax.extend(ax, x_extend_ratio, y_extend_ratio)
509
+ # if cm.shape[0] == cm.shape[1]:
510
+ # ax.set_box_aspect(1)
511
+ # ax.set_xticklabels(
512
+ # ax.get_xticklabels(),
513
+ # rotation=label_rotation_xy[0],
514
+ # fontdict={"verticalalignment": "top"},
515
+ # )
516
+ # ax.set_yticklabels(
517
+ # ax.get_yticklabels(),
518
+ # rotation=label_rotation_xy[1],
519
+ # fontdict={"horizontalalignment": "right"},
520
+ # )
521
+ # # The size
522
+ # bbox = ax.get_position()
523
+ # left_orig = bbox.x0
524
+ # width_orig = bbox.x1 - bbox.x0
525
+ # g_x_orig = left_orig + width_orig / 2.0
526
+ # width_tgt = width_orig * x_extend_ratio # x_extend_ratio
527
+ # dx = width_orig - width_tgt
528
+
529
+ # # Adjusts the sizes of the confusion matrix and colorbar
530
+ # if colorbar:
531
+ # divider = make_axes_locatable(ax) # Gets region from the ax
532
+ # cax = divider.append_axes("right", size="5%", pad=0.1)
533
+ # # cax = divider.new_horizontal(size="5%", pad=1, pack_start=True)
534
+ # cax = scitex.plt.ax.shift(cax, dx=-dx * 2.54, dy=0)
535
+ # fig.add_axes(cax)
536
+
537
+ # """
538
+ # axpos = ax.get_position()
539
+ # caxpos = cax.get_position()
540
+
541
+ # AddAxesBBoxRect(fig, ax, ec="r")
542
+ # AddAxesBBoxRect(fig, cax, ec="b")
543
+
544
+ # fig.text(
545
+ # axpos.x0 + 0.01, axpos.y0 + 0.01, "after colorbar", weight="bold", color="r"
546
+ # )
547
+
548
+ # fig.text(
549
+ # caxpos.x1 + 0.01,
550
+ # caxpos.y1 - 0.01,
551
+ # "cax position",
552
+ # va="top",
553
+ # weight="bold",
554
+ # color="b",
555
+ # rotation="vertical",
556
+ # )
557
+ # """
558
+
559
+ # # Plots colorbar and adjusts the size
560
+ # vmax = np.array(cm).max().astype(int)
561
+ # norm = matplotlib.colors.Normalize(vmin=0, vmax=vmax)
562
+ # cbar = fig.colorbar(
563
+ # plt.cm.ScalarMappable(norm=norm, cmap="Blues"),
564
+ # cax=cax,
565
+ # # shrink=0.68,
566
+ # )
567
+ # cbar.locator = ticker.MaxNLocator(nbins=4) # tick_locator
568
+ # cbar.update_ticks()
569
+ # # cbar.outline.set_edgecolor("#f9f2d7")
570
+ # cbar.outline.set_edgecolor("white")
571
+
572
+ # if spath is not None:
573
+ # scitex.io.save(fig, spath)
574
+
575
+ # return fig, cm
576
+
577
+
578
+ # def calc_bACC_from_conf_mat(cm):
579
+ # with scitex.context.suppress_output():
580
+ # try:
581
+ # per_class = np.diag(cm) / np.nansum(cm, axis=1)
582
+ # bacc = round(np.nanmean(per_class), 3)
583
+ # except:
584
+ # bacc = np.nan
585
+ # return bacc
586
+
587
+
588
+ # # def AddAxesBBoxRect(fig, ax, ec="k"):
589
+ # # from matplotlib.patches import Rectangle
590
+
591
+ # # axpos = ax.get_position()
592
+ # # rect = fig.patches.append(
593
+ # # Rectangle(
594
+ # # (axpos.x0, axpos.y0),
595
+ # # axpos.width,
596
+ # # axpos.height,
597
+ # # ls="solid",
598
+ # # lw=2,
599
+ # # ec=ec,
600
+ # # fill=False,
601
+ # # transform=fig.transFigure,
602
+ # # )
603
+ # # )
604
+ # # return rect
605
+
606
+
607
+ # if __name__ == "__main__":
608
+
609
+ # import sys
610
+
611
+ # import matplotlib.pyplot as plt
612
+ # import scitex
613
+ # import numpy as np
614
+ # import sklearn
615
+ # from sklearn import datasets, svm
616
+ # # from sklearn.metrics import plot_confusion_matrix
617
+ # from sklearn.model_selection import train_test_split
618
+
619
+ # sys.path.append(".")
620
+ # import scitex
621
+
622
+ # # https://scikit-learn.org/stable/auto_examples/model_selection/plot_confusion_matrix.html#sphx-glr-auto-examples-model-selection-plot-confusion-matrix-py
623
+ # # Imports some data to play with
624
+ # iris = datasets.load_iris()
625
+ # X = iris.data
626
+ # y = iris.target
627
+ # class_names = iris.target_names
628
+
629
+ # # Splits the data into a training set and a test set
630
+ # X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
631
+
632
+ # # Runs classifier, using a model that is too regularized (C too low) to see
633
+ # # the impact on the results
634
+ # classifier = svm.SVC(kernel="linear", C=0.01).fit(X_train, y_train)
635
+
636
+ # ## Checks the confusion_matrix function
637
+ # y_pred = classifier.predict(X_test)
638
+ # cm = sklearn.metrics.confusion_matrix(y_test, y_pred)
639
+ # cm **= 3
640
+
641
+ # fig, cm = conf_mat(
642
+ # plt,
643
+ # # y_true=y_test,
644
+ # # y_pred=y_pred,
645
+ # cm,
646
+ # pred_labels=["A", "B", "C"],
647
+ # true_labels=["a", "b", "c"],
648
+ # label_rotation_xy=(60, 60),
649
+ # x_extend_ratio=1.0,
650
+ # colorbar=True,
651
+ # )
652
+
653
+ # fig.axes[-1] = scitex.plt.ax.sci_note(
654
+ # fig.axes[-1],
655
+ # fformat="%3.1f",
656
+ # y=True,
657
+ # )
658
+
659
+ # plt.show()
660
+
661
+ # ## EOF
662
+
663
+ # EOF