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,41 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """
4
+ Effect size computations for statistical tests.
5
+
6
+ This module provides functions to compute and interpret various effect size measures:
7
+
8
+ Parametric Effect Sizes:
9
+ - Cohen's d: Standardized mean difference for t-tests
10
+ - Eta-squared (η²): Proportion of variance explained in ANOVA
11
+
12
+ Non-parametric Effect Sizes:
13
+ - Cliff's delta (δ): Ordinal effect size
14
+ - Probability of superiority P(X>Y): Common language effect size
15
+ - Epsilon-squared (ε²): Non-parametric analog of eta-squared
16
+
17
+ Each effect size comes with an interpretation function following standard
18
+ guidelines (Cohen, 1988; McGraw & Wong, 1992).
19
+ """
20
+
21
+ from ._cohens_d import cohens_d, interpret_cohens_d
22
+ from ._cliffs_delta import cliffs_delta, interpret_cliffs_delta
23
+ from ._prob_superiority import prob_superiority, interpret_prob_superiority
24
+ from ._eta_squared import eta_squared, interpret_eta_squared
25
+ from ._epsilon_squared import epsilon_squared, interpret_epsilon_squared
26
+
27
+ __all__ = [
28
+ # Parametric
29
+ 'cohens_d',
30
+ 'interpret_cohens_d',
31
+ 'eta_squared',
32
+ 'interpret_eta_squared',
33
+
34
+ # Non-parametric
35
+ 'cliffs_delta',
36
+ 'interpret_cliffs_delta',
37
+ 'prob_superiority',
38
+ 'interpret_prob_superiority',
39
+ 'epsilon_squared',
40
+ 'interpret_epsilon_squared',
41
+ ]
@@ -0,0 +1,325 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-10-01 21:00:00 (ywatanabe)"
4
+ # File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/stats/effect_sizes/_cliffs_delta.py
5
+ # ----------------------------------------
6
+ from __future__ import annotations
7
+ import os
8
+ __FILE__ = __file__
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ """
13
+ Functionalities:
14
+ - Compute Cliff's delta non-parametric effect size
15
+ - Robust to outliers and non-normal distributions
16
+ - Provide interpretation guidelines
17
+ - Related to Mann-Whitney U statistic
18
+
19
+ Dependencies:
20
+ - packages: numpy, pandas
21
+
22
+ IO:
23
+ - input: Two samples (arrays or Series)
24
+ - output: Effect size value (float, ranges from -1 to 1)
25
+ """
26
+
27
+ """Imports"""
28
+ import argparse
29
+ from typing import Union
30
+
31
+ import numpy as np
32
+ import pandas as pd
33
+ import scitex as stx
34
+ from scitex.logging import getLogger
35
+
36
+ logger = getLogger(__name__)
37
+
38
+ """Functions"""
39
+
40
+
41
+ def cliffs_delta(
42
+ x: Union[np.ndarray, pd.Series],
43
+ y: Union[np.ndarray, pd.Series]
44
+ ) -> float:
45
+ """
46
+ Compute Cliff's delta non-parametric effect size.
47
+
48
+ Parameters
49
+ ----------
50
+ x : array or Series
51
+ First sample
52
+ y : array or Series
53
+ Second sample
54
+
55
+ Returns
56
+ -------
57
+ float
58
+ Cliff's delta value (ranges from -1 to 1)
59
+
60
+ Notes
61
+ -----
62
+ Cliff's delta is a non-parametric effect size measure that quantifies
63
+ the degree of dominance of one distribution over another.
64
+
65
+ It is calculated as:
66
+
67
+ .. math::
68
+ \\delta = \\frac{\\#(x_i > y_j) - \\#(x_i < y_j)}{n_x \\cdot n_y}
69
+
70
+ Where:
71
+ - #(x_i > y_j) is the number of times values in x are greater than values in y
72
+ - #(x_i < y_j) is the number of times values in x are less than values in y
73
+
74
+ Interpretation:
75
+ - |δ| < 0.147: negligible
76
+ - |δ| < 0.33: small
77
+ - |δ| < 0.474: medium
78
+ - |δ| ≥ 0.474: large
79
+
80
+ Advantages:
81
+ - Non-parametric (no assumptions about distributions)
82
+ - Robust to outliers
83
+ - Easy to interpret (probability-based)
84
+ - Related to Mann-Whitney U statistic
85
+
86
+ The relation to Mann-Whitney U is:
87
+
88
+ .. math::
89
+ \\delta = 2 \\cdot \\frac{U}{n_x \\cdot n_y} - 1
90
+
91
+ References
92
+ ----------
93
+ .. [1] Cliff, N. (1993). "Dominance statistics: Ordinal analyses to answer
94
+ ordinal questions". Psychological Bulletin, 114(3), 494-509.
95
+ .. [2] Romano, J., Kromrey, J. D., Coraggio, J., & Skowronek, J. (2006).
96
+ "Appropriate statistics for ordinal level data: Should we really be
97
+ using t-test and Cohen's d for evaluating group differences on the
98
+ NSSE and other surveys?" Florida Association of Institutional Research.
99
+
100
+ Examples
101
+ --------
102
+ >>> x = np.array([1, 2, 3, 4, 5])
103
+ >>> y = np.array([2, 3, 4, 5, 6])
104
+ >>> cliffs_delta(x, y)
105
+ -0.6
106
+
107
+ >>> # No difference
108
+ >>> x = np.array([1, 2, 3, 4, 5])
109
+ >>> y = np.array([1, 2, 3, 4, 5])
110
+ >>> cliffs_delta(x, y)
111
+ 0.0
112
+
113
+ >>> # Complete dominance
114
+ >>> x = np.array([6, 7, 8, 9, 10])
115
+ >>> y = np.array([1, 2, 3, 4, 5])
116
+ >>> cliffs_delta(x, y)
117
+ 1.0
118
+ """
119
+ # Convert to numpy arrays
120
+ x = np.asarray(x)
121
+ y = np.asarray(y)
122
+
123
+ # Remove NaN values
124
+ x = x[~np.isnan(x)]
125
+ y = y[~np.isnan(y)]
126
+
127
+ nx = len(x)
128
+ ny = len(y)
129
+
130
+ # Count comparisons
131
+ # Vectorized computation: create all pairwise comparisons
132
+ # x[:, None] creates column vector, y creates row vector
133
+ # Broadcasting creates matrix of all pairwise comparisons
134
+ more = np.sum(x[:, None] > y)
135
+ less = np.sum(x[:, None] < y)
136
+
137
+ # Compute Cliff's delta
138
+ delta = (more - less) / (nx * ny)
139
+
140
+ return float(delta)
141
+
142
+
143
+ def interpret_cliffs_delta(delta: float) -> str:
144
+ """
145
+ Interpret Cliff's delta effect size.
146
+
147
+ Parameters
148
+ ----------
149
+ delta : float
150
+ Cliff's delta value
151
+
152
+ Returns
153
+ -------
154
+ str
155
+ Interpretation string
156
+
157
+ Examples
158
+ --------
159
+ >>> interpret_cliffs_delta(0.1)
160
+ 'negligible'
161
+ >>> interpret_cliffs_delta(0.25)
162
+ 'small'
163
+ >>> interpret_cliffs_delta(0.4)
164
+ 'medium'
165
+ >>> interpret_cliffs_delta(0.6)
166
+ 'large'
167
+ """
168
+ delta_abs = abs(delta)
169
+
170
+ if delta_abs < 0.147:
171
+ return 'negligible'
172
+ elif delta_abs < 0.33:
173
+ return 'small'
174
+ elif delta_abs < 0.474:
175
+ return 'medium'
176
+ else:
177
+ return 'large'
178
+
179
+
180
+ """Main function"""
181
+
182
+
183
+ def main(args):
184
+ """Demonstrate Cliff's delta computation."""
185
+ logger.info("Demonstrating Cliff's delta effect size")
186
+
187
+ # Set random seed
188
+ np.random.seed(42)
189
+
190
+ # Example 1: Basic usage
191
+ logger.info("\n=== Example 1: Basic usage ===")
192
+
193
+ x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
194
+ y = np.array([3, 4, 5, 6, 7, 8, 9, 10])
195
+
196
+ delta = cliffs_delta(x, y)
197
+ interpretation = interpret_cliffs_delta(delta)
198
+
199
+ logger.info(f"Cliff's delta: {delta:.3f} ({interpretation})")
200
+ logger.info(f"{abs(delta):.1%} dominance of one group over the other")
201
+
202
+ # Example 2: Robustness to outliers
203
+ logger.info("\n=== Example 2: Robustness to outliers ===")
204
+
205
+ x_normal = np.array([1, 2, 3, 4, 5])
206
+ y_normal = np.array([3, 4, 5, 6, 7])
207
+ x_outlier = np.array([1, 2, 3, 4, 100]) # Extreme outlier
208
+ y_outlier = np.array([3, 4, 5, 6, 7])
209
+
210
+ delta_normal = cliffs_delta(x_normal, y_normal)
211
+ delta_outlier = cliffs_delta(x_outlier, y_outlier)
212
+
213
+ from ._cohens_d import cohens_d
214
+ d_normal = cohens_d(x_normal, y_normal)
215
+ d_outlier = cohens_d(x_outlier, y_outlier)
216
+
217
+ logger.info(f"Without outlier: Cliff's δ = {delta_normal:.3f}, Cohen's d = {d_normal:.3f}")
218
+ logger.info(f"With outlier: Cliff's δ = {delta_outlier:.3f}, Cohen's d = {d_outlier:.3f}")
219
+ logger.info("Cliff's delta is stable, Cohen's d is inflated by outlier")
220
+
221
+ # Example 3: Different effect sizes
222
+ logger.info("\n=== Example 3: Different effect sizes ===")
223
+
224
+ control = np.random.normal(0, 1, 50)
225
+
226
+ for shift in [0.0, 0.3, 0.6, 1.0]:
227
+ treatment = np.random.normal(shift, 1, 50)
228
+ delta = cliffs_delta(control, treatment)
229
+ interpretation = interpret_cliffs_delta(delta)
230
+
231
+ logger.info(
232
+ f"Shift = {shift:.1f}: δ = {delta:.3f} ({interpretation})"
233
+ )
234
+
235
+ # Visualization
236
+ logger.info("\n=== Creating visualization ===")
237
+
238
+ fig, axes = stx.plt.subplots(1, 2, figsize=(12, 5))
239
+
240
+ # Plot 1: Distribution comparison
241
+ ax = axes[0]
242
+ x_demo = np.random.exponential(2, 200)
243
+ y_demo = np.random.exponential(3, 200)
244
+
245
+ ax.hist(x_demo, bins=30, alpha=0.5, label='Group X', density=True)
246
+ ax.hist(y_demo, bins=30, alpha=0.5, label='Group Y', density=True)
247
+
248
+ delta_demo = cliffs_delta(x_demo, y_demo)
249
+ ax.set_xlabel('Value')
250
+ ax.set_ylabel('Density')
251
+ ax.set_title(f"Distributions (Cliff's δ = {delta_demo:.2f})")
252
+ ax.legend()
253
+
254
+ # Plot 2: Effect size interpretation
255
+ ax = axes[1]
256
+ delta_values = np.linspace(-1, 1, 100)
257
+ interpretations = [interpret_cliffs_delta(d) for d in delta_values]
258
+
259
+ color_map = {'negligible': 'lightgray', 'small': 'yellow',
260
+ 'medium': 'orange', 'large': 'red'}
261
+ colors = [color_map[i] for i in interpretations]
262
+
263
+ ax.scatter(delta_values, [0] * len(delta_values), c=colors, s=50, alpha=0.7)
264
+ ax.set_xlabel("Cliff's δ")
265
+ ax.set_yticks([])
266
+ ax.set_title('Effect Size Interpretation')
267
+ ax.axvline(0, color='black', linestyle='-', alpha=0.3)
268
+ ax.axvline(0.147, color='black', linestyle='--', alpha=0.3)
269
+ ax.axvline(0.33, color='black', linestyle='--', alpha=0.3)
270
+ ax.axvline(0.474, color='black', linestyle='--', alpha=0.3)
271
+ ax.axvline(-0.147, color='black', linestyle='--', alpha=0.3)
272
+ ax.axvline(-0.33, color='black', linestyle='--', alpha=0.3)
273
+ ax.axvline(-0.474, color='black', linestyle='--', alpha=0.3)
274
+
275
+ stx.plt.tight_layout()
276
+ stx.io.save(fig, './cliffs_delta_demo.jpg')
277
+ logger.info("Visualization saved")
278
+
279
+ return 0
280
+
281
+
282
+ def parse_args():
283
+ """Parse command line arguments."""
284
+ parser = argparse.ArgumentParser(
285
+ description="Demonstrate Cliff's delta effect size calculation"
286
+ )
287
+ parser.add_argument(
288
+ '--verbose',
289
+ action='store_true',
290
+ help='Enable verbose output'
291
+ )
292
+ return parser.parse_args()
293
+
294
+
295
+ def run_main():
296
+ """Initialize SciTeX framework and run main."""
297
+ global CONFIG, sys, plt, rng
298
+
299
+ import sys
300
+ import matplotlib.pyplot as plt
301
+
302
+ args = parse_args()
303
+
304
+ CONFIG, sys.stdout, sys.stderr, plt, CC, rng = stx.session.start(
305
+ sys,
306
+ plt,
307
+ args=args,
308
+ file=__file__,
309
+ verbose=args.verbose,
310
+ agg=True,
311
+ )
312
+
313
+ exit_status = main(args)
314
+
315
+ stx.session.close(
316
+ CONFIG,
317
+ verbose=args.verbose,
318
+ exit_status=exit_status,
319
+ )
320
+
321
+
322
+ if __name__ == '__main__':
323
+ run_main()
324
+
325
+ # EOF
@@ -0,0 +1,342 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-10-01 21:00:00 (ywatanabe)"
4
+ # File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/stats/effect_sizes/_cohens_d.py
5
+ # ----------------------------------------
6
+ from __future__ import annotations
7
+ import os
8
+ __FILE__ = __file__
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ """
13
+ Functionalities:
14
+ - Compute Cohen's d effect size for t-tests
15
+ - Support both independent and paired samples
16
+ - Handle various pooling methods (standard, Hedges' g, Glass's delta)
17
+ - Provide interpretation guidelines
18
+
19
+ Dependencies:
20
+ - packages: numpy, pandas
21
+
22
+ IO:
23
+ - input: Two samples (arrays or Series)
24
+ - output: Effect size value (float)
25
+ """
26
+
27
+ """Imports"""
28
+ import argparse
29
+ from typing import Literal, Optional, Union
30
+
31
+ import numpy as np
32
+ import pandas as pd
33
+ import scitex as stx
34
+ from scitex.logging import getLogger
35
+
36
+ logger = getLogger(__name__)
37
+
38
+ """Functions"""
39
+
40
+
41
+ def cohens_d(
42
+ x: Union[np.ndarray, pd.Series],
43
+ y: Optional[Union[np.ndarray, pd.Series]] = None,
44
+ paired: bool = False,
45
+ correction: Literal['hedges', 'glass', None] = None
46
+ ) -> float:
47
+ """
48
+ Compute Cohen's d effect size.
49
+
50
+ Parameters
51
+ ----------
52
+ x : array or Series
53
+ First sample
54
+ y : array or Series, optional
55
+ Second sample. If None, computes one-sample effect size against zero.
56
+ paired : bool, default False
57
+ Whether samples are paired
58
+ correction : {'hedges', 'glass', None}, default None
59
+ Correction method:
60
+ - None: Standard Cohen's d
61
+ - 'hedges': Hedges' g (corrected for small samples)
62
+ - 'glass': Glass's delta (uses only control group SD)
63
+
64
+ Returns
65
+ -------
66
+ float
67
+ Effect size value
68
+
69
+ Notes
70
+ -----
71
+ Cohen's d is calculated as:
72
+
73
+ .. math::
74
+ d = \\frac{\\bar{x}_1 - \\bar{x}_2}{s_{pooled}}
75
+
76
+ where :math:`s_{pooled}` is the pooled standard deviation:
77
+
78
+ .. math::
79
+ s_{pooled} = \\sqrt{\\frac{(n_1-1)s_1^2 + (n_2-1)s_2^2}{n_1 + n_2 - 2}}
80
+
81
+ Interpretation guidelines (Cohen, 1988):
82
+ - Small effect: d = 0.2
83
+ - Medium effect: d = 0.5
84
+ - Large effect: d = 0.8
85
+
86
+ For paired samples, d is computed as:
87
+
88
+ .. math::
89
+ d = \\frac{\\bar{d}}{s_d}
90
+
91
+ where :math:`\\bar{d}` is the mean difference and :math:`s_d` is the
92
+ standard deviation of differences.
93
+
94
+ References
95
+ ----------
96
+ .. [1] Cohen, J. (1988). Statistical Power Analysis for the Behavioral
97
+ Sciences (2nd ed.). Routledge.
98
+
99
+ Examples
100
+ --------
101
+ >>> x = np.array([1, 2, 3, 4, 5])
102
+ >>> y = np.array([2, 3, 4, 5, 6])
103
+ >>> cohens_d(x, y)
104
+ -1.0
105
+
106
+ >>> # Paired samples
107
+ >>> cohens_d(x, y, paired=True)
108
+ -1.58...
109
+
110
+ >>> # With Hedges' correction
111
+ >>> cohens_d(x, y, correction='hedges')
112
+ -0.95...
113
+ """
114
+ # Convert to numpy arrays
115
+ x = np.asarray(x)
116
+ if y is not None:
117
+ y = np.asarray(y)
118
+
119
+ # Remove NaN values
120
+ x = x[~np.isnan(x)]
121
+ if y is not None:
122
+ y = y[~np.isnan(y)]
123
+
124
+ # Compute effect size
125
+ if y is None:
126
+ # One-sample: compare to zero
127
+ d = np.mean(x) / np.std(x, ddof=1)
128
+ elif paired:
129
+ # Paired samples
130
+ if len(x) != len(y):
131
+ raise ValueError("Paired samples must have same length")
132
+ diff = x - y
133
+ d = np.mean(diff) / np.std(diff, ddof=1)
134
+ else:
135
+ # Independent samples
136
+ n1, n2 = len(x), len(y)
137
+ mean_diff = np.mean(x) - np.mean(y)
138
+
139
+ if correction == 'glass':
140
+ # Glass's delta: use only control group (y) SD
141
+ d = mean_diff / np.std(y, ddof=1)
142
+ else:
143
+ # Pooled standard deviation
144
+ var1 = np.var(x, ddof=1)
145
+ var2 = np.var(y, ddof=1)
146
+ pooled_std = np.sqrt(((n1 - 1) * var1 + (n2 - 1) * var2) / (n1 + n2 - 2))
147
+ d = mean_diff / pooled_std
148
+
149
+ # Apply Hedges' correction for small samples
150
+ if correction == 'hedges':
151
+ # Hedges' g correction factor
152
+ correction_factor = 1 - (3 / (4 * (n1 + n2) - 9))
153
+ d = d * correction_factor
154
+
155
+ return float(d)
156
+
157
+
158
+ def interpret_cohens_d(d: float) -> str:
159
+ """
160
+ Interpret Cohen's d effect size.
161
+
162
+ Parameters
163
+ ----------
164
+ d : float
165
+ Cohen's d value
166
+
167
+ Returns
168
+ -------
169
+ str
170
+ Interpretation string
171
+
172
+ Examples
173
+ --------
174
+ >>> interpret_cohens_d(0.3)
175
+ 'small'
176
+ >>> interpret_cohens_d(0.6)
177
+ 'medium'
178
+ >>> interpret_cohens_d(0.9)
179
+ 'large'
180
+ """
181
+ d_abs = abs(d)
182
+
183
+ if d_abs < 0.2:
184
+ return 'negligible'
185
+ elif d_abs < 0.5:
186
+ return 'small'
187
+ elif d_abs < 0.8:
188
+ return 'medium'
189
+ else:
190
+ return 'large'
191
+
192
+
193
+ """Main function"""
194
+
195
+
196
+ def main(args):
197
+ """Demonstrate Cohen's d computation."""
198
+ logger.info("Demonstrating Cohen's d effect size")
199
+
200
+ # Set random seed
201
+ np.random.seed(42)
202
+
203
+ # Example 1: Different effect sizes
204
+ logger.info("\n=== Example 1: Different effect sizes ===")
205
+
206
+ n = 50
207
+ control = np.random.normal(0, 1, n)
208
+
209
+ effect_sizes = [0.0, 0.2, 0.5, 0.8, 1.2]
210
+ results = []
211
+
212
+ for true_d in effect_sizes:
213
+ treatment = np.random.normal(true_d, 1, n)
214
+ computed_d = cohens_d(control, treatment)
215
+ interpretation = interpret_cohens_d(computed_d)
216
+
217
+ logger.info(
218
+ f"True d = {true_d:.1f}, "
219
+ f"Computed d = {computed_d:.3f}, "
220
+ f"Interpretation: {interpretation}"
221
+ )
222
+
223
+ results.append({
224
+ 'true_d': true_d,
225
+ 'computed_d': computed_d,
226
+ 'interpretation': interpretation
227
+ })
228
+
229
+ # Example 2: Paired vs independent
230
+ logger.info("\n=== Example 2: Paired vs Independent ===")
231
+
232
+ n_pairs = 30
233
+ baseline = np.random.normal(0, 1, n_pairs)
234
+ noise = np.random.normal(0, 0.3, n_pairs)
235
+ followup = baseline + 0.5 + noise
236
+
237
+ d_independent = cohens_d(baseline, followup, paired=False)
238
+ d_paired = cohens_d(baseline, followup, paired=True)
239
+
240
+ logger.info(f"Independent samples d = {d_independent:.3f}")
241
+ logger.info(f"Paired samples d = {d_paired:.3f}")
242
+ logger.info(f"Paired is more sensitive due to correlation")
243
+
244
+ # Example 3: Correction methods
245
+ logger.info("\n=== Example 3: Correction methods ===")
246
+
247
+ small_n = 10
248
+ x_small = np.random.normal(0, 1, small_n)
249
+ y_small = np.random.normal(0.5, 1, small_n)
250
+
251
+ d_standard = cohens_d(x_small, y_small)
252
+ d_hedges = cohens_d(x_small, y_small, correction='hedges')
253
+ d_glass = cohens_d(x_small, y_small, correction='glass')
254
+
255
+ logger.info(f"Standard Cohen's d = {d_standard:.3f}")
256
+ logger.info(f"Hedges' g = {d_hedges:.3f} (corrected for small n)")
257
+ logger.info(f"Glass's delta = {d_glass:.3f} (uses control SD only)")
258
+
259
+ # Visualization
260
+ logger.info("\n=== Creating visualization ===")
261
+
262
+ fig, axes = stx.plt.subplots(1, 2, figsize=(12, 5))
263
+
264
+ # Plot 1: Distribution visualization
265
+ ax = axes[0]
266
+ control_demo = np.random.normal(0, 1, 1000)
267
+ treatment_demo = np.random.normal(0.8, 1, 1000)
268
+
269
+ ax.hist(control_demo, bins=30, alpha=0.5, label='Control', density=True)
270
+ ax.hist(treatment_demo, bins=30, alpha=0.5, label='Treatment', density=True)
271
+
272
+ d_demo = cohens_d(control_demo, treatment_demo)
273
+ ax.axvline(np.mean(control_demo), color='blue', linestyle='--', alpha=0.7)
274
+ ax.axvline(np.mean(treatment_demo), color='orange', linestyle='--', alpha=0.7)
275
+
276
+ ax.set_xlabel('Value')
277
+ ax.set_ylabel('Density')
278
+ ax.set_title(f"Distributions (Cohen's d = {d_demo:.2f})")
279
+ ax.legend()
280
+
281
+ # Plot 2: Effect size comparison
282
+ ax = axes[1]
283
+ df_results = pd.DataFrame(results)
284
+ ax.scatter(df_results['true_d'], df_results['computed_d'], s=100)
285
+ ax.plot([-0.5, 1.5], [-0.5, 1.5], 'k--', alpha=0.5, label='Perfect agreement')
286
+ ax.set_xlabel('True Effect Size')
287
+ ax.set_ylabel("Computed Cohen's d")
288
+ ax.set_title('True vs Computed Effect Sizes')
289
+ ax.legend()
290
+ ax.grid(True, alpha=0.3)
291
+
292
+ stx.plt.tight_layout()
293
+ stx.io.save(fig, './cohens_d_demo.jpg')
294
+ logger.info("Visualization saved")
295
+
296
+ return 0
297
+
298
+
299
+ def parse_args():
300
+ """Parse command line arguments."""
301
+ parser = argparse.ArgumentParser(
302
+ description="Demonstrate Cohen's d effect size calculation"
303
+ )
304
+ parser.add_argument(
305
+ '--verbose',
306
+ action='store_true',
307
+ help='Enable verbose output'
308
+ )
309
+ return parser.parse_args()
310
+
311
+
312
+ def run_main():
313
+ """Initialize SciTeX framework and run main."""
314
+ global CONFIG, sys, plt, rng
315
+
316
+ import sys
317
+ import matplotlib.pyplot as plt
318
+
319
+ args = parse_args()
320
+
321
+ CONFIG, sys.stdout, sys.stderr, plt, CC, rng = stx.session.start(
322
+ sys,
323
+ plt,
324
+ args=args,
325
+ file=__file__,
326
+ verbose=args.verbose,
327
+ agg=True,
328
+ )
329
+
330
+ exit_status = main(args)
331
+
332
+ stx.session.close(
333
+ CONFIG,
334
+ verbose=args.verbose,
335
+ exit_status=exit_status,
336
+ )
337
+
338
+
339
+ if __name__ == '__main__':
340
+ run_main()
341
+
342
+ # EOF