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/io/_cache.py ADDED
@@ -0,0 +1,101 @@
1
+ #!./env/bin/python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-08-20 19:42:38 (ywatanabe)"
4
+ # ./src/scitex/io/_cache.py
5
+
6
+
7
+ import os
8
+ import pickle
9
+ import sys
10
+ from pathlib import Path
11
+
12
+
13
+ def cache(id, *args):
14
+ """
15
+ Store or fetch data using a pickle file.
16
+
17
+ This function provides a simple caching mechanism for storing and retrieving
18
+ Python objects. It uses pickle to serialize the data and stores it in a file
19
+ with a unique identifier. If the data is already cached, it can be retrieved
20
+ without recomputation.
21
+
22
+ Parameters:
23
+ -----------
24
+ id : str
25
+ A unique identifier for the cache file.
26
+ *args : str
27
+ Variable names to be cached or loaded.
28
+
29
+ Returns:
30
+ --------
31
+ tuple
32
+ A tuple of cached values corresponding to the input variable names.
33
+
34
+ Raises:
35
+ -------
36
+ ValueError
37
+ If the cache file is not found and not all variables are defined.
38
+
39
+ Example:
40
+ --------
41
+ >>> import scitex
42
+ >>> import numpy as np
43
+ >>>
44
+ >>> # Variables to cache
45
+ >>> var1 = "x"
46
+ >>> var2 = 1
47
+ >>> var3 = np.ones(10)
48
+ >>>
49
+ >>> # Saving
50
+ >>> var1, var2, var3 = scitex.io.cache("my_id", "var1", "var2", "var3")
51
+ >>> print(var1, var2, var3)
52
+ >>>
53
+ >>> # Loading when not all variables are defined and the id exists
54
+ >>> del var1, var2, var3
55
+ >>> var1, var2, var3 = scitex.io.cache("my_id", "var1", "var2", "var3")
56
+ >>> print(var1, var2, var3)
57
+ """
58
+ cache_dir = Path.home() / ".cache" / "your_app_name"
59
+ cache_dir.mkdir(parents=True, exist_ok=True)
60
+ cache_file = cache_dir / f"{id}.pkl"
61
+
62
+ does_cache_file_exist = cache_file.exists()
63
+
64
+ # Get the caller's local variables
65
+ caller_locals = sys._getframe(1).f_locals
66
+ are_all_variables_defined = all(arg in caller_locals for arg in args)
67
+
68
+ if are_all_variables_defined:
69
+ # If all variables are defined, save them to cache and return as-is
70
+ data_to_cache = {arg: caller_locals[arg] for arg in args}
71
+ with cache_file.open("wb") as f:
72
+ pickle.dump(data_to_cache, f)
73
+ return tuple(data_to_cache.values())
74
+ else:
75
+ if does_cache_file_exist:
76
+ # If cache exists, load and return the values
77
+ with cache_file.open("rb") as f:
78
+ loaded_data = pickle.load(f)
79
+ return tuple(loaded_data[arg] for arg in args)
80
+ else:
81
+ raise ValueError("Cache file not found and not all variables are defined.")
82
+
83
+
84
+ # Usage example
85
+ if __name__ == "__main__":
86
+ import scitex
87
+ import numpy as np
88
+
89
+ # Variables to cache
90
+ var1 = "x"
91
+ var2 = 1
92
+ var3 = np.ones(10)
93
+
94
+ # Saving
95
+ var1, var2, var3 = scitex.io.cache("my_id", "var1", "var2", "var3")
96
+ print(var1, var2, var3)
97
+
98
+ # Loading when not all variables are defined and the id exists
99
+ del var1, var2, var3
100
+ var1, var2, var3 = scitex.io.cache("my_id", "var1", "var2", "var3")
101
+ print(var1, var2, var3)
scitex/io/_flush.py ADDED
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-02 03:23:44 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/io/_flush.py
5
+
6
+ import os
7
+ import sys
8
+ import warnings
9
+
10
+
11
+ def flush(sys=sys):
12
+ """
13
+ Flushes the system's stdout and stderr, and syncs the file system.
14
+ This ensures all pending write operations are completed.
15
+ """
16
+ if sys is None:
17
+ warnings.warn("flush needs sys. Skipping.")
18
+ else:
19
+ sys.stdout.flush()
20
+ sys.stderr.flush()
21
+ os.sync()
22
+
23
+
24
+ # EOF
scitex/io/_glob.py ADDED
@@ -0,0 +1,103 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-25 00:31:08 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/io/_glob.py
5
+
6
+ THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/io/_glob.py"
7
+
8
+ import re as _re
9
+ from glob import glob as _glob
10
+ from ..str._parse import parse as _parse
11
+ from natsort import natsorted as _natsorted
12
+
13
+
14
+ def glob(expression, parse=False, ensure_one=False):
15
+ """
16
+ Perform a glob operation with natural sorting and extended pattern support.
17
+
18
+ This function extends the standard glob functionality by adding natural sorting
19
+ and support for curly brace expansion in the glob pattern.
20
+
21
+ Parameters:
22
+ -----------
23
+ expression : str
24
+ The glob pattern to match against file paths. Supports standard glob syntax
25
+ and curly brace expansion (e.g., 'dir/{a,b}/*.txt').
26
+ parse : bool, optional
27
+ Whether to parse the matched paths. Default is False.
28
+ ensure_one : bool, optional
29
+ Ensure exactly one match is found. Default is False.
30
+
31
+ Returns:
32
+ --------
33
+ Union[List[str], Tuple[List[str], List[dict]]]
34
+ If parse=False: A naturally sorted list of file paths
35
+ If parse=True: Tuple of (paths, parsed results)
36
+
37
+ Examples:
38
+ ---------
39
+ >>> glob('data/*.txt')
40
+ ['data/file1.txt', 'data/file2.txt', 'data/file10.txt']
41
+
42
+ >>> glob('data/{a,b}/*.txt')
43
+ ['data/a/file1.txt', 'data/a/file2.txt', 'data/b/file1.txt']
44
+
45
+ >>> paths, parsed = glob('data/subj_{id}/run_{run}.txt', parse=True)
46
+ >>> paths
47
+ ['data/subj_001/run_01.txt', 'data/subj_001/run_02.txt']
48
+ >>> parsed
49
+ [{'id': '001', 'run': '01'}, {'id': '001', 'run': '02'}]
50
+
51
+ >>> paths, parsed = glob('data/subj_{id}/run_{run}.txt', parse=True, ensure_one=True)
52
+ AssertionError # if more than one file matches
53
+ """
54
+ glob_pattern = _re.sub(r"{[^}]*}", "*", expression)
55
+ # Enable recursive globbing for ** patterns
56
+ recursive = "**" in glob_pattern
57
+ try:
58
+ found_paths = _natsorted(_glob(eval(glob_pattern), recursive=recursive))
59
+ except:
60
+ found_paths = _natsorted(_glob(glob_pattern, recursive=recursive))
61
+
62
+ if ensure_one:
63
+ assert len(found_paths) == 1
64
+
65
+ if parse:
66
+ parsed = [_parse(found_path, expression) for found_path in found_paths]
67
+ return found_paths, parsed
68
+
69
+ else:
70
+ return found_paths
71
+
72
+
73
+ def parse_glob(expression, ensure_one=False):
74
+ """
75
+ Convenience function for glob with parsing enabled.
76
+
77
+ Parameters:
78
+ -----------
79
+ expression : str
80
+ The glob pattern to match against file paths.
81
+ ensure_one : bool, optional
82
+ Ensure exactly one match is found. Default is False.
83
+
84
+ Returns:
85
+ --------
86
+ Tuple[List[str], List[dict]]
87
+ Matched paths and parsed results.
88
+
89
+ Examples:
90
+ ---------
91
+ >>> paths, parsed = pglob('data/subj_{id}/run_{run}.txt')
92
+ >>> paths
93
+ ['data/subj_001/run_01.txt', 'data/subj_001/run_02.txt']
94
+ >>> parsed
95
+ [{'id': '001', 'run': '01'}, {'id': '001', 'run': '02'}]
96
+
97
+ >>> paths, parsed = pglob('data/subj_{id}/run_{run}.txt', ensure_one=True)
98
+ AssertionError # if more than one file matches
99
+ """
100
+ return glob(expression, parse=True, ensure_one=ensure_one)
101
+
102
+
103
+ # EOF
scitex/io/_json2md.py ADDED
@@ -0,0 +1,113 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-12-19 15:37:46 (ywatanabe)"
4
+ # File: ./Ninja/workspace/formats/json2md.py
5
+
6
+ THIS_FILE = "/home/ywatanabe/.emacs.d/lisp/Ninja/workspace/formats/json2md.py"
7
+
8
+ import json
9
+ import sys
10
+ import argparse
11
+
12
+
13
+ def json2md(obj, level=1):
14
+ output = []
15
+ if isinstance(obj, dict):
16
+ for key, value in obj.items():
17
+ if output: # Add extra newline between sections
18
+ output.append("")
19
+ output.append("#" * level + " " + str(key))
20
+ if isinstance(value, (dict, list)):
21
+ output.append(json2md(value, level + 1))
22
+ else:
23
+ output.append(str(value) + "\n")
24
+ elif isinstance(obj, list):
25
+ for item in obj:
26
+ if isinstance(item, (dict, list)):
27
+ output.append(json2md(item, level))
28
+ else:
29
+ output.append("* " + str(item))
30
+ return "\n".join(filter(None, output))
31
+
32
+
33
+ def main():
34
+ parser = argparse.ArgumentParser(description="Convert JSON to Markdown")
35
+ parser.add_argument("input", help="Input JSON file")
36
+ parser.add_argument("-o", "--output", help="Output file (default: stdout)")
37
+ args = parser.parse_args()
38
+
39
+ try:
40
+ with open(args.input, "r") as f:
41
+ data = json.load(f)
42
+
43
+ result = json2md(data)
44
+
45
+ if args.output:
46
+ with open(args.output, "w") as f:
47
+ f.write(result)
48
+ else:
49
+ print(result)
50
+
51
+ except FileNotFoundError:
52
+ print(f"Error: File {args.input} not found", file=sys.stderr)
53
+ sys.exit(1)
54
+
55
+
56
+ if __name__ == "__main__":
57
+ main()
58
+
59
+ """
60
+ python ./Ninja/workspace/formats/json2md.py
61
+ python -m workspace.formats.json2md
62
+ """
63
+ # EOF
64
+
65
+ # #!/usr/bin/env python3
66
+ # # -*- coding: utf-8 -*-
67
+ # # Time-stamp: "2024-12-19 15:29:28 (ywatanabe)"
68
+ # # File: ./Ninja/workspace/formats/json2md.py
69
+
70
+ # THIS_FILE = "/home/ywatanabe/.emacs.d/lisp/Ninja/workspace/formats/json2md.py"
71
+
72
+ # import json
73
+ # import sys
74
+
75
+ # def json2md(obj, level=1):
76
+ # output = []
77
+ # if isinstance(obj, dict):
78
+ # for key, value in obj.items():
79
+ # if output: # Add extra newline between sections
80
+ # output.append("")
81
+ # output.append("#" * level + " " + str(key))
82
+ # if isinstance(value, (dict, list)):
83
+ # output.append(json2md(value, level + 1))
84
+ # else:
85
+ # output.append(str(value) + "\n")
86
+ # elif isinstance(obj, list):
87
+ # for item in obj:
88
+ # if isinstance(item, (dict, list)):
89
+ # output.append(json2md(item, level))
90
+ # else:
91
+ # output.append("* " + str(item))
92
+ # return "\n".join(filter(None, output))
93
+
94
+ # def main():
95
+ # if len(sys.argv) != 2:
96
+ # print("Usage: json2md.py <input.json>")
97
+ # sys.exit(1)
98
+
99
+ # lpath = sys.argv[1].replace("/./", "/")
100
+ # with open(lpath, "r") as f:
101
+ # data = json.load(f)
102
+
103
+
104
+ # if __name__ == "__main__":
105
+ # main()
106
+
107
+
108
+ # """
109
+ # python ./Ninja/workspace/formats/json2md.py
110
+ # python -m workspace.formats.json2md
111
+ # """
112
+
113
+ # # EOF
scitex/io/_load.py ADDED
@@ -0,0 +1,168 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-04-10 08:05:53 (ywatanabe)"
4
+ # File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/io/_load.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "/ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/io/_load.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ from typing import Any
13
+ import glob
14
+ from ..decorators import preserve_doc
15
+ from ..str._clean_path import clean_path
16
+
17
+ # from ._load_modules._catboost import _load_catboost
18
+ from ._load_modules._con import _load_con
19
+ from ._load_modules._db import _load_sqlite3db
20
+ from ._load_modules._docx import _load_docx
21
+ from ._load_modules._eeg import _load_eeg_data
22
+ from ._load_modules._hdf5 import _load_hdf5
23
+ from ._load_modules._image import _load_image
24
+ from ._load_modules._joblib import _load_joblib
25
+ from ._load_modules._json import _load_json
26
+ from ._load_modules._markdown import _load_markdown
27
+ from ._load_modules._numpy import _load_npy
28
+ from ._load_modules._matlab import _load_matlab
29
+ from ._load_modules._pandas import _load_csv, _load_excel, _load_tsv
30
+ from ._load_modules._pdf import _load_pdf
31
+ from ._load_modules._pickle import _load_pickle
32
+ from ._load_modules._torch import _load_torch
33
+ from ._load_modules._txt import _load_txt
34
+ from ._load_modules._xml import _load_xml
35
+ from ._load_modules._yaml import _load_yaml
36
+ from ._load_modules._matlab import _load_matlab
37
+
38
+
39
+ def load(lpath: str, show: bool = False, verbose: bool = False, **kwargs) -> Any:
40
+ """
41
+ Load data from various file formats.
42
+
43
+ This function supports loading data from multiple file formats.
44
+
45
+ Parameters
46
+ ----------
47
+ lpath : str
48
+ The path to the file to be loaded.
49
+ show : bool, optional
50
+ If True, display additional information during loading. Default is False.
51
+ verbose : bool, optional
52
+ If True, print verbose output during loading. Default is False.
53
+ **kwargs : dict
54
+ Additional keyword arguments to be passed to the specific loading function.
55
+
56
+ Returns
57
+ -------
58
+ object
59
+ The loaded data object, which can be of various types depending on the input file format.
60
+
61
+ Raises
62
+ ------
63
+ ValueError
64
+ If the file extension is not supported.
65
+ FileNotFoundError
66
+ If the specified file does not exist.
67
+
68
+ Supported Extensions
69
+ -------------------
70
+ - Data formats: .csv, .tsv, .xls, .xlsx, .xlsm, .xlsb, .json, .yaml, .yml
71
+ - Scientific: .npy, .npz, .mat, .hdf5, .con
72
+ - ML/DL: .pth, .pt, .cbm, .joblib, .pkl
73
+ - Documents: .txt, .log, .event, .md, .docx, .pdf, .xml
74
+ - Images: .jpg, .png, .tiff, .tif
75
+ - EEG data: .vhdr, .vmrk, .edf, .bdf, .gdf, .cnt, .egi, .eeg, .set
76
+ - Database: .db
77
+
78
+ Examples
79
+ --------
80
+ >>> data = load('data.csv')
81
+ >>> image = load('image.png')
82
+ >>> model = load('model.pth')
83
+ """
84
+ lpath = clean_path(lpath)
85
+
86
+ # Check if it's a glob pattern
87
+ if "*" in lpath or "?" in lpath or "[" in lpath:
88
+ # Handle glob pattern
89
+ matched_files = sorted(glob.glob(lpath))
90
+ if not matched_files:
91
+ raise FileNotFoundError(f"No files found matching pattern: {lpath}")
92
+ # Load all matched files
93
+ results = []
94
+ for file_path in matched_files:
95
+ results.append(load(file_path, show=show, verbose=verbose, **kwargs))
96
+ return results
97
+
98
+ if not os.path.exists(lpath):
99
+ raise FileNotFoundError(f"{lpath} not found.")
100
+
101
+ loaders_dict = {
102
+ # Default
103
+ "": _load_txt,
104
+ # Config/Settings
105
+ "yaml": _load_yaml,
106
+ "yml": _load_yaml,
107
+ "json": _load_json,
108
+ "xml": _load_xml,
109
+ # ML/DL Models
110
+ "pth": _load_torch,
111
+ "pt": _load_torch,
112
+ # "cbm": _load_catboost,
113
+ "joblib": _load_joblib,
114
+ "pkl": _load_pickle,
115
+ "pickle": _load_pickle,
116
+ "gz": _load_pickle, # For .pkl.gz files
117
+ # Tabular Data
118
+ "csv": _load_csv,
119
+ "tsv": _load_tsv,
120
+ "xls": _load_excel,
121
+ "xlsx": _load_excel,
122
+ "xlsm": _load_excel,
123
+ "xlsb": _load_excel,
124
+ "db": _load_sqlite3db,
125
+ # Scientific Data
126
+ "npy": _load_npy,
127
+ "npz": _load_npy,
128
+ "mat": _load_matlab,
129
+ "hdf5": _load_hdf5,
130
+ "h5": _load_hdf5,
131
+ "con": _load_con,
132
+ # Documents
133
+ "txt": _load_txt,
134
+ "tex": _load_txt,
135
+ "log": _load_txt,
136
+ "event": _load_txt,
137
+ "py": _load_txt,
138
+ "sh": _load_txt,
139
+ "md": _load_markdown,
140
+ "docx": _load_docx,
141
+ "pdf": _load_pdf,
142
+ # Images
143
+ "jpg": _load_image,
144
+ "png": _load_image,
145
+ "tiff": _load_image,
146
+ "tif": _load_image,
147
+ # EEG Data
148
+ "vhdr": _load_eeg_data,
149
+ "vmrk": _load_eeg_data,
150
+ "edf": _load_eeg_data,
151
+ "bdf": _load_eeg_data,
152
+ "gdf": _load_eeg_data,
153
+ "cnt": _load_eeg_data,
154
+ "egi": _load_eeg_data,
155
+ "eeg": _load_eeg_data,
156
+ "set": _load_eeg_data,
157
+ }
158
+
159
+ ext = lpath.split(".")[-1] if "." in lpath else ""
160
+ loader = preserve_doc(loaders_dict.get(ext, _load_txt))
161
+
162
+ try:
163
+ return loader(lpath, **kwargs)
164
+ except (ValueError, FileNotFoundError) as e:
165
+ raise ValueError(f"Error loading file {lpath}: {str(e)}")
166
+
167
+
168
+ # EOF
@@ -0,0 +1,146 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-04-22 07:19:03 (ywatanabe)"
4
+ # File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/io/_load_configs.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "/ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/io/_load_configs.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/io/_load_configs.py"
13
+ #!/usr/bin/env python3
14
+ # -*- coding: utf-8 -*-
15
+ # Time-stamp: "2025-02-27 11:09:00 (ywatanabe)"
16
+ # File: ./scitex_repo/src/scitex/io/_load_configs.py
17
+
18
+ from ..dict import DotDict
19
+ from ._load import load
20
+ from ._glob import glob
21
+
22
+
23
+ def load_configs(IS_DEBUG=None, show=False, verbose=False):
24
+ """Load YAML configuration files from ./config directory.
25
+
26
+ Parameters
27
+ ----------
28
+ IS_DEBUG : bool, optional
29
+ Debug mode flag. If None, reads from IS_DEBUG.yaml
30
+ show : bool
31
+ Show configuration changes
32
+ verbose : bool
33
+ Print detailed information
34
+
35
+ Returns
36
+ -------
37
+ DotDict
38
+ Merged configuration dictionary
39
+ """
40
+
41
+ def apply_debug_values(config, IS_DEBUG):
42
+ """Apply debug values if IS_DEBUG is True."""
43
+ if not IS_DEBUG or not isinstance(config, (dict, DotDict)):
44
+ return config
45
+
46
+ for key, value in list(config.items()):
47
+ if key.startswith(("DEBUG_", "debug_")):
48
+ dk_wo_debug_prefix = key.split("_", 1)[1]
49
+ config[dk_wo_debug_prefix] = value
50
+ if show or verbose:
51
+ print(f"{key} -> {dk_wo_debug_prefix}")
52
+ elif isinstance(value, (dict, DotDict)):
53
+ config[key] = apply_debug_values(value, IS_DEBUG)
54
+ return config
55
+
56
+ try:
57
+ # Set debug mode
58
+ IS_DEBUG = (
59
+ IS_DEBUG
60
+ or os.getenv("CI") == "True"
61
+ or (
62
+ os.path.exists("./config/IS_DEBUG.yaml")
63
+ and load("./config/IS_DEBUG.yaml").get("IS_DEBUG")
64
+ )
65
+ )
66
+
67
+ # Load and merge configs
68
+ CONFIGS = {}
69
+ for lpath in glob("./config/*.yaml"):
70
+ if config := load(lpath):
71
+ CONFIGS.update(apply_debug_values(config, IS_DEBUG))
72
+
73
+ return DotDict(CONFIGS)
74
+
75
+ except Exception as e:
76
+ print(f"Error loading configs: {e}")
77
+ return DotDict({})
78
+
79
+
80
+ # def load_configs(IS_DEBUG=None, show=False, verbose=False):
81
+ # """
82
+ # Load configuration files from the ./config directory.
83
+
84
+ # Parameters:
85
+ # -----------
86
+ # IS_DEBUG : bool, optional
87
+ # If True, use debug configurations. If None, check ./config/IS_DEBUG.yaml.
88
+ # show : bool, optional
89
+ # If True, display additional information during loading.
90
+ # verbose : bool, optional
91
+ # If True, print verbose output during loading.
92
+
93
+ # Returns:
94
+ # --------
95
+ # DotDict
96
+ # A dictionary-like object containing the loaded configurations.
97
+ # """
98
+
99
+ # def apply_debug_values(config, IS_DEBUG):
100
+ # if IS_DEBUG:
101
+ # if isinstance(config, (dict, DotDict)):
102
+ # for key, value in list(config.items()):
103
+ # try:
104
+ # if key.startswith(("DEBUG_", "debug_")):
105
+ # dk_wo_debug_prefix = key.split("_", 1)[1]
106
+ # config[dk_wo_debug_prefix] = value
107
+ # if show or verbose:
108
+ # print(f"\n{key} -> {dk_wo_debug_prefix}\n")
109
+ # elif isinstance(value, (dict, DotDict)):
110
+ # config[key] = apply_debug_values(value, IS_DEBUG)
111
+ # except Exception as e:
112
+ # print(e)
113
+ # return config
114
+
115
+ # if os.getenv("CI") == "True":
116
+ # IS_DEBUG = True
117
+
118
+ # try:
119
+ # # Check ./config/IS_DEBUG.yaml file if IS_DEBUG argument is not passed
120
+ # if IS_DEBUG is None:
121
+ # IS_DEBUG_PATH = "./config/IS_DEBUG.yaml"
122
+ # if os.path.exists(IS_DEBUG_PATH):
123
+ # IS_DEBUG = load("./config/IS_DEBUG.yaml").get("IS_DEBUG")
124
+ # else:
125
+ # IS_DEBUG = False
126
+
127
+ # # Main
128
+ # CONFIGS = {}
129
+ # for lpath in glob("./config/*.yaml"):
130
+ # config = load(lpath)
131
+ # if config:
132
+ # CONFIG = apply_debug_values(config, IS_DEBUG)
133
+ # CONFIGS.update(CONFIG)
134
+
135
+ # CONFIGS = DotDict(CONFIGS)
136
+
137
+ # except Exception as e:
138
+ # print(e)
139
+ # CONFIGS = DotDict({})
140
+
141
+ # return CONFIGS
142
+
143
+
144
+ #
145
+
146
+ # EOF
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-14 07:41:25 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/io/_load_modules/__init__.py
5
+
6
+ import importlib as __importlib
7
+ import inspect as __inspect
8
+ import os as __os
9
+
10
+ # Get the current directory
11
+ current_dir = __os.path.dirname(__file__)
12
+
13
+ # Iterate through all Python files in the current directory
14
+ for filename in __os.listdir(current_dir):
15
+ if filename.endswith(".py") and not filename.startswith("__"):
16
+ module_name = filename[:-3] # Remove .py extension
17
+ module = __importlib.import_module(f".{module_name}", package=__name__)
18
+
19
+ # Import only functions and classes from the module
20
+ for name, obj in __inspect.getmembers(module):
21
+ if __inspect.isfunction(obj) or __inspect.isclass(obj):
22
+ if not name.startswith("_"):
23
+ globals()[name] = obj
24
+
25
+ # Clean up temporary variables
26
+ del (
27
+ __os,
28
+ __importlib,
29
+ __inspect,
30
+ current_dir,
31
+ filename,
32
+ module_name,
33
+ module,
34
+ name,
35
+ obj,
36
+ )
37
+
38
+ # EOF