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,89 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-16 12:12:18 (ywatanabe)"
4
+ # File: /data/gpfs/projects/punim2354/ywatanabe/scitex_repo/src/scitex/io/_save_modules/_csv.py
5
+
6
+ import os
7
+ import pandas as pd
8
+ import numpy as np
9
+
10
+
11
+ def _save_csv(obj, spath: str, **kwargs) -> None:
12
+ """
13
+ Save data to a CSV file, handling various input types appropriately.
14
+
15
+ Parameters
16
+ ----------
17
+ obj : Any
18
+ The object to save. Can be DataFrame, Series, ndarray, list, tuple, dict, or scalar.
19
+ spath : str
20
+ Path where the CSV file will be saved.
21
+ **kwargs : dict
22
+ Additional keyword arguments to pass to the pandas to_csv method.
23
+
24
+ Returns
25
+ -------
26
+ None
27
+
28
+ Raises
29
+ ------
30
+ ValueError
31
+ If the object type cannot be converted to CSV format.
32
+ """
33
+ # Check if path already exists
34
+ if os.path.exists(spath):
35
+ # Calculate hash of new data
36
+ data_hash = None
37
+
38
+ # Process based on type
39
+ if isinstance(obj, (pd.Series, pd.DataFrame)):
40
+ data_hash = hash(obj.to_string())
41
+ elif isinstance(obj, np.ndarray):
42
+ data_hash = hash(pd.DataFrame(obj).to_string())
43
+ else:
44
+ # For other types, create a string representation and hash it
45
+ try:
46
+ data_str = str(obj)
47
+ data_hash = hash(data_str)
48
+ except:
49
+ # If we can't hash it, proceed with saving
50
+ pass
51
+
52
+ # Compare with existing file if hash calculation was successful
53
+ if data_hash is not None:
54
+ try:
55
+ existing_df = pd.read_csv(spath)
56
+ existing_hash = hash(existing_df.to_string())
57
+
58
+ # Skip if hashes match
59
+ if existing_hash == data_hash:
60
+ return
61
+ except:
62
+ # If reading fails, proceed with saving
63
+ pass
64
+
65
+ # Set default index=False if not explicitly specified in kwargs
66
+ if 'index' not in kwargs:
67
+ kwargs['index'] = False
68
+
69
+ # Save the file based on type
70
+ if isinstance(obj, (pd.Series, pd.DataFrame)):
71
+ obj.to_csv(spath, **kwargs)
72
+ elif isinstance(obj, np.ndarray):
73
+ pd.DataFrame(obj).to_csv(spath, **kwargs)
74
+ elif isinstance(obj, (int, float)):
75
+ pd.DataFrame([obj]).to_csv(spath, **kwargs)
76
+ elif isinstance(obj, (list, tuple)):
77
+ if all(isinstance(x, (int, float)) for x in obj):
78
+ pd.DataFrame(obj).to_csv(spath, **kwargs)
79
+ elif all(isinstance(x, pd.DataFrame) for x in obj):
80
+ pd.concat(obj).to_csv(spath, **kwargs)
81
+ else:
82
+ pd.DataFrame({"data": obj}).to_csv(spath, **kwargs)
83
+ elif isinstance(obj, dict):
84
+ pd.DataFrame.from_dict(obj).to_csv(spath, **kwargs)
85
+ else:
86
+ try:
87
+ pd.DataFrame({"data": [obj]}).to_csv(spath, **kwargs)
88
+ except:
89
+ raise ValueError(f"Unable to save type {type(obj)} as CSV")
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-06-12 12:59:00 (ywatanabe)"
4
+ # File: /ssh:sp:/home/ywatanabe/proj/.claude-worktree/scitex_repo/src/scitex/io/_save_modules/_excel.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/io/_save_modules/_excel.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ """
13
+ Excel saving functionality for scitex.io.save
14
+ """
15
+
16
+ import pandas as pd
17
+ import numpy as np
18
+
19
+
20
+ def save_excel(obj, spath, **kwargs):
21
+ """Handle Excel file saving.
22
+
23
+ Parameters
24
+ ----------
25
+ obj : pd.DataFrame, dict, or np.ndarray
26
+ Object to save as Excel file
27
+ spath : str
28
+ Path where Excel file will be saved
29
+ **kwargs
30
+ Additional keyword arguments passed to pandas.DataFrame.to_excel()
31
+
32
+ Raises
33
+ ------
34
+ ValueError
35
+ If object type cannot be saved as Excel file
36
+ """
37
+ if isinstance(obj, pd.DataFrame):
38
+ obj.to_excel(spath, index=False, **kwargs)
39
+ elif isinstance(obj, dict):
40
+ df = pd.DataFrame(obj)
41
+ df.to_excel(spath, index=False, **kwargs)
42
+ elif isinstance(obj, np.ndarray):
43
+ df = pd.DataFrame(obj)
44
+ df.to_excel(spath, index=False, **kwargs)
45
+ else:
46
+ raise ValueError(f"Cannot save object of type {type(obj)} as Excel file")
47
+
48
+
49
+ # EOF
@@ -0,0 +1,249 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-06-14 18:26:02 (ywatanabe)"
4
+ # File: /ssh:sp:/home/ywatanabe/proj/SciTeX-Code/src/scitex/io/_save_modules/_hdf5.py
5
+ # ----------------------------------------
6
+ import os
7
+ __FILE__ = (
8
+ "./src/scitex/io/_save_modules/_hdf5.py"
9
+ )
10
+ __DIR__ = os.path.dirname(__FILE__)
11
+ # ----------------------------------------
12
+
13
+ def _save_hdf5(obj, spath, key=None, override=False, **kwargs):
14
+ import os
15
+ import pickle
16
+
17
+ import h5py
18
+ import numpy as np
19
+
20
+ if not isinstance(obj, dict):
21
+ obj = {"data": obj}
22
+
23
+ if "compression" not in kwargs:
24
+ kwargs["compression"] = "gzip"
25
+
26
+ mode = "a"
27
+
28
+ with h5py.File(spath, mode) as h5_file:
29
+ if key:
30
+ # Check if the full path exists
31
+ key_exists = False
32
+ try:
33
+ parts = key.split("/")
34
+ current = h5_file
35
+ for part in parts:
36
+ if part in current:
37
+ current = current[part]
38
+ else:
39
+ break
40
+ else:
41
+ key_exists = True
42
+ except:
43
+ key_exists = False
44
+
45
+ if not override and key_exists:
46
+ return
47
+
48
+ if override and key_exists:
49
+ del h5_file[key]
50
+
51
+ key_parts = key.split("/")
52
+ current_group = h5_file
53
+
54
+ for part in key_parts[:-1]:
55
+ if part:
56
+ current_group = current_group.require_group(part)
57
+
58
+ final_key = key_parts[-1] if key_parts[-1] else ""
59
+ target_group = (
60
+ current_group.create_group(final_key)
61
+ if final_key
62
+ else current_group
63
+ )
64
+ else:
65
+ target_group = h5_file
66
+
67
+ for dataset_name, data in obj.items():
68
+ if isinstance(data, str):
69
+ target_group.create_dataset(
70
+ dataset_name, data=data, dtype=h5py.string_dtype()
71
+ )
72
+ else:
73
+ data_array = np.asarray(data)
74
+
75
+ if data_array.dtype == np.object_:
76
+ pickled_data = pickle.dumps(data)
77
+ target_group.create_dataset(
78
+ dataset_name, data=np.void(pickled_data)
79
+ )
80
+ elif data_array.ndim == 0:
81
+ target_group.create_dataset(dataset_name, data=data)
82
+ else:
83
+ target_group.create_dataset(
84
+ dataset_name, data=data, **kwargs
85
+ )
86
+
87
+
88
+ # def _save_hdf5(obj, spath, key=None, **kwargs):
89
+ # """
90
+ # Save a dictionary of arrays or a single array to an HDF5 file.
91
+
92
+ # Parameters
93
+ # ----------
94
+ # obj : dict or array-like
95
+ # Dictionary of arrays to save (keys will be dataset names) or
96
+ # a single array/data to save (will be saved as 'data').
97
+ # spath : str
98
+ # Path where the HDF5 file will be saved.
99
+ # key : str, optional
100
+ # Path/key within the HDF5 file where data will be saved.
101
+ # If None, saves to root.
102
+ # **kwargs : dict
103
+ # Additional keyword arguments passed to create_dataset.
104
+ # Common: compression='gzip', compression_opts=9, shuffle=True
105
+
106
+ # Returns
107
+ # -------
108
+ # None
109
+ # """
110
+ # import numpy as np
111
+
112
+ # # Convert single array to dict
113
+ # if not isinstance(obj, dict):
114
+ # obj = {'data': obj}
115
+
116
+ # # Set default compression if not specified
117
+ # if "compression" not in kwargs:
118
+ # kwargs["compression"] = "gzip"
119
+
120
+ # mode = "a" if key else "w"
121
+
122
+ # with h5py.File(spath, mode) as hf:
123
+ # if key:
124
+ # if key in hf:
125
+ # del hf[key]
126
+ # group = hf.create_group(key)
127
+ # else:
128
+ # group = hf
129
+
130
+ # for name, data in obj.items():
131
+ # try:
132
+ # # Check if data is scalar and remove incompatible options
133
+ # if np.isscalar(data) or (isinstance(data, np.ndarray) and data.ndim == 0):
134
+ # # Remove chunk/compression options for scalars
135
+ # scalar_kwargs = {k: v for k, v in kwargs.items()
136
+ # if k not in ['chunks', 'compression', 'compression_opts',
137
+ # 'shuffle', 'fletcher32', 'maxshape']}
138
+ # group.create_dataset(name, data=data, **scalar_kwargs)
139
+ # else:
140
+ # group.create_dataset(name, data=data, **kwargs)
141
+ # except TypeError as e:
142
+ # if "Object dtype" in str(
143
+ # e
144
+ # ) or "has no native HDF5 equivalent" in str(e):
145
+ # if isinstance(data, np.ndarray) and data.dtype == object:
146
+ # if all(isinstance(item, str) for item in data.flat):
147
+ # dt = h5py.string_dtype(encoding="utf-8")
148
+ # group.create_dataset(
149
+ # name, data=data.astype(dt), **kwargs
150
+ # )
151
+ # else:
152
+ # str_data = np.array(
153
+ # [str(item) for item in data.flat]
154
+ # ).reshape(data.shape)
155
+ # dt = h5py.string_dtype(encoding="utf-8")
156
+ # group.create_dataset(
157
+ # name, data=str_data, dtype=dt, **kwargs
158
+ # )
159
+ # else:
160
+ # group.attrs[name] = str(data)
161
+ # else:
162
+ # raise
163
+
164
+ # #!/usr/bin/env python3
165
+ # # -*- coding: utf-8 -*-
166
+ # # Timestamp: "2025-05-16 12:24:04 (ywatanabe)"
167
+ # # File: /data/gpfs/projects/punim2354/ywatanabe/scitex_repo/src/scitex/io/_save_modules/_hdf5.py
168
+
169
+ # import h5py
170
+
171
+ # def _save_hdf5(obj, spath, key=None, **kwargs):
172
+ # """
173
+ # Save a dictionary of arrays to an HDF5 file.
174
+
175
+ # Parameters
176
+ # ----------
177
+ # obj : dict
178
+ # Dictionary of arrays to save. Keys will be dataset names.
179
+ # spath : str
180
+ # Path where the HDF5 file will be saved.
181
+ # key : str, optional
182
+ # Path to the group within the HDF5 file. If None, saves to root.
183
+ # **kwargs : dict
184
+ # Additional keyword arguments passed to create_dataset.
185
+
186
+ # Returns
187
+ # -------
188
+ # None
189
+ # """
190
+ # import numpy as np
191
+
192
+ # name_list, obj_list = [], []
193
+ # for k, v in obj.items():
194
+ # name_list.append(k)
195
+ # obj_list.append(v)
196
+
197
+ # with h5py.File(spath, "w") as hf:
198
+ # # If key is specified, create/get the group
199
+ # if key:
200
+ # group = hf.require_group(key)
201
+ # else:
202
+ # group = hf
203
+
204
+ # for name, data in zip(name_list, obj_list):
205
+ # try:
206
+ # # Try to save directly
207
+ # group.create_dataset(name, data=data, **kwargs)
208
+ # except TypeError as e:
209
+ # if "Object dtype" in str(
210
+ # e
211
+ # ) or "has no native HDF5 equivalent" in str(e):
212
+ # # Handle object dtype by converting to appropriate format
213
+ # if isinstance(data, np.ndarray) and data.dtype == object:
214
+ # # Try to convert to string array
215
+ # try:
216
+ # # Check if all elements are strings
217
+ # if all(
218
+ # isinstance(item, str) for item in data.flat
219
+ # ):
220
+ # # Save as variable-length string
221
+ # dt = h5py.string_dtype(encoding="utf-8")
222
+ # group.create_dataset(
223
+ # name, data=data.astype(dt), **kwargs
224
+ # )
225
+ # else:
226
+ # # Convert to string representation
227
+ # str_data = np.array(
228
+ # [str(item) for item in data.flat]
229
+ # ).reshape(data.shape)
230
+ # dt = h5py.string_dtype(encoding="utf-8")
231
+ # group.create_dataset(
232
+ # name, data=str_data, dtype=dt, **kwargs
233
+ # )
234
+ # except Exception:
235
+ # # If conversion fails, save as attributes or skip
236
+ # group.attrs[name] = str(data)
237
+ # print(
238
+ # f"Warning: Dataset '{name}' saved as attribute due to incompatible dtype"
239
+ # )
240
+ # else:
241
+ # # For non-array objects, save as attribute
242
+ # group.attrs[name] = str(data)
243
+ # print(
244
+ # f"Warning: Dataset '{name}' saved as attribute due to incompatible type"
245
+ # )
246
+ # else:
247
+ # raise # Re-raise if it's a different error
248
+
249
+ # EOF
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-06-12 13:45:00 (ywatanabe)"
4
+ # File: /ssh:sp:/home/ywatanabe/proj/.claude-worktree/scitex_repo/src/scitex/io/_save_modules/_html.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/io/_save_modules/_html.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ """
13
+ HTML saving functionality for scitex.io.save
14
+ """
15
+
16
+ import plotly
17
+
18
+
19
+ def save_html(obj, spath, **kwargs):
20
+ """Handle HTML file saving (primarily for Plotly figures).
21
+
22
+ Parameters
23
+ ----------
24
+ obj : plotly.graph_objs.Figure or str
25
+ Plotly figure object or HTML string to save
26
+ spath : str
27
+ Path where HTML file will be saved
28
+ **kwargs
29
+ Additional keyword arguments passed to plotly.io.write_html()
30
+
31
+ Notes
32
+ -----
33
+ - Primarily designed for saving Plotly interactive figures
34
+ - Can also save raw HTML strings
35
+ """
36
+ if hasattr(obj, 'write_html'):
37
+ # Plotly figure object
38
+ obj.write_html(spath, **kwargs)
39
+ elif isinstance(obj, str):
40
+ # Raw HTML string
41
+ with open(spath, 'w') as f:
42
+ f.write(obj)
43
+ else:
44
+ # Try to convert to HTML using plotly
45
+ plotly.io.write_html(obj, spath, **kwargs)
46
+
47
+
48
+ # EOF
@@ -0,0 +1,140 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-18 14:52:34 (ywatanabe)"
4
+ # File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/io/_save_modules/_save_image.py
5
+ # ----------------------------------------
6
+ import os
7
+ __FILE__ = (
8
+ "./src/scitex/io/_save_modules/_save_image.py"
9
+ )
10
+ __DIR__ = os.path.dirname(__FILE__)
11
+ # ----------------------------------------
12
+
13
+ import io as _io
14
+
15
+ import plotly
16
+ from PIL import Image
17
+
18
+
19
+ def save_image(obj, spath, **kwargs):
20
+ # png
21
+ if spath.endswith(".png"):
22
+ # plotly
23
+ if isinstance(obj, plotly.graph_objs.Figure):
24
+ obj.write_image(file=spath, format="png")
25
+ # PIL image
26
+ elif isinstance(obj, Image.Image):
27
+ obj.save(spath)
28
+ # matplotlib
29
+ else:
30
+ try:
31
+ obj.savefig(spath)
32
+ except:
33
+ obj.figure.savefig(spath)
34
+ del obj
35
+
36
+ # tiff
37
+ elif spath.endswith(".tiff") or spath.endswith(".tif"):
38
+ # PIL image
39
+ if isinstance(obj, Image.Image):
40
+ obj.save(spath)
41
+ # matplotlib
42
+ else:
43
+ try:
44
+ obj.savefig(spath, dpi=300, format="tiff")
45
+ except:
46
+ obj.figure.savefig(spath, dpi=300, format="tiff")
47
+
48
+ del obj
49
+
50
+ # jpeg
51
+ elif spath.endswith(".jpeg") or spath.endswith(".jpg"):
52
+ buf = _io.BytesIO()
53
+
54
+ # plotly
55
+ if isinstance(obj, plotly.graph_objs.Figure):
56
+ obj.write_image(buf, format="png")
57
+ buf.seek(0)
58
+ img = Image.open(buf)
59
+ img.convert("RGB").save(spath, "JPEG")
60
+ buf.close()
61
+
62
+ # PIL image
63
+ elif isinstance(obj, Image.Image):
64
+ obj.save(spath)
65
+
66
+ # matplotlib
67
+ else:
68
+ try:
69
+ obj.savefig(buf, format="png")
70
+ except:
71
+ obj.figure.savefig(buf, format="png")
72
+
73
+ buf.seek(0)
74
+ img = Image.open(buf)
75
+ img.convert("RGB").save(spath, "JPEG")
76
+ buf.close()
77
+ del obj
78
+
79
+ # GIF
80
+ elif spath.endswith(".gif"):
81
+ # PIL image
82
+ if isinstance(obj, Image.Image):
83
+ obj.save(spath, save_all=True)
84
+ # plotly - convert via PNG first
85
+ elif isinstance(obj, plotly.graph_objs.Figure):
86
+ buf = _io.BytesIO()
87
+ obj.write_image(buf, format="png")
88
+ buf.seek(0)
89
+ img = Image.open(buf)
90
+ img.save(spath, "GIF")
91
+ buf.close()
92
+ # matplotlib
93
+ else:
94
+ buf = _io.BytesIO()
95
+ try:
96
+ obj.savefig(buf, format="png")
97
+ except:
98
+ obj.figure.savefig(buf, format="png")
99
+ buf.seek(0)
100
+ img = Image.open(buf)
101
+ img.save(spath, "GIF")
102
+ buf.close()
103
+ del obj
104
+
105
+ # SVG
106
+ elif spath.endswith(".svg"):
107
+ # Plotly
108
+ if isinstance(obj, plotly.graph_objs.Figure):
109
+ obj.write_image(file=spath, format="svg")
110
+ # Matplotlib
111
+ else:
112
+ try:
113
+ obj.savefig(spath, format="svg")
114
+ except AttributeError:
115
+ obj.figure.savefig(spath, format="svg")
116
+ del obj
117
+
118
+ # PDF
119
+ elif spath.endswith(".pdf"):
120
+ # Plotly
121
+ if isinstance(obj, plotly.graph_objs.Figure):
122
+ obj.write_image(file=spath, format="pdf")
123
+ # PIL Image - convert to PDF
124
+ elif isinstance(obj, Image.Image):
125
+ # Convert RGBA to RGB if needed
126
+ if obj.mode == 'RGBA':
127
+ rgb_img = Image.new('RGB', obj.size, (255, 255, 255))
128
+ rgb_img.paste(obj, mask=obj.split()[3])
129
+ rgb_img.save(spath, "PDF")
130
+ else:
131
+ obj.save(spath, "PDF")
132
+ # Matplotlib
133
+ else:
134
+ try:
135
+ obj.savefig(spath, format="pdf")
136
+ except AttributeError:
137
+ obj.figure.savefig(spath, format="pdf")
138
+ del obj
139
+
140
+ # EOF
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-16 12:22:56 (ywatanabe)"
4
+ # File: /data/gpfs/projects/punim2354/ywatanabe/scitex_repo/src/scitex/io/_save_modules/_joblib.py
5
+
6
+ import joblib
7
+
8
+
9
+ def _save_joblib(obj, spath):
10
+ """
11
+ Save an object using joblib serialization.
12
+
13
+ Parameters
14
+ ----------
15
+ obj : Any
16
+ Object to serialize.
17
+ spath : str
18
+ Path where the joblib file will be saved.
19
+
20
+ Returns
21
+ -------
22
+ None
23
+ """
24
+ with open(spath, "wb") as s:
25
+ joblib.dump(obj, s, compress=3)
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-16 12:27:18 (ywatanabe)"
4
+ # File: /data/gpfs/projects/punim2354/ywatanabe/scitex_repo/src/scitex/io/_save_modules/_json.py
5
+
6
+ import json
7
+
8
+
9
+ def _save_json(obj, spath):
10
+ """
11
+ Save a Python object as a JSON file.
12
+
13
+ Parameters
14
+ ----------
15
+ obj : dict or list
16
+ The object to serialize to JSON.
17
+ spath : str
18
+ Path where the JSON file will be saved.
19
+
20
+ Returns
21
+ -------
22
+ None
23
+ """
24
+ with open(spath, "w") as f:
25
+ json.dump(obj, f, indent=4)
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-18 14:52:59 (ywatanabe)"
4
+ # File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/io/_save_modules/_save_listed_dfs_as_csv.py
5
+ # ----------------------------------------
6
+ import os
7
+ __FILE__ = (
8
+ "./src/scitex/io/_save_modules/_save_listed_dfs_as_csv.py"
9
+ )
10
+ __DIR__ = os.path.dirname(__FILE__)
11
+ # ----------------------------------------
12
+ # Time-stamp: "2024-11-02 21:28:56 (ywatanabe)"
13
+
14
+ import csv
15
+
16
+ import numpy as np
17
+
18
+ from .._mv_to_tmp import _mv_to_tmp
19
+
20
+
21
+
22
+ def _save_listed_dfs_as_csv(
23
+ listed_dfs,
24
+ spath_csv,
25
+ indi_suffix=None,
26
+ overwrite=False,
27
+ verbose=False,
28
+ ):
29
+ """listed_dfs:
30
+ [df1, df2, df3, ..., dfN]. They will be written vertically in the order.
31
+
32
+ spath_csv:
33
+ /hoge/fuga/foo.csv
34
+
35
+ indi_suffix:
36
+ At the left top cell on the output csv file, '{}'.format(indi_suffix[i])
37
+ will be added, where i is the index of the df.On the other hand,
38
+ when indi_suffix=None is passed, only '{}'.format(i) will be added.
39
+ """
40
+
41
+ if overwrite == True:
42
+ _mv_to_tmp(spath_csv, L=2)
43
+
44
+ indi_suffix = np.arange(len(listed_dfs)) if indi_suffix is None else indi_suffix
45
+ for i, df in enumerate(listed_dfs):
46
+ with open(spath_csv, mode="a") as f:
47
+ f_writer = csv.writer(f)
48
+ i_suffix = indi_suffix[i]
49
+ f_writer.writerow(["{}".format(indi_suffix[i])])
50
+ df.to_csv(spath_csv, mode="a", index=True, header=True)
51
+ with open(spath_csv, mode="a") as f:
52
+ f_writer = csv.writer(f)
53
+ f_writer.writerow([""])
54
+ if verbose:
55
+ print("Saved to: {}".format(spath_csv))
56
+
57
+ # EOF