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,192 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-10-07 22:30:46 (ywatanabe)"
4
+ # File: /home/ywatanabe/proj/_scitex_repo_openhands/src/scitex/stats/_brunner_munzel_test.py
5
+
6
+ """
7
+ 1. Functionality:
8
+ - Calculates Brunner-Munzel test scores for two independent samples
9
+ 2. Input:
10
+ - Two arrays of numeric data values
11
+ 3. Output:
12
+ - Dictionary containing test results (w_statistic, p_value, sample sizes, degrees of freedom, effect size, test name, and null hypothesis)
13
+ 4. Prerequisites:
14
+ - NumPy, SciPy
15
+ """
16
+
17
+ """Imports"""
18
+ import numpy as np
19
+ from scipy import stats
20
+ import pandas as pd
21
+ import xarray as xr
22
+ import torch
23
+ from typing import (
24
+ List,
25
+ Tuple,
26
+ Dict,
27
+ Any,
28
+ Union,
29
+ Sequence,
30
+ Literal,
31
+ Iterable,
32
+ )
33
+ from ...types import ArrayLike
34
+ from ...decorators import numpy_fn
35
+
36
+
37
+ @numpy_fn
38
+ def brunner_munzel_test(
39
+ x1: ArrayLike,
40
+ x2: ArrayLike,
41
+ distribution: str = "t",
42
+ round_factor: int = 3,
43
+ ) -> Dict[str, Union[float, int, str]]:
44
+ """
45
+ Calculate Brunner-Munzel test scores.
46
+
47
+ Parameters
48
+ ----------
49
+ x1 : ArrayLike
50
+ Numeric data values from sample 1.
51
+ x2 : ArrayLike
52
+ Numeric data values from sample 2.
53
+ distribution : str, optional
54
+ Distribution to use for the test. Can be "t" or "normal" (default is "t").
55
+ round_factor : int, optional
56
+ Number of decimal places to round the results (default is 3).
57
+
58
+ Returns
59
+ -------
60
+ Dict[str, Union[float, int, str]]
61
+ Dictionary containing test results including w_statistic, p_value, sample sizes, degrees of freedom, effect size, test name, and null hypothesis.
62
+
63
+ Example
64
+ -------
65
+ >>> np.random.seed(42)
66
+ >>> xx = np.random.rand(100)
67
+ >>> yy = np.random.rand(100) + 0.1
68
+ >>> result = brunner_munzel_test(xx, yy)
69
+ >>> print(result)
70
+ {'w_statistic': -2.089, 'p_value': 0.038, 'n1': 100, 'n2': 100, 'dof': 197.0, 'effsize': 0.438, 'test_name': 'Brunner-Munzel test', 'H0': 'The probability that a randomly selected value from one population is greater than a randomly selected value from the other population is equal to 0.5'}
71
+ """
72
+ if distribution not in ["t", "normal"]:
73
+ raise ValueError("Distribution must be either 't' or 'normal'")
74
+
75
+ x1, x2 = np.asarray(x1).astype(float), np.asarray(x2).astype(float)
76
+ x1, x2 = x1[~np.isnan(x1)], x2[~np.isnan(x2)]
77
+ n1, n2 = len(x1), len(x2)
78
+
79
+ if n1 == 0 or n2 == 0:
80
+ raise ValueError("Input arrays must not be empty after removing NaN values")
81
+
82
+ R = stats.rankdata(np.concatenate([x1, x2]))
83
+ R1, R2 = R[:n1], R[n1:]
84
+ r1_mean, r2_mean = np.mean(R1), np.mean(R2)
85
+ Ri1, Ri2 = stats.rankdata(x1), stats.rankdata(x2)
86
+ var1 = np.var(R1 - Ri1, ddof=1)
87
+ var2 = np.var(R2 - Ri2, ddof=1)
88
+
89
+ w_statistic = ((n1 * n2) * (r2_mean - r1_mean)) / (
90
+ (n1 + n2) * np.sqrt(n1 * var1 + n2 * var2)
91
+ )
92
+
93
+ if distribution == "t":
94
+ dof = (n1 * var1 + n2 * var2) ** 2 / (
95
+ (n1 * var1) ** 2 / (n1 - 1) + (n2 * var2) ** 2 / (n2 - 1)
96
+ )
97
+ c = stats.t.cdf(abs(w_statistic), dof) if not np.isinf(w_statistic) else 0.0
98
+ else:
99
+ dof = np.nan
100
+ c = stats.norm.cdf(abs(w_statistic)) if not np.isinf(w_statistic) else 0.0
101
+
102
+ p_value = min(c, 1.0 - c) * 2.0
103
+ effsize = (r2_mean - r1_mean) / (n1 + n2) + 0.5
104
+
105
+ return {
106
+ "w_statistic": round(w_statistic, round_factor),
107
+ "p_value": round(p_value, round_factor),
108
+ "n1": n1,
109
+ "n2": n2,
110
+ "dof": round(dof, round_factor),
111
+ "effsize": round(effsize, round_factor),
112
+ "test_name": "Brunner-Munzel test",
113
+ "H0": "The probability that a randomly selected value from one population is greater than a randomly selected value from the other population is equal to 0.5",
114
+ }
115
+
116
+
117
+ # #!/usr/bin/env python3
118
+
119
+ # import numpy as np
120
+ # from scipy import stats
121
+
122
+
123
+ # def brunner_munzel_test(x1, x2, distribution="t", round_factor=3):
124
+ # """Calculate Brunner-Munzel-test scores.
125
+ # Parameters:
126
+ # x1, x2: array_like
127
+ # Numeric data values from sample 1, 2.
128
+ # Returns:
129
+ # w:
130
+ # Calculated test statistic.
131
+ # p_value:
132
+ # Two-tailed p-value of test.
133
+ # dof:
134
+ # Degree of freedom.
135
+ # p:
136
+ # "P(x1 < x2) + 0.5 P(x1 = x2)" estimates.
137
+ # References:
138
+ # * https://oku.edu.mie-u.ac.jp/~okumura/stat/brunner-munzel.html
139
+ # Example:
140
+ # When sample number N is small, distribution='t' is recommended.
141
+ # d1 = np.array([1,2,1,1,1,1,1,1,1,1,2,4,1,1])
142
+ # d2 = np.array([3,3,4,3,1,2,3,1,1,5,4])
143
+ # print(bmtest(d1, d2, distribution='t'))
144
+ # print(bmtest(d1, d2, distribution='normal'))
145
+ # When sample number N is large, distribution='normal' is recommended; however,
146
+ # 't' and 'normal' yield almost the same result.
147
+ # d1 = np.random.rand(1000)*100
148
+ # d2 = np.random.rand(10000)*110
149
+ # print(bmtest(d1, d2, distribution='t'))
150
+ # print(bmtest(d1, d2, distribution='normal'))
151
+ # """
152
+
153
+ # x1, x2 = np.hstack(x1), np.hstack(x2)
154
+ # x1, x2 = x1[~np.isnan(x1)], x2[~np.isnan(x2)]
155
+ # n1, n2 = len(x1), len(x2)
156
+ # R = stats.rankdata(list(x1) + list(x2))
157
+ # R1, R2 = R[:n1], R[n1:]
158
+ # r1_mean, r2_mean = np.mean(R1), np.mean(R2)
159
+ # Ri1, Ri2 = stats.rankdata(x1), stats.rankdata(x2)
160
+ # var1 = np.var([r - ri for r, ri in zip(R1, Ri1)], ddof=1)
161
+ # var2 = np.var([r - ri for r, ri in zip(R2, Ri2)], ddof=1)
162
+ # w_statistic = ((n1 * n2) * (r2_mean - r1_mean)) / (
163
+ # (n1 + n2) * np.sqrt(n1 * var1 + n2 * var2)
164
+ # )
165
+ # if distribution == "t":
166
+ # dof = (n1 * var1 + n2 * var2) ** 2 / (
167
+ # (n1 * var1) ** 2 / (n1 - 1) + (n2 * var2) ** 2 / (n2 - 1)
168
+ # )
169
+ # c = (
170
+ # stats.t.cdf(abs(w_statistic), dof)
171
+ # if not np.isinf(w_statistic)
172
+ # else 0.0
173
+ # )
174
+ # if distribution == "normal":
175
+ # dof = np.nan
176
+ # c = (
177
+ # stats.norm.cdf(abs(w_statistic))
178
+ # if not np.isinf(w_statistic)
179
+ # else 0.0
180
+ # )
181
+ # p_value = min(c, 1.0 - c) * 2.0
182
+ # effsize = (r2_mean - r1_mean) / (n1 + n2) + 0.5
183
+ # return dict(
184
+ # w_statistic=round(w_statistic, round_factor),
185
+ # p_value=round(p_value, round_factor),
186
+ # n1=n1,
187
+ # n2=n2,
188
+ # dof=round(dof, round_factor),
189
+ # effsize=round(effsize, round_factor),
190
+ # test_name="Brunner-Munzel test",
191
+ # H0="The probability that a randomly selected value from one population is greater than a randomly selected value from the other population is equal to 0.5",
192
+ # )
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env python3
2
+
3
+ import numpy as np
4
+ from scipy import stats
5
+
6
+
7
+ def calc_partial_corrcoef(x, y, z):
8
+ """remove the influence of the variable z from the correlation between x and y."""
9
+ r_xy = np.corrcoef(x, y)
10
+ r_xz = np.corrcoef(x, z)
11
+ r_yz = np.corrcoef(y, z)
12
+ r_xy_z = (r_xy - r_xz * r_yz) / (1 - r_xz**2) * (1 - r_yz**2)
13
+ return r_xy_z
14
+
15
+
16
+ def nocorrelation_test(x, y, z=None, alpha=0.05):
17
+ if z is None:
18
+ r = np.corrcoef(x, y)[1, 0]
19
+ if z is not None:
20
+ r = calc_partial_corrcoef(x, y, z)[1, 0]
21
+
22
+ n = len(x)
23
+ df = n - 2
24
+ # t = np.abs(np.array(r)) * np.sqrt((df) / (1 - np.array(r)**2))
25
+ t = np.abs(r) * np.sqrt((df) / (1 - r**2))
26
+ # t_alpha = scipy.stats.t.ppf(1 - alpha / 2, df)
27
+ p_value = 2 * (1 - stats.t.cdf(t, df))
28
+ return r, t, p_value
@@ -0,0 +1,98 @@
1
+ import numpy as np
2
+ from scipy import stats
3
+
4
+
5
+ def smirnov_grubbs(data_arr, alpha=0.05):
6
+ """
7
+ Find outliers based on Smirnov-Grubbs test.
8
+
9
+ Arguments:
10
+
11
+ Returns | indices of outliers
12
+ """
13
+ data_1D_sorted = sorted(np.array(data_arr).reshape(-1))
14
+ in_data, out_data = list(data_1D_sorted), []
15
+
16
+ # while True:
17
+ n = len(in_data)
18
+ for i_data in range(n):
19
+ n = len(in_data)
20
+ t = stats.t.isf(q=(alpha / n) / 2, df=n - 2)
21
+ tau = (n - 1) * t / np.sqrt(n * (n - 2) + n * t * t)
22
+ i_min, i_max = np.argmin(in_data), np.argmax(in_data)
23
+ mu, std = np.mean(in_data), np.std(in_data, ddof=1)
24
+
25
+ i_far = (
26
+ i_max
27
+ if np.abs(in_data[i_max] - mu) > np.abs(in_data[i_min] - mu)
28
+ else i_min
29
+ )
30
+
31
+ tau_far = np.abs((in_data[i_far] - mu) / std)
32
+
33
+ if tau_far < tau:
34
+ break
35
+
36
+ out_data.append(in_data.pop(i_far))
37
+
38
+ if len(out_data) == 0:
39
+ return None
40
+
41
+ else:
42
+ out_data_uq = np.unique(out_data)
43
+ indi_outliers = np.hstack(
44
+ [
45
+ np.vstack(np.where(data_arr == out_data_uq[i_out])).T
46
+ for i_out in range(len(out_data_uq))
47
+ ]
48
+ ).squeeze()
49
+
50
+ if indi_outliers.ndim == 0:
51
+ indi_outliers = indi_outliers[np.newaxis]
52
+ return indi_outliers
53
+
54
+
55
+ # def smirnov_grubbs(data_arr, alpha=0.05):
56
+ # """
57
+ # Find outliers based on Smirnov-Grubbs test.
58
+
59
+ # Arguments:
60
+
61
+ # Returns | indices of outliers
62
+ # """
63
+ # data_1D_sorted = sorted(np.array(data_arr).reshape(-1))
64
+ # in_data, out_data = list(data_1D_sorted), []
65
+
66
+ # while True:
67
+ # n = len(in_data)
68
+ # t = stats.t.isf(q=(alpha / n) / 2, df=n - 2)
69
+ # tau = (n - 1) * t / np.sqrt(n * (n - 2) + n * t * t)
70
+ # i_min, i_max = np.argmin(in_data), np.argmax(in_data)
71
+ # mu, std = np.mean(in_data), np.std(in_data, ddof=1)
72
+
73
+ # i_far = (
74
+ # i_max
75
+ # if np.abs(in_data[i_max] - mu) > np.abs(in_data[i_min] - mu)
76
+ # else i_min
77
+ # )
78
+
79
+ # tau_far = np.abs((in_data[i_far] - mu) / std)
80
+
81
+ # if tau_far < tau:
82
+ # break
83
+
84
+ # out_data.append(in_data.pop(i_far))
85
+
86
+ # if len(out_data) == 0:
87
+ # return None
88
+
89
+ # else:
90
+ # out_data_uq = np.unique(out_data)
91
+ # indi_outliers = np.vstack(
92
+ # [
93
+ # np.vstack(np.where(data_arr == out_data_uq[i_out])).T
94
+ # for i_out in range(len(out_data_uq))
95
+ # ]
96
+ # )
97
+
98
+ # return np.array(indi_outliers).squeeze()
scitex/str/__init__.py ADDED
@@ -0,0 +1,113 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-06-13 22:55:11 (ywatanabe)"
4
+ # File: /ssh:sp:/home/ywatanabe/proj/SciTeX-Code/src/scitex/str/__init__.py
5
+ # ----------------------------------------
6
+ import os
7
+ __FILE__ = (
8
+ "./src/scitex/str/__init__.py"
9
+ )
10
+ __DIR__ = os.path.dirname(__FILE__)
11
+ # ----------------------------------------
12
+ """Scitex str module."""
13
+
14
+ from ._clean_path import clean_path
15
+ from ._color_text import color_text, ct
16
+ from ._decapitalize import decapitalize
17
+ from ._factor_out_digits import (
18
+ auto_factor_axis,
19
+ factor_out_digits,
20
+ smart_tick_formatter,
21
+ )
22
+ from ._format_plot_text import (
23
+ axis_label,
24
+ check_unit_consistency,
25
+ format_axis_label,
26
+ format_plot_text,
27
+ format_title,
28
+ scientific_text,
29
+ title,
30
+ )
31
+ from ._grep import grep
32
+ from ._latex import (
33
+ add_hat_in_latex_style,
34
+ hat_latex_style,
35
+ latex_style,
36
+ safe_add_hat_in_latex_style,
37
+ safe_to_latex_style,
38
+ to_latex_style,
39
+ )
40
+ from ._latex_fallback import (
41
+ LaTeXFallbackError,
42
+ check_latex_capability,
43
+ disable_latex_fallback,
44
+ enable_latex_fallback,
45
+ get_fallback_mode,
46
+ get_latex_status,
47
+ latex_fallback_decorator,
48
+ latex_to_mathtext,
49
+ latex_to_unicode,
50
+ logger,
51
+ reset_latex_cache,
52
+ safe_latex_render,
53
+ set_fallback_mode,
54
+ )
55
+ from ._mask_api import mask_api
56
+ from ._mask_api_key import mask_api
57
+ from ._parse import parse
58
+ from ._print_block import printc
59
+ from ._print_debug import print_debug
60
+ from ._printc import printc
61
+ from ._readable_bytes import readable_bytes
62
+ from ._remove_ansi import remove_ansi
63
+ from ._replace import replace
64
+ from ._search import search
65
+ from ._squeeze_space import squeeze_spaces
66
+
67
+ __all__ = [
68
+ "LaTeXFallbackError",
69
+ "add_hat_in_latex_style",
70
+ "auto_factor_axis",
71
+ "axis_label",
72
+ "check_latex_capability",
73
+ "check_unit_consistency",
74
+ "clean_path",
75
+ "color_text",
76
+ "ct",
77
+ "decapitalize",
78
+ "disable_latex_fallback",
79
+ "enable_latex_fallback",
80
+ "factor_out_digits",
81
+ "format_axis_label",
82
+ "format_plot_text",
83
+ "format_title",
84
+ "get_fallback_mode",
85
+ "get_latex_status",
86
+ "grep",
87
+ "hat_latex_style",
88
+ "latex_fallback_decorator",
89
+ "latex_style",
90
+ "latex_to_mathtext",
91
+ "latex_to_unicode",
92
+ "logger",
93
+ "mask_api",
94
+ "parse",
95
+ "print_debug",
96
+ "printc",
97
+ "readable_bytes",
98
+ "remove_ansi",
99
+ "replace",
100
+ "reset_latex_cache",
101
+ "safe_add_hat_in_latex_style",
102
+ "safe_latex_render",
103
+ "safe_to_latex_style",
104
+ "scientific_text",
105
+ "search",
106
+ "set_fallback_mode",
107
+ "smart_tick_formatter",
108
+ "squeeze_spaces",
109
+ "title",
110
+ "to_latex_style",
111
+ ]
112
+
113
+ # EOF
@@ -0,0 +1,75 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-02-14 22:07:13 (ywatanabe)"
4
+ # File: ./src/scitex/str/_clean_path.py
5
+
6
+ THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/str/_clean_path.py"
7
+ #!/usr/bin/env python3
8
+ # -*- coding: utf-8 -*-
9
+ # Time-stamp: "2025-02-14 22:07:13 (ywatanabe)"
10
+ # File: ./scitex_repo/src/scitex/str/_clean_path.py
11
+
12
+ THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/str/_clean_path.py"
13
+
14
+ """
15
+ Functionality:
16
+ - Cleans and normalizes file system paths
17
+ Input:
18
+ - File path string containing redundant separators or current directory references
19
+ Output:
20
+ - Cleaned path string with normalized separators
21
+ Prerequisites:
22
+ - Python's os.path module
23
+ """
24
+
25
+ """Imports"""
26
+ import os
27
+
28
+ """Functions & Classes"""
29
+
30
+
31
+ def clean_path(path_string: str) -> str:
32
+ """Cleans and normalizes a file system path string.
33
+
34
+ Example
35
+ -------
36
+ >>> clean('/home/user/./folder/../file.txt')
37
+ '/home/user/file.txt'
38
+ >>> clean('path/./to//file.txt')
39
+ 'path/to/file.txt'
40
+
41
+ Parameters
42
+ ----------
43
+ path_string : str
44
+ File path to clean
45
+
46
+ Returns
47
+ -------
48
+ str
49
+ Normalized path string
50
+ """
51
+ try:
52
+ is_directory = path_string.endswith("/")
53
+
54
+ if not isinstance(path_string, str):
55
+ raise TypeError("Input must be a string")
56
+
57
+ if path_string.startswith('f"'):
58
+ path_string = path_string.replace('f"', "")[:-1]
59
+
60
+ # Normalize path separators
61
+ cleaned_path = os.path.normpath(path_string)
62
+
63
+ # Remove redundant separators
64
+ cleaned_path = os.path.normpath(cleaned_path)
65
+
66
+ if is_directory and (not cleaned_path.endswith("/")):
67
+ cleaned_path += "/"
68
+
69
+ return cleaned_path
70
+
71
+ except Exception as error:
72
+ raise ValueError(f"Path cleaning failed: {str(error)}")
73
+
74
+
75
+ # EOF
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-02 04:00:36 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/gen/_color_text.py
5
+
6
+
7
+ def color_text(text, c="green"):
8
+ """Apply ANSI color codes to text.
9
+
10
+ Parameters
11
+ ----------
12
+ text : str
13
+ The text to be colored.
14
+ c : str, optional
15
+ The color to apply. Available colors are 'red', 'green', 'yellow',
16
+ 'blue', 'magenta', 'cyan', 'white', and 'grey' (default is "green").
17
+
18
+ Returns
19
+ -------
20
+ str
21
+ The input text with ANSI color codes applied.
22
+
23
+ Example
24
+ -------
25
+ >>> print(color_text("Hello, World!", "blue"))
26
+ # This will print "Hello, World!" in blue text
27
+ """
28
+ ANSI_COLORS = {
29
+ "red": "\033[91m",
30
+ "green": "\033[92m",
31
+ "yellow": "\033[93m",
32
+ "blue": "\033[94m",
33
+ "magenta": "\033[95m",
34
+ "cyan": "\033[96m",
35
+ "white": "\033[97m",
36
+ "grey": "\033[90m",
37
+ "gray": "\033[90m",
38
+ "reset": "\033[0m",
39
+ }
40
+ ANSI_COLORS["tra"] = ANSI_COLORS["white"]
41
+ ANSI_COLORS["val"] = ANSI_COLORS["green"]
42
+ ANSI_COLORS["tes"] = ANSI_COLORS["red"]
43
+
44
+ start_code = ANSI_COLORS.get(c, ANSI_COLORS["reset"])
45
+ end_code = ANSI_COLORS["reset"]
46
+ return f"{start_code}{text}{end_code}"
47
+
48
+
49
+ ct = color_text
50
+
51
+
52
+ # EOF
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-02 11:25:00 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/str/_decapitalize.py
5
+
6
+ """
7
+ Functionality:
8
+ - Converts first character of string to lowercase
9
+ Input:
10
+ - String to be processed
11
+ Output:
12
+ - Modified string with lowercase first character
13
+ Prerequisites:
14
+ - None
15
+ """
16
+
17
+
18
+ def decapitalize(input_string: str) -> str:
19
+ """Converts first character of string to lowercase.
20
+
21
+ Example
22
+ -------
23
+ >>> decapitalize("Hello")
24
+ 'hello'
25
+ >>> decapitalize("WORLD")
26
+ 'wORLD'
27
+ >>> decapitalize("")
28
+ ''
29
+
30
+ Parameters
31
+ ----------
32
+ input_string : str
33
+ String to be processed
34
+
35
+ Returns
36
+ -------
37
+ str
38
+ Modified string with first character in lowercase
39
+
40
+ Raises
41
+ ------
42
+ TypeError
43
+ If input is not a string
44
+ """
45
+ try:
46
+ if not isinstance(input_string, str):
47
+ raise TypeError("Input must be a string")
48
+
49
+ if not input_string:
50
+ return input_string
51
+
52
+ return input_string[0].lower() + input_string[1:]
53
+
54
+ except Exception as error:
55
+ raise ValueError(f"String processing failed: {str(error)}")
56
+
57
+
58
+ # EOF