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,47 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-07 19:07:29 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/ai/loss/MultiTaskLoss.py
5
+
6
+ import numpy as np
7
+ import torch
8
+ import torch.nn as nn
9
+
10
+ from ...reproduce import fix_seeds
11
+
12
+
13
+ class MultiTaskLoss(nn.Module):
14
+ """
15
+ # https://openaccess.thecvf.com/content_cvpr_2018/papers/Kendall_Multi-Task_Learning_Using_CVPR_2018_paper.pdf
16
+
17
+ Example:
18
+ are_regression = [False, False]
19
+ mtl = MultiTaskLoss(are_regression)
20
+ losses = [torch.rand(1, requires_grad=True) for _ in range(len(are_regression))]
21
+ loss = mtl(losses)
22
+ print(loss)
23
+ # [tensor([0.4215], grad_fn=<AddBackward0>), tensor([0.6190], grad_fn=<AddBackward0>)]
24
+ """
25
+
26
+ def __init__(self, are_regression=[False, False], reduction="none"):
27
+ super().__init__()
28
+ fix_seeds(np=np, torch=torch, show=False)
29
+ n_tasks = len(are_regression)
30
+
31
+ self.register_buffer("are_regression", torch.tensor(are_regression))
32
+
33
+ # for the numercal stability, log(variables) are learned.
34
+ self.log_vars = torch.nn.Parameter(torch.zeros(n_tasks))
35
+ self.reduction = reduction
36
+
37
+ def forward(self, losses):
38
+ vars = torch.exp(self.log_vars).type_as(losses[0])
39
+ stds = vars ** (1 / 2)
40
+ coeffs = 1 / ((self.are_regression + 1) * vars)
41
+ scaled_losses = [
42
+ coeffs[i] * losses[i] + torch.log(stds[i]) for i in range(len(losses))
43
+ ]
44
+ return scaled_losses
45
+
46
+
47
+ # EOF
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env python3
2
+ """Scitex metrics module."""
3
+
4
+ from ._bACC import bACC, balanced_accuracy
5
+
6
+ __all__ = [
7
+ "bACC",
8
+ "balanced_accuracy",
9
+ ]
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-02-26 16:32:42 (ywatanabe)"
4
+
5
+ import warnings
6
+
7
+ import numpy as np
8
+ import torch
9
+ from sklearn.metrics import balanced_accuracy_score
10
+
11
+
12
+ def bACC(true_class, pred_class):
13
+ """
14
+ Calculates the balanced accuracy score between predicted and true class labels.
15
+
16
+ Parameters:
17
+ - true_class (array-like or torch.Tensor): True class labels.
18
+ - pred_class (array-like or torch.Tensor): Predicted class labels.
19
+
20
+ Returns:
21
+ - bACC (float): The balanced accuracy score rounded to three decimal places.
22
+ """
23
+ if isinstance(true_class, torch.Tensor): # [REVISED]
24
+ true_class = true_class.detach().cpu().numpy() # [REVISED]
25
+ if isinstance(pred_class, torch.Tensor): # [REVISED]
26
+ pred_class = pred_class.detach().cpu().numpy() # [REVISED]
27
+
28
+ with warnings.catch_warnings():
29
+ warnings.simplefilter("ignore")
30
+ bACC_score = balanced_accuracy_score(
31
+ true_class.reshape(-1), # [REVISED]
32
+ pred_class.reshape(-1), # [REVISED]
33
+ )
34
+ return round(bACC_score, 3) # [REVISED]
35
+
36
+
37
+ # Snake_case alias for consistency
38
+ def balanced_accuracy(true_class, pred_class):
39
+ """
40
+ Calculates the balanced accuracy score between predicted and true class labels.
41
+
42
+ This is an alias for bACC() with snake_case naming.
43
+
44
+ Parameters:
45
+ - true_class (array-like or torch.Tensor): True class labels.
46
+ - pred_class (array-like or torch.Tensor): Predicted class labels.
47
+
48
+ Returns:
49
+ - float: The balanced accuracy score rounded to three decimal places.
50
+ """
51
+ return bACC(true_class, pred_class)
@@ -0,0 +1,496 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-20 00:22:25 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/ai/silhoute_score_block.py
5
+
6
+ THIS_FILE = "/data/gpfs/projects/punim2354/ywatanabe/scitex_repo/src/scitex/ai/silhoute_score_block.py"
7
+
8
+ #!/usr/bin/env python3
9
+ # -*- coding: utf-8 -*-
10
+ # Time-stamp: "2024-11-03 03:03:13 (ywatanabe)"
11
+ # File: ./scitex_repo/src/scitex/ai/silhoute_score_block.py
12
+
13
+ # https://gist.github.com/AlexandreAbraham/5544803
14
+
15
+ """ Unsupervised evaluation metrics. """
16
+
17
+ # License: BSD Style.
18
+
19
+ from itertools import combinations as _combinations
20
+
21
+ import numpy as _np
22
+
23
+ # from sklearn.externals.joblib import Parallel, delayed
24
+ from joblib import Parallel as _Parallel
25
+ from joblib import delayed as _delayed
26
+ from sklearn.metrics.pairwise import distance_metrics as _distance_metrics
27
+ from sklearn.metrics.pairwise import pairwise_distances as _pairwise_distances
28
+ from sklearn.utils import check_random_state as _check_random_state
29
+
30
+
31
+ def silhouette_score_slow(
32
+ X, labels, metric="euclidean", sample_size=None, random_state=None, **kwds
33
+ ):
34
+ """Compute the mean Silhouette Coefficient of all samples.
35
+
36
+ This method is computationally expensive compared to the reference one.
37
+
38
+ The Silhouette Coefficient is calculated using the mean intra-cluster
39
+ distance (a) and the mean nearest-cluster distance (b) for each sample.
40
+ The Silhouette Coefficient for a sample is ``(b - a) / max(a, b)``.
41
+ To clarrify, b is the distance between a sample and the nearest cluster
42
+ that b is not a part of.
43
+
44
+ This function returns the mean Silhoeutte Coefficient over all samples.
45
+ To obtain the values for each sample, use silhouette_samples
46
+
47
+ The best value is 1 and the worst value is -1. Values near 0 indicate
48
+ overlapping clusters. Negative values genly indicate that a sample has
49
+ been assigned to the wrong cluster, as a different cluster is more similar.
50
+
51
+ Parameters
52
+ ----------
53
+ X : array [n_samples_a, n_features]
54
+ Feature array.
55
+
56
+ labels : array, shape = [n_samples]
57
+ label values for each sample
58
+
59
+ metric : string, or callable
60
+ The metric to use when calculating distance between instances in a
61
+ feature array. If metric is a string, it must be one of the options
62
+ allowed by metrics.pairwise._pairwise_distances. If X is the distance
63
+ array itself, use "precomputed" as the metric.
64
+
65
+ sample_size : int or None
66
+ The size of the sample to use when computing the Silhouette
67
+ Coefficient. If sample_size is None, no sampling is used.
68
+
69
+ random_state : integer or numpy.RandomState, optional
70
+ The generator used to initialize the centers. If an integer is
71
+ given, it fixes the seed. Defaults to the global numpy random
72
+ number generator.
73
+
74
+ `**kwds` : optional keyword parameters
75
+ Any further parameters are passed directly to the distance function.
76
+ If using a scipy.spatial.distance metric, the parameters are still
77
+ metric dependent. See the scipy docs for usage examples.
78
+
79
+ Returns
80
+ -------
81
+ silhouette : float
82
+ Mean Silhouette Coefficient for all samples.
83
+
84
+ References
85
+ ----------
86
+
87
+ Peter J. Rousseeuw (1987). "Silhouettes: a Graphical Aid to the
88
+ Interpretation and Validation of Cluster Analysis". Computational
89
+ and Applied Mathematics 20: 53-65. doi:10.1016/0377-0427(87)90125-7.
90
+
91
+ http://en.wikipedia.org/wiki/Silhouette_(clustering)
92
+
93
+ """
94
+ if sample_size is not None:
95
+ random_state = _check_random_state(random_state)
96
+ indices = random_state.permutation(X.shape[0])[:sample_size]
97
+ if metric == "precomputed":
98
+ raise ValueError("Distance matrix cannot be precomputed")
99
+ else:
100
+ X, labels = X[indices], labels[indices]
101
+ return _np.mean(silhouette_samples_slow(X, labels, metric=metric, **kwds))
102
+
103
+
104
+ def silhouette_samples_slow(X, labels, metric="euclidean", **kwds):
105
+ """Compute the Silhouette Coefficient for each sample.
106
+
107
+ The Silhoeutte Coefficient is a measure of how well samples are clustered
108
+ with samples that are similar to themselves. Clustering models with a high
109
+ Silhouette Coefficient are said to be dense, where samples in the same
110
+ cluster are similar to each other, and well separated, where samples in
111
+ different clusters are not very similar to each other.
112
+
113
+ The Silhouette Coefficient is calculated using the mean intra-cluster
114
+ distance (a) and the mean nearest-cluster distance (b) for each sample.
115
+ The Silhouette Coefficient for a sample is ``(b - a) / max(a, b)``.
116
+
117
+ This function returns the Silhoeutte Coefficient for each sample.
118
+
119
+ The best value is 1 and the worst value is -1. Values near 0 indicate
120
+ overlapping clusters.
121
+
122
+ Parameters
123
+ ----------
124
+ X : array [n_samples_a, n_features]
125
+ Feature array.
126
+
127
+ labels : array, shape = [n_samples]
128
+ label values for each sample
129
+
130
+ metric : string, or callable
131
+ The metric to use when calculating distance between instances in a
132
+ feature array. If metric is a string, it must be one of the options
133
+ allowed by metrics.pairwise._pairwise_distances. If X is the distance
134
+ array itself, use "precomputed" as the metric.
135
+
136
+ `**kwds` : optional keyword parameters
137
+ Any further parameters are passed directly to the distance function.
138
+ If using a scipy.spatial.distance metric, the parameters are still
139
+ metric dependent. See the scipy docs for usage examples.
140
+
141
+ Returns
142
+ -------
143
+ silhouette : array, shape = [n_samples]
144
+ Silhouette Coefficient for each samples.
145
+
146
+ References
147
+ ----------
148
+
149
+ Peter J. Rousseeuw (1987). "Silhouettes: a Graphical Aid to the
150
+ Interpretation and Validation of Cluster Analysis". Computational
151
+ and Applied Mathematics 20: 53-65. doi:10.1016/0377-0427(87)90125-7.
152
+
153
+ http://en.wikipedia.org/wiki/Silhouette_(clustering)
154
+
155
+ """
156
+ metric = _distance_metrics()[metric]
157
+ n = labels.shape[0]
158
+ A = _np.array(
159
+ [_intra_cluster_distance_slow(X, labels, metric, i) for i in range(n)]
160
+ )
161
+ B = _np.array(
162
+ [_nearest_cluster_distance_slow(X, labels, metric, i) for i in range(n)]
163
+ )
164
+ sil_samples = (B - A) / _np.maximum(A, B)
165
+ # nan values are for clusters of size 1, and should be 0
166
+ return _np.nan_to_num(sil_samples)
167
+
168
+
169
+ def _intra_cluster_distance_slow(X, labels, metric, i):
170
+ """Calculate the mean intra-cluster distance for sample i.
171
+
172
+ Parameters
173
+ ----------
174
+ X : array [n_samples_a, n_features]
175
+ Feature array.
176
+
177
+ labels : array, shape = [n_samples]
178
+ label values for each sample
179
+
180
+ metric: function
181
+ Pairwise metric function
182
+
183
+ i : int
184
+ Sample index being calculated. It is excluded from calculation and
185
+ used to determine the current label
186
+
187
+ Returns
188
+ -------
189
+ a : float
190
+ Mean intra-cluster distance for sample i
191
+ """
192
+ indices = _np.where(labels == labels[i])[0]
193
+ if len(indices) == 0:
194
+ return 0.0
195
+ a = _np.mean([metric(X[i], X[j]) for j in indices if not i == j])
196
+ return a
197
+
198
+
199
+ def _nearest_cluster_distance_slow(X, labels, metric, i):
200
+ """Calculate the mean nearest-cluster distance for sample i.
201
+
202
+ Parameters
203
+ ----------
204
+ X : array [n_samples_a, n_features]
205
+ Feature array.
206
+
207
+ labels : array, shape = [n_samples]
208
+ label values for each sample
209
+
210
+ metric: function
211
+ Pairwise metric function
212
+
213
+ i : int
214
+ Sample index being calculated. It is used to determine the current
215
+ label.
216
+
217
+ Returns
218
+ -------
219
+ b : float
220
+ Mean nearest-cluster distance for sample i
221
+ """
222
+ label = labels[i]
223
+ b = _np.min(
224
+ [
225
+ _np.mean([metric(X[i], X[j]) for j in _np.where(labels == cur_label)[0]])
226
+ for cur_label in set(labels)
227
+ if not cur_label == label
228
+ ]
229
+ )
230
+ return b
231
+
232
+
233
+ def silhouette_score_block(
234
+ X, labels, metric="euclidean", sample_size=None, random_state=None, n_jobs=1, **kwds
235
+ ):
236
+ """Compute the mean Silhouette Coefficient of all samples.
237
+
238
+ The Silhouette Coefficient is calculated using the mean intra-cluster
239
+ distance (a) and the mean nearest-cluster distance (b) for each sample.
240
+ The Silhouette Coefficient for a sample is ``(b - a) / max(a, b)``.
241
+ To clarrify, b is the distance between a sample and the nearest cluster
242
+ that b is not a part of.
243
+
244
+ This function returns the mean Silhoeutte Coefficient over all samples.
245
+ To obtain the values for each sample, use silhouette_samples
246
+
247
+ The best value is 1 and the worst value is -1. Values near 0 indicate
248
+ overlapping clusters. Negative values genly indicate that a sample has
249
+ been assigned to the wrong cluster, as a different cluster is more similar.
250
+
251
+ Parameters
252
+ ----------
253
+ X : array [n_samples_a, n_features]
254
+ Feature array.
255
+
256
+ labels : array, shape = [n_samples]
257
+ label values for each sample
258
+
259
+ metric : string, or callable
260
+ The metric to use when calculating distance between instances in a
261
+ feature array. If metric is a string, it must be one of the options
262
+ allowed by metrics.pairwise._pairwise_distances. If X is the distance
263
+ array itself, use "precomputed" as the metric.
264
+
265
+ sample_size : int or None
266
+ The size of the sample to use when computing the Silhouette
267
+ Coefficient. If sample_size is None, no sampling is used.
268
+
269
+ random_state : integer or numpy.RandomState, optional
270
+ The generator used to initialize the centers. If an integer is
271
+ given, it fixes the seed. Defaults to the global numpy random
272
+ number generator.
273
+
274
+ `**kwds` : optional keyword parameters
275
+ Any further parameters are passed directly to the distance function.
276
+ If using a scipy.spatial.distance metric, the parameters are still
277
+ metric dependent. See the scipy docs for usage examples.
278
+
279
+ Returns
280
+ -------
281
+ silhouette : float
282
+ Mean Silhouette Coefficient for all samples.
283
+
284
+ References
285
+ ----------
286
+
287
+ Peter J. Rousseeuw (1987). "Silhouettes: a Graphical Aid to the
288
+ Interpretation and Validation of Cluster Analysis". Computational
289
+ and Applied Mathematics 20: 53-65. doi:10.1016/0377-0427(87)90125-7.
290
+
291
+ http://en.wikipedia.org/wiki/Silhouette_(clustering)
292
+
293
+ """
294
+ if sample_size is not None:
295
+ random_state = _check_random_state(random_state)
296
+ indices = random_state.permutation(X.shape[0])[:sample_size]
297
+ if metric == "precomputed":
298
+ raise ValueError("Distance matrix cannot be precomputed")
299
+ else:
300
+ X, labels = X[indices], labels[indices]
301
+ return _np.mean(
302
+ silhouette_samples_block(X, labels, metric=metric, n_jobs=n_jobs, **kwds)
303
+ )
304
+
305
+
306
+ def silhouette_samples_block(X, labels, metric="euclidean", n_jobs=1, **kwds):
307
+ """Compute the Silhouette Coefficient for each sample.
308
+
309
+ The Silhoeutte Coefficient is a measure of how well samples are clustered
310
+ with samples that are similar to themselves. Clustering models with a high
311
+ Silhouette Coefficient are said to be dense, where samples in the same
312
+ cluster are similar to each other, and well separated, where samples in
313
+ different clusters are not very similar to each other.
314
+
315
+ The Silhouette Coefficient is calculated using the mean intra-cluster
316
+ distance (a) and the mean nearest-cluster distance (b) for each sample.
317
+ The Silhouette Coefficient for a sample is ``(b - a) / max(a, b)``.
318
+
319
+ This function returns the Silhoeutte Coefficient for each sample.
320
+
321
+ The best value is 1 and the worst value is -1. Values near 0 indicate
322
+ overlapping clusters.
323
+
324
+ Parameters
325
+ ----------
326
+ X : array [n_samples_a, n_features]
327
+ Feature array.
328
+
329
+ labels : array, shape = [n_samples]
330
+ label values for each sample
331
+
332
+ metric : string, or callable
333
+ The metric to use when calculating distance between instances in a
334
+ feature array. If metric is a string, it must be one of the options
335
+ allowed by metrics.pairwise._pairwise_distances. If X is the distance
336
+ array itself, use "precomputed" as the metric.
337
+
338
+ `**kwds` : optional keyword parameters
339
+ Any further parameters are passed directly to the distance function.
340
+ If using a scipy.spatial.distance metric, the parameters are still
341
+ metric dependent. See the scipy docs for usage examples.
342
+
343
+ Returns
344
+ -------
345
+ silhouette : array, shape = [n_samples]
346
+ Silhouette Coefficient for each samples.
347
+
348
+ References
349
+ ----------
350
+
351
+ Peter J. Rousseeuw (1987). "Silhouettes: a Graphical Aid to the
352
+ Interpretation and Validation of Cluster Analysis". Computational
353
+ and Applied Mathematics 20: 53-65. doi:10.1016/0377-0427(87)90125-7.
354
+
355
+ http://en.wikipedia.org/wiki/Silhouette_(clustering)
356
+
357
+ """
358
+ A = _intra_cluster_distances_block(X, labels, metric, n_jobs=n_jobs, **kwds)
359
+ B = _nearest_cluster_distance_block(X, labels, metric, n_jobs=n_jobs, **kwds)
360
+ sil_samples = (B - A) / _np.maximum(A, B)
361
+ # nan values are for clusters of size 1, and should be 0
362
+ return _np.nan_to_num(sil_samples)
363
+
364
+
365
+ def _intra_cluster_distances_block_(subX, metric, **kwds):
366
+ distances = _pairwise_distances(subX, metric=metric, **kwds)
367
+ return distances.sum(axis=1) / (distances.shape[0] - 1)
368
+
369
+
370
+ def _intra_cluster_distances_block(X, labels, metric, n_jobs=1, **kwds):
371
+ """Calculate the mean intra-cluster distance for sample i.
372
+
373
+ Parameters
374
+ ----------
375
+ X : array [n_samples_a, n_features]
376
+ Feature array.
377
+
378
+ labels : array, shape = [n_samples]
379
+ label values for each sample
380
+
381
+ metric : string, or callable
382
+ The metric to use when calculating distance between instances in a
383
+ feature array. If metric is a string, it must be one of the options
384
+ allowed by metrics.pairwise._pairwise_distances. If X is the distance
385
+ array itself, use "precomputed" as the metric.
386
+
387
+ `**kwds` : optional keyword parameters
388
+ Any further parameters are passed directly to the distance function.
389
+ If using a scipy.spatial.distance metric, the parameters are still
390
+ metric dependent. See the scipy docs for usage examples.
391
+
392
+ Returns
393
+ -------
394
+ a : array [n_samples_a]
395
+ Mean intra-cluster distance
396
+ """
397
+ intra_dist = _np.zeros(labels.size, dtype=float)
398
+ values = _Parallel(n_jobs=n_jobs)(
399
+ _delayed(_intra_cluster_distances_block_)(
400
+ X[_np.where(labels == label)[0]], metric, **kwds
401
+ )
402
+ for label in _np.unique(labels)
403
+ )
404
+ for label, values_ in zip(_np.unique(labels), values):
405
+ intra_dist[_np.where(labels == label)[0]] = values_
406
+ return intra_dist
407
+
408
+
409
+ def _nearest_cluster_distance_block_(subX_a, subX_b, metric, **kwds):
410
+ dist = _pairwise_distances(subX_a, subX_b, metric=metric, **kwds)
411
+ dist_a = dist.mean(axis=1)
412
+ dist_b = dist.mean(axis=0)
413
+ return dist_a, dist_b
414
+
415
+
416
+ def _nearest_cluster_distance_block(X, labels, metric, n_jobs=1, **kwds):
417
+ """Calculate the mean nearest-cluster distance for sample i.
418
+
419
+ Parameters
420
+ ----------
421
+ X : array [n_samples_a, n_features]
422
+ Feature array.
423
+
424
+ labels : array, shape = [n_samples]
425
+ label values for each sample
426
+
427
+ metric : string, or callable
428
+ The metric to use when calculating distance between instances in a
429
+ feature array. If metric is a string, it must be one of the options
430
+ allowed by metrics.pairwise._pairwise_distances. If X is the distance
431
+ array itself, use "precomputed" as the metric.
432
+
433
+ `**kwds` : optional keyword parameters
434
+ Any further parameters are passed directly to the distance function.
435
+ If using a scipy.spatial.distance metric, the parameters are still
436
+ metric dependent. See the scipy docs for usage examples.
437
+ X : array [n_samples_a, n_features]
438
+ Feature array.
439
+
440
+ Returns
441
+ -------
442
+ b : float
443
+ Mean nearest-cluster distance for sample i
444
+ """
445
+ inter_dist = _np.empty(labels.size, dtype=float)
446
+ inter_dist.fill(_np.inf)
447
+ # Compute cluster distance between pairs of clusters
448
+ unique_labels = _np.unique(labels)
449
+
450
+ values = _Parallel(n_jobs=n_jobs)(
451
+ _delayed(_nearest_cluster_distance_block_)(
452
+ X[_np.where(labels == label_a)[0]],
453
+ X[_np.where(labels == label_b)[0]],
454
+ metric,
455
+ **kwds
456
+ )
457
+ for label_a, label_b in _combinations(unique_labels, 2)
458
+ )
459
+
460
+ for (label_a, label_b), (values_a, values_b) in zip(
461
+ _combinations(unique_labels, 2), values
462
+ ):
463
+
464
+ indices_a = _np.where(labels == label_a)[0]
465
+ inter_dist[indices_a] = _np.minimum(values_a, inter_dist[indices_a])
466
+ del indices_a
467
+ indices_b = _np.where(labels == label_b)[0]
468
+ inter_dist[indices_b] = _np.minimum(values_b, inter_dist[indices_b])
469
+ del indices_b
470
+ return inter_dist
471
+
472
+
473
+ if __name__ == "__main__":
474
+ import time
475
+
476
+ # from sklearn.metrics.cluster.unsupervised import silhouette_score
477
+ from sklearn.metrics import silhouette_score
478
+
479
+ _np.random.seed(0)
480
+ X = _np.random.random((10000, 100))
481
+ y = _np.repeat(_np.arange(100), 100)
482
+ t0 = time.time()
483
+ s = silhouette_score(X, y)
484
+ t = time.time() - t0
485
+ print("Scikit silhouette (%fs): %f" % (t, s))
486
+ t0 = time.time()
487
+ s = silhouette_score_block(X, y)
488
+ t = time.time() - t0
489
+ print("Block silhouette (%fs): %f" % (t, s))
490
+ t0 = time.time()
491
+ s = silhouette_score_block(X, y, n_jobs=2)
492
+ t = time.time() - t0
493
+ print("Block silhouette parallel (%fs): %f" % (t, s))
494
+
495
+
496
+ # EOF
@@ -0,0 +1,3 @@
1
+ from .ranger import Ranger
2
+ from .ranger913A import RangerVA
3
+ from .rangerqh import RangerQH