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,592 @@
1
+ #!/usr/bin/env python3
2
+ import matplotlib
3
+ import scitex
4
+ import numpy as np
5
+ import pandas as pd
6
+ import seaborn as sns
7
+ from matplotlib import ticker
8
+ from mpl_toolkits.axes_grid1 import make_axes_locatable
9
+ from sklearn.metrics import balanced_accuracy_score
10
+ from sklearn.metrics import confusion_matrix as sklearn_confusion_matrix
11
+
12
+
13
+ def conf_mat(
14
+ plt,
15
+ cm=None,
16
+ y_true=None,
17
+ y_pred=None,
18
+ y_pred_proba=None,
19
+ labels=None,
20
+ sorted_labels=None,
21
+ pred_labels=None,
22
+ sorted_pred_labels=None,
23
+ true_labels=None,
24
+ sorted_true_labels=None,
25
+ label_rotation_xy=(15, 15),
26
+ title="Confusion Matrix",
27
+ colorbar=True,
28
+ x_extend_ratio=1.0,
29
+ y_extend_ratio=1.0,
30
+ spath=None,
31
+ ):
32
+ """
33
+ Plot confusion matrix as a heatmap with inverted y-axis.
34
+
35
+ Parameters
36
+ ----------
37
+ plt : matplotlib.pyplot
38
+ Pyplot object for plotting
39
+ cm : array-like, optional
40
+ Pre-computed confusion matrix
41
+ y_true : array-like, optional
42
+ True labels
43
+ y_pred : array-like, optional
44
+ Predicted labels
45
+ y_pred_proba : array-like, optional
46
+ Predicted probabilities
47
+ labels : list, optional
48
+ List of labels
49
+ sorted_labels : list, optional
50
+ Sorted list of labels
51
+ pred_labels : list, optional
52
+ Predicted label names
53
+ sorted_pred_labels : list, optional
54
+ Sorted predicted label names
55
+ true_labels : list, optional
56
+ True label names
57
+ sorted_true_labels : list, optional
58
+ Sorted true label names
59
+ label_rotation_xy : tuple, optional
60
+ Rotation angles for x and y labels
61
+ title : str, optional
62
+ Title of the plot
63
+ colorbar : bool, optional
64
+ Whether to include a colorbar
65
+ x_extend_ratio : float, optional
66
+ Ratio to extend x-axis
67
+ y_extend_ratio : float, optional
68
+ Ratio to extend y-axis
69
+ spath : str, optional
70
+ Path to save the figure
71
+
72
+ Returns
73
+ -------
74
+ fig : matplotlib.figure.Figure
75
+ The figure object containing the plot
76
+ cm : pandas.DataFrame
77
+ The confusion matrix as a DataFrame
78
+
79
+ Example
80
+ -------
81
+ y_true = [0, 1, 2, 0, 1, 2]
82
+ y_pred = [0, 2, 1, 0, 0, 1]
83
+ labels = ['A', 'B', 'C']
84
+ fig, cm = conf_mat(plt, y_true=y_true, y_pred=y_pred, labels=labels)
85
+ plt.show()
86
+ """
87
+
88
+ if (y_pred_proba is not None) and (y_pred is None):
89
+ y_pred = y_pred_proba.argmax(axis=-1)
90
+
91
+ assert (cm is not None) or ((y_true is not None) and (y_pred is not None))
92
+
93
+ if cm is None:
94
+ with scitex.gen.suppress_output():
95
+ cm = sklearn_confusion_matrix(y_true, y_pred, labels=labels)
96
+
97
+ bacc = calc_bACC_from_cm(cm)
98
+
99
+ title = f"{title} (bACC = {bacc:.3f})"
100
+
101
+ if labels is not None:
102
+ full_cm = np.zeros((len(labels), len(labels)))
103
+ unique_true = np.unique(y_true)
104
+ unique_pred = np.unique(y_pred)
105
+ for idx_true, true_label in enumerate(labels):
106
+ for idx_pred, pred_label in enumerate(labels):
107
+ if true_label in unique_true and pred_label in unique_pred:
108
+ full_cm[idx_true, idx_pred] = cm[
109
+ np.where(unique_true == true_label)[0][0],
110
+ np.where(unique_pred == pred_label)[0][0],
111
+ ]
112
+ cm = full_cm
113
+
114
+ cm = pd.DataFrame(data=cm).copy()
115
+
116
+ labels_to_latex = lambda labels: (
117
+ [scitex.gen.to_latex_style(label) for label in labels]
118
+ if labels is not None
119
+ else None
120
+ )
121
+ pred_labels = labels_to_latex(pred_labels)
122
+ true_labels = labels_to_latex(true_labels)
123
+ labels = labels_to_latex(labels)
124
+ sorted_labels = labels_to_latex(sorted_labels)
125
+
126
+ if pred_labels is not None:
127
+ cm.columns = pred_labels
128
+ elif labels is not None:
129
+ cm.columns = labels
130
+
131
+ if true_labels is not None:
132
+ cm.index = true_labels
133
+ elif labels is not None:
134
+ cm.index = labels
135
+
136
+ if sorted_labels is not None:
137
+ assert set(sorted_labels) == set(labels)
138
+ cm = cm.reindex(index=sorted_labels, columns=sorted_labels)
139
+
140
+ fig, ax = plt.subplots()
141
+ res = sns.heatmap(
142
+ cm,
143
+ annot=True,
144
+ annot_kws={"size": plt.rcParams["font.size"]},
145
+ fmt=".0f",
146
+ cmap="Blues",
147
+ cbar=False,
148
+ vmin=0,
149
+ )
150
+
151
+ for text in ax.texts:
152
+ text.set_text("{:,d}".format(int(text.get_text())))
153
+
154
+ res.invert_yaxis()
155
+
156
+ for _, spine in res.spines.items():
157
+ spine.set_visible(False)
158
+
159
+ ax.set_xlabel("Predicted label")
160
+ ax.set_ylabel("True label")
161
+ ax.set_title(title)
162
+
163
+ ax = scitex.plt.ax.extend(ax, x_extend_ratio, y_extend_ratio)
164
+ if cm.shape[0] == cm.shape[1]:
165
+ ax.set_box_aspect(1)
166
+ ax.set_xticklabels(
167
+ ax.get_xticklabels(),
168
+ rotation=label_rotation_xy[0],
169
+ fontdict={"verticalalignment": "top"},
170
+ )
171
+ ax.set_yticklabels(
172
+ ax.get_yticklabels(),
173
+ rotation=label_rotation_xy[1],
174
+ fontdict={"horizontalalignment": "right"},
175
+ )
176
+
177
+ bbox = ax.get_position()
178
+ left_orig = bbox.x0
179
+ width_orig = bbox.x1 - bbox.x0
180
+ width_tgt = width_orig * x_extend_ratio
181
+ dx = width_orig - width_tgt
182
+
183
+ if colorbar:
184
+ divider = make_axes_locatable(ax)
185
+ cax = divider.append_axes("right", size="5%", pad=0.1)
186
+ cax = scitex.plt.ax.shift(cax, dx=-dx * 2.54, dy=0)
187
+ fig.add_axes(cax)
188
+
189
+ vmax = np.array(cm).max().astype(int)
190
+ norm = matplotlib.colors.Normalize(vmin=0, vmax=vmax)
191
+ cbar = fig.colorbar(
192
+ plt.cm.ScalarMappable(norm=norm, cmap="Blues"),
193
+ cax=cax,
194
+ )
195
+ cbar.locator = ticker.MaxNLocator(nbins=4)
196
+ cbar.update_ticks()
197
+ cbar.outline.set_edgecolor("white")
198
+
199
+ if spath is not None:
200
+ scitex.io.save(fig, spath)
201
+
202
+ return fig, cm
203
+
204
+
205
+ def calc_bACC_from_cm(cm):
206
+ """
207
+ Calculate balanced accuracy from confusion matrix.
208
+
209
+ Parameters
210
+ ----------
211
+ cm : array-like
212
+ Confusion matrix
213
+
214
+ Returns
215
+ -------
216
+ float
217
+ Balanced accuracy
218
+
219
+ Example
220
+ -------
221
+ cm = np.array([[5, 1], [2, 3]])
222
+ bacc = calc_bACC_from_cm(cm)
223
+ print(bacc)
224
+ """
225
+ with scitex.gen.suppress_output():
226
+ try:
227
+ per_class = np.diag(cm) / np.nansum(cm, axis=1)
228
+ bacc = np.nanmean(per_class)
229
+ except:
230
+ bacc = np.nan
231
+ return round(bacc, 3)
232
+
233
+
234
+ def calc_balanced_accuracy_from_cm(cm):
235
+ """
236
+ Calculate balanced accuracy from confusion matrix (snake_case alias).
237
+
238
+ This is an alias for calc_bACC_from_cm with snake_case naming.
239
+
240
+ Parameters
241
+ ----------
242
+ cm : array-like
243
+ Confusion matrix
244
+
245
+ Returns
246
+ -------
247
+ float
248
+ Balanced accuracy
249
+ """
250
+ return calc_bACC_from_cm(cm)
251
+
252
+
253
+ if __name__ == "__main__":
254
+ import sys
255
+ import matplotlib.pyplot as plt
256
+ import scitex
257
+ import numpy as np
258
+ import sklearn
259
+ from sklearn import datasets, svm
260
+ from sklearn.model_selection import train_test_split
261
+
262
+ sys.path.append(".")
263
+ import scitex
264
+
265
+ iris = datasets.load_iris()
266
+ X = iris.data
267
+ y = iris.target
268
+ class_names = iris.target_names
269
+
270
+ X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
271
+
272
+ classifier = svm.SVC(kernel="linear", C=0.01, random_state=42).fit(X_train, y_train)
273
+
274
+ y_pred = classifier.predict(X_test)
275
+ cm = sklearn.metrics.confusion_matrix(y_test, y_pred)
276
+ cm **= 3
277
+
278
+ fig, cm = conf_mat(
279
+ plt,
280
+ cm,
281
+ pred_labels=["A", "B", "C"],
282
+ true_labels=["a", "b", "c"],
283
+ label_rotation_xy=(60, 60),
284
+ x_extend_ratio=1.0,
285
+ colorbar=True,
286
+ )
287
+
288
+ fig.axes[-1] = scitex.plt.ax.sci_note(
289
+ fig.axes[-1],
290
+ fformat="%3.1f",
291
+ y=True,
292
+ )
293
+
294
+ plt.show()
295
+
296
+ # EOF
297
+
298
+ # #!/usr/bin/env python3
299
+ # import matplotlib
300
+ # import scitex
301
+ # import numpy as np
302
+ # import pandas as pd
303
+ # import seaborn as sns
304
+ # from matplotlib import ticker
305
+ # from mpl_toolkits.axes_grid1 import make_axes_locatable
306
+ # from sklearn.metrics import balanced_accuracy_score
307
+ # from sklearn.metrics import confusion_matrix as sklearn_confusion_matrix
308
+
309
+
310
+ # def conf_mat(
311
+ # plt,
312
+ # cm=None,
313
+ # y_true=None,
314
+ # y_pred=None,
315
+ # y_pred_proba=None,
316
+ # labels=None,
317
+ # sorted_labels=None,
318
+ # pred_labels=None,
319
+ # sorted_pred_labels=None,
320
+ # true_labels=None,
321
+ # sorted_true_labels=None,
322
+ # label_rotation_xy=(15, 15),
323
+ # title="Confuxion Matrix",
324
+ # colorbar=True,
325
+ # x_extend_ratio=1.0,
326
+ # y_extend_ratio=1.0,
327
+ # spath=None,
328
+ # ):
329
+ # """
330
+ # Inverse the y-axis and plot the confusion matrix as a heatmap.
331
+ # The predicted labels (in x-axis) is symboled with hat (^).
332
+ # The plt object is passed to adjust the figure size
333
+
334
+ # cm = sklearn.metrics.confusion_matrix(y_test, y_pred)
335
+
336
+
337
+ # cm = np.random.randint(low=0, high=10, size=[3,4])
338
+ # x: predicted labels
339
+ # y: true_labels
340
+
341
+
342
+ # kwargs:
343
+
344
+ # "extend_ratio":
345
+ # Determines how much the axes objects (not the fig object) are extended
346
+ # in the vertical direction.
347
+
348
+ # """
349
+
350
+ # if (y_pred_proba is not None) and (y_pred is None):
351
+ # y_pred = y_pred_proba.argmax(axis=-1)
352
+
353
+ # assert (cm is not None) or ((y_true is not None) and (y_pred is not None))
354
+
355
+ # if cm is None:
356
+ # with scitex.gen.suppress_output():
357
+ # cm = sklearn_confusion_matrix(y_true, y_pred, labels=labels)
358
+ # # cm = sklearn_confusion_matrix(y_true, y_pred)
359
+
360
+ # bacc = calc_bACC_from_cm(cm)
361
+
362
+ # title = f"{title} (bACC = {bacc})"
363
+
364
+ # # Ensure all labels are present in the confusion matrix
365
+ # if labels is not None:
366
+ # full_cm = np.zeros((len(labels), len(labels)))
367
+ # unique_true = np.unique(y_true)
368
+ # unique_pred = np.unique(y_pred)
369
+ # for i, true_label in enumerate(labels):
370
+ # for j, pred_label in enumerate(labels):
371
+ # if true_label in unique_true and pred_label in unique_pred:
372
+ # full_cm[i, j] = cm[
373
+ # np.where(unique_true == true_label)[0][0],
374
+ # np.where(unique_pred == pred_label)[0][0],
375
+ # ]
376
+ # cm = full_cm
377
+
378
+ # # Dataframe
379
+ # cm = pd.DataFrame(
380
+ # data=cm,
381
+ # ).copy()
382
+
383
+ # # To LaTeX styles
384
+ # if pred_labels is not None:
385
+ # pred_labels = [scitex.gen.to_latex_style(l) for l in pred_labels]
386
+ # if true_labels is not None:
387
+ # true_labels = [scitex.gen.to_latex_style(l) for l in true_labels]
388
+ # if labels is not None:
389
+ # labels = [scitex.gen.to_latex_style(l) for l in labels]
390
+ # if sorted_labels is not None:
391
+ # sorted_labels = [scitex.gen.to_latex_style(l) for l in sorted_labels]
392
+
393
+ # # Prediction Labels: columns
394
+ # if pred_labels is not None:
395
+ # cm.columns = pred_labels
396
+ # elif (pred_labels is None) and (labels is not None):
397
+ # cm.columns = labels
398
+
399
+ # # Ground Truth Labels: index
400
+ # if true_labels is not None:
401
+ # cm.index = true_labels
402
+ # elif (true_labels is None) and (labels is not None):
403
+ # cm.index = labels
404
+
405
+ # # Sort based on sorted_labels here
406
+ # if sorted_labels is not None:
407
+ # assert set(sorted_labels) == set(labels)
408
+ # cm = cm.reindex(index=sorted_labels, columns=sorted_labels)
409
+
410
+ # # Main
411
+ # fig, ax = plt.subplots()
412
+ # res = sns.heatmap(
413
+ # cm,
414
+ # annot=True,
415
+ # annot_kws={"size": plt.rcParams["font.size"]},
416
+ # fmt=".0f",
417
+ # cmap="Blues",
418
+ # cbar=False,
419
+ # vmin=0,
420
+ # ) # Here, don't plot color bar.
421
+
422
+ # # Adds comma separator for the annotated int texts
423
+ # for t in ax.texts:
424
+ # t.set_text("{:,d}".format(int(t.get_text())))
425
+
426
+ # # Inverts the y-axis
427
+ # res.invert_yaxis()
428
+
429
+ # # Makes the frame visible
430
+ # for _, spine in res.spines.items():
431
+ # spine.set_visible(False)
432
+
433
+ # # Labels
434
+ # ax.set_xlabel("Predicted label")
435
+ # ax.set_ylabel("True label")
436
+ # ax.set_title(title)
437
+
438
+ # # Appearances
439
+ # ax = scitex.plt.ax.extend(ax, x_extend_ratio, y_extend_ratio)
440
+ # if cm.shape[0] == cm.shape[1]:
441
+ # ax.set_box_aspect(1)
442
+ # ax.set_xticklabels(
443
+ # ax.get_xticklabels(),
444
+ # rotation=label_rotation_xy[0],
445
+ # fontdict={"verticalalignment": "top"},
446
+ # )
447
+ # ax.set_yticklabels(
448
+ # ax.get_yticklabels(),
449
+ # rotation=label_rotation_xy[1],
450
+ # fontdict={"horizontalalignment": "right"},
451
+ # )
452
+ # # The size
453
+ # bbox = ax.get_position()
454
+ # left_orig = bbox.x0
455
+ # width_orig = bbox.x1 - bbox.x0
456
+ # g_x_orig = left_orig + width_orig / 2.0
457
+ # width_tgt = width_orig * x_extend_ratio # x_extend_ratio
458
+ # dx = width_orig - width_tgt
459
+
460
+ # # Adjusts the sizes of the confusion matrix and colorbar
461
+ # if colorbar:
462
+ # divider = make_axes_locatable(ax) # Gets region from the ax
463
+ # cax = divider.append_axes("right", size="5%", pad=0.1)
464
+ # # cax = divider.new_horizontal(size="5%", pad=1, pack_start=True)
465
+ # cax = scitex.plt.ax.shift(cax, dx=-dx * 2.54, dy=0)
466
+ # fig.add_axes(cax)
467
+
468
+ # """
469
+ # axpos = ax.get_position()
470
+ # caxpos = cax.get_position()
471
+
472
+ # AddAxesBBoxRect(fig, ax, ec="r")
473
+ # AddAxesBBoxRect(fig, cax, ec="b")
474
+
475
+ # fig.text(
476
+ # axpos.x0 + 0.01, axpos.y0 + 0.01, "after colorbar", weight="bold", color="r"
477
+ # )
478
+
479
+ # fig.text(
480
+ # caxpos.x1 + 0.01,
481
+ # caxpos.y1 - 0.01,
482
+ # "cax position",
483
+ # va="top",
484
+ # weight="bold",
485
+ # color="b",
486
+ # rotation="vertical",
487
+ # )
488
+ # """
489
+
490
+ # # Plots colorbar and adjusts the size
491
+ # vmax = np.array(cm).max().astype(int)
492
+ # norm = matplotlib.colors.Normalize(vmin=0, vmax=vmax)
493
+ # cbar = fig.colorbar(
494
+ # plt.cm.ScalarMappable(norm=norm, cmap="Blues"),
495
+ # cax=cax,
496
+ # # shrink=0.68,
497
+ # )
498
+ # cbar.locator = ticker.MaxNLocator(nbins=4) # tick_locator
499
+ # cbar.update_ticks()
500
+ # # cbar.outline.set_edgecolor("#f9f2d7")
501
+ # cbar.outline.set_edgecolor("white")
502
+
503
+ # if spath is not None:
504
+ # scitex.io.save(fig, spath)
505
+
506
+ # return fig, cm
507
+
508
+
509
+ # def calc_bACC_from_cm(cm):
510
+ # with scitex.gen.suppress_output():
511
+ # try:
512
+ # per_class = np.diag(cm) / np.nansum(cm, axis=1)
513
+ # bacc = round(np.nanmean(per_class), 3)
514
+ # except:
515
+ # bacc = np.nan
516
+ # return bacc
517
+
518
+
519
+ # # def AddAxesBBoxRect(fig, ax, ec="k"):
520
+ # # from matplotlib.patches import Rectangle
521
+
522
+ # # axpos = ax.get_position()
523
+ # # rect = fig.patches.append(
524
+ # # Rectangle(
525
+ # # (axpos.x0, axpos.y0),
526
+ # # axpos.width,
527
+ # # axpos.height,
528
+ # # ls="solid",
529
+ # # lw=2,
530
+ # # ec=ec,
531
+ # # fill=False,
532
+ # # transform=fig.transFigure,
533
+ # # )
534
+ # # )
535
+ # # return rect
536
+
537
+
538
+ # if __name__ == "__main__":
539
+
540
+ # import sys
541
+
542
+ # import matplotlib.pyplot as plt
543
+ # import scitex
544
+ # import numpy as np
545
+ # import sklearn
546
+ # from sklearn import datasets, svm
547
+ # # from sklearn.metrics import plot_confusion_matrix
548
+ # from sklearn.model_selection import train_test_split
549
+
550
+ # sys.path.append(".")
551
+ # import scitex
552
+
553
+ # # https://scikit-learn.org/stable/auto_examples/model_selection/plot_confusion_matrix.html#sphx-glr-auto-examples-model-selection-plot-confusion-matrix-py
554
+ # # Imports some data to play with
555
+ # iris = datasets.load_iris()
556
+ # X = iris.data
557
+ # y = iris.target
558
+ # class_names = iris.target_names
559
+
560
+ # # Splits the data into a training set and a test set
561
+ # X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
562
+
563
+ # # Runs classifier, using a model that is too regularized (C too low) to see
564
+ # # the impact on the results
565
+ # classifier = svm.SVC(kernel="linear", C=0.01).fit(X_train, y_train)
566
+
567
+ # ## Checks the confusion_matrix function
568
+ # y_pred = classifier.predict(X_test)
569
+ # cm = sklearn.metrics.confusion_matrix(y_test, y_pred)
570
+ # cm **= 3
571
+
572
+ # fig, cm = conf_mat(
573
+ # plt,
574
+ # # y_true=y_test,
575
+ # # y_pred=y_pred,
576
+ # cm,
577
+ # pred_labels=["A", "B", "C"],
578
+ # true_labels=["a", "b", "c"],
579
+ # label_rotation_xy=(60, 60),
580
+ # x_extend_ratio=1.0,
581
+ # colorbar=True,
582
+ # )
583
+
584
+ # fig.axes[-1] = scitex.plt.ax.sci_note(
585
+ # fig.axes[-1],
586
+ # fformat="%3.1f",
587
+ # y=True,
588
+ # )
589
+
590
+ # plt.show()
591
+
592
+ # ## EOF