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,39 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-14 07:55:44 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/io/_load_modules/_numpy.py
5
+
6
+ from typing import Any
7
+
8
+ import numpy as np
9
+
10
+
11
+ def _load_npy(lpath: str, **kwargs) -> Any:
12
+ """Load NPY or NPZ file."""
13
+ if lpath.endswith(".npy"):
14
+ return __load_npy(lpath, **kwargs)
15
+ elif lpath.endswith(".npz"):
16
+ return __load_npz(lpath, **kwargs)
17
+ raise ValueError("File must have .npy or .npz extension")
18
+
19
+
20
+ def __load_npy(lpath: str, **kwargs) -> Any:
21
+ """Load NPY file."""
22
+ return np.load(lpath, allow_pickle=True, **kwargs)
23
+
24
+
25
+ def __load_npz(lpath: str, **kwargs) -> Any:
26
+ """Load NPZ file."""
27
+ obj = np.load(lpath, allow_pickle=True)
28
+
29
+ # Check if it's a single array saved with default key
30
+ if len(obj.files) == 1 and obj.files[0] == "arr_0":
31
+ # Return the single array directly for backward compatibility
32
+ return obj["arr_0"]
33
+
34
+ # Return the NpzFile object so users can access arrays by key
35
+ # This preserves the dictionary-like interface
36
+ return obj
37
+
38
+
39
+ # EOF
@@ -0,0 +1,155 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-14 07:55:45 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/io/_load_modules/_optuna.py
5
+
6
+ from ._yaml import _load_yaml
7
+
8
+
9
+ def load_yaml_as_an_optuna_dict(fpath_yaml, trial):
10
+ """
11
+ Load a YAML file and convert it to an Optuna-compatible dictionary.
12
+
13
+ This function reads a YAML file containing hyperparameter configurations
14
+ and converts it to a dictionary suitable for use with Optuna trials.
15
+
16
+ Parameters:
17
+ -----------
18
+ fpath_yaml : str
19
+ The file path to the YAML configuration file.
20
+ trial : optuna.trial.Trial
21
+ The Optuna trial object to use for suggesting hyperparameters.
22
+
23
+ Returns:
24
+ --------
25
+ dict
26
+ A dictionary containing the hyperparameters with values suggested by Optuna.
27
+
28
+ Raises:
29
+ -------
30
+ FileNotFoundError
31
+ If the specified YAML file does not exist.
32
+ ValueError
33
+ If the YAML file contains invalid configuration for Optuna.
34
+ """
35
+ _d = _load_yaml(fpath_yaml)
36
+
37
+ for k, v in _d.items():
38
+ dist = v["distribution"]
39
+
40
+ if dist == "categorical":
41
+ _d[k] = trial.suggest_categorical(k, v["values"])
42
+
43
+ elif dist == "uniform":
44
+ _d[k] = trial.suggest_int(k, float(v["min"]), float(v["max"]))
45
+
46
+ elif dist == "loguniform":
47
+ _d[k] = trial.suggest_loguniform(k, float(v["min"]), float(v["max"]))
48
+
49
+ elif dist == "intloguniform":
50
+ _d[k] = trial.suggest_int(k, float(v["min"]), float(v["max"]), log=True)
51
+
52
+ return _d
53
+
54
+
55
+ def load_study_rdb(study_name, rdb_raw_bytes_url):
56
+ """
57
+ Load an Optuna study from a RDB (Relational Database) file.
58
+
59
+ This function loads an Optuna study from a given RDB file URL.
60
+
61
+ Parameters:
62
+ -----------
63
+ study_name : str
64
+ The name of the Optuna study to load.
65
+ rdb_raw_bytes_url : str
66
+ The URL of the RDB file, typically in the format "sqlite:///*.db".
67
+
68
+ Returns:
69
+ --------
70
+ optuna.study.Study
71
+ The loaded Optuna study object.
72
+
73
+ Raises:
74
+ -------
75
+ optuna.exceptions.StorageInvalidUsageError
76
+ If there's an error loading the study from the storage.
77
+
78
+ Example:
79
+ --------
80
+ >>> study = load_study_rdb(
81
+ ... study_name="YOUR_STUDY_NAME",
82
+ ... rdb_raw_bytes_url="sqlite:///path/to/your/study.db"
83
+ ... )
84
+ """
85
+ import optuna
86
+
87
+ storage = optuna.storages.RDBStorage(url=rdb_raw_bytes_url)
88
+ study = optuna.load_study(study_name=study_name, storage=storage)
89
+ print(f"Loaded: {rdb_raw_bytes_url}")
90
+ return study
91
+
92
+
93
+ def load_yaml_as_an_optuna_dict(fpath_yaml, trial):
94
+ """
95
+ Load a YAML file and convert it to an Optuna-compatible dictionary.
96
+
97
+ Parameters:
98
+ -----------
99
+ fpath_yaml : str
100
+ The path to the YAML file.
101
+ trial : optuna.trial.Trial
102
+ The Optuna trial object.
103
+
104
+ Returns:
105
+ --------
106
+ dict
107
+ A dictionary with Optuna-compatible parameter suggestions.
108
+ """
109
+ _d = _load_yaml(fpath_yaml)
110
+
111
+ for k, v in _d.items():
112
+
113
+ dist = v["distribution"]
114
+
115
+ if dist == "categorical":
116
+ _d[k] = trial.suggest_categorical(k, v["values"])
117
+
118
+ elif dist == "uniform":
119
+ _d[k] = trial.suggest_int(k, float(v["min"]), float(v["max"]))
120
+
121
+ elif dist == "loguniform":
122
+ _d[k] = trial.suggest_loguniform(k, float(v["min"]), float(v["max"]))
123
+
124
+ elif dist == "intloguniform":
125
+ _d[k] = trial.suggest_int(k, float(v["min"]), float(v["max"]), log=True)
126
+
127
+ return _d
128
+
129
+
130
+ def load_study_rdb(study_name, rdb_raw_bytes_url):
131
+ """
132
+ Load an Optuna study from a RDB storage.
133
+
134
+ Parameters:
135
+ -----------
136
+ study_name : str
137
+ The name of the Optuna study.
138
+ rdb_raw_bytes_url : str
139
+ The URL of the RDB storage.
140
+
141
+ Returns:
142
+ --------
143
+ optuna.study.Study
144
+ The loaded Optuna study object.
145
+ """
146
+ import optuna
147
+
148
+ # rdb_raw_bytes_url = "sqlite:////tmp/fake/ywatanabe/_MicroNN_WindowSize-1.0-sec_MaxEpochs_100_2021-1216-1844/optuna_study_test_file#0.db"
149
+ storage = optuna.storages.RDBStorage(url=rdb_raw_bytes_url)
150
+ study = optuna.load_study(study_name=study_name, storage=storage)
151
+ print(f"\nLoaded: {rdb_raw_bytes_url}\n")
152
+ return study
153
+
154
+
155
+ # EOF
@@ -0,0 +1,69 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-14 07:41:31 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/io/_load_modules/_pandas.py
5
+
6
+ import pandas as pd
7
+
8
+
9
+ def _load_csv(lpath, **kwargs):
10
+ """Load CSV files."""
11
+ if not lpath.endswith(".csv"):
12
+ raise ValueError("File must have .csv extension")
13
+
14
+ # Handle index column - default to None to match default index=False in saving
15
+ index_col = kwargs.pop("index_col", None)
16
+ obj = pd.read_csv(lpath, index_col=index_col, **kwargs)
17
+
18
+ # Remove unnamed columns only if they exist
19
+ unnamed_cols = obj.columns.str.contains("^Unnamed")
20
+ if unnamed_cols.any():
21
+ obj = obj.loc[:, ~unnamed_cols]
22
+
23
+ return obj
24
+
25
+
26
+ # def _load_csv(lpath, **kwargs):
27
+ # """Load CSV files."""
28
+ # if not lpath.endswith('.csv'):
29
+ # raise ValueError("File must have .csv extension")
30
+ # index_col = kwargs.get("index_col", 0)
31
+ # obj = pd.read_csv(lpath, **kwargs)
32
+ # return obj.loc[:, ~obj.columns.str.contains("^Unnamed")]
33
+
34
+
35
+ def _load_tsv(lpath, **kwargs):
36
+ """Load TSV files."""
37
+ if not lpath.endswith(".tsv"):
38
+ raise ValueError("File must have .tsv extension")
39
+ return pd.read_csv(lpath, sep="\t", **kwargs)
40
+
41
+
42
+ def _load_excel(lpath, **kwargs):
43
+ """Load Excel files."""
44
+ if not lpath.endswith((".xls", ".xlsx", ".xlsm", ".xlsb")):
45
+ raise ValueError("File must have Excel extension")
46
+ return pd.read_excel(lpath, **kwargs)
47
+
48
+
49
+ def _load_parquet(lpath, **kwargs):
50
+ """Load Parquet files."""
51
+ if not lpath.endswith(".parquet"):
52
+ raise ValueError("File must have .parquet extension")
53
+ return pd.read_parquet(lpath, **kwargs)
54
+
55
+
56
+ # def _load_excel(lpath):
57
+ # workbook = openpyxl.load_workbook(lpath)
58
+ # all_text = []
59
+ # for sheet in workbook:
60
+ # for row in sheet.iter_rows(values_only=True):
61
+ # all_text.append(
62
+ # " ".join(
63
+ # [str(cell) if cell is not None else "" for cell in row]
64
+ # )
65
+ # )
66
+ # return "\n".join(all_text)
67
+
68
+
69
+ # EOF
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-14 07:55:46 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/io/_load_modules/_pdf.py
5
+
6
+ try:
7
+ import PyPDF2
8
+ except ImportError:
9
+ PyPDF2 = None
10
+
11
+
12
+ def _load_pdf(lpath, **kwargs):
13
+ """Load PDF file and return extracted text."""
14
+ if PyPDF2 is None:
15
+ raise ImportError("PyPDF2 is required for PDF loading. Install with: pip install PyPDF2")
16
+
17
+ try:
18
+ if not lpath.endswith(".pdf"):
19
+ raise ValueError("File must have .pdf extension")
20
+
21
+ reader = PyPDF2.PdfReader(lpath)
22
+ full_text = []
23
+ for page_num in range(len(reader.pages)):
24
+ page = reader.pages[page_num]
25
+ full_text.append(page.extract_text())
26
+ return "\n".join(full_text)
27
+ except (ValueError, FileNotFoundError, PyPDF2.PdfReadError) as e:
28
+ raise ValueError(f"Error loading PDF {lpath}: {str(e)}")
29
+
30
+
31
+ # EOF
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-14 07:41:33 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/io/_load_modules/_pickle.py
5
+
6
+ import pickle
7
+ import gzip
8
+
9
+
10
+ def _load_pickle(lpath, **kwargs):
11
+ """Load pickle file (compressed or uncompressed)."""
12
+ if lpath.endswith(".pkl.gz"):
13
+ # Handle gzip compressed pickle
14
+ with gzip.open(lpath, "rb") as f:
15
+ return pickle.load(f, **kwargs)
16
+ elif lpath.endswith(".pkl") or lpath.endswith(".pickle"):
17
+ # Handle regular pickle
18
+ with open(lpath, "rb") as f:
19
+ return pickle.load(f, **kwargs)
20
+ else:
21
+ raise ValueError("File must have .pkl, .pickle, or .pkl.gz extension")
22
+
23
+
24
+ # EOF
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-14 07:41:34 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/io/_load_modules/_torch.py
5
+
6
+ import torch
7
+
8
+
9
+ def _load_torch(lpath, **kwargs):
10
+ """Load PyTorch model/checkpoint file."""
11
+ if not lpath.endswith((".pth", ".pt")):
12
+ raise ValueError("File must have .pth or .pt extension")
13
+ return torch.load(lpath, **kwargs)
14
+
15
+
16
+ # EOF
@@ -0,0 +1,126 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-03 11:58:11 (ywatanabe)"
4
+ # File: /home/ywatanabe/proj/scitex_repo/src/scitex/io/_load_modules/_txt.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/io/_load_modules/_txt.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ import warnings
13
+
14
+ # # UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8a in position 30173: invalid start byte
15
+ # def _load_txt(lpath, **kwargs):
16
+ # """Load text file and return non-empty lines."""
17
+ # SUPPORTED_EXTENSIONS = (".txt", ".log", ".event", ".py", ".sh", "")
18
+ # try:
19
+ # if not lpath.endswith(SUPPORTED_EXTENSIONS):
20
+ # warnings.warn(
21
+ # f"File must have supported extensions: {SUPPORTED_EXTENSIONS}"
22
+ # )
23
+
24
+ # # Try UTF-8 first (most common)
25
+ # try:
26
+ # with open(lpath, "r", encoding="utf-8") as f:
27
+ # return [
28
+ # line.strip()
29
+ # for line in f.read().splitlines()
30
+ # if line.strip()
31
+ # ]
32
+ # except UnicodeDecodeError:
33
+ # # Fallback to system default encoding
34
+ # with open(lpath, "r") as f:
35
+ # return [
36
+ # line.strip()
37
+ # for line in f.read().splitlines()
38
+ # if line.strip()
39
+ # ]
40
+
41
+
42
+ # except (ValueError, FileNotFoundError) as e:
43
+ # raise ValueError(f"Error loading file {lpath}: {str(e)}")
44
+ # Removed duplicate function - see main _load_txt below
45
+
46
+
47
+ def _load_txt(lpath, strip=False, as_lines=False):
48
+ """
49
+ Load text file and return its content.
50
+ - Warn if extension is unexpected.
51
+ - Try UTF-8 first, then default encoding.
52
+ - If strip=True, strip whitespace.
53
+ - If as_lines=True, return list of lines (backward compatibility).
54
+ """
55
+ if not lpath.endswith((".txt", ".log", ".event", ".py", ".sh")):
56
+ warnings.warn(f"Unexpected extension for file: {lpath}")
57
+
58
+ try:
59
+ with open(lpath, "r", encoding="utf-8") as file:
60
+ content = file.read()
61
+ except UnicodeDecodeError:
62
+ # Fallback: try to detect correct encoding
63
+ encoding = _check_encoding(lpath)
64
+ with open(lpath, "r", encoding=encoding) as file:
65
+ content = file.read()
66
+
67
+ # For backward compatibility, check if as_lines parameter or legacy behavior needed
68
+ if as_lines:
69
+ raw_lines = content.splitlines()
70
+ if strip:
71
+ return [line.strip() for line in raw_lines if line.strip()]
72
+ return [line for line in raw_lines if line.strip()]
73
+
74
+ # Default: return full content (possibly stripped)
75
+ if strip:
76
+ return content.strip()
77
+
78
+ return content
79
+
80
+
81
+ def _check_encoding(file_path):
82
+ """Check file encoding by trying common encodings."""
83
+ encodings = ["utf-8", "latin1", "cp1252", "iso-8859-1", "ascii"]
84
+
85
+ for encoding in encodings:
86
+ try:
87
+ with open(file_path, "r", encoding=encoding) as f:
88
+ f.read()
89
+ return encoding
90
+ except UnicodeDecodeError:
91
+ continue
92
+
93
+ raise ValueError(f"Unable to determine encoding for {file_path}")
94
+
95
+
96
+ # def _check_encoding(file_path):
97
+ # """
98
+ # Check the encoding of a given file.
99
+
100
+ # This function attempts to read the file with different encodings
101
+ # to determine the correct one.
102
+
103
+ # Parameters:
104
+ # -----------
105
+ # file_path : str
106
+ # The path to the file to check.
107
+
108
+ # Returns:
109
+ # --------
110
+ # str
111
+ # The detected encoding of the file.
112
+
113
+ # Raises:
114
+ # -------
115
+ # IOError
116
+ # If the file cannot be read or the encoding cannot be determined.
117
+ # """
118
+ # import chardet
119
+
120
+ # with open(file_path, "rb") as file:
121
+ # raw_data = file.read()
122
+
123
+ # result = chardet.detect(raw_data)
124
+ # return result["encoding"]
125
+
126
+ # EOF
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-14 07:55:49 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/io/_load_modules/_xml.py
5
+
6
+
7
+ def _load_xml(lpath, **kwargs):
8
+ """Load XML file and convert to dict."""
9
+ if not lpath.endswith(".xml"):
10
+ raise ValueError("File must have .xml extension")
11
+
12
+ # Import xml2dict locally to avoid circular imports
13
+ from xml.etree import cElementTree as ElementTree
14
+
15
+ # Inline the xml2dict functionality to avoid circular import
16
+ tree = ElementTree.parse(lpath)
17
+ root = tree.getroot()
18
+
19
+ # Simplified XML to dict conversion - basic implementation
20
+ def xml_element_to_dict(element):
21
+ result = {}
22
+
23
+ # Add attributes
24
+ if element.attrib:
25
+ result.update(element.attrib)
26
+
27
+ # Handle child elements
28
+ for child in element:
29
+ if child.tag in result:
30
+ # Convert to list if multiple elements with same tag
31
+ if not isinstance(result[child.tag], list):
32
+ result[child.tag] = [result[child.tag]]
33
+ result[child.tag].append(xml_element_to_dict(child))
34
+ else:
35
+ result[child.tag] = xml_element_to_dict(child)
36
+
37
+ # Handle text content
38
+ if element.text and element.text.strip():
39
+ if result:
40
+ result['text'] = element.text.strip()
41
+ else:
42
+ return element.text.strip()
43
+
44
+ return result
45
+
46
+ return xml_element_to_dict(root)
47
+
48
+
49
+ # EOF
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-14 07:41:37 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/io/_load_modules/_yaml.py
5
+
6
+ import yaml
7
+
8
+
9
+ def _load_yaml(lpath, **kwargs):
10
+ """Load YAML file with optional key lowercasing."""
11
+ if not lpath.endswith((".yaml", ".yml")):
12
+ raise ValueError("File must have .yaml or .yml extension")
13
+
14
+ lower = kwargs.pop("lower", False)
15
+ with open(lpath) as f:
16
+ obj = yaml.safe_load(f, **kwargs)
17
+
18
+ if lower:
19
+ obj = {k.lower(): v for k, v in obj.items()}
20
+ return obj
21
+
22
+
23
+ # EOF
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-02 21:25:50 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/io/_mv_to_tmp.py
5
+
6
+ from shutil import move
7
+
8
+
9
+ def _mv_to_tmp(fpath, L=2):
10
+ try:
11
+ tgt_fname = "-".join(fpath.split("/")[-L:])
12
+ tgt_fpath = "/tmp/{}".format(tgt_fname)
13
+ move(fpath, tgt_fpath)
14
+ print("Moved to: {}".format(tgt_fpath))
15
+ except:
16
+ pass
17
+
18
+
19
+ # EOF