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,232 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-18 18:14:08 (ywatanabe)"
4
+ # File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/plt/_subplots/_export_as_csv.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/plt/_subplots/_export_as_csv.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ import warnings
13
+
14
+ import pandas as pd
15
+
16
+ from ._export_as_csv_formatters import (_format_bar, _format_barh,
17
+ _format_boxplot, _format_contour,
18
+ _format_errorbar, _format_eventplot,
19
+ _format_fill, _format_fill_between,
20
+ _format_hist, _format_imshow,
21
+ _format_imshow2d, _format_plot,
22
+ _format_plot_box,
23
+ _format_plot_conf_mat,
24
+ _format_plot_ecdf, _format_plot_fillv,
25
+ _format_plot_heatmap,
26
+ _format_plot_image,
27
+ _format_plot_joyplot, _format_plot_kde,
28
+ _format_plot_line,
29
+ _format_plot_mean_ci,
30
+ _format_plot_mean_std,
31
+ _format_plot_median_iqr,
32
+ _format_plot_raster,
33
+ _format_plot_rectangle,
34
+ _format_plot_scatter_hist,
35
+ _format_plot_shaded_line,
36
+ _format_plot_violin, _format_scatter,
37
+ _format_sns_barplot,
38
+ _format_sns_boxplot,
39
+ _format_sns_heatmap,
40
+ _format_sns_histplot,
41
+ _format_sns_jointplot,
42
+ _format_sns_kdeplot,
43
+ _format_sns_lineplot,
44
+ _format_sns_pairplot,
45
+ _format_sns_scatterplot,
46
+ _format_sns_stripplot,
47
+ _format_sns_swarmplot,
48
+ _format_sns_violinplot, _format_violin,
49
+ _format_violinplot)
50
+
51
+ from scitex.pd import to_xyz
52
+
53
+
54
+ def _to_numpy(data):
55
+ """Convert various data types to numpy array.
56
+
57
+ Handles torch tensors, pandas Series/DataFrame, and other array-like objects.
58
+
59
+ Parameters
60
+ ----------
61
+ data : array-like
62
+ Data to convert to numpy array
63
+
64
+ Returns
65
+ -------
66
+ numpy.ndarray
67
+ Data as numpy array
68
+ """
69
+ if hasattr(data, 'numpy'): # torch tensor
70
+ return data.detach().numpy() if hasattr(data, 'detach') else data.numpy()
71
+ elif hasattr(data, 'values'): # pandas series/dataframe
72
+ return data.values
73
+ else:
74
+ return np.asarray(data)
75
+
76
+
77
+ def export_as_csv(history_records):
78
+ """Convert plotting history records to a combined DataFrame suitable for CSV export.
79
+
80
+ Args:
81
+ history_records (dict): Dictionary of plotting records.
82
+
83
+ Returns:
84
+ pd.DataFrame: Combined DataFrame containing all plotting data.
85
+
86
+ Raises:
87
+ ValueError: If no plotting records are found or they cannot be combined.
88
+ """
89
+ if len(history_records) <= 0:
90
+ warnings.warn("Plotting records not found. Cannot export empty data.")
91
+ return pd.DataFrame() # Return empty DataFrame instead of None
92
+
93
+ dfs = []
94
+ for record in list(history_records.values()):
95
+ try:
96
+ formatted_df = format_record(record)
97
+ if formatted_df is not None and not formatted_df.empty:
98
+ dfs.append(formatted_df)
99
+ except Exception as e:
100
+ warnings.warn(f"Failed to format record {record[0]}: {e}")
101
+
102
+ # If no valid dataframes were created, return an empty one
103
+ if not dfs:
104
+ warnings.warn("No valid data found to export.")
105
+ return pd.DataFrame()
106
+
107
+ try:
108
+ df = pd.concat(dfs, axis=1)
109
+ return df
110
+ except Exception as e:
111
+ warnings.warn(f"Failed to combine plotting records: {e}")
112
+ # Return a DataFrame with metadata about what records were attempted
113
+ meta_df = pd.DataFrame({
114
+ "record_id": [r[0] for r in history_records.values()],
115
+ "method": [r[1] for r in history_records.values()],
116
+ "has_data": ["Yes" if r[2] and r[2] != {} else "No" for r in history_records.values()]
117
+ })
118
+ return meta_df
119
+
120
+
121
+ def format_record(record):
122
+ """Route record to the appropriate formatting function based on plot method.
123
+
124
+ Args:
125
+ record (tuple): Plotting record tuple (id, method, tracked_dict, kwargs).
126
+
127
+ Returns:
128
+ pd.DataFrame: Formatted data for the plot record.
129
+ """
130
+ id, method, tracked_dict, kwargs = record
131
+
132
+ # Basic Matplotlib functions
133
+ if method == "plot":
134
+ return _format_plot(id, tracked_dict, kwargs)
135
+ elif method == "scatter":
136
+ return _format_scatter(id, tracked_dict, kwargs)
137
+ elif method == "bar":
138
+ return _format_bar(id, tracked_dict, kwargs)
139
+ elif method == "barh":
140
+ return _format_barh(id, tracked_dict, kwargs)
141
+ elif method == "hist":
142
+ return _format_hist(id, tracked_dict, kwargs)
143
+ elif method == "boxplot":
144
+ return _format_boxplot(id, tracked_dict, kwargs)
145
+ elif method == "contour":
146
+ return _format_contour(id, tracked_dict, kwargs)
147
+ elif method == "errorbar":
148
+ return _format_errorbar(id, tracked_dict, kwargs)
149
+ elif method == "eventplot":
150
+ return _format_eventplot(id, tracked_dict, kwargs)
151
+ elif method == "fill":
152
+ return _format_fill(id, tracked_dict, kwargs)
153
+ elif method == "fill_between":
154
+ return _format_fill_between(id, tracked_dict, kwargs)
155
+ elif method == "imshow":
156
+ return _format_imshow(id, tracked_dict, kwargs)
157
+ elif method == "imshow2d":
158
+ return _format_imshow2d(id, tracked_dict, kwargs)
159
+ elif method == "violin":
160
+ return _format_violin(id, tracked_dict, kwargs)
161
+ elif method == "violinplot":
162
+ return _format_violinplot(id, tracked_dict, kwargs)
163
+
164
+ # Custom plotting functions
165
+ elif method == "plot_box":
166
+ return _format_plot_box(id, tracked_dict, kwargs)
167
+ elif method == "plot_conf_mat":
168
+ return _format_plot_conf_mat(id, tracked_dict, kwargs)
169
+ elif method == "plot_ecdf":
170
+ return _format_plot_ecdf(id, tracked_dict, kwargs)
171
+ elif method == "plot_fillv":
172
+ return _format_plot_fillv(id, tracked_dict, kwargs)
173
+ elif method == "plot_heatmap":
174
+ return _format_plot_heatmap(id, tracked_dict, kwargs)
175
+ elif method == "plot_image":
176
+ return _format_plot_image(id, tracked_dict, kwargs)
177
+ elif method == "plot_joyplot":
178
+ return _format_plot_joyplot(id, tracked_dict, kwargs)
179
+ elif method == "plot_kde":
180
+ return _format_plot_kde(id, tracked_dict, kwargs)
181
+ elif method == "plot_line":
182
+ return _format_plot_line(id, tracked_dict, kwargs)
183
+ elif method == "plot_mean_ci":
184
+ return _format_plot_mean_ci(id, tracked_dict, kwargs)
185
+ elif method == "plot_mean_std":
186
+ return _format_plot_mean_std(id, tracked_dict, kwargs)
187
+ elif method == "plot_median_iqr":
188
+ return _format_plot_median_iqr(id, tracked_dict, kwargs)
189
+ elif method == "plot_raster":
190
+ return _format_plot_raster(id, tracked_dict, kwargs)
191
+ elif method == "plot_rectangle":
192
+ return _format_plot_rectangle(id, tracked_dict, kwargs)
193
+ elif method == "plot_scatter_hist":
194
+ return _format_plot_scatter_hist(id, tracked_dict, kwargs)
195
+ elif method == "plot_shaded_line":
196
+ return _format_plot_shaded_line(id, tracked_dict, kwargs)
197
+ elif method == "plot_violin":
198
+ return _format_plot_violin(id, tracked_dict, kwargs)
199
+
200
+ # Seaborn functions
201
+ elif method == "sns_barplot":
202
+ return _format_sns_barplot(id, tracked_dict, kwargs)
203
+ elif method == "sns_boxplot":
204
+ return _format_sns_boxplot(id, tracked_dict, kwargs)
205
+ elif method == "sns_heatmap":
206
+ return _format_sns_heatmap(id, tracked_dict, kwargs)
207
+ elif method == "sns_histplot":
208
+ return _format_sns_histplot(id, tracked_dict, kwargs)
209
+ elif method == "sns_jointplot":
210
+ return _format_sns_jointplot(id, tracked_dict, kwargs)
211
+ elif method == "sns_kdeplot":
212
+ return _format_sns_kdeplot(id, tracked_dict, kwargs)
213
+ elif method == "sns_lineplot":
214
+ return _format_sns_lineplot(id, tracked_dict, kwargs)
215
+ elif method == "sns_pairplot":
216
+ return _format_sns_pairplot(id, tracked_dict, kwargs)
217
+ elif method == "sns_scatterplot":
218
+ return _format_sns_scatterplot(id, tracked_dict, kwargs)
219
+ elif method == "sns_stripplot":
220
+ return _format_sns_stripplot(id, tracked_dict, kwargs)
221
+ elif method == "sns_swarmplot":
222
+ return _format_sns_swarmplot(id, tracked_dict, kwargs)
223
+ elif method == "sns_violinplot":
224
+ return _format_sns_violinplot(id, tracked_dict, kwargs)
225
+ else:
226
+ # Unknown or unimplemented method
227
+ raise NotImplementedError(
228
+ f"CSV export for plot method '{method}' is not yet implemented in the scitex.plt module. "
229
+ f"Check the feature-request-export-as-csv-functions.md for implementation status."
230
+ )
231
+
232
+ # EOF
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-18 18:14:26 (ywatanabe)"
4
+ # File: /data/gpfs/projects/punim2354/ywatanabe/scitex_repo/src/scitex/plt/_subplots/_export_as_csv_formatters/__init__.py
5
+ # ----------------------------------------
6
+ import os
7
+ __FILE__ = (
8
+ "./src/scitex/plt/_subplots/_export_as_csv_formatters/__init__.py"
9
+ )
10
+ __DIR__ = os.path.dirname(__FILE__)
11
+ # ----------------------------------------
12
+
13
+ # Standard matplotlib formatters
14
+ from ._format_plot import _format_plot
15
+ from ._format_scatter import _format_scatter
16
+ from ._format_bar import _format_bar
17
+ from ._format_barh import _format_barh
18
+ from ._format_hist import _format_hist
19
+ from ._format_boxplot import _format_boxplot
20
+ from ._format_contour import _format_contour
21
+ from ._format_errorbar import _format_errorbar
22
+ from ._format_eventplot import _format_eventplot
23
+ from ._format_fill import _format_fill
24
+ from ._format_fill_between import _format_fill_between
25
+ from ._format_imshow import _format_imshow
26
+ from ._format_imshow2d import _format_imshow2d
27
+ from ._format_violin import _format_violin
28
+ from ._format_violinplot import _format_violinplot
29
+
30
+ # Custom plotting formatters
31
+ from ._format_plot_box import _format_plot_box
32
+ from ._format_plot_conf_mat import _format_plot_conf_mat
33
+ from ._format_plot_ecdf import _format_plot_ecdf
34
+ from ._format_plot_fillv import _format_plot_fillv
35
+ from ._format_plot_heatmap import _format_plot_heatmap
36
+ from ._format_plot_image import _format_plot_image
37
+ from ._format_plot_joyplot import _format_plot_joyplot
38
+ from ._format_plot_kde import _format_plot_kde
39
+ from ._format_plot_line import _format_plot_line
40
+ from ._format_plot_mean_ci import _format_plot_mean_ci
41
+ from ._format_plot_mean_std import _format_plot_mean_std
42
+ from ._format_plot_median_iqr import _format_plot_median_iqr
43
+ from ._format_plot_raster import _format_plot_raster
44
+ from ._format_plot_rectangle import _format_plot_rectangle
45
+ from ._format_plot_scatter_hist import _format_plot_scatter_hist
46
+ from ._format_plot_shaded_line import _format_plot_shaded_line
47
+ from ._format_plot_violin import _format_plot_violin
48
+
49
+ # Seaborn formatters
50
+ from ._format_sns_barplot import _format_sns_barplot
51
+ from ._format_sns_boxplot import _format_sns_boxplot
52
+ from ._format_sns_heatmap import _format_sns_heatmap
53
+ from ._format_sns_histplot import _format_sns_histplot
54
+ from ._format_sns_jointplot import _format_sns_jointplot
55
+ from ._format_sns_kdeplot import _format_sns_kdeplot
56
+ from ._format_sns_lineplot import _format_sns_lineplot
57
+ from ._format_sns_pairplot import _format_sns_pairplot
58
+ from ._format_sns_scatterplot import _format_sns_scatterplot
59
+ from ._format_sns_stripplot import _format_sns_stripplot
60
+ from ._format_sns_swarmplot import _format_sns_swarmplot
61
+ from ._format_sns_violinplot import _format_sns_violinplot
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-19 15:45:51 (ywatanabe)"
4
+ # File: /data/gpfs/projects/punim2354/ywatanabe/scitex_repo/src/scitex/plt/_subplots/_export_as_csv_formatters/_format_bar.py
5
+ # ----------------------------------------
6
+ import os
7
+ __FILE__ = (
8
+ "./src/scitex/plt/_subplots/_export_as_csv_formatters/_format_bar.py"
9
+ )
10
+ __DIR__ = os.path.dirname(__FILE__)
11
+ # ----------------------------------------
12
+
13
+ import pandas as pd
14
+ import numpy as np
15
+
16
+ def _format_bar(id, tracked_dict, kwargs):
17
+ """Format data from a bar call for CSV export.
18
+
19
+ Simplified to focus only on essential x and y values.
20
+
21
+ Args:
22
+ id: The identifier for the plot
23
+ tracked_dict: Dictionary of tracked data
24
+ kwargs: Original keyword arguments
25
+
26
+ Returns:
27
+ pd.DataFrame: Formatted data ready for CSV export with just x and y values
28
+ """
29
+ # Check if tracked_dict is empty or not a dictionary
30
+ if not tracked_dict or not isinstance(tracked_dict, dict):
31
+ return pd.DataFrame()
32
+
33
+ # Check if we have the newer format with bar_data
34
+ if 'bar_data' in tracked_dict and isinstance(tracked_dict['bar_data'], pd.DataFrame):
35
+ # Use the pre-formatted DataFrame but keep only x and height (y)
36
+ df = tracked_dict['bar_data'].copy()
37
+
38
+ # Keep only essential columns
39
+ essential_cols = [col for col in df.columns if col in ['x', 'height']]
40
+ if essential_cols:
41
+ df = df[essential_cols]
42
+
43
+ # Rename height to y for consistency
44
+ if 'height' in df.columns:
45
+ df = df.rename(columns={'height': 'y'})
46
+
47
+ # Add identifier to column names
48
+ df.columns = [f"{id}_{col}" for col in df.columns]
49
+ return df
50
+
51
+ # Legacy format - get the args from tracked_dict
52
+ args = tracked_dict.get('args', [])
53
+
54
+ # Extract x and y data if available
55
+ if len(args) >= 2:
56
+ x, y = args[0], args[1]
57
+
58
+ # Convert to arrays if possible for consistent handling
59
+ try:
60
+ x_array = np.asarray(x)
61
+ y_array = np.asarray(y)
62
+
63
+ # Create DataFrame with just x and y data
64
+ data = {
65
+ f"{id}_x": x_array,
66
+ f"{id}_y": y_array,
67
+ }
68
+
69
+ return pd.DataFrame(data)
70
+
71
+ except (TypeError, ValueError):
72
+ # Fall back to direct values if conversion fails
73
+ return pd.DataFrame({f"{id}_x": x, f"{id}_y": y})
74
+
75
+ # If we have tracked data in another format (like our MatplotlibPlotMixin bar method)
76
+ result = {}
77
+
78
+ # Check for x position (might be in different keys)
79
+ for x_key in ['x', 'xs', 'positions']:
80
+ if x_key in tracked_dict:
81
+ result[f"{id}_x"] = tracked_dict[x_key]
82
+ break
83
+
84
+ # Check for y values (might be in different keys)
85
+ for y_key in ['y', 'ys', 'height', 'heights', 'values']:
86
+ if y_key in tracked_dict:
87
+ result[f"{id}_y"] = tracked_dict[y_key]
88
+ break
89
+
90
+ return pd.DataFrame(result) if result else pd.DataFrame()
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-18 18:14:26 (ywatanabe)"
4
+ # File: /data/gpfs/projects/punim2354/ywatanabe/scitex_repo/src/scitex/plt/_subplots/_export_as_csv_formatters/_format_barh.py
5
+ # ----------------------------------------
6
+ import os
7
+ __FILE__ = (
8
+ "./src/scitex/plt/_subplots/_export_as_csv_formatters/_format_barh.py"
9
+ )
10
+ __DIR__ = os.path.dirname(__FILE__)
11
+ # ----------------------------------------
12
+
13
+ import pandas as pd
14
+
15
+ def _format_barh(id, tracked_dict, kwargs):
16
+ """Format data from a barh call."""
17
+ # Check if tracked_dict is empty or not a dictionary
18
+ if not tracked_dict or not isinstance(tracked_dict, dict):
19
+ return pd.DataFrame()
20
+
21
+ # Get the args from tracked_dict
22
+ args = tracked_dict.get('args', [])
23
+
24
+ # Extract x and y data if available
25
+ if len(args) >= 2:
26
+ # Note: in barh, x is height, y is width (visually transposed from bar)
27
+ x, y = args[0], args[1]
28
+
29
+ # Get xerr from kwargs
30
+ xerr = kwargs.get("xerr")
31
+
32
+ # Convert single values to Series
33
+ if isinstance(x, (int, float)):
34
+ x = pd.Series(x, name="x")
35
+ if isinstance(y, (int, float)):
36
+ y = pd.Series(y, name="y")
37
+ else:
38
+ # Not enough arguments
39
+ return pd.DataFrame()
40
+
41
+ df = pd.DataFrame(
42
+ {f"{id}_barh_y": x, f"{id}_barh_x": y}
43
+ ) # Swap x/y for barh
44
+
45
+ if xerr is not None:
46
+ if isinstance(xerr, (int, float)):
47
+ xerr = pd.Series(xerr, name="xerr")
48
+ df[f"{id}_barh_xerr"] = xerr
49
+ return df
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-18 18:14:26 (ywatanabe)"
4
+ # File: /data/gpfs/projects/punim2354/ywatanabe/scitex_repo/src/scitex/plt/_subplots/_export_as_csv_formatters/_format_boxplot.py
5
+ # ----------------------------------------
6
+ import os
7
+ __FILE__ = (
8
+ "./src/scitex/plt/_subplots/_export_as_csv_formatters/_format_boxplot.py"
9
+ )
10
+ __DIR__ = os.path.dirname(__FILE__)
11
+ # ----------------------------------------
12
+
13
+ import numpy as np
14
+ import pandas as pd
15
+ import scitex
16
+
17
+ def _format_boxplot(id, tracked_dict, kwargs):
18
+ """Format data from a boxplot call."""
19
+ # Check if tracked_dict is empty or not a dictionary
20
+ if not tracked_dict or not isinstance(tracked_dict, dict):
21
+ return pd.DataFrame()
22
+
23
+ # Get the args from tracked_dict
24
+ args = tracked_dict.get('args', [])
25
+
26
+ # Extract data if available
27
+ if len(args) >= 1:
28
+ x = args[0]
29
+
30
+ # One box plot
31
+ from scitex.types import is_listed_X as scitex_types_is_listed_X
32
+
33
+ if isinstance(x, np.ndarray) or scitex_types_is_listed_X(x, [float, int]):
34
+ df = pd.DataFrame(x)
35
+ else:
36
+ # Multiple boxes
37
+ import scitex.pd
38
+ df = scitex.pd.force_df({i_x: _x for i_x, _x in enumerate(x)})
39
+
40
+ # Add prefix to columns
41
+ df.columns = [f"{id}_boxplot_{col}_x" for col in df.columns]
42
+ df = df.apply(lambda col: col.dropna().reset_index(drop=True))
43
+ return df
44
+
45
+ # No valid data available
46
+ return pd.DataFrame()
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-18 18:14:26 (ywatanabe)"
4
+ # File: /data/gpfs/projects/punim2354/ywatanabe/scitex_repo/src/scitex/plt/_subplots/_export_as_csv_formatters/_format_contour.py
5
+ # ----------------------------------------
6
+ import os
7
+ __FILE__ = (
8
+ "./src/scitex/plt/_subplots/_export_as_csv_formatters/_format_contour.py"
9
+ )
10
+ __DIR__ = os.path.dirname(__FILE__)
11
+ # ----------------------------------------
12
+
13
+ import pandas as pd
14
+
15
+ def _format_contour(id, tracked_dict, kwargs):
16
+ """Format data from a contour call."""
17
+ # Check if tracked_dict is empty or not a dictionary
18
+ if not tracked_dict or not isinstance(tracked_dict, dict):
19
+ return pd.DataFrame()
20
+
21
+ # Get the args from tracked_dict
22
+ args = tracked_dict.get('args', [])
23
+
24
+ # Typical args: X, Y, Z where X and Y are 2D coordinate arrays and Z is the height array
25
+ if len(args) >= 3:
26
+ X, Y, Z = args[:3]
27
+ # Convert mesh grids to column vectors for export
28
+ X_flat = X.flatten()
29
+ Y_flat = Y.flatten()
30
+ Z_flat = Z.flatten()
31
+ df = pd.DataFrame(
32
+ {
33
+ f"{id}_contour_x": X_flat,
34
+ f"{id}_contour_y": Y_flat,
35
+ f"{id}_contour_z": Z_flat,
36
+ }
37
+ )
38
+ return df
39
+ return pd.DataFrame()
@@ -0,0 +1,125 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-18 18:14:26 (ywatanabe)"
4
+ # File: /data/gpfs/projects/punim2354/ywatanabe/scitex_repo/src/scitex/plt/_subplots/_export_as_csv_formatters/_format_errorbar.py
5
+ # ----------------------------------------
6
+ import os
7
+ __FILE__ = (
8
+ "./src/scitex/plt/_subplots/_export_as_csv_formatters/_format_errorbar.py"
9
+ )
10
+ __DIR__ = os.path.dirname(__FILE__)
11
+ # ----------------------------------------
12
+
13
+ import numpy as np
14
+ import pandas as pd
15
+ import scitex
16
+
17
+ def _format_errorbar(id, tracked_dict, kwargs):
18
+ """Format data from an errorbar call."""
19
+ # Check if tracked_dict is empty or not a dictionary
20
+ if not tracked_dict or not isinstance(tracked_dict, dict):
21
+ return pd.DataFrame()
22
+
23
+ # Get the args from tracked_dict
24
+ args = tracked_dict.get('args', [])
25
+
26
+ # Typical args: x, y
27
+ # Typical kwargs: xerr, yerr
28
+ if len(args) >= 2:
29
+ x, y = args[:2]
30
+ xerr = kwargs.get("xerr")
31
+ yerr = kwargs.get("yerr")
32
+
33
+ try:
34
+ # Try using scitex.pd.force_df if available
35
+ try:
36
+ import scitex.pd
37
+
38
+ data = {f"{id}_errorbar_x": x, f"{id}_errorbar_y": y}
39
+
40
+ if xerr is not None:
41
+ if isinstance(xerr, (list, tuple)) and len(xerr) == 2:
42
+ # Asymmetric error
43
+ data[f"{id}_errorbar_xerr_neg"] = xerr[0]
44
+ data[f"{id}_errorbar_xerr_pos"] = xerr[1]
45
+ else:
46
+ # Symmetric error
47
+ data[f"{id}_errorbar_xerr"] = xerr
48
+
49
+ if yerr is not None:
50
+ if isinstance(yerr, (list, tuple)) and len(yerr) == 2:
51
+ # Asymmetric error
52
+ data[f"{id}_errorbar_yerr_neg"] = yerr[0]
53
+ data[f"{id}_errorbar_yerr_pos"] = yerr[1]
54
+ else:
55
+ # Symmetric error
56
+ data[f"{id}_errorbar_yerr"] = yerr
57
+
58
+ # Use scitex.pd.force_df to handle different length arrays
59
+ df = scitex.pd.force_df(data)
60
+ return df
61
+ except (ImportError, AttributeError):
62
+ # Fall back to pandas with manual padding
63
+ max_len = max(
64
+ [
65
+ len(arr) if hasattr(arr, "__len__") else 1
66
+ for arr in [x, y, xerr, yerr]
67
+ if arr is not None
68
+ ]
69
+ )
70
+
71
+ # Function to pad arrays to the same length
72
+ def pad_to_length(arr, length):
73
+ if arr is None:
74
+ return None
75
+ if not hasattr(arr, "__len__"):
76
+ # Handle scalar values
77
+ return [arr] * length
78
+ if len(arr) >= length:
79
+ return arr
80
+ # Pad with NaN
81
+ return np.pad(
82
+ arr,
83
+ (0, length - len(arr)),
84
+ "constant",
85
+ constant_values=np.nan,
86
+ )
87
+
88
+ # Pad all arrays
89
+ x_padded = pad_to_length(x, max_len)
90
+ y_padded = pad_to_length(y, max_len)
91
+
92
+ data = {
93
+ f"{id}_errorbar_x": x_padded,
94
+ f"{id}_errorbar_y": y_padded,
95
+ }
96
+
97
+ if xerr is not None:
98
+ if isinstance(xerr, (list, tuple)) and len(xerr) == 2:
99
+ xerr_neg_padded = pad_to_length(xerr[0], max_len)
100
+ xerr_pos_padded = pad_to_length(xerr[1], max_len)
101
+ data[f"{id}_errorbar_xerr_neg"] = xerr_neg_padded
102
+ data[f"{id}_errorbar_xerr_pos"] = xerr_pos_padded
103
+ else:
104
+ xerr_padded = pad_to_length(xerr, max_len)
105
+ data[f"{id}_errorbar_xerr"] = xerr_padded
106
+
107
+ if yerr is not None:
108
+ if isinstance(yerr, (list, tuple)) and len(yerr) == 2:
109
+ yerr_neg_padded = pad_to_length(yerr[0], max_len)
110
+ yerr_pos_padded = pad_to_length(yerr[1], max_len)
111
+ data[f"{id}_errorbar_yerr_neg"] = yerr_neg_padded
112
+ data[f"{id}_errorbar_yerr_pos"] = yerr_pos_padded
113
+ else:
114
+ yerr_padded = pad_to_length(yerr, max_len)
115
+ data[f"{id}_errorbar_yerr"] = yerr_padded
116
+
117
+ return pd.DataFrame(data)
118
+ except Exception as e:
119
+ # If all else fails, return an empty DataFrame
120
+ import warnings
121
+
122
+ warnings.warn(f"Error formatting errorbar data: {str(e)}")
123
+ return pd.DataFrame()
124
+
125
+ return pd.DataFrame()