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,415 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-07-04 12:05:00 (ywatanabe)"
4
+ # File: ./src/scitex/stats/_additional_tests.py
5
+
6
+ """
7
+ Additional statistical tests for comprehensive analysis.
8
+
9
+ This module provides additional statistical tests commonly used in scientific research,
10
+ with a focus on robust methods and clear interpretations.
11
+ """
12
+
13
+ import numpy as np
14
+ from typing import Tuple, Union, Dict, Any, List
15
+ import warnings
16
+ from scipy import stats as scipy_stats
17
+
18
+
19
+ def f_oneway(*args) -> Tuple[float, float]:
20
+ """
21
+ Perform one-way ANOVA test.
22
+
23
+ NOTE: Consider using Kruskal-Wallis test for non-parametric alternative
24
+ when normality assumptions are violated.
25
+
26
+ Parameters
27
+ ----------
28
+ *args : array_like
29
+ Sample data arrays. Need at least 2 groups.
30
+
31
+ Returns
32
+ -------
33
+ statistic : float
34
+ The F-statistic
35
+ pvalue : float
36
+ The p-value
37
+
38
+ Examples
39
+ --------
40
+ >>> from scitex import stats
41
+ >>> group1 = np.random.normal(0, 1, 100)
42
+ >>> group2 = np.random.normal(0.5, 1, 100)
43
+ >>> group3 = np.random.normal(1, 1, 100)
44
+ >>> f_stat, p = stats.f_oneway(group1, group2, group3)
45
+ >>> print(f"F-statistic: {f_stat:.4f}, p-value: {p:.4f}")
46
+ """
47
+ if len(args) < 2:
48
+ raise ValueError("Need at least 2 groups for ANOVA")
49
+
50
+ # Use scipy's implementation
51
+ return scipy_stats.f_oneway(*args)
52
+
53
+
54
+ def kruskal(*args) -> Tuple[float, float]:
55
+ """
56
+ Perform Kruskal-Wallis H-test (non-parametric alternative to one-way ANOVA).
57
+
58
+ This test is more robust than ANOVA when normality assumptions are violated.
59
+
60
+ Parameters
61
+ ----------
62
+ *args : array_like
63
+ Sample data arrays. Need at least 2 groups.
64
+
65
+ Returns
66
+ -------
67
+ statistic : float
68
+ The Kruskal-Wallis H-statistic
69
+ pvalue : float
70
+ The p-value
71
+
72
+ Examples
73
+ --------
74
+ >>> from scitex import stats
75
+ >>> group1 = np.random.exponential(1, 100) # Non-normal data
76
+ >>> group2 = np.random.exponential(1.5, 100)
77
+ >>> group3 = np.random.exponential(2, 100)
78
+ >>> h_stat, p = stats.kruskal(group1, group2, group3)
79
+ >>> print(f"H-statistic: {h_stat:.4f}, p-value: {p:.4f}")
80
+ """
81
+ if len(args) < 2:
82
+ raise ValueError("Need at least 2 groups for Kruskal-Wallis test")
83
+
84
+ return scipy_stats.kruskal(*args)
85
+
86
+
87
+ def chi2_contingency(observed: np.ndarray, correction: bool = True,
88
+ lambda_: Union[None, float] = None) -> Tuple[float, float, int, np.ndarray]:
89
+ """
90
+ Chi-square test of independence of variables in a contingency table.
91
+
92
+ Parameters
93
+ ----------
94
+ observed : array_like
95
+ The contingency table
96
+ correction : bool, optional
97
+ If True, apply Yates' correction for continuity
98
+ lambda_ : float or None, optional
99
+ The cressie-read power divergence statistic
100
+
101
+ Returns
102
+ -------
103
+ chi2 : float
104
+ The test statistic
105
+ p : float
106
+ The p-value of the test
107
+ dof : int
108
+ Degrees of freedom
109
+ expected : ndarray
110
+ The expected frequencies
111
+
112
+ Examples
113
+ --------
114
+ >>> from scitex import stats
115
+ >>> # Contingency table: treatment vs outcome
116
+ >>> observed = np.array([[10, 10, 20], [20, 20, 40]])
117
+ >>> chi2, p, dof, expected = stats.chi2_contingency(observed)
118
+ >>> print(f"Chi-square: {chi2:.4f}, p-value: {p:.4f}")
119
+ """
120
+ return scipy_stats.chi2_contingency(observed, correction=correction, lambda_=lambda_)
121
+
122
+
123
+ def shapiro(x: np.ndarray) -> Tuple[float, float]:
124
+ """
125
+ Shapiro-Wilk test for normality.
126
+
127
+ Parameters
128
+ ----------
129
+ x : array_like
130
+ Sample data
131
+
132
+ Returns
133
+ -------
134
+ statistic : float
135
+ The test statistic
136
+ pvalue : float
137
+ The p-value
138
+
139
+ Examples
140
+ --------
141
+ >>> from scitex import stats
142
+ >>> data = np.random.normal(0, 1, 100)
143
+ >>> stat, p = stats.shapiro(data)
144
+ >>> print(f"Shapiro-Wilk statistic: {stat:.4f}, p-value: {p:.4f}")
145
+ """
146
+ return scipy_stats.shapiro(x)
147
+
148
+
149
+ def pearsonr(x: np.ndarray, y: np.ndarray) -> Tuple[float, float]:
150
+ """
151
+ Pearson correlation coefficient and p-value.
152
+
153
+ Parameters
154
+ ----------
155
+ x : array_like
156
+ First variable
157
+ y : array_like
158
+ Second variable
159
+
160
+ Returns
161
+ -------
162
+ r : float
163
+ Pearson correlation coefficient
164
+ pvalue : float
165
+ Two-tailed p-value
166
+
167
+ Examples
168
+ --------
169
+ >>> from scitex import stats
170
+ >>> x = np.random.normal(0, 1, 100)
171
+ >>> y = x + np.random.normal(0, 0.5, 100)
172
+ >>> r, p = stats.pearsonr(x, y)
173
+ >>> print(f"Pearson r: {r:.4f}, p-value: {p:.4f}")
174
+ """
175
+ return scipy_stats.pearsonr(x, y)
176
+
177
+
178
+ def spearmanr(x: np.ndarray, y: np.ndarray = None, axis: int = 0,
179
+ nan_policy: str = 'propagate') -> Tuple[float, float]:
180
+ """
181
+ Spearman rank-order correlation coefficient and p-value.
182
+
183
+ Parameters
184
+ ----------
185
+ x : array_like
186
+ First variable or 2D array
187
+ y : array_like, optional
188
+ Second variable (if x is 1D)
189
+ axis : int, optional
190
+ Axis along which to compute
191
+ nan_policy : str, optional
192
+ How to handle NaN values
193
+
194
+ Returns
195
+ -------
196
+ correlation : float
197
+ Spearman correlation coefficient
198
+ pvalue : float
199
+ Two-tailed p-value
200
+
201
+ Examples
202
+ --------
203
+ >>> from scitex import stats
204
+ >>> x = np.random.normal(0, 1, 100)
205
+ >>> y = x**2 + np.random.normal(0, 0.5, 100) # Non-linear relationship
206
+ >>> rho, p = stats.spearmanr(x, y)
207
+ >>> print(f"Spearman rho: {rho:.4f}, p-value: {p:.4f}")
208
+ """
209
+ result = scipy_stats.spearmanr(x, y, axis=axis, nan_policy=nan_policy)
210
+ if isinstance(result.correlation, np.ndarray):
211
+ # If 2D input, return correlation matrix and p-value matrix
212
+ return result.correlation, result.pvalue
213
+ else:
214
+ # If 1D input, return scalar values
215
+ return result.correlation, result.pvalue
216
+
217
+
218
+ def sem(a: np.ndarray, axis: int = 0, ddof: int = 1) -> Union[float, np.ndarray]:
219
+ """
220
+ Standard error of the mean.
221
+
222
+ Parameters
223
+ ----------
224
+ a : array_like
225
+ Input array
226
+ axis : int or None, optional
227
+ Axis along which to compute
228
+ ddof : int, optional
229
+ Delta degrees of freedom
230
+
231
+ Returns
232
+ -------
233
+ s : float or ndarray
234
+ Standard error of the mean
235
+
236
+ Examples
237
+ --------
238
+ >>> from scitex import stats
239
+ >>> data = np.random.normal(0, 1, 100)
240
+ >>> se = stats.sem(data)
241
+ >>> print(f"Standard error: {se:.4f}")
242
+ """
243
+ return scipy_stats.sem(a, axis=axis, ddof=ddof)
244
+
245
+
246
+ def trim_mean(a: np.ndarray, proportiontocut: float, axis: int = 0) -> Union[float, np.ndarray]:
247
+ """
248
+ Trimmed mean (robust measure of central tendency).
249
+
250
+ Parameters
251
+ ----------
252
+ a : array_like
253
+ Input array
254
+ proportiontocut : float
255
+ Proportion to cut from each end (0 to 0.5)
256
+ axis : int or None, optional
257
+ Axis along which to compute
258
+
259
+ Returns
260
+ -------
261
+ mean : float or ndarray
262
+ Trimmed mean
263
+
264
+ Examples
265
+ --------
266
+ >>> from scitex import stats
267
+ >>> data = np.concatenate([np.random.normal(0, 1, 90), [10, -10]]) # With outliers
268
+ >>> mean_trimmed = stats.trim_mean(data, 0.1) # Trim 10% from each end
269
+ >>> print(f"Trimmed mean: {mean_trimmed:.4f}")
270
+ """
271
+ return scipy_stats.trim_mean(a, proportiontocut, axis=axis)
272
+
273
+
274
+ def probplot(x: np.ndarray, sparams=(), dist='norm', fit=True, plot=None):
275
+ """
276
+ Probability plot to assess if data follows a distribution.
277
+
278
+ Parameters
279
+ ----------
280
+ x : array_like
281
+ Sample data
282
+ sparams : tuple, optional
283
+ Shape parameters for the distribution
284
+ dist : str or stats.distributions instance, optional
285
+ Distribution to test against
286
+ fit : bool, optional
287
+ If True, fit a line to the data
288
+ plot : object, optional
289
+ Plot object with 'plot' method
290
+
291
+ Returns
292
+ -------
293
+ (osm, osr) : tuple of ndarrays
294
+ Ordered statistic medians and ordered response data
295
+ (slope, intercept, r) : tuple of floats, optional
296
+ Regression results
297
+
298
+ Examples
299
+ --------
300
+ >>> from scitex import stats
301
+ >>> import matplotlib.pyplot as plt
302
+ >>> data = np.random.normal(0, 1, 100)
303
+ >>> stats.probplot(data, plot=plt)
304
+ >>> plt.show()
305
+ """
306
+ return scipy_stats.probplot(x, sparams=sparams, dist=dist, fit=fit, plot=plot)
307
+
308
+
309
+ # Statistical distribution objects
310
+ class norm:
311
+ """Normal distribution utilities."""
312
+
313
+ @staticmethod
314
+ def ppf(q: Union[float, np.ndarray], loc: float = 0, scale: float = 1) -> Union[float, np.ndarray]:
315
+ """Percent point function (inverse CDF) for normal distribution."""
316
+ return scipy_stats.norm.ppf(q, loc=loc, scale=scale)
317
+
318
+ @staticmethod
319
+ def cdf(x: Union[float, np.ndarray], loc: float = 0, scale: float = 1) -> Union[float, np.ndarray]:
320
+ """Cumulative distribution function for normal distribution."""
321
+ return scipy_stats.norm.cdf(x, loc=loc, scale=scale)
322
+
323
+ @staticmethod
324
+ def pdf(x: Union[float, np.ndarray], loc: float = 0, scale: float = 1) -> Union[float, np.ndarray]:
325
+ """Probability density function for normal distribution."""
326
+ return scipy_stats.norm.pdf(x, loc=loc, scale=scale)
327
+
328
+
329
+ class t:
330
+ """Student's t-distribution utilities."""
331
+
332
+ @staticmethod
333
+ def ppf(q: Union[float, np.ndarray], df: float, loc: float = 0, scale: float = 1) -> Union[float, np.ndarray]:
334
+ """Percent point function (inverse CDF) for t-distribution."""
335
+ return scipy_stats.t.ppf(q, df, loc=loc, scale=scale)
336
+
337
+ @staticmethod
338
+ def cdf(x: Union[float, np.ndarray], df: float, loc: float = 0, scale: float = 1) -> Union[float, np.ndarray]:
339
+ """Cumulative distribution function for t-distribution."""
340
+ return scipy_stats.t.cdf(x, df, loc=loc, scale=scale)
341
+
342
+ @staticmethod
343
+ def pdf(x: Union[float, np.ndarray], df: float, loc: float = 0, scale: float = 1) -> Union[float, np.ndarray]:
344
+ """Probability density function for t-distribution."""
345
+ return scipy_stats.t.pdf(x, df, loc=loc, scale=scale)
346
+
347
+
348
+ class chi2:
349
+ """Chi-square distribution utilities."""
350
+
351
+ @staticmethod
352
+ def ppf(q: Union[float, np.ndarray], df: float, loc: float = 0, scale: float = 1) -> Union[float, np.ndarray]:
353
+ """Percent point function (inverse CDF) for chi-square distribution."""
354
+ return scipy_stats.chi2.ppf(q, df, loc=loc, scale=scale)
355
+
356
+ @staticmethod
357
+ def cdf(x: Union[float, np.ndarray], df: float, loc: float = 0, scale: float = 1) -> Union[float, np.ndarray]:
358
+ """Cumulative distribution function for chi-square distribution."""
359
+ return scipy_stats.chi2.cdf(x, df, loc=loc, scale=scale)
360
+
361
+
362
+ class nct:
363
+ """Non-central t-distribution utilities."""
364
+
365
+ @staticmethod
366
+ def cdf(x: Union[float, np.ndarray], df: float, nc: float, loc: float = 0, scale: float = 1) -> Union[float, np.ndarray]:
367
+ """Cumulative distribution function for non-central t-distribution."""
368
+ return scipy_stats.nct.cdf(x, df, nc, loc=loc, scale=scale)
369
+
370
+
371
+ # Multiple testing correction utilities
372
+ class multitest:
373
+ """Multiple testing correction methods."""
374
+
375
+ @staticmethod
376
+ def multipletests(pvals: np.ndarray, alpha: float = 0.05, method: str = 'fdr_bh',
377
+ is_sorted: bool = False, returnsorted: bool = False):
378
+ """
379
+ Multiple testing p-value correction.
380
+
381
+ Parameters
382
+ ----------
383
+ pvals : array_like
384
+ Uncorrected p-values
385
+ alpha : float
386
+ Family-wise error rate
387
+ method : str
388
+ Correction method ('bonferroni', 'fdr_bh', 'fdr_by', etc.)
389
+ is_sorted : bool
390
+ If True, pvals are already sorted
391
+ returnsorted : bool
392
+ If True, return sorted p-values
393
+
394
+ Returns
395
+ -------
396
+ reject : ndarray, bool
397
+ True if hypothesis is rejected after correction
398
+ pvals_corrected : ndarray
399
+ Corrected p-values
400
+ alphacSidak : float
401
+ Sidak corrected alpha
402
+ alphacBonf : float
403
+ Bonferroni corrected alpha
404
+ """
405
+ from statsmodels.stats.multitest import multipletests as sm_multipletests
406
+ return sm_multipletests(pvals, alpha=alpha, method=method,
407
+ is_sorted=is_sorted, returnsorted=returnsorted)
408
+
409
+
410
+ # Aliases for common use
411
+ anova = f_oneway
412
+ chisquare = chi2_contingency
413
+
414
+
415
+ # EOF
@@ -1,10 +1,18 @@
1
1
  #!/usr/bin/env python3
2
2
  # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-09-29 13:43:40 (ywatanabe)"
4
+ # File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/stats/_p2stars.py
5
+ # ----------------------------------------
6
+ from __future__ import annotations
7
+ import os
8
+ __FILE__ = __file__
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
3
11
  # Time-stamp: "2024-10-06 10:39:57 (ywatanabe)"
4
12
 
13
+ from typing import Union
14
+
5
15
  import pandas as pd
6
- import re
7
- from typing import Union, List
8
16
 
9
17
 
10
18
  def p2stars(
@@ -47,7 +55,9 @@ def p2stars(
47
55
  elif isinstance(input_data, pd.DataFrame):
48
56
  return _p2stars_pd(input_data, ns)
49
57
  else:
50
- raise ValueError("Input must be a float, string, or a pandas DataFrame")
58
+ raise ValueError(
59
+ "Input must be a float, string, or a pandas DataFrame"
60
+ )
51
61
 
52
62
 
53
63
  def _p2stars_str(pvalue: Union[float, str], ns: bool = False) -> str:
@@ -58,7 +68,9 @@ def _p2stars_str(pvalue: Union[float, str], ns: bool = False) -> str:
58
68
  return "NA"
59
69
  pvalue_float = float(pvalue)
60
70
  if pvalue_float < 0 or pvalue_float > 1:
61
- raise ValueError(f"P-value must be between 0 and 1, got {pvalue_float}")
71
+ raise ValueError(
72
+ f"P-value must be between 0 and 1, got {pvalue_float}"
73
+ )
62
74
  except ValueError as e:
63
75
  raise ValueError(f"Invalid p-value: {pvalue}. {str(e)}")
64
76
 
@@ -73,7 +85,7 @@ def _p2stars_str(pvalue: Union[float, str], ns: bool = False) -> str:
73
85
 
74
86
 
75
87
  def _p2stars_pd(df: pd.DataFrame, ns: bool = False) -> pd.DataFrame:
76
- from scitex.stats import find_pval
88
+ from scitex.pd import find_pval
77
89
 
78
90
  pvalue_cols = find_pval(df, multiple=True)
79
91
  assert pvalue_cols, "No p-value columns found in DataFrame"
@@ -114,3 +126,5 @@ def _p2stars_pd(df: pd.DataFrame, ns: bool = False) -> pd.DataFrame:
114
126
  # List of column names that likely contain p-values
115
127
  # """
116
128
  # return [col for col in df.columns if re.search(r'p[_.-]?val', col.lower())]
129
+
130
+ # EOF
@@ -0,0 +1,141 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-07-04 12:00:00 (ywatanabe)"
4
+ # File: ./src/scitex/stats/_two_sample_tests.py
5
+
6
+ """
7
+ Two-sample statistical tests with Brunner-Munzel as the preferred method.
8
+
9
+ This module provides robust two-sample tests, prioritizing the Brunner-Munzel test
10
+ over traditional t-tests due to its superior robustness to assumption violations.
11
+ """
12
+
13
+ import numpy as np
14
+ from typing import Tuple, Union, Dict, Any
15
+ import warnings
16
+
17
+
18
+ def ttest_ind(a: np.ndarray, b: np.ndarray, equal_var: bool = True) -> Tuple[float, float]:
19
+ """
20
+ Perform two-sample test using Brunner-Munzel test (more robust than t-test).
21
+
22
+ NOTE: This function uses Brunner-Munzel test instead of traditional t-test
23
+ for better robustness. The Brunner-Munzel test is valid under less restrictive
24
+ assumptions and provides better Type I error control.
25
+
26
+ Parameters
27
+ ----------
28
+ a : array_like
29
+ First sample
30
+ b : array_like
31
+ Second sample
32
+ equal_var : bool, optional
33
+ Ignored. Kept for API compatibility with scipy.stats.ttest_ind
34
+
35
+ Returns
36
+ -------
37
+ statistic : float
38
+ The test statistic
39
+ pvalue : float
40
+ Two-sided p-value
41
+
42
+ Examples
43
+ --------
44
+ >>> from scitex import stats
45
+ >>> group1 = np.random.normal(0, 1, 100)
46
+ >>> group2 = np.random.normal(0.5, 1, 100)
47
+ >>> stat, p = stats.ttest_ind(group1, group2)
48
+ >>> print(f"Statistic: {stat:.4f}, p-value: {p:.4f}")
49
+ """
50
+ warnings.warn(
51
+ "Using Brunner-Munzel test instead of t-test for better robustness. "
52
+ "To use traditional t-test, use scipy.stats.ttest_ind directly.",
53
+ UserWarning
54
+ )
55
+
56
+ from ._statistical_tests import brunner_munzel_test
57
+
58
+ result = brunner_munzel_test(a, b)
59
+ return result["statistic"], result["p_value"]
60
+
61
+
62
+ def brunner_munzel(a: np.ndarray, b: np.ndarray) -> Tuple[float, float]:
63
+ """
64
+ Perform Brunner-Munzel test for two independent samples.
65
+
66
+ The Brunner-Munzel test is a robust alternative to the Mann-Whitney U test
67
+ and t-test that doesn't assume equal variances or specific distributions.
68
+
69
+ Parameters
70
+ ----------
71
+ a : array_like
72
+ First sample
73
+ b : array_like
74
+ Second sample
75
+
76
+ Returns
77
+ -------
78
+ statistic : float
79
+ The test statistic
80
+ pvalue : float
81
+ Two-sided p-value
82
+
83
+ Examples
84
+ --------
85
+ >>> from scitex import stats
86
+ >>> group1 = np.random.normal(0, 1, 100)
87
+ >>> group2 = np.random.normal(0.5, 2, 100) # Different variance
88
+ >>> stat, p = stats.brunner_munzel(group1, group2)
89
+ >>> print(f"Brunner-Munzel statistic: {stat:.4f}, p-value: {p:.4f}")
90
+ """
91
+ from ._statistical_tests import brunner_munzel_test
92
+
93
+ result = brunner_munzel_test(a, b)
94
+ return result["statistic"], result["p_value"]
95
+
96
+
97
+ def mannwhitneyu(x: np.ndarray, y: np.ndarray, use_continuity: bool = True,
98
+ alternative: str = 'two-sided') -> Tuple[float, float]:
99
+ """
100
+ Perform two-sample test using Brunner-Munzel (more robust than Mann-Whitney U).
101
+
102
+ NOTE: This function uses Brunner-Munzel test for better robustness.
103
+ The Brunner-Munzel test handles tied values and unequal variances better
104
+ than the traditional Mann-Whitney U test.
105
+
106
+ Parameters
107
+ ----------
108
+ x : array_like
109
+ First sample
110
+ y : array_like
111
+ Second sample
112
+ use_continuity : bool, optional
113
+ Ignored. Kept for API compatibility
114
+ alternative : str, optional
115
+ Ignored. Always performs two-sided test
116
+
117
+ Returns
118
+ -------
119
+ statistic : float
120
+ The test statistic
121
+ pvalue : float
122
+ Two-sided p-value
123
+ """
124
+ warnings.warn(
125
+ "Using Brunner-Munzel test instead of Mann-Whitney U for better robustness. "
126
+ "To use traditional Mann-Whitney U, use scipy.stats.mannwhitneyu directly.",
127
+ UserWarning
128
+ )
129
+
130
+ from ._statistical_tests import brunner_munzel_test
131
+
132
+ result = brunner_munzel_test(x, y)
133
+ return result["statistic"], result["p_value"]
134
+
135
+
136
+ # Aliases for convenience
137
+ ttest = ttest_ind
138
+ bm_test = brunner_munzel
139
+
140
+
141
+ # EOF
@@ -0,0 +1,83 @@
1
+ #!/usr/bin/env python3
2
+ """Scitex desc module."""
3
+
4
+ from ._describe import describe, verify_non_leakage
5
+ from ._nan import (
6
+ nanargmax,
7
+ nanargmin,
8
+ nancount,
9
+ nancumprod,
10
+ nancumsum,
11
+ nankurtosis,
12
+ nanmax,
13
+ nanmean,
14
+ nanmin,
15
+ nanprod,
16
+ nanq25,
17
+ nanq50,
18
+ nanq75,
19
+ nanquantile,
20
+ nanskewness,
21
+ nanstd,
22
+ nansum,
23
+ nanvar,
24
+ nanzscore,
25
+ )
26
+ from ._real import (
27
+ kurtosis,
28
+ mean,
29
+ q25,
30
+ q50,
31
+ q75,
32
+ quantile,
33
+ skewness,
34
+ std,
35
+ var,
36
+ zscore,
37
+ )
38
+ from ._circular import (
39
+ circular_mean,
40
+ circular_concentration,
41
+ circular_skewness,
42
+ circular_kurtosis,
43
+ describe_circular,
44
+ )
45
+
46
+ __all__ = [
47
+ "describe",
48
+ "kurtosis",
49
+ "mean",
50
+ "nanargmax",
51
+ "nanargmin",
52
+ "nancount",
53
+ "nancumprod",
54
+ "nancumsum",
55
+ "nankurtosis",
56
+ "nanmax",
57
+ "nanmean",
58
+ "nanmin",
59
+ "nanprod",
60
+ "nanq25",
61
+ "nanq50",
62
+ "nanq75",
63
+ "nanquantile",
64
+ "nanskewness",
65
+ "nanstd",
66
+ "nansum",
67
+ "nanvar",
68
+ "nanzscore",
69
+ "q25",
70
+ "q50",
71
+ "q75",
72
+ "quantile",
73
+ "skewness",
74
+ "std",
75
+ "var",
76
+ "verify_non_leakage",
77
+ "zscore",
78
+ "circular_mean",
79
+ "circular_concentration",
80
+ "circular_skewness",
81
+ "circular_kurtosis",
82
+ "describe_circular",
83
+ ]