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,126 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-05 08:11:05 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/pd/_find_indi.py
5
+
6
+ from typing import Dict, List, Union
7
+
8
+ import pandas as pd
9
+
10
+
11
+ # def find_indi(df: pd.DataFrame, conditions: Dict[str, Union[str, int, float, List]]) -> pd.Series:
12
+ # """Finds indices of rows that satisfy all given conditions in a DataFrame.
13
+
14
+ # Example
15
+ # -------
16
+ # >>> df = pd.DataFrame({'A': [1, 2, 3], 'B': ['x', 'y', 'x']})
17
+ # >>> conditions = {'A': [1, 2], 'B': 'x'}
18
+ # >>> result = find_indi(df, conditions)
19
+ # >>> print(result)
20
+ # 0 True
21
+ # 1 False
22
+ # 2 False
23
+ # dtype: bool
24
+
25
+ # Parameters
26
+ # ----------
27
+ # df : pd.DataFrame
28
+ # Input DataFrame to search in
29
+ # conditions : Dict[str, Union[str, int, float, List]]
30
+ # Dictionary of column names and their target values
31
+
32
+ # Returns
33
+ # -------
34
+ # pd.Series
35
+ # Boolean Series indicating which rows satisfy all conditions
36
+
37
+ # Raises
38
+ # ------
39
+ # KeyError
40
+ # If any column in conditions is not found in DataFrame
41
+ # """
42
+ # if not all(col in df.columns for col in conditions):
43
+ # missing_cols = [col for col in conditions if col not in df.columns]
44
+ # raise KeyError(f"Columns not found in DataFrame: {missing_cols}")
45
+
46
+ # condition_series = []
47
+ # for key, value in conditions.items():
48
+ # if isinstance(value, (list, tuple)):
49
+ # condition_series.append(df[key].isin(value))
50
+ # else:
51
+ # condition_series.append(df[key] == value)
52
+
53
+ # return pd.concat(condition_series, axis=1).all(axis=1)
54
+
55
+
56
+ def find_indi(
57
+ df: pd.DataFrame, conditions: Dict[str, Union[str, int, float, List]]
58
+ ) -> List[int]:
59
+ """Finds indices of rows that satisfy conditions, handling NaN values.
60
+
61
+ Example
62
+ -------
63
+ >>> df = pd.DataFrame({'A': [1, 2, None], 'B': ['x', 'y', 'x']})
64
+ >>> conditions = {'A': [1, None], 'B': 'x'}
65
+ >>> result = find_indi(df, conditions)
66
+
67
+ Parameters
68
+ ----------
69
+ df : pd.DataFrame
70
+ Input DataFrame
71
+ conditions : Dict[str, Union[str, int, float, List]]
72
+ Column conditions
73
+
74
+ Returns
75
+ -------
76
+ List[int]
77
+ List of integer indices of matching rows
78
+ """
79
+ if not conditions:
80
+ return []
81
+
82
+ if not all(col in df.columns for col in conditions):
83
+ missing_cols = [col for col in conditions if col not in df.columns]
84
+ raise KeyError(f"Columns not found in DataFrame: {missing_cols}")
85
+
86
+ condition_series = []
87
+ for key, value in conditions.items():
88
+ if isinstance(value, (list, tuple)):
89
+ # Handle NaN in lists
90
+ has_na = False
91
+ try:
92
+ # Check for None
93
+ if None in value:
94
+ has_na = True
95
+ # Check for pd.NA (may raise TypeError)
96
+ elif any(v is pd.NA for v in value):
97
+ has_na = True
98
+ # Check for np.nan
99
+ elif any(pd.isna(v) for v in value):
100
+ has_na = True
101
+ except (TypeError, ValueError):
102
+ # If any check fails, try alternative approach
103
+ has_na = any(
104
+ pd.isna(v) if not isinstance(v, str) else False for v in value
105
+ )
106
+
107
+ if has_na:
108
+ condition = df[key].isin(value) | df[key].isna()
109
+ else:
110
+ condition = df[key].isin(value)
111
+ else:
112
+ # Handle single NaN value
113
+ if pd.isna(value):
114
+ condition = df[key].isna()
115
+ else:
116
+ condition = df[key] == value
117
+ condition_series.append(condition)
118
+
119
+ if condition_series:
120
+ mask = pd.concat(condition_series, axis=1).all(axis=1)
121
+ return df.index[mask].tolist()
122
+ else:
123
+ return []
124
+
125
+
126
+ # EOF
@@ -0,0 +1,113 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-03 03:25:00 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/pd/_find_pval.py
5
+
6
+ #!/usr/bin/env python3
7
+ # -*- coding: utf-8 -*-
8
+ # Time-stamp: "2024-10-06 11:09:07 (ywatanabe)"
9
+ # /home/ywatanabe/proj/_scitex_repo_openhands/src/scitex/stats/_find_pval_col.py
10
+
11
+ """
12
+ Functionality:
13
+ - Identifies column name(s) in a DataFrame or keys in other data structures that correspond to p-values
14
+ Input:
15
+ - pandas DataFrame, numpy array, list, or dict
16
+ Output:
17
+ - String or list of strings representing the identified p-value column name(s) or key(s), or None if not found
18
+ Prerequisites:
19
+ - pandas, numpy libraries
20
+ """
21
+
22
+ import re
23
+ from typing import Dict, List, Optional, Union
24
+
25
+ import numpy as np
26
+ import pandas as pd
27
+
28
+
29
+ def find_pval(
30
+ data: Union[pd.DataFrame, np.ndarray, List, Dict], multiple: bool = True
31
+ ) -> Union[Optional[str], List[str]]:
32
+ """
33
+ Find p-value column name(s) or key(s) in various data structures.
34
+
35
+ Example:
36
+ --------
37
+ >>> df = pd.DataFrame({'p_value': [0.05, 0.01], 'pval': [0.1, 0.001], 'other': [1, 2]})
38
+ >>> find_pval(df)
39
+ ['p_value', 'pval']
40
+ >>> find_pval(df, multiple=False)
41
+ 'p_value'
42
+
43
+ Parameters:
44
+ -----------
45
+ data : Union[pd.DataFrame, np.ndarray, List, Dict]
46
+ Data structure to search for p-value column or key
47
+ multiple : bool, optional
48
+ If True, return all matches; if False, return only the first match (default is True)
49
+
50
+ Returns:
51
+ --------
52
+ Union[Optional[str], List[str]]
53
+ Name(s) of the column(s) or key(s) that match p-value patterns, or None if not found
54
+ """
55
+ if isinstance(data, pd.DataFrame):
56
+ return _find_pval_col(data, multiple)
57
+ elif isinstance(data, (np.ndarray, list, dict)):
58
+ return _find_pval(data, multiple)
59
+ else:
60
+ raise ValueError("Input must be a pandas DataFrame, numpy array, list, or dict")
61
+
62
+
63
+ def _find_pval(
64
+ data: Union[np.ndarray, List, Dict], multiple: bool
65
+ ) -> Union[Optional[str], List[str]]:
66
+ pattern = re.compile(r"p[-_]?val(ue)?(?!.*stars)", re.IGNORECASE)
67
+ matches = []
68
+
69
+ if isinstance(data, dict):
70
+ matches = [key for key in data.keys() if pattern.search(str(key))]
71
+ elif (
72
+ isinstance(data, (np.ndarray, list))
73
+ and len(data) > 0
74
+ and isinstance(data[0], dict)
75
+ ):
76
+ matches = [key for key in data[0].keys() if pattern.search(str(key))]
77
+
78
+ return matches if multiple else (matches[0] if matches else None)
79
+
80
+
81
+ def _find_pval_col(
82
+ df: pd.DataFrame, multiple: bool = False
83
+ ) -> Union[Optional[str], List[str]]:
84
+ """
85
+ Find p-value column name(s) in a DataFrame.
86
+
87
+ Example:
88
+ --------
89
+ >>> df = pd.DataFrame({'p_value': [0.05, 0.01], 'pval': [0.1, 0.001], 'other': [1, 2]})
90
+ >>> find_pval_col(df)
91
+ ['p_value', 'pval']
92
+ >>> find_pval_col(df, multiple=False)
93
+ 'p_value'
94
+
95
+ Parameters:
96
+ -----------
97
+ df : pd.DataFrame
98
+ DataFrame to search for p-value column(s)
99
+ multiple : bool, optional
100
+ If True, return all matches; if False, return only the first match (default is False)
101
+
102
+ Returns:
103
+ --------
104
+ Union[Optional[str], List[str]]
105
+ Name(s) of the column(s) that match p-value patterns, or None if not found
106
+ """
107
+ pattern = re.compile(r"p[-_]?val(ue)?(?!.*stars)", re.IGNORECASE)
108
+ matches = [col for col in df.columns if pattern.search(str(col))]
109
+
110
+ return matches if multiple else (matches[0] if matches else None)
111
+
112
+
113
+ # EOF
scitex/pd/_force_df.py ADDED
@@ -0,0 +1,154 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-04-27 19:59:11 (ywatanabe)"
4
+ # File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/pd/_force_df.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/pd/_force_df.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ import numpy as np
13
+ import pandas as pd
14
+
15
+ from ..types import is_listed_X
16
+
17
+
18
+ def force_df(data, filler=np.nan):
19
+ """
20
+ Convert various data types to pandas DataFrame.
21
+
22
+ Parameters
23
+ ----------
24
+ data : various
25
+ The data to convert to DataFrame. Can be DataFrame, Series, ndarray,
26
+ list, tuple, dict, scalar value, etc.
27
+ filler : any, optional
28
+ Value to use for filling missing values, by default np.nan
29
+
30
+ Returns
31
+ -------
32
+ pd.DataFrame
33
+ Data converted to DataFrame
34
+
35
+ Examples
36
+ --------
37
+ >>> import scitex
38
+ >>> import pandas as pd
39
+ >>> import numpy as np
40
+
41
+ # DataFrame input returns the same DataFrame
42
+ >>> df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
43
+ >>> scitex.pd.force_df(df) is df
44
+ True
45
+
46
+ # Series input is converted to DataFrame
47
+ >>> series = pd.Series([1, 2, 3], name='test')
48
+ >>> scitex.pd.force_df(series)
49
+ test
50
+ 0 1
51
+ 1 2
52
+ 2 3
53
+
54
+ # NumPy array input is converted to DataFrame
55
+ >>> arr = np.array([1, 2, 3])
56
+ >>> scitex.pd.force_df(arr)
57
+ value
58
+ 0 1
59
+ 1 2
60
+ 2 3
61
+
62
+ # Scalar values are converted to single-value DataFrames
63
+ >>> scitex.pd.force_df(42)
64
+ value
65
+ 0 42
66
+
67
+ # Lists and tuples are converted to DataFrame
68
+ >>> scitex.pd.force_df([1, 2, 3])
69
+ value
70
+ 0 1
71
+ 1 2
72
+ 2 3
73
+
74
+ # Dictionaries are converted to DataFrame with appropriate handling
75
+ # of different length values
76
+ >>> data = {'A': [1, 2, 3], 'B': [4, 5]}
77
+ >>> scitex.pd.force_df(data)
78
+ A B
79
+ 0 1 4
80
+ 1 2 5
81
+ 2 3 NaN
82
+ """
83
+ # Return None as empty DataFrame
84
+ if data is None:
85
+ return pd.DataFrame()
86
+
87
+ # Return DataFrame as is
88
+ if isinstance(data, pd.DataFrame):
89
+ return data
90
+
91
+ # Convert Series to DataFrame
92
+ if isinstance(data, pd.Series):
93
+ return data.to_frame()
94
+
95
+ # Convert numpy array to DataFrame
96
+ if isinstance(data, np.ndarray):
97
+ # Handle 1D array
98
+ if data.ndim == 1:
99
+ return pd.DataFrame(data, columns=['value'])
100
+ # Handle 2D array
101
+ elif data.ndim == 2:
102
+ return pd.DataFrame(data)
103
+ # Handle higher dimensional arrays
104
+ else:
105
+ shape = data.shape
106
+ reshaped = data.reshape(shape[0], -1)
107
+ return pd.DataFrame(reshaped)
108
+
109
+ # Handle scalar values (int, float, str, etc.)
110
+ if isinstance(data, (int, float, str, bool)):
111
+ return pd.DataFrame([data], columns=['value'])
112
+
113
+ # Handle lists and tuples
114
+ if isinstance(data, (list, tuple)):
115
+ # Handle list of lists/arrays -> DataFrame
116
+ if len(data) > 0 and isinstance(data[0], (list, tuple, np.ndarray)):
117
+ return pd.DataFrame(data)
118
+ # Handle simple list/tuple -> single column DataFrame
119
+ else:
120
+ return pd.DataFrame(data, columns=['value'])
121
+
122
+ # Continue with the original implementation for dictionaries
123
+ if isinstance(data, dict):
124
+ # Original implementation
125
+ permutable_dict = data.copy()
126
+
127
+ # Get the lengths
128
+ max_len = 0
129
+ for k, v in permutable_dict.items():
130
+ # Check if v is an iterable (but not string) or treat as single length otherwise
131
+ if isinstance(v, (str, int, float)) or not hasattr(v, "__len__"):
132
+ length = 1
133
+ else:
134
+ length = len(v)
135
+ max_len = max(max_len, length)
136
+
137
+ # Replace with appropriately filled list
138
+ for k, v in permutable_dict.items():
139
+ if isinstance(v, (str, int, float)) or not hasattr(v, "__len__"):
140
+ permutable_dict[k] = [v] + [filler] * (max_len - 1)
141
+ else:
142
+ permutable_dict[k] = list(v) + [filler] * (max_len - len(v))
143
+
144
+ # Puts them into a DataFrame
145
+ return pd.DataFrame(permutable_dict)
146
+
147
+ # For any other iterable type
148
+ try:
149
+ return pd.DataFrame(list(data), columns=['value'])
150
+ except:
151
+ raise TypeError(f"Cannot convert object of type {type(data)} to DataFrame")
152
+
153
+
154
+ # EOF
scitex/pd/_from_xyz.py ADDED
@@ -0,0 +1,71 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-09-26 07:22:18 (ywatanabe)"
4
+ # /home/ywatanabe/proj/_scitex_repo_openhands/src/scitex/pd/_from_xyz.py
5
+
6
+ import pandas as pd
7
+ import numpy as np
8
+
9
+
10
+ def from_xyz(data_frame, x=None, y=None, z=None, square=False):
11
+ """
12
+ Convert a DataFrame with 'x', 'y', 'z' format into a heatmap DataFrame.
13
+
14
+ Example
15
+ -------
16
+ import pandas as pd
17
+ data = pd.DataFrame({
18
+ 'col1': ['A', 'B', 'C', 'A'],
19
+ 'col2': ['X', 'Y', 'Z', 'Y'],
20
+ 'p_val': [0.01, 0.05, 0.001, 0.1]
21
+ })
22
+ data = data.rename(columns={"col1": "x", "col2": "y", "p_val": "z"})
23
+ result = from_xyz(data)
24
+ print(result)
25
+
26
+ Parameters
27
+ ----------
28
+ data_frame : pandas.DataFrame
29
+ Input DataFrame with columns for x, y, and z values.
30
+ x : str, optional
31
+ Name of the column to use as x-axis. Defaults to 'x'.
32
+ y : str, optional
33
+ Name of the column to use as y-axis. Defaults to 'y'.
34
+ z : str, optional
35
+ Name of the column to use as z-values. Defaults to 'z'.
36
+ square : bool, optional
37
+ If True, force the output to be a square matrix. Defaults to False.
38
+
39
+ Returns
40
+ -------
41
+ pandas.DataFrame
42
+ A DataFrame in heatmap/pivot format.
43
+ """
44
+ x = x or "x"
45
+ y = y or "y"
46
+ z = z or "z"
47
+
48
+ heatmap = pd.pivot_table(data_frame, values=z, index=y, columns=x, aggfunc="first")
49
+
50
+ if square:
51
+ # Make it square by including all unique labels
52
+ all_labels = sorted(set(heatmap.index) | set(heatmap.columns))
53
+ heatmap = heatmap.reindex(index=all_labels, columns=all_labels)
54
+
55
+ heatmap = heatmap.fillna(0)
56
+
57
+ return heatmap
58
+
59
+
60
+ if __name__ == "__main__":
61
+ np.random.seed(42)
62
+ stats = pd.DataFrame(
63
+ {
64
+ "col1": np.random.choice(["A", "B", "C"], 100),
65
+ "col2": np.random.choice(["X", "Y", "Z"], 100),
66
+ "p_val": np.random.rand(100),
67
+ }
68
+ )
69
+ stats = stats.rename(columns={"col1": "x", "col2": "y", "p_val": "z"})
70
+ result = from_xyz(stats)
71
+ print(result)
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-05 07:35:30 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/pd/_ignore_.py
5
+
6
+ import warnings
7
+ from contextlib import contextmanager
8
+
9
+
10
+ @contextmanager
11
+ def ignore_setting_with_copy_warning():
12
+ """
13
+ Context manager to temporarily ignore pandas SettingWithCopyWarning.
14
+
15
+ Example
16
+ -------
17
+ >>> with ignore_SettingWithCopyWarning():
18
+ ... df['column'] = new_values # No warning will be shown
19
+ """
20
+ try:
21
+ from pandas.errors import SettingWithCopyWarning
22
+ except ImportError:
23
+ from pandas.core.common import SettingWithCopyWarning
24
+
25
+ # Save current warning filters
26
+ with warnings.catch_warnings():
27
+ warnings.simplefilter(action="ignore", category=SettingWithCopyWarning)
28
+ yield
29
+
30
+
31
+ # Backward compatibility
32
+ ignore_SettingWithCopyWarning = ignore_setting_with_copy_warning # Deprecated
33
+
34
+ # EOF
@@ -0,0 +1,81 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-10-05 23:04:16 (ywatanabe)"
4
+ # /home/ywatanabe/proj/_scitex_repo_openhands/src/scitex/pd/_melt_cols.py
5
+
6
+
7
+ #!/usr/bin/env python3
8
+ # -*- coding: utf-8 -*-
9
+ # Time-stamp: "2024-10-05 23:03:39 (ywatanabe)"
10
+ # /home/ywatanabe/proj/_scitex_repo_openhands/src/scitex/pd/_melt_cols.py
11
+
12
+ from typing import List, Optional
13
+ import pandas as pd
14
+
15
+
16
+ def melt_cols(
17
+ df: pd.DataFrame, cols: List[str], id_columns: Optional[List[str]] = None
18
+ ) -> pd.DataFrame:
19
+ """
20
+ Melt specified columns while preserving links to other data in a DataFrame.
21
+
22
+ Example
23
+ -------
24
+ >>> data = pd.DataFrame({
25
+ ... 'id': [1, 2, 3],
26
+ ... 'name': ['Alice', 'Bob', 'Charlie'],
27
+ ... 'score_1': [85, 90, 78],
28
+ ... 'score_2': [92, 88, 95]
29
+ ... })
30
+ >>> melted = melt_cols(data, cols=['score_1', 'score_2'])
31
+ >>> print(melted)
32
+ id name variable value
33
+ 0 1 Alice score_1 85
34
+ 1 2 Bob score_1 90
35
+ 2 3 Charlie score_1 78
36
+ 3 1 Alice score_2 92
37
+ 4 2 Bob score_2 88
38
+ 5 3 Charlie score_2 95
39
+
40
+ Parameters
41
+ ----------
42
+ df : pd.DataFrame
43
+ Input DataFrame
44
+ cols : List[str]
45
+ Columns to be melted
46
+ id_columns : Optional[List[str]], default None
47
+ Columns to preserve as identifiers. If None, all columns not in 'cols' are used.
48
+
49
+ Returns
50
+ -------
51
+ pd.DataFrame
52
+ Melted DataFrame with preserved identifier columns
53
+
54
+ Raises
55
+ ------
56
+ ValueError
57
+ If cols are not present in the DataFrame
58
+ """
59
+ missing_melt = set(cols) - set(df.columns)
60
+ if missing_melt:
61
+ raise ValueError(f"Columns not found in DataFrame: {missing_melt}")
62
+
63
+ if id_columns is None:
64
+ id_columns = [col for col in df.columns if col not in cols]
65
+
66
+ df_copy = df.reset_index(drop=True)
67
+ df_copy["global_index"] = df_copy.index
68
+
69
+ # Use a different value_name if "value" is one of the columns being melted
70
+ value_name = "value" if "value" not in cols else "melted_value"
71
+ melted_df = df_copy[cols + ["global_index"]].melt(
72
+ id_vars=["global_index"], value_name=value_name
73
+ )
74
+ if id_columns:
75
+ formatted_df = melted_df.merge(
76
+ df_copy[id_columns + ["global_index"]], on="global_index"
77
+ )
78
+ return formatted_df.drop("global_index", axis=1)
79
+ else:
80
+ # No id columns to merge, just return melted data without global_index
81
+ return melted_df.drop("global_index", axis=1)