scitex 2.0.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 (572) hide show
  1. scitex/__init__.py +73 -0
  2. scitex/__main__.py +89 -0
  3. scitex/__version__.py +14 -0
  4. scitex/_sh.py +59 -0
  5. scitex/ai/_LearningCurveLogger.py +583 -0
  6. scitex/ai/__Classifiers.py +101 -0
  7. scitex/ai/__init__.py +55 -0
  8. scitex/ai/_gen_ai/_Anthropic.py +173 -0
  9. scitex/ai/_gen_ai/_BaseGenAI.py +336 -0
  10. scitex/ai/_gen_ai/_DeepSeek.py +175 -0
  11. scitex/ai/_gen_ai/_Google.py +161 -0
  12. scitex/ai/_gen_ai/_Groq.py +97 -0
  13. scitex/ai/_gen_ai/_Llama.py +142 -0
  14. scitex/ai/_gen_ai/_OpenAI.py +230 -0
  15. scitex/ai/_gen_ai/_PARAMS.py +565 -0
  16. scitex/ai/_gen_ai/_Perplexity.py +191 -0
  17. scitex/ai/_gen_ai/__init__.py +32 -0
  18. scitex/ai/_gen_ai/_calc_cost.py +78 -0
  19. scitex/ai/_gen_ai/_format_output_func.py +183 -0
  20. scitex/ai/_gen_ai/_genai_factory.py +71 -0
  21. scitex/ai/act/__init__.py +8 -0
  22. scitex/ai/act/_define.py +11 -0
  23. scitex/ai/classification/__init__.py +7 -0
  24. scitex/ai/classification/classification_reporter.py +1137 -0
  25. scitex/ai/classification/classifier_server.py +131 -0
  26. scitex/ai/classification/classifiers.py +101 -0
  27. scitex/ai/classification_reporter.py +1161 -0
  28. scitex/ai/classifier_server.py +131 -0
  29. scitex/ai/clustering/__init__.py +11 -0
  30. scitex/ai/clustering/_pca.py +115 -0
  31. scitex/ai/clustering/_umap.py +376 -0
  32. scitex/ai/early_stopping.py +149 -0
  33. scitex/ai/feature_extraction/__init__.py +56 -0
  34. scitex/ai/feature_extraction/vit.py +148 -0
  35. scitex/ai/genai/__init__.py +277 -0
  36. scitex/ai/genai/anthropic.py +177 -0
  37. scitex/ai/genai/anthropic_provider.py +320 -0
  38. scitex/ai/genai/anthropic_refactored.py +109 -0
  39. scitex/ai/genai/auth_manager.py +200 -0
  40. scitex/ai/genai/base_genai.py +336 -0
  41. scitex/ai/genai/base_provider.py +291 -0
  42. scitex/ai/genai/calc_cost.py +78 -0
  43. scitex/ai/genai/chat_history.py +307 -0
  44. scitex/ai/genai/cost_tracker.py +276 -0
  45. scitex/ai/genai/deepseek.py +188 -0
  46. scitex/ai/genai/deepseek_provider.py +251 -0
  47. scitex/ai/genai/format_output_func.py +183 -0
  48. scitex/ai/genai/genai_factory.py +71 -0
  49. scitex/ai/genai/google.py +169 -0
  50. scitex/ai/genai/google_provider.py +228 -0
  51. scitex/ai/genai/groq.py +104 -0
  52. scitex/ai/genai/groq_provider.py +248 -0
  53. scitex/ai/genai/image_processor.py +250 -0
  54. scitex/ai/genai/llama.py +155 -0
  55. scitex/ai/genai/llama_provider.py +214 -0
  56. scitex/ai/genai/mock_provider.py +127 -0
  57. scitex/ai/genai/model_registry.py +304 -0
  58. scitex/ai/genai/openai.py +230 -0
  59. scitex/ai/genai/openai_provider.py +293 -0
  60. scitex/ai/genai/params.py +565 -0
  61. scitex/ai/genai/perplexity.py +202 -0
  62. scitex/ai/genai/perplexity_provider.py +205 -0
  63. scitex/ai/genai/provider_base.py +302 -0
  64. scitex/ai/genai/provider_factory.py +370 -0
  65. scitex/ai/genai/response_handler.py +235 -0
  66. scitex/ai/layer/_Pass.py +21 -0
  67. scitex/ai/layer/__init__.py +10 -0
  68. scitex/ai/layer/_switch.py +8 -0
  69. scitex/ai/loss/_L1L2Losses.py +34 -0
  70. scitex/ai/loss/__init__.py +12 -0
  71. scitex/ai/loss/multi_task_loss.py +47 -0
  72. scitex/ai/metrics/__init__.py +9 -0
  73. scitex/ai/metrics/_bACC.py +51 -0
  74. scitex/ai/metrics/silhoute_score_block.py +496 -0
  75. scitex/ai/optim/Ranger_Deep_Learning_Optimizer/__init__.py +0 -0
  76. scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/__init__.py +3 -0
  77. scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/ranger.py +207 -0
  78. scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/ranger2020.py +238 -0
  79. scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/ranger913A.py +215 -0
  80. scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/rangerqh.py +184 -0
  81. scitex/ai/optim/Ranger_Deep_Learning_Optimizer/setup.py +24 -0
  82. scitex/ai/optim/__init__.py +13 -0
  83. scitex/ai/optim/_get_set.py +31 -0
  84. scitex/ai/optim/_optimizers.py +71 -0
  85. scitex/ai/plt/__init__.py +21 -0
  86. scitex/ai/plt/_conf_mat.py +592 -0
  87. scitex/ai/plt/_learning_curve.py +194 -0
  88. scitex/ai/plt/_optuna_study.py +111 -0
  89. scitex/ai/plt/aucs/__init__.py +2 -0
  90. scitex/ai/plt/aucs/example.py +60 -0
  91. scitex/ai/plt/aucs/pre_rec_auc.py +223 -0
  92. scitex/ai/plt/aucs/roc_auc.py +246 -0
  93. scitex/ai/sampling/undersample.py +29 -0
  94. scitex/ai/sk/__init__.py +11 -0
  95. scitex/ai/sk/_clf.py +58 -0
  96. scitex/ai/sk/_to_sktime.py +100 -0
  97. scitex/ai/sklearn/__init__.py +26 -0
  98. scitex/ai/sklearn/clf.py +58 -0
  99. scitex/ai/sklearn/to_sktime.py +100 -0
  100. scitex/ai/training/__init__.py +7 -0
  101. scitex/ai/training/early_stopping.py +150 -0
  102. scitex/ai/training/learning_curve_logger.py +555 -0
  103. scitex/ai/utils/__init__.py +22 -0
  104. scitex/ai/utils/_check_params.py +50 -0
  105. scitex/ai/utils/_default_dataset.py +46 -0
  106. scitex/ai/utils/_format_samples_for_sktime.py +26 -0
  107. scitex/ai/utils/_label_encoder.py +134 -0
  108. scitex/ai/utils/_merge_labels.py +22 -0
  109. scitex/ai/utils/_sliding_window_data_augmentation.py +11 -0
  110. scitex/ai/utils/_under_sample.py +51 -0
  111. scitex/ai/utils/_verify_n_gpus.py +16 -0
  112. scitex/ai/utils/grid_search.py +148 -0
  113. scitex/context/__init__.py +9 -0
  114. scitex/context/_suppress_output.py +38 -0
  115. scitex/db/_BaseMixins/_BaseBackupMixin.py +30 -0
  116. scitex/db/_BaseMixins/_BaseBatchMixin.py +31 -0
  117. scitex/db/_BaseMixins/_BaseBlobMixin.py +81 -0
  118. scitex/db/_BaseMixins/_BaseConnectionMixin.py +43 -0
  119. scitex/db/_BaseMixins/_BaseImportExportMixin.py +39 -0
  120. scitex/db/_BaseMixins/_BaseIndexMixin.py +29 -0
  121. scitex/db/_BaseMixins/_BaseMaintenanceMixin.py +33 -0
  122. scitex/db/_BaseMixins/_BaseQueryMixin.py +52 -0
  123. scitex/db/_BaseMixins/_BaseRowMixin.py +32 -0
  124. scitex/db/_BaseMixins/_BaseSchemaMixin.py +44 -0
  125. scitex/db/_BaseMixins/_BaseTableMixin.py +66 -0
  126. scitex/db/_BaseMixins/_BaseTransactionMixin.py +52 -0
  127. scitex/db/_BaseMixins/__init__.py +30 -0
  128. scitex/db/_PostgreSQL.py +126 -0
  129. scitex/db/_PostgreSQLMixins/_BackupMixin.py +166 -0
  130. scitex/db/_PostgreSQLMixins/_BatchMixin.py +82 -0
  131. scitex/db/_PostgreSQLMixins/_BlobMixin.py +231 -0
  132. scitex/db/_PostgreSQLMixins/_ConnectionMixin.py +92 -0
  133. scitex/db/_PostgreSQLMixins/_ImportExportMixin.py +59 -0
  134. scitex/db/_PostgreSQLMixins/_IndexMixin.py +64 -0
  135. scitex/db/_PostgreSQLMixins/_MaintenanceMixin.py +175 -0
  136. scitex/db/_PostgreSQLMixins/_QueryMixin.py +108 -0
  137. scitex/db/_PostgreSQLMixins/_RowMixin.py +75 -0
  138. scitex/db/_PostgreSQLMixins/_SchemaMixin.py +126 -0
  139. scitex/db/_PostgreSQLMixins/_TableMixin.py +176 -0
  140. scitex/db/_PostgreSQLMixins/_TransactionMixin.py +57 -0
  141. scitex/db/_PostgreSQLMixins/__init__.py +34 -0
  142. scitex/db/_SQLite3.py +2136 -0
  143. scitex/db/_SQLite3Mixins/_BatchMixin.py +243 -0
  144. scitex/db/_SQLite3Mixins/_BlobMixin.py +229 -0
  145. scitex/db/_SQLite3Mixins/_ConnectionMixin.py +108 -0
  146. scitex/db/_SQLite3Mixins/_ImportExportMixin.py +80 -0
  147. scitex/db/_SQLite3Mixins/_IndexMixin.py +32 -0
  148. scitex/db/_SQLite3Mixins/_MaintenanceMixin.py +176 -0
  149. scitex/db/_SQLite3Mixins/_QueryMixin.py +83 -0
  150. scitex/db/_SQLite3Mixins/_RowMixin.py +75 -0
  151. scitex/db/_SQLite3Mixins/_TableMixin.py +183 -0
  152. scitex/db/_SQLite3Mixins/_TransactionMixin.py +71 -0
  153. scitex/db/_SQLite3Mixins/__init__.py +30 -0
  154. scitex/db/__init__.py +14 -0
  155. scitex/db/_delete_duplicates.py +397 -0
  156. scitex/db/_inspect.py +163 -0
  157. scitex/decorators/__init__.py +54 -0
  158. scitex/decorators/_auto_order.py +172 -0
  159. scitex/decorators/_batch_fn.py +127 -0
  160. scitex/decorators/_cache_disk.py +32 -0
  161. scitex/decorators/_cache_mem.py +12 -0
  162. scitex/decorators/_combined.py +98 -0
  163. scitex/decorators/_converters.py +282 -0
  164. scitex/decorators/_deprecated.py +26 -0
  165. scitex/decorators/_not_implemented.py +30 -0
  166. scitex/decorators/_numpy_fn.py +86 -0
  167. scitex/decorators/_pandas_fn.py +121 -0
  168. scitex/decorators/_preserve_doc.py +19 -0
  169. scitex/decorators/_signal_fn.py +95 -0
  170. scitex/decorators/_timeout.py +55 -0
  171. scitex/decorators/_torch_fn.py +136 -0
  172. scitex/decorators/_wrap.py +39 -0
  173. scitex/decorators/_xarray_fn.py +88 -0
  174. scitex/dev/__init__.py +15 -0
  175. scitex/dev/_analyze_code_flow.py +284 -0
  176. scitex/dev/_reload.py +59 -0
  177. scitex/dict/_DotDict.py +442 -0
  178. scitex/dict/__init__.py +18 -0
  179. scitex/dict/_listed_dict.py +42 -0
  180. scitex/dict/_pop_keys.py +36 -0
  181. scitex/dict/_replace.py +13 -0
  182. scitex/dict/_safe_merge.py +62 -0
  183. scitex/dict/_to_str.py +32 -0
  184. scitex/dsp/__init__.py +72 -0
  185. scitex/dsp/_crop.py +122 -0
  186. scitex/dsp/_demo_sig.py +331 -0
  187. scitex/dsp/_detect_ripples.py +212 -0
  188. scitex/dsp/_ensure_3d.py +18 -0
  189. scitex/dsp/_hilbert.py +78 -0
  190. scitex/dsp/_listen.py +702 -0
  191. scitex/dsp/_misc.py +30 -0
  192. scitex/dsp/_mne.py +32 -0
  193. scitex/dsp/_modulation_index.py +79 -0
  194. scitex/dsp/_pac.py +319 -0
  195. scitex/dsp/_psd.py +102 -0
  196. scitex/dsp/_resample.py +65 -0
  197. scitex/dsp/_time.py +36 -0
  198. scitex/dsp/_transform.py +68 -0
  199. scitex/dsp/_wavelet.py +212 -0
  200. scitex/dsp/add_noise.py +111 -0
  201. scitex/dsp/example.py +253 -0
  202. scitex/dsp/filt.py +155 -0
  203. scitex/dsp/norm.py +18 -0
  204. scitex/dsp/params.py +51 -0
  205. scitex/dsp/reference.py +43 -0
  206. scitex/dsp/template.py +25 -0
  207. scitex/dsp/utils/__init__.py +15 -0
  208. scitex/dsp/utils/_differential_bandpass_filters.py +120 -0
  209. scitex/dsp/utils/_ensure_3d.py +18 -0
  210. scitex/dsp/utils/_ensure_even_len.py +10 -0
  211. scitex/dsp/utils/_zero_pad.py +48 -0
  212. scitex/dsp/utils/filter.py +408 -0
  213. scitex/dsp/utils/pac.py +177 -0
  214. scitex/dt/__init__.py +8 -0
  215. scitex/dt/_linspace.py +130 -0
  216. scitex/etc/__init__.py +15 -0
  217. scitex/etc/wait_key.py +34 -0
  218. scitex/gen/_DimHandler.py +196 -0
  219. scitex/gen/_TimeStamper.py +244 -0
  220. scitex/gen/__init__.py +95 -0
  221. scitex/gen/_alternate_kwarg.py +13 -0
  222. scitex/gen/_cache.py +11 -0
  223. scitex/gen/_check_host.py +34 -0
  224. scitex/gen/_ci.py +12 -0
  225. scitex/gen/_close.py +222 -0
  226. scitex/gen/_embed.py +78 -0
  227. scitex/gen/_inspect_module.py +257 -0
  228. scitex/gen/_is_ipython.py +12 -0
  229. scitex/gen/_less.py +48 -0
  230. scitex/gen/_list_packages.py +139 -0
  231. scitex/gen/_mat2py.py +88 -0
  232. scitex/gen/_norm.py +170 -0
  233. scitex/gen/_paste.py +18 -0
  234. scitex/gen/_print_config.py +84 -0
  235. scitex/gen/_shell.py +48 -0
  236. scitex/gen/_src.py +111 -0
  237. scitex/gen/_start.py +451 -0
  238. scitex/gen/_symlink.py +55 -0
  239. scitex/gen/_symlog.py +27 -0
  240. scitex/gen/_tee.py +238 -0
  241. scitex/gen/_title2path.py +60 -0
  242. scitex/gen/_title_case.py +88 -0
  243. scitex/gen/_to_even.py +84 -0
  244. scitex/gen/_to_odd.py +34 -0
  245. scitex/gen/_to_rank.py +39 -0
  246. scitex/gen/_transpose.py +37 -0
  247. scitex/gen/_type.py +78 -0
  248. scitex/gen/_var_info.py +73 -0
  249. scitex/gen/_wrap.py +17 -0
  250. scitex/gen/_xml2dict.py +76 -0
  251. scitex/gen/misc.py +730 -0
  252. scitex/gen/path.py +0 -0
  253. scitex/general/__init__.py +5 -0
  254. scitex/gists/_SigMacro_processFigure_S.py +128 -0
  255. scitex/gists/_SigMacro_toBlue.py +172 -0
  256. scitex/gists/__init__.py +12 -0
  257. scitex/io/_H5Explorer.py +292 -0
  258. scitex/io/__init__.py +82 -0
  259. scitex/io/_cache.py +101 -0
  260. scitex/io/_flush.py +24 -0
  261. scitex/io/_glob.py +103 -0
  262. scitex/io/_json2md.py +113 -0
  263. scitex/io/_load.py +168 -0
  264. scitex/io/_load_configs.py +146 -0
  265. scitex/io/_load_modules/__init__.py +38 -0
  266. scitex/io/_load_modules/_catboost.py +66 -0
  267. scitex/io/_load_modules/_con.py +20 -0
  268. scitex/io/_load_modules/_db.py +24 -0
  269. scitex/io/_load_modules/_docx.py +42 -0
  270. scitex/io/_load_modules/_eeg.py +110 -0
  271. scitex/io/_load_modules/_hdf5.py +196 -0
  272. scitex/io/_load_modules/_image.py +19 -0
  273. scitex/io/_load_modules/_joblib.py +19 -0
  274. scitex/io/_load_modules/_json.py +18 -0
  275. scitex/io/_load_modules/_markdown.py +103 -0
  276. scitex/io/_load_modules/_matlab.py +37 -0
  277. scitex/io/_load_modules/_numpy.py +39 -0
  278. scitex/io/_load_modules/_optuna.py +155 -0
  279. scitex/io/_load_modules/_pandas.py +69 -0
  280. scitex/io/_load_modules/_pdf.py +31 -0
  281. scitex/io/_load_modules/_pickle.py +24 -0
  282. scitex/io/_load_modules/_torch.py +16 -0
  283. scitex/io/_load_modules/_txt.py +126 -0
  284. scitex/io/_load_modules/_xml.py +49 -0
  285. scitex/io/_load_modules/_yaml.py +23 -0
  286. scitex/io/_mv_to_tmp.py +19 -0
  287. scitex/io/_path.py +286 -0
  288. scitex/io/_reload.py +78 -0
  289. scitex/io/_save.py +539 -0
  290. scitex/io/_save_modules/__init__.py +66 -0
  291. scitex/io/_save_modules/_catboost.py +22 -0
  292. scitex/io/_save_modules/_csv.py +89 -0
  293. scitex/io/_save_modules/_excel.py +49 -0
  294. scitex/io/_save_modules/_hdf5.py +249 -0
  295. scitex/io/_save_modules/_html.py +48 -0
  296. scitex/io/_save_modules/_image.py +140 -0
  297. scitex/io/_save_modules/_joblib.py +25 -0
  298. scitex/io/_save_modules/_json.py +25 -0
  299. scitex/io/_save_modules/_listed_dfs_as_csv.py +57 -0
  300. scitex/io/_save_modules/_listed_scalars_as_csv.py +42 -0
  301. scitex/io/_save_modules/_matlab.py +24 -0
  302. scitex/io/_save_modules/_mp4.py +29 -0
  303. scitex/io/_save_modules/_numpy.py +57 -0
  304. scitex/io/_save_modules/_optuna_study_as_csv_and_pngs.py +38 -0
  305. scitex/io/_save_modules/_pickle.py +45 -0
  306. scitex/io/_save_modules/_plotly.py +27 -0
  307. scitex/io/_save_modules/_text.py +23 -0
  308. scitex/io/_save_modules/_torch.py +26 -0
  309. scitex/io/_save_modules/_yaml.py +29 -0
  310. scitex/life/__init__.py +10 -0
  311. scitex/life/_monitor_rain.py +49 -0
  312. scitex/linalg/__init__.py +17 -0
  313. scitex/linalg/_distance.py +63 -0
  314. scitex/linalg/_geometric_median.py +64 -0
  315. scitex/linalg/_misc.py +73 -0
  316. scitex/nn/_AxiswiseDropout.py +27 -0
  317. scitex/nn/_BNet.py +126 -0
  318. scitex/nn/_BNet_Res.py +164 -0
  319. scitex/nn/_ChannelGainChanger.py +44 -0
  320. scitex/nn/_DropoutChannels.py +50 -0
  321. scitex/nn/_Filters.py +489 -0
  322. scitex/nn/_FreqGainChanger.py +110 -0
  323. scitex/nn/_GaussianFilter.py +48 -0
  324. scitex/nn/_Hilbert.py +111 -0
  325. scitex/nn/_MNet_1000.py +157 -0
  326. scitex/nn/_ModulationIndex.py +221 -0
  327. scitex/nn/_PAC.py +414 -0
  328. scitex/nn/_PSD.py +40 -0
  329. scitex/nn/_ResNet1D.py +120 -0
  330. scitex/nn/_SpatialAttention.py +25 -0
  331. scitex/nn/_Spectrogram.py +161 -0
  332. scitex/nn/_SwapChannels.py +50 -0
  333. scitex/nn/_TransposeLayer.py +19 -0
  334. scitex/nn/_Wavelet.py +183 -0
  335. scitex/nn/__init__.py +63 -0
  336. scitex/os/__init__.py +8 -0
  337. scitex/os/_mv.py +50 -0
  338. scitex/parallel/__init__.py +8 -0
  339. scitex/parallel/_run.py +151 -0
  340. scitex/path/__init__.py +33 -0
  341. scitex/path/_clean.py +52 -0
  342. scitex/path/_find.py +108 -0
  343. scitex/path/_get_module_path.py +51 -0
  344. scitex/path/_get_spath.py +35 -0
  345. scitex/path/_getsize.py +18 -0
  346. scitex/path/_increment_version.py +87 -0
  347. scitex/path/_mk_spath.py +51 -0
  348. scitex/path/_path.py +19 -0
  349. scitex/path/_split.py +23 -0
  350. scitex/path/_this_path.py +19 -0
  351. scitex/path/_version.py +101 -0
  352. scitex/pd/__init__.py +41 -0
  353. scitex/pd/_find_indi.py +126 -0
  354. scitex/pd/_find_pval.py +113 -0
  355. scitex/pd/_force_df.py +154 -0
  356. scitex/pd/_from_xyz.py +71 -0
  357. scitex/pd/_ignore_SettingWithCopyWarning.py +34 -0
  358. scitex/pd/_melt_cols.py +81 -0
  359. scitex/pd/_merge_columns.py +221 -0
  360. scitex/pd/_mv.py +63 -0
  361. scitex/pd/_replace.py +62 -0
  362. scitex/pd/_round.py +93 -0
  363. scitex/pd/_slice.py +63 -0
  364. scitex/pd/_sort.py +91 -0
  365. scitex/pd/_to_numeric.py +53 -0
  366. scitex/pd/_to_xy.py +59 -0
  367. scitex/pd/_to_xyz.py +110 -0
  368. scitex/plt/__init__.py +36 -0
  369. scitex/plt/_subplots/_AxesWrapper.py +182 -0
  370. scitex/plt/_subplots/_AxisWrapper.py +249 -0
  371. scitex/plt/_subplots/_AxisWrapperMixins/_AdjustmentMixin.py +414 -0
  372. scitex/plt/_subplots/_AxisWrapperMixins/_MatplotlibPlotMixin.py +896 -0
  373. scitex/plt/_subplots/_AxisWrapperMixins/_SeabornMixin.py +368 -0
  374. scitex/plt/_subplots/_AxisWrapperMixins/_TrackingMixin.py +185 -0
  375. scitex/plt/_subplots/_AxisWrapperMixins/__init__.py +16 -0
  376. scitex/plt/_subplots/_FigWrapper.py +226 -0
  377. scitex/plt/_subplots/_SubplotsWrapper.py +171 -0
  378. scitex/plt/_subplots/__init__.py +111 -0
  379. scitex/plt/_subplots/_export_as_csv.py +232 -0
  380. scitex/plt/_subplots/_export_as_csv_formatters/__init__.py +61 -0
  381. scitex/plt/_subplots/_export_as_csv_formatters/_format_bar.py +90 -0
  382. scitex/plt/_subplots/_export_as_csv_formatters/_format_barh.py +49 -0
  383. scitex/plt/_subplots/_export_as_csv_formatters/_format_boxplot.py +46 -0
  384. scitex/plt/_subplots/_export_as_csv_formatters/_format_contour.py +39 -0
  385. scitex/plt/_subplots/_export_as_csv_formatters/_format_errorbar.py +125 -0
  386. scitex/plt/_subplots/_export_as_csv_formatters/_format_eventplot.py +72 -0
  387. scitex/plt/_subplots/_export_as_csv_formatters/_format_fill.py +34 -0
  388. scitex/plt/_subplots/_export_as_csv_formatters/_format_fill_between.py +36 -0
  389. scitex/plt/_subplots/_export_as_csv_formatters/_format_hist.py +79 -0
  390. scitex/plt/_subplots/_export_as_csv_formatters/_format_imshow.py +59 -0
  391. scitex/plt/_subplots/_export_as_csv_formatters/_format_imshow2d.py +32 -0
  392. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot.py +79 -0
  393. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_box.py +75 -0
  394. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_conf_mat.py +64 -0
  395. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_ecdf.py +44 -0
  396. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_fillv.py +70 -0
  397. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_heatmap.py +66 -0
  398. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_image.py +95 -0
  399. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_joyplot.py +67 -0
  400. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_kde.py +52 -0
  401. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_line.py +46 -0
  402. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_mean_ci.py +46 -0
  403. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_mean_std.py +46 -0
  404. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_median_iqr.py +46 -0
  405. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_raster.py +44 -0
  406. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_rectangle.py +103 -0
  407. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_scatter_hist.py +82 -0
  408. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_shaded_line.py +58 -0
  409. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_violin.py +117 -0
  410. scitex/plt/_subplots/_export_as_csv_formatters/_format_scatter.py +30 -0
  411. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_barplot.py +51 -0
  412. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_boxplot.py +93 -0
  413. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_heatmap.py +94 -0
  414. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_histplot.py +92 -0
  415. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_jointplot.py +65 -0
  416. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_kdeplot.py +59 -0
  417. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_lineplot.py +58 -0
  418. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_pairplot.py +45 -0
  419. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_scatterplot.py +70 -0
  420. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_stripplot.py +75 -0
  421. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_swarmplot.py +75 -0
  422. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_violinplot.py +155 -0
  423. scitex/plt/_subplots/_export_as_csv_formatters/_format_violin.py +64 -0
  424. scitex/plt/_subplots/_export_as_csv_formatters/_format_violinplot.py +77 -0
  425. scitex/plt/_subplots/_export_as_csv_formatters/test_formatters.py +210 -0
  426. scitex/plt/_subplots/_export_as_csv_formatters/verify_formatters.py +342 -0
  427. scitex/plt/_subplots/_export_as_csv_formatters.py +115 -0
  428. scitex/plt/_tpl.py +28 -0
  429. scitex/plt/ax/__init__.py +114 -0
  430. scitex/plt/ax/_plot/__init__.py +53 -0
  431. scitex/plt/ax/_plot/_plot_circular_hist.py +124 -0
  432. scitex/plt/ax/_plot/_plot_conf_mat.py +136 -0
  433. scitex/plt/ax/_plot/_plot_cube.py +57 -0
  434. scitex/plt/ax/_plot/_plot_ecdf.py +84 -0
  435. scitex/plt/ax/_plot/_plot_fillv.py +55 -0
  436. scitex/plt/ax/_plot/_plot_heatmap.py +266 -0
  437. scitex/plt/ax/_plot/_plot_image.py +94 -0
  438. scitex/plt/ax/_plot/_plot_joyplot.py +76 -0
  439. scitex/plt/ax/_plot/_plot_raster.py +172 -0
  440. scitex/plt/ax/_plot/_plot_rectangle.py +69 -0
  441. scitex/plt/ax/_plot/_plot_scatter_hist.py +133 -0
  442. scitex/plt/ax/_plot/_plot_shaded_line.py +142 -0
  443. scitex/plt/ax/_plot/_plot_statistical_shaded_line.py +221 -0
  444. scitex/plt/ax/_plot/_plot_violin.py +343 -0
  445. scitex/plt/ax/_style/__init__.py +38 -0
  446. scitex/plt/ax/_style/_add_marginal_ax.py +44 -0
  447. scitex/plt/ax/_style/_add_panel.py +92 -0
  448. scitex/plt/ax/_style/_extend.py +64 -0
  449. scitex/plt/ax/_style/_force_aspect.py +37 -0
  450. scitex/plt/ax/_style/_format_label.py +23 -0
  451. scitex/plt/ax/_style/_hide_spines.py +84 -0
  452. scitex/plt/ax/_style/_map_ticks.py +182 -0
  453. scitex/plt/ax/_style/_rotate_labels.py +215 -0
  454. scitex/plt/ax/_style/_sci_note.py +279 -0
  455. scitex/plt/ax/_style/_set_log_scale.py +299 -0
  456. scitex/plt/ax/_style/_set_meta.py +261 -0
  457. scitex/plt/ax/_style/_set_n_ticks.py +37 -0
  458. scitex/plt/ax/_style/_set_size.py +16 -0
  459. scitex/plt/ax/_style/_set_supxyt.py +116 -0
  460. scitex/plt/ax/_style/_set_ticks.py +276 -0
  461. scitex/plt/ax/_style/_set_xyt.py +121 -0
  462. scitex/plt/ax/_style/_share_axes.py +264 -0
  463. scitex/plt/ax/_style/_shift.py +139 -0
  464. scitex/plt/ax/_style/_show_spines.py +333 -0
  465. scitex/plt/color/_PARAMS.py +70 -0
  466. scitex/plt/color/__init__.py +52 -0
  467. scitex/plt/color/_add_hue_col.py +41 -0
  468. scitex/plt/color/_colors.py +205 -0
  469. scitex/plt/color/_get_colors_from_cmap.py +134 -0
  470. scitex/plt/color/_interpolate.py +29 -0
  471. scitex/plt/color/_vizualize_colors.py +54 -0
  472. scitex/plt/utils/__init__.py +44 -0
  473. scitex/plt/utils/_calc_bacc_from_conf_mat.py +46 -0
  474. scitex/plt/utils/_calc_nice_ticks.py +101 -0
  475. scitex/plt/utils/_close.py +68 -0
  476. scitex/plt/utils/_colorbar.py +96 -0
  477. scitex/plt/utils/_configure_mpl.py +295 -0
  478. scitex/plt/utils/_histogram_utils.py +132 -0
  479. scitex/plt/utils/_im2grid.py +70 -0
  480. scitex/plt/utils/_is_valid_axis.py +78 -0
  481. scitex/plt/utils/_mk_colorbar.py +65 -0
  482. scitex/plt/utils/_mk_patches.py +26 -0
  483. scitex/plt/utils/_scientific_captions.py +638 -0
  484. scitex/plt/utils/_scitex_config.py +223 -0
  485. scitex/reproduce/__init__.py +14 -0
  486. scitex/reproduce/_fix_seeds.py +45 -0
  487. scitex/reproduce/_gen_ID.py +55 -0
  488. scitex/reproduce/_gen_timestamp.py +35 -0
  489. scitex/res/__init__.py +5 -0
  490. scitex/resource/__init__.py +13 -0
  491. scitex/resource/_get_processor_usages.py +281 -0
  492. scitex/resource/_get_specs.py +280 -0
  493. scitex/resource/_log_processor_usages.py +190 -0
  494. scitex/resource/_utils/__init__.py +31 -0
  495. scitex/resource/_utils/_get_env_info.py +481 -0
  496. scitex/resource/limit_ram.py +33 -0
  497. scitex/scholar/__init__.py +24 -0
  498. scitex/scholar/_local_search.py +454 -0
  499. scitex/scholar/_paper.py +244 -0
  500. scitex/scholar/_pdf_downloader.py +325 -0
  501. scitex/scholar/_search.py +393 -0
  502. scitex/scholar/_vector_search.py +370 -0
  503. scitex/scholar/_web_sources.py +457 -0
  504. scitex/stats/__init__.py +31 -0
  505. scitex/stats/_calc_partial_corr.py +17 -0
  506. scitex/stats/_corr_test_multi.py +94 -0
  507. scitex/stats/_corr_test_wrapper.py +115 -0
  508. scitex/stats/_describe_wrapper.py +90 -0
  509. scitex/stats/_multiple_corrections.py +63 -0
  510. scitex/stats/_nan_stats.py +93 -0
  511. scitex/stats/_p2stars.py +116 -0
  512. scitex/stats/_p2stars_wrapper.py +56 -0
  513. scitex/stats/_statistical_tests.py +73 -0
  514. scitex/stats/desc/__init__.py +40 -0
  515. scitex/stats/desc/_describe.py +189 -0
  516. scitex/stats/desc/_nan.py +289 -0
  517. scitex/stats/desc/_real.py +94 -0
  518. scitex/stats/multiple/__init__.py +14 -0
  519. scitex/stats/multiple/_bonferroni_correction.py +72 -0
  520. scitex/stats/multiple/_fdr_correction.py +400 -0
  521. scitex/stats/multiple/_multicompair.py +28 -0
  522. scitex/stats/tests/__corr_test.py +277 -0
  523. scitex/stats/tests/__corr_test_multi.py +343 -0
  524. scitex/stats/tests/__corr_test_single.py +277 -0
  525. scitex/stats/tests/__init__.py +22 -0
  526. scitex/stats/tests/_brunner_munzel_test.py +192 -0
  527. scitex/stats/tests/_nocorrelation_test.py +28 -0
  528. scitex/stats/tests/_smirnov_grubbs.py +98 -0
  529. scitex/str/__init__.py +113 -0
  530. scitex/str/_clean_path.py +75 -0
  531. scitex/str/_color_text.py +52 -0
  532. scitex/str/_decapitalize.py +58 -0
  533. scitex/str/_factor_out_digits.py +281 -0
  534. scitex/str/_format_plot_text.py +498 -0
  535. scitex/str/_grep.py +48 -0
  536. scitex/str/_latex.py +155 -0
  537. scitex/str/_latex_fallback.py +471 -0
  538. scitex/str/_mask_api.py +39 -0
  539. scitex/str/_mask_api_key.py +8 -0
  540. scitex/str/_parse.py +158 -0
  541. scitex/str/_print_block.py +47 -0
  542. scitex/str/_print_debug.py +68 -0
  543. scitex/str/_printc.py +62 -0
  544. scitex/str/_readable_bytes.py +38 -0
  545. scitex/str/_remove_ansi.py +23 -0
  546. scitex/str/_replace.py +134 -0
  547. scitex/str/_search.py +125 -0
  548. scitex/str/_squeeze_space.py +36 -0
  549. scitex/tex/__init__.py +10 -0
  550. scitex/tex/_preview.py +103 -0
  551. scitex/tex/_to_vec.py +116 -0
  552. scitex/torch/__init__.py +18 -0
  553. scitex/torch/_apply_to.py +34 -0
  554. scitex/torch/_nan_funcs.py +77 -0
  555. scitex/types/_ArrayLike.py +44 -0
  556. scitex/types/_ColorLike.py +21 -0
  557. scitex/types/__init__.py +14 -0
  558. scitex/types/_is_listed_X.py +70 -0
  559. scitex/utils/__init__.py +22 -0
  560. scitex/utils/_compress_hdf5.py +116 -0
  561. scitex/utils/_email.py +120 -0
  562. scitex/utils/_grid.py +148 -0
  563. scitex/utils/_notify.py +247 -0
  564. scitex/utils/_search.py +121 -0
  565. scitex/web/__init__.py +38 -0
  566. scitex/web/_search_pubmed.py +438 -0
  567. scitex/web/_summarize_url.py +158 -0
  568. scitex-2.0.0.dist-info/METADATA +307 -0
  569. scitex-2.0.0.dist-info/RECORD +572 -0
  570. scitex-2.0.0.dist-info/WHEEL +6 -0
  571. scitex-2.0.0.dist-info/licenses/LICENSE +7 -0
  572. scitex-2.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,343 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-10-07 22:59:12 (ywatanabe)"
4
+
5
+ from bisect import bisect_right
6
+ import numpy as np
7
+ import scitex
8
+ from scipy import stats
9
+ from typing import Any, Literal, Dict, Callable
10
+ from ...decorators import numpy_fn
11
+ import multiprocessing as mp
12
+ from functools import partial
13
+ import pandas as pd
14
+
15
+ # def _compute_surrogate(args):
16
+ # data1, data2, corr_func, seed = args
17
+ # np.random.seed(seed)
18
+
19
+ # data1 = data1
20
+ # data2 = np.random.permutation(data2)
21
+
22
+ # non_nan_indices = ~(np.isnan(data1) | np.isnan(data2))
23
+ # data1, data2 = data1[non_nan_indices], data2[non_nan_indices]
24
+
25
+
26
+ # return corr_func(data1, data2)[0]
27
+ def _compute_surrogate(args):
28
+ data1, data2, corr_func, seed = args
29
+ np.random.seed(seed)
30
+
31
+ data2 = np.random.permutation(data2)
32
+
33
+ if corr_func == stats.spearmanr:
34
+ return corr_func(data1, data2)[0]
35
+ else:
36
+ non_nan_indices = ~(np.isnan(data1) | np.isnan(data2))
37
+ return corr_func(data1[non_nan_indices], data2[non_nan_indices])[0]
38
+
39
+
40
+ def _corr_test_base(
41
+ data1: np.ndarray,
42
+ data2: np.ndarray,
43
+ only_significant: bool,
44
+ n_perm: int,
45
+ seed: int,
46
+ corr_func: Callable,
47
+ test_name: str,
48
+ n_jobs: int = -1,
49
+ ) -> Dict[str, Any]:
50
+ np.random.seed(seed)
51
+ seeds = np.random.randint(0, n_perm * 100, size=n_perm)
52
+
53
+ if corr_func != stats.spearmanr:
54
+ # Convert to numeric, replacing non-numeric values with NaN
55
+ data1 = pd.to_numeric(data1, errors="coerce")
56
+ data2 = pd.to_numeric(data2, errors="coerce")
57
+
58
+ # Remove NaN values
59
+ mask = ~(np.isnan(data1) | np.isnan(data2))
60
+ data1 = data1[mask]
61
+ data2 = data2[mask]
62
+
63
+ if len(data1) < 2 or len(data2) < 2:
64
+ raise ValueError("Not enough valid numeric data points for correlation.")
65
+
66
+ corr_obs, _ = corr_func(data1, data2)
67
+
68
+ # def _corr_test_base(
69
+ # data1: np.ndarray,
70
+ # data2: np.ndarray,
71
+ # only_significant: bool,
72
+ # n_perm: int,
73
+ # seed: int,
74
+ # corr_func: Callable,
75
+ # test_name: str,
76
+ # n_jobs: int = -1
77
+ # ) -> Dict[str, Any]:
78
+ # # Random seed
79
+ # np.random.seed(seed)
80
+ # seeds = np.random.randint(0, n_perm*100, size=n_perm)
81
+
82
+ # # Convert data to numeric type and handle non-numeric values
83
+ # data1 = np.asarray(data1, dtype=float)
84
+ # data2 = np.asarray(data2, dtype=float)
85
+
86
+ # # Remove NaN values
87
+ # mask = ~(np.isnan(data1) | np.isnan(data2))
88
+ # data1 = data1[mask]
89
+ # data2 = data2[mask]
90
+
91
+ # corr_obs, _ = corr_func(data1, data2)
92
+
93
+ if n_jobs != 1:
94
+ n_jobs = mp.cpu_count() if n_jobs == -1 else n_jobs
95
+ with mp.Pool(n_jobs) as pool:
96
+ surrogate = np.array(
97
+ pool.map(
98
+ _compute_surrogate, [(data1, data2, corr_func, s) for s in seeds]
99
+ )
100
+ )
101
+ else:
102
+ surrogate = np.array(
103
+ [_compute_surrogate((data1, data2, corr_func, s)) for s in seeds]
104
+ )
105
+
106
+ # Add normality test for surrogate distribution
107
+ _, p_normal = stats.normaltest(surrogate)
108
+ if not p_normal > 0.05:
109
+ print(f"Warning: Surrogate distribution may not be normal (p={p_normal:.3f})")
110
+
111
+ rank = bisect_right(sorted(surrogate), corr_obs)
112
+ pvalue = min(rank, n_perm - rank) / n_perm * 2
113
+
114
+ stars = scitex.stats.p2stars(pvalue)
115
+ sample_size = len(data1)
116
+ effect_size = np.abs(corr_obs)
117
+
118
+ result_string = (
119
+ f"{test_name} Corr. = {corr_obs:.3f}; p-value = {pvalue:.3f} "
120
+ f"(n={sample_size:,}, eff={effect_size:.3f}) {stars}"
121
+ )
122
+
123
+ if not only_significant or (only_significant and pvalue < 0.05):
124
+ print(result_string)
125
+
126
+ return {
127
+ "p_value": round(pvalue, 3),
128
+ "stars": stars,
129
+ "effsize": round(effect_size, 3),
130
+ "corr": round(corr_obs, 3),
131
+ "surrogate": surrogate,
132
+ "n": sample_size,
133
+ "test_name": f"Permutation-based {test_name} correlation test",
134
+ "statistic": round(corr_obs, 3),
135
+ "H0": f"There is no {test_name.lower()} correlation between the two variables",
136
+ }
137
+
138
+
139
+ @numpy_fn
140
+ def corr_test_spearman(
141
+ data1: np.ndarray,
142
+ data2: np.ndarray,
143
+ only_significant: bool = False,
144
+ n_perm: int = 1_000,
145
+ seed: int = 42,
146
+ ) -> Dict[str, Any]:
147
+ return _corr_test_base(
148
+ data1, data2, only_significant, n_perm, seed, stats.spearmanr, "Spearman"
149
+ )
150
+
151
+
152
+ @numpy_fn
153
+ def corr_test_pearson(
154
+ data1: np.ndarray,
155
+ data2: np.ndarray,
156
+ only_significant: bool = False,
157
+ n_perm: int = 1_000,
158
+ seed: int = 42,
159
+ ) -> Dict[str, Any]:
160
+ return _corr_test_base(
161
+ data1, data2, only_significant, n_perm, seed, stats.pearsonr, "Pearson"
162
+ )
163
+
164
+
165
+ @numpy_fn
166
+ def corr_test(
167
+ data1: np.ndarray,
168
+ data2: np.ndarray,
169
+ test: Literal["pearson", "spearman"] = "pearson",
170
+ only_significant: bool = False,
171
+ n_perm: int = 1_000,
172
+ seed: int = 42,
173
+ ) -> Dict[str, Any]:
174
+ """
175
+ Performs a correlation test between two datasets using permutation.
176
+
177
+ Parameters
178
+ ----------
179
+ data1 : np.ndarray
180
+ First dataset for correlation.
181
+ data2 : np.ndarray
182
+ Second dataset for correlation.
183
+ test : {"pearson", "spearman"}, optional
184
+ Type of correlation test to perform. Default is "pearson".
185
+ only_significant : bool, optional
186
+ If True, only prints significant results. Default is False.
187
+ n_perm : int, optional
188
+ Number of permutations for the test. Default is 1,000.
189
+ seed : int, optional
190
+ Random seed for reproducibility. Default is 42.
191
+
192
+ Returns
193
+ -------
194
+ Dict[str, Any]
195
+ Contains 'p_value', 'stars', 'effsize', 'corr', 'surrogate', 'n', 'test_name', 'statistic', and 'H0'.
196
+
197
+ Example
198
+ -------
199
+ >>> xx = np.array([3, 4, 4, 5, 7, 8, 10, 12, 13, 15])
200
+ >>> yy = np.array([2, 4, 4, 5, 4, 7, 8, 19, 14, 10])
201
+ >>> results = corr_test(xx, yy, test="pearson")
202
+ """
203
+ if test == "spearman":
204
+ return corr_test_spearman(data1, data2, only_significant, n_perm, seed)
205
+ elif test == "pearson":
206
+ return corr_test_pearson(data1, data2, only_significant, n_perm, seed)
207
+ else:
208
+ raise ValueError("Invalid test type. Choose 'pearson' or 'spearman'.")
209
+
210
+
211
+ if __name__ == "__main__":
212
+ xx = np.array([3, 4, 4, 5, 7, 8, 10, 12, 13, 15])
213
+ yy = np.array([2, 4, 4, 5, 4, 7, 8, 19, 14, 10])
214
+ results_pearson = corr_test(xx, yy)
215
+ results_spearman = corr_test(xx, yy, test="spearman")
216
+ print("Pearson results:", results_pearson)
217
+ print("Spearman results:", results_spearman)
218
+ # #!/usr/bin/env python3
219
+ # # -*- coding: utf-8 -*-
220
+ # # Time-stamp: "2024-10-06 12:02:18 (ywatanabe)"
221
+
222
+ # from bisect import bisect_right
223
+ # import numpy as np
224
+ # import scitex
225
+ # from scipy import stats
226
+ # from typing import Any, Literal, Dict, List
227
+
228
+ # def _corr_test_base(
229
+ # data1: np.ndarray,
230
+ # data2: np.ndarray,
231
+ # only_significant: bool,
232
+ # n_perm: int,
233
+ # seed: int,
234
+ # corr_func: callable,
235
+ # test_name: str
236
+ # ) -> Dict[str, Any]:
237
+ # np.random.seed(seed)
238
+
239
+ # non_nan_indices = ~(np.isnan(data1) | np.isnan(data2))
240
+ # data1, data2 = data1[non_nan_indices], data2[non_nan_indices]
241
+
242
+ # corr_obs, _ = corr_func(data1, data2)
243
+ # surrogate = [
244
+ # corr_func(data1, np.random.permutation(data2))[0]
245
+ # for _ in range(n_perm)
246
+ # ]
247
+
248
+ # rank = bisect_right(sorted(surrogate), corr_obs)
249
+ # pvalue = min(rank, n_perm - rank) / n_perm * 2
250
+
251
+ # stars = scitex.stats.p2stars(pvalue)
252
+ # sample_size = len(data1)
253
+ # effect_size = np.abs(corr_obs)
254
+
255
+ # # result_string = (
256
+ # # f"{test_name} Corr. = {corr_obs:.3f}; p-value = {pvalue:.3f} "
257
+ # # f"(n={sample_size:,}, eff={effect_size:.3f}) {stars}"
258
+ # # )
259
+
260
+ # if not only_significant or (only_significant and pvalue < 0.05):
261
+ # print(result_string)
262
+
263
+ # return {
264
+ # "p_value": round(pvalue, 3),
265
+ # "stars": stars,
266
+ # "effsize": round(effect_size, 3),
267
+ # "corr": round(corr_obs, 3),
268
+ # "surrogate": np.array(surrogate),
269
+ # "n": sample_size,
270
+ # "test_name": f"Permutation-based {test_name} correlation",
271
+ # "statistic": round(corr_obs, 3),
272
+ # "H0": f"There is no {test_name.lower()} correlation between the two variables",
273
+ # }
274
+
275
+ # def corr_test_spearman(
276
+ # data1: np.ndarray,
277
+ # data2: np.ndarray,
278
+ # only_significant: bool = False,
279
+ # n_perm: int = 1_000,
280
+ # seed: int = 42,
281
+ # ) -> Dict[str, Any]:
282
+ # return _corr_test_base(data1, data2, only_significant, n_perm, seed, stats.spearmanr, "Spearman")
283
+
284
+ # def corr_test_pearson(
285
+ # data1: np.ndarray,
286
+ # data2: np.ndarray,
287
+ # only_significant: bool = False,
288
+ # n_perm: int = 1_000,
289
+ # seed: int = 42,
290
+ # ) -> Dict[str, Any]:
291
+ # return _corr_test_base(data1, data2, only_significant, n_perm, seed, stats.pearsonr, "Pearson")
292
+
293
+ # def corr_test(
294
+ # data1: np.ndarray,
295
+ # data2: np.ndarray,
296
+ # test: Literal["pearson", "spearman"] = "pearson",
297
+ # only_significant: bool = False,
298
+ # n_perm: int = 1_000,
299
+ # seed: int = 42,
300
+ # ) -> Dict[str, Any]:
301
+ # """
302
+ # Performs a correlation test between two datasets using permutation.
303
+
304
+ # Parameters
305
+ # ----------
306
+ # data1 : np.ndarray
307
+ # First dataset for correlation.
308
+ # data2 : np.ndarray
309
+ # Second dataset for correlation.
310
+ # test : {"pearson", "spearman"}, optional
311
+ # Type of correlation test to perform. Default is "pearson".
312
+ # only_significant : bool, optional
313
+ # If True, only prints significant results. Default is False.
314
+ # n_perm : int, optional
315
+ # Number of permutations for the test. Default is 1,000.
316
+ # seed : int, optional
317
+ # Random seed for reproducibility. Default is 42.
318
+
319
+ # Returns
320
+ # -------
321
+ # Dict[str, Any]
322
+ # Contains 'p_value', 'stars', 'effsize', 'corr', 'surrogate', 'n', 'test_name', 'statistic', and 'H0'.
323
+
324
+ # Example
325
+ # -------
326
+ # >>> xx = np.array([3, 4, 4, 5, 7, 8, 10, 12, 13, 15])
327
+ # >>> yy = np.array([2, 4, 4, 5, 4, 7, 8, 19, 14, 10])
328
+ # >>> results = corr_test(xx, yy, test="pearson")
329
+ # """
330
+ # if test == "spearman":
331
+ # return corr_test_spearman(data1, data2, only_significant, n_perm, seed)
332
+ # elif test == "pearson":
333
+ # return corr_test_pearson(data1, data2, only_significant, n_perm, seed)
334
+ # else:
335
+ # raise ValueError("Invalid test type. Choose 'spearman' or 'pearson'.")
336
+
337
+ # if __name__ == "__main__":
338
+ # xx = np.array([3, 4, 4, 5, 7, 8, 10, 12, 13, 15])
339
+ # yy = np.array([2, 4, 4, 5, 4, 7, 8, 19, 14, 10])
340
+ # results_spearman = corr_test(xx, yy)
341
+ # results_pearson = corr_test(xx, yy, test="pearson")
342
+ # print("Spearman results:", results_spearman)
343
+ # print("Pearson results:", results_pearson)
@@ -0,0 +1,277 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-10-06 12:04:31 (ywatanabe)"
4
+
5
+ from bisect import bisect_right
6
+ import numpy as np
7
+ import scitex
8
+ from scipy import stats
9
+ from typing import Any, Literal, Dict, Callable
10
+
11
+
12
+ def _corr_test_base(
13
+ data1: np.ndarray,
14
+ data2: np.ndarray,
15
+ only_significant: bool,
16
+ num_permutations: int,
17
+ seed: int,
18
+ corr_func: Callable,
19
+ test_name: str,
20
+ ) -> Dict[str, Any]:
21
+ np.random.seed(seed)
22
+
23
+ non_nan_indices = ~(np.isnan(data1) | np.isnan(data2))
24
+ data1, data2 = data1[non_nan_indices], data2[non_nan_indices]
25
+
26
+ corr_obs, _ = corr_func(data1, data2)
27
+ surrogate = np.array(
28
+ [
29
+ corr_func(data1, np.random.permutation(data2))[0]
30
+ for _ in range(num_permutations)
31
+ ]
32
+ )
33
+
34
+ rank = bisect_right(sorted(surrogate), corr_obs)
35
+ pvalue = min(rank, num_permutations - rank) / num_permutations * 2
36
+
37
+ stars = scitex.stats.p2stars(pvalue)
38
+ sample_size = len(data1)
39
+ effect_size = np.abs(corr_obs)
40
+
41
+ result_string = (
42
+ f"{test_name} Corr. = {corr_obs:.3f}; p-value = {pvalue:.3f} "
43
+ f"(n={sample_size:,}, eff={effect_size:.3f}) {stars}"
44
+ )
45
+
46
+ if not only_significant or (only_significant and pvalue < 0.05):
47
+ print(result_string)
48
+
49
+ return {
50
+ "p_value": round(pvalue, 3),
51
+ "stars": stars,
52
+ "effsize": round(effect_size, 3),
53
+ "corr": round(corr_obs, 3),
54
+ "surrogate": surrogate,
55
+ "n": sample_size,
56
+ "test_name": f"Permutation-based {test_name} correlation",
57
+ "statistic": round(corr_obs, 3),
58
+ "H0": f"There is no {test_name.lower()} correlation between the two variables",
59
+ }
60
+
61
+
62
+ def corr_test_spearman(
63
+ data1: np.ndarray,
64
+ data2: np.ndarray,
65
+ only_significant: bool = False,
66
+ num_permutations: int = 1_000,
67
+ seed: int = 42,
68
+ ) -> Dict[str, Any]:
69
+ return _corr_test_base(
70
+ data1,
71
+ data2,
72
+ only_significant,
73
+ num_permutations,
74
+ seed,
75
+ stats.spearmanr,
76
+ "Spearman",
77
+ )
78
+
79
+
80
+ def corr_test_pearson(
81
+ data1: np.ndarray,
82
+ data2: np.ndarray,
83
+ only_significant: bool = False,
84
+ num_permutations: int = 1_000,
85
+ seed: int = 42,
86
+ ) -> Dict[str, Any]:
87
+ return _corr_test_base(
88
+ data1,
89
+ data2,
90
+ only_significant,
91
+ num_permutations,
92
+ seed,
93
+ stats.pearsonr,
94
+ "Pearson",
95
+ )
96
+
97
+
98
+ def corr_test(
99
+ data1: np.ndarray,
100
+ data2: np.ndarray,
101
+ test: Literal["pearson", "spearman"] = "pearson",
102
+ only_significant: bool = False,
103
+ num_permutations: int = 1_000,
104
+ seed: int = 42,
105
+ ) -> Dict[str, Any]:
106
+ """
107
+ Performs a correlation test between two datasets using permutation.
108
+
109
+ Parameters
110
+ ----------
111
+ data1 : np.ndarray
112
+ First dataset for correlation.
113
+ data2 : np.ndarray
114
+ Second dataset for correlation.
115
+ test : {"pearson", "spearman"}, optional
116
+ Type of correlation test to perform. Default is "pearson".
117
+ only_significant : bool, optional
118
+ If True, only prints significant results. Default is False.
119
+ num_permutations : int, optional
120
+ Number of permutations for the test. Default is 1,000.
121
+ seed : int, optional
122
+ Random seed for reproducibility. Default is 42.
123
+
124
+ Returns
125
+ -------
126
+ Dict[str, Any]
127
+ Contains 'p_value', 'stars', 'effsize', 'corr', 'surrogate', 'n', 'test_name', 'statistic', and 'H0'.
128
+
129
+ Example
130
+ -------
131
+ >>> xx = np.array([3, 4, 4, 5, 7, 8, 10, 12, 13, 15])
132
+ >>> yy = np.array([2, 4, 4, 5, 4, 7, 8, 19, 14, 10])
133
+ >>> results = corr_test(xx, yy, test="pearson")
134
+ """
135
+ if test == "spearman":
136
+ return corr_test_spearman(
137
+ data1, data2, only_significant, num_permutations, seed
138
+ )
139
+ elif test == "pearson":
140
+ return corr_test_pearson(data1, data2, only_significant, num_permutations, seed)
141
+ else:
142
+ raise ValueError("Invalid test type. Choose 'pearson' or 'spearman'.")
143
+
144
+
145
+ if __name__ == "__main__":
146
+ xx = np.array([3, 4, 4, 5, 7, 8, 10, 12, 13, 15])
147
+ yy = np.array([2, 4, 4, 5, 4, 7, 8, 19, 14, 10])
148
+ results_pearson = corr_test(xx, yy)
149
+ results_spearman = corr_test(xx, yy, test="spearman")
150
+ print("Pearson results:", results_pearson)
151
+ print("Spearman results:", results_spearman)
152
+ # #!/usr/bin/env python3
153
+ # # -*- coding: utf-8 -*-
154
+ # # Time-stamp: "2024-10-06 12:02:18 (ywatanabe)"
155
+
156
+ # from bisect import bisect_right
157
+ # import numpy as np
158
+ # import scitex
159
+ # from scipy import stats
160
+ # from typing import Any, Literal, Dict, List
161
+
162
+ # def _corr_test_base(
163
+ # data1: np.ndarray,
164
+ # data2: np.ndarray,
165
+ # only_significant: bool,
166
+ # num_permutations: int,
167
+ # seed: int,
168
+ # corr_func: callable,
169
+ # test_name: str
170
+ # ) -> Dict[str, Any]:
171
+ # np.random.seed(seed)
172
+
173
+ # non_nan_indices = ~(np.isnan(data1) | np.isnan(data2))
174
+ # data1, data2 = data1[non_nan_indices], data2[non_nan_indices]
175
+
176
+ # corr_obs, _ = corr_func(data1, data2)
177
+ # surrogate = [
178
+ # corr_func(data1, np.random.permutation(data2))[0]
179
+ # for _ in range(num_permutations)
180
+ # ]
181
+
182
+ # rank = bisect_right(sorted(surrogate), corr_obs)
183
+ # pvalue = min(rank, num_permutations - rank) / num_permutations * 2
184
+
185
+ # stars = scitex.stats.p2stars(pvalue)
186
+ # sample_size = len(data1)
187
+ # effect_size = np.abs(corr_obs)
188
+
189
+ # # result_string = (
190
+ # # f"{test_name} Corr. = {corr_obs:.3f}; p-value = {pvalue:.3f} "
191
+ # # f"(n={sample_size:,}, eff={effect_size:.3f}) {stars}"
192
+ # # )
193
+
194
+ # if not only_significant or (only_significant and pvalue < 0.05):
195
+ # print(result_string)
196
+
197
+ # return {
198
+ # "p_value": round(pvalue, 3),
199
+ # "stars": stars,
200
+ # "effsize": round(effect_size, 3),
201
+ # "corr": round(corr_obs, 3),
202
+ # "surrogate": np.array(surrogate),
203
+ # "n": sample_size,
204
+ # "test_name": f"Permutation-based {test_name} correlation",
205
+ # "statistic": round(corr_obs, 3),
206
+ # "H0": f"There is no {test_name.lower()} correlation between the two variables",
207
+ # }
208
+
209
+ # def corr_test_spearman(
210
+ # data1: np.ndarray,
211
+ # data2: np.ndarray,
212
+ # only_significant: bool = False,
213
+ # num_permutations: int = 1_000,
214
+ # seed: int = 42,
215
+ # ) -> Dict[str, Any]:
216
+ # return _corr_test_base(data1, data2, only_significant, num_permutations, seed, stats.spearmanr, "Spearman")
217
+
218
+ # def corr_test_pearson(
219
+ # data1: np.ndarray,
220
+ # data2: np.ndarray,
221
+ # only_significant: bool = False,
222
+ # num_permutations: int = 1_000,
223
+ # seed: int = 42,
224
+ # ) -> Dict[str, Any]:
225
+ # return _corr_test_base(data1, data2, only_significant, num_permutations, seed, stats.pearsonr, "Pearson")
226
+
227
+ # def corr_test(
228
+ # data1: np.ndarray,
229
+ # data2: np.ndarray,
230
+ # test: Literal["pearson", "spearman"] = "pearson",
231
+ # only_significant: bool = False,
232
+ # num_permutations: int = 1_000,
233
+ # seed: int = 42,
234
+ # ) -> Dict[str, Any]:
235
+ # """
236
+ # Performs a correlation test between two datasets using permutation.
237
+
238
+ # Parameters
239
+ # ----------
240
+ # data1 : np.ndarray
241
+ # First dataset for correlation.
242
+ # data2 : np.ndarray
243
+ # Second dataset for correlation.
244
+ # test : {"pearson", "spearman"}, optional
245
+ # Type of correlation test to perform. Default is "pearson".
246
+ # only_significant : bool, optional
247
+ # If True, only prints significant results. Default is False.
248
+ # num_permutations : int, optional
249
+ # Number of permutations for the test. Default is 1,000.
250
+ # seed : int, optional
251
+ # Random seed for reproducibility. Default is 42.
252
+
253
+ # Returns
254
+ # -------
255
+ # Dict[str, Any]
256
+ # Contains 'p_value', 'stars', 'effsize', 'corr', 'surrogate', 'n', 'test_name', 'statistic', and 'H0'.
257
+
258
+ # Example
259
+ # -------
260
+ # >>> xx = np.array([3, 4, 4, 5, 7, 8, 10, 12, 13, 15])
261
+ # >>> yy = np.array([2, 4, 4, 5, 4, 7, 8, 19, 14, 10])
262
+ # >>> results = corr_test(xx, yy, test="pearson")
263
+ # """
264
+ # if test == "spearman":
265
+ # return corr_test_spearman(data1, data2, only_significant, num_permutations, seed)
266
+ # elif test == "pearson":
267
+ # return corr_test_pearson(data1, data2, only_significant, num_permutations, seed)
268
+ # else:
269
+ # raise ValueError("Invalid test type. Choose 'spearman' or 'pearson'.")
270
+
271
+ # if __name__ == "__main__":
272
+ # xx = np.array([3, 4, 4, 5, 7, 8, 10, 12, 13, 15])
273
+ # yy = np.array([2, 4, 4, 5, 4, 7, 8, 19, 14, 10])
274
+ # results_spearman = corr_test(xx, yy)
275
+ # results_pearson = corr_test(xx, yy, test="pearson")
276
+ # print("Spearman results:", results_spearman)
277
+ # print("Pearson results:", results_pearson)
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env python3
2
+ """Scitex tests module."""
3
+
4
+ from .__corr_test import corr_test, corr_test_pearson, corr_test_spearman
5
+ from .__corr_test_multi import corr_test as corr_test_multi
6
+ from .__corr_test_single import corr_test as corr_test_single, _corr_test_base
7
+ from ._brunner_munzel_test import brunner_munzel_test
8
+ from ._nocorrelation_test import calc_partial_corrcoef, nocorrelation_test
9
+ from ._smirnov_grubbs import smirnov_grubbs
10
+
11
+ __all__ = [
12
+ "brunner_munzel_test",
13
+ "calc_partial_corrcoef",
14
+ "corr_test",
15
+ "corr_test_multi",
16
+ "corr_test_single",
17
+ "corr_test_pearson",
18
+ "corr_test_spearman",
19
+ "_corr_test_base",
20
+ "nocorrelation_test",
21
+ "smirnov_grubbs",
22
+ ]