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/utils/_grid.py ADDED
@@ -0,0 +1,148 @@
1
+ #!./env/bin/python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-04-22 23:54:02"
4
+ # Author: Yusuke Watanabe (ywata1989@gmail.com)
5
+
6
+ """
7
+ This script defines scitex.ml.utils.grid_search
8
+ """
9
+
10
+ # Imports
11
+ import itertools as _itertools
12
+ import random as _random
13
+ import sys as _sys
14
+
15
+ import matplotlib.pyplot as _plt
16
+ import scitex as _scitex
17
+
18
+
19
+ # Functions
20
+ def yield_grids(params_grid: dict, random=False):
21
+ """
22
+ Generator function that yields combinations of parameters from a grid.
23
+
24
+ Args:
25
+ params_grid (dict): A dictionary where keys are parameter names and values are lists of parameter values.
26
+ random (bool): If True, yields the parameter combinations in random order.
27
+
28
+ Yields:
29
+ dict: A dictionary of parameters for one set of conditions from the grid.
30
+
31
+ Example:
32
+ # Parameters
33
+ params_grid = {
34
+ "batch_size": [2**i for i in range(7)],
35
+ "n_chs": [2**i for i in range(7)],
36
+ "seq_len": [2**i for i in range(15)],
37
+ "fs": [2**i for i in range(8, 11)],
38
+ "n_segments": [2**i for i in range(6)],
39
+ "n_bands_pha": [2**i for i in range(7)],
40
+ "n_bands_amp": [2**i for i in range(7)],
41
+ "precision": ['fp16', 'fp32'],
42
+ "device": ['cpu', 'cuda'],
43
+ "package": ['tensorpac', 'scitex'],
44
+ }
45
+
46
+ # Example of using the generator
47
+ for param_dict in yield_grids(params_grid, random=True):
48
+ print(param_dict)
49
+ """
50
+ combinations = list(_itertools.product(*params_grid.values()))
51
+ if random:
52
+ _random.shuffle(combinations) # [REVISED]
53
+ for values in combinations:
54
+ yield dict(zip(params_grid.keys(), values))
55
+
56
+
57
+ # def yield_grids(params_grid: dict, random=False):
58
+ # """
59
+ # Generator function that yields combinations of parameters from a grid.
60
+
61
+ # Args:
62
+ # params_grid (dict): A dictionary where keys are parameter names and values are lists of parameter values.
63
+
64
+ # Yields:
65
+ # dict: A dictionary of parameters for one set of conditions from the grid.
66
+
67
+ # Example:
68
+ # # Parameters
69
+ # params_grid = {
70
+ # "batch_size": [2**i for i in range(7)],
71
+ # "n_chs": [2**i for i in range(7)],
72
+ # "seq_len": [2**i for i in range(15)],
73
+ # "fs": [2**i for i in range(8, 11)],
74
+ # "n_segments": [2**i for i in range(6)],
75
+ # "n_bands_pha": [2**i for i in range(7)],
76
+ # "n_bands_amp": [2**i for i in range(7)],
77
+ # "precision": ['fp16', 'fp32'],
78
+ # "device": ['cpu', 'cuda'],
79
+ # "package": ['tensorpac', 'scitex'],
80
+ # }
81
+
82
+ # # Example of using the generator
83
+ # for param_dict in yield_grids(params_grid):
84
+ # print(param_dict)
85
+ # """
86
+ # print(f"\nThe Number of Combinations: {count_grids(params_grid):,}")
87
+
88
+ # for values in _itertools.product(*params_grid.values()):
89
+ # yield dict(zip(params_grid.keys(), values))
90
+
91
+
92
+ def count_grids(params_grid):
93
+ """
94
+ Calculate the total number of combinations possible from the given parameter grid.
95
+
96
+ Args:
97
+ params_grid (dict): A dictionary where keys are parameter names and values are lists of parameter values.
98
+
99
+ Returns:
100
+ int: The total number of combinations that can be generated from the parameter grid.
101
+ """
102
+ # Get the number of values for each parameter and multiply them
103
+ num_combinations = 1
104
+ for values in params_grid.values():
105
+ num_combinations *= len(values)
106
+ return num_combinations
107
+
108
+
109
+ if __name__ == "__main__":
110
+ import pandas as pd
111
+
112
+ # Start
113
+ CONFIG, _sys.stdout, _sys.stderr, _plt, CC = _scitex.gen.start(
114
+ _sys, _plt, verbose=False
115
+ )
116
+
117
+ # Parameters
118
+ N = 15
119
+ print(pd.DataFrame(pd.Series({f"2^{ii}": 2**ii for ii in range(N)})))
120
+
121
+ params_grid = {
122
+ "batch_size": [2**i for i in [3, 4, 5, 6]],
123
+ "n_chs": [2**i for i in [3, 4, 5, 6]],
124
+ "seq_len": [2**i for i in range(8, 13)],
125
+ "fs": [2**i for i in range(7, 10)],
126
+ "n_segments": [2**i for i in range(5)],
127
+ "n_bands_pha": [2**i for i in range(7)],
128
+ "n_bands_amp": [2**i for i in range(7)],
129
+ "precision": ["fp16", "fp32"],
130
+ "device": ["cpu", "cuda"],
131
+ "package": ["tensorpac", "_scitex"],
132
+ }
133
+
134
+ print(params_grid)
135
+ print(f"{count_grids(params_grid):,}")
136
+
137
+ # Example of using the generator
138
+ for param_dict in yield_grids(params_grid):
139
+ print(param_dict)
140
+
141
+ # Close
142
+ _scitex.gen.close(CONFIG, verbose=False, notify=False)
143
+
144
+ # EOF
145
+
146
+ """
147
+ /home/ywatanabe/proj/entrance/_scitex/ml/utils/grid_search.py
148
+ """
@@ -0,0 +1,247 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-06-15 20:25:22 (ywatanabe)"
4
+ # File: /ssh:ywatanabe@sp:/home/ywatanabe/proj/SciTeX-Code/src/scitex/utils/_notify.py
5
+ # ----------------------------------------
6
+ import os
7
+ __FILE__ = (
8
+ "./src/scitex/utils/_notify.py"
9
+ )
10
+ __DIR__ = os.path.dirname(__FILE__)
11
+ # ----------------------------------------
12
+ # Time-stamp: "2024-11-24 17:54:38 (ywatanabe)"
13
+
14
+ THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/utils/_notify.py"
15
+
16
+ # Time-stamp: "2024-11-07 05:38:14 (ywatanabe)"
17
+
18
+ """This script does XYZ."""
19
+
20
+ import inspect
21
+ import pwd
22
+ import socket
23
+ import subprocess
24
+ import sys
25
+ import warnings
26
+
27
+ from ._email import send_gmail
28
+
29
+
30
+ def get_username():
31
+ try:
32
+ return pwd.getpwuid(os.getuid()).pw_name
33
+ except:
34
+ return os.getenv("USER") or os.getenv("LOGNAME") or "unknown"
35
+
36
+
37
+ def get_hostname():
38
+ return socket.gethostname()
39
+
40
+
41
+ def get_git_branch(scitex):
42
+ try:
43
+ branch = (
44
+ subprocess.check_output(
45
+ ["git", "rev-parse", "--abbrev-ref", "HEAD"],
46
+ cwd=scitex.__path__[0],
47
+ stderr=subprocess.DEVNULL,
48
+ )
49
+ .decode()
50
+ .strip()
51
+ )
52
+ return branch
53
+
54
+ except Exception as e:
55
+ print(e)
56
+ return "main"
57
+
58
+
59
+ def gen_footer(sender, script_name, scitex, branch):
60
+ return f"""
61
+
62
+ {'-'*30}
63
+ Sent via
64
+ - Host: {sender}
65
+ - Script: {script_name}
66
+ - Source: scitex v{scitex.__version__} (github.com/ywatanabe1989/scitex/blob/{branch}/src/scitex/gen/system_ops/_notify.py)
67
+ {'-'*30}"""
68
+
69
+
70
+ # This is an automated system notification. If received outside working hours, please disregard.
71
+
72
+
73
+ def notify(
74
+ subject="",
75
+ message=":)",
76
+ file=None,
77
+ ID="auto",
78
+ sender_name=None,
79
+ recipient_email=None,
80
+ cc=None,
81
+ attachment_paths=None,
82
+ verbose=False,
83
+ ):
84
+ import scitex
85
+
86
+ try:
87
+ message = str(message)
88
+ except Exception as e:
89
+ warnings.warn(str(e))
90
+
91
+ FAKE_PYTHON_SCRIPT_NAME = "$ python -c ..."
92
+ sender_gmail = os.getenv("SCITEX_SENDER_GMAIL")
93
+ sender_password = os.getenv("SCITEX_SENDER_GMAIL_PASSWORD")
94
+ recipient_email = recipient_email or os.getenv("SCITEX_RECIPIENT_GMAIL")
95
+
96
+ if file is not None:
97
+ script_name = str(file)
98
+ else:
99
+ if sys.argv[0]:
100
+ script_name = os.path.basename(sys.argv[0])
101
+ else:
102
+ frames = inspect.stack()
103
+ script_name = (
104
+ os.path.basename(frames[-1].filename)
105
+ if frames
106
+ else "(Not found)"
107
+ )
108
+ if (script_name == "-c") or (not script_name.endswith(".py")):
109
+ script_name = FAKE_PYTHON_SCRIPT_NAME
110
+
111
+ sender = f"{get_username()}@{get_hostname()}"
112
+ branch = get_git_branch(scitex)
113
+ footer = gen_footer(sender, script_name, scitex, branch)
114
+
115
+ full_message = script_name + "\n\n" + message + "\n\n" + footer
116
+ full_subject = (
117
+ f"{script_name}—{subject}"
118
+ if subject and (script_name != FAKE_PYTHON_SCRIPT_NAME)
119
+ else f"{subject}"
120
+ )
121
+
122
+ if sender_gmail is None or sender_password is None:
123
+ print(
124
+ f"""
125
+ Please set environmental variables to use this function (f"{inspect.stack()[0][3]}"):\n\n
126
+ $ export SciTeX_SENDER_GMAIL="scitex.notification@gmail.com"
127
+ $ export SciTeX_SENDER_GMAIL_PASSWORD="YOUR_APP_PASSWORD"
128
+ $ export SciTeX_RECIPIENT_GMAIL="YOUR_GMAIL_ADDRESS"
129
+ """
130
+ )
131
+
132
+ send_gmail(
133
+ sender_gmail,
134
+ sender_password,
135
+ recipient_email,
136
+ full_subject,
137
+ full_message,
138
+ sender_name=sender_name,
139
+ cc=cc,
140
+ ID=ID,
141
+ attachment_paths=attachment_paths,
142
+ verbose=verbose,
143
+ )
144
+
145
+
146
+ if __name__ == "__main__":
147
+ notify(verbose=True)
148
+
149
+ # python -c "; scitex.gen.notify()"
150
+
151
+
152
+ # # Example in shell
153
+ # #!/bin/bash
154
+ # # /home/ywatanabe/.dotfiles/.bin/notify
155
+ # # Author: ywatanabe (ywatanabe@alumni.u-tokyo.ac.jp)
156
+ # # Date: $(date +"%Y-%m-%d-%H-%M")
157
+
158
+ # # LOG_FILE="${0%.sh}.log"
159
+
160
+ # usage() {
161
+ # echo "Usage: $0 [-s|--subject <subject>] [-m|--message <message>] [-r|--recipient-name <name>] [-t|--to <email>] [-c|--cc <email>] [-h|--help]"
162
+ # echo "Options:"
163
+ # echo " -s, --subject Subject of the notification (default: 'Subject')"
164
+ # echo " -m, --message Message body of the notification (default: 'Message')"
165
+ # echo " -t, --to The email address of the recipient"
166
+ # echo " -c, --cc CC email address(es) (can be used multiple times)"
167
+ # echo " -h, --help Display this help message"
168
+ # echo
169
+ # echo "Example:"
170
+ # echo " $0 -s \"About the Project A\" -m \"Hi, ...\" -r \"John\" -t \"john@example.com\" -c \"cc1@example.com\" -c \"cc2@example.com\""
171
+ # echo " $0 -s \"Notification\" -m \"This is a notification from ...\" -r \"Team\" -t \"team@example.com\""
172
+ # exit 1
173
+ # }
174
+
175
+ # main() {
176
+ # subject="Subject"
177
+ # message="Message"
178
+ # recipient_email=""
179
+ # cc_addresses=()
180
+
181
+ # while [[ $# -gt 0 ]]; do
182
+ # case $1 in
183
+ # -s|--subject)
184
+ # shift
185
+ # subject=""
186
+ # while [[ $# -gt 0 && ! $1 =~ ^- ]]; do
187
+ # subject+="$1 "
188
+ # shift
189
+ # done
190
+ # subject=${subject% }
191
+ # ;;
192
+ # -m|--message)
193
+ # shift
194
+ # message=""
195
+ # while [[ $# -gt 0 && ! $1 =~ ^- ]]; do
196
+ # message+="$1 "
197
+ # shift
198
+ # done
199
+ # message=${message% }
200
+ # ;;
201
+ # -t|--to)
202
+ # shift
203
+ # recipient_email="$1"
204
+ # shift
205
+ # ;;
206
+ # -c|--cc)
207
+ # shift
208
+ # cc_addresses+=("$1")
209
+ # shift
210
+ # ;;
211
+ # -h|--help)
212
+ # usage
213
+ # ;;
214
+ # *)
215
+ # echo "Unknown option: $1"
216
+ # usage
217
+ # ;;
218
+ # esac
219
+ # done
220
+
221
+ # subject=$(echo "$subject" | sed "s/'/'\\\\''/g")
222
+ # message=$(echo "$message" | sed "s/'/'\\\\''/g")
223
+ # recipient_email=$(echo "$recipient_email" | sed "s/'/'\\\\''/g")
224
+ # cc_string=$(IFS=,; echo "${cc_addresses[*]}" | sed "s/'/'\\\\''/g")
225
+
226
+ # python -c "
227
+ #
228
+
229
+ # cc_list = [$(printf "'%s', " "${cc_addresses[@]}")]
230
+ # cc_list = [addr.strip() for addr in cc_list if addr.strip()]
231
+
232
+ # scitex.gen.notify(
233
+ # subject='$subject',
234
+ # message='$message',
235
+ # ID=None,
236
+ # recipient_email='$recipient_email',
237
+ # cc=cc_list
238
+ # )
239
+ # "
240
+ # }
241
+
242
+ # main "$@"
243
+ # # { main "$@"; } 2>&1 | tee "$LOG_FILE"
244
+
245
+ #
246
+
247
+ # EOF
@@ -0,0 +1,121 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-02 13:01:38 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/utils/_search.py
5
+
6
+ import numpy as np
7
+ import re
8
+ from collections import abc
9
+
10
+ try:
11
+ import pandas as pd
12
+ except ImportError:
13
+ pd = None
14
+
15
+ try:
16
+ import xarray as xr
17
+ except ImportError:
18
+ xr = None
19
+
20
+ try:
21
+ from natsort import natsorted
22
+ except ImportError:
23
+ # Fallback to regular sorted if natsort not available
24
+ def natsorted(iterable):
25
+ return sorted(iterable)
26
+
27
+
28
+ def search(
29
+ patterns, strings, only_perfect_match=False, as_bool=False, ensure_one=False
30
+ ):
31
+ """Search for patterns in strings using regular expressions.
32
+
33
+ Parameters
34
+ ----------
35
+ patterns : str or list of str
36
+ The pattern(s) to search for. Can be a single string or a list of strings.
37
+ strings : str or list of str
38
+ The string(s) to search in. Can be a single string or a list of strings.
39
+ only_perfect_match : bool, optional
40
+ If True, only exact matches are considered (default is False).
41
+ as_bool : bool, optional
42
+ If True, return a boolean array instead of indices (default is False).
43
+ ensure_one : bool, optional
44
+ If True, ensures only one match is found (default is False).
45
+
46
+ Returns
47
+ -------
48
+ tuple
49
+ A tuple containing two elements:
50
+ - If as_bool is False: (list of int, list of str)
51
+ The first element is a list of indices where matches were found.
52
+ The second element is a list of matched strings.
53
+ - If as_bool is True: (numpy.ndarray of bool, list of str)
54
+ The first element is a boolean array indicating matches.
55
+ The second element is a list of matched strings.
56
+
57
+ Example
58
+ -------
59
+ >>> patterns = ['orange', 'banana']
60
+ >>> strings = ['apple', 'orange', 'apple', 'apple_juice', 'banana', 'orange_juice']
61
+ >>> search(patterns, strings)
62
+ ([1, 4, 5], ['orange', 'banana', 'orange_juice'])
63
+
64
+ >>> patterns = 'orange'
65
+ >>> strings = ['apple', 'orange', 'apple', 'apple_juice', 'banana', 'orange_juice']
66
+ >>> search(patterns, strings)
67
+ ([1, 5], ['orange', 'orange_juice'])
68
+ """
69
+
70
+ def to_list(string_or_pattern):
71
+ # Check for numpy arrays first
72
+ if isinstance(string_or_pattern, np.ndarray):
73
+ return string_or_pattern.tolist()
74
+
75
+ # Check for pandas types if pandas is available
76
+ if pd is not None:
77
+ if isinstance(string_or_pattern, (pd.Series, pd.Index)):
78
+ return string_or_pattern.tolist()
79
+
80
+ # Check for xarray types if xarray is available
81
+ if xr is not None:
82
+ if isinstance(string_or_pattern, xr.DataArray):
83
+ return string_or_pattern.tolist()
84
+
85
+ # Check for other iterables
86
+ if isinstance(string_or_pattern, abc.KeysView):
87
+ return list(string_or_pattern)
88
+ elif not isinstance(string_or_pattern, (list, tuple)):
89
+ return [string_or_pattern]
90
+ return string_or_pattern
91
+
92
+ patterns = to_list(patterns)
93
+ strings = to_list(strings)
94
+
95
+ indices_matched = []
96
+ for pattern in patterns:
97
+ for index_str, string in enumerate(strings):
98
+ if only_perfect_match:
99
+ if pattern == string:
100
+ indices_matched.append(index_str)
101
+ else:
102
+ if re.search(pattern, string):
103
+ indices_matched.append(index_str)
104
+
105
+ indices_matched = natsorted(indices_matched)
106
+ keys_matched = list(np.array(strings)[indices_matched])
107
+
108
+ if ensure_one:
109
+ assert (
110
+ len(indices_matched) == 1
111
+ ), "Expected exactly one match, but found {}".format(len(indices_matched))
112
+
113
+ if as_bool:
114
+ bool_matched = np.zeros(len(strings), dtype=bool)
115
+ bool_matched[np.unique(indices_matched)] = True
116
+ return bool_matched, keys_matched
117
+ else:
118
+ return indices_matched, keys_matched
119
+
120
+
121
+ # EOF
scitex/web/__init__.py ADDED
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env python3
2
+ """Web-related utilities module for scitex."""
3
+
4
+ from ._search_pubmed import (
5
+ search_pubmed,
6
+ _search_pubmed,
7
+ _fetch_details,
8
+ _parse_abstract_xml,
9
+ _get_citation,
10
+ get_crossref_metrics,
11
+ save_bibtex,
12
+ format_bibtex,
13
+ fetch_async,
14
+ batch__fetch_details,
15
+ parse_args,
16
+ run_main,
17
+ )
18
+ from ._summarize_url import summarize_url, extract_main_content, crawl_url, crawl_to_json, summarize_all
19
+
20
+ __all__ = [
21
+ "search_pubmed",
22
+ "_search_pubmed",
23
+ "_fetch_details",
24
+ "_parse_abstract_xml",
25
+ "_get_citation",
26
+ "get_crossref_metrics",
27
+ "save_bibtex",
28
+ "format_bibtex",
29
+ "fetch_async",
30
+ "batch__fetch_details",
31
+ "parse_args",
32
+ "run_main",
33
+ "summarize_url",
34
+ "extract_main_content",
35
+ "crawl_url",
36
+ "crawl_to_json",
37
+ "summarize_all",
38
+ ]