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,333 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2025-06-04 11:15:00 (ywatanabe)"
4
+ # File: ./src/scitex/plt/ax/_style/_show_spines.py
5
+
6
+ """
7
+ Functionality:
8
+ Show spines for matplotlib axes with intuitive API
9
+ Input:
10
+ Matplotlib axes object and spine visibility parameters
11
+ Output:
12
+ Axes with specified spines made visible
13
+ Prerequisites:
14
+ matplotlib
15
+ """
16
+
17
+ import matplotlib
18
+ from typing import Union, List
19
+
20
+
21
+ def show_spines(
22
+ axis,
23
+ top: bool = True,
24
+ bottom: bool = True,
25
+ left: bool = True,
26
+ right: bool = True,
27
+ ticks: bool = True,
28
+ labels: bool = True,
29
+ restore_defaults: bool = True,
30
+ spine_width: float = None,
31
+ spine_color: str = None
32
+ ):
33
+ """
34
+ Shows the specified spines of a matplotlib Axes object and optionally restores ticks and labels.
35
+
36
+ This function provides the intuitive counterpart to hide_spines. It's especially useful when
37
+ you have spines hidden by default (as in scitex configuration) and want to selectively show them
38
+ for clearer scientific plots or specific visualization needs.
39
+
40
+ Parameters
41
+ ----------
42
+ axis : matplotlib.axes.Axes
43
+ The Axes object for which the spines will be shown.
44
+ top : bool, optional
45
+ If True, shows the top spine. Defaults to True.
46
+ bottom : bool, optional
47
+ If True, shows the bottom spine. Defaults to True.
48
+ left : bool, optional
49
+ If True, shows the left spine. Defaults to True.
50
+ right : bool, optional
51
+ If True, shows the right spine. Defaults to True.
52
+ ticks : bool, optional
53
+ If True, restores ticks on the shown spines' axes. Defaults to True.
54
+ labels : bool, optional
55
+ If True, restores labels on the shown spines' axes. Defaults to True.
56
+ restore_defaults : bool, optional
57
+ If True, restores default tick positions and labels. Defaults to True.
58
+ spine_width : float, optional
59
+ Width of the spines to show. If None, uses matplotlib default.
60
+ spine_color : str, optional
61
+ Color of the spines to show. If None, uses matplotlib default.
62
+
63
+ Returns
64
+ -------
65
+ matplotlib.axes.Axes
66
+ The modified Axes object with the specified spines shown.
67
+
68
+ Examples
69
+ --------
70
+ >>> fig, ax = plt.subplots()
71
+ >>> # Show only bottom and left spines (classic scientific plot style)
72
+ >>> show_spines(ax, top=False, right=False)
73
+ >>> plt.show()
74
+
75
+ >>> # Show all spines with custom styling
76
+ >>> show_spines(ax, spine_width=1.5, spine_color='black')
77
+ >>> plt.show()
78
+
79
+ >>> # Show spines but without ticks/labels (for clean overlay plots)
80
+ >>> show_spines(ax, ticks=False, labels=False)
81
+ >>> plt.show()
82
+
83
+ Notes
84
+ -----
85
+ This function is designed to work seamlessly with scitex plotting where spines are hidden
86
+ by default. It provides an intuitive API for showing spines without needing to remember
87
+ that hide_spines(top=False, right=False) shows top and right spines.
88
+ """
89
+ # Handle both matplotlib axes and scitex AxisWrapper
90
+ if hasattr(axis, '_axis_mpl'):
91
+ # This is an scitex AxisWrapper, get the underlying matplotlib axis
92
+ axis = axis._axis_mpl
93
+
94
+ assert isinstance(
95
+ axis, matplotlib.axes._axes.Axes
96
+ ), "First argument must be a matplotlib axis or scitex AxisWrapper"
97
+
98
+ # Define which spines to show
99
+ spine_settings = {
100
+ "top": top,
101
+ "bottom": bottom,
102
+ "left": left,
103
+ "right": right
104
+ }
105
+
106
+ for spine_name, should_show in spine_settings.items():
107
+ # Set spine visibility
108
+ axis.spines[spine_name].set_visible(should_show)
109
+
110
+ if should_show:
111
+ # Set spine width if specified
112
+ if spine_width is not None:
113
+ axis.spines[spine_name].set_linewidth(spine_width)
114
+
115
+ # Set spine color if specified
116
+ if spine_color is not None:
117
+ axis.spines[spine_name].set_color(spine_color)
118
+
119
+ # Restore ticks if requested
120
+ if ticks and restore_defaults:
121
+ # Determine tick positions based on which spines are shown
122
+ if bottom and not top:
123
+ axis.xaxis.set_ticks_position('bottom')
124
+ elif top and not bottom:
125
+ axis.xaxis.set_ticks_position('top')
126
+ elif bottom and top:
127
+ axis.xaxis.set_ticks_position('both')
128
+
129
+ if left and not right:
130
+ axis.yaxis.set_ticks_position('left')
131
+ elif right and not left:
132
+ axis.yaxis.set_ticks_position('right')
133
+ elif left and right:
134
+ axis.yaxis.set_ticks_position('both')
135
+
136
+ # Restore labels if requested and restore_defaults is True
137
+ if labels and restore_defaults:
138
+ # Only restore if we haven't explicitly hidden them
139
+ # This preserves any custom tick labels that might have been set
140
+ current_xticks = axis.get_xticks()
141
+ current_yticks = axis.get_yticks()
142
+
143
+ if len(current_xticks) > 0 and (bottom or top):
144
+ # Generate default labels for x-axis
145
+ if not hasattr(axis, '_original_xticklabels'):
146
+ axis.set_xticks(current_xticks)
147
+
148
+ if len(current_yticks) > 0 and (left or right):
149
+ # Generate default labels for y-axis
150
+ if not hasattr(axis, '_original_yticklabels'):
151
+ axis.set_yticks(current_yticks)
152
+
153
+ return axis
154
+
155
+
156
+ def show_all_spines(
157
+ axis,
158
+ spine_width: float = None,
159
+ spine_color: str = None,
160
+ ticks: bool = True,
161
+ labels: bool = True
162
+ ):
163
+ """
164
+ Convenience function to show all spines with optional styling.
165
+
166
+ Parameters
167
+ ----------
168
+ axis : matplotlib.axes.Axes
169
+ The Axes object to modify.
170
+ spine_width : float, optional
171
+ Width of all spines.
172
+ spine_color : str, optional
173
+ Color of all spines.
174
+ ticks : bool, optional
175
+ Whether to show ticks. Defaults to True.
176
+ labels : bool, optional
177
+ Whether to show labels. Defaults to True.
178
+
179
+ Returns
180
+ -------
181
+ matplotlib.axes.Axes
182
+ The modified Axes object.
183
+
184
+ Examples
185
+ --------
186
+ >>> show_all_spines(ax, spine_width=1.2, spine_color='gray')
187
+ """
188
+ return show_spines(
189
+ axis,
190
+ top=True, bottom=True, left=True, right=True,
191
+ ticks=ticks, labels=labels,
192
+ spine_width=spine_width, spine_color=spine_color
193
+ )
194
+
195
+
196
+ def show_classic_spines(
197
+ axis,
198
+ spine_width: float = None,
199
+ spine_color: str = None,
200
+ ticks: bool = True,
201
+ labels: bool = True
202
+ ):
203
+ """
204
+ Show only bottom and left spines (classic scientific plot style).
205
+
206
+ Parameters
207
+ ----------
208
+ axis : matplotlib.axes.Axes
209
+ The Axes object to modify.
210
+ spine_width : float, optional
211
+ Width of the spines.
212
+ spine_color : str, optional
213
+ Color of the spines.
214
+ ticks : bool, optional
215
+ Whether to show ticks. Defaults to True.
216
+ labels : bool, optional
217
+ Whether to show labels. Defaults to True.
218
+
219
+ Returns
220
+ -------
221
+ matplotlib.axes.Axes
222
+ The modified Axes object.
223
+
224
+ Examples
225
+ --------
226
+ >>> show_classic_spines(ax) # Shows only bottom and left spines
227
+ """
228
+ return show_spines(
229
+ axis,
230
+ top=False, bottom=True, left=True, right=False,
231
+ ticks=ticks, labels=labels,
232
+ spine_width=spine_width, spine_color=spine_color
233
+ )
234
+
235
+
236
+ def show_box_spines(
237
+ axis,
238
+ spine_width: float = None,
239
+ spine_color: str = None,
240
+ ticks: bool = True,
241
+ labels: bool = True
242
+ ):
243
+ """
244
+ Show all four spines to create a box around the plot.
245
+
246
+ This is an alias for show_all_spines but with more descriptive naming
247
+ for when you specifically want a boxed appearance.
248
+
249
+ Parameters
250
+ ----------
251
+ axis : matplotlib.axes.Axes
252
+ The Axes object to modify.
253
+ spine_width : float, optional
254
+ Width of the box spines.
255
+ spine_color : str, optional
256
+ Color of the box spines.
257
+ ticks : bool, optional
258
+ Whether to show ticks. Defaults to True.
259
+ labels : bool, optional
260
+ Whether to show labels. Defaults to True.
261
+
262
+ Returns
263
+ -------
264
+ matplotlib.axes.Axes
265
+ The modified Axes object.
266
+
267
+ Examples
268
+ --------
269
+ >>> show_box_spines(ax, spine_width=1.0, spine_color='black')
270
+ """
271
+ return show_all_spines(axis, spine_width, spine_color, ticks, labels)
272
+
273
+
274
+ def toggle_spines(
275
+ axis,
276
+ top: bool = None,
277
+ bottom: bool = None,
278
+ left: bool = None,
279
+ right: bool = None
280
+ ):
281
+ """
282
+ Toggle the visibility of spines (show if hidden, hide if shown).
283
+
284
+ Parameters
285
+ ----------
286
+ axis : matplotlib.axes.Axes
287
+ The Axes object to modify.
288
+ top : bool, optional
289
+ If specified, sets top spine visibility. If None, toggles current state.
290
+ bottom : bool, optional
291
+ If specified, sets bottom spine visibility. If None, toggles current state.
292
+ left : bool, optional
293
+ If specified, sets left spine visibility. If None, toggles current state.
294
+ right : bool, optional
295
+ If specified, sets right spine visibility. If None, toggles current state.
296
+
297
+ Returns
298
+ -------
299
+ matplotlib.axes.Axes
300
+ The modified Axes object.
301
+
302
+ Examples
303
+ --------
304
+ >>> toggle_spines(ax) # Toggles all spines
305
+ >>> toggle_spines(ax, top=True, right=True) # Shows top and right, toggles others
306
+ """
307
+ spine_names = ['top', 'bottom', 'left', 'right']
308
+ spine_params = [top, bottom, left, right]
309
+
310
+ for spine_name, param in zip(spine_names, spine_params):
311
+ if param is None:
312
+ # Toggle current state
313
+ current_state = axis.spines[spine_name].get_visible()
314
+ axis.spines[spine_name].set_visible(not current_state)
315
+ else:
316
+ # Set specific state
317
+ axis.spines[spine_name].set_visible(param)
318
+
319
+ return axis
320
+
321
+
322
+ # Convenient aliases for common use cases
323
+ def scientific_spines(axis, **kwargs):
324
+ """Alias for show_classic_spines - shows only bottom and left spines."""
325
+ return show_classic_spines(axis, **kwargs)
326
+
327
+
328
+ def clean_spines(axis, **kwargs):
329
+ """Alias for showing no spines - useful for overlay plots or clean visualizations."""
330
+ return show_spines(axis, top=False, bottom=False, left=False, right=False, **kwargs)
331
+
332
+
333
+ # EOF
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-02 09:14:09 (ywatanabe)"
4
+ # File: /home/ywatanabe/proj/_scitex_repo/src/scitex/plt/colors/_PARAMS.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/plt/colors/_PARAMS.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ # RGB
13
+ RGB = {
14
+ "white": [255, 255, 255],
15
+ "black": [0, 0, 0],
16
+ "blue": [0, 128, 192],
17
+ "red": [255, 70, 50],
18
+ "pink": [255, 150, 200],
19
+ "green": [20, 180, 20],
20
+ "yellow": [230, 160, 20],
21
+ "gray": [128, 128, 128],
22
+ "grey": [128, 128, 128],
23
+ "purple": [200, 50, 255],
24
+ "light_blue": [20, 200, 200],
25
+ "brown": [128, 0, 0],
26
+ "navy": [0, 0, 100],
27
+ "orange": [228, 94, 50],
28
+ }
29
+
30
+ RGB_NORM = {
31
+ k: [round(r / 255, 2), round(g / 255, 2), round(b / 255, 2)]
32
+ for k, (r, g, b) in RGB.items()
33
+ }
34
+
35
+ # RGBA
36
+ DEF_ALPHA = 0.9
37
+ RGBA = {k: [r, g, b, DEF_ALPHA] for k, (r, g, b) in RGB.items()}
38
+ RGBA_NORM = {k: [r, g, b, DEF_ALPHA] for k, (r, g, b) in RGB_NORM.items()}
39
+ RGBA_NORM_FOR_CYCLE = {
40
+ k: v for k, v in RGBA_NORM.items() if k not in ["white", "grey", "black"]
41
+ }
42
+
43
+ # HEX
44
+ HEX = {
45
+ "blue": "#0080C0",
46
+ "red": "#FF4632",
47
+ "pink": "#FF96C8",
48
+ "green": "#14B414",
49
+ "yellow": "#E6A014",
50
+ "gray": "#808080",
51
+ "grey": "#808080",
52
+ "purple": "#C832FF",
53
+ "light_blue": "#14C8C8",
54
+ "brown": "#800000",
55
+ "navy": "#000064",
56
+ "orange": "#E45E32",
57
+ }
58
+
59
+
60
+ PARAMS = dict(
61
+ RGB=RGB,
62
+ RGBA=RGBA,
63
+ RGBA_NORM=RGBA_NORM,
64
+ RGBA_NORM_FOR_CYCLE=RGBA_NORM_FOR_CYCLE,
65
+ HEX=HEX,
66
+ )
67
+
68
+ # pprint(PARAMS)
69
+
70
+ # EOF
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env python3
2
+ """Scitex color module."""
3
+
4
+ from ._add_hue_col import add_hue_col
5
+ from ._colors import bgr2bgra, bgr2rgb, bgra2bgr, bgra2hex, bgra2rgba, cycle_color, cycle_color_bgr, cycle_color_rgb, gradiate_color, gradiate_color_bgr, gradiate_color_bgra, gradiate_color_rgb, gradiate_color_rgba, rgb2bgr, rgb2rgba, rgba2bgra, rgba2hex, rgba2rgb, str2bgr, str2bgra, str2hex, str2rgb, str2rgba, to_hex, to_rgb, to_rgba, update_alpha
6
+ from ._get_colors_from_cmap import get_categorical_colors_from_cmap, get_color_from_cmap, get_colors_from_cmap
7
+ from ._interpolate import gen_interpolate, interpolate
8
+ from ._PARAMS import PARAMS, DEF_ALPHA, RGB, RGB_NORM, RGBA, RGBA_NORM
9
+ from ._vizualize_colors import vizualize_colors
10
+
11
+ __all__ = [
12
+ "PARAMS",
13
+ "DEF_ALPHA",
14
+ "RGB",
15
+ "RGB_NORM",
16
+ "RGBA",
17
+ "RGBA_NORM",
18
+ "add_hue_col",
19
+ "bgr2bgra",
20
+ "bgr2rgb",
21
+ "bgra2bgr",
22
+ "bgra2hex",
23
+ "bgra2rgba",
24
+ "cycle_color",
25
+ "cycle_color_bgr",
26
+ "cycle_color_rgb",
27
+ "gen_interpolate",
28
+ "get_categorical_colors_from_cmap",
29
+ "get_color_from_cmap",
30
+ "get_colors_from_cmap",
31
+ "gradiate_color",
32
+ "gradiate_color_bgr",
33
+ "gradiate_color_bgra",
34
+ "gradiate_color_rgb",
35
+ "gradiate_color_rgba",
36
+ "interpolate",
37
+ "rgb2bgr",
38
+ "rgb2rgba",
39
+ "rgba2bgra",
40
+ "rgba2hex",
41
+ "rgba2rgb",
42
+ "str2bgr",
43
+ "str2bgra",
44
+ "str2hex",
45
+ "str2rgb",
46
+ "str2rgba",
47
+ "to_hex",
48
+ "to_rgb",
49
+ "to_rgba",
50
+ "update_alpha",
51
+ "vizualize_colors",
52
+ ]
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-02 18:02:24 (ywatanabe)"
4
+ # File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/color/_add_hue_col.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/plt/color/_add_hue_col.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ import numpy as np
13
+ import pandas as pd
14
+
15
+
16
+ def add_hue_col(df):
17
+ df["hue"] = 0
18
+ dummy_row = pd.DataFrame(
19
+ columns=df.columns,
20
+ data=np.array([np.nan for _ in df.columns]).reshape(1, -1),
21
+ )
22
+ dummy_row = {}
23
+ for col in df.columns:
24
+ dtype = df[col].dtype
25
+ if dtype is np.dtype(object):
26
+ dummy_row[col] = np.nan
27
+ if dtype is np.dtype(float):
28
+ dummy_row[col] = np.nan
29
+ if dtype is np.dtype(np.int64):
30
+ dummy_row[col] = np.nan
31
+ if dtype is np.dtype(bool):
32
+ dummy_row[col] = None
33
+
34
+ dummy_row = pd.DataFrame(pd.Series(dummy_row)).T
35
+
36
+ dummy_row["hue"] = 1
37
+ df_added = pd.concat([df, dummy_row], axis=0)
38
+ return df_added
39
+
40
+
41
+ # EOF
@@ -0,0 +1,205 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-02 12:19:50 (ywatanabe)"
4
+ # File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/colors/_colors.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/plt/colors/_colors.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ import matplotlib.colors as _colors
13
+ import numpy as np
14
+
15
+ from ...decorators._deprecated import deprecated
16
+ from ._PARAMS import PARAMS
17
+
18
+ # RGB
19
+ # ------------------------------
20
+
21
+
22
+ def str2rgb(c):
23
+ return PARAMS["RGB"][c]
24
+
25
+
26
+ def str2rgba(c, alpha=1.0):
27
+ rgba = rgb2rgba(PARAMS["RGB"][c])
28
+ rgba[-1] = alpha
29
+ return rgba
30
+
31
+
32
+ def rgb2rgba(rgb, alpha=1.0, round=2):
33
+ rgb = np.array(rgb).astype(float)
34
+ rgb /= 255
35
+ return [*rgb.round(round), alpha]
36
+
37
+
38
+ def rgba2rgb(rgba):
39
+ rgba = np.array(rgba).astype(float)
40
+ rgb = (rgba[:3] * 255).clip(0, 255)
41
+ return rgb.round(2).tolist()
42
+
43
+
44
+ def rgba2hex(rgba):
45
+ return "#{:02x}{:02x}{:02x}{:02x}".format(
46
+ int(rgba[0]), int(rgba[1]), int(rgba[2]), int(rgba[3] * 255)
47
+ )
48
+
49
+
50
+ def cycle_color_rgb(i_color, colors=None):
51
+ if colors is None:
52
+ colors = list(PARAMS["RGB"].keys())
53
+ n_colors = len(colors)
54
+ return colors[i_color % n_colors]
55
+
56
+
57
+ def gradiate_color_rgb(rgb_or_rgba, n=5):
58
+
59
+ # Separate RGB and alpha if present
60
+ if len(rgb_or_rgba) == 4: # RGBA format
61
+ rgb = rgb_or_rgba[:3]
62
+ alpha = rgb_or_rgba[3]
63
+ has_alpha = True
64
+ else: # RGB format
65
+ rgb = rgb_or_rgba
66
+ alpha = None
67
+ has_alpha = False
68
+
69
+ # Scale RGB values to 0-1 range if they're in 0-255 range
70
+ if any(val > 1 for val in rgb):
71
+ rgb = [val / 255 for val in rgb]
72
+
73
+ rgb_hsv = _colors.rgb_to_hsv(np.array(rgb))
74
+
75
+ gradient = []
76
+ for step in range(n):
77
+ color_hsv = [
78
+ rgb_hsv[0],
79
+ rgb_hsv[1],
80
+ rgb_hsv[2] * (1.0 - (step / n)),
81
+ ]
82
+ color_rgb = [int(v * 255) for v in _colors.hsv_to_rgb(color_hsv)]
83
+
84
+ if has_alpha:
85
+ gradient.append(rgb2rgba(color_rgb, alpha=alpha))
86
+ else:
87
+ gradient.append(color_rgb)
88
+
89
+ return gradient
90
+
91
+
92
+ def gradiate_color_rgba(rgb_or_rgba, n=5):
93
+ return gradiate_color_rgb(rgb_or_rgba, n)
94
+
95
+
96
+ # BGRA
97
+ # ------------------------------
98
+ def str2bgr(c):
99
+ return rgb2bgr(str2rgb(c))
100
+
101
+
102
+ def str2bgra(c, alpha=1.0):
103
+ return rgba2bgra(str2rgba(c))
104
+
105
+
106
+ def bgr2bgra(bgra, alpha=1.0, round=2):
107
+ return rgb2rgba(bgra, alpha=alpha, round=round)
108
+
109
+
110
+ def bgra2bgr(bgra):
111
+ return rgba2rgb(bgra)
112
+
113
+
114
+ def bgra2hex(bgra):
115
+ """Convert BGRA color format to hex format."""
116
+ rgba = bgra2rgba(bgra)
117
+ return rgba2hex(rgba)
118
+
119
+
120
+ def cycle_color_bgr(i_color, colors=None):
121
+ rgb_color = str2rgb(cycle_color(i_color, colors=colors))
122
+ return rgb2bgr(rgb_color)
123
+
124
+
125
+ def gradiate_color_bgr(bgr_or_bgra, n=5):
126
+ rgb_or_rgba = (
127
+ bgr2rgb(bgr_or_bgra) if len(bgr_or_bgra) == 3 else bgra2rgba(bgr_or_bgra)
128
+ )
129
+ rgb_gradient = gradiate_color_rgb(rgb_or_rgba, n)
130
+ return [
131
+ rgb2bgr(color) if len(color) == 3 else rgba2bgra(color)
132
+ for color in rgb_gradient
133
+ ]
134
+
135
+
136
+ def gradiate_color_bgra(bgra, n=5):
137
+ return gradiate_color_bgr(bgra, n)
138
+
139
+
140
+ # Common
141
+ # ------------------------------
142
+ def bgr2rgb(bgr):
143
+ """Convert BGR color format to RGB format."""
144
+ return [bgr[2], bgr[1], bgr[0]]
145
+
146
+
147
+ def rgb2bgr(rgb):
148
+ """Convert RGB color format to BGR format."""
149
+ return [rgb[2], rgb[1], rgb[0]]
150
+
151
+
152
+ def bgra2rgba(bgra):
153
+ """Convert BGRA color format to RGBA format."""
154
+ return [bgra[2], bgra[1], bgra[0], bgra[3]]
155
+
156
+
157
+ def rgba2bgra(rgba):
158
+ """Convert RGBA color format to BGRA format."""
159
+ return [rgba[2], rgba[1], rgba[0], rgba[3]]
160
+
161
+
162
+ def str2hex(c):
163
+ return PARAMS["HEX"][c]
164
+
165
+
166
+ def update_alpha(rgba, alpha):
167
+ rgba_list = list(rgba)
168
+ rgba_list[-1] = alpha
169
+ return rgba_list
170
+
171
+
172
+ def cycle_color(i_color, colors=None):
173
+ return cycle_color_rgb(i_color, colors=colors)
174
+
175
+
176
+ # Deprecated
177
+ # ------------------------------
178
+ @deprecated("Use str2rgb instead")
179
+ def to_rgb(c):
180
+ return str2rgb(c)
181
+
182
+
183
+ @deprecated("use str2rgba instewad")
184
+ def to_rgba(c, alpha=1.0):
185
+ return str2rgba(c, alpha=alpha)
186
+
187
+
188
+ @deprecated("use str2hex instead")
189
+ def to_hex(c):
190
+ return PARAMS["HEX"][c]
191
+
192
+
193
+ @deprecated("use gradiate_color_rgb/rgba/bgr/bgra instead")
194
+ def gradiate_color(rgb_or_rgba, n=5):
195
+ return gradiate_color_rgb(rgb_or_rgba, n)
196
+
197
+
198
+ if __name__ == "__main__":
199
+ c = "blue"
200
+ print(to_rgb(c))
201
+ print(to_rgba(c))
202
+ print(to_hex(c))
203
+ print(cycle_color(1))
204
+
205
+ # EOF