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.
- scitex/__init__.py +73 -0
- scitex/__main__.py +89 -0
- scitex/__version__.py +14 -0
- scitex/_sh.py +59 -0
- scitex/ai/_LearningCurveLogger.py +583 -0
- scitex/ai/__Classifiers.py +101 -0
- scitex/ai/__init__.py +55 -0
- scitex/ai/_gen_ai/_Anthropic.py +173 -0
- scitex/ai/_gen_ai/_BaseGenAI.py +336 -0
- scitex/ai/_gen_ai/_DeepSeek.py +175 -0
- scitex/ai/_gen_ai/_Google.py +161 -0
- scitex/ai/_gen_ai/_Groq.py +97 -0
- scitex/ai/_gen_ai/_Llama.py +142 -0
- scitex/ai/_gen_ai/_OpenAI.py +230 -0
- scitex/ai/_gen_ai/_PARAMS.py +565 -0
- scitex/ai/_gen_ai/_Perplexity.py +191 -0
- scitex/ai/_gen_ai/__init__.py +32 -0
- scitex/ai/_gen_ai/_calc_cost.py +78 -0
- scitex/ai/_gen_ai/_format_output_func.py +183 -0
- scitex/ai/_gen_ai/_genai_factory.py +71 -0
- scitex/ai/act/__init__.py +8 -0
- scitex/ai/act/_define.py +11 -0
- scitex/ai/classification/__init__.py +7 -0
- scitex/ai/classification/classification_reporter.py +1137 -0
- scitex/ai/classification/classifier_server.py +131 -0
- scitex/ai/classification/classifiers.py +101 -0
- scitex/ai/classification_reporter.py +1161 -0
- scitex/ai/classifier_server.py +131 -0
- scitex/ai/clustering/__init__.py +11 -0
- scitex/ai/clustering/_pca.py +115 -0
- scitex/ai/clustering/_umap.py +376 -0
- scitex/ai/early_stopping.py +149 -0
- scitex/ai/feature_extraction/__init__.py +56 -0
- scitex/ai/feature_extraction/vit.py +148 -0
- scitex/ai/genai/__init__.py +277 -0
- scitex/ai/genai/anthropic.py +177 -0
- scitex/ai/genai/anthropic_provider.py +320 -0
- scitex/ai/genai/anthropic_refactored.py +109 -0
- scitex/ai/genai/auth_manager.py +200 -0
- scitex/ai/genai/base_genai.py +336 -0
- scitex/ai/genai/base_provider.py +291 -0
- scitex/ai/genai/calc_cost.py +78 -0
- scitex/ai/genai/chat_history.py +307 -0
- scitex/ai/genai/cost_tracker.py +276 -0
- scitex/ai/genai/deepseek.py +188 -0
- scitex/ai/genai/deepseek_provider.py +251 -0
- scitex/ai/genai/format_output_func.py +183 -0
- scitex/ai/genai/genai_factory.py +71 -0
- scitex/ai/genai/google.py +169 -0
- scitex/ai/genai/google_provider.py +228 -0
- scitex/ai/genai/groq.py +104 -0
- scitex/ai/genai/groq_provider.py +248 -0
- scitex/ai/genai/image_processor.py +250 -0
- scitex/ai/genai/llama.py +155 -0
- scitex/ai/genai/llama_provider.py +214 -0
- scitex/ai/genai/mock_provider.py +127 -0
- scitex/ai/genai/model_registry.py +304 -0
- scitex/ai/genai/openai.py +230 -0
- scitex/ai/genai/openai_provider.py +293 -0
- scitex/ai/genai/params.py +565 -0
- scitex/ai/genai/perplexity.py +202 -0
- scitex/ai/genai/perplexity_provider.py +205 -0
- scitex/ai/genai/provider_base.py +302 -0
- scitex/ai/genai/provider_factory.py +370 -0
- scitex/ai/genai/response_handler.py +235 -0
- scitex/ai/layer/_Pass.py +21 -0
- scitex/ai/layer/__init__.py +10 -0
- scitex/ai/layer/_switch.py +8 -0
- scitex/ai/loss/_L1L2Losses.py +34 -0
- scitex/ai/loss/__init__.py +12 -0
- scitex/ai/loss/multi_task_loss.py +47 -0
- scitex/ai/metrics/__init__.py +9 -0
- scitex/ai/metrics/_bACC.py +51 -0
- scitex/ai/metrics/silhoute_score_block.py +496 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/__init__.py +0 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/__init__.py +3 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/ranger.py +207 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/ranger2020.py +238 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/ranger913A.py +215 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/rangerqh.py +184 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/setup.py +24 -0
- scitex/ai/optim/__init__.py +13 -0
- scitex/ai/optim/_get_set.py +31 -0
- scitex/ai/optim/_optimizers.py +71 -0
- scitex/ai/plt/__init__.py +21 -0
- scitex/ai/plt/_conf_mat.py +592 -0
- scitex/ai/plt/_learning_curve.py +194 -0
- scitex/ai/plt/_optuna_study.py +111 -0
- scitex/ai/plt/aucs/__init__.py +2 -0
- scitex/ai/plt/aucs/example.py +60 -0
- scitex/ai/plt/aucs/pre_rec_auc.py +223 -0
- scitex/ai/plt/aucs/roc_auc.py +246 -0
- scitex/ai/sampling/undersample.py +29 -0
- scitex/ai/sk/__init__.py +11 -0
- scitex/ai/sk/_clf.py +58 -0
- scitex/ai/sk/_to_sktime.py +100 -0
- scitex/ai/sklearn/__init__.py +26 -0
- scitex/ai/sklearn/clf.py +58 -0
- scitex/ai/sklearn/to_sktime.py +100 -0
- scitex/ai/training/__init__.py +7 -0
- scitex/ai/training/early_stopping.py +150 -0
- scitex/ai/training/learning_curve_logger.py +555 -0
- scitex/ai/utils/__init__.py +22 -0
- scitex/ai/utils/_check_params.py +50 -0
- scitex/ai/utils/_default_dataset.py +46 -0
- scitex/ai/utils/_format_samples_for_sktime.py +26 -0
- scitex/ai/utils/_label_encoder.py +134 -0
- scitex/ai/utils/_merge_labels.py +22 -0
- scitex/ai/utils/_sliding_window_data_augmentation.py +11 -0
- scitex/ai/utils/_under_sample.py +51 -0
- scitex/ai/utils/_verify_n_gpus.py +16 -0
- scitex/ai/utils/grid_search.py +148 -0
- scitex/context/__init__.py +9 -0
- scitex/context/_suppress_output.py +38 -0
- scitex/db/_BaseMixins/_BaseBackupMixin.py +30 -0
- scitex/db/_BaseMixins/_BaseBatchMixin.py +31 -0
- scitex/db/_BaseMixins/_BaseBlobMixin.py +81 -0
- scitex/db/_BaseMixins/_BaseConnectionMixin.py +43 -0
- scitex/db/_BaseMixins/_BaseImportExportMixin.py +39 -0
- scitex/db/_BaseMixins/_BaseIndexMixin.py +29 -0
- scitex/db/_BaseMixins/_BaseMaintenanceMixin.py +33 -0
- scitex/db/_BaseMixins/_BaseQueryMixin.py +52 -0
- scitex/db/_BaseMixins/_BaseRowMixin.py +32 -0
- scitex/db/_BaseMixins/_BaseSchemaMixin.py +44 -0
- scitex/db/_BaseMixins/_BaseTableMixin.py +66 -0
- scitex/db/_BaseMixins/_BaseTransactionMixin.py +52 -0
- scitex/db/_BaseMixins/__init__.py +30 -0
- scitex/db/_PostgreSQL.py +126 -0
- scitex/db/_PostgreSQLMixins/_BackupMixin.py +166 -0
- scitex/db/_PostgreSQLMixins/_BatchMixin.py +82 -0
- scitex/db/_PostgreSQLMixins/_BlobMixin.py +231 -0
- scitex/db/_PostgreSQLMixins/_ConnectionMixin.py +92 -0
- scitex/db/_PostgreSQLMixins/_ImportExportMixin.py +59 -0
- scitex/db/_PostgreSQLMixins/_IndexMixin.py +64 -0
- scitex/db/_PostgreSQLMixins/_MaintenanceMixin.py +175 -0
- scitex/db/_PostgreSQLMixins/_QueryMixin.py +108 -0
- scitex/db/_PostgreSQLMixins/_RowMixin.py +75 -0
- scitex/db/_PostgreSQLMixins/_SchemaMixin.py +126 -0
- scitex/db/_PostgreSQLMixins/_TableMixin.py +176 -0
- scitex/db/_PostgreSQLMixins/_TransactionMixin.py +57 -0
- scitex/db/_PostgreSQLMixins/__init__.py +34 -0
- scitex/db/_SQLite3.py +2136 -0
- scitex/db/_SQLite3Mixins/_BatchMixin.py +243 -0
- scitex/db/_SQLite3Mixins/_BlobMixin.py +229 -0
- scitex/db/_SQLite3Mixins/_ConnectionMixin.py +108 -0
- scitex/db/_SQLite3Mixins/_ImportExportMixin.py +80 -0
- scitex/db/_SQLite3Mixins/_IndexMixin.py +32 -0
- scitex/db/_SQLite3Mixins/_MaintenanceMixin.py +176 -0
- scitex/db/_SQLite3Mixins/_QueryMixin.py +83 -0
- scitex/db/_SQLite3Mixins/_RowMixin.py +75 -0
- scitex/db/_SQLite3Mixins/_TableMixin.py +183 -0
- scitex/db/_SQLite3Mixins/_TransactionMixin.py +71 -0
- scitex/db/_SQLite3Mixins/__init__.py +30 -0
- scitex/db/__init__.py +14 -0
- scitex/db/_delete_duplicates.py +397 -0
- scitex/db/_inspect.py +163 -0
- scitex/decorators/__init__.py +54 -0
- scitex/decorators/_auto_order.py +172 -0
- scitex/decorators/_batch_fn.py +127 -0
- scitex/decorators/_cache_disk.py +32 -0
- scitex/decorators/_cache_mem.py +12 -0
- scitex/decorators/_combined.py +98 -0
- scitex/decorators/_converters.py +282 -0
- scitex/decorators/_deprecated.py +26 -0
- scitex/decorators/_not_implemented.py +30 -0
- scitex/decorators/_numpy_fn.py +86 -0
- scitex/decorators/_pandas_fn.py +121 -0
- scitex/decorators/_preserve_doc.py +19 -0
- scitex/decorators/_signal_fn.py +95 -0
- scitex/decorators/_timeout.py +55 -0
- scitex/decorators/_torch_fn.py +136 -0
- scitex/decorators/_wrap.py +39 -0
- scitex/decorators/_xarray_fn.py +88 -0
- scitex/dev/__init__.py +15 -0
- scitex/dev/_analyze_code_flow.py +284 -0
- scitex/dev/_reload.py +59 -0
- scitex/dict/_DotDict.py +442 -0
- scitex/dict/__init__.py +18 -0
- scitex/dict/_listed_dict.py +42 -0
- scitex/dict/_pop_keys.py +36 -0
- scitex/dict/_replace.py +13 -0
- scitex/dict/_safe_merge.py +62 -0
- scitex/dict/_to_str.py +32 -0
- scitex/dsp/__init__.py +72 -0
- scitex/dsp/_crop.py +122 -0
- scitex/dsp/_demo_sig.py +331 -0
- scitex/dsp/_detect_ripples.py +212 -0
- scitex/dsp/_ensure_3d.py +18 -0
- scitex/dsp/_hilbert.py +78 -0
- scitex/dsp/_listen.py +702 -0
- scitex/dsp/_misc.py +30 -0
- scitex/dsp/_mne.py +32 -0
- scitex/dsp/_modulation_index.py +79 -0
- scitex/dsp/_pac.py +319 -0
- scitex/dsp/_psd.py +102 -0
- scitex/dsp/_resample.py +65 -0
- scitex/dsp/_time.py +36 -0
- scitex/dsp/_transform.py +68 -0
- scitex/dsp/_wavelet.py +212 -0
- scitex/dsp/add_noise.py +111 -0
- scitex/dsp/example.py +253 -0
- scitex/dsp/filt.py +155 -0
- scitex/dsp/norm.py +18 -0
- scitex/dsp/params.py +51 -0
- scitex/dsp/reference.py +43 -0
- scitex/dsp/template.py +25 -0
- scitex/dsp/utils/__init__.py +15 -0
- scitex/dsp/utils/_differential_bandpass_filters.py +120 -0
- scitex/dsp/utils/_ensure_3d.py +18 -0
- scitex/dsp/utils/_ensure_even_len.py +10 -0
- scitex/dsp/utils/_zero_pad.py +48 -0
- scitex/dsp/utils/filter.py +408 -0
- scitex/dsp/utils/pac.py +177 -0
- scitex/dt/__init__.py +8 -0
- scitex/dt/_linspace.py +130 -0
- scitex/etc/__init__.py +15 -0
- scitex/etc/wait_key.py +34 -0
- scitex/gen/_DimHandler.py +196 -0
- scitex/gen/_TimeStamper.py +244 -0
- scitex/gen/__init__.py +95 -0
- scitex/gen/_alternate_kwarg.py +13 -0
- scitex/gen/_cache.py +11 -0
- scitex/gen/_check_host.py +34 -0
- scitex/gen/_ci.py +12 -0
- scitex/gen/_close.py +222 -0
- scitex/gen/_embed.py +78 -0
- scitex/gen/_inspect_module.py +257 -0
- scitex/gen/_is_ipython.py +12 -0
- scitex/gen/_less.py +48 -0
- scitex/gen/_list_packages.py +139 -0
- scitex/gen/_mat2py.py +88 -0
- scitex/gen/_norm.py +170 -0
- scitex/gen/_paste.py +18 -0
- scitex/gen/_print_config.py +84 -0
- scitex/gen/_shell.py +48 -0
- scitex/gen/_src.py +111 -0
- scitex/gen/_start.py +451 -0
- scitex/gen/_symlink.py +55 -0
- scitex/gen/_symlog.py +27 -0
- scitex/gen/_tee.py +238 -0
- scitex/gen/_title2path.py +60 -0
- scitex/gen/_title_case.py +88 -0
- scitex/gen/_to_even.py +84 -0
- scitex/gen/_to_odd.py +34 -0
- scitex/gen/_to_rank.py +39 -0
- scitex/gen/_transpose.py +37 -0
- scitex/gen/_type.py +78 -0
- scitex/gen/_var_info.py +73 -0
- scitex/gen/_wrap.py +17 -0
- scitex/gen/_xml2dict.py +76 -0
- scitex/gen/misc.py +730 -0
- scitex/gen/path.py +0 -0
- scitex/general/__init__.py +5 -0
- scitex/gists/_SigMacro_processFigure_S.py +128 -0
- scitex/gists/_SigMacro_toBlue.py +172 -0
- scitex/gists/__init__.py +12 -0
- scitex/io/_H5Explorer.py +292 -0
- scitex/io/__init__.py +82 -0
- scitex/io/_cache.py +101 -0
- scitex/io/_flush.py +24 -0
- scitex/io/_glob.py +103 -0
- scitex/io/_json2md.py +113 -0
- scitex/io/_load.py +168 -0
- scitex/io/_load_configs.py +146 -0
- scitex/io/_load_modules/__init__.py +38 -0
- scitex/io/_load_modules/_catboost.py +66 -0
- scitex/io/_load_modules/_con.py +20 -0
- scitex/io/_load_modules/_db.py +24 -0
- scitex/io/_load_modules/_docx.py +42 -0
- scitex/io/_load_modules/_eeg.py +110 -0
- scitex/io/_load_modules/_hdf5.py +196 -0
- scitex/io/_load_modules/_image.py +19 -0
- scitex/io/_load_modules/_joblib.py +19 -0
- scitex/io/_load_modules/_json.py +18 -0
- scitex/io/_load_modules/_markdown.py +103 -0
- scitex/io/_load_modules/_matlab.py +37 -0
- scitex/io/_load_modules/_numpy.py +39 -0
- scitex/io/_load_modules/_optuna.py +155 -0
- scitex/io/_load_modules/_pandas.py +69 -0
- scitex/io/_load_modules/_pdf.py +31 -0
- scitex/io/_load_modules/_pickle.py +24 -0
- scitex/io/_load_modules/_torch.py +16 -0
- scitex/io/_load_modules/_txt.py +126 -0
- scitex/io/_load_modules/_xml.py +49 -0
- scitex/io/_load_modules/_yaml.py +23 -0
- scitex/io/_mv_to_tmp.py +19 -0
- scitex/io/_path.py +286 -0
- scitex/io/_reload.py +78 -0
- scitex/io/_save.py +539 -0
- scitex/io/_save_modules/__init__.py +66 -0
- scitex/io/_save_modules/_catboost.py +22 -0
- scitex/io/_save_modules/_csv.py +89 -0
- scitex/io/_save_modules/_excel.py +49 -0
- scitex/io/_save_modules/_hdf5.py +249 -0
- scitex/io/_save_modules/_html.py +48 -0
- scitex/io/_save_modules/_image.py +140 -0
- scitex/io/_save_modules/_joblib.py +25 -0
- scitex/io/_save_modules/_json.py +25 -0
- scitex/io/_save_modules/_listed_dfs_as_csv.py +57 -0
- scitex/io/_save_modules/_listed_scalars_as_csv.py +42 -0
- scitex/io/_save_modules/_matlab.py +24 -0
- scitex/io/_save_modules/_mp4.py +29 -0
- scitex/io/_save_modules/_numpy.py +57 -0
- scitex/io/_save_modules/_optuna_study_as_csv_and_pngs.py +38 -0
- scitex/io/_save_modules/_pickle.py +45 -0
- scitex/io/_save_modules/_plotly.py +27 -0
- scitex/io/_save_modules/_text.py +23 -0
- scitex/io/_save_modules/_torch.py +26 -0
- scitex/io/_save_modules/_yaml.py +29 -0
- scitex/life/__init__.py +10 -0
- scitex/life/_monitor_rain.py +49 -0
- scitex/linalg/__init__.py +17 -0
- scitex/linalg/_distance.py +63 -0
- scitex/linalg/_geometric_median.py +64 -0
- scitex/linalg/_misc.py +73 -0
- scitex/nn/_AxiswiseDropout.py +27 -0
- scitex/nn/_BNet.py +126 -0
- scitex/nn/_BNet_Res.py +164 -0
- scitex/nn/_ChannelGainChanger.py +44 -0
- scitex/nn/_DropoutChannels.py +50 -0
- scitex/nn/_Filters.py +489 -0
- scitex/nn/_FreqGainChanger.py +110 -0
- scitex/nn/_GaussianFilter.py +48 -0
- scitex/nn/_Hilbert.py +111 -0
- scitex/nn/_MNet_1000.py +157 -0
- scitex/nn/_ModulationIndex.py +221 -0
- scitex/nn/_PAC.py +414 -0
- scitex/nn/_PSD.py +40 -0
- scitex/nn/_ResNet1D.py +120 -0
- scitex/nn/_SpatialAttention.py +25 -0
- scitex/nn/_Spectrogram.py +161 -0
- scitex/nn/_SwapChannels.py +50 -0
- scitex/nn/_TransposeLayer.py +19 -0
- scitex/nn/_Wavelet.py +183 -0
- scitex/nn/__init__.py +63 -0
- scitex/os/__init__.py +8 -0
- scitex/os/_mv.py +50 -0
- scitex/parallel/__init__.py +8 -0
- scitex/parallel/_run.py +151 -0
- scitex/path/__init__.py +33 -0
- scitex/path/_clean.py +52 -0
- scitex/path/_find.py +108 -0
- scitex/path/_get_module_path.py +51 -0
- scitex/path/_get_spath.py +35 -0
- scitex/path/_getsize.py +18 -0
- scitex/path/_increment_version.py +87 -0
- scitex/path/_mk_spath.py +51 -0
- scitex/path/_path.py +19 -0
- scitex/path/_split.py +23 -0
- scitex/path/_this_path.py +19 -0
- scitex/path/_version.py +101 -0
- scitex/pd/__init__.py +41 -0
- scitex/pd/_find_indi.py +126 -0
- scitex/pd/_find_pval.py +113 -0
- scitex/pd/_force_df.py +154 -0
- scitex/pd/_from_xyz.py +71 -0
- scitex/pd/_ignore_SettingWithCopyWarning.py +34 -0
- scitex/pd/_melt_cols.py +81 -0
- scitex/pd/_merge_columns.py +221 -0
- scitex/pd/_mv.py +63 -0
- scitex/pd/_replace.py +62 -0
- scitex/pd/_round.py +93 -0
- scitex/pd/_slice.py +63 -0
- scitex/pd/_sort.py +91 -0
- scitex/pd/_to_numeric.py +53 -0
- scitex/pd/_to_xy.py +59 -0
- scitex/pd/_to_xyz.py +110 -0
- scitex/plt/__init__.py +36 -0
- scitex/plt/_subplots/_AxesWrapper.py +182 -0
- scitex/plt/_subplots/_AxisWrapper.py +249 -0
- scitex/plt/_subplots/_AxisWrapperMixins/_AdjustmentMixin.py +414 -0
- scitex/plt/_subplots/_AxisWrapperMixins/_MatplotlibPlotMixin.py +896 -0
- scitex/plt/_subplots/_AxisWrapperMixins/_SeabornMixin.py +368 -0
- scitex/plt/_subplots/_AxisWrapperMixins/_TrackingMixin.py +185 -0
- scitex/plt/_subplots/_AxisWrapperMixins/__init__.py +16 -0
- scitex/plt/_subplots/_FigWrapper.py +226 -0
- scitex/plt/_subplots/_SubplotsWrapper.py +171 -0
- scitex/plt/_subplots/__init__.py +111 -0
- scitex/plt/_subplots/_export_as_csv.py +232 -0
- scitex/plt/_subplots/_export_as_csv_formatters/__init__.py +61 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_bar.py +90 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_barh.py +49 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_boxplot.py +46 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_contour.py +39 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_errorbar.py +125 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_eventplot.py +72 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_fill.py +34 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_fill_between.py +36 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_hist.py +79 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_imshow.py +59 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_imshow2d.py +32 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot.py +79 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_box.py +75 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_conf_mat.py +64 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_ecdf.py +44 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_fillv.py +70 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_heatmap.py +66 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_image.py +95 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_joyplot.py +67 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_kde.py +52 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_line.py +46 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_mean_ci.py +46 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_mean_std.py +46 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_median_iqr.py +46 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_raster.py +44 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_rectangle.py +103 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_scatter_hist.py +82 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_shaded_line.py +58 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_violin.py +117 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_scatter.py +30 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_barplot.py +51 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_boxplot.py +93 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_heatmap.py +94 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_histplot.py +92 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_jointplot.py +65 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_kdeplot.py +59 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_lineplot.py +58 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_pairplot.py +45 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_scatterplot.py +70 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_stripplot.py +75 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_swarmplot.py +75 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_violinplot.py +155 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_violin.py +64 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_violinplot.py +77 -0
- scitex/plt/_subplots/_export_as_csv_formatters/test_formatters.py +210 -0
- scitex/plt/_subplots/_export_as_csv_formatters/verify_formatters.py +342 -0
- scitex/plt/_subplots/_export_as_csv_formatters.py +115 -0
- scitex/plt/_tpl.py +28 -0
- scitex/plt/ax/__init__.py +114 -0
- scitex/plt/ax/_plot/__init__.py +53 -0
- scitex/plt/ax/_plot/_plot_circular_hist.py +124 -0
- scitex/plt/ax/_plot/_plot_conf_mat.py +136 -0
- scitex/plt/ax/_plot/_plot_cube.py +57 -0
- scitex/plt/ax/_plot/_plot_ecdf.py +84 -0
- scitex/plt/ax/_plot/_plot_fillv.py +55 -0
- scitex/plt/ax/_plot/_plot_heatmap.py +266 -0
- scitex/plt/ax/_plot/_plot_image.py +94 -0
- scitex/plt/ax/_plot/_plot_joyplot.py +76 -0
- scitex/plt/ax/_plot/_plot_raster.py +172 -0
- scitex/plt/ax/_plot/_plot_rectangle.py +69 -0
- scitex/plt/ax/_plot/_plot_scatter_hist.py +133 -0
- scitex/plt/ax/_plot/_plot_shaded_line.py +142 -0
- scitex/plt/ax/_plot/_plot_statistical_shaded_line.py +221 -0
- scitex/plt/ax/_plot/_plot_violin.py +343 -0
- scitex/plt/ax/_style/__init__.py +38 -0
- scitex/plt/ax/_style/_add_marginal_ax.py +44 -0
- scitex/plt/ax/_style/_add_panel.py +92 -0
- scitex/plt/ax/_style/_extend.py +64 -0
- scitex/plt/ax/_style/_force_aspect.py +37 -0
- scitex/plt/ax/_style/_format_label.py +23 -0
- scitex/plt/ax/_style/_hide_spines.py +84 -0
- scitex/plt/ax/_style/_map_ticks.py +182 -0
- scitex/plt/ax/_style/_rotate_labels.py +215 -0
- scitex/plt/ax/_style/_sci_note.py +279 -0
- scitex/plt/ax/_style/_set_log_scale.py +299 -0
- scitex/plt/ax/_style/_set_meta.py +261 -0
- scitex/plt/ax/_style/_set_n_ticks.py +37 -0
- scitex/plt/ax/_style/_set_size.py +16 -0
- scitex/plt/ax/_style/_set_supxyt.py +116 -0
- scitex/plt/ax/_style/_set_ticks.py +276 -0
- scitex/plt/ax/_style/_set_xyt.py +121 -0
- scitex/plt/ax/_style/_share_axes.py +264 -0
- scitex/plt/ax/_style/_shift.py +139 -0
- scitex/plt/ax/_style/_show_spines.py +333 -0
- scitex/plt/color/_PARAMS.py +70 -0
- scitex/plt/color/__init__.py +52 -0
- scitex/plt/color/_add_hue_col.py +41 -0
- scitex/plt/color/_colors.py +205 -0
- scitex/plt/color/_get_colors_from_cmap.py +134 -0
- scitex/plt/color/_interpolate.py +29 -0
- scitex/plt/color/_vizualize_colors.py +54 -0
- scitex/plt/utils/__init__.py +44 -0
- scitex/plt/utils/_calc_bacc_from_conf_mat.py +46 -0
- scitex/plt/utils/_calc_nice_ticks.py +101 -0
- scitex/plt/utils/_close.py +68 -0
- scitex/plt/utils/_colorbar.py +96 -0
- scitex/plt/utils/_configure_mpl.py +295 -0
- scitex/plt/utils/_histogram_utils.py +132 -0
- scitex/plt/utils/_im2grid.py +70 -0
- scitex/plt/utils/_is_valid_axis.py +78 -0
- scitex/plt/utils/_mk_colorbar.py +65 -0
- scitex/plt/utils/_mk_patches.py +26 -0
- scitex/plt/utils/_scientific_captions.py +638 -0
- scitex/plt/utils/_scitex_config.py +223 -0
- scitex/reproduce/__init__.py +14 -0
- scitex/reproduce/_fix_seeds.py +45 -0
- scitex/reproduce/_gen_ID.py +55 -0
- scitex/reproduce/_gen_timestamp.py +35 -0
- scitex/res/__init__.py +5 -0
- scitex/resource/__init__.py +13 -0
- scitex/resource/_get_processor_usages.py +281 -0
- scitex/resource/_get_specs.py +280 -0
- scitex/resource/_log_processor_usages.py +190 -0
- scitex/resource/_utils/__init__.py +31 -0
- scitex/resource/_utils/_get_env_info.py +481 -0
- scitex/resource/limit_ram.py +33 -0
- scitex/scholar/__init__.py +24 -0
- scitex/scholar/_local_search.py +454 -0
- scitex/scholar/_paper.py +244 -0
- scitex/scholar/_pdf_downloader.py +325 -0
- scitex/scholar/_search.py +393 -0
- scitex/scholar/_vector_search.py +370 -0
- scitex/scholar/_web_sources.py +457 -0
- scitex/stats/__init__.py +31 -0
- scitex/stats/_calc_partial_corr.py +17 -0
- scitex/stats/_corr_test_multi.py +94 -0
- scitex/stats/_corr_test_wrapper.py +115 -0
- scitex/stats/_describe_wrapper.py +90 -0
- scitex/stats/_multiple_corrections.py +63 -0
- scitex/stats/_nan_stats.py +93 -0
- scitex/stats/_p2stars.py +116 -0
- scitex/stats/_p2stars_wrapper.py +56 -0
- scitex/stats/_statistical_tests.py +73 -0
- scitex/stats/desc/__init__.py +40 -0
- scitex/stats/desc/_describe.py +189 -0
- scitex/stats/desc/_nan.py +289 -0
- scitex/stats/desc/_real.py +94 -0
- scitex/stats/multiple/__init__.py +14 -0
- scitex/stats/multiple/_bonferroni_correction.py +72 -0
- scitex/stats/multiple/_fdr_correction.py +400 -0
- scitex/stats/multiple/_multicompair.py +28 -0
- scitex/stats/tests/__corr_test.py +277 -0
- scitex/stats/tests/__corr_test_multi.py +343 -0
- scitex/stats/tests/__corr_test_single.py +277 -0
- scitex/stats/tests/__init__.py +22 -0
- scitex/stats/tests/_brunner_munzel_test.py +192 -0
- scitex/stats/tests/_nocorrelation_test.py +28 -0
- scitex/stats/tests/_smirnov_grubbs.py +98 -0
- scitex/str/__init__.py +113 -0
- scitex/str/_clean_path.py +75 -0
- scitex/str/_color_text.py +52 -0
- scitex/str/_decapitalize.py +58 -0
- scitex/str/_factor_out_digits.py +281 -0
- scitex/str/_format_plot_text.py +498 -0
- scitex/str/_grep.py +48 -0
- scitex/str/_latex.py +155 -0
- scitex/str/_latex_fallback.py +471 -0
- scitex/str/_mask_api.py +39 -0
- scitex/str/_mask_api_key.py +8 -0
- scitex/str/_parse.py +158 -0
- scitex/str/_print_block.py +47 -0
- scitex/str/_print_debug.py +68 -0
- scitex/str/_printc.py +62 -0
- scitex/str/_readable_bytes.py +38 -0
- scitex/str/_remove_ansi.py +23 -0
- scitex/str/_replace.py +134 -0
- scitex/str/_search.py +125 -0
- scitex/str/_squeeze_space.py +36 -0
- scitex/tex/__init__.py +10 -0
- scitex/tex/_preview.py +103 -0
- scitex/tex/_to_vec.py +116 -0
- scitex/torch/__init__.py +18 -0
- scitex/torch/_apply_to.py +34 -0
- scitex/torch/_nan_funcs.py +77 -0
- scitex/types/_ArrayLike.py +44 -0
- scitex/types/_ColorLike.py +21 -0
- scitex/types/__init__.py +14 -0
- scitex/types/_is_listed_X.py +70 -0
- scitex/utils/__init__.py +22 -0
- scitex/utils/_compress_hdf5.py +116 -0
- scitex/utils/_email.py +120 -0
- scitex/utils/_grid.py +148 -0
- scitex/utils/_notify.py +247 -0
- scitex/utils/_search.py +121 -0
- scitex/web/__init__.py +38 -0
- scitex/web/_search_pubmed.py +438 -0
- scitex/web/_summarize_url.py +158 -0
- scitex-2.0.0.dist-info/METADATA +307 -0
- scitex-2.0.0.dist-info/RECORD +572 -0
- scitex-2.0.0.dist-info/WHEEL +6 -0
- scitex-2.0.0.dist-info/licenses/LICENSE +7 -0
- scitex-2.0.0.dist-info/top_level.txt +1 -0
scitex/dsp/_misc.py
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-05 01:03:32 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/dsp/_misc.py
|
|
5
|
+
|
|
6
|
+
#!/usr/bin/env python3
|
|
7
|
+
# -*- coding: utf-8 -*-
|
|
8
|
+
# Time-stamp: "2024-04-05 12:14:08 (ywatanabe)"
|
|
9
|
+
|
|
10
|
+
from ..decorators import torch_fn
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@torch_fn
|
|
14
|
+
def ensure_3d(x):
|
|
15
|
+
if x.ndim == 1: # assumes (seq_len,)
|
|
16
|
+
x = x.unsqueeze(0).unsqueeze(0)
|
|
17
|
+
elif x.ndim == 2: # assumes (batch_siize, seq_len)
|
|
18
|
+
x = x.unsqueeze(1)
|
|
19
|
+
return x
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
# @torch_fn
|
|
23
|
+
# def unbias(x, dim=-1, fn="mean"):
|
|
24
|
+
# if fn == "mean":
|
|
25
|
+
# return x - x.mean(dim=dim, keepdims=True)
|
|
26
|
+
# if fn == "min":
|
|
27
|
+
# return x - x.min(dim=dim, keepdims=True)[0]
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# EOF
|
scitex/dsp/_mne.py
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-04 02:07:36 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/dsp/_mne.py
|
|
5
|
+
|
|
6
|
+
import mne
|
|
7
|
+
import pandas as pd
|
|
8
|
+
from .params import EEG_MONTAGE_1020
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def get_eeg_pos(channel_names=EEG_MONTAGE_1020):
|
|
12
|
+
# Load the standard 10-20 montage
|
|
13
|
+
standard_montage = mne.channels.make_standard_montage("standard_1020")
|
|
14
|
+
standard_montage.ch_names = [
|
|
15
|
+
ch_name.upper() for ch_name in standard_montage.ch_names
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
# Get the positions of the electrodes in the standard montage
|
|
19
|
+
positions = standard_montage.get_positions()
|
|
20
|
+
|
|
21
|
+
df = pd.DataFrame(positions["ch_pos"])[channel_names]
|
|
22
|
+
|
|
23
|
+
df.set_index(pd.Series(["x", "y", "z"]))
|
|
24
|
+
|
|
25
|
+
return df
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
if __name__ == "__main__":
|
|
29
|
+
print(get_eeg_pos())
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
# EOF
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-04 02:09:55 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/dsp/_modulation_index.py
|
|
5
|
+
|
|
6
|
+
import torch
|
|
7
|
+
|
|
8
|
+
from ..decorators import signal_fn
|
|
9
|
+
from ..nn._ModulationIndex import ModulationIndex
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@signal_fn
|
|
13
|
+
def modulation_index(pha, amp, n_bins=18, amp_prob=False):
|
|
14
|
+
"""
|
|
15
|
+
pha: (batch_size, n_chs, n_freqs_pha, n_segments, seq_len)
|
|
16
|
+
amp: (batch_size, n_chs, n_freqs_amp, n_segments, seq_len)
|
|
17
|
+
"""
|
|
18
|
+
return ModulationIndex(n_bins=n_bins, amp_prob=amp_prob)(pha, amp)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def _reshape(x, batch_size=2, n_chs=4):
|
|
22
|
+
return (
|
|
23
|
+
torch.tensor(x)
|
|
24
|
+
.float()
|
|
25
|
+
.unsqueeze(0)
|
|
26
|
+
.unsqueeze(0)
|
|
27
|
+
.repeat(batch_size, n_chs, 1, 1, 1)
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
if __name__ == "__main__":
|
|
32
|
+
import sys
|
|
33
|
+
|
|
34
|
+
import matplotlib.pyplot as plt
|
|
35
|
+
import scitex
|
|
36
|
+
|
|
37
|
+
# Start
|
|
38
|
+
CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.gen.start(sys, plt, fig_scale=3)
|
|
39
|
+
|
|
40
|
+
# Parameters
|
|
41
|
+
FS = 512
|
|
42
|
+
T_SEC = 5
|
|
43
|
+
|
|
44
|
+
# Demo signal
|
|
45
|
+
xx, tt, fs = scitex.dsp.demo_sig(fs=FS, t_sec=T_SEC, sig_type="tensorpac")
|
|
46
|
+
# xx.shape: (8, 19, 20, 512)
|
|
47
|
+
|
|
48
|
+
# Tensorpac
|
|
49
|
+
(
|
|
50
|
+
pha,
|
|
51
|
+
amp,
|
|
52
|
+
freqs_pha,
|
|
53
|
+
freqs_amp,
|
|
54
|
+
pac_tp,
|
|
55
|
+
) = scitex.dsp.utils.pac.calc_pac_with_tensorpac(xx, fs, t_sec=T_SEC)
|
|
56
|
+
|
|
57
|
+
# GPU calculation with scitex.dsp.nn.ModulationIndex
|
|
58
|
+
pha, amp = _reshape(pha), _reshape(amp)
|
|
59
|
+
pac_scitex = scitex.dsp.modulation_index(pha, amp).cpu().numpy()
|
|
60
|
+
i_batch, i_ch = 0, 0
|
|
61
|
+
pac_scitex = pac_scitex[i_batch, i_ch]
|
|
62
|
+
|
|
63
|
+
# Plots
|
|
64
|
+
fig = scitex.dsp.utils.pac.plot_PAC_scitex_vs_tensorpac(
|
|
65
|
+
pac_scitex, pac_tp, freqs_pha, freqs_amp
|
|
66
|
+
)
|
|
67
|
+
fig.suptitle("MI (modulation index) calculation")
|
|
68
|
+
scitex.io.save(fig, "modulation_index.png")
|
|
69
|
+
|
|
70
|
+
# Close
|
|
71
|
+
scitex.gen.close(CONFIG)
|
|
72
|
+
|
|
73
|
+
# EOF
|
|
74
|
+
|
|
75
|
+
"""
|
|
76
|
+
/home/ywatanabe/proj/entrance/scitex/dsp/_modulation_index.py
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
# EOF
|
scitex/dsp/_pac.py
ADDED
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-26 22:24:40 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/dsp/_pac.py
|
|
5
|
+
|
|
6
|
+
THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/dsp/_pac.py"
|
|
7
|
+
|
|
8
|
+
import sys
|
|
9
|
+
|
|
10
|
+
import matplotlib.pyplot as plt
|
|
11
|
+
import numpy as np
|
|
12
|
+
import torch
|
|
13
|
+
from ..str import printc
|
|
14
|
+
|
|
15
|
+
from ..decorators import signal_fn, batch_fn
|
|
16
|
+
from ..nn._PAC import PAC
|
|
17
|
+
|
|
18
|
+
"""
|
|
19
|
+
scitex.dsp.pac function
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# @batch_fn
|
|
24
|
+
@signal_fn
|
|
25
|
+
def pac(
|
|
26
|
+
x,
|
|
27
|
+
fs,
|
|
28
|
+
pha_start_hz=2,
|
|
29
|
+
pha_end_hz=20,
|
|
30
|
+
pha_n_bands=100,
|
|
31
|
+
amp_start_hz=60,
|
|
32
|
+
amp_end_hz=160,
|
|
33
|
+
amp_n_bands=100,
|
|
34
|
+
device="cuda",
|
|
35
|
+
batch_size=1,
|
|
36
|
+
batch_size_ch=-1,
|
|
37
|
+
fp16=False,
|
|
38
|
+
trainable=False,
|
|
39
|
+
n_perm=None,
|
|
40
|
+
amp_prob=False,
|
|
41
|
+
):
|
|
42
|
+
"""
|
|
43
|
+
Compute the phase-amplitude coupling (PAC) for signals. This function automatically handles inputs as
|
|
44
|
+
PyTorch tensors, NumPy arrays, or pandas DataFrames.
|
|
45
|
+
|
|
46
|
+
Arguments:
|
|
47
|
+
- x (torch.Tensor | np.ndarray | pd.DataFrame): Input signal. Shape can be either (batch_size, n_chs, seq_len) or
|
|
48
|
+
- fs (float): Sampling frequency of the input signal.
|
|
49
|
+
- pha_start_hz (float, optional): Start frequency for phase bands. Default is 2 Hz.
|
|
50
|
+
- pha_end_hz (float, optional): End frequency for phase bands. Default is 20 Hz.
|
|
51
|
+
- pha_n_bands (int, optional): Number of phase bands. Default is 100.
|
|
52
|
+
- amp_start_hz (float, optional): Start frequency for amplitude bands. Default is 60 Hz.
|
|
53
|
+
- amp_end_hz (float, optional): End frequency for amplitude bands. Default is 160 Hz.
|
|
54
|
+
- amp_n_bands (int, optional): Number of amplitude bands. Default is 100.
|
|
55
|
+
|
|
56
|
+
Returns:
|
|
57
|
+
- torch.Tensor: PAC values. Shape: (batch_size, n_chs, pha_n_bands, amp_n_bands)
|
|
58
|
+
- numpy.ndarray: Phase bands used for the computation.
|
|
59
|
+
- numpy.ndarray: Amplitude bands used for the computation.
|
|
60
|
+
|
|
61
|
+
Example:
|
|
62
|
+
FS = 512
|
|
63
|
+
T_SEC = 4
|
|
64
|
+
xx, tt, fs = scitex.dsp.demo_sig(
|
|
65
|
+
batch_size=1, n_chs=1, fs=FS, t_sec=T_SEC, sig_type="tensorpac"
|
|
66
|
+
)
|
|
67
|
+
pac, pha_mids_hz, amp_mids_hz = scitex.dsp.pac(xx, fs)
|
|
68
|
+
"""
|
|
69
|
+
|
|
70
|
+
def process_ch_batching(m, x, batch_size_ch, device):
|
|
71
|
+
n_chs = x.shape[1]
|
|
72
|
+
n_batches = (n_chs + batch_size_ch - 1) // batch_size_ch
|
|
73
|
+
|
|
74
|
+
agg = []
|
|
75
|
+
for ii in range(n_batches):
|
|
76
|
+
start, end = batch_size_ch * ii, min(batch_size_ch * (ii + 1), n_chs)
|
|
77
|
+
_pac = m(x[:, start:end, :].to(device)).detach().cpu()
|
|
78
|
+
agg.append(_pac)
|
|
79
|
+
|
|
80
|
+
# return np.concatenate(agg, axis=1)
|
|
81
|
+
return torch.cat(agg, dim=1)
|
|
82
|
+
|
|
83
|
+
m = PAC(
|
|
84
|
+
x.shape[-1],
|
|
85
|
+
fs,
|
|
86
|
+
pha_start_hz=pha_start_hz,
|
|
87
|
+
pha_end_hz=pha_end_hz,
|
|
88
|
+
pha_n_bands=pha_n_bands,
|
|
89
|
+
amp_start_hz=amp_start_hz,
|
|
90
|
+
amp_end_hz=amp_end_hz,
|
|
91
|
+
amp_n_bands=amp_n_bands,
|
|
92
|
+
fp16=fp16,
|
|
93
|
+
trainable=trainable,
|
|
94
|
+
n_perm=n_perm,
|
|
95
|
+
amp_prob=amp_prob,
|
|
96
|
+
).to(device)
|
|
97
|
+
|
|
98
|
+
if batch_size_ch == -1:
|
|
99
|
+
return m(x.to(device)), m.PHA_MIDS_HZ, m.AMP_MIDS_HZ
|
|
100
|
+
else:
|
|
101
|
+
return (
|
|
102
|
+
process_ch_batching(m, x, batch_size_ch, device),
|
|
103
|
+
m.PHA_MIDS_HZ,
|
|
104
|
+
m.AMP_MIDS_HZ,
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
if __name__ == "__main__":
|
|
109
|
+
import matplotlib.pyplot as plt
|
|
110
|
+
import scitex
|
|
111
|
+
|
|
112
|
+
# Start
|
|
113
|
+
CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.gen.start(sys, plt)
|
|
114
|
+
|
|
115
|
+
pac, freqs_pha, freqs_amp = scitex.dsp.pac(
|
|
116
|
+
np.random.rand(1, 16, 24000),
|
|
117
|
+
400,
|
|
118
|
+
batch_size=1,
|
|
119
|
+
batch_size_ch=8,
|
|
120
|
+
fp16=True,
|
|
121
|
+
n_perm=16,
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
# # Parameters
|
|
125
|
+
# FS = 512
|
|
126
|
+
# T_SEC = 4
|
|
127
|
+
# # IS_TRAINABLE = False
|
|
128
|
+
# # FP16 = True
|
|
129
|
+
|
|
130
|
+
# for IS_TRAINABLE in [True, False]:
|
|
131
|
+
# for FP16 in [True, False]:
|
|
132
|
+
|
|
133
|
+
# # Demo signal
|
|
134
|
+
# xx, tt, fs = scitex.dsp.demo_sig(
|
|
135
|
+
# batch_size=1, n_chs=1, fs=FS, t_sec=T_SEC, sig_type="pac"
|
|
136
|
+
# )
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
# # scitex.str.print_debug()
|
|
140
|
+
# # xx = np.random.rand(1,16,24000)
|
|
141
|
+
# # fs = 400
|
|
142
|
+
|
|
143
|
+
# # scitex calculation
|
|
144
|
+
# pac_scitex, pha_mids_scitex, amp_mids_scitex = scitex.dsp.pac(
|
|
145
|
+
# xx,
|
|
146
|
+
# fs,
|
|
147
|
+
# pha_n_bands=50,
|
|
148
|
+
# amp_n_bands=30,
|
|
149
|
+
# trainable=IS_TRAINABLE,
|
|
150
|
+
# fp16=FP16,
|
|
151
|
+
# )
|
|
152
|
+
# i_batch, i_ch = 0, 0
|
|
153
|
+
# pac_scitex = pac_scitex[i_batch, i_ch]
|
|
154
|
+
|
|
155
|
+
# printc(type(pac_scitex))
|
|
156
|
+
|
|
157
|
+
# # Tensorpac calculation
|
|
158
|
+
# (
|
|
159
|
+
# _,
|
|
160
|
+
# _,
|
|
161
|
+
# _pha_mids_tp,
|
|
162
|
+
# _amp_mids_tp,
|
|
163
|
+
# pac_tp,
|
|
164
|
+
# ) = scitex.dsp.utils.pac.calc_pac_with_tensorpac(xx, fs, T_SEC)
|
|
165
|
+
|
|
166
|
+
# # Validates the consitency in frequency definitions
|
|
167
|
+
# assert np.allclose(
|
|
168
|
+
# pha_mids_scitex, _pha_mids_tp
|
|
169
|
+
# )
|
|
170
|
+
# assert np.allclose(
|
|
171
|
+
# amp_mids_scitex, _amp_mids_tp
|
|
172
|
+
# )
|
|
173
|
+
|
|
174
|
+
# scitex.io.save(
|
|
175
|
+
# (pac_scitex, pac_tp, pha_mids_scitex, amp_mids_scitex),
|
|
176
|
+
# "./data/cache.npz",
|
|
177
|
+
# )
|
|
178
|
+
|
|
179
|
+
# # ################################################################################
|
|
180
|
+
# # # cache
|
|
181
|
+
# # pac_scitex, pac_tp, pha_mids_scitex, amp_mids_scitex = scitex.io.load(
|
|
182
|
+
# # "./data/cache.npz"
|
|
183
|
+
# # )
|
|
184
|
+
# # ################################################################################
|
|
185
|
+
|
|
186
|
+
# # Plots
|
|
187
|
+
# fig = scitex.dsp.utils.pac.plot_PAC_scitex_vs_tensorpac(
|
|
188
|
+
# pac_scitex, pac_tp, pha_mids_scitex, amp_mids_scitex
|
|
189
|
+
# )
|
|
190
|
+
# fig.suptitle(
|
|
191
|
+
# "Phase-Amplitude Coupling calculation\n\n(Bandpass Filtering -> Hilbert Transformation-> Modulation Index)"
|
|
192
|
+
# )
|
|
193
|
+
# plt.show()
|
|
194
|
+
|
|
195
|
+
# scitex.gen.reload(scitex.dsp)
|
|
196
|
+
|
|
197
|
+
# # Saves the figure
|
|
198
|
+
# trainable_str = "trainable" if IS_TRAINABLE else "static"
|
|
199
|
+
# fp_str = "fp16" if FP16 else "fp32"
|
|
200
|
+
# scitex.io.save(
|
|
201
|
+
# fig, f"pac_with_{trainable_str}_bandpass_{fp_str}.png"
|
|
202
|
+
# )
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
# def run_method_tests():
|
|
206
|
+
# import scitex
|
|
207
|
+
|
|
208
|
+
# # Test parameters
|
|
209
|
+
# FS = 512
|
|
210
|
+
# T_SEC = 4
|
|
211
|
+
|
|
212
|
+
# class PACProcessor:
|
|
213
|
+
# @batch_torch_fn
|
|
214
|
+
# def process_pac(self, x, fs, **kwargs):
|
|
215
|
+
# return pac(x, fs, **kwargs)
|
|
216
|
+
|
|
217
|
+
# @signal_fn
|
|
218
|
+
# def process_signal(self, x):
|
|
219
|
+
# return x * 2
|
|
220
|
+
|
|
221
|
+
# def run_method_basic_tests():
|
|
222
|
+
# processor = PACProcessor()
|
|
223
|
+
|
|
224
|
+
# # Generate test signal
|
|
225
|
+
# xx, tt, fs = scitex.dsp.demo_sig(
|
|
226
|
+
# batch_size=1, n_chs=1, fs=FS, t_sec=T_SEC, sig_type="pac"
|
|
227
|
+
# )
|
|
228
|
+
|
|
229
|
+
# try:
|
|
230
|
+
# # Test method with batch processing
|
|
231
|
+
# result_batch, pha_mids, amp_mids = processor.process_pac(
|
|
232
|
+
# xx, fs, pha_n_bands=50, amp_n_bands=30, batch_size=1
|
|
233
|
+
# )
|
|
234
|
+
# assert torch.is_tensor(result_batch)
|
|
235
|
+
|
|
236
|
+
# # Test basic torch method
|
|
237
|
+
# result_torch = processor.process_signal(xx)
|
|
238
|
+
# assert torch.is_tensor(result_torch)
|
|
239
|
+
|
|
240
|
+
# scitex.str.printc("Passed: Basic method tests", "yellow")
|
|
241
|
+
# except Exception as err:
|
|
242
|
+
# scitex.str.printc(f"Failed: Basic method tests - {str(err)}", "red")
|
|
243
|
+
|
|
244
|
+
# def run_method_cuda_tests():
|
|
245
|
+
# if not torch.cuda.is_available():
|
|
246
|
+
# scitex.str.printc(
|
|
247
|
+
# "CUDA method tests skipped: No GPU available", "yellow"
|
|
248
|
+
# )
|
|
249
|
+
# return
|
|
250
|
+
|
|
251
|
+
# processor = PACProcessor()
|
|
252
|
+
# xx, tt, fs = scitex.dsp.demo_sig(
|
|
253
|
+
# batch_size=1, n_chs=1, fs=FS, t_sec=T_SEC, sig_type="pac"
|
|
254
|
+
# )
|
|
255
|
+
|
|
256
|
+
# try:
|
|
257
|
+
# # Test with CUDA
|
|
258
|
+
# result_cuda, _, _ = processor.process_pac(xx, fs, device="cuda")
|
|
259
|
+
# assert result_cuda.device.type == "cuda"
|
|
260
|
+
|
|
261
|
+
# result_torch = processor.process_signal(xx, device="cuda")
|
|
262
|
+
# assert result_torch.device.type == "cuda"
|
|
263
|
+
|
|
264
|
+
# scitex.str.printc("Passed: CUDA method tests", "yellow")
|
|
265
|
+
# except Exception as err:
|
|
266
|
+
# scitex.str.printc(f"Failed: CUDA method tests - {str(err)}", "red")
|
|
267
|
+
|
|
268
|
+
# def run_method_batch_size_tests():
|
|
269
|
+
# processor = PACProcessor()
|
|
270
|
+
# batch_sizes = [1, 2, 4]
|
|
271
|
+
|
|
272
|
+
# for batch_size in batch_sizes:
|
|
273
|
+
# try:
|
|
274
|
+
# xx, tt, fs = scitex.dsp.demo_sig(
|
|
275
|
+
# batch_size=batch_size,
|
|
276
|
+
# n_chs=1,
|
|
277
|
+
# fs=FS,
|
|
278
|
+
# t_sec=T_SEC,
|
|
279
|
+
# sig_type="pac",
|
|
280
|
+
# )
|
|
281
|
+
|
|
282
|
+
# result, _, _ = processor.process_pac(
|
|
283
|
+
# xx, fs, batch_size=batch_size
|
|
284
|
+
# )
|
|
285
|
+
# assert result.shape[0] == batch_size
|
|
286
|
+
|
|
287
|
+
# scitex.str.printc(
|
|
288
|
+
# f"Passed: Method batch size test with size={batch_size}",
|
|
289
|
+
# "yellow",
|
|
290
|
+
# )
|
|
291
|
+
# except Exception as err:
|
|
292
|
+
# scitex.str.printc(
|
|
293
|
+
# f"Failed: Method batch size test with size={batch_size} - {str(err)}",
|
|
294
|
+
# "red",
|
|
295
|
+
# )
|
|
296
|
+
|
|
297
|
+
# # Execute method test suites
|
|
298
|
+
# test_suites = [
|
|
299
|
+
# ("Method Basic Tests", run_method_basic_tests),
|
|
300
|
+
# ("Method CUDA Tests", run_method_cuda_tests),
|
|
301
|
+
# ("Method Batch Size Tests", run_method_batch_size_tests),
|
|
302
|
+
# ]
|
|
303
|
+
|
|
304
|
+
# for test_name, test_func in test_suites:
|
|
305
|
+
# test_func()
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
# if __name__ == "__main__":
|
|
309
|
+
# run_method_tests()
|
|
310
|
+
|
|
311
|
+
# # EOF
|
|
312
|
+
|
|
313
|
+
# """
|
|
314
|
+
# python -m scitex.dsp._pac
|
|
315
|
+
# """
|
|
316
|
+
|
|
317
|
+
#
|
|
318
|
+
|
|
319
|
+
# EOF
|
scitex/dsp/_psd.py
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-04 02:11:25 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/dsp/_psd.py
|
|
5
|
+
|
|
6
|
+
"""This script does XYZ."""
|
|
7
|
+
|
|
8
|
+
import torch
|
|
9
|
+
|
|
10
|
+
from ..decorators import signal_fn
|
|
11
|
+
from ..nn._PSD import PSD
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@signal_fn
|
|
15
|
+
def psd(
|
|
16
|
+
x,
|
|
17
|
+
fs,
|
|
18
|
+
prob=False,
|
|
19
|
+
dim=-1,
|
|
20
|
+
):
|
|
21
|
+
"""
|
|
22
|
+
import matplotlib.pyplot as plt
|
|
23
|
+
|
|
24
|
+
x, t, fs = scitex.dsp.demo_sig() # (batch_size, n_chs, seq_len)
|
|
25
|
+
pp, ff = psd(x, fs)
|
|
26
|
+
|
|
27
|
+
# Plots
|
|
28
|
+
plt, CC = scitex.plt.configure_mpl(plt)
|
|
29
|
+
fig, ax = scitex.plt.subplots()
|
|
30
|
+
ax.plot(fs, pp[0, 0])
|
|
31
|
+
ax.xlabel("Frequency [Hz]")
|
|
32
|
+
ax.ylabel("log(Power [uV^2 / Hz]) [a.u.]")
|
|
33
|
+
plt.show()
|
|
34
|
+
"""
|
|
35
|
+
psd, freqs = PSD(fs, prob=prob, dim=dim)(x)
|
|
36
|
+
return psd, freqs
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def band_powers(self, psd):
|
|
40
|
+
"""
|
|
41
|
+
Calculate the average power for specified frequency bands.
|
|
42
|
+
"""
|
|
43
|
+
assert len(self.low_freqs) == len(self.high_freqs)
|
|
44
|
+
|
|
45
|
+
out = []
|
|
46
|
+
for ll, hh in zip(self.low_freqs, self.high_freqs):
|
|
47
|
+
band_indices = torch.where((freqs >= ll) & (freqs <= hh))[0].to(psd.device)
|
|
48
|
+
band_power = psd[..., band_indices].sum(dim=self.dim)
|
|
49
|
+
bandwidth = hh - ll
|
|
50
|
+
avg_band_power = band_power / bandwidth
|
|
51
|
+
out.append(avg_band_power)
|
|
52
|
+
out = torch.stack(out, dim=-1)
|
|
53
|
+
return out
|
|
54
|
+
|
|
55
|
+
# Average Power in Each Frequency Band
|
|
56
|
+
avg_band_powers = self.calc_band_avg_power(psd, freqs)
|
|
57
|
+
return (avg_band_powers,)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
if __name__ == "__main__":
|
|
61
|
+
import sys
|
|
62
|
+
import scitex
|
|
63
|
+
|
|
64
|
+
import matplotlib.pyplot as plt
|
|
65
|
+
|
|
66
|
+
# Start
|
|
67
|
+
CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.gen.start(sys, plt)
|
|
68
|
+
|
|
69
|
+
# Parameters
|
|
70
|
+
SIG_TYPE = "chirp"
|
|
71
|
+
|
|
72
|
+
# Demo signal
|
|
73
|
+
xx, tt, fs = scitex.dsp.demo_sig(SIG_TYPE) # (8, 19, 384)
|
|
74
|
+
|
|
75
|
+
# PSD calculation
|
|
76
|
+
pp, ff = psd(xx, fs, prob=True)
|
|
77
|
+
|
|
78
|
+
# Plots
|
|
79
|
+
fig, axes = scitex.plt.subplots(nrows=2)
|
|
80
|
+
|
|
81
|
+
axes[0].plot(tt, xx[0, 0], label=SIG_TYPE)
|
|
82
|
+
axes[1].set_title("Signal")
|
|
83
|
+
axes[0].set_xlabel("Time [s]")
|
|
84
|
+
axes[0].set_ylabel("Amplitude [?V]")
|
|
85
|
+
|
|
86
|
+
axes[1].plot(ff, pp[0, 0])
|
|
87
|
+
axes[1].set_title("PSD (power spectrum density)")
|
|
88
|
+
axes[1].set_xlabel("Frequency [Hz]")
|
|
89
|
+
axes[1].set_ylabel("Log(Power [?V^2 / Hz]) [a.u.]")
|
|
90
|
+
|
|
91
|
+
scitex.io.save(fig, "psd.png")
|
|
92
|
+
|
|
93
|
+
# Close
|
|
94
|
+
scitex.gen.close(CONFIG)
|
|
95
|
+
|
|
96
|
+
# EOF
|
|
97
|
+
|
|
98
|
+
"""
|
|
99
|
+
/home/ywatanabe/proj/entrance/scitex/dsp/_psd.py
|
|
100
|
+
"""
|
|
101
|
+
|
|
102
|
+
# EOF
|
scitex/dsp/_resample.py
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-04-13 02:35:11 (ywatanabe)"
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
import torch
|
|
7
|
+
import torchaudio.transforms as T
|
|
8
|
+
from ..decorators import signal_fn
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@signal_fn
|
|
12
|
+
def resample(x, src_fs, tgt_fs, t=None):
|
|
13
|
+
xr = T.Resample(src_fs, tgt_fs, dtype=x.dtype).to(x.device)(x)
|
|
14
|
+
if t is None:
|
|
15
|
+
return xr
|
|
16
|
+
if t is not None:
|
|
17
|
+
tr = torch.linspace(t[0], t[-1], xr.shape[-1])
|
|
18
|
+
return xr, tr
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
if __name__ == "__main__":
|
|
22
|
+
import sys
|
|
23
|
+
|
|
24
|
+
import matplotlib.pyplot as plt
|
|
25
|
+
|
|
26
|
+
# Start
|
|
27
|
+
CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.gen.start(sys, plt)
|
|
28
|
+
|
|
29
|
+
# Parameters
|
|
30
|
+
T_SEC = 1
|
|
31
|
+
SIG_TYPE = "chirp"
|
|
32
|
+
SRC_FS = 128
|
|
33
|
+
TGT_FS_UP = 256
|
|
34
|
+
TGT_FS_DOWN = 64
|
|
35
|
+
FREQS_HZ = [10, 30, 100, 300]
|
|
36
|
+
|
|
37
|
+
# Demo Signal
|
|
38
|
+
xx, tt, fs = scitex.dsp.demo_sig(
|
|
39
|
+
t_sec=T_SEC, fs=SRC_FS, freqs_hz=FREQS_HZ, sig_type=SIG_TYPE
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
# Resampling
|
|
43
|
+
xd, td = scitex.dsp.resample(xx, fs, TGT_FS_DOWN, t=tt)
|
|
44
|
+
xu, tu = scitex.dsp.resample(xx, fs, TGT_FS_UP, t=tt)
|
|
45
|
+
|
|
46
|
+
# Plots
|
|
47
|
+
i_batch, i_ch = 0, 0
|
|
48
|
+
fig, axes = plt.subplots(nrows=3, sharex=True, sharey=True)
|
|
49
|
+
axes[0].plot(tt, xx[i_batch, i_ch], label=f"Original ({SRC_FS} Hz)")
|
|
50
|
+
axes[1].plot(td, xd[i_batch, i_ch], label=f"Down-sampled ({TGT_FS_DOWN} Hz)")
|
|
51
|
+
axes[2].plot(tu, xu[i_batch, i_ch], label=f"Up-sampled ({TGT_FS_UP} Hz)")
|
|
52
|
+
for ax in axes:
|
|
53
|
+
ax.legend(loc="upper left")
|
|
54
|
+
|
|
55
|
+
axes[-1].set_xlabel("Time [s]")
|
|
56
|
+
fig.supylabel("Amplitude [?V]")
|
|
57
|
+
fig.suptitle("Resampling")
|
|
58
|
+
scitex.io.save(fig, "traces.png")
|
|
59
|
+
# plt.show()
|
|
60
|
+
|
|
61
|
+
# EOF
|
|
62
|
+
|
|
63
|
+
"""
|
|
64
|
+
/home/ywatanabe/proj/entrance/scitex/dsp/_resample.py
|
|
65
|
+
"""
|
scitex/dsp/_time.py
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#!./env/bin/python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-06-30 12:11:01 (ywatanabe)"
|
|
4
|
+
# /mnt/ssd/ripple-wm-code/scripts/externals/scitex/src/scitex/dsp/_time.py
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
import numpy as np
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def time(start_sec, end_sec, fs):
|
|
11
|
+
# return np.linspace(start_sec, end_sec, (end_sec - start_sec) * fs)
|
|
12
|
+
return scitex.gen.float_linspace(start_sec, end_sec, (end_sec - start_sec) * fs)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def main():
|
|
16
|
+
out = time(10, 15, 256)
|
|
17
|
+
print(out)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
if __name__ == "__main__":
|
|
21
|
+
import sys
|
|
22
|
+
|
|
23
|
+
import matplotlib.pyplot as plt
|
|
24
|
+
|
|
25
|
+
# # Argument Parser
|
|
26
|
+
# import argparse
|
|
27
|
+
# parser = argparse.ArgumentParser(description='')
|
|
28
|
+
# parser.add_argument('--var', '-v', type=int, default=1, help='')
|
|
29
|
+
# parser.add_argument('--flag', '-f', action='store_true', default=False, help='')
|
|
30
|
+
# args = parser.parse_args()
|
|
31
|
+
# Main
|
|
32
|
+
CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.gen.start(sys, plt, verbose=False)
|
|
33
|
+
main()
|
|
34
|
+
scitex.gen.close(CONFIG, verbose=False, notify=False)
|
|
35
|
+
|
|
36
|
+
# EOF
|