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,133 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-02 18:14:56 (ywatanabe)"
4
+ # File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/ax/_plot/_plot_scatter_hist.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/plt/ax/_plot/_plot_scatter_hist.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ import numpy as np
13
+
14
+
15
+ def plot_scatter_hist(
16
+ ax,
17
+ x,
18
+ y,
19
+ fig=None,
20
+ hist_bins: int = 20,
21
+ scatter_alpha: float = 0.6,
22
+ scatter_size: float = 20,
23
+ scatter_color: str = "blue",
24
+ hist_color_x: str = "blue",
25
+ hist_color_y: str = "red",
26
+ hist_alpha: float = 0.5,
27
+ scatter_ratio: float = 0.8,
28
+ **kwargs,
29
+ ):
30
+ """
31
+ Plot a scatter plot with histograms on the x and y axes.
32
+
33
+ Parameters
34
+ ----------
35
+ ax : matplotlib.axes.Axes
36
+ The main scatter plot axes
37
+ x : array-like
38
+ x data for scatter plot and histogram
39
+ y : array-like
40
+ y data for scatter plot and histogram
41
+ fig : matplotlib.figure.Figure, optional
42
+ Figure to create axes in. If None, uses ax.figure
43
+ hist_bins : int, optional
44
+ Number of bins for histograms, default 20
45
+ scatter_alpha : float, optional
46
+ Alpha value for scatter points, default 0.6
47
+ scatter_size : float, optional
48
+ Size of scatter points, default 20
49
+ scatter_color : str, optional
50
+ Color of scatter points, default "blue"
51
+ hist_color_x : str, optional
52
+ Color of x-axis histogram, default "blue"
53
+ hist_color_y : str, optional
54
+ Color of y-axis histogram, default "red"
55
+ hist_alpha : float, optional
56
+ Alpha value for histograms, default 0.5
57
+ scatter_ratio : float, optional
58
+ Ratio of main plot to histograms, default 0.8
59
+ **kwargs
60
+ Additional keyword arguments passed to scatter and hist functions
61
+
62
+ Returns
63
+ -------
64
+ tuple
65
+ (ax, ax_histx, ax_histy, hist_data) - All axes objects and histogram data
66
+ hist_data is a dictionary containing histogram counts and bin edges
67
+ """
68
+ # Get the current figure if not provided
69
+ if fig is None:
70
+ fig = ax.figure
71
+
72
+ # Calculate the positions based on scatter_ratio
73
+ margin = 0.1 * (1 - scatter_ratio)
74
+ hist_size = 0.2 * scatter_ratio
75
+
76
+ # Create the histogram axes
77
+ ax_histx = fig.add_axes(
78
+ [
79
+ ax.get_position().x0,
80
+ ax.get_position().y1 + margin,
81
+ ax.get_position().width * scatter_ratio,
82
+ hist_size,
83
+ ]
84
+ )
85
+ ax_histy = fig.add_axes(
86
+ [
87
+ ax.get_position().x1 + margin,
88
+ ax.get_position().y0,
89
+ hist_size,
90
+ ax.get_position().height * scatter_ratio,
91
+ ]
92
+ )
93
+
94
+ # No labels for histograms
95
+ ax_histx.tick_params(axis="x", labelbottom=False)
96
+ ax_histy.tick_params(axis="y", labelleft=False)
97
+
98
+ # The scatter plot
99
+ ax.scatter(
100
+ x,
101
+ y,
102
+ alpha=scatter_alpha,
103
+ s=scatter_size,
104
+ color=scatter_color,
105
+ **kwargs,
106
+ )
107
+
108
+ # Calculate histogram data
109
+ hist_x, bin_edges_x = np.histogram(x, bins=hist_bins)
110
+ hist_y, bin_edges_y = np.histogram(y, bins=hist_bins)
111
+
112
+ # Plot histograms
113
+ ax_histx.hist(x, bins=hist_bins, color=hist_color_x, alpha=hist_alpha)
114
+ ax_histy.hist(
115
+ y,
116
+ bins=hist_bins,
117
+ orientation="horizontal",
118
+ color=hist_color_y,
119
+ alpha=hist_alpha,
120
+ )
121
+
122
+ # Create return data structure
123
+ hist_data = {
124
+ "hist_x": hist_x,
125
+ "hist_y": hist_y,
126
+ "bin_edges_x": bin_edges_x,
127
+ "bin_edges_y": bin_edges_y,
128
+ }
129
+
130
+ return ax, ax_histx, ax_histy, hist_data
131
+
132
+
133
+ # EOF
@@ -0,0 +1,142 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-02 23:28:32 (ywatanabe)"
4
+ # File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/ax/_plot/_plot_shaded_line.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/plt/ax/_plot/_plot_shaded_line.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ from typing import List, Optional, Tuple, Union
13
+
14
+ import matplotlib
15
+ import numpy as np
16
+ import pandas as pd
17
+ from matplotlib.axes._axes import Axes
18
+
19
+ from ....types import ColorLike
20
+ from ....plt.utils import assert_valid_axis
21
+
22
+
23
+ def _plot_single_shaded_line(
24
+ axis: Union[Axes, 'AxisWrapper'],
25
+ xx: np.ndarray,
26
+ y_lower: np.ndarray,
27
+ y_middle: np.ndarray,
28
+ y_upper: np.ndarray,
29
+ color: Optional[ColorLike] = None,
30
+ alpha: float = 0.3,
31
+ **kwargs
32
+ ) -> Tuple[Union[Axes, 'AxisWrapper'], pd.DataFrame]:
33
+ """Plot a line with shaded area between y_lower and y_upper bounds."""
34
+ assert_valid_axis(axis, "First argument must be a matplotlib axis or scitex axis wrapper")
35
+ assert (
36
+ len(xx) == len(y_middle) == len(y_lower) == len(y_upper)
37
+ ), "All arrays must have the same length"
38
+
39
+ label = kwargs.get("label")
40
+ if kwargs.get("label"):
41
+ del kwargs["label"]
42
+ axis.plot(xx, y_middle, color=color, alpha=alpha, label=label, **kwargs)
43
+ kwargs["linewidth"] = 0
44
+ kwargs["edgecolor"] = "none" # Remove edge line
45
+ axis.fill_between(xx, y_lower, y_upper, alpha=alpha, color=color, **kwargs)
46
+
47
+ return axis, pd.DataFrame(
48
+ {"x": xx, "y_lower": y_lower, "y_middle": y_middle, "y_upper": y_upper}
49
+ )
50
+
51
+
52
+ def _plot_shaded_line(
53
+ axis: Union[Axes, 'AxisWrapper'],
54
+ xs: List[np.ndarray],
55
+ ys_lower: List[np.ndarray],
56
+ ys_middle: List[np.ndarray],
57
+ ys_upper: List[np.ndarray],
58
+ color: Optional[Union[List[ColorLike], ColorLike]] = None,
59
+ **kwargs
60
+ ) -> Tuple[Union[Axes, 'AxisWrapper'], List[pd.DataFrame]]:
61
+ """Plot multiple lines with shaded areas between ys_lower and ys_upper bounds."""
62
+ assert_valid_axis(axis, "First argument must be a matplotlib axis or scitex axis wrapper")
63
+ assert (
64
+ len(xs) == len(ys_lower) == len(ys_middle) == len(ys_upper)
65
+ ), "All input lists must have the same length"
66
+
67
+ results = []
68
+ colors = color
69
+ color_list = colors
70
+
71
+ if colors is not None:
72
+ if not isinstance(colors, list):
73
+ color_list = [colors] * len(xs)
74
+ else:
75
+ assert len(colors) == len(xs), "Number of colors must match number of lines"
76
+ color_list = colors
77
+
78
+ for idx, (xx, y_lower, y_middle, y_upper) in enumerate(
79
+ zip(xs, ys_lower, ys_middle, ys_upper)
80
+ ):
81
+ this_kwargs = kwargs.copy()
82
+ this_kwargs["color"] = color_list[idx]
83
+ _, result_df = _plot_single_shaded_line(
84
+ axis, xx, y_lower, y_middle, y_upper, **this_kwargs
85
+ )
86
+ results.append(result_df)
87
+ else:
88
+ for xx, y_lower, y_middle, y_upper in zip(xs, ys_lower, ys_middle, ys_upper):
89
+ _, result_df = _plot_single_shaded_line(
90
+ axis, xx, y_lower, y_middle, y_upper, **kwargs
91
+ )
92
+ results.append(result_df)
93
+
94
+ return axis, results
95
+
96
+
97
+ def plot_shaded_line(
98
+ axis: Union[Axes, 'AxisWrapper'],
99
+ xs: Union[np.ndarray, List[np.ndarray]],
100
+ ys_lower: Union[np.ndarray, List[np.ndarray]],
101
+ ys_middle: Union[np.ndarray, List[np.ndarray]],
102
+ ys_upper: Union[np.ndarray, List[np.ndarray]],
103
+ color: Optional[Union[ColorLike, List[ColorLike]]] = None,
104
+ **kwargs
105
+ ) -> Tuple[Union[Axes, 'AxisWrapper'], Union[pd.DataFrame, List[pd.DataFrame]]]:
106
+ """
107
+ Plot a line with shaded area, automatically switching between single and multiple line versions.
108
+
109
+ Args:
110
+ axis: matplotlib axis or scitex axis wrapper
111
+ xs: x values (single array or list of arrays)
112
+ ys_lower: lower bound y values (single array or list of arrays)
113
+ ys_middle: middle y values (single array or list of arrays)
114
+ ys_upper: upper bound y values (single array or list of arrays)
115
+ color: color or list of colors for the lines
116
+ **kwargs: additional plotting parameters
117
+
118
+ Returns:
119
+ tuple: (axis, DataFrame or list of DataFrames with plot data)
120
+ """
121
+ is_single = not (
122
+ isinstance(xs, list)
123
+ and isinstance(ys_lower, list)
124
+ and isinstance(ys_middle, list)
125
+ and isinstance(ys_upper, list)
126
+ )
127
+
128
+ if is_single:
129
+ assert (
130
+ len(xs) == len(ys_lower) == len(ys_middle) == len(ys_upper)
131
+ ), "All arrays must have the same length for single line plot"
132
+
133
+ return _plot_single_shaded_line(
134
+ axis, xs, ys_lower, ys_middle, ys_upper, color=color, **kwargs
135
+ )
136
+ else:
137
+ return _plot_shaded_line(
138
+ axis, xs, ys_lower, ys_middle, ys_upper, color=color, **kwargs
139
+ )
140
+
141
+
142
+ # EOF
@@ -0,0 +1,221 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-04-30 20:50:45 (ywatanabe)"
4
+ # File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/ax/_plot_statistical_shaded_line.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/plt/ax/_plot_statistical_shaded_line.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ import matplotlib
13
+ import numpy as np
14
+ import pandas as pd
15
+ from ....plt.utils import assert_valid_axis
16
+
17
+ from ._plot_shaded_line import plot_shaded_line as scitex_plt_plot_shaded_line
18
+
19
+
20
+ def plot_line(axis, data, xx=None, **kwargs):
21
+ """
22
+ Plot a simple line.
23
+
24
+ Parameters
25
+ ----------
26
+ axis : matplotlib.axes.Axes or scitex.plt._subplots.AxisWrapper
27
+ The axis to plot on
28
+ data : array-like
29
+ Data to plot
30
+ xx : array-like, optional
31
+ X coordinates for the data. If None, will use np.arange(len(data))
32
+ **kwargs
33
+ Additional keyword arguments passed to axis.plot()
34
+
35
+ Returns
36
+ -------
37
+ axis : matplotlib.axes.Axes or scitex.plt._subplots.AxisWrapper
38
+ The axis with the plot
39
+ df : pandas.DataFrame
40
+ DataFrame with x and y values
41
+ """
42
+ assert_valid_axis(axis, "First argument must be a matplotlib axis or scitex axis wrapper")
43
+ data = np.asarray(data)
44
+ assert data.ndim <= 2, f"Data must be 1D or 2D, got {data.ndim}D"
45
+ if xx is None:
46
+ xx = np.arange(len(data))
47
+ else:
48
+ xx = np.asarray(xx)
49
+ assert len(xx) == len(
50
+ data
51
+ ), f"xx length ({len(xx)}) must match data length ({len(data)})"
52
+ axis.plot(xx, data, **kwargs)
53
+ return axis, pd.DataFrame({"x": xx, "y": data})
54
+
55
+
56
+ def plot_mean_std(axis, data, xx=None, sd=1, **kwargs):
57
+ """
58
+ Plot mean line with standard deviation shading.
59
+
60
+ Parameters
61
+ ----------
62
+ axis : matplotlib.axes.Axes or scitex.plt._subplots.AxisWrapper
63
+ The axis to plot on
64
+ data : array-like
65
+ Data to plot, can be 1D or 2D. If 2D, mean and std are calculated across the first dimension
66
+ xx : array-like, optional
67
+ X coordinates for the data. If None, will use np.arange(len(data))
68
+ sd : float, optional
69
+ Number of standard deviations for the shaded region. Default is 1
70
+ **kwargs
71
+ Additional keyword arguments passed to plot_shaded_line()
72
+
73
+ Returns
74
+ -------
75
+ axis : matplotlib.axes.Axes or scitex.plt._subplots.AxisWrapper
76
+ The axis with the plot
77
+ """
78
+ assert_valid_axis(axis, "First argument must be a matplotlib axis or scitex axis wrapper")
79
+ assert isinstance(sd, (int, float)), f"sd must be a number, got {type(sd)}"
80
+ assert sd >= 0, f"sd must be non-negative, got {sd}"
81
+ data = np.asarray(data)
82
+ assert data.ndim <= 2, f"Data must be 1D or 2D, got {data.ndim}D"
83
+ if xx is None:
84
+ xx = np.arange(data.shape[1] if data.ndim > 1 else len(data))
85
+ else:
86
+ xx = np.asarray(xx)
87
+ expected_len = data.shape[1] if data.ndim > 1 else len(data)
88
+ assert (
89
+ len(xx) == expected_len
90
+ ), f"xx length ({len(xx)}) must match data length ({expected_len})"
91
+
92
+ if data.ndim == 1:
93
+ central = data
94
+ error = np.zeros_like(central)
95
+ else:
96
+ central = np.nanmean(data, axis=0)
97
+ error = np.nanstd(data, axis=0) * sd
98
+
99
+ y_lower = central - error
100
+ y_upper = central + error
101
+ n_samples = data.shape[0] if data.ndim > 1 else 1
102
+
103
+ if "label" in kwargs and kwargs["label"]:
104
+ kwargs["label"] = f"{kwargs['label']} (n={n_samples})"
105
+
106
+ return scitex_plt_plot_shaded_line(axis, xx, y_lower, central, y_upper, **kwargs)
107
+
108
+
109
+ def plot_mean_ci(axis, data, xx=None, perc=95, **kwargs):
110
+ """
111
+ Plot mean line with confidence interval shading.
112
+
113
+ Parameters
114
+ ----------
115
+ axis : matplotlib.axes.Axes or scitex.plt._subplots.AxisWrapper
116
+ The axis to plot on
117
+ data : array-like
118
+ Data to plot, can be 1D or 2D. If 2D, mean and percentiles are calculated across the first dimension
119
+ xx : array-like, optional
120
+ X coordinates for the data. If None, will use np.arange(len(data))
121
+ perc : float, optional
122
+ Confidence interval percentage (0-100). Default is 95
123
+ **kwargs
124
+ Additional keyword arguments passed to plot_shaded_line()
125
+
126
+ Returns
127
+ -------
128
+ axis : matplotlib.axes.Axes or scitex.plt._subplots.AxisWrapper
129
+ The axis with the plot
130
+ """
131
+ assert_valid_axis(axis, "First argument must be a matplotlib axis or scitex axis wrapper")
132
+ assert isinstance(
133
+ perc, (int, float)
134
+ ), f"perc must be a number, got {type(perc)}"
135
+ assert 0 <= perc <= 100, f"perc must be between 0 and 100, got {perc}"
136
+ data = np.asarray(data)
137
+ assert data.ndim <= 2, f"Data must be 1D or 2D, got {data.ndim}D"
138
+
139
+ if xx is None:
140
+ xx = np.arange(data.shape[1] if data.ndim > 1 else len(data))
141
+ else:
142
+ xx = np.asarray(xx)
143
+
144
+ expected_len = data.shape[1] if data.ndim > 1 else len(data)
145
+ assert (
146
+ len(xx) == expected_len
147
+ ), f"xx length ({len(xx)}) must match data length ({expected_len})"
148
+
149
+ if data.ndim == 1:
150
+ central = data
151
+ y_lower = central
152
+ y_upper = central
153
+ else:
154
+ central = np.nanmean(data, axis=0)
155
+ # Calculate CI bounds
156
+ alpha = 1 - perc / 100
157
+ y_lower_perc = alpha / 2 * 100
158
+ y_upper_perc = (1 - alpha / 2) * 100
159
+ y_lower = np.nanpercentile(data, y_lower_perc, axis=0)
160
+ y_upper = np.nanpercentile(data, y_upper_perc, axis=0)
161
+
162
+ n_samples = data.shape[0] if data.ndim > 1 else 1
163
+
164
+ if "label" in kwargs and kwargs["label"]:
165
+ kwargs["label"] = f"{kwargs['label']} (n={n_samples}, CI={perc}%)"
166
+
167
+ return scitex_plt_plot_shaded_line(axis, xx, y_lower, central, y_upper, **kwargs)
168
+
169
+
170
+ def plot_median_iqr(axis, data, xx=None, **kwargs):
171
+ """
172
+ Plot median line with interquartile range shading.
173
+
174
+ Parameters
175
+ ----------
176
+ axis : matplotlib.axes.Axes or scitex.plt._subplots.AxisWrapper
177
+ The axis to plot on
178
+ data : array-like
179
+ Data to plot, can be 1D or 2D. If 2D, median and IQR are calculated across the first dimension
180
+ xx : array-like, optional
181
+ X coordinates for the data. If None, will use np.arange(len(data))
182
+ **kwargs
183
+ Additional keyword arguments passed to plot_shaded_line()
184
+
185
+ Returns
186
+ -------
187
+ axis : matplotlib.axes.Axes or scitex.plt._subplots.AxisWrapper
188
+ The axis with the plot
189
+ """
190
+ assert_valid_axis(axis, "First argument must be a matplotlib axis or scitex axis wrapper")
191
+ data = np.asarray(data)
192
+ assert data.ndim <= 2, f"Data must be 1D or 2D, got {data.ndim}D"
193
+
194
+ if xx is None:
195
+ xx = np.arange(data.shape[1] if data.ndim > 1 else len(data))
196
+ else:
197
+ xx = np.asarray(xx)
198
+
199
+ expected_len = data.shape[1] if data.ndim > 1 else len(data)
200
+ assert (
201
+ len(xx) == expected_len
202
+ ), f"xx length ({len(xx)}) must match data length ({expected_len})"
203
+
204
+ if data.ndim == 1:
205
+ central = data
206
+ y_lower = central
207
+ y_upper = central
208
+ else:
209
+ central = np.nanmedian(data, axis=0)
210
+ y_lower = np.nanpercentile(data, 25, axis=0)
211
+ y_upper = np.nanpercentile(data, 75, axis=0)
212
+
213
+ n_samples = data.shape[0] if data.ndim > 1 else 1
214
+
215
+ if "label" in kwargs and kwargs["label"]:
216
+ kwargs["label"] = f"{kwargs['label']} (n={n_samples}, IQR)"
217
+
218
+ return scitex_plt_plot_shaded_line(axis, xx, y_lower, central, y_upper, **kwargs)
219
+
220
+
221
+ # EOF