scitex 2.0.0__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (572) hide show
  1. scitex/__init__.py +73 -0
  2. scitex/__main__.py +89 -0
  3. scitex/__version__.py +14 -0
  4. scitex/_sh.py +59 -0
  5. scitex/ai/_LearningCurveLogger.py +583 -0
  6. scitex/ai/__Classifiers.py +101 -0
  7. scitex/ai/__init__.py +55 -0
  8. scitex/ai/_gen_ai/_Anthropic.py +173 -0
  9. scitex/ai/_gen_ai/_BaseGenAI.py +336 -0
  10. scitex/ai/_gen_ai/_DeepSeek.py +175 -0
  11. scitex/ai/_gen_ai/_Google.py +161 -0
  12. scitex/ai/_gen_ai/_Groq.py +97 -0
  13. scitex/ai/_gen_ai/_Llama.py +142 -0
  14. scitex/ai/_gen_ai/_OpenAI.py +230 -0
  15. scitex/ai/_gen_ai/_PARAMS.py +565 -0
  16. scitex/ai/_gen_ai/_Perplexity.py +191 -0
  17. scitex/ai/_gen_ai/__init__.py +32 -0
  18. scitex/ai/_gen_ai/_calc_cost.py +78 -0
  19. scitex/ai/_gen_ai/_format_output_func.py +183 -0
  20. scitex/ai/_gen_ai/_genai_factory.py +71 -0
  21. scitex/ai/act/__init__.py +8 -0
  22. scitex/ai/act/_define.py +11 -0
  23. scitex/ai/classification/__init__.py +7 -0
  24. scitex/ai/classification/classification_reporter.py +1137 -0
  25. scitex/ai/classification/classifier_server.py +131 -0
  26. scitex/ai/classification/classifiers.py +101 -0
  27. scitex/ai/classification_reporter.py +1161 -0
  28. scitex/ai/classifier_server.py +131 -0
  29. scitex/ai/clustering/__init__.py +11 -0
  30. scitex/ai/clustering/_pca.py +115 -0
  31. scitex/ai/clustering/_umap.py +376 -0
  32. scitex/ai/early_stopping.py +149 -0
  33. scitex/ai/feature_extraction/__init__.py +56 -0
  34. scitex/ai/feature_extraction/vit.py +148 -0
  35. scitex/ai/genai/__init__.py +277 -0
  36. scitex/ai/genai/anthropic.py +177 -0
  37. scitex/ai/genai/anthropic_provider.py +320 -0
  38. scitex/ai/genai/anthropic_refactored.py +109 -0
  39. scitex/ai/genai/auth_manager.py +200 -0
  40. scitex/ai/genai/base_genai.py +336 -0
  41. scitex/ai/genai/base_provider.py +291 -0
  42. scitex/ai/genai/calc_cost.py +78 -0
  43. scitex/ai/genai/chat_history.py +307 -0
  44. scitex/ai/genai/cost_tracker.py +276 -0
  45. scitex/ai/genai/deepseek.py +188 -0
  46. scitex/ai/genai/deepseek_provider.py +251 -0
  47. scitex/ai/genai/format_output_func.py +183 -0
  48. scitex/ai/genai/genai_factory.py +71 -0
  49. scitex/ai/genai/google.py +169 -0
  50. scitex/ai/genai/google_provider.py +228 -0
  51. scitex/ai/genai/groq.py +104 -0
  52. scitex/ai/genai/groq_provider.py +248 -0
  53. scitex/ai/genai/image_processor.py +250 -0
  54. scitex/ai/genai/llama.py +155 -0
  55. scitex/ai/genai/llama_provider.py +214 -0
  56. scitex/ai/genai/mock_provider.py +127 -0
  57. scitex/ai/genai/model_registry.py +304 -0
  58. scitex/ai/genai/openai.py +230 -0
  59. scitex/ai/genai/openai_provider.py +293 -0
  60. scitex/ai/genai/params.py +565 -0
  61. scitex/ai/genai/perplexity.py +202 -0
  62. scitex/ai/genai/perplexity_provider.py +205 -0
  63. scitex/ai/genai/provider_base.py +302 -0
  64. scitex/ai/genai/provider_factory.py +370 -0
  65. scitex/ai/genai/response_handler.py +235 -0
  66. scitex/ai/layer/_Pass.py +21 -0
  67. scitex/ai/layer/__init__.py +10 -0
  68. scitex/ai/layer/_switch.py +8 -0
  69. scitex/ai/loss/_L1L2Losses.py +34 -0
  70. scitex/ai/loss/__init__.py +12 -0
  71. scitex/ai/loss/multi_task_loss.py +47 -0
  72. scitex/ai/metrics/__init__.py +9 -0
  73. scitex/ai/metrics/_bACC.py +51 -0
  74. scitex/ai/metrics/silhoute_score_block.py +496 -0
  75. scitex/ai/optim/Ranger_Deep_Learning_Optimizer/__init__.py +0 -0
  76. scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/__init__.py +3 -0
  77. scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/ranger.py +207 -0
  78. scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/ranger2020.py +238 -0
  79. scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/ranger913A.py +215 -0
  80. scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/rangerqh.py +184 -0
  81. scitex/ai/optim/Ranger_Deep_Learning_Optimizer/setup.py +24 -0
  82. scitex/ai/optim/__init__.py +13 -0
  83. scitex/ai/optim/_get_set.py +31 -0
  84. scitex/ai/optim/_optimizers.py +71 -0
  85. scitex/ai/plt/__init__.py +21 -0
  86. scitex/ai/plt/_conf_mat.py +592 -0
  87. scitex/ai/plt/_learning_curve.py +194 -0
  88. scitex/ai/plt/_optuna_study.py +111 -0
  89. scitex/ai/plt/aucs/__init__.py +2 -0
  90. scitex/ai/plt/aucs/example.py +60 -0
  91. scitex/ai/plt/aucs/pre_rec_auc.py +223 -0
  92. scitex/ai/plt/aucs/roc_auc.py +246 -0
  93. scitex/ai/sampling/undersample.py +29 -0
  94. scitex/ai/sk/__init__.py +11 -0
  95. scitex/ai/sk/_clf.py +58 -0
  96. scitex/ai/sk/_to_sktime.py +100 -0
  97. scitex/ai/sklearn/__init__.py +26 -0
  98. scitex/ai/sklearn/clf.py +58 -0
  99. scitex/ai/sklearn/to_sktime.py +100 -0
  100. scitex/ai/training/__init__.py +7 -0
  101. scitex/ai/training/early_stopping.py +150 -0
  102. scitex/ai/training/learning_curve_logger.py +555 -0
  103. scitex/ai/utils/__init__.py +22 -0
  104. scitex/ai/utils/_check_params.py +50 -0
  105. scitex/ai/utils/_default_dataset.py +46 -0
  106. scitex/ai/utils/_format_samples_for_sktime.py +26 -0
  107. scitex/ai/utils/_label_encoder.py +134 -0
  108. scitex/ai/utils/_merge_labels.py +22 -0
  109. scitex/ai/utils/_sliding_window_data_augmentation.py +11 -0
  110. scitex/ai/utils/_under_sample.py +51 -0
  111. scitex/ai/utils/_verify_n_gpus.py +16 -0
  112. scitex/ai/utils/grid_search.py +148 -0
  113. scitex/context/__init__.py +9 -0
  114. scitex/context/_suppress_output.py +38 -0
  115. scitex/db/_BaseMixins/_BaseBackupMixin.py +30 -0
  116. scitex/db/_BaseMixins/_BaseBatchMixin.py +31 -0
  117. scitex/db/_BaseMixins/_BaseBlobMixin.py +81 -0
  118. scitex/db/_BaseMixins/_BaseConnectionMixin.py +43 -0
  119. scitex/db/_BaseMixins/_BaseImportExportMixin.py +39 -0
  120. scitex/db/_BaseMixins/_BaseIndexMixin.py +29 -0
  121. scitex/db/_BaseMixins/_BaseMaintenanceMixin.py +33 -0
  122. scitex/db/_BaseMixins/_BaseQueryMixin.py +52 -0
  123. scitex/db/_BaseMixins/_BaseRowMixin.py +32 -0
  124. scitex/db/_BaseMixins/_BaseSchemaMixin.py +44 -0
  125. scitex/db/_BaseMixins/_BaseTableMixin.py +66 -0
  126. scitex/db/_BaseMixins/_BaseTransactionMixin.py +52 -0
  127. scitex/db/_BaseMixins/__init__.py +30 -0
  128. scitex/db/_PostgreSQL.py +126 -0
  129. scitex/db/_PostgreSQLMixins/_BackupMixin.py +166 -0
  130. scitex/db/_PostgreSQLMixins/_BatchMixin.py +82 -0
  131. scitex/db/_PostgreSQLMixins/_BlobMixin.py +231 -0
  132. scitex/db/_PostgreSQLMixins/_ConnectionMixin.py +92 -0
  133. scitex/db/_PostgreSQLMixins/_ImportExportMixin.py +59 -0
  134. scitex/db/_PostgreSQLMixins/_IndexMixin.py +64 -0
  135. scitex/db/_PostgreSQLMixins/_MaintenanceMixin.py +175 -0
  136. scitex/db/_PostgreSQLMixins/_QueryMixin.py +108 -0
  137. scitex/db/_PostgreSQLMixins/_RowMixin.py +75 -0
  138. scitex/db/_PostgreSQLMixins/_SchemaMixin.py +126 -0
  139. scitex/db/_PostgreSQLMixins/_TableMixin.py +176 -0
  140. scitex/db/_PostgreSQLMixins/_TransactionMixin.py +57 -0
  141. scitex/db/_PostgreSQLMixins/__init__.py +34 -0
  142. scitex/db/_SQLite3.py +2136 -0
  143. scitex/db/_SQLite3Mixins/_BatchMixin.py +243 -0
  144. scitex/db/_SQLite3Mixins/_BlobMixin.py +229 -0
  145. scitex/db/_SQLite3Mixins/_ConnectionMixin.py +108 -0
  146. scitex/db/_SQLite3Mixins/_ImportExportMixin.py +80 -0
  147. scitex/db/_SQLite3Mixins/_IndexMixin.py +32 -0
  148. scitex/db/_SQLite3Mixins/_MaintenanceMixin.py +176 -0
  149. scitex/db/_SQLite3Mixins/_QueryMixin.py +83 -0
  150. scitex/db/_SQLite3Mixins/_RowMixin.py +75 -0
  151. scitex/db/_SQLite3Mixins/_TableMixin.py +183 -0
  152. scitex/db/_SQLite3Mixins/_TransactionMixin.py +71 -0
  153. scitex/db/_SQLite3Mixins/__init__.py +30 -0
  154. scitex/db/__init__.py +14 -0
  155. scitex/db/_delete_duplicates.py +397 -0
  156. scitex/db/_inspect.py +163 -0
  157. scitex/decorators/__init__.py +54 -0
  158. scitex/decorators/_auto_order.py +172 -0
  159. scitex/decorators/_batch_fn.py +127 -0
  160. scitex/decorators/_cache_disk.py +32 -0
  161. scitex/decorators/_cache_mem.py +12 -0
  162. scitex/decorators/_combined.py +98 -0
  163. scitex/decorators/_converters.py +282 -0
  164. scitex/decorators/_deprecated.py +26 -0
  165. scitex/decorators/_not_implemented.py +30 -0
  166. scitex/decorators/_numpy_fn.py +86 -0
  167. scitex/decorators/_pandas_fn.py +121 -0
  168. scitex/decorators/_preserve_doc.py +19 -0
  169. scitex/decorators/_signal_fn.py +95 -0
  170. scitex/decorators/_timeout.py +55 -0
  171. scitex/decorators/_torch_fn.py +136 -0
  172. scitex/decorators/_wrap.py +39 -0
  173. scitex/decorators/_xarray_fn.py +88 -0
  174. scitex/dev/__init__.py +15 -0
  175. scitex/dev/_analyze_code_flow.py +284 -0
  176. scitex/dev/_reload.py +59 -0
  177. scitex/dict/_DotDict.py +442 -0
  178. scitex/dict/__init__.py +18 -0
  179. scitex/dict/_listed_dict.py +42 -0
  180. scitex/dict/_pop_keys.py +36 -0
  181. scitex/dict/_replace.py +13 -0
  182. scitex/dict/_safe_merge.py +62 -0
  183. scitex/dict/_to_str.py +32 -0
  184. scitex/dsp/__init__.py +72 -0
  185. scitex/dsp/_crop.py +122 -0
  186. scitex/dsp/_demo_sig.py +331 -0
  187. scitex/dsp/_detect_ripples.py +212 -0
  188. scitex/dsp/_ensure_3d.py +18 -0
  189. scitex/dsp/_hilbert.py +78 -0
  190. scitex/dsp/_listen.py +702 -0
  191. scitex/dsp/_misc.py +30 -0
  192. scitex/dsp/_mne.py +32 -0
  193. scitex/dsp/_modulation_index.py +79 -0
  194. scitex/dsp/_pac.py +319 -0
  195. scitex/dsp/_psd.py +102 -0
  196. scitex/dsp/_resample.py +65 -0
  197. scitex/dsp/_time.py +36 -0
  198. scitex/dsp/_transform.py +68 -0
  199. scitex/dsp/_wavelet.py +212 -0
  200. scitex/dsp/add_noise.py +111 -0
  201. scitex/dsp/example.py +253 -0
  202. scitex/dsp/filt.py +155 -0
  203. scitex/dsp/norm.py +18 -0
  204. scitex/dsp/params.py +51 -0
  205. scitex/dsp/reference.py +43 -0
  206. scitex/dsp/template.py +25 -0
  207. scitex/dsp/utils/__init__.py +15 -0
  208. scitex/dsp/utils/_differential_bandpass_filters.py +120 -0
  209. scitex/dsp/utils/_ensure_3d.py +18 -0
  210. scitex/dsp/utils/_ensure_even_len.py +10 -0
  211. scitex/dsp/utils/_zero_pad.py +48 -0
  212. scitex/dsp/utils/filter.py +408 -0
  213. scitex/dsp/utils/pac.py +177 -0
  214. scitex/dt/__init__.py +8 -0
  215. scitex/dt/_linspace.py +130 -0
  216. scitex/etc/__init__.py +15 -0
  217. scitex/etc/wait_key.py +34 -0
  218. scitex/gen/_DimHandler.py +196 -0
  219. scitex/gen/_TimeStamper.py +244 -0
  220. scitex/gen/__init__.py +95 -0
  221. scitex/gen/_alternate_kwarg.py +13 -0
  222. scitex/gen/_cache.py +11 -0
  223. scitex/gen/_check_host.py +34 -0
  224. scitex/gen/_ci.py +12 -0
  225. scitex/gen/_close.py +222 -0
  226. scitex/gen/_embed.py +78 -0
  227. scitex/gen/_inspect_module.py +257 -0
  228. scitex/gen/_is_ipython.py +12 -0
  229. scitex/gen/_less.py +48 -0
  230. scitex/gen/_list_packages.py +139 -0
  231. scitex/gen/_mat2py.py +88 -0
  232. scitex/gen/_norm.py +170 -0
  233. scitex/gen/_paste.py +18 -0
  234. scitex/gen/_print_config.py +84 -0
  235. scitex/gen/_shell.py +48 -0
  236. scitex/gen/_src.py +111 -0
  237. scitex/gen/_start.py +451 -0
  238. scitex/gen/_symlink.py +55 -0
  239. scitex/gen/_symlog.py +27 -0
  240. scitex/gen/_tee.py +238 -0
  241. scitex/gen/_title2path.py +60 -0
  242. scitex/gen/_title_case.py +88 -0
  243. scitex/gen/_to_even.py +84 -0
  244. scitex/gen/_to_odd.py +34 -0
  245. scitex/gen/_to_rank.py +39 -0
  246. scitex/gen/_transpose.py +37 -0
  247. scitex/gen/_type.py +78 -0
  248. scitex/gen/_var_info.py +73 -0
  249. scitex/gen/_wrap.py +17 -0
  250. scitex/gen/_xml2dict.py +76 -0
  251. scitex/gen/misc.py +730 -0
  252. scitex/gen/path.py +0 -0
  253. scitex/general/__init__.py +5 -0
  254. scitex/gists/_SigMacro_processFigure_S.py +128 -0
  255. scitex/gists/_SigMacro_toBlue.py +172 -0
  256. scitex/gists/__init__.py +12 -0
  257. scitex/io/_H5Explorer.py +292 -0
  258. scitex/io/__init__.py +82 -0
  259. scitex/io/_cache.py +101 -0
  260. scitex/io/_flush.py +24 -0
  261. scitex/io/_glob.py +103 -0
  262. scitex/io/_json2md.py +113 -0
  263. scitex/io/_load.py +168 -0
  264. scitex/io/_load_configs.py +146 -0
  265. scitex/io/_load_modules/__init__.py +38 -0
  266. scitex/io/_load_modules/_catboost.py +66 -0
  267. scitex/io/_load_modules/_con.py +20 -0
  268. scitex/io/_load_modules/_db.py +24 -0
  269. scitex/io/_load_modules/_docx.py +42 -0
  270. scitex/io/_load_modules/_eeg.py +110 -0
  271. scitex/io/_load_modules/_hdf5.py +196 -0
  272. scitex/io/_load_modules/_image.py +19 -0
  273. scitex/io/_load_modules/_joblib.py +19 -0
  274. scitex/io/_load_modules/_json.py +18 -0
  275. scitex/io/_load_modules/_markdown.py +103 -0
  276. scitex/io/_load_modules/_matlab.py +37 -0
  277. scitex/io/_load_modules/_numpy.py +39 -0
  278. scitex/io/_load_modules/_optuna.py +155 -0
  279. scitex/io/_load_modules/_pandas.py +69 -0
  280. scitex/io/_load_modules/_pdf.py +31 -0
  281. scitex/io/_load_modules/_pickle.py +24 -0
  282. scitex/io/_load_modules/_torch.py +16 -0
  283. scitex/io/_load_modules/_txt.py +126 -0
  284. scitex/io/_load_modules/_xml.py +49 -0
  285. scitex/io/_load_modules/_yaml.py +23 -0
  286. scitex/io/_mv_to_tmp.py +19 -0
  287. scitex/io/_path.py +286 -0
  288. scitex/io/_reload.py +78 -0
  289. scitex/io/_save.py +539 -0
  290. scitex/io/_save_modules/__init__.py +66 -0
  291. scitex/io/_save_modules/_catboost.py +22 -0
  292. scitex/io/_save_modules/_csv.py +89 -0
  293. scitex/io/_save_modules/_excel.py +49 -0
  294. scitex/io/_save_modules/_hdf5.py +249 -0
  295. scitex/io/_save_modules/_html.py +48 -0
  296. scitex/io/_save_modules/_image.py +140 -0
  297. scitex/io/_save_modules/_joblib.py +25 -0
  298. scitex/io/_save_modules/_json.py +25 -0
  299. scitex/io/_save_modules/_listed_dfs_as_csv.py +57 -0
  300. scitex/io/_save_modules/_listed_scalars_as_csv.py +42 -0
  301. scitex/io/_save_modules/_matlab.py +24 -0
  302. scitex/io/_save_modules/_mp4.py +29 -0
  303. scitex/io/_save_modules/_numpy.py +57 -0
  304. scitex/io/_save_modules/_optuna_study_as_csv_and_pngs.py +38 -0
  305. scitex/io/_save_modules/_pickle.py +45 -0
  306. scitex/io/_save_modules/_plotly.py +27 -0
  307. scitex/io/_save_modules/_text.py +23 -0
  308. scitex/io/_save_modules/_torch.py +26 -0
  309. scitex/io/_save_modules/_yaml.py +29 -0
  310. scitex/life/__init__.py +10 -0
  311. scitex/life/_monitor_rain.py +49 -0
  312. scitex/linalg/__init__.py +17 -0
  313. scitex/linalg/_distance.py +63 -0
  314. scitex/linalg/_geometric_median.py +64 -0
  315. scitex/linalg/_misc.py +73 -0
  316. scitex/nn/_AxiswiseDropout.py +27 -0
  317. scitex/nn/_BNet.py +126 -0
  318. scitex/nn/_BNet_Res.py +164 -0
  319. scitex/nn/_ChannelGainChanger.py +44 -0
  320. scitex/nn/_DropoutChannels.py +50 -0
  321. scitex/nn/_Filters.py +489 -0
  322. scitex/nn/_FreqGainChanger.py +110 -0
  323. scitex/nn/_GaussianFilter.py +48 -0
  324. scitex/nn/_Hilbert.py +111 -0
  325. scitex/nn/_MNet_1000.py +157 -0
  326. scitex/nn/_ModulationIndex.py +221 -0
  327. scitex/nn/_PAC.py +414 -0
  328. scitex/nn/_PSD.py +40 -0
  329. scitex/nn/_ResNet1D.py +120 -0
  330. scitex/nn/_SpatialAttention.py +25 -0
  331. scitex/nn/_Spectrogram.py +161 -0
  332. scitex/nn/_SwapChannels.py +50 -0
  333. scitex/nn/_TransposeLayer.py +19 -0
  334. scitex/nn/_Wavelet.py +183 -0
  335. scitex/nn/__init__.py +63 -0
  336. scitex/os/__init__.py +8 -0
  337. scitex/os/_mv.py +50 -0
  338. scitex/parallel/__init__.py +8 -0
  339. scitex/parallel/_run.py +151 -0
  340. scitex/path/__init__.py +33 -0
  341. scitex/path/_clean.py +52 -0
  342. scitex/path/_find.py +108 -0
  343. scitex/path/_get_module_path.py +51 -0
  344. scitex/path/_get_spath.py +35 -0
  345. scitex/path/_getsize.py +18 -0
  346. scitex/path/_increment_version.py +87 -0
  347. scitex/path/_mk_spath.py +51 -0
  348. scitex/path/_path.py +19 -0
  349. scitex/path/_split.py +23 -0
  350. scitex/path/_this_path.py +19 -0
  351. scitex/path/_version.py +101 -0
  352. scitex/pd/__init__.py +41 -0
  353. scitex/pd/_find_indi.py +126 -0
  354. scitex/pd/_find_pval.py +113 -0
  355. scitex/pd/_force_df.py +154 -0
  356. scitex/pd/_from_xyz.py +71 -0
  357. scitex/pd/_ignore_SettingWithCopyWarning.py +34 -0
  358. scitex/pd/_melt_cols.py +81 -0
  359. scitex/pd/_merge_columns.py +221 -0
  360. scitex/pd/_mv.py +63 -0
  361. scitex/pd/_replace.py +62 -0
  362. scitex/pd/_round.py +93 -0
  363. scitex/pd/_slice.py +63 -0
  364. scitex/pd/_sort.py +91 -0
  365. scitex/pd/_to_numeric.py +53 -0
  366. scitex/pd/_to_xy.py +59 -0
  367. scitex/pd/_to_xyz.py +110 -0
  368. scitex/plt/__init__.py +36 -0
  369. scitex/plt/_subplots/_AxesWrapper.py +182 -0
  370. scitex/plt/_subplots/_AxisWrapper.py +249 -0
  371. scitex/plt/_subplots/_AxisWrapperMixins/_AdjustmentMixin.py +414 -0
  372. scitex/plt/_subplots/_AxisWrapperMixins/_MatplotlibPlotMixin.py +896 -0
  373. scitex/plt/_subplots/_AxisWrapperMixins/_SeabornMixin.py +368 -0
  374. scitex/plt/_subplots/_AxisWrapperMixins/_TrackingMixin.py +185 -0
  375. scitex/plt/_subplots/_AxisWrapperMixins/__init__.py +16 -0
  376. scitex/plt/_subplots/_FigWrapper.py +226 -0
  377. scitex/plt/_subplots/_SubplotsWrapper.py +171 -0
  378. scitex/plt/_subplots/__init__.py +111 -0
  379. scitex/plt/_subplots/_export_as_csv.py +232 -0
  380. scitex/plt/_subplots/_export_as_csv_formatters/__init__.py +61 -0
  381. scitex/plt/_subplots/_export_as_csv_formatters/_format_bar.py +90 -0
  382. scitex/plt/_subplots/_export_as_csv_formatters/_format_barh.py +49 -0
  383. scitex/plt/_subplots/_export_as_csv_formatters/_format_boxplot.py +46 -0
  384. scitex/plt/_subplots/_export_as_csv_formatters/_format_contour.py +39 -0
  385. scitex/plt/_subplots/_export_as_csv_formatters/_format_errorbar.py +125 -0
  386. scitex/plt/_subplots/_export_as_csv_formatters/_format_eventplot.py +72 -0
  387. scitex/plt/_subplots/_export_as_csv_formatters/_format_fill.py +34 -0
  388. scitex/plt/_subplots/_export_as_csv_formatters/_format_fill_between.py +36 -0
  389. scitex/plt/_subplots/_export_as_csv_formatters/_format_hist.py +79 -0
  390. scitex/plt/_subplots/_export_as_csv_formatters/_format_imshow.py +59 -0
  391. scitex/plt/_subplots/_export_as_csv_formatters/_format_imshow2d.py +32 -0
  392. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot.py +79 -0
  393. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_box.py +75 -0
  394. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_conf_mat.py +64 -0
  395. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_ecdf.py +44 -0
  396. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_fillv.py +70 -0
  397. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_heatmap.py +66 -0
  398. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_image.py +95 -0
  399. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_joyplot.py +67 -0
  400. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_kde.py +52 -0
  401. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_line.py +46 -0
  402. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_mean_ci.py +46 -0
  403. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_mean_std.py +46 -0
  404. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_median_iqr.py +46 -0
  405. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_raster.py +44 -0
  406. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_rectangle.py +103 -0
  407. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_scatter_hist.py +82 -0
  408. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_shaded_line.py +58 -0
  409. scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_violin.py +117 -0
  410. scitex/plt/_subplots/_export_as_csv_formatters/_format_scatter.py +30 -0
  411. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_barplot.py +51 -0
  412. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_boxplot.py +93 -0
  413. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_heatmap.py +94 -0
  414. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_histplot.py +92 -0
  415. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_jointplot.py +65 -0
  416. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_kdeplot.py +59 -0
  417. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_lineplot.py +58 -0
  418. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_pairplot.py +45 -0
  419. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_scatterplot.py +70 -0
  420. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_stripplot.py +75 -0
  421. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_swarmplot.py +75 -0
  422. scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_violinplot.py +155 -0
  423. scitex/plt/_subplots/_export_as_csv_formatters/_format_violin.py +64 -0
  424. scitex/plt/_subplots/_export_as_csv_formatters/_format_violinplot.py +77 -0
  425. scitex/plt/_subplots/_export_as_csv_formatters/test_formatters.py +210 -0
  426. scitex/plt/_subplots/_export_as_csv_formatters/verify_formatters.py +342 -0
  427. scitex/plt/_subplots/_export_as_csv_formatters.py +115 -0
  428. scitex/plt/_tpl.py +28 -0
  429. scitex/plt/ax/__init__.py +114 -0
  430. scitex/plt/ax/_plot/__init__.py +53 -0
  431. scitex/plt/ax/_plot/_plot_circular_hist.py +124 -0
  432. scitex/plt/ax/_plot/_plot_conf_mat.py +136 -0
  433. scitex/plt/ax/_plot/_plot_cube.py +57 -0
  434. scitex/plt/ax/_plot/_plot_ecdf.py +84 -0
  435. scitex/plt/ax/_plot/_plot_fillv.py +55 -0
  436. scitex/plt/ax/_plot/_plot_heatmap.py +266 -0
  437. scitex/plt/ax/_plot/_plot_image.py +94 -0
  438. scitex/plt/ax/_plot/_plot_joyplot.py +76 -0
  439. scitex/plt/ax/_plot/_plot_raster.py +172 -0
  440. scitex/plt/ax/_plot/_plot_rectangle.py +69 -0
  441. scitex/plt/ax/_plot/_plot_scatter_hist.py +133 -0
  442. scitex/plt/ax/_plot/_plot_shaded_line.py +142 -0
  443. scitex/plt/ax/_plot/_plot_statistical_shaded_line.py +221 -0
  444. scitex/plt/ax/_plot/_plot_violin.py +343 -0
  445. scitex/plt/ax/_style/__init__.py +38 -0
  446. scitex/plt/ax/_style/_add_marginal_ax.py +44 -0
  447. scitex/plt/ax/_style/_add_panel.py +92 -0
  448. scitex/plt/ax/_style/_extend.py +64 -0
  449. scitex/plt/ax/_style/_force_aspect.py +37 -0
  450. scitex/plt/ax/_style/_format_label.py +23 -0
  451. scitex/plt/ax/_style/_hide_spines.py +84 -0
  452. scitex/plt/ax/_style/_map_ticks.py +182 -0
  453. scitex/plt/ax/_style/_rotate_labels.py +215 -0
  454. scitex/plt/ax/_style/_sci_note.py +279 -0
  455. scitex/plt/ax/_style/_set_log_scale.py +299 -0
  456. scitex/plt/ax/_style/_set_meta.py +261 -0
  457. scitex/plt/ax/_style/_set_n_ticks.py +37 -0
  458. scitex/plt/ax/_style/_set_size.py +16 -0
  459. scitex/plt/ax/_style/_set_supxyt.py +116 -0
  460. scitex/plt/ax/_style/_set_ticks.py +276 -0
  461. scitex/plt/ax/_style/_set_xyt.py +121 -0
  462. scitex/plt/ax/_style/_share_axes.py +264 -0
  463. scitex/plt/ax/_style/_shift.py +139 -0
  464. scitex/plt/ax/_style/_show_spines.py +333 -0
  465. scitex/plt/color/_PARAMS.py +70 -0
  466. scitex/plt/color/__init__.py +52 -0
  467. scitex/plt/color/_add_hue_col.py +41 -0
  468. scitex/plt/color/_colors.py +205 -0
  469. scitex/plt/color/_get_colors_from_cmap.py +134 -0
  470. scitex/plt/color/_interpolate.py +29 -0
  471. scitex/plt/color/_vizualize_colors.py +54 -0
  472. scitex/plt/utils/__init__.py +44 -0
  473. scitex/plt/utils/_calc_bacc_from_conf_mat.py +46 -0
  474. scitex/plt/utils/_calc_nice_ticks.py +101 -0
  475. scitex/plt/utils/_close.py +68 -0
  476. scitex/plt/utils/_colorbar.py +96 -0
  477. scitex/plt/utils/_configure_mpl.py +295 -0
  478. scitex/plt/utils/_histogram_utils.py +132 -0
  479. scitex/plt/utils/_im2grid.py +70 -0
  480. scitex/plt/utils/_is_valid_axis.py +78 -0
  481. scitex/plt/utils/_mk_colorbar.py +65 -0
  482. scitex/plt/utils/_mk_patches.py +26 -0
  483. scitex/plt/utils/_scientific_captions.py +638 -0
  484. scitex/plt/utils/_scitex_config.py +223 -0
  485. scitex/reproduce/__init__.py +14 -0
  486. scitex/reproduce/_fix_seeds.py +45 -0
  487. scitex/reproduce/_gen_ID.py +55 -0
  488. scitex/reproduce/_gen_timestamp.py +35 -0
  489. scitex/res/__init__.py +5 -0
  490. scitex/resource/__init__.py +13 -0
  491. scitex/resource/_get_processor_usages.py +281 -0
  492. scitex/resource/_get_specs.py +280 -0
  493. scitex/resource/_log_processor_usages.py +190 -0
  494. scitex/resource/_utils/__init__.py +31 -0
  495. scitex/resource/_utils/_get_env_info.py +481 -0
  496. scitex/resource/limit_ram.py +33 -0
  497. scitex/scholar/__init__.py +24 -0
  498. scitex/scholar/_local_search.py +454 -0
  499. scitex/scholar/_paper.py +244 -0
  500. scitex/scholar/_pdf_downloader.py +325 -0
  501. scitex/scholar/_search.py +393 -0
  502. scitex/scholar/_vector_search.py +370 -0
  503. scitex/scholar/_web_sources.py +457 -0
  504. scitex/stats/__init__.py +31 -0
  505. scitex/stats/_calc_partial_corr.py +17 -0
  506. scitex/stats/_corr_test_multi.py +94 -0
  507. scitex/stats/_corr_test_wrapper.py +115 -0
  508. scitex/stats/_describe_wrapper.py +90 -0
  509. scitex/stats/_multiple_corrections.py +63 -0
  510. scitex/stats/_nan_stats.py +93 -0
  511. scitex/stats/_p2stars.py +116 -0
  512. scitex/stats/_p2stars_wrapper.py +56 -0
  513. scitex/stats/_statistical_tests.py +73 -0
  514. scitex/stats/desc/__init__.py +40 -0
  515. scitex/stats/desc/_describe.py +189 -0
  516. scitex/stats/desc/_nan.py +289 -0
  517. scitex/stats/desc/_real.py +94 -0
  518. scitex/stats/multiple/__init__.py +14 -0
  519. scitex/stats/multiple/_bonferroni_correction.py +72 -0
  520. scitex/stats/multiple/_fdr_correction.py +400 -0
  521. scitex/stats/multiple/_multicompair.py +28 -0
  522. scitex/stats/tests/__corr_test.py +277 -0
  523. scitex/stats/tests/__corr_test_multi.py +343 -0
  524. scitex/stats/tests/__corr_test_single.py +277 -0
  525. scitex/stats/tests/__init__.py +22 -0
  526. scitex/stats/tests/_brunner_munzel_test.py +192 -0
  527. scitex/stats/tests/_nocorrelation_test.py +28 -0
  528. scitex/stats/tests/_smirnov_grubbs.py +98 -0
  529. scitex/str/__init__.py +113 -0
  530. scitex/str/_clean_path.py +75 -0
  531. scitex/str/_color_text.py +52 -0
  532. scitex/str/_decapitalize.py +58 -0
  533. scitex/str/_factor_out_digits.py +281 -0
  534. scitex/str/_format_plot_text.py +498 -0
  535. scitex/str/_grep.py +48 -0
  536. scitex/str/_latex.py +155 -0
  537. scitex/str/_latex_fallback.py +471 -0
  538. scitex/str/_mask_api.py +39 -0
  539. scitex/str/_mask_api_key.py +8 -0
  540. scitex/str/_parse.py +158 -0
  541. scitex/str/_print_block.py +47 -0
  542. scitex/str/_print_debug.py +68 -0
  543. scitex/str/_printc.py +62 -0
  544. scitex/str/_readable_bytes.py +38 -0
  545. scitex/str/_remove_ansi.py +23 -0
  546. scitex/str/_replace.py +134 -0
  547. scitex/str/_search.py +125 -0
  548. scitex/str/_squeeze_space.py +36 -0
  549. scitex/tex/__init__.py +10 -0
  550. scitex/tex/_preview.py +103 -0
  551. scitex/tex/_to_vec.py +116 -0
  552. scitex/torch/__init__.py +18 -0
  553. scitex/torch/_apply_to.py +34 -0
  554. scitex/torch/_nan_funcs.py +77 -0
  555. scitex/types/_ArrayLike.py +44 -0
  556. scitex/types/_ColorLike.py +21 -0
  557. scitex/types/__init__.py +14 -0
  558. scitex/types/_is_listed_X.py +70 -0
  559. scitex/utils/__init__.py +22 -0
  560. scitex/utils/_compress_hdf5.py +116 -0
  561. scitex/utils/_email.py +120 -0
  562. scitex/utils/_grid.py +148 -0
  563. scitex/utils/_notify.py +247 -0
  564. scitex/utils/_search.py +121 -0
  565. scitex/web/__init__.py +38 -0
  566. scitex/web/_search_pubmed.py +438 -0
  567. scitex/web/_summarize_url.py +158 -0
  568. scitex-2.0.0.dist-info/METADATA +307 -0
  569. scitex-2.0.0.dist-info/RECORD +572 -0
  570. scitex-2.0.0.dist-info/WHEEL +6 -0
  571. scitex-2.0.0.dist-info/licenses/LICENSE +7 -0
  572. scitex-2.0.0.dist-info/top_level.txt +1 -0
scitex/dt/_linspace.py ADDED
@@ -0,0 +1,130 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-04-23 10:42:43 (ywatanabe)"
4
+ # File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/dt/_linspace.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/dt/_linspace.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ from typing import Union, Optional, List, Any
13
+ import numpy as np
14
+ import datetime
15
+ from datetime import timedelta
16
+
17
+
18
+ def linspace(
19
+ start_dt: datetime.datetime,
20
+ end_dt: datetime.datetime,
21
+ n_samples: Optional[int] = None,
22
+ sampling_rate: Optional[float] = None,
23
+ ) -> np.ndarray:
24
+ """
25
+ Create a linearly spaced array between two datetime objects.
26
+
27
+ Args:
28
+ start_dt: Starting datetime object
29
+ end_dt: Ending datetime object
30
+ n_samples: Number of samples to create (mutually exclusive with sampling_rate)
31
+ sampling_rate: Sampling rate in Hz (mutually exclusive with n_samples)
32
+
33
+ Returns:
34
+ Array of datetime objects evenly spaced between start_dt and end_dt
35
+ """
36
+ # Type checking
37
+ if not isinstance(start_dt, datetime.datetime):
38
+ raise TypeError(f"start_dt must be a datetime object, got {type(start_dt)}")
39
+
40
+ if not isinstance(end_dt, datetime.datetime):
41
+ raise TypeError(f"end_dt must be a datetime object, got {type(end_dt)}")
42
+
43
+ if n_samples is not None and not isinstance(n_samples, (int, float)):
44
+ raise TypeError(f"n_samples must be a number, got {type(n_samples)}")
45
+
46
+ if sampling_rate is not None and not isinstance(sampling_rate, (int, float)):
47
+ raise TypeError(f"sampling_rate must be a number, got {type(sampling_rate)}")
48
+
49
+ if start_dt >= end_dt:
50
+ raise ValueError("start_dt must be earlier than end_dt")
51
+
52
+ duration_seconds = (end_dt - start_dt).total_seconds()
53
+
54
+ if n_samples is not None and sampling_rate is not None:
55
+ raise ValueError("Provide either n_samples or sampling_rate, not both")
56
+
57
+ if n_samples is None and sampling_rate is None:
58
+ raise ValueError("Either n_samples or sampling_rate must be provided")
59
+
60
+ if sampling_rate is not None:
61
+ if sampling_rate <= 0:
62
+ raise ValueError("sampling_rate must be positive")
63
+ n_samples = int(duration_seconds * sampling_rate) + 1
64
+ else:
65
+ if n_samples <= 0:
66
+ raise ValueError("n_samples must be positive")
67
+
68
+ # Create linear space in seconds
69
+ seconds_array = np.linspace(0, duration_seconds, n_samples)
70
+
71
+ # Convert to datetime objects
72
+ datetime_array = np.array(
73
+ [start_dt + timedelta(seconds=float(sec)) for sec in seconds_array]
74
+ )
75
+
76
+ return datetime_array
77
+
78
+
79
+ # #!/usr/bin/env python3
80
+ # # -*- coding: utf-8 -*-
81
+ # # Timestamp: "2025-04-23 10:38:20 (ywatanabe)"
82
+ # # File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/dt/_linspace.py
83
+ # # ----------------------------------------
84
+ # import os
85
+ # __FILE__ = (
86
+ # "./src/scitex/dt/_linspace.py"
87
+ # )
88
+ # __DIR__ = os.path.dirname(__FILE__)
89
+ # # ----------------------------------------
90
+
91
+ # import numpy as np
92
+ # from datetime import timedelta
93
+
94
+ # def linspace(start_dt, end_dt, n_samples=None, sampling_rate=None):
95
+ # """
96
+ # Create a linearly spaced array between two datetime objects.
97
+
98
+ # Args:
99
+ # start_dt: Starting datetime object
100
+ # end_dt: Ending datetime object
101
+ # n_samples: Number of samples to create (mutually exclusive with sampling_rate)
102
+ # sampling_rate: Sampling rate in Hz (mutually exclusive with n_samples)
103
+
104
+ # Returns:
105
+ # Array of datetime objects evenly spaced between start_dt and end_dt
106
+ # """
107
+
108
+ # duration_seconds = (end_dt - start_dt).total_seconds()
109
+
110
+ # if n_samples is not None and sampling_rate is not None:
111
+ # raise ValueError("Provide either n_samples or sampling_rate, not both")
112
+
113
+ # if n_samples is None and sampling_rate is None:
114
+ # raise ValueError("Either n_samples or sampling_rate must be provided")
115
+
116
+ # if sampling_rate is not None:
117
+ # n_samples = int(duration_seconds * sampling_rate) + 1
118
+
119
+
120
+ # # Create linear space in seconds
121
+ # seconds_array = np.linspace(0, duration_seconds, n_samples)
122
+
123
+ # # Convert to datetime objects
124
+ # datetime_array = np.array([start_dt + timedelta(seconds=float(sec)) for sec in seconds_array])
125
+
126
+ # return datetime_array
127
+
128
+ # # EOF
129
+
130
+ # EOF
scitex/etc/__init__.py ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2025-01-09 08:45:00 (ywatanabe)"
4
+ # File: /data/gpfs/projects/punim2354/ywatanabe/.claude-worktree/scitex_repo/src/scitex/etc/__init__.py
5
+
6
+ """
7
+ Utility functions for miscellaneous tasks.
8
+
9
+ This module provides utility functions that don't fit into other categories,
10
+ such as keyboard input handling for interactive programs.
11
+ """
12
+
13
+ from .wait_key import wait_key, count
14
+
15
+ __all__ = ["wait_key", "count"]
scitex/etc/wait_key.py ADDED
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2023-03-24 23:13:32 (ywatanabe)"
4
+
5
+ import readchar
6
+ import time
7
+ import multiprocessing
8
+
9
+
10
+ def wait_key(p):
11
+ key = "x"
12
+ while key != "q":
13
+ key = readchar.readchar()
14
+ print(key)
15
+ print("q was pressed.")
16
+ p.terminate()
17
+ # event.set()
18
+ # raise Exception
19
+
20
+
21
+ def count():
22
+ counter = 0
23
+ while True:
24
+ print(counter)
25
+ time.sleep(1)
26
+ counter += 1
27
+
28
+
29
+ if __name__ == "__main__":
30
+ p1 = multiprocessing.Process(target=count)
31
+
32
+ p1.start()
33
+ waitKey(p1)
34
+ print("aaa")
@@ -0,0 +1,196 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-05 00:39:26 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/gen/_DimHandler.py
5
+
6
+ """
7
+ This script demonstrates DimHandler, which:
8
+ 1) Keeps designated dimensions,
9
+ 2) Permutes the kept dimensions to the last while maintaining their relative order,
10
+ 3) Reshapes the remaining dimensions to the first, batch dimension,
11
+ 4) (Performs calculations),
12
+ 5) Restores the summarized dimensions to their original shapes.
13
+ """
14
+
15
+ # Imports
16
+ import sys
17
+
18
+ import matplotlib.pyplot as plt
19
+ import numpy as np
20
+ import torch
21
+
22
+
23
+ # Functions
24
+ class DimHandler:
25
+ """
26
+ A utility class for handling dimension manipulations on tensors or arrays, including reshaping and permuting dimensions.
27
+
28
+ Attributes:
29
+ orig_shape (tuple): The original shape of the input tensor or array before any manipulation.
30
+ keepdims (list): The list of dimensions to be kept and moved to the end.
31
+ n_non_keepdims (list): The sizes of the dimensions not kept, used for reshaping back to the original shape.
32
+ n_keepdims (list): The sizes of the kept dimensions, used for reshaping.
33
+
34
+ Example1:
35
+ import torch
36
+
37
+ dh = DimHandler()
38
+ x = torch.rand(1, 2, 3, 4, 5, 6) # Example tensor
39
+ print(x.shape) # torch.Size([1, 2, 3, 4, 5, 6])
40
+ x = dh.fit(x, keepdims=[0, 2, 5])
41
+ print(x.shape) # torch.Size([40, 1, 3, 6])
42
+ x = dh.unfit(x)
43
+ print(x.shape) # torch.Size([2, 4, 5, 1, 3, 6])
44
+
45
+ Example 2:
46
+ import torch
47
+
48
+ dh = DimHandler()
49
+ x = torch.rand(1, 2, 3, 4, 5, 6) # Example tensor
50
+ print(x.shape) # torch.Size([1, 2, 3, 4, 5, 6])
51
+ x = dh.fit(x, keepdims=[0, 2, 5])
52
+ print(x.shape) # torch.Size([40, 1, 3, 6])
53
+ y = x.mean(axis=-2) # calculation on the kept dims
54
+ print(y.shape) # torch.Size([40, 1, 6])
55
+ y = dh.unfit(y)
56
+ print(y.shape) # torch.Size([2, 4, 5, 1, 6])
57
+ """
58
+
59
+ def __init__(self):
60
+ pass
61
+ # self.orig_shape = None
62
+ # self.keepdims = None
63
+
64
+ def fit(self, x, keepdims=[]):
65
+ if isinstance(x, np.ndarray):
66
+ return self._fit_numpy(x, keepdims=keepdims)
67
+ elif isinstance(x, torch.Tensor):
68
+ return self._fit_torch(x, keepdims=keepdims)
69
+
70
+ def _fit_numpy(self, x, keepdims=[]):
71
+ """
72
+ Reshapes the input NumPy array by flattening the dimensions not in `keepdims` and moving the kept dimensions to the end.
73
+
74
+ Arguments:
75
+ x (numpy.ndarray): The input array to be reshaped.
76
+ keepdims (list of int): The indices of the dimensions to keep.
77
+
78
+ Returns:
79
+ x_flattened (numpy.ndarray): The reshaped array with kept dimensions moved to the end.
80
+ """
81
+ assert len(keepdims) <= len(
82
+ x.shape
83
+ ), "keepdims cannot have more dimensions than the array itself."
84
+
85
+ # Normalize negative indices to positive indices
86
+ total_dims = len(x.shape)
87
+ keepdims = [dim if dim >= 0 else total_dims + dim for dim in keepdims]
88
+ keepdims = sorted(set(keepdims))
89
+
90
+ self.shape_fit = x.shape
91
+
92
+ non_keepdims = [ii for ii in range(len(self.shape_fit)) if ii not in keepdims]
93
+
94
+ self.n_non_keepdims = [self.shape_fit[nkd] for nkd in non_keepdims]
95
+ self.n_keepdims = [self.shape_fit[kd] for kd in keepdims]
96
+
97
+ # Permute the array dimensions so that the non-kept dimensions come first
98
+ new_order = non_keepdims + keepdims
99
+ x_permuted = np.transpose(x, axes=new_order)
100
+
101
+ # Flatten the non-kept dimensions
102
+ x_flattened = x_permuted.reshape(-1, *self.n_keepdims)
103
+
104
+ return x_flattened
105
+
106
+ def _fit_torch(self, x, keepdims=[]):
107
+ """
108
+ Reshapes the input tensor or array by flattening the dimensions not in `keepdims` and moving the kept dimensions to the end.
109
+
110
+ Arguments:
111
+ x (torch.Tensor): The input tensor or array to be reshaped.
112
+ keepdims (list of int): The indices of the dimensions to keep.
113
+
114
+ Returns:
115
+ x_flattend (torch.Tensor): The reshaped tensor or array with kept dimensions moved to the end.
116
+
117
+ Note:
118
+ This method modifies the `orig_shape`, `keepdims`, `n_non_keepdims`, and `n_keepdims` attributes based on the input.
119
+ """
120
+ assert len(keepdims) <= len(
121
+ x.shape
122
+ ), "keepdims cannot have more dimensions than the tensor itself."
123
+
124
+ keepdims = torch.tensor(keepdims).clone().detach().cpu().int()
125
+ # Normalize negative indices to positive indices
126
+ total_dims = len(x.shape)
127
+ keepdims = [dim if dim >= 0 else total_dims + dim for dim in keepdims]
128
+ keepdims = sorted(set(keepdims))
129
+
130
+ self.shape_fit = x.shape
131
+
132
+ non_keepdims = [
133
+ int(ii) for ii in torch.arange(len(self.shape_fit)) if ii not in keepdims
134
+ ]
135
+
136
+ self.n_non_keepdims = [self.shape_fit[nkd] for nkd in non_keepdims]
137
+ self.n_keepdims = [self.shape_fit[kd] for kd in keepdims]
138
+
139
+ x_permuted = x.permute(*non_keepdims, *keepdims)
140
+ x_flattend = x_permuted.reshape(-1, *self.n_keepdims)
141
+
142
+ return x_flattend
143
+
144
+ def unfit(self, y):
145
+ """
146
+ Restores the first dimension of reshaped tensor or array back to its original shape before the `fit` operation.
147
+
148
+ Arguments:
149
+ y (torch.Tensor or numpy.array): The tensor or array to be restored to its original shape.
150
+
151
+ Returns:
152
+ y_restored (torch.Tensor or numpy.array): The tensor or array restored to its original shape.
153
+ """
154
+ self.shape_unfit = y.shape
155
+ return y.reshape(*self.n_non_keepdims, *self.shape_unfit[1:])
156
+
157
+
158
+ if __name__ == "__main__":
159
+ import scitex
160
+
161
+ # Start
162
+ CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.gen.start(sys, plt)
163
+
164
+ # Example1:
165
+ scitex.gen.printc("Example 1")
166
+ dh = DimHandler()
167
+ x = torch.rand(1, 2, 3, 4, 5, 6) # Example tensor
168
+ print(x.shape) # torch.Size([1, 2, 3, 4, 5, 6])
169
+ x = dh.fit(x, keepdims=[0, 2, 5])
170
+ print(x.shape) # torch.Size([40, 1, 3, 6])
171
+ x = dh.unfit(x)
172
+ print(x.shape) # torch.Size([2, 4, 5, 1, 3, 6])
173
+
174
+ # Example 2:
175
+ scitex.gen.printc("Example 2")
176
+ dh = DimHandler()
177
+ x = torch.rand(1, 2, 3, 4, 5, 6) # Example tensor
178
+ print(x.shape) # torch.Size([1, 2, 3, 4, 5, 6])
179
+ x = dh.fit(x, keepdims=[0, 2, 5])
180
+ print(x.shape) # torch.Size([40, 1, 3, 6])
181
+ y = x.mean(axis=-2) # calculation on the kept dims
182
+ print(y.shape) # torch.Size([40, 1, 6])
183
+ y = dh.unfit(y)
184
+ print(y.shape) # torch.Size([2, 4, 5, 1, 6])
185
+
186
+ # Close
187
+ scitex.gen.close(CONFIG)
188
+
189
+ # EOF
190
+
191
+ """
192
+ /ssh:ywatanabe@444:/home/ywatanabe/proj/entrance/scitex/gen/_DimHandler.py
193
+ """
194
+
195
+
196
+ # EOF
@@ -0,0 +1,244 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "ywatanabe (2024-11-07 16:06:50)"
4
+ # File: ./scitex_repo/src/scitex/gen/_TimeStamper.py
5
+
6
+ import time
7
+ from typing import Union, Optional
8
+ import pandas as pd
9
+
10
+
11
+ class TimeStamper:
12
+ """
13
+ Functionality:
14
+ * Generates timestamps with comments and tracks elapsed time
15
+ * Records timestamps in a DataFrame for analysis
16
+ * Calculates time differences between timestamps
17
+ Input:
18
+ * Comments for each timestamp
19
+ * Format preference (simple or detailed)
20
+ Output:
21
+ * Formatted timestamp strings
22
+ * DataFrame with timestamp records
23
+ * Time differences between specified timestamps
24
+ Prerequisites:
25
+ * pandas
26
+ """
27
+
28
+ def __init__(self, is_simple: bool = True) -> None:
29
+ self.id: int = -1
30
+ self.start_time: float = time.time()
31
+ self._is_simple: bool = is_simple
32
+ self._prev: float = self.start_time
33
+ self._df_record: pd.DataFrame = pd.DataFrame(
34
+ columns=[
35
+ "timestamp",
36
+ "elapsed_since_start",
37
+ "elapsed_since_prev",
38
+ "comment",
39
+ "formatted_text",
40
+ ]
41
+ )
42
+
43
+ def __call__(self, comment: str = "", verbose: bool = False) -> str:
44
+ now: float = time.time()
45
+ from_start: float = now - self.start_time
46
+ from_prev: float = now - self._prev
47
+
48
+ formatted_from_start: str = time.strftime("%H:%M:%S", time.gmtime(from_start))
49
+ formatted_from_prev: str = time.strftime("%H:%M:%S", time.gmtime(from_prev))
50
+
51
+ self.id += 1
52
+ self._prev = now
53
+
54
+ text: str = (
55
+ f"ID:{self.id} | {formatted_from_start} {comment} | "
56
+ if self._is_simple
57
+ else f"Time (id:{self.id}): total {formatted_from_start}, prev {formatted_from_prev} [hh:mm:ss]: {comment}\n"
58
+ )
59
+
60
+ self._df_record.loc[self.id] = [
61
+ now,
62
+ from_start,
63
+ from_prev,
64
+ comment,
65
+ text,
66
+ ]
67
+
68
+ if verbose:
69
+ print(text)
70
+ return text
71
+
72
+ @property
73
+ def record(self) -> pd.DataFrame:
74
+ """Returns the record DataFrame without the formatted_text column."""
75
+ return self._df_record[
76
+ [
77
+ "timestamp",
78
+ "elapsed_since_start",
79
+ "elapsed_since_prev",
80
+ "comment",
81
+ ]
82
+ ]
83
+
84
+ def delta(self, id1: int, id2: int) -> float:
85
+ """Calculates time difference between two timestamps.
86
+
87
+ Parameters
88
+ ----------
89
+ id1 : int
90
+ First timestamp ID
91
+ id2 : int
92
+ Second timestamp ID
93
+
94
+ Returns
95
+ -------
96
+ float
97
+ Time difference in seconds
98
+
99
+ Raises
100
+ ------
101
+ ValueError
102
+ If IDs don't exist in records
103
+ """
104
+ if id1 < 0:
105
+ id1 = len(self._df_record) + id1
106
+ if id2 < 0:
107
+ id2 = len(self._df_record) + id2
108
+
109
+ if not all(idx in self._df_record.index for idx in [id1, id2]):
110
+ raise ValueError("Invalid timestamp ID(s)")
111
+
112
+ return (
113
+ self._df_record.loc[id1, "timestamp"]
114
+ - self._df_record.loc[id2, "timestamp"]
115
+ )
116
+
117
+
118
+ if __name__ == "__main__":
119
+ ts = TimeStamper(is_simple=True)
120
+ ts("Starting process")
121
+ time.sleep(1)
122
+ ts("One second later")
123
+ time.sleep(2)
124
+ ts("Two seconds later")
125
+
126
+
127
+ # EOF
128
+
129
+ # #!/usr/bin/env python3
130
+ # # -*- coding: utf-8 -*-
131
+ # # Time-stamp: "ywatanabe (2024-11-07 16:06:50)"
132
+ # # File: ./scitex_repo/src/scitex/gen/_TimeStamper.py
133
+
134
+ # import time
135
+ # import pandas as pd
136
+
137
+
138
+ # class TimeStamper:
139
+ # """
140
+ # A class for generating timestamps with optional comments, tracking both the time since object creation and since the last call.
141
+ # """
142
+
143
+ # def __init__(self, is_simple=True):
144
+ # self.id = -1
145
+ # self.start_time = time.time()
146
+ # self._is_simple = is_simple
147
+ # self._prev = self.start_time
148
+ # self._df_record = pd.DataFrame(
149
+ # columns=[
150
+ # "timestamp",
151
+ # "elapsed_since_start",
152
+ # "elapsed_since_prev",
153
+ # "comment",
154
+ # "formatted_text",
155
+ # ]
156
+ # )
157
+
158
+ # def __call__(self, comment="", verbose=False):
159
+ # now = time.time()
160
+ # from_start = now - self.start_time
161
+ # from_prev = now - self._prev
162
+ # formatted_from_start = time.strftime(
163
+ # "%H:%M:%S", time.gmtime(from_start)
164
+ # )
165
+ # formatted_from_prev = time.strftime("%H:%M:%S", time.gmtime(from_prev))
166
+ # self.id += 1
167
+ # self._prev = now
168
+ # text = (
169
+ # f"ID:{self.id} | {formatted_from_start} {comment} | "
170
+ # if self._is_simple
171
+ # else f"Time (id:{self.id}): total {formatted_from_start}, prev {formatted_from_prev} [hh:mm:ss]: {comment}\n"
172
+ # )
173
+
174
+ # # Update DataFrame directly
175
+ # self._df_record.loc[self.id] = [
176
+ # now,
177
+ # from_start,
178
+ # from_prev,
179
+ # comment,
180
+ # text,
181
+ # ]
182
+
183
+ # if verbose:
184
+ # print(text)
185
+ # return text
186
+
187
+ # @property
188
+ # def record(self):
189
+ # return self._df_record[
190
+ # [
191
+ # "timestamp",
192
+ # "elapsed_since_start",
193
+ # "elapsed_since_prev",
194
+ # "comment",
195
+ # ]
196
+ # ]
197
+
198
+ # def delta(self, id1, id2):
199
+ # """
200
+ # Calculate the difference in seconds between two timestamps identified by their IDs.
201
+
202
+ # Parameters:
203
+ # id1 (int): The ID of the first timestamp.
204
+ # id2 (int): The ID of the second timestamp.
205
+
206
+ # Returns:
207
+ # float: The difference in seconds between the two timestamps.
208
+
209
+ # Raises:
210
+ # ValueError: If either id1 or id2 is not in the DataFrame index.
211
+ # """
212
+ # # Adjust for negative indices, similar to negative list indexing in Python
213
+ # if id1 < 0:
214
+ # id1 = len(self._df_record) + id1
215
+ # if id2 < 0:
216
+ # id2 = len(self._df_record) + id2
217
+
218
+ # # Check if both IDs exist in the DataFrame
219
+ # if (
220
+ # id1 not in self._df_record.index
221
+ # or id2 not in self._df_record.index
222
+ # ):
223
+ # raise ValueError(
224
+ # "One or both of the IDs do not exist in the record."
225
+ # )
226
+
227
+ # # Compute the difference in timestamps
228
+ # time_diff = (
229
+ # self._df_record.loc[id1, "timestamp"]
230
+ # - self._df_record.loc[id2, "timestamp"]
231
+ # )
232
+ # return time_diff
233
+
234
+
235
+ # if __name__ == "__main__":
236
+ # ts = TimeStamper(is_simple=True)
237
+ # ts("Starting process")
238
+ # time.sleep(1)
239
+ # ts("One second later")
240
+ # time.sleep(2)
241
+ # ts("Two seconds later")
242
+
243
+
244
+ # # EOF