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
scitex/gen/_symlink.py ADDED
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-02 13:29:31 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/gen/_symlink.py
5
+
6
+ import os
7
+ from ..str._color_text import color_text
8
+
9
+
10
+ def symlink(tgt, src, force=False):
11
+ """Create a symbolic link.
12
+
13
+ This function creates a symbolic link from the target to the source.
14
+ If the force parameter is True, it will remove any existing file at
15
+ the source path before creating the symlink.
16
+
17
+ Parameters
18
+ ----------
19
+ tgt : str
20
+ The target path (the file or directory to be linked to).
21
+ src : str
22
+ The source path (where the symbolic link will be created).
23
+ force : bool, optional
24
+ If True, remove the existing file at the src path before creating
25
+ the symlink (default is False).
26
+
27
+ Returns
28
+ -------
29
+ None
30
+
31
+ Raises
32
+ ------
33
+ OSError
34
+ If the symlink creation fails.
35
+
36
+ Example
37
+ -------
38
+ >>> symlink('/path/to/target', '/path/to/link')
39
+ >>> symlink('/path/to/target', '/path/to/existing_file', force=True)
40
+ """
41
+ if force:
42
+ try:
43
+ os.remove(src)
44
+ except FileNotFoundError:
45
+ pass
46
+
47
+ # Calculate the relative path from src to tgt
48
+ src_dir = os.path.dirname(src)
49
+ relative_tgt = os.path.relpath(tgt, src_dir)
50
+
51
+ os.symlink(relative_tgt, src)
52
+ print(color_text(f"\nSymlink was created: {src} -> {relative_tgt}\n", c="yellow"))
53
+
54
+
55
+ # EOF
scitex/gen/_symlog.py ADDED
@@ -0,0 +1,27 @@
1
+ #!./env/bin/python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-07-06 07:16:38 (ywatanabe)"
4
+ # ./src/scitex/gen/_symlog.py
5
+
6
+ import numpy as np
7
+
8
+
9
+ def symlog(x, linthresh=1.0):
10
+ """
11
+ Apply a symmetric log transformation to the input data.
12
+
13
+ Parameters
14
+ ----------
15
+ x : array-like
16
+ Input data to be transformed.
17
+ linthresh : float, optional
18
+ Range within which the transformation is linear. Defaults to 1.0.
19
+
20
+ Returns
21
+ -------
22
+ array-like
23
+ Symmetrically transformed data.
24
+ """
25
+ sign_x = np.sign(x)
26
+ abs_x = np.abs(x)
27
+ return sign_x * (np.log1p(abs_x / linthresh))
scitex/gen/_tee.py ADDED
@@ -0,0 +1,238 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-02-15 00:02:15 (ywatanabe)"
4
+ # File: ./src/scitex/gen/_tee.py
5
+
6
+ THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/gen/_tee.py"
7
+
8
+ """
9
+ Functionality:
10
+ * Redirects and logs standard output and error streams
11
+ * Filters progress bar outputs from stderr logging
12
+ * Maintains original stdout/stderr functionality while logging
13
+ Input:
14
+ * System stdout/stderr streams
15
+ * Output file paths for logging
16
+ Output:
17
+ * Wrapped stdout/stderr objects with logging capability
18
+ * Log files containing stdout and stderr outputs
19
+ Prerequisites:
20
+ * Python 3.6+
21
+ * scitex package for path handling and colored printing
22
+ """
23
+
24
+ """Imports"""
25
+ import os as _os
26
+ import re
27
+ import sys
28
+ from typing import Any, List, TextIO
29
+
30
+ from ..str._clean_path import clean_path
31
+ from ..path import split
32
+ from ..str._printc import printc
33
+
34
+ """Functions & Classes"""
35
+ # class Tee(object):
36
+ # """Duplicates output streams to both console and log files.
37
+
38
+ # Example
39
+ # -------
40
+ # >>> import sys
41
+ # >>> sys.stdout = Tee(sys.stdout, "stdout.txt")
42
+ # >>> sys.stderr = Tee(sys.stderr, "stderr.txt")
43
+ # >>> print("Hello") # Outputs to both console and stdout.txt
44
+ # >>> raise Exception("Error") # Outputs to both console and stderr.txt
45
+ # """
46
+
47
+ # def __init__(self, sys_stdout_or_stderr, spath):
48
+ # """
49
+ # Parameters
50
+ # ----------
51
+ # stream : TextIO
52
+ # Original output stream (sys.stdout or sys.stderr)
53
+ # log_path : str
54
+ # Path to log file
55
+ # """
56
+ # self._files = [sys_stdout_or_stderr, open(spath, "w")]
57
+ # self._is_stderr = sys_stdout_or_stderr is sys.stderr
58
+
59
+ # def __getattr__(self, attr, *args):
60
+ # return self._wrap(attr, *args)
61
+
62
+ # def _wrap(self, attr, *args):
63
+ # def g(*a, **kw):
64
+ # for f in self._files:
65
+ # if self._is_stderr and f is not sys.stderr:
66
+ # # Filter tqdm lines from log file
67
+ # msg = a[0] if a else ""
68
+ # if not re.match(r"^[\s]*[0-9]+%.*\[A*$", msg):
69
+ # res = getattr(f, attr, *args)(*a, **kw)
70
+ # else:
71
+ # res = getattr(f, attr, *args)(*a, **kw)
72
+ # return res
73
+
74
+ # return g
75
+
76
+
77
+ class Tee:
78
+ def __init__(self, stream: TextIO, log_path: str) -> None:
79
+ self._stream = stream
80
+ try:
81
+ self._log_file = open(log_path, "w", buffering=1) # Line buffering
82
+ except Exception as e:
83
+ printc(f"Failed to open log file {log_path}: {e}", c="red")
84
+ self._log_file = None
85
+ self._is_stderr = stream is sys.stderr
86
+
87
+ def write(self, data: Any) -> None:
88
+ self._stream.write(data)
89
+ if self._log_file is not None:
90
+ if self._is_stderr:
91
+ if isinstance(data, str) and not re.match(
92
+ r"^[\s]*[0-9]+%.*\[A*$", data
93
+ ):
94
+ self._log_file.write(data)
95
+ self._log_file.flush() # Ensure immediate write
96
+ else:
97
+ self._log_file.write(data)
98
+ self._log_file.flush() # Ensure immediate write
99
+
100
+ def flush(self) -> None:
101
+ self._stream.flush()
102
+ if self._log_file is not None:
103
+ self._log_file.flush()
104
+
105
+ def isatty(self) -> bool:
106
+ return self._stream.isatty()
107
+
108
+ def fileno(self) -> int:
109
+ return self._stream.fileno()
110
+
111
+ @property
112
+ def buffer(self):
113
+ return self._stream.buffer
114
+
115
+ def close(self):
116
+ """Explicitly close the log file."""
117
+ if hasattr(self, "_log_file") and self._log_file is not None:
118
+ try:
119
+ self._log_file.flush()
120
+ self._log_file.close()
121
+ self._log_file = None # Prevent double-close
122
+ except Exception:
123
+ pass
124
+
125
+ def __del__(self):
126
+ # Only attempt cleanup if Python is not shutting down
127
+ # This prevents "Exception ignored" errors during interpreter shutdown
128
+ if hasattr(self, "_log_file") and self._log_file is not None:
129
+ try:
130
+ # Check if the file object is still valid
131
+ if hasattr(self._log_file, "closed") and not self._log_file.closed:
132
+ self.close()
133
+ except Exception:
134
+ # Silently ignore exceptions during cleanup
135
+ pass
136
+
137
+
138
+ # class Tee:
139
+ # def __init__(self, stream: TextIO, log_path: str) -> None:
140
+ # self._files: List[TextIO] = [stream, open(log_path, "w")]
141
+ # self._is_stderr: bool = stream is sys.stderr
142
+ # self._stream = stream
143
+
144
+ # def write(self, data: Any) -> None:
145
+ # for file in self._files:
146
+ # if hasattr(file, 'write'):
147
+ # if self._is_stderr and file is not sys.stderr:
148
+ # if isinstance(data, str) and not re.match(r"^[\s]*[0-9]+%.*\[A*$", data):
149
+ # file.write(data)
150
+ # else:
151
+ # file.write(data)
152
+
153
+ # def flush(self) -> None:
154
+ # for file in self._files:
155
+ # if hasattr(file, 'flush'):
156
+ # file.flush()
157
+
158
+ # def isatty(self) -> bool:
159
+ # return getattr(self._stream, 'isatty', lambda: False)()
160
+
161
+ # def fileno(self) -> int:
162
+ # """Delegate fileno to original stream for IPython compatibility"""
163
+ # return self._stream.fileno()
164
+
165
+ # @property
166
+ # def buffer(self):
167
+ # return getattr(self._stream, 'buffer', self._stream)
168
+
169
+
170
+ def tee(sys, sdir=None, verbose=True):
171
+ """Redirects stdout and stderr to both console and log files.
172
+
173
+ Example
174
+ -------
175
+ >>> import sys
176
+ >>> sys.stdout, sys.stderr = tee(sys)
177
+ >>> print("abc") # stdout
178
+ >>> print(1 / 0) # stderr
179
+
180
+ Parameters
181
+ ----------
182
+ sys_module : module
183
+ System module containing stdout and stderr
184
+ sdir : str, optional
185
+ Directory for log files
186
+ verbose : bool, default=True
187
+ Whether to print log file locations
188
+
189
+ Returns
190
+ -------
191
+ tuple[Any, Any]
192
+ Wrapped stdout and stderr objects
193
+ """
194
+ import inspect
195
+
196
+ ####################
197
+ ## Determine sdir
198
+ ## DO NOT MODIFY THIS
199
+ ####################
200
+ if sdir is None:
201
+ THIS_FILE = inspect.stack()[1].filename
202
+ if "ipython" in THIS_FILE:
203
+ THIS_FILE = f"/tmp/{_os.getenv('USER')}.py"
204
+ sdir = clean_path(_os.path.splitext(THIS_FILE)[0] + "_out")
205
+
206
+ sdir = _os.path.join(sdir, "logs/")
207
+ _os.makedirs(sdir, exist_ok=True)
208
+
209
+ spath_stdout = sdir + "stdout.log"
210
+ spath_stderr = sdir + "stderr.log"
211
+ sys_stdout = Tee(sys.stdout, spath_stdout)
212
+ sys_stderr = Tee(sys.stderr, spath_stderr)
213
+
214
+ if verbose:
215
+ message = f"Standard output/error are being logged at:\n\t{spath_stdout}\n\t{spath_stderr}"
216
+ printc(message)
217
+
218
+ return sys_stdout, sys_stderr
219
+
220
+
221
+ main = tee
222
+
223
+ if __name__ == "__main__":
224
+ # # Argument Parser
225
+ import matplotlib.pyplot as plt
226
+ import scitex
227
+
228
+ # import argparse
229
+ # parser = argparse.ArgumentParser(description='')
230
+ # parser.add_argument('--var', '-v', type=int, default=1, help='')
231
+ # parser.add_argument('--flag', '-f', action='store_true', default=False, help='')
232
+ # args = parser.parse_args()
233
+ # Main
234
+ CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.gen.start(sys, plt, verbose=False)
235
+ main(sys, CONFIG["SDIR"])
236
+ scitex.gen.close(CONFIG, verbose=False, notify=False)
237
+
238
+ # EOF
@@ -0,0 +1,60 @@
1
+ #!./env/bin/python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: 2024-05-12 21:02:21 (7)
4
+ # /sshx:ywatanabe@444:/home/ywatanabe/proj/scitex/src/scitex/gen/_title2spath.py
5
+
6
+
7
+ def title2path(title):
8
+ """
9
+ Convert a title (string or dictionary) to a path-friendly string.
10
+
11
+ Parameters
12
+ ----------
13
+ title : str or dict
14
+ The input title to be converted.
15
+
16
+ Returns
17
+ -------
18
+ str
19
+ A path-friendly string derived from the input title.
20
+ """
21
+ if isinstance(title, dict):
22
+ from scitex.dict import to_str
23
+
24
+ title = to_str(title)
25
+
26
+ path = title
27
+
28
+ patterns = [":", ";", "=", "[", "]"]
29
+ for pattern in patterns:
30
+ path = path.replace(pattern, "")
31
+
32
+ path = path.replace("_-_", "-")
33
+ path = path.replace(" ", "_")
34
+
35
+ while "__" in path:
36
+ path = path.replace("__", "_")
37
+
38
+ return path.lower()
39
+
40
+
41
+ # def title2path(title):
42
+ # if isinstance(title, dict):
43
+ # title = dict2str(title)
44
+
45
+ # path = title
46
+
47
+ # # Comma patterns
48
+ # patterns = [":", ";", "=", "[", "]"]
49
+ # for pp in patterns:
50
+ # path = path.replace(pp, "")
51
+
52
+ # # Exceptions
53
+ # path = path.replace("_-_", "-")
54
+ # path = path.replace(" ", "_")
55
+
56
+ # # Consective under scores
57
+ # for _ in range(10):
58
+ # path = path.replace("__", "_")
59
+
60
+ # return path.lower()
@@ -0,0 +1,88 @@
1
+ #!./env/bin/python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-04-24 15:05:34"
4
+ # Author: Yusuke Watanabe (ywata1989@gmail.com)
5
+
6
+
7
+ """
8
+ This script does XYZ.
9
+ """
10
+
11
+
12
+ """
13
+ Imports
14
+ """
15
+ import sys
16
+
17
+ import matplotlib.pyplot as plt
18
+
19
+
20
+ """
21
+ Config
22
+ """
23
+ # CONFIG = scitex.gen.load_configs()
24
+
25
+
26
+ """
27
+ Functions & Classes
28
+ """
29
+
30
+
31
+ def title_case(text):
32
+ """
33
+ Converts a string to title case while keeping certain prepositions, conjunctions, and articles in lowercase,
34
+ and ensuring words detected as potential acronyms (all uppercase) are fully capitalized.
35
+
36
+ Parameters:
37
+ - text (str): The text to convert to title case.
38
+
39
+ Returns:
40
+ - str: The converted text in title case with certain words in lowercase and potential acronyms fully capitalized.
41
+
42
+ Examples:
43
+ --------
44
+ print(title_case("welcome to the world of ai and using CPUs for gaming")) # Welcome to the World of AI and Using CPUs for Gaming
45
+ """
46
+ # List of words to keep in lowercase
47
+ lowercase_words = [
48
+ "a",
49
+ "an",
50
+ "the",
51
+ "and",
52
+ "but",
53
+ "or",
54
+ "nor",
55
+ "at",
56
+ "by",
57
+ "to",
58
+ "in",
59
+ "with",
60
+ "of",
61
+ "on",
62
+ ]
63
+
64
+ words = text.split()
65
+ final_words = []
66
+ for word in words:
67
+ # Check if the word is fully in uppercase and more than one character, suggesting an acronym
68
+ if word.isupper() and len(word) > 1:
69
+ final_words.append(word)
70
+ elif word.lower() in lowercase_words:
71
+ final_words.append(word.lower())
72
+ else:
73
+ final_words.append(word.capitalize())
74
+ return " ".join(final_words)
75
+
76
+
77
+ def main():
78
+ # Example usage:
79
+ text = "welcome to the world of ai and using CPUs for gaming"
80
+ print(title_case(text))
81
+
82
+
83
+ if __name__ == "__main__":
84
+ CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.gen.start(sys, plt, verbose=False)
85
+ main()
86
+ scitex.gen.close(CONFIG, verbose=False, notify=False)
87
+
88
+ # EOF
scitex/gen/_to_even.py ADDED
@@ -0,0 +1,84 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-25 23:40:12 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/gen/_to_even.py
5
+
6
+ THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/gen/_to_even.py"
7
+
8
+
9
+ def to_even(n):
10
+ """Convert a number to the nearest even number less than or equal to itself.
11
+
12
+ Parameters
13
+ ----------
14
+ n : int or float
15
+ The input number to be converted.
16
+
17
+ Returns
18
+ -------
19
+ int
20
+ The nearest even number less than or equal to the input.
21
+
22
+ Example
23
+ -------
24
+ >>> to_even(5)
25
+ 4
26
+ >>> to_even(6)
27
+ 6
28
+ >>> to_even(3.7)
29
+ 2
30
+ >>> to_even(-2.3)
31
+ -4
32
+ >>> to_even(-0.1)
33
+ -2
34
+ """
35
+ import math
36
+
37
+ # Handle integers directly to avoid float conversion issues with large numbers
38
+ # Note: bool is a subclass of int, so we need to exclude it
39
+ if isinstance(n, int) and not isinstance(n, bool):
40
+ if n % 2 == 0:
41
+ return int(n) # Ensure we return int, not bool
42
+ else:
43
+ return int(n - 1) # Ensure we return int, not bool
44
+
45
+ # Handle special float values
46
+ if isinstance(n, float):
47
+ if math.isnan(n):
48
+ raise ValueError("Cannot convert NaN to even")
49
+ if math.isinf(n):
50
+ raise OverflowError("Cannot convert infinity to even")
51
+ # Python can actually convert sys.float_info.max to int, so we don't need this check
52
+ # Only infinity truly can't be converted
53
+
54
+ # Try to handle custom objects with __int__ (but not float types)
55
+ if hasattr(n, '__int__') and not isinstance(n, (float, bool)):
56
+ try:
57
+ n_int = int(n)
58
+ if n_int % 2 == 0:
59
+ return int(n_int)
60
+ else:
61
+ return int(n_int - 1)
62
+ except:
63
+ pass
64
+
65
+ # Check for string type explicitly - raise TypeError
66
+ if isinstance(n, str):
67
+ raise TypeError(f"must be real number, not {type(n).__name__}")
68
+
69
+ # Convert to float for all other cases
70
+ try:
71
+ n_float = float(n)
72
+ except (TypeError, ValueError):
73
+ raise TypeError(f"must be real number, not {type(n).__name__}")
74
+
75
+ # Use floor for float values
76
+ floored = int(math.floor(n_float))
77
+
78
+ # If odd, subtract 1 to get the next lower even number
79
+ if floored % 2 != 0:
80
+ return int(floored - 1) # Ensure we return int, not bool
81
+ return int(floored) # Ensure we return int, not bool
82
+
83
+
84
+ # EOF
scitex/gen/_to_odd.py ADDED
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-25 23:40:22 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/gen/_to_odd.py
5
+
6
+ THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/gen/_to_odd.py"
7
+
8
+
9
+ def to_odd(n):
10
+ """Convert a number to the nearest odd number less than or equal to itself.
11
+
12
+ Parameters
13
+ ----------
14
+ n : int or float
15
+ The input number to be converted.
16
+
17
+ Returns
18
+ -------
19
+ int
20
+ The nearest odd number less than or equal to the input.
21
+
22
+ Example
23
+ -------
24
+ >>> to_odd(6)
25
+ 5
26
+ >>> to_odd(7)
27
+ 7
28
+ >>> to_odd(5.8)
29
+ 5
30
+ """
31
+ return int(n) - ((int(n) + 1) % 2)
32
+
33
+
34
+ # EOF
scitex/gen/_to_rank.py ADDED
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-02 13:05:47 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/gen/_to_rank.py
5
+ #!./env/bin/python3
6
+ # -*- coding: utf-8 -*-
7
+ # Time-stamp: "2024-08-29 22:10:06 (ywatanabe)"
8
+ # ./src/scitex/gen/data_processing/_to_rank.py
9
+
10
+ import torch
11
+
12
+ # from .._converters import
13
+ from ..decorators import torch_fn
14
+
15
+
16
+ @torch_fn
17
+ def to_rank(tensor, method="average"):
18
+ sorted_tensor, indices = torch.sort(tensor)
19
+ ranks = torch.empty_like(tensor)
20
+ ranks[indices] = (
21
+ torch.arange(len(tensor), dtype=tensor.dtype, device=tensor.device) + 1
22
+ )
23
+
24
+ if method == "average":
25
+ ranks = ranks.float()
26
+ ties = torch.nonzero(sorted_tensor[1:] == sorted_tensor[:-1])
27
+ for i in range(len(ties)):
28
+ start = ties[i]
29
+ end = start + 1
30
+ while (
31
+ end < len(sorted_tensor) and sorted_tensor[end] == sorted_tensor[start]
32
+ ):
33
+ end += 1
34
+ ranks[indices[start:end]] = ranks[indices[start:end]].mean()
35
+
36
+ return ranks
37
+
38
+
39
+ # EOF
@@ -0,0 +1,37 @@
1
+ #!./env/bin/python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-08-24 09:47:16 (ywatanabe)"
4
+ # ./src/scitex/gen/_transpose.py
5
+
6
+ from ..decorators import numpy_fn
7
+ import numpy as np
8
+
9
+
10
+ @numpy_fn
11
+ def transpose(arr_like, src_dims, tgt_dims):
12
+ """
13
+ Transpose an array-like object based on source and target dimensions.
14
+
15
+ Parameters
16
+ ----------
17
+ arr_like : np.array
18
+ The input array to be transposed.
19
+ src_dims : np.array
20
+ List of dimension names in the source order.
21
+ tgt_dims : np.array
22
+ List of dimension names in the target order.
23
+
24
+ Returns
25
+ -------
26
+ np.array
27
+ The transposed array.
28
+
29
+ Raises
30
+ ------
31
+ AssertionError
32
+ If source and target dimensions don't contain the same elements.
33
+ """
34
+ assert set(src_dims) == set(
35
+ tgt_dims
36
+ ), "Source and target dimensions must contain the same elements"
37
+ return arr_like.transpose(*[np.where(src_dims == dim)[0][0] for dim in tgt_dims])