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,47 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-03 03:44:47 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/str/_print_block.py
5
+
6
+ from ._color_text import color_text
7
+
8
+
9
+ def printc(message, char="-", n=40, c="cyan"):
10
+ """Print a message surrounded by a character border.
11
+
12
+ This function prints a given message surrounded by a border made of
13
+ a specified character. The border can be colored if desired.
14
+
15
+ Parameters
16
+ ----------
17
+ message : str
18
+ The message to be printed inside the border.
19
+ char : str, optional
20
+ The character used to create the border (default is "-").
21
+ n : int, optional
22
+ The width of the border (default is 40).
23
+ c : str, optional
24
+ The color of the border. Can be 'red', 'green', 'yellow', 'blue',
25
+ 'magenta', 'cyan', 'white', or 'grey' (default is None, which means no color).
26
+
27
+ Returns
28
+ -------
29
+ None
30
+
31
+ Example
32
+ -------
33
+ >>> print_block("Hello, World!", char="*", n=20, c="blue")
34
+ ********************
35
+ * Hello, World! *
36
+ ********************
37
+
38
+ Note: The actual output will be in green color.
39
+ """
40
+ border = char * n
41
+ text = f"\n{border}\n{message}\n{border}\n"
42
+ if c is not None:
43
+ text = color_text(text, c)
44
+ print(text)
45
+
46
+
47
+ # EOF
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-24 17:17:05 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/str/_print_debug.py
5
+
6
+ THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/str/_print_debug.py"
7
+
8
+ from ._printc import printc
9
+
10
+
11
+ def print_debug():
12
+ """Print a prominent debug mode banner.
13
+
14
+ Displays a highly visible yellow banner to indicate that the program
15
+ is running in debug mode. Useful for making debug runs immediately
16
+ distinguishable from production runs.
17
+
18
+ The banner consists of multiple lines of exclamation marks with
19
+ "DEBUG MODE" prominently displayed in the center.
20
+
21
+ Examples
22
+ --------
23
+ >>> # At the start of debug runs
24
+ >>> if DEBUG:
25
+ ... print_debug()
26
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
27
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
28
+ !!!!!!!!!!!!!!!!!!!!!!!! DEBUG MODE !!!!!!!!!!!!!!!!!!!!!!!!
29
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
30
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
31
+
32
+ >>> # In configuration validation
33
+ >>> if config.debug_mode:
34
+ ... print_debug()
35
+ ... print("Debug logging enabled")
36
+
37
+ See Also
38
+ --------
39
+ printc : Colored printing function used internally
40
+
41
+ Notes
42
+ -----
43
+ The banner is printed in yellow color to ensure high visibility
44
+ in terminal output.
45
+ """
46
+ printc(
47
+ (
48
+ f"{'!'*60}\n"
49
+ f"{'!'*60}\n"
50
+ f"{'!'*60}\n"
51
+ f"{'!'*60}\n"
52
+ f"{'!'*60}\n"
53
+ f"{'!'*60}\n"
54
+ f"{'!'*24} DEBUG MODE {'!'*24}\n"
55
+ f"{'!'*60}\n"
56
+ f"{'!'*60}\n"
57
+ f"{'!'*60}\n"
58
+ f"{'!'*60}\n"
59
+ f"{'!'*60}\n"
60
+ f"{'!'*60}"
61
+ ),
62
+ c="yellow",
63
+ char="!",
64
+ n=60,
65
+ )
66
+
67
+
68
+ # EOF
scitex/str/_printc.py ADDED
@@ -0,0 +1,62 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-06-14 19:09:38 (ywatanabe)"
4
+ # File: /ssh:sp:/home/ywatanabe/proj/SciTeX-Code/src/scitex/str/_printc.py
5
+ # ----------------------------------------
6
+ import os
7
+ __FILE__ = (
8
+ "./src/scitex/str/_printc.py"
9
+ )
10
+ __DIR__ = os.path.dirname(__FILE__)
11
+ # ----------------------------------------
12
+ # Time-stamp: "2024-11-24 17:01:23 (ywatanabe)"
13
+
14
+ THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/str/_printc.py"
15
+
16
+ # Time-stamp: "2024-11-03 03:47:51 (ywatanabe)"
17
+
18
+ from ._color_text import color_text
19
+
20
+
21
+ def printc(message, c="blue", char="-", n=40):
22
+ """Print a message surrounded by a character border.
23
+
24
+ This function prints a given message surrounded by a border made of
25
+ a specified character. The border can be colored if desired.
26
+
27
+ Parameters
28
+ ----------
29
+ message : str
30
+ The message to be printed inside the border.
31
+ char : str, optional
32
+ The character used to create the border (default is "-").
33
+ n : int, optional
34
+ The width of the border (default is 40).
35
+ c : str, optional
36
+ The color of the border. Can be 'red', 'green', 'yellow', 'blue',
37
+ 'magenta', 'cyan', 'white', or 'grey' (default is None, which means no color).
38
+
39
+ Returns
40
+ -------
41
+ None
42
+
43
+ Example
44
+ -------
45
+ >>> print_block("Hello, World!", char="*", n=20, c="blue")
46
+ ********************
47
+ * Hello, World! *
48
+ ********************
49
+
50
+ Note: The actual output will be in green color.
51
+ """
52
+ if char is not None:
53
+ border = char * n
54
+ text = f"\n{border}\n{message}\n{border}\n"
55
+ else:
56
+ text = f"\n{message}\n"
57
+ if c is not None:
58
+ text = color_text(text, c)
59
+
60
+ print(text)
61
+
62
+ # EOF
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-02 04:06:54 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/str/_readable_bytes.py
5
+
6
+
7
+ def readable_bytes(num, suffix="B"):
8
+ """Convert a number of bytes to a human-readable format.
9
+
10
+ Parameters
11
+ ----------
12
+ num : int
13
+ The number of bytes to convert.
14
+ suffix : str, optional
15
+ The suffix to append to the unit (default is "B" for bytes).
16
+
17
+ Returns
18
+ -------
19
+ str
20
+ A human-readable string representation of the byte size.
21
+
22
+ Example
23
+ -------
24
+ >>> readable_bytes(1024)
25
+ '1.0 KiB'
26
+ >>> readable_bytes(1048576)
27
+ '1.0 MiB'
28
+ >>> readable_bytes(1073741824)
29
+ '1.0 GiB'
30
+ """
31
+ for unit in ["", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi"]:
32
+ if abs(num) < 1024.0:
33
+ return "%3.1f %s%s" % (num, unit, suffix)
34
+ num /= 1024.0
35
+ return "%.1f %s%s" % (num, "Yi", suffix)
36
+
37
+
38
+ # EOF
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-04 01:21:34 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/str/_remove_ansi.py
5
+
6
+ import re
7
+
8
+
9
+ def remove_ansi(string):
10
+ """
11
+ Removes ANSI escape sequences from a given text chunk.
12
+
13
+ Parameters:
14
+ - chunk (str): The text chunk to be cleaned.
15
+
16
+ Returns:
17
+ - str: The cleaned text chunk.
18
+ """
19
+ ansi_escape = re.compile(r"\x1B[@-_][0-?]*[ -/]*[@-~]")
20
+ return ansi_escape.sub("", string)
21
+
22
+
23
+ # EOF
scitex/str/_replace.py ADDED
@@ -0,0 +1,134 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-16 16:34:46 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/str/_replace.py
5
+
6
+ THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/str/_replace.py"
7
+
8
+ #!/usr/bin/env python3
9
+ # -*- coding: utf-8 -*-
10
+ # Time-stamp: "2024-11-16 16:30:25 (ywatanabe)"
11
+ # File: ./scitex_repo/src/scitex/str/_replace.py
12
+
13
+ THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/str/_replace.py"
14
+
15
+ from typing import Union, Dict, Optional
16
+ from ..dict import DotDict as _DotDict
17
+
18
+
19
+ def replace(
20
+ string: str, replacements: Optional[Union[str, Dict[str, str]]] = None
21
+ ) -> str:
22
+ """Replace placeholders in the string with corresponding values from replacements.
23
+
24
+ This function replaces placeholders in the format {key} within the input string
25
+ with corresponding values from the replacements dictionary. If replacements is
26
+ a string, it replaces the entire input string.
27
+
28
+ Parameters
29
+ ----------
30
+ string : str
31
+ The string containing placeholders in the format {key}
32
+ replacements : Optional[Union[str, Dict[str, str]]], optional
33
+ A dictionary containing key-value pairs for replacing placeholders in the string,
34
+ or a single string to replace the entire string
35
+
36
+ Returns
37
+ -------
38
+ str
39
+ The input string with placeholders replaced by their corresponding values
40
+
41
+ Examples
42
+ --------
43
+ >>> replace("Hello, {name}!", {"name": "World"})
44
+ 'Hello, World!'
45
+ >>> replace("Original string", "New string")
46
+ 'New string'
47
+ >>> replace("Value: {x}", {"x": "42"})
48
+ 'Value: 42'
49
+ >>> template = "Hello, {name}! You are {age} years old."
50
+ >>> replacements = {"name": "Alice", "age": "30"}
51
+ >>> replace(template, replacements)
52
+ 'Hello, Alice! You are 30 years old.'
53
+ """
54
+ if not isinstance(string, str):
55
+ raise TypeError("Input 'string' must be a string")
56
+
57
+ if isinstance(replacements, str):
58
+ return replacements
59
+
60
+ if replacements is None:
61
+ return string
62
+
63
+ if not isinstance(replacements, (dict, _DotDict)):
64
+ raise TypeError("replacements must be either a string or a dictionary")
65
+
66
+ result = string
67
+ for key, value in replacements.items():
68
+ if value is not None:
69
+ placeholder = "{" + str(key) + "}"
70
+ result = result.replace(placeholder, str(value))
71
+
72
+ return result
73
+
74
+
75
+ # EOF
76
+
77
+ # #!/usr/bin/env python3
78
+ # # -*- coding: utf-8 -*-
79
+ # # Time-stamp: "2024-11-16 16:30:25 (ywatanabe)"
80
+ # # File: ./scitex_repo/src/scitex/str/_replace.py
81
+
82
+ # THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/str/_replace.py"
83
+
84
+ # def replace(string, replacements):
85
+ # """Replace placeholders in the string with corresponding values from replacements.
86
+
87
+ # This function replaces placeholders in the format {key} within the input string
88
+ # with corresponding values from the replacements dictionary. If replacements is
89
+ # a string, it replaces the entire input string.
90
+
91
+ # Parameters
92
+ # ----------
93
+ # string : str
94
+ # The string containing placeholders in the format {key}.
95
+ # replacements : dict or str, optional
96
+ # A dictionary containing key-value pairs for replacing placeholders in the string,
97
+ # or a single string to replace the entire string.
98
+
99
+ # Returns
100
+ # -------
101
+ # str
102
+ # The input string with placeholders replaced by their corresponding values.
103
+
104
+ # Examples
105
+ # --------
106
+ # >>> replace("Hello, {name}!", {"name": "World"})
107
+ # 'Hello, World!'
108
+ # >>> replace("Original string", "New string")
109
+ # 'New string'
110
+ # >>> replace("Value: {x}", {"x": 42})
111
+ # 'Value: 42'
112
+ # >>> template = "Hello, {name}! You are {age} years old."
113
+ # >>> replacements = {"name": "Alice", "age": "30"}
114
+ # >>> replace(template, replacements)
115
+ # 'Hello, Alice! You are 30 years old.'
116
+ # """
117
+ # if isinstance(replacements, str):
118
+ # return replacements
119
+
120
+ # if replacements is None:
121
+ # replacements = {}
122
+
123
+ # for k, v in replacements.items():
124
+ # if v is not None:
125
+ # try:
126
+ # string = string.replace("{" + k + "}", v)
127
+ # except Exception as e:
128
+ # pass
129
+ # return string
130
+
131
+
132
+ #
133
+
134
+ # EOF
scitex/str/_search.py ADDED
@@ -0,0 +1,125 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-13 14:25:59 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/str/_search.py
5
+
6
+ import re
7
+ from collections import abc
8
+
9
+ import numpy as np
10
+ import pandas as pd
11
+ import xarray as xr
12
+ from natsort import natsorted
13
+
14
+
15
+ def search(
16
+ patterns,
17
+ strings,
18
+ only_perfect_match=False,
19
+ as_bool=False,
20
+ ensure_one=False,
21
+ ):
22
+ """Search for patterns in strings using regular expressions.
23
+
24
+ Parameters
25
+ ----------
26
+ patterns : str or list of str
27
+ The pattern(s) to search for. Can be a single string or a list of strings.
28
+ strings : str or list of str
29
+ The string(s) to search in. Can be a single string or a list of strings.
30
+ only_perfect_match : bool, optional
31
+ If True, only exact matches are considered (default is False).
32
+ as_bool : bool, optional
33
+ If True, return a boolean array instead of indices (default is False).
34
+ ensure_one : bool, optional
35
+ If True, ensures only one match is found (default is False).
36
+
37
+ Returns
38
+ -------
39
+ tuple
40
+ A tuple containing two elements:
41
+ - If as_bool is False: (list of int, list of str)
42
+ The first element is a list of indices where matches were found.
43
+ The second element is a list of matched strings.
44
+ - If as_bool is True: (numpy.ndarray of bool, list of str)
45
+ The first element is a boolean array indicating matches.
46
+ The second element is a list of matched strings.
47
+
48
+ Example
49
+ -------
50
+ >>> patterns = ['orange', 'banana']
51
+ >>> strings = ['apple', 'orange', 'apple', 'apple_juice', 'banana', 'orange_juice']
52
+ >>> search(patterns, strings)
53
+ ([1, 4, 5], ['orange', 'banana', 'orange_juice'])
54
+
55
+ >>> patterns = 'orange'
56
+ >>> strings = ['apple', 'orange', 'apple', 'apple_juice', 'banana', 'orange_juice']
57
+ >>> search(patterns, strings)
58
+ ([1, 5], ['orange', 'orange_juice'])
59
+ """
60
+
61
+ def to_list(string_or_pattern):
62
+ """Convert various input types to a list.
63
+
64
+ Handles conversion of different data structures to lists for
65
+ consistent processing in the search function.
66
+
67
+ Parameters
68
+ ----------
69
+ string_or_pattern : str, list, tuple, array-like, or dict_keys
70
+ Input to be converted to list format.
71
+
72
+ Returns
73
+ -------
74
+ list
75
+ The input converted to list format.
76
+
77
+ Examples
78
+ --------
79
+ >>> to_list('hello')
80
+ ['hello']
81
+
82
+ >>> to_list(['a', 'b'])
83
+ ['a', 'b']
84
+
85
+ >>> to_list(np.array(['x', 'y']))
86
+ ['x', 'y']
87
+ """
88
+ if isinstance(string_or_pattern, (np.ndarray, pd.Series, xr.DataArray)):
89
+ return string_or_pattern.tolist()
90
+ elif isinstance(string_or_pattern, abc.KeysView):
91
+ return list(string_or_pattern)
92
+ elif not isinstance(string_or_pattern, (list, tuple, pd.Index)):
93
+ return [string_or_pattern]
94
+ return string_or_pattern
95
+
96
+ patterns = to_list(patterns)
97
+ strings = to_list(strings)
98
+
99
+ indices_matched = []
100
+ for pattern in patterns:
101
+ for index_str, string in enumerate(strings):
102
+ if only_perfect_match:
103
+ if pattern == string:
104
+ indices_matched.append(index_str)
105
+ else:
106
+ if re.search(pattern, string):
107
+ indices_matched.append(index_str)
108
+
109
+ indices_matched = natsorted(indices_matched)
110
+ keys_matched = list(np.array(strings)[indices_matched])
111
+
112
+ if ensure_one:
113
+ assert (
114
+ len(indices_matched) == 1
115
+ ), "Expected exactly one match, but found {}".format(len(indices_matched))
116
+
117
+ if as_bool:
118
+ bool_matched = np.zeros(len(strings), dtype=bool)
119
+ bool_matched[np.unique(indices_matched)] = True
120
+ return bool_matched, keys_matched
121
+ else:
122
+ return indices_matched, keys_matched
123
+
124
+
125
+ # EOF
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-02 04:04:31 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/str/_squeeze_space.py
5
+
6
+ import re
7
+
8
+
9
+ def squeeze_spaces(string, pattern=" +", repl=" "):
10
+ """Replace multiple occurrences of a pattern in a string with a single replacement.
11
+
12
+ Parameters
13
+ ----------
14
+ string : str
15
+ The input string to be processed.
16
+ pattern : str, optional
17
+ The regular expression pattern to match (default is " +", which matches one or more spaces).
18
+ repl : str or callable, optional
19
+ The replacement string or function (default is " ", a single space).
20
+
21
+ Returns
22
+ -------
23
+ str
24
+ The processed string with pattern occurrences replaced.
25
+
26
+ Example
27
+ -------
28
+ >>> squeeze_spaces("Hello world")
29
+ 'Hello world'
30
+ >>> squeeze_spaces("a---b--c-d", pattern="-+", repl="-")
31
+ 'a-b-c-d'
32
+ """
33
+ return re.sub(pattern, repl, string)
34
+
35
+
36
+ # EOF
scitex/tex/__init__.py ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env python3
2
+ """LaTeX utilities module for scitex."""
3
+
4
+ from ._preview import preview
5
+ from ._to_vec import to_vec
6
+
7
+ __all__ = [
8
+ "preview",
9
+ "to_vec",
10
+ ]
scitex/tex/_preview.py ADDED
@@ -0,0 +1,103 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2025-06-05 12:00:00 (ywatanabe)"
4
+ # File: ./src/scitex/tex/_preview.py
5
+
6
+ """
7
+ LaTeX preview functionality with fallback mechanisms.
8
+
9
+ Functionality:
10
+ - Generate previews of LaTeX strings with automatic fallback
11
+ - Handle LaTeX rendering failures gracefully
12
+ Input:
13
+ List of LaTeX strings
14
+ Output:
15
+ Matplotlib figure with previews
16
+ Prerequisites:
17
+ matplotlib, numpy, scitex.plt, scitex.str._latex_fallback
18
+ """
19
+
20
+ import numpy as np
21
+
22
+ try:
23
+ from ..str._latex_fallback import safe_latex_render, latex_fallback_decorator
24
+ FALLBACK_AVAILABLE = True
25
+ except ImportError:
26
+ FALLBACK_AVAILABLE = False
27
+ def latex_fallback_decorator(fallback_strategy="auto", preserve_math=True):
28
+ def decorator(func):
29
+ return func
30
+ return decorator
31
+
32
+ def safe_latex_render(text, fallback_strategy="auto", preserve_math=True):
33
+ return text
34
+
35
+
36
+ @latex_fallback_decorator(fallback_strategy="auto", preserve_math=True)
37
+ def preview(tex_str_list, enable_fallback=True):
38
+ r"""
39
+ Generate a preview of LaTeX strings with automatic fallback.
40
+
41
+ Parameters
42
+ ----------
43
+ tex_str_list : list of str
44
+ List of LaTeX strings to preview
45
+ enable_fallback : bool, optional
46
+ Whether to enable LaTeX fallback mechanisms, by default True
47
+
48
+ Returns
49
+ -------
50
+ matplotlib.figure.Figure
51
+ Figure containing the previews
52
+
53
+ Examples
54
+ --------
55
+ >>> tex_strings = ["x^2", r"\sum_{i=1}^n i", r"\alpha + \beta"]
56
+ >>> fig = preview(tex_strings)
57
+ >>> scitex.plt.show()
58
+
59
+ Notes
60
+ -----
61
+ If LaTeX rendering fails, this function automatically falls back to
62
+ mathtext or unicode alternatives while preserving the preview layout.
63
+ """
64
+ from ..plt import subplots
65
+
66
+ if not isinstance(tex_str_list, (list, tuple)):
67
+ tex_str_list = [tex_str_list]
68
+
69
+ fig, axes = subplots(
70
+ nrows=len(tex_str_list), ncols=1, figsize=(10, 3 * len(tex_str_list))
71
+ )
72
+ axes = np.atleast_1d(axes)
73
+
74
+ for ax, tex_string in zip(axes, tex_str_list):
75
+ try:
76
+ # Original LaTeX string (raw)
77
+ if enable_fallback and FALLBACK_AVAILABLE:
78
+ safe_raw = safe_latex_render(tex_string, "unicode", preserve_math=False)
79
+ ax.text(0.5, 0.7, safe_raw, size=20, ha="center", va="center")
80
+ else:
81
+ ax.text(0.5, 0.7, tex_string, size=20, ha="center", va="center")
82
+
83
+ # LaTeX-formatted string
84
+ latex_formatted = f"${tex_string}$" if not (tex_string.startswith("$") and tex_string.endswith("$")) else tex_string
85
+
86
+ if enable_fallback and FALLBACK_AVAILABLE:
87
+ safe_latex = safe_latex_render(latex_formatted, preserve_math=True)
88
+ ax.text(0.5, 0.3, safe_latex, size=20, ha="center", va="center")
89
+ else:
90
+ ax.text(0.5, 0.3, latex_formatted, size=20, ha="center", va="center")
91
+
92
+ except Exception as e:
93
+ # Fallback for individual preview failures
94
+ ax.text(0.5, 0.7, f"Raw: {tex_string}", size=16, ha="center", va="center")
95
+ ax.text(0.5, 0.3, f"Error: {str(e)[:50]}...", size=12, ha="center", va="center", color='red')
96
+
97
+ ax.hide_spines()
98
+
99
+ fig.tight_layout()
100
+ return fig
101
+
102
+
103
+ # EOF