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,114 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-02 20:12:46 (ywatanabe)"
4
+ # File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/ax/__init__.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/plt/ax/__init__.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ # Adjust
13
+ from ._style._add_marginal_ax import add_marginal_ax
14
+ from ._style._add_panel import add_panel, panel
15
+ from ._style._extend import extend
16
+ from ._style._force_aspect import force_aspect
17
+ from ._style._format_label import format_label
18
+ from ._style._hide_spines import hide_spines
19
+ from ._style._show_spines import (
20
+ show_spines,
21
+ show_all_spines,
22
+ show_classic_spines,
23
+ show_box_spines,
24
+ toggle_spines,
25
+ scientific_spines,
26
+ clean_spines,
27
+ )
28
+ from ._style._map_ticks import map_ticks
29
+ from ._style._rotate_labels import rotate_labels
30
+ from ._style._sci_note import sci_note
31
+ from ._style._set_n_ticks import set_n_ticks
32
+ from ._style._set_size import set_size
33
+ from ._style._set_supxyt import set_supxyt
34
+ from ._style._set_ticks import set_ticks
35
+ from ._style._set_xyt import set_xyt
36
+ from ._style._shift import shift
37
+ from ._style._share_axes import (
38
+ get_global_xlim,
39
+ get_global_ylim,
40
+ set_xlims,
41
+ set_ylims,
42
+ sharex,
43
+ sharexy,
44
+ sharey,
45
+ )
46
+ from ._style._set_log_scale import (
47
+ set_log_scale,
48
+ smart_log_limits,
49
+ add_log_scale_indicator,
50
+ )
51
+
52
+ # Plot
53
+ from ._plot._plot_heatmap import plot_heatmap
54
+ from ._plot._plot_circular_hist import plot_circular_hist
55
+ from ._plot._plot_conf_mat import plot_conf_mat
56
+ from ._plot._plot_cube import plot_cube
57
+ from ._plot._plot_ecdf import plot_ecdf
58
+ from ._plot._plot_fillv import plot_fillv
59
+ from ._plot._plot_violin import plot_violin
60
+ from ._plot._plot_image import plot_image
61
+ from ._plot._plot_joyplot import plot_joyplot
62
+ from ._plot._plot_raster import plot_raster
63
+ from ._plot._plot_rectangle import plot_rectangle
64
+ from ._plot._plot_scatter_hist import plot_scatter_hist
65
+ from ._plot._plot_shaded_line import plot_shaded_line
66
+ from ._plot._plot_statistical_shaded_line import (
67
+ plot_line,
68
+ plot_mean_std,
69
+ plot_mean_ci,
70
+ plot_median_iqr,
71
+ )
72
+
73
+
74
+ # ################################################################################
75
+ # # For Matplotlib Compatibility
76
+ # ################################################################################
77
+ # import matplotlib.pyplot.axis as counter_part
78
+ # _local_module_attributes = list(globals().keys())
79
+ # print(_local_module_attributes)
80
+
81
+ # def __getattr__(name):
82
+ # """
83
+ # Fallback to fetch attributes from matplotlib.pyplot
84
+ # if they are not defined directly in this module.
85
+ # """
86
+ # try:
87
+ # # Get the attribute from matplotlib.pyplot
88
+ # return getattr(counter_part, name)
89
+ # except AttributeError:
90
+ # # Raise the standard error if not found in pyplot either
91
+ # raise AttributeError(
92
+ # f"module '{__name__}' nor matplotlib.pyplot has attribute '{name}'"
93
+ # ) from None
94
+
95
+ # def __dir__():
96
+ # """
97
+ # Provide combined directory for tab completion, including
98
+ # attributes from this module and matplotlib.pyplot.
99
+ # """
100
+ # # Get attributes defined explicitly in this module
101
+ # local_attrs = set(_local_module_attributes)
102
+ # # Get attributes from matplotlib.pyplot
103
+ # pyplot_attrs = set(dir(counter_part))
104
+ # # Return the sorted union
105
+ # return sorted(local_attrs.union(pyplot_attrs))
106
+
107
+ # """
108
+ # import matplotlib.pyplot as plt
109
+ # import scitex.plt as mplt
110
+
111
+ # print(set(dir(mplt.ax)) - set(dir(plt.axis)))
112
+ # """
113
+
114
+ # EOF
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-02 20:12:19 (ywatanabe)"
4
+ # File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/ax/_plot/__init__.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/plt/ax/_plot/__init__.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+
11
+ from ._plot_scatter_hist import plot_scatter_hist
12
+ from ._plot_heatmap import plot_heatmap
13
+ from ._plot_circular_hist import plot_circular_hist
14
+ from ._plot_conf_mat import plot_conf_mat
15
+ from ._plot_cube import plot_cube
16
+ from ._plot_ecdf import plot_ecdf
17
+ from ._plot_fillv import plot_fillv
18
+ from ._plot_violin import plot_violin, sns_plot_violin
19
+ from ._plot_image import plot_image
20
+ from ._plot_joyplot import plot_joyplot
21
+ from ._plot_raster import plot_raster
22
+ from ._plot_rectangle import plot_rectangle
23
+ from ._plot_shaded_line import plot_shaded_line, _plot_single_shaded_line
24
+ from ._plot_statistical_shaded_line import (
25
+ plot_line,
26
+ plot_mean_std,
27
+ plot_mean_ci,
28
+ plot_median_iqr,
29
+ )
30
+
31
+ __all__ = [
32
+ "plot_scatter_hist",
33
+ "plot_heatmap",
34
+ "plot_circular_hist",
35
+ "plot_conf_mat",
36
+ "plot_cube",
37
+ "plot_ecdf",
38
+ "plot_fillv",
39
+ "plot_violin",
40
+ "sns_plot_violin",
41
+ "plot_image",
42
+ "plot_joyplot",
43
+ "plot_raster",
44
+ "plot_rectangle",
45
+ "plot_shaded_line",
46
+ "_plot_single_shaded_line",
47
+ "plot_line",
48
+ "plot_mean_std",
49
+ "plot_mean_ci",
50
+ "plot_median_iqr",
51
+ ]
52
+
53
+ # EOF
@@ -0,0 +1,124 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-01 15:21:48 (ywatanabe)"
4
+ # File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/ax/_plot/_plot_circular_hist.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/plt/ax/_plot/_plot_circular_hist.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ # Time-stamp: "2024-02-03 13:10:50 (ywatanabe)"
13
+ import matplotlib
14
+ import numpy as np
15
+ from ....plt.utils import assert_valid_axis
16
+
17
+
18
+ def plot_circular_hist(
19
+ axis,
20
+ radians,
21
+ bins=16,
22
+ density=True,
23
+ offset=0,
24
+ gaps=True,
25
+ color=None,
26
+ range_bias=0,
27
+ ):
28
+ """
29
+ Example:
30
+ fig, ax = plt.subplots(subplot_kw=dict(projection="polar"))
31
+ ax = scitex.plt.plot_circular_hist(ax, radians)
32
+ Produce a circular histogram of angles on ax.
33
+
34
+ Parameters
35
+ ----------
36
+ ax : matplotlib.axes._subplots.PolarAxesSubplot or scitex.plt._subplots.AxisWrapper
37
+ axis instance created with subplot_kw=dict(projection='polar').
38
+
39
+ radians : array
40
+ Angles to plot, expected in units of radians.
41
+
42
+ bins : int, optional
43
+ Defines the number of equal-width bins in the range. The default is 16.
44
+
45
+ density : bool, optional
46
+ If True plot frequency proportional to area. If False plot frequency
47
+ proportional to radius. The default is True.
48
+
49
+ offset : float, optional
50
+ Sets the offset for the location of the 0 direction in units of
51
+ radians. The default is 0.
52
+
53
+ gaps : bool, optional
54
+ Whether to allow gaps between bins. When gaps = False the bins are
55
+ forced to partition the entire [-pi, pi] range. The default is True.
56
+
57
+ Returns
58
+ -------
59
+ n : array or list of arrays
60
+ The number of values in each bin.
61
+
62
+ bins : array
63
+ The edges of the bins.
64
+
65
+ patches : `.BarContainer` or list of a single `.Polygon`
66
+ Container of individual artists used to create the histogram
67
+ or list of such containers if there are multiple input datasets.
68
+ """
69
+ assert_valid_axis(axis, "First argument must be a matplotlib axis or scitex axis wrapper")
70
+
71
+ # Wrap angles to [-pi, pi)
72
+ radians = (radians + np.pi) % (2 * np.pi) - np.pi
73
+
74
+ # Force bins to partition entire circle
75
+ if not gaps:
76
+ bins = np.linspace(-np.pi, np.pi, num=bins + 1)
77
+
78
+ # Bin data and record counts
79
+ n, bins = np.histogram(
80
+ radians, bins=bins, range=(-np.pi + range_bias, np.pi + range_bias)
81
+ )
82
+
83
+ # Compute width of each bin
84
+ widths = np.diff(bins)
85
+
86
+ # By default plot frequency proportional to area
87
+ if density:
88
+ # Area to assign each bin
89
+ area = n / radians.size
90
+ # Calculate corresponding bin radius
91
+ radius = (area / np.pi) ** 0.5
92
+ # Otherwise plot frequency proportional to radius
93
+ else:
94
+ radius = n
95
+
96
+ mean_val = np.nanmean(radians)
97
+ std_val = np.nanstd(radians)
98
+ axis.axvline(mean_val, color=color)
99
+ axis.text(mean_val, 1, std_val)
100
+
101
+ # Plot data on ax
102
+ patches = axis.bar(
103
+ bins[:-1],
104
+ radius,
105
+ zorder=1,
106
+ align="edge",
107
+ width=widths,
108
+ edgecolor=color,
109
+ alpha=0.9,
110
+ fill=False,
111
+ linewidth=1,
112
+ )
113
+
114
+ # Set the direction of the zero angle
115
+ axis.set_theta_offset(offset)
116
+
117
+ # Remove ylabels for area plots (they are mostly obstructive)
118
+ if density:
119
+ axis.set_yticks([])
120
+
121
+ return n, bins, patches
122
+
123
+
124
+ # EOF
@@ -0,0 +1,136 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-18 15:08:16 (ywatanabe)"
4
+ # File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/plt/ax/_plot/_plot_conf_mat.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/plt/ax/_plot/_plot_conf_mat.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ from typing import List, Optional, Tuple, Union
13
+
14
+ import matplotlib
15
+ import matplotlib.pyplot as plt
16
+ import numpy as np
17
+ import pandas as pd
18
+ import seaborn as sns
19
+
20
+ from ...utils._calc_bacc_from_conf_mat import calc_bacc_from_conf_mat
21
+ from ...utils import assert_valid_axis
22
+ from .._style._extend import extend as scitex_plt_extend
23
+
24
+
25
+ def plot_conf_mat(
26
+ axis: plt.Axes,
27
+ data: Union[np.ndarray, pd.DataFrame],
28
+ x_labels: Optional[List[str]] = None,
29
+ y_labels: Optional[List[str]] = None,
30
+ title: str = "Confusion Matrix",
31
+ cmap: str = "Blues",
32
+ cbar: bool = True,
33
+ cbar_kw: dict = {},
34
+ label_rotation_xy: Tuple[float, float] = (15, 15),
35
+ x_extend_ratio: float = 1.0,
36
+ y_extend_ratio: float = 1.0,
37
+ calc_bacc: bool = False,
38
+ **kwargs,
39
+ ) -> Union[plt.Axes, Tuple[plt.Axes, float]]:
40
+ """Creates a confusion matrix heatmap with optional balanced accuracy.
41
+
42
+ Parameters
43
+ ----------
44
+ axis : plt.Axes or scitex.plt._subplots._AxisWrapper.AxisWrapper
45
+ Matplotlib axes or scitex axis wrapper to plot on
46
+ data : Union[np.ndarray, pd.DataFrame]
47
+ Confusion matrix data
48
+ x_labels : Optional[List[str]], optional
49
+ Labels for predicted classes
50
+ y_labels : Optional[List[str]], optional
51
+ Labels for true classes
52
+ title : str, optional
53
+ Plot title
54
+ cmap : str, optional
55
+ Colormap name
56
+ cbar : bool, optional
57
+ Whether to show colorbar
58
+ cbar_kw : dict, optional
59
+ Colorbar parameters
60
+ label_rotation_xy : Tuple[float, float], optional
61
+ (x,y) label rotation angles
62
+ x_extend_ratio : float, optional
63
+ X-axis extension ratio
64
+ y_extend_ratio : float, optional
65
+ Y-axis extension ratio
66
+ calc_bacc : bool, optional
67
+ Calculate Balanced Accuracy from Confusion Matrix
68
+
69
+ Returns
70
+ -------
71
+ Union[plt.Axes, Tuple[plt.Axes, float]] or Union[scitex.plt._subplots._AxisWrapper.AxisWrapper, Tuple[scitex.plt._subplots._AxisWrapper.AxisWrapper, float]]
72
+ Axes object and optionally balanced accuracy
73
+
74
+ Example
75
+ -------
76
+ >>> data = np.array([[10, 2, 0], [1, 15, 3], [0, 2, 20]])
77
+ >>> fig, ax = plt.subplots()
78
+ >>> ax, bacc = plot_conf_mat(ax, data, x_labels=['A','B','C'],
79
+ ... y_labels=['X','Y','Z'], calc_bacc=True)
80
+ >>> print(f"Balanced Accuracy: {bacc:.3f}")
81
+ Balanced Accuracy: 0.889
82
+ """
83
+
84
+ assert_valid_axis(axis, "First argument must be a matplotlib axis or scitex axis wrapper")
85
+
86
+ if not isinstance(data, pd.DataFrame):
87
+ data = pd.DataFrame(data)
88
+
89
+ bacc_val = calc_bacc_from_conf_mat(data.values)
90
+ title = f"{title} (bACC = {bacc_val:.3f})"
91
+
92
+ res = sns.heatmap(
93
+ data,
94
+ ax=axis,
95
+ cmap=cmap,
96
+ annot=True,
97
+ fmt=",d",
98
+ cbar=False,
99
+ vmin=0,
100
+ **kwargs,
101
+ )
102
+
103
+ res.invert_yaxis()
104
+
105
+ for _, spine in res.spines.items():
106
+ spine.set_visible(False)
107
+
108
+ axis.set_xlabel("Predicted label")
109
+ axis.set_ylabel("True label")
110
+ axis.set_title(title)
111
+
112
+ if x_labels is not None:
113
+ axis.set_xticklabels(x_labels)
114
+ if y_labels is not None:
115
+ axis.set_yticklabels(y_labels)
116
+
117
+ axis = scitex_plt_extend(axis, x_extend_ratio, y_extend_ratio)
118
+ if data.shape[0] == data.shape[1]:
119
+ axis.set_box_aspect(1)
120
+ axis.set_xticklabels(
121
+ axis.get_xticklabels(),
122
+ rotation=label_rotation_xy[0],
123
+ fontdict={"verticalalignment": "top"},
124
+ )
125
+ axis.set_yticklabels(
126
+ axis.get_yticklabels(),
127
+ rotation=label_rotation_xy[1],
128
+ fontdict={"horizontalalignment": "right"},
129
+ )
130
+
131
+ if calc_bacc:
132
+ return axis, bacc_val
133
+ else:
134
+ return axis, None
135
+
136
+ # EOF
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-01 15:21:37 (ywatanabe)"
4
+ # File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/ax/_plot/_plot_cube.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/plt/ax/_plot/_plot_cube.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ from itertools import combinations, product
13
+
14
+ import numpy as np
15
+
16
+
17
+ def plot_cube(ax, xlim, ylim, zlim, c="blue", alpha=1.0):
18
+ """
19
+ Plot a 3D cube on the given axis.
20
+
21
+ Args:
22
+ ax: Matplotlib 3D axis
23
+ xlim: Range for x-axis as a tuple (min, max)
24
+ ylim: Range for y-axis as a tuple (min, max)
25
+ zlim: Range for z-axis as a tuple (min, max)
26
+ c: Color of the cube edges (default: 'blue')
27
+ alpha: Transparency of the cube edges (default: 1.0)
28
+
29
+ Returns:
30
+ Matplotlib axis with the cube plotted
31
+ """
32
+ # Validate inputs
33
+ assert hasattr(ax, "plot3D"), "The axis must be a 3D axis with plot3D method"
34
+ assert len(xlim) == 2, "xlim must be a tuple of (min, max)"
35
+ assert len(ylim) == 2, "ylim must be a tuple of (min, max)"
36
+ assert len(zlim) == 2, "zlim must be a tuple of (min, max)"
37
+ assert xlim[0] < xlim[1], "xlim[0] must be less than xlim[1]"
38
+ assert ylim[0] < ylim[1], "ylim[0] must be less than ylim[1]"
39
+ assert zlim[0] < zlim[1], "zlim[0] must be less than zlim[1]"
40
+
41
+ # Get all corners of the cube
42
+ corners = np.array(list(product(xlim, ylim, zlim)))
43
+
44
+ # Draw edges between corners
45
+ for start, end in combinations(corners, 2):
46
+ # Check if the points form an edge (differ in exactly one dimension)
47
+ if np.sum(np.abs(start - end)) == xlim[1] - xlim[0]:
48
+ ax.plot3D(*zip(start, end), c=c, linewidth=3, alpha=alpha)
49
+ if np.sum(np.abs(start - end)) == ylim[1] - ylim[0]:
50
+ ax.plot3D(*zip(start, end), c=c, linewidth=3, alpha=alpha)
51
+ if np.sum(np.abs(start - end)) == zlim[1] - zlim[0]:
52
+ ax.plot3D(*zip(start, end), c=c, linewidth=3, alpha=alpha)
53
+
54
+ return ax
55
+
56
+
57
+ # EOF
@@ -0,0 +1,84 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-01 20:17:59 (ywatanabe)"
4
+ # File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/ax/_plot/_plot_ecdf.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/plt/ax/_plot/_plot_ecdf.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ import warnings
13
+
14
+ import matplotlib
15
+ import numpy as np
16
+
17
+ from ....pd._force_df import force_df as scitex_pd_force_df
18
+ from ....plt.utils import assert_valid_axis
19
+
20
+
21
+ def plot_ecdf(axis, data, **kwargs):
22
+ """Plot Empirical Cumulative Distribution Function (ECDF).
23
+
24
+ The ECDF shows the proportion of data points less than or equal to each value,
25
+ representing the empirical estimate of the cumulative distribution function.
26
+
27
+ Parameters
28
+ ----------
29
+ axis : matplotlib.axes.Axes or scitex.plt._subplots.AxisWrapper
30
+ Matplotlib axis or scitex axis wrapper to plot on
31
+ data : array-like
32
+ Data to compute and plot ECDF for. NaN values are ignored.
33
+ **kwargs : dict
34
+ Additional arguments to pass to plot function
35
+
36
+ Returns
37
+ -------
38
+ tuple
39
+ (axis, DataFrame) containing the plot and data
40
+ """
41
+ assert_valid_axis(axis, "First argument must be a matplotlib axis or scitex axis wrapper")
42
+
43
+ # Flatten and remove NaN values
44
+ data = np.hstack(data)
45
+
46
+ # Warnings
47
+ if np.isnan(data).any():
48
+ warnings.warn("NaN value are ignored for ECDF plot.")
49
+ data = data[~np.isnan(data)]
50
+ nn = len(data)
51
+
52
+ # Sort the data and compute the ECDF values
53
+ data_sorted = np.sort(data)
54
+ ecdf_perc = 100 * np.arange(1, len(data_sorted) + 1) / len(data_sorted)
55
+
56
+ # Create the pseudo x-axis for step plotting
57
+ x_step = np.repeat(data_sorted, 2)[1:]
58
+ y_step = np.repeat(ecdf_perc, 2)[:-1]
59
+
60
+ # Plot the ECDF using steps
61
+ axis.plot(x_step, y_step, drawstyle="steps-post", **kwargs)
62
+
63
+ # Scatter the original data points
64
+ axis.plot(data_sorted, ecdf_perc, marker=".", linestyle="none")
65
+
66
+ # Set ylim, xlim, and aspect ratio
67
+ axis.set_ylim(0, 100)
68
+ axis.set_xlim(0, 1.0)
69
+
70
+ # Create a DataFrame to hold the ECDF data
71
+ df = scitex_pd_force_df(
72
+ {
73
+ "x": data_sorted,
74
+ "y": ecdf_perc,
75
+ "n": nn,
76
+ "x_step": x_step,
77
+ "y_step": y_step,
78
+ }
79
+ )
80
+
81
+ return axis, df
82
+
83
+
84
+ # EOF
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-04-30 21:26:45 (ywatanabe)"
4
+ # File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/ax/_plot_fillv.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/plt/ax/_plot_fillv.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ import matplotlib
13
+ import numpy as np
14
+ from ....plt.utils import assert_valid_axis
15
+
16
+
17
+ def plot_fillv(axes, starts, ends, color="red", alpha=0.2):
18
+ """
19
+ Fill between specified start and end intervals on an axis or array of axes.
20
+
21
+ Parameters
22
+ ----------
23
+ axes : matplotlib.axes.Axes or scitex.plt._subplots.AxisWrapper or numpy.ndarray of axes
24
+ The axis object(s) to fill intervals on.
25
+ starts : array-like
26
+ Array-like of start positions.
27
+ ends : array-like
28
+ Array-like of end positions.
29
+ color : str, optional
30
+ The color to use for the filled regions. Default is "red".
31
+ alpha : float, optional
32
+ The alpha blending value, between 0 (transparent) and 1 (opaque). Default is 0.2.
33
+
34
+ Returns
35
+ -------
36
+ list
37
+ List of axes with filled intervals.
38
+ """
39
+
40
+ is_axes = isinstance(axes, np.ndarray)
41
+
42
+ axes = axes if isinstance(axes, np.ndarray) else [axes]
43
+
44
+ for ax in axes:
45
+ assert_valid_axis(ax, "First argument must be a matplotlib axis or scitex axis wrapper")
46
+ for start, end in zip(starts, ends):
47
+ ax.axvspan(start, end, color=color, alpha=alpha)
48
+
49
+ if not is_axes:
50
+ return axes[0]
51
+ else:
52
+ return axes
53
+
54
+
55
+ # EOF