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
scitex/dsp/__init__.py ADDED
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/env python3
2
+ """Scitex dsp module."""
3
+
4
+ import warnings
5
+
6
+ # Core imports that should always work
7
+ from ._crop import crop
8
+ from ._demo_sig import demo_sig
9
+ from ._detect_ripples import detect_ripples, _preprocess, _find_events, _drop_ripples_at_edges, _calc_relative_peak_position, _sort_columns
10
+ from ._ensure_3d import ensure_3d
11
+ from ._hilbert import hilbert
12
+ from ._modulation_index import modulation_index, _reshape
13
+ from ._pac import pac
14
+ from ._psd import band_powers, psd
15
+ from ._resample import resample
16
+ from ._time import time
17
+ from ._transform import to_segments, to_sktime_df
18
+ from ._wavelet import wavelet
19
+
20
+ # Import example and params modules as submodules
21
+ from . import example
22
+ from . import params
23
+
24
+ # Try to import audio-related functions that require PortAudio
25
+ try:
26
+ from ._listen import list_and_select_device
27
+ _audio_available = True
28
+ except (ImportError, OSError) as e:
29
+ warnings.warn(
30
+ "Audio functionality unavailable: PortAudio library not found. "
31
+ "Install PortAudio to use audio features (e.g., sudo apt-get install portaudio19-dev)",
32
+ ImportWarning
33
+ )
34
+ list_and_select_device = None
35
+ _audio_available = False
36
+
37
+ # Try to import MNE-related functions
38
+ try:
39
+ from ._mne import get_eeg_pos
40
+ _mne_available = True
41
+ except ImportError:
42
+ warnings.warn(
43
+ "MNE functionality unavailable. Install MNE-Python to use EEG position features.",
44
+ ImportWarning
45
+ )
46
+ get_eeg_pos = None
47
+ _mne_available = False
48
+
49
+ __all__ = [
50
+ "_calc_relative_peak_position",
51
+ "_drop_ripples_at_edges",
52
+ "_find_events",
53
+ "_preprocess",
54
+ "_reshape",
55
+ "_sort_columns",
56
+ "band_powers",
57
+ "crop",
58
+ "demo_sig",
59
+ "detect_ripples",
60
+ "ensure_3d",
61
+ "get_eeg_pos",
62
+ "hilbert",
63
+ "list_and_select_device",
64
+ "modulation_index",
65
+ "pac",
66
+ "psd",
67
+ "resample",
68
+ "time",
69
+ "to_segments",
70
+ "to_sktime_df",
71
+ "wavelet",
72
+ ]
scitex/dsp/_crop.py ADDED
@@ -0,0 +1,122 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "ywatanabe (2024-11-02 22:50:46)"
4
+ # File: ./scitex_repo/src/scitex/dsp/_crop.py
5
+
6
+ import numpy as np
7
+
8
+
9
+ def crop(sig_2d, window_length, overlap_factor=0.0, axis=-1, time=None):
10
+ """
11
+ Crops the input signal into overlapping windows of a specified length,
12
+ allowing for an arbitrary axis and considering a time vector.
13
+
14
+ Parameters:
15
+ - sig_2d (numpy.ndarray): The input sig_2d array to be cropped. Can be multi-dimensional.
16
+ - window_length (int): The length of each window to crop the sig_2d into.
17
+ - overlap_factor (float): The fraction of the window that consecutive windows overlap. For example, an overlap_factor of 0.5 means 50% overlap.
18
+ - axis (int): The time axis along which to crop the sig_2d.
19
+ - time (numpy.ndarray): The time vector associated with the signal. Its length should match the signal's length along the cropping axis.
20
+
21
+ Returns:
22
+ - cropped_windows (numpy.ndarray): The cropped signal windows. The shape depends on the input shape and the specified axis.
23
+ """
24
+ # Ensure axis is in a valid range
25
+ if axis < 0:
26
+ axis += sig_2d.ndim
27
+ if axis >= sig_2d.ndim or axis < 0:
28
+ raise ValueError("Invalid axis. Axis out of range for sig_2d dimensions.")
29
+
30
+ if time is not None:
31
+ # Validate the length of the time vector against the signal's dimension
32
+ if sig_2d.shape[axis] != len(time):
33
+ raise ValueError(
34
+ "Length of time vector does not match signal's dimension along the specified axis."
35
+ )
36
+
37
+ # Move the target axis to the last position
38
+ axes = np.arange(sig_2d.ndim)
39
+ axes[axis], axes[-1] = axes[-1], axes[axis]
40
+ sig_2d_permuted = np.transpose(sig_2d, axes)
41
+
42
+ # Compute the number of windows and the step size
43
+ seq_len = sig_2d_permuted.shape[-1]
44
+ step = int(window_length * (1 - overlap_factor))
45
+ n_windows = max(
46
+ 1, ((seq_len - window_length) // step + 1)
47
+ ) # Ensure at least 1 window
48
+
49
+ # Crop the sig_2d into windows
50
+ cropped_windows = []
51
+ cropped_times = []
52
+ for i in range(n_windows):
53
+ start = i * step
54
+ end = start + window_length
55
+ cropped_windows.append(sig_2d_permuted[..., start:end])
56
+ if time is not None:
57
+ cropped_times.append(time[start:end])
58
+
59
+ # Convert list of windows back to numpy array
60
+ cropped_windows = np.array(cropped_windows)
61
+ cropped_times = np.array(cropped_times)
62
+
63
+ # Move the last axis back to its original position if necessary
64
+ if axis != sig_2d.ndim - 1:
65
+ # Compute the inverse permutation
66
+ inv_axes = np.argsort(axes)
67
+ cropped_windows = np.transpose(cropped_windows, axes=inv_axes)
68
+
69
+ if time is None:
70
+ return cropped_windows
71
+ else:
72
+ return cropped_windows, cropped_times
73
+
74
+
75
+ def main():
76
+ import random
77
+
78
+ FS = 128
79
+ N_CHS = 19
80
+ RECORD_S = 13
81
+ WINDOW_S = 2
82
+ FACTOR = 0.5
83
+
84
+ # To pts
85
+ record_pts = int(RECORD_S * FS)
86
+ window_pts = int(WINDOW_S * FS)
87
+
88
+ # Demo signal
89
+ sig2d = np.random.rand(N_CHS, record_pts)
90
+ time = np.arange(record_pts) / FS
91
+
92
+ # Main
93
+ xx, tt = crop(sig2d, window_pts, overlap_factor=FACTOR, time=time)
94
+
95
+ print(f"sig2d.shape: {sig2d.shape}")
96
+ print(f"xx.shape: {xx.shape}")
97
+
98
+ # Validation
99
+ i_seg = random.randint(0, len(xx) - 1)
100
+ start = int(i_seg * window_pts * FACTOR)
101
+ end = start + window_pts
102
+ assert np.allclose(sig2d[:, start:end], xx[i_seg])
103
+
104
+
105
+ if __name__ == "__main__":
106
+ # parser = argparse.ArgumentParser(description='')
107
+ # import argparse
108
+ # # Argument Parser
109
+ import sys
110
+
111
+ import matplotlib.pyplot as plt
112
+ import scitex
113
+
114
+ # parser.add_argument('--var', '-v', type=int, default=1, help='')
115
+ # parser.add_argument('--flag', '-f', action='store_true', default=False, help='')
116
+ # args = parser.parse_args()
117
+ # Main
118
+ CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.gen.start(sys, plt, verbose=False)
119
+ main()
120
+ scitex.gen.close(CONFIG, verbose=False, notify=False)
121
+
122
+ # EOF
@@ -0,0 +1,331 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # Time-stamp: "2024-11-06 01:45:32 (ywatanabe)"
4
+ # File: ./scitex_repo/src/scitex/dsp/_demo_sig.py
5
+
6
+ import random
7
+ import sys
8
+ import warnings
9
+
10
+ import matplotlib.pyplot as plt
11
+ import mne
12
+ import numpy as np
13
+ from mne.datasets import sample
14
+ from ripple_detection.simulate import simulate_LFP, simulate_time
15
+ from scipy.signal import chirp
16
+ from tensorpac.signals import pac_signals_wavelet
17
+
18
+ from ..io._load_configs import load_configs
19
+
20
+ # Config
21
+ CONFIG = load_configs(verbose=False)
22
+
23
+
24
+ # Functions
25
+ def demo_sig(
26
+ sig_type="periodic",
27
+ batch_size=8,
28
+ n_chs=19,
29
+ n_segments=20,
30
+ t_sec=4,
31
+ fs=512,
32
+ freqs_hz=None,
33
+ verbose=False,
34
+ ):
35
+ """
36
+ Generate demo signals for various signal types.
37
+
38
+ Parameters:
39
+ -----------
40
+ sig_type : str, optional
41
+ Type of signal to generate. Options are "uniform", "gauss", "periodic", "chirp", "ripple", "meg", "tensorpac", "pac".
42
+ Default is "periodic".
43
+ batch_size : int, optional
44
+ Number of batches to generate. Default is 8.
45
+ n_chs : int, optional
46
+ Number of channels. Default is 19.
47
+ n_segments : int, optional
48
+ Number of segments for tensorpac and pac signals. Default is 20.
49
+ t_sec : float, optional
50
+ Duration of the signal in seconds. Default is 4.
51
+ fs : int, optional
52
+ Sampling frequency in Hz. Default is 512.
53
+ freqs_hz : list or None, optional
54
+ List of frequencies in Hz for periodic signals. If None, random frequencies will be used.
55
+ verbose : bool, optional
56
+ If True, print additional information. Default is False.
57
+
58
+ Returns:
59
+ --------
60
+ tuple
61
+ A tuple containing:
62
+ - np.ndarray: Generated signal(s) with shape (batch_size, n_chs, time_samples) or (batch_size, n_chs, n_segments, time_samples) for tensorpac and pac signals.
63
+ - np.ndarray: Time array.
64
+ - int: Sampling frequency.
65
+ """
66
+ assert sig_type in [
67
+ "uniform",
68
+ "gauss",
69
+ "periodic",
70
+ "chirp",
71
+ "ripple",
72
+ "meg",
73
+ "tensorpac",
74
+ "pac",
75
+ ]
76
+ tt = np.linspace(0, t_sec, int(t_sec * fs), endpoint=False)
77
+
78
+ if sig_type == "uniform":
79
+ return (
80
+ np.random.uniform(low=-0.5, high=0.5, size=(batch_size, n_chs, len(tt))),
81
+ tt,
82
+ fs,
83
+ )
84
+
85
+ elif sig_type == "gauss":
86
+ return np.random.randn(batch_size, n_chs, len(tt)), tt, fs
87
+
88
+ elif sig_type == "meg":
89
+ return (
90
+ _demo_sig_meg(
91
+ batch_size=batch_size,
92
+ n_chs=n_chs,
93
+ t_sec=t_sec,
94
+ fs=fs,
95
+ verbose=verbose,
96
+ ).astype(np.float32)[..., : len(tt)],
97
+ tt,
98
+ fs,
99
+ )
100
+
101
+ elif sig_type == "tensorpac":
102
+ xx, tt = _demo_sig_tensorpac(
103
+ batch_size=batch_size,
104
+ n_chs=n_chs,
105
+ n_segments=n_segments,
106
+ t_sec=t_sec,
107
+ fs=fs,
108
+ )
109
+ return xx.astype(np.float32)[..., : len(tt)], tt, fs
110
+
111
+ elif sig_type == "pac":
112
+ xx = _demo_sig_pac(
113
+ batch_size=batch_size,
114
+ n_chs=n_chs,
115
+ n_segments=n_segments,
116
+ t_sec=t_sec,
117
+ fs=fs,
118
+ )
119
+ return xx.astype(np.float32)[..., : len(tt)], tt, fs
120
+
121
+ else:
122
+ fn_1d = {
123
+ "periodic": _demo_sig_periodic_1d,
124
+ "chirp": _demo_sig_chirp_1d,
125
+ "ripple": _demo_sig_ripple_1d,
126
+ }.get(sig_type)
127
+
128
+ return (
129
+ (
130
+ np.array(
131
+ [
132
+ fn_1d(
133
+ t_sec=t_sec,
134
+ fs=fs,
135
+ freqs_hz=freqs_hz,
136
+ verbose=verbose,
137
+ )
138
+ for _ in range(int(batch_size * n_chs))
139
+ ]
140
+ )
141
+ .reshape(batch_size, n_chs, -1)
142
+ .astype(np.float32)[..., : len(tt)]
143
+ ),
144
+ tt,
145
+ fs,
146
+ )
147
+
148
+
149
+ def _demo_sig_pac(
150
+ batch_size=8,
151
+ n_chs=19,
152
+ t_sec=4,
153
+ fs=512,
154
+ f_pha=10,
155
+ f_amp=100,
156
+ noise=0.8,
157
+ n_segments=20,
158
+ verbose=False,
159
+ ):
160
+ """
161
+ Generate a demo signal with phase-amplitude coupling.
162
+ Parameters:
163
+ batch_size (int): Number of batches.
164
+ n_chs (int): Number of channels.
165
+ t_sec (int): Duration of the signal in seconds.
166
+ fs (int): Sampling frequency.
167
+ f_pha (float): Frequency of the phase-modulating signal.
168
+ f_amp (float): Frequency of the amplitude-modulated signal.
169
+ noise (float): Noise level added to the signal.
170
+ n_segments (int): Number of segments.
171
+ verbose (bool): If True, print additional information.
172
+ Returns:
173
+ np.array: Generated signals with shape (batch_size, n_chs, n_segments, seq_len).
174
+ """
175
+ seq_len = t_sec * fs
176
+ t = np.arange(seq_len) / fs
177
+ if verbose:
178
+ print(f"Generating signal with length: {seq_len}")
179
+
180
+ # Create empty array to store the signals
181
+ signals = np.zeros((batch_size, n_chs, n_segments, seq_len))
182
+
183
+ for b in range(batch_size):
184
+ for ch in range(n_chs):
185
+ for seg in range(n_segments):
186
+ # Phase signal
187
+ theta = np.sin(2 * np.pi * f_pha * t)
188
+ # Amplitude envelope
189
+ amplitude_env = 1 + np.sin(2 * np.pi * f_amp * t)
190
+ # Combine phase and amplitude modulation
191
+ signal = theta * amplitude_env
192
+ # Add Gaussian noise
193
+ signal += noise * np.random.randn(seq_len)
194
+ signals[b, ch, seg, :] = signal
195
+
196
+ return signals
197
+
198
+
199
+ def _demo_sig_tensorpac(
200
+ batch_size=8,
201
+ n_chs=19,
202
+ t_sec=4,
203
+ fs=512,
204
+ f_pha=10,
205
+ f_amp=100,
206
+ noise=0.8,
207
+ n_segments=20,
208
+ verbose=False,
209
+ ):
210
+ n_times = int(t_sec * fs)
211
+ x_2d, tt = pac_signals_wavelet(
212
+ sf=fs,
213
+ f_pha=f_pha,
214
+ f_amp=f_amp,
215
+ noise=noise,
216
+ n_epochs=n_segments,
217
+ n_times=n_times,
218
+ )
219
+ x_3d = np.stack([x_2d for _ in range(batch_size)], axis=0)
220
+ x_4d = np.stack([x_3d for _ in range(n_chs)], axis=1)
221
+ return x_4d, tt
222
+
223
+
224
+ def _demo_sig_meg(batch_size=8, n_chs=19, t_sec=10, fs=512, verbose=False, **kwargs):
225
+ data_path = sample.data_path()
226
+ meg_path = data_path / "MEG" / "sample"
227
+ raw_fname = meg_path / "sample_audvis_raw.fif"
228
+ fwd_fname = meg_path / "sample_audvis-meg-eeg-oct-6-fwd.fif"
229
+
230
+ # Load real data as the template
231
+ raw = mne.io.read_raw_fif(raw_fname, verbose=verbose)
232
+ raw = raw.crop(tmax=t_sec, verbose=verbose)
233
+ raw = raw.resample(fs, verbose=verbose)
234
+ raw.set_eeg_reference(projection=True, verbose=verbose)
235
+
236
+ return raw.get_data(
237
+ picks=raw.ch_names[: batch_size * n_chs], verbose=verbose
238
+ ).reshape(batch_size, n_chs, -1)
239
+
240
+
241
+ def _demo_sig_periodic_1d(t_sec=10, fs=512, freqs_hz=None, verbose=False, **kwargs):
242
+ """Returns a demo signal with the shape (t_sec*fs,)."""
243
+
244
+ if freqs_hz is None:
245
+ n_freqs = random.randint(1, 5)
246
+ freqs_hz = np.random.permutation(np.arange(fs))[:n_freqs]
247
+ if verbose:
248
+ print(f"freqs_hz was randomly determined as {freqs_hz}")
249
+
250
+ n = int(t_sec * fs)
251
+ t = np.linspace(0, t_sec, n, endpoint=False)
252
+
253
+ summed = np.array(
254
+ [
255
+ np.random.rand() * np.sin((f_hz * t + np.random.rand()) * (2 * np.pi))
256
+ for f_hz in freqs_hz
257
+ ]
258
+ ).sum(axis=0)
259
+ return summed
260
+
261
+
262
+ def _demo_sig_chirp_1d(
263
+ t_sec=10, fs=512, low_hz=None, high_hz=None, verbose=False, **kwargs
264
+ ):
265
+ if low_hz is None:
266
+ low_hz = random.randint(1, 20)
267
+ if verbose:
268
+ warnings.warn(f"low_hz was randomly determined as {low_hz}.")
269
+
270
+ if high_hz is None:
271
+ high_hz = random.randint(100, 1000)
272
+ if verbose:
273
+ warnings.warn(f"high_hz was randomly determined as {high_hz}.")
274
+
275
+ n = int(t_sec * fs)
276
+ t = np.linspace(0, t_sec, n, endpoint=False)
277
+ x = chirp(t, low_hz, t[-1], high_hz)
278
+ x *= 1.0 + 0.5 * np.sin(2.0 * np.pi * 3.0 * t)
279
+ return x
280
+
281
+
282
+ def _demo_sig_ripple_1d(t_sec=10, fs=512, **kwargs):
283
+ n_samples = t_sec * fs
284
+ t = simulate_time(n_samples, fs)
285
+ n_ripples = random.randint(1, 5)
286
+ mid_time = np.random.permutation(t)[:n_ripples]
287
+ return simulate_LFP(t, mid_time, noise_amplitude=1.2, ripple_amplitude=5)
288
+
289
+
290
+ if __name__ == "__main__":
291
+ import scitex
292
+
293
+ # Start
294
+ CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.gen.start(sys, plt)
295
+ import scitex
296
+
297
+ SIG_TYPES = [
298
+ "uniform",
299
+ "gauss",
300
+ "periodic",
301
+ "chirp",
302
+ "meg",
303
+ "ripple",
304
+ "tensorpac",
305
+ "pac",
306
+ ]
307
+
308
+ i_batch, i_ch, i_segment = 0, 0, 0
309
+ fig, axes = scitex.plt.subplots(nrows=len(SIG_TYPES))
310
+ for ax, (i_sig_type, sig_type) in zip(axes, enumerate(SIG_TYPES)):
311
+ xx, tt, fs = demo_sig(sig_type=sig_type)
312
+ if sig_type not in ["tensorpac", "pac"]:
313
+ ax.plot(tt, xx[i_batch, i_ch], label=sig_type)
314
+ else:
315
+ ax.plot(tt, xx[i_batch, i_ch, i_segment], label=sig_type)
316
+ ax.legend(loc="upper left")
317
+ fig.suptitle("Demo signals")
318
+ fig.supxlabel("Time [s]")
319
+ fig.supylabel("Amplitude [?V]")
320
+ scitex.io.save(fig, "traces.png")
321
+
322
+ # Close
323
+ scitex.gen.close(CONFIG)
324
+
325
+ # EOF
326
+
327
+ """
328
+ /home/ywatanabe/proj/entrance/scitex/dsp/_demo_sig.py
329
+ """
330
+
331
+ # EOF