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,134 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-02 17:53:27 (ywatanabe)"
4
+ # File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/color/_get_from_cmap.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/plt/color/_get_from_cmap.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
+
17
+ # class ColorGetter:
18
+ # # https://stackoverflow.com/questions/26108436/how-can-i-get-the-matplotlib-rgb-color-given-the-colormap-name-boundrynorm-an
19
+ # def __init__(self, cmap_name, start_val, stop_val):
20
+ # self.cmap_name = cmap_name
21
+ # self.cmap = plt.get_cmap(cmap_name)
22
+ # self.norm = mpl.colors.Normalize(vmin=start_val, vmax=stop_val)
23
+ # self.scalarMap = cm.ScalarMappable(norm=self.norm, cmap=self.cmap)
24
+
25
+ # def get_rgb(self, val):
26
+ # return self.scalarMap.to_rgba(val)
27
+
28
+
29
+ def get_color_from_cmap(
30
+ cmap_name: str,
31
+ value: float,
32
+ value_range: Optional[Tuple[float, float]] = None,
33
+ alpha: float = 1.0,
34
+ ) -> Tuple[float, float, float, float]:
35
+ """Get a color from a colormap at a specific value.
36
+
37
+ Parameters
38
+ ----------
39
+ cmap_name : str
40
+ Name of the colormap (e.g., 'viridis', 'plasma', 'Blues')
41
+ value : float
42
+ Value to map to a color in the colormap
43
+ value_range : tuple of (float, float), optional
44
+ Range of values to map to the colormap. If None, uses (0, 1)
45
+ alpha : float, optional
46
+ Alpha value for the color (0.0 to 1.0), by default 1.0
47
+
48
+ Returns
49
+ -------
50
+ tuple
51
+ RGBA color tuple with values from 0 to 1
52
+ """
53
+ # Get the colormap using the recommended approach
54
+ cmap = matplotlib.colormaps[cmap_name]
55
+
56
+ # Normalize the value
57
+ if value_range is None:
58
+ norm_value = value
59
+ else:
60
+ min_val, max_val = value_range
61
+ norm_value = (value - min_val) / (max_val - min_val)
62
+
63
+ # Clip to ensure within range
64
+ norm_value = np.clip(norm_value, 0.0, 1.0)
65
+
66
+ # Get the color
67
+ rgba_color = list(cmap(norm_value))
68
+
69
+ # Set alpha
70
+ rgba_color[3] = alpha
71
+
72
+ return tuple(rgba_color)
73
+
74
+
75
+ def get_colors_from_cmap(
76
+ cmap_name: str,
77
+ n_colors: int,
78
+ value_range: Optional[Tuple[float, float]] = None,
79
+ alpha: float = 1.0,
80
+ ) -> List[Tuple[float, float, float, float]]:
81
+ """Get a list of evenly spaced colors from a colormap.
82
+
83
+ Parameters
84
+ ----------
85
+ cmap_name : str
86
+ Name of the colormap (e.g., 'viridis', 'plasma', 'Blues')
87
+ n_colors : int
88
+ Number of colors to sample from the colormap
89
+ value_range : tuple of (float, float), optional
90
+ Range of values to map to the colormap. If None, uses (0, 1)
91
+ alpha : float, optional
92
+ Alpha value for the colors (0.0 to 1.0), by default 1.0
93
+
94
+ Returns
95
+ -------
96
+ list
97
+ List of RGBA color tuples with values from 0 to 1
98
+ """
99
+ if value_range is None:
100
+ values = np.linspace(0, 1, n_colors)
101
+ else:
102
+ values = np.linspace(value_range[0], value_range[1], n_colors)
103
+
104
+ return [get_color_from_cmap(cmap_name, val, value_range, alpha) for val in values]
105
+
106
+
107
+ def get_categorical_colors_from_cmap(
108
+ cmap_name: str, categories: Union[List, np.ndarray], alpha: float = 1.0
109
+ ) -> dict:
110
+ """Map categorical values to colors from a colormap.
111
+
112
+ Parameters
113
+ ----------
114
+ cmap_name : str
115
+ Name of the colormap (e.g., 'viridis', 'plasma', 'Blues')
116
+ categories : list or np.ndarray
117
+ List of categories to map to colors
118
+ alpha : float, optional
119
+ Alpha value for the colors (0.0 to 1.0), by default 1.0
120
+
121
+ Returns
122
+ -------
123
+ dict
124
+ Dictionary mapping categories to RGBA color tuples
125
+ """
126
+ unique_categories = np.unique(categories)
127
+ n_categories = len(unique_categories)
128
+
129
+ colors = get_colors_from_cmap(cmap_name, n_categories, alpha=alpha)
130
+
131
+ return {cat: colors[idx] for idx, cat in enumerate(unique_categories)}
132
+
133
+
134
+ # EOF
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-03 00:51:06 (ywatanabe)"
4
+ # File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/color/_interp_colors.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/plt/color/_interp_colors.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ import matplotlib.colors as mcolors
13
+ import numpy as np
14
+ from scitex.decorators import deprecated
15
+
16
+
17
+ def gen_interpolate(color_start, color_end, num_points, round=3):
18
+ color_start_rgba = np.array(mcolors.to_rgba(color_start))
19
+ color_end_rgba = np.array(mcolors.to_rgba(color_end))
20
+ rgba_values = np.linspace(color_start_rgba, color_end_rgba, num_points).round(round)
21
+ return [list(color) for color in rgba_values]
22
+
23
+
24
+ @deprecated("Use gen_interpolate instead")
25
+ def interpolate(color_start, color_end, num_points, round=3):
26
+ return gen_interpolate(color_start, color_end, num_points, round=round)
27
+
28
+
29
+ # EOF
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-03 00:53:43 (ywatanabe)"
4
+ # File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/color/_vizualize_colors.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/plt/color/_vizualize_colors.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ import numpy as np
13
+
14
+
15
+ def vizualize_colors(colors):
16
+
17
+ def gen_rand_sample(size=100):
18
+ x = np.linspace(-1, 1, size)
19
+ y = np.random.normal(size=size)
20
+ s = np.random.randn(size)
21
+ return x, y, s
22
+
23
+ from .. import subplots as scitex_plt_subplots
24
+
25
+ fig, ax = scitex_plt_subplots()
26
+
27
+ for ii, (color_str, rgba) in enumerate(colors.items()):
28
+ xx, yy, ss = gen_rand_sample()
29
+
30
+ # # Box color plot
31
+ # ax.plot_rectangle(
32
+ # xx=ii, yy=0, width=1, height=1, color=rgba, label=color_str
33
+ # )
34
+
35
+ # Line plot
36
+ ax.plot_shaded_line(xx, yy - ss, yy, yy + ss, color=rgba, label=color_str)
37
+
38
+ # # Scatter plot
39
+ # axes[2].scatter(xx, yy, color=rgba, label=color_str)
40
+
41
+ # # KDE plot
42
+ # axes[3].plot_kde(yy, color=rgba, label=color_str)
43
+
44
+ # for ax in axes.flat:
45
+ # # ax.axis("off")
46
+ # ax.legend()
47
+
48
+ ax.legend()
49
+ # plt.tight_layout()
50
+ # plt.show()
51
+ return fig, ax
52
+
53
+
54
+ # EOF
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env python3
2
+ """Scitex utils module."""
3
+
4
+ from ._calc_bacc_from_conf_mat import calc_bacc_from_conf_mat
5
+ from ._calc_nice_ticks import calc_nice_ticks
6
+ from ._close import close
7
+ from ._colorbar import add_shared_colorbar, colorbar
8
+ from ._configure_mpl import configure_mpl
9
+ from ._histogram_utils import HistogramBinManager, histogram_bin_manager
10
+ from ._im2grid import im2grid
11
+ from ._is_valid_axis import assert_valid_axis, is_valid_axis
12
+ from ._mk_colorbar import mk_colorbar
13
+ from ._mk_patches import mk_patches
14
+ from ._scientific_captions import ScientificCaption, add_figure_caption, add_panel_captions, caption_manager, create_figure_list, cross_ref, enhance_scitex_save_with_captions, export_captions, quick_caption, save_with_caption
15
+ from ._scitex_config import SciTeXConfig, configure_scitex_ecosystem, get_scitex_config
16
+
17
+ __all__ = [
18
+ "HistogramBinManager",
19
+ "SciTeXConfig",
20
+ "ScientificCaption",
21
+ "add_figure_caption",
22
+ "add_panel_captions",
23
+ "add_shared_colorbar",
24
+ "assert_valid_axis",
25
+ "calc_bacc_from_conf_mat",
26
+ "calc_nice_ticks",
27
+ "caption_manager",
28
+ "close",
29
+ "colorbar",
30
+ "configure_mpl",
31
+ "configure_scitex_ecosystem",
32
+ "create_figure_list",
33
+ "cross_ref",
34
+ "enhance_scitex_save_with_captions",
35
+ "export_captions",
36
+ "get_scitex_config",
37
+ "histogram_bin_manager",
38
+ "im2grid",
39
+ "is_valid_axis",
40
+ "mk_colorbar",
41
+ "mk_patches",
42
+ "quick_caption",
43
+ "save_with_caption",
44
+ ]
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-02 10:09:35 (ywatanabe)"
4
+ # File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/utils/_calc_bacc_from_conf_mat.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/plt/utils/_calc_bacc_from_conf_mat.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ import numpy as np
13
+
14
+ from ...context import suppress_output
15
+
16
+
17
+ def calc_bacc_from_conf_mat(confusion_matrix: np.ndarray, n_round=3) -> float:
18
+ """Calculates balanced accuracy from confusion matrix.
19
+
20
+ Parameters
21
+ ----------
22
+ confusion_matrix : np.ndarray
23
+ Confusion matrix array
24
+
25
+ Returns
26
+ -------
27
+ float
28
+ Balanced accuracy score
29
+
30
+ Example
31
+ -------
32
+ >>> cm = np.array([[10, 2, 0], [1, 15, 3], [0, 2, 20]])
33
+ >>> bacc = calc_bacc_from_conf_mat(cm, n_round=3)
34
+ >>> print(f"Balanced Accuracy: bacc")
35
+ Balanced Accuracy: 0.889
36
+ """
37
+ with suppress_output():
38
+ try:
39
+ per_class = np.diag(confusion_matrix) / np.nansum(confusion_matrix, axis=1)
40
+ bacc = np.nanmean(per_class)
41
+ except:
42
+ bacc = np.nan
43
+ return round(bacc, n_round)
44
+
45
+
46
+ # EOF
@@ -0,0 +1,101 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-01 13:40:19 (ywatanabe)"
4
+ # File: /home/ywatanabe/proj/_scitex_repo/src/scitex/plt/_calc_nice_ticks.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/plt/_calc_nice_ticks.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ import matplotlib.ticker as mticker
13
+ import numpy as np
14
+
15
+
16
+ def calc_nice_ticks(
17
+ min_val,
18
+ max_val,
19
+ allow_edge_min=True,
20
+ allow_edge_max=False,
21
+ pad_perc=5,
22
+ num_ticks=4,
23
+ prefer_integer=True,
24
+ ):
25
+ """
26
+ Calculate nice tick values for axes based on data range.
27
+ Parameters:
28
+ -----------
29
+ min_val : float
30
+ Minimum data value
31
+ max_val : float
32
+ Maximum data value
33
+ allow_edge_min : bool, optional
34
+ Whether to allow a tick at the min value, defaults to True
35
+ allow_edge_max : bool, optional
36
+ Whether to allow a tick at the max value, defaults to False
37
+ pad_perc : float, optional
38
+ Percentage of data range to pad, defaults to 5%
39
+ num_ticks : int, optional
40
+ Target number of ticks to display, defaults to 4
41
+ prefer_integer : bool, optional
42
+ If True, convert ticks to integers when possible, defaults to True
43
+ Returns:
44
+ --------
45
+ list
46
+ List of nicely spaced tick positions
47
+ """
48
+ # Handle edge cases
49
+ if min_val == max_val:
50
+ if min_val == 0:
51
+ return [0, 1, 2, 3]
52
+ else:
53
+ # Create a small range around the single value
54
+ margin = abs(min_val) * 0.1
55
+ min_val -= margin
56
+ max_val += margin
57
+
58
+ # Store original values before padding
59
+ original_min = min_val
60
+ original_max = max_val
61
+
62
+ # Apply padding if needed
63
+ range_size = max_val - min_val
64
+ if not allow_edge_min:
65
+ min_val -= range_size * pad_perc / 100
66
+ if not allow_edge_max:
67
+ max_val += range_size * pad_perc / 100
68
+
69
+ # Use matplotlib's MaxNLocator to get nice tick locations
70
+ locator = mticker.MaxNLocator(
71
+ nbins=num_ticks,
72
+ steps=[1, 2, 5, 10],
73
+ integer=False,
74
+ symmetric=False,
75
+ prune=None,
76
+ min_n_ticks=3,
77
+ )
78
+
79
+ # Get tick locations
80
+ tick_locations = locator.tick_values(min_val, max_val)
81
+
82
+ # If we got too many ticks, try to reduce them
83
+ if len(tick_locations) > num_ticks + 1:
84
+ locator = mticker.MaxNLocator(nbins=num_ticks - 1)
85
+ tick_locations = locator.tick_values(min_val, max_val)
86
+
87
+ # Filter out ticks outside the original data range if needed
88
+ if not allow_edge_min:
89
+ tick_locations = [tick for tick in tick_locations if tick >= original_min]
90
+ if not allow_edge_max:
91
+ tick_locations = [tick for tick in tick_locations if tick <= original_max]
92
+
93
+ # Convert to integers if all values can be represented as integers
94
+ if prefer_integer and all(float(int(tick)) == tick for tick in tick_locations):
95
+ tick_locations = [int(tick) for tick in tick_locations]
96
+
97
+ # Convert to simple list
98
+ return np.array(tick_locations).tolist()
99
+
100
+
101
+ # EOF
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-04-29 20:41:30 (ywatanabe)"
4
+ # File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/_close.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/plt/_close.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ import matplotlib
13
+ import matplotlib.pyplot as plt
14
+ import scitex.plt as scitex_plt
15
+
16
+
17
+ def close(obj):
18
+ """Close a matplotlib figure or SciTeX FigWrapper object.
19
+
20
+ Properly closes matplotlib figures to free memory, handling both
21
+ standard matplotlib Figure objects and SciTeX FigWrapper objects.
22
+ This is important for preventing memory leaks when creating many plots.
23
+
24
+ Parameters
25
+ ----------
26
+ obj : matplotlib.figure.Figure or scitex.plt.FigWrapper
27
+ The figure object to close. Can be either a matplotlib Figure
28
+ or an SciTeX FigWrapper instance.
29
+
30
+ Raises
31
+ ------
32
+ TypeError
33
+ If obj is neither a Figure nor FigWrapper object.
34
+
35
+ Examples
36
+ --------
37
+ >>> # Close a matplotlib figure
38
+ >>> fig, ax = plt.subplots()
39
+ >>> ax.plot([1, 2, 3], [1, 4, 9])
40
+ >>> close(fig)
41
+
42
+ >>> # Close an SciTeX FigWrapper
43
+ >>> fig, axes = scitex.plt.subplots(2, 2)
44
+ >>> close(fig)
45
+
46
+ >>> # Prevents memory leaks in loops
47
+ >>> for i in range(100):
48
+ ... fig, ax = plt.subplots()
49
+ ... ax.plot(data[i])
50
+ ... plt.savefig(f'plot_{i}.png')
51
+ ... close(fig) # Important!
52
+
53
+ See Also
54
+ --------
55
+ matplotlib.pyplot.close : Standard matplotlib close function
56
+ scitex.plt.subplots : Creates FigWrapper objects
57
+ """
58
+ if isinstance(obj, matplotlib.figure.Figure):
59
+ plt.close(obj)
60
+ elif isinstance(obj, scitex_plt._subplots._FigWrapper.FigWrapper):
61
+ plt.close(obj.figure)
62
+ else:
63
+ raise TypeError(
64
+ f"Cannot close object of type {type(obj).__name__}. Expected FigWrapper or Figure object."
65
+ )
66
+
67
+
68
+ # EOF
@@ -0,0 +1,96 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-06-08 11:15:00 (ywatanabe)"
4
+ # File: /src/scitex/plt/utils/_colorbar.py
5
+ # ----------------------------------------
6
+
7
+ """Enhanced colorbar utilities for better placement with scitex.plt"""
8
+
9
+ import matplotlib.pyplot as plt
10
+ from matplotlib.cm import ScalarMappable
11
+ from matplotlib.colors import Normalize
12
+
13
+
14
+ def colorbar(mappable, ax=None, **kwargs):
15
+ """Enhanced colorbar function that ensures proper spacing.
16
+
17
+ This function wraps matplotlib.pyplot.colorbar with better defaults
18
+ to prevent overlap with axes when using constrained_layout.
19
+
20
+ Parameters
21
+ ----------
22
+ mappable : matplotlib.cm.ScalarMappable
23
+ The mappable whose colorbar is to be made (e.g., from imshow, scatter)
24
+ ax : matplotlib.axes.Axes or list of Axes, optional
25
+ Parent axes from which space for a new colorbar axes will be stolen.
26
+ **kwargs : dict
27
+ Additional keyword arguments passed to matplotlib.pyplot.colorbar
28
+
29
+ Returns
30
+ -------
31
+ colorbar : matplotlib.colorbar.Colorbar
32
+ The colorbar instance
33
+ """
34
+ # Set better defaults for colorbar placement
35
+ defaults = {
36
+ 'fraction': 0.046, # Fraction of axes to use for colorbar
37
+ 'pad': 0.04, # Padding between axes and colorbar
38
+ 'aspect': 20, # Aspect ratio of colorbar
39
+ }
40
+
41
+ # Update defaults with any user-provided kwargs
42
+ for key, value in defaults.items():
43
+ if key not in kwargs:
44
+ kwargs[key] = value
45
+
46
+ # Create the colorbar
47
+ cbar = plt.colorbar(mappable, ax=ax, **kwargs)
48
+
49
+ # If using constrained_layout, ensure the figure updates
50
+ if ax is not None:
51
+ fig = ax.figure if hasattr(ax, 'figure') else ax[0].figure
52
+ if hasattr(fig, 'get_constrained_layout') and fig.get_constrained_layout():
53
+ # Force a layout update
54
+ fig.canvas.draw_idle()
55
+
56
+ return cbar
57
+
58
+
59
+ def add_shared_colorbar(fig, axes, mappable, location='right', **kwargs):
60
+ """Add a single colorbar shared by multiple axes.
61
+
62
+ Parameters
63
+ ----------
64
+ fig : matplotlib.figure.Figure
65
+ The figure containing the axes
66
+ axes : array-like of Axes
67
+ The axes that will share the colorbar
68
+ mappable : matplotlib.cm.ScalarMappable
69
+ The mappable whose colorbar is to be made
70
+ location : {'right', 'bottom', 'left', 'top'}, optional
71
+ Where to place the colorbar (default: 'right')
72
+ **kwargs : dict
73
+ Additional keyword arguments passed to fig.colorbar
74
+
75
+ Returns
76
+ -------
77
+ colorbar : matplotlib.colorbar.Colorbar
78
+ The colorbar instance
79
+ """
80
+ defaults = {
81
+ 'shrink': 0.8, # Shrink colorbar to match axes height
82
+ 'aspect': 30, # Make it thinner for shared colorbars
83
+ }
84
+
85
+ # Update defaults with any user-provided kwargs
86
+ for key, value in defaults.items():
87
+ if key not in kwargs:
88
+ kwargs[key] = value
89
+
90
+ # Create the shared colorbar
91
+ cbar = fig.colorbar(mappable, ax=axes, location=location, **kwargs)
92
+
93
+ return cbar
94
+
95
+
96
+ # EOF