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,121 @@
1
+ #!./env/bin/python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-07-13 08:14:19 (ywatanabe)"
4
+ # Author: Yusuke Watanabe (ywata1989@gmail.com)
5
+
6
+ """
7
+ This script does XYZ.
8
+ """
9
+
10
+ # Imports
11
+ import matplotlib.pyplot as plt
12
+
13
+ from ._format_label import format_label
14
+
15
+
16
+ # Functions
17
+ def set_xyt(ax, x=False, y=False, t=False, format_labels=True):
18
+ """Sets xlabel, ylabel and title"""
19
+
20
+ if x is not False:
21
+ x = format_label(x) if format_labels else x
22
+ ax.set_xlabel(x)
23
+
24
+ if y is not False:
25
+ y = format_label(y) if format_labels else y
26
+ ax.set_ylabel(y)
27
+
28
+ if t is not False:
29
+ t = format_label(t) if format_labels else t
30
+ ax.set_title(t)
31
+
32
+ return ax
33
+
34
+
35
+ def set_xytc(ax, x=False, y=False, t=False, c=False, methods=False, stats=False, format_labels=True):
36
+ """Sets xlabel, ylabel, title, and caption with SciTeX-Paper integration
37
+
38
+ Parameters
39
+ ----------
40
+ ax : matplotlib.axes.Axes or scitex AxisWrapper
41
+ The axes to modify
42
+ x : str or False, optional
43
+ X-axis label, by default False
44
+ y : str or False, optional
45
+ Y-axis label, by default False
46
+ t : str or False, optional
47
+ Title, by default False
48
+ c : str or False, optional
49
+ Caption to store for later use with scitex.io.save(), by default False
50
+ methods : str or False, optional
51
+ Methods description for SciTeX-Paper integration, by default False
52
+ stats : str or False, optional
53
+ Statistical analysis details for SciTeX-Paper integration, by default False
54
+ format_labels : bool, optional
55
+ Whether to apply automatic formatting, by default True
56
+
57
+ Returns
58
+ -------
59
+ ax : matplotlib.axes.Axes or scitex AxisWrapper
60
+ The modified axes
61
+
62
+ Examples
63
+ --------
64
+ >>> fig, ax = scitex.plt.subplots()
65
+ >>> ax.plot(x, y)
66
+ >>> ax.set_xytc(x='Time (s)', y='Voltage (mV)',
67
+ ... t='Neural Signal',
68
+ ... c='Example neural recording showing action potentials.',
69
+ ... methods='Intracellular recordings performed using patch-clamp technique.',
70
+ ... stats='Data analyzed using t-test with p<0.05 significance.')
71
+ >>> scitex.io.save(fig, 'neural_signal.png') # Caption automatically saved
72
+ """
73
+ # Set labels and title using existing function
74
+ set_xyt(ax, x=x, y=y, t=t, format_labels=format_labels)
75
+
76
+ # Store caption and extended metadata for later use by scitex.io.save()
77
+ if c is not False or methods is not False or stats is not False:
78
+ # Store comprehensive metadata as axis attribute for retrieval by save function
79
+ metadata = {
80
+ 'caption': c if c is not False else None,
81
+ 'methods': methods if methods is not False else None,
82
+ 'stats': stats if stats is not False else None
83
+ }
84
+
85
+ if hasattr(ax, '_scitex_metadata'):
86
+ ax._scitex_metadata.update(metadata)
87
+ else:
88
+ # For matplotlib axes, store in figure metadata
89
+ fig = ax.get_figure()
90
+ if not hasattr(fig, '_scitex_metadata'):
91
+ fig._scitex_metadata = {}
92
+ # Use axis position as identifier
93
+ fig._scitex_metadata[ax] = metadata
94
+
95
+ # Backward compatibility - also store simple caption
96
+ if c is not False:
97
+ if hasattr(ax, '_scitex_caption'):
98
+ ax._scitex_caption = c
99
+ else:
100
+ fig = ax.get_figure()
101
+ if not hasattr(fig, '_scitex_captions'):
102
+ fig._scitex_captions = {}
103
+ fig._scitex_captions[ax] = c
104
+
105
+ return ax
106
+
107
+
108
+ if __name__ == "__main__":
109
+ # Start
110
+ CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.gen.start(sys, plt)
111
+
112
+ # (YOUR AWESOME CODE)
113
+
114
+ # Close
115
+ scitex.gen.close(CONFIG)
116
+
117
+ # EOF
118
+
119
+ """
120
+ /ssh:ywatanabe@444:/home/ywatanabe/proj/entrance/scitex/plt/ax/_set_lt.py
121
+ """
@@ -0,0 +1,264 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-01 08:47:27 (ywatanabe)"
4
+ # File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/ax/_style/_share_axes.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/plt/ax/_style/_share_axes.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+ import matplotlib.pyplot as plt
13
+ import scitex
14
+ import numpy as np
15
+
16
+
17
+ def sharexy(*multiple_axes):
18
+ """Share both x and y axis limits across multiple axes.
19
+
20
+ Synchronizes both x and y axis limits across all provided axes objects,
21
+ ensuring they all display the same data range. Useful for comparing
22
+ multiple plots on the same scale.
23
+
24
+ Parameters
25
+ ----------
26
+ *multiple_axes : matplotlib.axes.Axes or array of Axes
27
+ Variable number of axes objects to synchronize.
28
+
29
+ Examples
30
+ --------
31
+ >>> fig, (ax1, ax2, ax3) = plt.subplots(1, 3)
32
+ >>> ax1.plot([1, 2, 3], [1, 4, 9])
33
+ >>> ax2.plot([1, 2, 3], [2, 5, 8])
34
+ >>> ax3.plot([1, 2, 3], [3, 6, 10])
35
+ >>> sharexy(ax1, ax2, ax3) # All axes now show same range
36
+
37
+ See Also
38
+ --------
39
+ sharex : Share only x-axis limits
40
+ sharey : Share only y-axis limits
41
+ """
42
+ sharex(*multiple_axes)
43
+ sharey(*multiple_axes)
44
+
45
+
46
+ def sharex(*multiple_axes):
47
+ """Share x-axis limits across multiple axes.
48
+
49
+ Finds the global x-axis limits across all axes and applies them
50
+ to each axis, ensuring horizontal alignment of data.
51
+
52
+ Parameters
53
+ ----------
54
+ *multiple_axes : matplotlib.axes.Axes or array of Axes
55
+ Variable number of axes objects to synchronize.
56
+
57
+ Returns
58
+ -------
59
+ axes : axes object(s)
60
+ The modified axes with shared x-limits.
61
+ xlim : tuple
62
+ The (xmin, xmax) limits applied.
63
+
64
+ Examples
65
+ --------
66
+ >>> fig, axes = plt.subplots(2, 1)
67
+ >>> axes[0].plot([1, 5], [1, 2])
68
+ >>> axes[1].plot([2, 4], [3, 4])
69
+ >>> sharex(axes[0], axes[1]) # Both show x-range [1, 5]
70
+ """
71
+ xlim = get_global_xlim(*multiple_axes)
72
+ return set_xlims(*multiple_axes, xlim=xlim)
73
+
74
+
75
+ def sharey(*multiple_axes):
76
+ """Share y-axis limits across multiple axes.
77
+
78
+ Finds the global y-axis limits across all axes and applies them
79
+ to each axis, ensuring vertical alignment of data.
80
+
81
+ Parameters
82
+ ----------
83
+ *multiple_axes : matplotlib.axes.Axes or array of Axes
84
+ Variable number of axes objects to synchronize.
85
+
86
+ Returns
87
+ -------
88
+ axes : axes object(s)
89
+ The modified axes with shared y-limits.
90
+ ylim : tuple
91
+ The (ymin, ymax) limits applied.
92
+
93
+ Examples
94
+ --------
95
+ >>> fig, axes = plt.subplots(1, 2)
96
+ >>> axes[0].plot([1, 2], [1, 5])
97
+ >>> axes[1].plot([1, 2], [2, 4])
98
+ >>> sharey(axes[0], axes[1]) # Both show y-range [1, 5]
99
+ """
100
+ ylim = get_global_ylim(*multiple_axes)
101
+ return set_ylims(*multiple_axes, ylim=ylim)
102
+
103
+
104
+ def get_global_xlim(*multiple_axes):
105
+ """Get the global x-axis limits across multiple axes.
106
+
107
+ Scans all provided axes to find the minimum and maximum x-values
108
+ across all of them. Handles both single axes and arrays of axes.
109
+
110
+ Parameters
111
+ ----------
112
+ *multiple_axes : matplotlib.axes.Axes or array of Axes
113
+ Variable number of axes objects to scan.
114
+
115
+ Returns
116
+ -------
117
+ tuple
118
+ (xmin, xmax) representing the global x-axis limits.
119
+
120
+ Examples
121
+ --------
122
+ >>> fig, (ax1, ax2) = plt.subplots(1, 2)
123
+ >>> ax1.plot([1, 3], [1, 2]) # x-range: [1, 3]
124
+ >>> ax2.plot([2, 5], [1, 2]) # x-range: [2, 5]
125
+ >>> xlim = get_global_xlim(ax1, ax2)
126
+ >>> print(xlim) # (1, 5)
127
+
128
+ Notes
129
+ -----
130
+ There appears to be a bug in the current implementation where
131
+ get_ylim() is called instead of get_xlim(). This should be fixed.
132
+ """
133
+ xmin, xmax = np.inf, -np.inf
134
+ for axes in multiple_axes:
135
+ # axes
136
+ if isinstance(axes, (np.ndarray, scitex.plt._subplots._AxesWrapper.AxesWrapper)):
137
+ for ax in axes.flat:
138
+ _xmin, _xmax = ax.get_xlim() # Fixed: was get_ylim()
139
+ xmin = min(xmin, _xmin)
140
+ xmax = max(xmax, _xmax)
141
+ # axis
142
+ else:
143
+ ax = axes
144
+ _xmin, _xmax = ax.get_xlim() # Fixed: was get_ylim()
145
+ xmin = min(xmin, _xmin)
146
+ xmax = max(xmax, _xmax)
147
+
148
+ return (xmin, xmax)
149
+
150
+
151
+ # def get_global_xlim(*multiple_axes):
152
+ # xmin, xmax = np.inf, -np.inf
153
+ # for axes in multiple_axes:
154
+ # for ax in axes.flat:
155
+ # _xmin, _xmax = ax.get_xlim()
156
+ # xmin = min(xmin, _xmin)
157
+ # xmax = max(xmax, _xmax)
158
+ # return (xmin, xmax)
159
+
160
+
161
+ def get_global_ylim(*multiple_axes):
162
+ """Get the global y-axis limits across multiple axes.
163
+
164
+ Scans all provided axes to find the minimum and maximum y-values
165
+ across all of them. Handles both single axes and arrays of axes.
166
+
167
+ Parameters
168
+ ----------
169
+ *multiple_axes : matplotlib.axes.Axes or array of Axes
170
+ Variable number of axes objects to scan.
171
+
172
+ Returns
173
+ -------
174
+ tuple
175
+ (ymin, ymax) representing the global y-axis limits.
176
+
177
+ Examples
178
+ --------
179
+ >>> fig, (ax1, ax2) = plt.subplots(1, 2)
180
+ >>> ax1.plot([1, 2], [1, 3]) # y-range: [1, 3]
181
+ >>> ax2.plot([1, 2], [2, 5]) # y-range: [2, 5]
182
+ >>> ylim = get_global_ylim(ax1, ax2)
183
+ >>> print(ylim) # (1, 5)
184
+ """
185
+ ymin, ymax = np.inf, -np.inf
186
+ for axes in multiple_axes:
187
+ # axes
188
+ if isinstance(axes, (np.ndarray, scitex.plt._subplots._AxesWrapper.AxesWrapper)):
189
+ for ax in axes.flat:
190
+ _ymin, _ymax = ax.get_ylim()
191
+ ymin = min(ymin, _ymin)
192
+ ymax = max(ymax, _ymax)
193
+ # axis
194
+ else:
195
+ ax = axes
196
+ _ymin, _ymax = ax.get_ylim()
197
+ ymin = min(ymin, _ymin)
198
+ ymax = max(ymax, _ymax)
199
+
200
+ return (ymin, ymax)
201
+
202
+
203
+ def set_xlims(*multiple_axes, xlim=None):
204
+ if xlim is None:
205
+ raise ValueError("Please set xlim. get_global_xlim() might be useful.")
206
+
207
+ for axes in multiple_axes:
208
+ # axes
209
+ if isinstance(axes, (np.ndarray, scitex.plt._subplots._AxesWrapper.AxesWrapper)):
210
+ for ax in axes.flat:
211
+ ax.set_xlim(xlim)
212
+ # axis
213
+ else:
214
+ ax = axes
215
+ ax.set_xlim(xlim)
216
+
217
+ # Return
218
+ if len(multiple_axes) == 1:
219
+ return multiple_axes[0], xlim
220
+ else:
221
+ return multiple_axes, xlim
222
+
223
+
224
+ def set_ylims(*multiple_axes, ylim=None):
225
+ if ylim is None:
226
+ raise ValueError("Please set ylim. get_global_xlim() might be useful.")
227
+
228
+ for axes in multiple_axes:
229
+ # axes
230
+ if isinstance(axes, (np.ndarray, scitex.plt._subplots._AxesWrapper.AxesWrapper)):
231
+ for ax in axes.flat:
232
+ ax.set_ylim(ylim)
233
+
234
+ # axis
235
+ else:
236
+ ax = axes
237
+ ax.set_ylim(ylim)
238
+
239
+ # Return
240
+ if len(multiple_axes) == 1:
241
+ return multiple_axes[0], ylim
242
+ else:
243
+ return multiple_axes, ylim
244
+
245
+
246
+ def main():
247
+ pass
248
+
249
+
250
+ if __name__ == "__main__":
251
+ # # Argument Parser
252
+ # import argparse
253
+ import sys
254
+
255
+ # parser = argparse.ArgumentParser(description='')
256
+ # parser.add_argument('--var', '-v', type=int, default=1, help='')
257
+ # parser.add_argument('--flag', '-f', action='store_true', default=False, help='')
258
+ # args = parser.parse_args()
259
+ # Main
260
+ CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.gen.start(sys, plt, verbose=False)
261
+ main()
262
+ scitex.gen.close(CONFIG, verbose=False, notify=False)
263
+
264
+ # EOF
@@ -0,0 +1,139 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Timestamp: "2025-05-02 09:00:54 (ywatanabe)"
4
+ # File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/ax/_style/_shift.py
5
+ # ----------------------------------------
6
+ import os
7
+
8
+ __FILE__ = "./src/scitex/plt/ax/_style/_shift.py"
9
+ __DIR__ = os.path.dirname(__FILE__)
10
+ # ----------------------------------------
11
+
12
+
13
+ def shift(ax, dx=0, dy=0):
14
+ """
15
+ Adjusts the position of an Axes object within a Figure by specified offsets in centimeters.
16
+
17
+ This function modifies the position of a given matplotlib.axes.Axes object by shifting it horizontally and vertically within its parent figure. The shift amounts are specified in centimeters, and the function converts these values into the figure's coordinate system to perform the adjustment.
18
+
19
+ Parameters:
20
+ - ax (matplotlib.axes.Axes): The Axes object to modify. This must be an instance of a Matplotlib Axes.
21
+ - dx (float): The horizontal offset in centimeters. Positive values shift the Axes to the right, while negative values shift it to the left.
22
+ - dy (float): The vertical offset in centimeters. Positive values shift the Axes up, while negative values shift it down.
23
+
24
+ Returns:
25
+ - matplotlib.axes.Axes: The modified Axes object with the adjusted position.
26
+ """
27
+
28
+ bbox = ax.get_position()
29
+
30
+ # Convert centimeters to inches for consistency with matplotlib dimensions
31
+ dx_in, dy_in = dx / 2.54, dy / 2.54
32
+
33
+ # Calculate delta ratios relative to the figure size
34
+ fig = ax.get_figure()
35
+ fig_dx_in, fig_dy_in = fig.get_size_inches()
36
+ dx_ratio, dy_ratio = dx_in / fig_dx_in, dy_in / fig_dy_in
37
+
38
+ # Determine updated bbox position and optionally adjust dimensions
39
+ left = bbox.x0 + dx_ratio
40
+ bottom = bbox.y0 + dy_ratio
41
+ width = bbox.width
42
+ height = bbox.height
43
+
44
+ # Main
45
+ ax.set_position([left, bottom, width, height])
46
+
47
+ return ax
48
+
49
+
50
+ # def adjust_axes_position_and_dimension(
51
+ # ax, dx, dy, adjust_width_for_dx=False, adjust_height_for_dy=False
52
+ # ):
53
+
54
+ # def set_pos(ax, x_cm, y_cm, extend_x=False, extend_y=False):
55
+ # """
56
+ # Adjusts the position of an Axes object within a Figure by a specified offset in centimeters.
57
+
58
+ # Parameters:
59
+ # - ax (matplotlib.axes.Axes): The Axes object to modify.
60
+ # - x_cm (float): The horizontal offset in centimeters to adjust the Axes position.
61
+ # - y_cm (float): The vertical offset in centimeters to adjust the Axes position.
62
+ # - extend_x (bool): If True, reduces the width of the Axes by the horizontal offset.
63
+ # - extend_y (bool): If True, reduces the height of the Axes by the vertical offset.
64
+
65
+ # Returns:
66
+ # - ax (matplotlib.axes.Axes): The modified Axes object with the adjusted position.
67
+ # """
68
+
69
+ # bbox = ax.get_position()
70
+
71
+ # # Inches
72
+ # x_in, y_in = x_cm / 2.54, y_cm / 2.54
73
+
74
+ # # Calculates delta ratios
75
+ # fig = ax.get_figure()
76
+ # fig_x_in, fig_y_in = fig.get_size_inches()
77
+ # x_ratio, y_ratio = x_in / fig_x_in, y_in / fig_y_in
78
+
79
+ # # Determines updated bbox position
80
+ # left = bbox.x0 + x_ratio
81
+ # bottom = bbox.y0 + y_ratio
82
+ # width = bbox.width
83
+ # height = bbox.height
84
+
85
+ # if extend_x:
86
+ # width -= x_ratio
87
+
88
+ # if extend_y:
89
+ # height -= y_ratio
90
+
91
+ # ax.set_position([left, bottom, width, height])
92
+
93
+ # return ax
94
+
95
+
96
+ # def set_pos(
97
+ # fig,
98
+ # ax,
99
+ # x_cm,
100
+ # y_cm,
101
+ # dragh=False,
102
+ # dragv=False,
103
+ # ):
104
+
105
+ # bbox = ax.get_position()
106
+
107
+ # ## Calculates delta ratios
108
+ # fig_x_in, fig_y_in = fig.get_size_inches()
109
+
110
+ # x_in = float(x_cm) / 2.54
111
+ # y_in = float(y_cm) / 2.54
112
+
113
+ # x_ratio = x_in / fig_x_in
114
+ # y_ratio = y_in / fig_x_in
115
+
116
+ # ## Determines updated bbox position
117
+ # left = bbox.x0 + x_ratio
118
+ # bottom = bbox.y0 + y_ratio
119
+ # width = bbox.x1 - bbox.x0
120
+ # height = bbox.y1 - bbox.y0
121
+
122
+ # if dragh:
123
+ # width -= x_ratio
124
+
125
+ # if dragv:
126
+ # height -= y_ratio
127
+
128
+ # ax.set_pos(
129
+ # [
130
+ # left,
131
+ # bottom,
132
+ # width,
133
+ # height,
134
+ # ]
135
+ # )
136
+
137
+ # return ax
138
+
139
+ # EOF