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,221 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-05 07:37:09 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/pd/_merge_columns.py
5
+
6
+ #!/usr/bin/env python3
7
+ # -*- coding: utf-8 -*-
8
+ # Time-stamp: "2024-10-07 12:03:29 (ywatanabe)"
9
+ # ./src/scitex/pd/_merge_cols.py
10
+
11
+ from typing import Union, List, Tuple
12
+ import pandas as pd
13
+
14
+
15
+ def merge_columns(
16
+ df: pd.DataFrame,
17
+ *args: Union[str, List[str], Tuple[str, ...]],
18
+ sep: str = None,
19
+ sep1: str = "_",
20
+ sep2: str = "-",
21
+ name: str = "merged"
22
+ ) -> pd.DataFrame:
23
+ """Creates a new column by joining specified columns.
24
+
25
+ Example
26
+ -------
27
+ >>> df = pd.DataFrame({
28
+ ... 'A': [0, 5, 10],
29
+ ... 'B': [1, 6, 11],
30
+ ... 'C': [2, 7, 12]
31
+ ... })
32
+ >>> # Simple concatenation with separator
33
+ >>> merge_columns(df, 'A', 'B', sep=' ')
34
+ A B C A_B
35
+ 0 0 1 2 0 1
36
+ 1 5 6 7 5 6
37
+ 2 10 11 12 10 11
38
+
39
+ >>> # With column labels
40
+ >>> merge_columns(df, 'A', 'B', sep1='_', sep2='-')
41
+ A B C A_B
42
+ 0 0 1 2 A-0_B-1
43
+ 1 5 6 7 A-5_B-6
44
+ 2 10 11 12 A-10_B-11
45
+
46
+ Parameters
47
+ ----------
48
+ df : pd.DataFrame
49
+ Input DataFrame
50
+ *args : Union[str, List[str], Tuple[str, ...]]
51
+ Column names to join
52
+ sep : str, optional
53
+ Simple separator for values only (overrides sep1/sep2)
54
+ sep1 : str, optional
55
+ Separator between column-value pairs, by default "_"
56
+ sep2 : str, optional
57
+ Separator between column name and value, by default "-"
58
+ name : str, optional
59
+ Name for the merged column, by default "merged"
60
+
61
+ Returns
62
+ -------
63
+ pd.DataFrame
64
+ DataFrame with added merged column
65
+ """
66
+ _df = df.copy()
67
+ columns = args[0] if len(args) == 1 and isinstance(args[0], (list, tuple)) else args
68
+
69
+ if not columns:
70
+ raise ValueError("No columns specified for merging")
71
+
72
+ if not all(col in _df.columns for col in columns):
73
+ missing = [col for col in columns if col not in _df.columns]
74
+ raise KeyError(f"Columns not found in DataFrame: {missing}")
75
+
76
+ # Handle empty DataFrame case
77
+ if len(_df) == 0:
78
+ # Determine column name
79
+ if name == "merged" and sep is not None:
80
+ new_col_name = "_".join(columns)
81
+ else:
82
+ new_col_name = name
83
+ # Create empty Series with the correct name
84
+ _df[new_col_name] = pd.Series(dtype=str)
85
+ return _df
86
+
87
+ if sep is not None:
88
+ # Simple value concatenation
89
+ merged_col = (
90
+ _df[list(columns)]
91
+ .astype(str)
92
+ .apply(
93
+ lambda row: sep.join(row.values),
94
+ axis=1,
95
+ )
96
+ )
97
+ else:
98
+ # Concatenation with column labels
99
+ merged_col = _df[list(columns)].apply(
100
+ lambda row: sep1.join(f"{col}{sep2}{val}" for col, val in row.items()),
101
+ axis=1,
102
+ )
103
+
104
+ # Determine column name
105
+ if name == "merged" and sep is not None:
106
+ # When using simple separator and default name, use joined column names
107
+ new_col_name = "_".join(columns)
108
+ else:
109
+ # Use provided name or default
110
+ new_col_name = name
111
+
112
+ _df[new_col_name] = merged_col
113
+ return _df
114
+
115
+
116
+ merge_cols = merge_columns
117
+
118
+ # EOF
119
+
120
+ # #!./env/bin/python3
121
+ # # -*- coding: utf-8 -*-
122
+ # # Time-stamp: "2024-10-07 12:03:29 (ywatanabe)"
123
+ # # ./src/scitex/pd/_merge_cols.py
124
+
125
+
126
+ # def merge_columns(df, *args, sep1="_", sep2="-", name="merged"):
127
+ # """
128
+ # Join specified columns with their labels.
129
+
130
+ # Example:
131
+ # import pandas as pd
132
+ # import numpy as np
133
+
134
+ # df = pd.DataFrame(
135
+ # data=np.arange(25).reshape(5, 5),
136
+ # columns=["A", "B", "C", "D", "E"],
137
+ # )
138
+
139
+ # df1 = merge_columns(df, "A", "B", sep1="_", sep2="-")
140
+ # df2 = merge_columns(df, ["A", "B"], sep1="_", sep2="-")
141
+ # assert (df1 == df2).all().all() # True
142
+
143
+ # # A B C D E A_B
144
+ # # 0 0 1 2 3 4 A-0_B-1
145
+ # # 1 5 6 7 8 9 A-5_B-6
146
+ # # 2 10 11 12 13 14 A-10_B-11
147
+ # # 3 15 16 17 18 19 A-15_B-16
148
+ # # 4 20 21 22 23 24 A-20_B-21
149
+
150
+
151
+ # Parameters
152
+ # ----------
153
+ # df : pandas.DataFrame
154
+ # Input DataFrame
155
+ # *args : str or list
156
+ # Column names to join, either as separate arguments or a single list
157
+ # sep1 : str, optional
158
+ # Separator for joining column names, default "_"
159
+ # sep2 : str, optional
160
+ # Separator between column name and value, default "-"
161
+
162
+ # Returns
163
+ # -------
164
+ # pandas.DataFrame
165
+ # DataFrame with added merged column
166
+ # """
167
+ # _df = df.copy()
168
+ # columns = (
169
+ # args[0]
170
+ # if len(args) == 1 and isinstance(args[0], (list, tuple))
171
+ # else args
172
+ # )
173
+ # merged_col = _df[list(columns)].apply(
174
+ # lambda row: sep1.join(f"{col}{sep2}{val}" for col, val in row.items()),
175
+ # axis=1,
176
+ # )
177
+
178
+ # new_col_name = sep1.join(columns) if not name else str(name)
179
+ # _df[new_col_name] = merged_col
180
+ # return _df
181
+
182
+
183
+ # merge_cols = merge_columns
184
+
185
+ # # def merge_columns(_df, *columns):
186
+ # # """
187
+ # # Add merged columns in string.
188
+
189
+ # # DF = pd.DataFrame(data=np.arange(25).reshape(5,5),
190
+ # # columns=["A", "B", "C", "D", "E"],
191
+ # # )
192
+
193
+ # # print(DF)
194
+
195
+ # # # A B C D E
196
+ # # # 0 0 1 2 3 4
197
+ # # # 1 5 6 7 8 9
198
+ # # # 2 10 11 12 13 14
199
+ # # # 3 15 16 17 18 19
200
+ # # # 4 20 21 22 23 24
201
+
202
+ # # print(merge_columns(DF, "A", "B", "C"))
203
+
204
+ # # # A B C D E A_B_C
205
+ # # # 0 0 1 2 3 4 0_1_2
206
+ # # # 1 5 6 7 8 9 5_6_7
207
+ # # # 2 10 11 12 13 14 10_11_12
208
+ # # # 3 15 16 17 18 19 15_16_17
209
+ # # # 4 20 21 22 23 24 20_21_22
210
+ # # """
211
+ # # from copy import deepcopy
212
+
213
+ # # df = deepcopy(_df)
214
+ # # merged = deepcopy(df[columns[0]]) # initialization
215
+ # # for c in columns[1:]:
216
+ # # merged = scitex.ml.utils.merge_labels(list(merged), deepcopy(df[c]))
217
+ # # df.loc[:, scitex.gen.connect_strs(columns)] = merged
218
+ # # return df
219
+
220
+
221
+ # EOF
scitex/pd/_mv.py ADDED
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-05 07:39:12 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/pd/_mv.py
5
+
6
+
7
+ def mv(df, key, position, axis=1):
8
+ """
9
+ Move a row or column to a specified position in a DataFrame.
10
+
11
+ Args:
12
+ df (pandas.DataFrame): The input DataFrame.
13
+ key (str): The label of the row or column to move.
14
+ position (int): The position to move the row or column to.
15
+ axis (int, optional): 0 for rows, 1 for columns. Defaults to 1.
16
+
17
+ Returns:
18
+ pandas.DataFrame: A new DataFrame with the row or column moved.
19
+ """
20
+ if axis == 0:
21
+ items = df.index.tolist()
22
+ else:
23
+ items = df.columns.tolist()
24
+ items.remove(key)
25
+
26
+ if position < 0:
27
+ position += len(items) + 1
28
+
29
+ items.insert(position, key)
30
+ return df.reindex(items, axis=axis)
31
+
32
+
33
+ def mv_to_first(df, key, axis=1):
34
+ """
35
+ Move a row or column to the first position in a DataFrame.
36
+
37
+ Args:
38
+ df (pandas.DataFrame): The input DataFrame.
39
+ key (str): The label of the row or column to move.
40
+ axis (int, optional): 0 for rows, 1 for columns. Defaults to 1.
41
+
42
+ Returns:
43
+ pandas.DataFrame: A new DataFrame with the row or column moved to the first position.
44
+ """
45
+ return mv(df, key, 0, axis)
46
+
47
+
48
+ def mv_to_last(df, key, axis=1):
49
+ """
50
+ Move a row or column to the last position in a DataFrame.
51
+
52
+ Args:
53
+ df (pandas.DataFrame): The input DataFrame.
54
+ key (str): The label of the row or column to move.
55
+ axis (int, optional): 0 for rows, 1 for columns. Defaults to 1.
56
+
57
+ Returns:
58
+ pandas.DataFrame: A new DataFrame with the row or column moved to the last position.
59
+ """
60
+ return mv(df, key, -1, axis)
61
+
62
+
63
+ # EOF
scitex/pd/_replace.py ADDED
@@ -0,0 +1,62 @@
1
+ #!./env/bin/python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-08-29 23:08:35 (ywatanabe)"
4
+ # ./src/scitex/pd/_replace.py
5
+
6
+
7
+ def replace(dataframe, old_value, new_value=None, regex=False, cols=None):
8
+ """
9
+ Replace values in a DataFrame.
10
+
11
+ Example
12
+ -------
13
+ import pandas as pd
14
+ df = pd.DataFrame({'A': ['abc-123', 'def-456'], 'B': ['ghi-789', 'jkl-012']})
15
+
16
+ # Replace single value
17
+ df_replaced = replace(df, 'abc', 'xyz')
18
+
19
+ # Replace with dictionary
20
+ replace_dict = {'-': '_', '1': 'one'}
21
+ df_replaced = replace(df, replace_dict, cols=['A'])
22
+ print(df_replaced)
23
+
24
+ Parameters
25
+ ----------
26
+ dataframe : pandas.DataFrame
27
+ Input DataFrame to modify.
28
+ old_value : str, dict
29
+ If str, the value to replace (requires new_value).
30
+ If dict, mapping of old values (keys) to new values (values).
31
+ new_value : str, optional
32
+ New value to replace old_value with. Required if old_value is str.
33
+ regex : bool, optional
34
+ If True, treat replacement keys as regular expressions. Default is False.
35
+ cols : list of str, optional
36
+ List of column names to apply replacements. If None, apply to all columns.
37
+
38
+ Returns
39
+ -------
40
+ pandas.DataFrame
41
+ DataFrame with specified replacements applied.
42
+ """
43
+ dataframe = dataframe.copy()
44
+
45
+ # Handle different input formats
46
+ if isinstance(old_value, dict):
47
+ replace_dict = old_value
48
+ else:
49
+ if new_value is None:
50
+ raise ValueError("new_value must be provided when old_value is not a dict")
51
+ replace_dict = {old_value: new_value}
52
+
53
+ # Apply replacements to all columns if cols not specified
54
+ if cols is None:
55
+ # Use pandas replace method for all columns
56
+ return dataframe.replace(replace_dict, regex=regex)
57
+ else:
58
+ # Apply to specific columns
59
+ for column in cols:
60
+ if column in dataframe.columns:
61
+ dataframe[column] = dataframe[column].replace(replace_dict, regex=regex)
62
+ return dataframe
scitex/pd/_round.py ADDED
@@ -0,0 +1,93 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-10-06 11:13:00 (ywatanabe)"
4
+ # /home/ywatanabe/proj/_scitex_repo_openhands/src/scitex/pd/_round.py
5
+
6
+ import numpy as np
7
+ import pandas as pd
8
+
9
+
10
+ def round(df: pd.DataFrame, factor: int = 3) -> pd.DataFrame:
11
+ """
12
+ Round numeric values in a DataFrame to a specified number of decimal places.
13
+
14
+ Example
15
+ -------
16
+ >>> df = pd.DataFrame({'A': [1.23456, 2.34567], 'B': ['abc', 'def'], 'C': [3, 4]})
17
+ >>> round(df, 2)
18
+ A B C
19
+ 0 1.23 abc 3
20
+ 1 2.35 def 4
21
+
22
+ Parameters
23
+ ----------
24
+ df : pd.DataFrame
25
+ Input DataFrame
26
+ factor : int, optional
27
+ Number of decimal places to round to (default is 3)
28
+
29
+ Returns
30
+ -------
31
+ pd.DataFrame
32
+ DataFrame with rounded numeric values
33
+ """
34
+
35
+ def custom_round(column):
36
+ # Skip non-numeric types like datetime, categorical, string
37
+ if pd.api.types.is_datetime64_any_dtype(column):
38
+ return column
39
+ if pd.api.types.is_categorical_dtype(column):
40
+ return column
41
+ if pd.api.types.is_string_dtype(column):
42
+ return column
43
+ # Note: boolean types are allowed to be converted to numeric
44
+ if pd.api.types.is_object_dtype(column) and not pd.api.types.is_numeric_dtype(column) and not pd.api.types.is_bool_dtype(column):
45
+ return column
46
+
47
+ try:
48
+ # Handle boolean columns explicitly
49
+ if pd.api.types.is_bool_dtype(column):
50
+ return column.astype(int)
51
+
52
+ numeric_column = pd.to_numeric(column, errors="coerce")
53
+ if np.issubdtype(numeric_column.dtype, np.integer):
54
+ return numeric_column.astype(int)
55
+
56
+ # For float columns, round first
57
+ rounded = numeric_column.round(factor)
58
+
59
+ # If factor is 0 and all values are whole numbers, convert to int
60
+ if factor == 0 and (rounded % 1 == 0).all() and not rounded.isna().any():
61
+ return rounded.astype(int)
62
+
63
+ return rounded
64
+
65
+ except (ValueError, TypeError):
66
+ return column
67
+
68
+ return df.apply(custom_round)
69
+
70
+
71
+ #!/usr/bin/env python3
72
+ # -*- coding: utf-8 -*-
73
+ # Time-stamp: "2024-10-05 20:40:32 (ywatanabe)"
74
+ # /home/ywatanabe/proj/_scitex_repo_openhands/src/scitex/pd/_round.py
75
+
76
+ # import numpy as np
77
+
78
+ # def round(df, factor=3):
79
+ # return df.apply(lambda x: x.round(factor) if np.issubdtype(x.dtype, np.number) else x)
80
+
81
+
82
+ # def round(df, factor=3):
83
+ # def custom_round(x):
84
+ # try:
85
+ # numeric_x = pd.to_numeric(x, errors='raise')
86
+ # if np.issubdtype(numeric_x.dtype, np.integer):
87
+ # return numeric_x
88
+ # else:
89
+ # return numeric_x.apply(lambda y: float(f'{y:.{factor}g}'))
90
+ # except (ValueError, TypeError):
91
+ # return x
92
+
93
+ # return df.apply(custom_round)
scitex/pd/_slice.py ADDED
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-05 07:45:00 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/pd/_slice.py
5
+
6
+ from typing import Dict, Union, List, Optional
7
+ import builtins
8
+
9
+ import pandas as pd
10
+
11
+ from ._find_indi import find_indi
12
+
13
+
14
+ def slice(
15
+ df: pd.DataFrame,
16
+ conditions: Union[
17
+ builtins.slice, Dict[str, Union[str, int, float, List]], None
18
+ ] = None,
19
+ columns: Optional[List[str]] = None,
20
+ ) -> pd.DataFrame:
21
+ """Slices DataFrame rows and/or columns.
22
+
23
+ Example
24
+ -------
25
+ >>> df = pd.DataFrame({'A': [1, 2, 3], 'B': ['x', 'y', 'x']})
26
+ >>> # Slice by row indices
27
+ >>> result = slice(df, slice(0, 2))
28
+ >>> # Slice by conditions
29
+ >>> result = slice(df, {'A': [1, 2], 'B': 'x'})
30
+ >>> # Slice columns
31
+ >>> result = slice(df, columns=['A'])
32
+
33
+ Parameters
34
+ ----------
35
+ df : pd.DataFrame
36
+ Input DataFrame to slice
37
+ conditions : slice, Dict, or None
38
+ Either a slice object for row indices, or a dictionary of column conditions
39
+ columns : List[str], optional
40
+ List of column names to select
41
+
42
+ Returns
43
+ -------
44
+ pd.DataFrame
45
+ Sliced DataFrame
46
+ """
47
+ result = df.copy()
48
+
49
+ # Handle row slicing
50
+ if isinstance(conditions, builtins.slice):
51
+ result = result.iloc[conditions]
52
+ elif isinstance(conditions, dict):
53
+ indices = find_indi(result, conditions)
54
+ result = result.loc[indices]
55
+
56
+ # Handle column slicing
57
+ if columns is not None:
58
+ result = result[columns]
59
+
60
+ return result
61
+
62
+
63
+ # EOF
scitex/pd/_sort.py ADDED
@@ -0,0 +1,91 @@
1
+ #!./env/bin/python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-08-25 09:35:39 (ywatanabe)"
4
+ # ./src/scitex/pd/_sort.py
5
+
6
+ import pandas as pd
7
+
8
+
9
+ def sort(
10
+ dataframe,
11
+ by=None,
12
+ ascending=True,
13
+ inplace=False,
14
+ kind="quicksort",
15
+ na_position="last",
16
+ ignore_index=False,
17
+ key=None,
18
+ orders=None,
19
+ ):
20
+ """
21
+ Sort DataFrame by specified column(s) with optional custom ordering and column reordering.
22
+
23
+ Example
24
+ -------
25
+ import pandas as pd
26
+ df = pd.DataFrame({'A': ['foo', 'bar', 'baz'], 'B': [3, 2, 1]})
27
+ custom_order = {'A': ['bar', 'baz', 'foo']}
28
+ sorted_df = sort(df, by=None, orders=custom_order)
29
+ print(sorted_df)
30
+
31
+ Parameters
32
+ ----------
33
+ dataframe : pandas.DataFrame
34
+ The DataFrame to sort.
35
+ by : str or list of str, optional
36
+ Name(s) of column(s) to sort by.
37
+ ascending : bool or list of bool, default True
38
+ Sort ascending vs. descending.
39
+ inplace : bool, default False
40
+ If True, perform operation in-place.
41
+ kind : {'quicksort', 'mergesort', 'heapsort', 'stable'}, default 'quicksort'
42
+ Choice of sorting algorithm.
43
+ na_position : {'first', 'last'}, default 'last'
44
+ Puts NaNs at the beginning if 'first'; 'last' puts NaNs at the end.
45
+ ignore_index : bool, default False
46
+ If True, the resulting axis will be labeled 0, 1, …, n - 1.
47
+ key : callable, optional
48
+ Apply the key function to the values before sorting.
49
+ orders : dict, optional
50
+ Dictionary of column names and their custom sort orders.
51
+
52
+ Returns
53
+ -------
54
+ pandas.DataFrame
55
+ Sorted DataFrame with reordered columns.
56
+ """
57
+ if orders:
58
+ by = [by] if isinstance(by, str) else list(orders.keys()) if by is None else by
59
+
60
+ def apply_custom_order(column):
61
+ return (
62
+ pd.Categorical(column, categories=orders[column.name], ordered=True)
63
+ if column.name in orders
64
+ else column
65
+ )
66
+
67
+ key = apply_custom_order
68
+ elif isinstance(by, str):
69
+ by = [by]
70
+
71
+ sorted_df = dataframe.sort_values(
72
+ by=by,
73
+ ascending=ascending,
74
+ inplace=False,
75
+ kind=kind,
76
+ na_position=na_position,
77
+ ignore_index=ignore_index,
78
+ key=key,
79
+ )
80
+
81
+ # Reorder columns
82
+ if by:
83
+ other_columns = [col for col in sorted_df.columns if col not in by]
84
+ sorted_df = sorted_df[by + other_columns]
85
+
86
+ if inplace:
87
+ dataframe.update(sorted_df)
88
+ dataframe.reindex(columns=sorted_df.columns)
89
+ return dataframe
90
+ else:
91
+ return sorted_df
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-08 04:35:31 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/pd/_to_numeric.py
5
+
6
+ import pandas as pd
7
+
8
+
9
+ def to_numeric(df, errors="coerce"):
10
+ """Convert all possible columns in a DataFrame to numeric types.
11
+
12
+ Parameters
13
+ ----------
14
+ df : pd.DataFrame
15
+ Input DataFrame
16
+ errors : str, optional
17
+ How to handle errors. 'coerce' (default) converts invalid values to NaN,
18
+ 'ignore' leaves non-numeric columns unchanged, 'raise' raises exceptions.
19
+
20
+ Returns
21
+ -------
22
+ pd.DataFrame
23
+ DataFrame with numeric columns converted
24
+ """
25
+ df_copy = df.copy()
26
+ for col in df_copy.columns:
27
+ # First try to convert
28
+ original_col = df_copy[col]
29
+ converted_col = pd.to_numeric(df_copy[col], errors="coerce")
30
+
31
+ # Check if conversion resulted in all NaN when original had values
32
+ if converted_col.isna().all() and not original_col.isna().all():
33
+ # This is likely a pure string column
34
+ if errors == "ignore":
35
+ # Keep original for pure string columns
36
+ continue
37
+ else:
38
+ # For coerce, still apply it
39
+ df_copy[col] = converted_col
40
+ elif not converted_col.equals(original_col):
41
+ # Conversion changed something
42
+ if errors == "ignore":
43
+ # Only convert if it doesn't introduce new NaNs
44
+ if converted_col.isna().sum() == original_col.isna().sum():
45
+ df_copy[col] = converted_col
46
+ elif errors == "coerce":
47
+ df_copy[col] = converted_col
48
+ elif errors == "raise":
49
+ df_copy[col] = pd.to_numeric(df_copy[col], errors="raise")
50
+ return df_copy
51
+
52
+
53
+ # EOF