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,66 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-12-12 06:50:19 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/io/_load_modules/_catboost.py
5
+
6
+ from typing import Union
7
+
8
+ try:
9
+ from catboost import CatBoostClassifier, CatBoostRegressor
10
+ CATBOOST_AVAILABLE = True
11
+ except ImportError:
12
+ CATBOOST_AVAILABLE = False
13
+ # Create placeholder classes for testing
14
+ class CatBoostClassifier:
15
+ pass
16
+ class CatBoostRegressor:
17
+ pass
18
+
19
+
20
+ def _load_catboost(
21
+ lpath: str, **kwargs
22
+ ) -> Union["CatBoostClassifier", "CatBoostRegressor"]:
23
+ """
24
+ Loads a CatBoost model from a file.
25
+
26
+ Parameters
27
+ ----------
28
+ lpath : str
29
+ Path to the CatBoost model file (.cbm extension)
30
+ **kwargs : dict
31
+ Additional keyword arguments passed to load_model method
32
+
33
+ Returns
34
+ -------
35
+ Union[CatBoostClassifier, CatBoostRegressor]
36
+ Loaded CatBoost model object
37
+
38
+ Raises
39
+ ------
40
+ ValueError
41
+ If file extension is not .cbm
42
+ FileNotFoundError
43
+ If model file does not exist
44
+ ImportError
45
+ If CatBoost is not installed
46
+
47
+ Examples
48
+ --------
49
+ >>> model = _load_catboost('model.cbm')
50
+ >>> predictions = model.predict(X_test)
51
+ """
52
+ if not CATBOOST_AVAILABLE:
53
+ raise ImportError("CatBoost is not installed. Please install with: pip install catboost")
54
+
55
+ if not (lpath.endswith(".cbm") or lpath.endswith(".CBM")):
56
+ raise ValueError("File must have .cbm extension")
57
+
58
+ try:
59
+ model = CatBoostClassifier().load_model(lpath, **kwargs)
60
+ except:
61
+ model = CatBoostRegressor().load_model(lpath, **kwargs)
62
+
63
+ return model
64
+
65
+
66
+ # EOF
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-14 07:51:45 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/io/_load_modules/_con.py
5
+
6
+ from typing import Any
7
+
8
+ import mne
9
+
10
+
11
+ def _load_con(lpath: str, **kwargs) -> Any:
12
+ if not lpath.endswith(".con"):
13
+ raise ValueError("File must have .con extension")
14
+ obj = mne.io.read_raw_fif(lpath, preload=True, **kwargs)
15
+ obj = obj.to_data_frame()
16
+ obj["samp_rate"] = obj.info["sfreq"]
17
+ return obj
18
+
19
+
20
+ # EOF
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-25 11:50:05 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/io/_load_modules/_db.py
5
+
6
+ THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/io/_load_modules/_db.py"
7
+
8
+ from typing import Any
9
+
10
+ from ...db._SQLite3 import SQLite3
11
+
12
+
13
+ def _load_sqlite3db(lpath: str, use_temp=False) -> Any:
14
+ if not lpath.endswith(".db"):
15
+ raise ValueError("File must have .db extension")
16
+ try:
17
+ obj = SQLite3(lpath, use_temp=use_temp)
18
+
19
+ return obj
20
+ except Exception as e:
21
+ raise ValueError(str(e))
22
+
23
+
24
+ # EOF
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-14 07:55:35 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/io/_load_modules/_docx.py
5
+
6
+ from typing import Any
7
+
8
+
9
+ def _load_docx(lpath: str, **kwargs) -> Any:
10
+ """
11
+ Load and extract text content from a .docx file.
12
+
13
+ Parameters:
14
+ -----------
15
+ lpath : str
16
+ The path to the .docx file.
17
+
18
+ Returns:
19
+ --------
20
+ str
21
+ The extracted text content from the .docx file.
22
+
23
+ Raises:
24
+ -------
25
+ FileNotFoundError
26
+ If the specified file does not exist.
27
+ docx.opc.exceptions.PackageNotFoundError
28
+ If the file is not a valid .docx file.
29
+ """
30
+ if not lpath.endswith(".docx"):
31
+ raise ValueError("File must have .docx extension")
32
+
33
+ from docx import Document
34
+
35
+ doc = Document(lpath)
36
+ full_text = []
37
+ for para in doc.paragraphs:
38
+ full_text.append(para.text)
39
+ return "".join(full_text)
40
+
41
+
42
+ # EOF
@@ -0,0 +1,110 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-14 07:56:27 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/io/_load_modules/_eeg.py
5
+
6
+ import os
7
+ import warnings
8
+ from typing import Any
9
+
10
+ import mne
11
+
12
+
13
+ def _load_eeg_data(path: str, **kwargs) -> Any:
14
+ """
15
+ Load EEG data based on file extension and associated files using MNE-Python.
16
+
17
+ This function supports various EEG file formats including BrainVision, EDF, BDF, GDF, CNT, EGI, and SET.
18
+ It also handles special cases for .eeg files (BrainVision and Nihon Koden).
19
+
20
+ Parameters:
21
+ -----------
22
+ lpath : str
23
+ The path to the EEG file to be loaded.
24
+ **kwargs : dict
25
+ Additional keyword arguments to be passed to the specific MNE loading function.
26
+
27
+ Returns:
28
+ --------
29
+ raw : mne.io.Raw
30
+ The loaded raw EEG data.
31
+
32
+ Raises:
33
+ -------
34
+ ValueError
35
+ If the file extension is not supported.
36
+
37
+ Notes:
38
+ ------
39
+ This function uses MNE-Python to load the EEG data. It automatically detects the file format
40
+ based on the file extension and uses the appropriate MNE function to load the data.
41
+ """
42
+ # Get the file extension
43
+ extension = lpath.split(".")[-1]
44
+
45
+ allowed_extensions = [
46
+ ".vhdr",
47
+ ".vmrk",
48
+ ".edf",
49
+ ".bdf",
50
+ ".gdf",
51
+ ".cnt",
52
+ ".egi",
53
+ ".eeg",
54
+ ".set",
55
+ ]
56
+
57
+ if extension not in allowed_extensions:
58
+ raise ValueError(
59
+ f"File must have one of these extensions: {', '.join(allowed_extensions)}"
60
+ )
61
+
62
+ with warnings.catch_warnings():
63
+ warnings.simplefilter("ignore", RuntimeWarning)
64
+
65
+ # Load the data based on the file extension
66
+ if extension in ["vhdr", "vmrk"]:
67
+ # Load BrainVision data
68
+ raw = mne.io.read_raw_brainvision(lpath, preload=True, **kwargs)
69
+ elif extension == "edf":
70
+ # Load European data format
71
+ raw = mne.io.read_raw_edf(lpath, preload=True, **kwargs)
72
+ elif extension == "bdf":
73
+ # Load BioSemi data format
74
+ raw = mne.io.read_raw_bdf(lpath, preload=True, **kwargs)
75
+ elif extension == "gdf":
76
+ # Load Gen data format
77
+ raw = mne.io.read_raw_gdf(lpath, preload=True, **kwargs)
78
+ elif extension == "cnt":
79
+ # Load Neuroscan CNT data
80
+ raw = mne.io.read_raw_cnt(lpath, preload=True, **kwargs)
81
+ elif extension == "egi":
82
+ # Load EGI simple binary data
83
+ raw = mne.io.read_raw_egi(lpath, preload=True, **kwargs)
84
+ elif extension == "set":
85
+ # ???
86
+ raw = mne.io.read_raw(lpath, preload=True, **kwargs)
87
+ elif extension == "eeg":
88
+ is_BrainVision = any(
89
+ os.path.isfile(lpath.replace(".eeg", ext)) for ext in [".vhdr", ".vmrk"]
90
+ )
91
+ is_NihonKoden = any(
92
+ os.path.isfile(lpath.replace(".eeg", ext))
93
+ for ext in [".21e", ".pnt", ".log"]
94
+ )
95
+
96
+ # Brain Vision
97
+ if is_BrainVision:
98
+ lpath_v = lpath.replace(".eeg", ".vhdr")
99
+ raw = mne.io.read_raw_brainvision(lpath_v, preload=True, **kwargs)
100
+ # Nihon Koden
101
+ if is_NihonKoden:
102
+ # raw = mne.io.read_raw_nihon(lpath, preload=True, **kwargs)
103
+ raw = mne.io.read_raw(lpath, preload=True, **kwargs)
104
+ else:
105
+ raise ValueError(f"Unsupported file extension: {extension}")
106
+
107
+ return raw
108
+
109
+
110
+ # EOF
@@ -0,0 +1,196 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-06-16 17:40:55 (ywatanabe)"
4
+ # File: /ssh:sp:/home/ywatanabe/proj/SciTeX-Code/src/scitex/io/_load_modules/_hdf5.py
5
+ # ----------------------------------------
6
+ import os
7
+ __FILE__ = (
8
+ "./src/scitex/io/_load_modules/_hdf5.py"
9
+ )
10
+ __DIR__ = os.path.dirname(__FILE__)
11
+ # ----------------------------------------
12
+
13
+ import warnings
14
+ from typing import Any
15
+
16
+ import h5py
17
+ import numpy as np
18
+
19
+ # Time-stamp: "2024-11-14 07:55:37 (ywatanabe)"
20
+
21
+
22
+
23
+
24
+ def _load_group(group):
25
+ """Recursively load an HDF5 group."""
26
+ obj = {}
27
+ for key in group.keys():
28
+ if isinstance(group[key], h5py.Group):
29
+ # Recursively load subgroups
30
+ obj[key] = _load_group(group[key])
31
+ else:
32
+ # Load dataset
33
+ dataset = group[key]
34
+ # Check if it's a scalar dataset
35
+ if dataset.shape == ():
36
+ data = dataset[()]
37
+ else:
38
+ data = dataset[:]
39
+
40
+ # Decode bytes to string if needed
41
+ if isinstance(data, bytes):
42
+ obj[key] = data.decode("utf-8")
43
+ elif isinstance(data, np.void):
44
+ # Handle pickled data
45
+ import pickle
46
+
47
+ obj[key] = pickle.loads(data.tobytes())
48
+ else:
49
+ obj[key] = data
50
+ # Load attributes
51
+ for key in group.attrs.keys():
52
+ obj[key] = group.attrs[key]
53
+ return obj
54
+
55
+
56
+ def _load_hdf5(lpath: str, key: str = None, **kwargs) -> Any:
57
+ """Load HDF5 file with automatic group/root switching."""
58
+ try:
59
+ with h5py.File(lpath, "r") as hf:
60
+ if key:
61
+ if key not in hf:
62
+ return None
63
+ target = hf[key]
64
+ else:
65
+ target = hf
66
+
67
+ obj = {}
68
+ for key_name in target.keys():
69
+ try:
70
+ if isinstance(target[key_name], h5py.Group):
71
+ obj[key_name] = _load_group(target[key_name])
72
+ else:
73
+ dataset = target[key_name]
74
+ if dataset.shape == ():
75
+ data = dataset[()]
76
+ else:
77
+ data = dataset[:]
78
+
79
+ if isinstance(data, bytes):
80
+ obj[key_name] = data.decode("utf-8")
81
+ elif isinstance(data, np.void):
82
+ import pickle
83
+
84
+ obj[key_name] = pickle.loads(data.tobytes())
85
+ else:
86
+ obj[key_name] = data
87
+ except (RuntimeError, OSError) as e:
88
+ print(f"Warning: Could not load key '{key_name}': {e}")
89
+ continue
90
+
91
+ for attr_name in target.attrs.keys():
92
+ obj[attr_name] = target.attrs[attr_name]
93
+ return obj
94
+
95
+ except (RuntimeError, OSError) as e:
96
+ key_warning_str = f" with {key}" if key else ""
97
+ warnings.warn(f"Error loading {lpath}{key_warning_str}:\n{e}")
98
+ return None
99
+
100
+
101
+ # def _load_hdf5(lpath: str, key: str = None, **kwargs) -> Any:
102
+ # """Load HDF5 file with automatic group/root switching."""
103
+ # with h5py.File(lpath, "r") as hf:
104
+ # if key:
105
+ # if key not in hf:
106
+ # return None
107
+ # target = hf[key]
108
+ # else:
109
+ # target = hf
110
+
111
+ # obj = {}
112
+ # for key in target.keys():
113
+ # if isinstance(target[key], h5py.Group):
114
+ # # Recursively load groups
115
+ # obj[key] = _load_group(target[key])
116
+ # else:
117
+ # # Load dataset
118
+ # dataset = target[key]
119
+ # # Check if it's a scalar dataset
120
+ # if dataset.shape == ():
121
+ # data = dataset[()]
122
+ # else:
123
+ # data = dataset[:]
124
+
125
+ # # Decode bytes to string if needed
126
+ # if isinstance(data, bytes):
127
+ # obj[key] = data.decode("utf-8")
128
+ # elif isinstance(data, np.void):
129
+ # # Handle pickled data
130
+ # import pickle
131
+
132
+ # obj[key] = pickle.loads(data.tobytes())
133
+ # else:
134
+ # obj[key] = data
135
+ # for key in target.attrs.keys():
136
+ # obj[key] = target.attrs[key]
137
+ # return obj
138
+
139
+ # def _load_hdf5(lpath: str, **kwargs) -> Any:
140
+ # """Load HDF5 file."""
141
+ # if not (lpath.endswith(".hdf5") or lpath.endswith(".h5")):
142
+ # raise ValueError("File must have .hdf5 or .h5 extension")
143
+
144
+ # def load_item(item):
145
+ # """Recursively load items from HDF5."""
146
+ # if isinstance(item, h5py.Group):
147
+ # # Load groups as nested dicts
148
+ # result = {}
149
+ # for key in item.keys():
150
+ # result[key] = load_item(item[key])
151
+ # return result
152
+ # elif isinstance(item, h5py.Dataset):
153
+ # # Load datasets
154
+ # data = item[()]
155
+ # # Check if it's a pickled object
156
+ # if isinstance(data, np.void):
157
+ # import pickle
158
+
159
+ # return pickle.loads(data.tobytes())
160
+ # # Convert bytes to string
161
+ # elif isinstance(data, bytes):
162
+ # return data.decode("utf-8")
163
+ # # Convert numpy scalars to Python types
164
+ # elif isinstance(data, np.integer):
165
+ # return int(data)
166
+ # elif isinstance(data, np.floating):
167
+ # return float(data)
168
+ # elif isinstance(data, np.bool_):
169
+ # return bool(data)
170
+ # else:
171
+ # return data
172
+ # else:
173
+ # return item
174
+
175
+ # with h5py.File(lpath, "r") as hf:
176
+ # return load_item(hf)
177
+
178
+ # def _load_hdf5_group(lpath: str, key: str = None, **kwargs) -> Any:
179
+ # """Load specific group from HDF5 file."""
180
+ # with h5py.File(lpath, "r") as hf:
181
+ # if key:
182
+ # if key not in hf:
183
+ # return None
184
+ # group = hf[key]
185
+ # result = {}
186
+ # for key in group.keys():
187
+ # result[key] = group[key][:]
188
+ # for key in group.attrs.keys():
189
+ # result[key] = group.attrs[key]
190
+ # return result
191
+ # else:
192
+ # return _load_hdf5(lpath, **kwargs)
193
+
194
+ # # EOF
195
+
196
+ # EOF
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-14 07:55:38 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/io/_load_modules/_image.py
5
+
6
+ from typing import Any
7
+
8
+ from PIL import Image
9
+
10
+
11
+ def _load_image(lpath: str, **kwargs) -> Any:
12
+ """Load image file."""
13
+ supported_exts = [".jpg", ".jpeg", ".png", ".tiff", ".tif"]
14
+ if not any(lpath.lower().endswith(ext) for ext in supported_exts):
15
+ raise ValueError("Unsupported image format")
16
+ return Image.open(lpath, **kwargs)
17
+
18
+
19
+ # EOF
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-14 07:55:39 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/io/_load_modules/_joblib.py
5
+
6
+ from typing import Any
7
+
8
+ import joblib
9
+
10
+
11
+ def _load_joblib(lpath: str, **kwargs) -> Any:
12
+ """Load joblib file."""
13
+ if not lpath.endswith(".joblib"):
14
+ raise ValueError("File must have .joblib extension")
15
+ with open(lpath, "rb") as f:
16
+ return joblib.load(f, **kwargs)
17
+
18
+
19
+ # EOF
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-14 07:55:40 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/io/_load_modules/_json.py
5
+
6
+ import json
7
+ from typing import Any
8
+
9
+
10
+ def _load_json(lpath: str, **kwargs) -> Any:
11
+ """Load JSON file."""
12
+ if not lpath.endswith(".json"):
13
+ raise ValueError("File must have .json extension")
14
+ with open(lpath, "r") as f:
15
+ return json.load(f)
16
+
17
+
18
+ # EOF
@@ -0,0 +1,103 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-14 07:55:42 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/io/_load_modules/_markdown.py
5
+
6
+
7
+ def _load_markdown(lpath_md, style="plain_text", **kwargs):
8
+ """
9
+ Load and convert Markdown content from a file.
10
+
11
+ This function reads a Markdown file and converts it to either HTML or plain text format.
12
+
13
+ Parameters:
14
+ -----------
15
+ lpath_md : str
16
+ The path to the Markdown file to be loaded.
17
+ style : str, optional
18
+ The output style of the converted content.
19
+ Options are "html" or "plain_text" (default).
20
+
21
+ Returns:
22
+ --------
23
+ str
24
+ The converted content of the Markdown file, either as HTML or plain text.
25
+
26
+ Raises:
27
+ -------
28
+ FileNotFoundError
29
+ If the specified file does not exist.
30
+ IOError
31
+ If there's an error reading the file.
32
+ ValueError
33
+ If an invalid style option is provided.
34
+
35
+ Notes:
36
+ ------
37
+ This function uses the 'markdown' library to convert Markdown to HTML,
38
+ and 'html2text' to convert HTML to plain text when necessary.
39
+ """
40
+ import html2text
41
+ import markdown
42
+
43
+ # Load Markdown content from a file
44
+ with open(lpath_md, "r") as file:
45
+ markdown_content = file.read()
46
+
47
+ # Convert Markdown to HTML
48
+ html_content = markdown.markdown(markdown_content)
49
+ if style == "html":
50
+ return html_content
51
+ elif style == "plain_text":
52
+ text_maker = html2text.HTML2Text()
53
+ text_maker.ignore_links = True
54
+ text_maker.bypass_tables = False
55
+ plain_text = text_maker.handle(html_content)
56
+ return plain_text
57
+ else:
58
+ raise ValueError("Invalid style option. Choose 'html' or 'plain_text'.")
59
+
60
+
61
+ def load_markdown(lpath_md, style="plain_text"):
62
+ """
63
+ Load and convert a Markdown file to either HTML or plain text.
64
+
65
+ Parameters:
66
+ -----------
67
+ lpath_md : str
68
+ The path to the Markdown file.
69
+ style : str, optional
70
+ The output style, either "html" or "plain_text" (default).
71
+
72
+ Returns:
73
+ --------
74
+ str
75
+ The converted content of the Markdown file.
76
+ """
77
+ import html2text
78
+ import markdown
79
+
80
+ # Load Markdown content from a file
81
+ with open(lpath_md, "r") as file:
82
+ markdown_content = file.read()
83
+
84
+ # Convert Markdown to HTML
85
+ html_content = markdown.markdown(markdown_content)
86
+ if style == "html":
87
+ return html_content
88
+
89
+ elif style == "plain_text":
90
+ text_maker = html2text.HTML2Text()
91
+ text_maker.ignore_links = True
92
+ text_maker.bypass_tables = False
93
+ plain_text = text_maker.handle(html_content)
94
+
95
+ return plain_text
96
+
97
+
98
+ # def _load_markdown(lpath):
99
+ # md_text = StringIO(lpath.read().decode("utf-8"))
100
+ # html = markdown.markdown(md_text.read())
101
+ # return html
102
+
103
+ # EOF
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-04-10 08:07:03 (ywatanabe)"
4
+ # File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/io/_load_modules/_matlab.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "/ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/io/_load_modules/_matlab.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ from typing import Any
13
+
14
+
15
+ def _load_matlab(lpath: str, **kwargs) -> Any:
16
+ """Load MATLAB file."""
17
+ if not lpath.endswith(".mat"):
18
+ raise ValueError("File must have .mat extension")
19
+
20
+ # Try using scipy.io first for binary .mat files
21
+ try:
22
+ # For MATLAB v7.3 files (HDF5 format)
23
+ from scipy.io import loadmat
24
+
25
+ return loadmat(lpath, **kwargs)
26
+ except Exception as e1:
27
+ # If scipy fails, try pymatreader or older MAT files
28
+ try:
29
+ from pymatreader import read_mat
30
+
31
+ return read_mat(lpath, **kwargs)
32
+ except Exception as e2:
33
+ # Both methods failed
34
+ raise ValueError(f"Error loading file {lpath}: {str(e1)}\nAnd: {str(e2)}")
35
+
36
+
37
+ # EOF