scitex 2.0.0__py2.py3-none-any.whl → 2.1.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 +53 -15
- scitex/__main__.py +72 -26
- scitex/__version__.py +1 -1
- scitex/_sh.py +145 -23
- scitex/ai/__init__.py +30 -16
- scitex/ai/_gen_ai/_Anthropic.py +5 -7
- scitex/ai/_gen_ai/_BaseGenAI.py +2 -2
- scitex/ai/_gen_ai/_DeepSeek.py +10 -2
- scitex/ai/_gen_ai/_Google.py +2 -2
- scitex/ai/_gen_ai/_Llama.py +2 -2
- scitex/ai/_gen_ai/_OpenAI.py +2 -2
- scitex/ai/_gen_ai/_PARAMS.py +51 -65
- scitex/ai/_gen_ai/_Perplexity.py +2 -2
- scitex/ai/_gen_ai/__init__.py +25 -14
- scitex/ai/_gen_ai/_format_output_func.py +4 -4
- scitex/ai/classification/{classifier_server.py → Classifier.py} +5 -5
- scitex/ai/classification/CrossValidationExperiment.py +374 -0
- scitex/ai/classification/__init__.py +43 -4
- scitex/ai/classification/reporters/_BaseClassificationReporter.py +281 -0
- scitex/ai/classification/reporters/_ClassificationReporter.py +773 -0
- scitex/ai/classification/reporters/_MultiClassificationReporter.py +406 -0
- scitex/ai/classification/reporters/_SingleClassificationReporter.py +1834 -0
- scitex/ai/classification/reporters/__init__.py +11 -0
- scitex/ai/classification/reporters/reporter_utils/_Plotter.py +1028 -0
- scitex/ai/classification/reporters/reporter_utils/__init__.py +80 -0
- scitex/ai/classification/reporters/reporter_utils/aggregation.py +457 -0
- scitex/ai/classification/reporters/reporter_utils/data_models.py +313 -0
- scitex/ai/classification/reporters/reporter_utils/reporting.py +1056 -0
- scitex/ai/classification/reporters/reporter_utils/storage.py +221 -0
- scitex/ai/classification/reporters/reporter_utils/validation.py +395 -0
- scitex/ai/classification/timeseries/_TimeSeriesBlockingSplit.py +568 -0
- scitex/ai/classification/timeseries/_TimeSeriesCalendarSplit.py +688 -0
- scitex/ai/classification/timeseries/_TimeSeriesMetadata.py +139 -0
- scitex/ai/classification/timeseries/_TimeSeriesSlidingWindowSplit.py +1716 -0
- scitex/ai/classification/timeseries/_TimeSeriesSlidingWindowSplit_v01-not-using-n_splits.py +1685 -0
- scitex/ai/classification/timeseries/_TimeSeriesStrategy.py +84 -0
- scitex/ai/classification/timeseries/_TimeSeriesStratifiedSplit.py +610 -0
- scitex/ai/classification/timeseries/__init__.py +39 -0
- scitex/ai/classification/timeseries/_normalize_timestamp.py +436 -0
- scitex/ai/clustering/_umap.py +2 -2
- scitex/ai/feature_extraction/vit.py +1 -0
- scitex/ai/feature_selection/__init__.py +30 -0
- scitex/ai/feature_selection/feature_selection.py +364 -0
- scitex/ai/loss/multi_task_loss.py +1 -1
- scitex/ai/metrics/__init__.py +51 -4
- scitex/ai/metrics/_calc_bacc.py +61 -0
- scitex/ai/metrics/_calc_bacc_from_conf_mat.py +38 -0
- scitex/ai/metrics/_calc_clf_report.py +78 -0
- scitex/ai/metrics/_calc_conf_mat.py +93 -0
- scitex/ai/metrics/_calc_feature_importance.py +183 -0
- scitex/ai/metrics/_calc_mcc.py +61 -0
- scitex/ai/metrics/_calc_pre_rec_auc.py +116 -0
- scitex/ai/metrics/_calc_roc_auc.py +110 -0
- scitex/ai/metrics/_calc_seizure_prediction_metrics.py +490 -0
- scitex/ai/metrics/{silhoute_score_block.py → _calc_silhouette_score.py} +15 -8
- scitex/ai/metrics/_normalize_labels.py +83 -0
- scitex/ai/plt/__init__.py +47 -8
- scitex/ai/plt/{_conf_mat.py → _plot_conf_mat.py} +158 -87
- scitex/ai/plt/_plot_feature_importance.py +323 -0
- scitex/ai/plt/_plot_learning_curve.py +345 -0
- scitex/ai/plt/_plot_optuna_study.py +225 -0
- scitex/ai/plt/_plot_pre_rec_curve.py +290 -0
- scitex/ai/plt/_plot_roc_curve.py +255 -0
- scitex/ai/training/{learning_curve_logger.py → _LearningCurveLogger.py} +197 -213
- scitex/ai/training/__init__.py +2 -2
- scitex/ai/utils/grid_search.py +3 -3
- scitex/benchmark/__init__.py +52 -0
- scitex/benchmark/benchmark.py +400 -0
- scitex/benchmark/monitor.py +370 -0
- scitex/benchmark/profiler.py +297 -0
- scitex/browser/__init__.py +48 -0
- scitex/browser/automation/CookieHandler.py +216 -0
- scitex/browser/automation/__init__.py +7 -0
- scitex/browser/collaboration/__init__.py +55 -0
- scitex/browser/collaboration/auth_helpers.py +94 -0
- scitex/browser/collaboration/collaborative_agent.py +136 -0
- scitex/browser/collaboration/credential_manager.py +188 -0
- scitex/browser/collaboration/interactive_panel.py +400 -0
- scitex/browser/collaboration/persistent_browser.py +170 -0
- scitex/browser/collaboration/shared_session.py +383 -0
- scitex/browser/collaboration/standard_interactions.py +246 -0
- scitex/browser/collaboration/visual_feedback.py +181 -0
- scitex/browser/core/BrowserMixin.py +326 -0
- scitex/browser/core/ChromeProfileManager.py +446 -0
- scitex/browser/core/__init__.py +9 -0
- scitex/browser/debugging/__init__.py +18 -0
- scitex/browser/debugging/_browser_logger.py +657 -0
- scitex/browser/debugging/_highlight_element.py +143 -0
- scitex/browser/debugging/_show_grid.py +154 -0
- scitex/browser/interaction/__init__.py +24 -0
- scitex/browser/interaction/click_center.py +149 -0
- scitex/browser/interaction/click_with_fallbacks.py +206 -0
- scitex/browser/interaction/close_popups.py +498 -0
- scitex/browser/interaction/fill_with_fallbacks.py +209 -0
- scitex/browser/pdf/__init__.py +14 -0
- scitex/browser/pdf/click_download_for_chrome_pdf_viewer.py +200 -0
- scitex/browser/pdf/detect_chrome_pdf_viewer.py +198 -0
- scitex/browser/remote/CaptchaHandler.py +434 -0
- scitex/browser/remote/ZenRowsAPIClient.py +347 -0
- scitex/browser/remote/ZenRowsBrowserManager.py +570 -0
- scitex/browser/remote/__init__.py +11 -0
- scitex/browser/stealth/HumanBehavior.py +344 -0
- scitex/browser/stealth/StealthManager.py +1008 -0
- scitex/browser/stealth/__init__.py +9 -0
- scitex/browser/template.py +122 -0
- scitex/capture/__init__.py +110 -0
- scitex/capture/__main__.py +25 -0
- scitex/capture/capture.py +848 -0
- scitex/capture/cli.py +233 -0
- scitex/capture/gif.py +344 -0
- scitex/capture/mcp_server.py +961 -0
- scitex/capture/session.py +70 -0
- scitex/capture/utils.py +705 -0
- scitex/cli/__init__.py +17 -0
- scitex/cli/cloud.py +447 -0
- scitex/cli/main.py +42 -0
- scitex/cli/scholar.py +280 -0
- scitex/context/_suppress_output.py +5 -3
- scitex/db/__init__.py +30 -3
- scitex/db/__main__.py +75 -0
- scitex/db/_check_health.py +381 -0
- scitex/db/_delete_duplicates.py +25 -386
- scitex/db/_inspect.py +335 -114
- scitex/db/_inspect_optimized.py +301 -0
- scitex/db/{_PostgreSQL.py → _postgresql/_PostgreSQL.py} +3 -3
- scitex/db/{_PostgreSQLMixins → _postgresql/_PostgreSQLMixins}/_BackupMixin.py +1 -1
- scitex/db/{_PostgreSQLMixins → _postgresql/_PostgreSQLMixins}/_BatchMixin.py +1 -1
- scitex/db/{_PostgreSQLMixins → _postgresql/_PostgreSQLMixins}/_BlobMixin.py +1 -1
- scitex/db/{_PostgreSQLMixins → _postgresql/_PostgreSQLMixins}/_ConnectionMixin.py +1 -1
- scitex/db/{_PostgreSQLMixins → _postgresql/_PostgreSQLMixins}/_MaintenanceMixin.py +1 -1
- scitex/db/{_PostgreSQLMixins → _postgresql/_PostgreSQLMixins}/_QueryMixin.py +1 -1
- scitex/db/{_PostgreSQLMixins → _postgresql/_PostgreSQLMixins}/_SchemaMixin.py +1 -1
- scitex/db/{_PostgreSQLMixins → _postgresql/_PostgreSQLMixins}/_TransactionMixin.py +1 -1
- scitex/db/_postgresql/__init__.py +6 -0
- scitex/db/_sqlite3/_SQLite3.py +210 -0
- scitex/db/_sqlite3/_SQLite3Mixins/_ArrayMixin.py +581 -0
- scitex/db/_sqlite3/_SQLite3Mixins/_ArrayMixin_v01-need-_hash-col.py +517 -0
- scitex/db/{_SQLite3Mixins → _sqlite3/_SQLite3Mixins}/_BatchMixin.py +1 -1
- scitex/db/_sqlite3/_SQLite3Mixins/_BlobMixin.py +281 -0
- scitex/db/_sqlite3/_SQLite3Mixins/_ColumnMixin.py +548 -0
- scitex/db/_sqlite3/_SQLite3Mixins/_ColumnMixin_v01-indentation-issues.py +583 -0
- scitex/db/{_SQLite3Mixins → _sqlite3/_SQLite3Mixins}/_ConnectionMixin.py +29 -13
- scitex/db/_sqlite3/_SQLite3Mixins/_GitMixin.py +583 -0
- scitex/db/{_SQLite3Mixins → _sqlite3/_SQLite3Mixins}/_ImportExportMixin.py +1 -1
- scitex/db/{_SQLite3Mixins → _sqlite3/_SQLite3Mixins}/_IndexMixin.py +1 -1
- scitex/db/{_SQLite3Mixins → _sqlite3/_SQLite3Mixins}/_MaintenanceMixin.py +2 -1
- scitex/db/{_SQLite3Mixins → _sqlite3/_SQLite3Mixins}/_QueryMixin.py +37 -10
- scitex/db/{_SQLite3Mixins → _sqlite3/_SQLite3Mixins}/_RowMixin.py +46 -6
- scitex/db/{_SQLite3Mixins → _sqlite3/_SQLite3Mixins}/_TableMixin.py +56 -10
- scitex/db/{_SQLite3Mixins → _sqlite3/_SQLite3Mixins}/_TransactionMixin.py +1 -1
- scitex/db/{_SQLite3Mixins → _sqlite3/_SQLite3Mixins}/__init__.py +14 -2
- scitex/db/_sqlite3/__init__.py +7 -0
- scitex/db/_sqlite3/_delete_duplicates.py +274 -0
- scitex/decorators/__init__.py +2 -0
- scitex/decorators/_cache_disk.py +13 -5
- scitex/decorators/_cache_disk_async.py +49 -0
- scitex/decorators/_deprecated.py +175 -10
- scitex/decorators/_timeout.py +1 -1
- scitex/dev/_analyze_code_flow.py +2 -2
- scitex/dict/_DotDict.py +73 -15
- scitex/dict/_DotDict_v01-not-handling-recursive-instantiations.py +442 -0
- scitex/dict/_DotDict_v02-not-serializing-Path-object.py +446 -0
- scitex/dict/__init__.py +2 -0
- scitex/dict/_flatten.py +27 -0
- scitex/dsp/_crop.py +2 -2
- scitex/dsp/_demo_sig.py +2 -2
- scitex/dsp/_detect_ripples.py +2 -2
- scitex/dsp/_hilbert.py +2 -2
- scitex/dsp/_listen.py +6 -6
- scitex/dsp/_modulation_index.py +2 -2
- scitex/dsp/_pac.py +1 -1
- scitex/dsp/_psd.py +2 -2
- scitex/dsp/_resample.py +2 -1
- scitex/dsp/_time.py +3 -2
- scitex/dsp/_wavelet.py +3 -2
- scitex/dsp/add_noise.py +2 -2
- scitex/dsp/example.py +1 -0
- scitex/dsp/filt.py +10 -9
- scitex/dsp/template.py +3 -2
- scitex/dsp/utils/_differential_bandpass_filters.py +1 -1
- scitex/dsp/utils/pac.py +2 -2
- scitex/dt/_normalize_timestamp.py +432 -0
- scitex/errors.py +572 -0
- scitex/gen/_DimHandler.py +2 -2
- scitex/gen/__init__.py +37 -7
- scitex/gen/_deprecated_close.py +80 -0
- scitex/gen/_deprecated_start.py +26 -0
- scitex/gen/_detect_environment.py +152 -0
- scitex/gen/_detect_notebook_path.py +169 -0
- scitex/gen/_embed.py +6 -2
- scitex/gen/_get_notebook_path.py +257 -0
- scitex/gen/_less.py +1 -1
- scitex/gen/_list_packages.py +2 -2
- scitex/gen/_norm.py +44 -9
- scitex/gen/_norm_cache.py +269 -0
- scitex/gen/_src.py +3 -5
- scitex/gen/_title_case.py +3 -3
- scitex/io/__init__.py +28 -6
- scitex/io/_glob.py +13 -7
- scitex/io/_load.py +108 -21
- scitex/io/_load_cache.py +303 -0
- scitex/io/_load_configs.py +40 -15
- scitex/io/{_H5Explorer.py → _load_modules/_H5Explorer.py} +80 -17
- scitex/io/_load_modules/_ZarrExplorer.py +114 -0
- scitex/io/_load_modules/_bibtex.py +207 -0
- scitex/io/_load_modules/_hdf5.py +53 -178
- scitex/io/_load_modules/_json.py +5 -3
- scitex/io/_load_modules/_pdf.py +871 -16
- scitex/io/_load_modules/_sqlite3.py +15 -0
- scitex/io/_load_modules/_txt.py +41 -12
- scitex/io/_load_modules/_yaml.py +4 -3
- scitex/io/_load_modules/_zarr.py +126 -0
- scitex/io/_save.py +429 -171
- scitex/io/_save_modules/__init__.py +6 -0
- scitex/io/_save_modules/_bibtex.py +194 -0
- scitex/io/_save_modules/_csv.py +8 -4
- scitex/io/_save_modules/_excel.py +174 -15
- scitex/io/_save_modules/_hdf5.py +251 -226
- scitex/io/_save_modules/_image.py +1 -3
- scitex/io/_save_modules/_json.py +49 -4
- scitex/io/_save_modules/_listed_dfs_as_csv.py +1 -3
- scitex/io/_save_modules/_listed_scalars_as_csv.py +1 -3
- scitex/io/_save_modules/_tex.py +277 -0
- scitex/io/_save_modules/_yaml.py +42 -3
- scitex/io/_save_modules/_zarr.py +160 -0
- scitex/io/utils/__init__.py +20 -0
- scitex/io/utils/h5_to_zarr.py +616 -0
- scitex/linalg/_geometric_median.py +6 -2
- scitex/{gen/_tee.py → logging/_Tee.py} +43 -84
- scitex/logging/__init__.py +122 -0
- scitex/logging/_config.py +158 -0
- scitex/logging/_context.py +103 -0
- scitex/logging/_formatters.py +128 -0
- scitex/logging/_handlers.py +64 -0
- scitex/logging/_levels.py +35 -0
- scitex/logging/_logger.py +163 -0
- scitex/logging/_print_capture.py +95 -0
- scitex/ml/__init__.py +69 -0
- scitex/{ai/genai/anthropic.py → ml/_gen_ai/_Anthropic.py} +13 -19
- scitex/{ai/genai/base_genai.py → ml/_gen_ai/_BaseGenAI.py} +5 -5
- scitex/{ai/genai/deepseek.py → ml/_gen_ai/_DeepSeek.py} +11 -16
- scitex/{ai/genai/google.py → ml/_gen_ai/_Google.py} +7 -15
- scitex/{ai/genai/groq.py → ml/_gen_ai/_Groq.py} +1 -8
- scitex/{ai/genai/llama.py → ml/_gen_ai/_Llama.py} +3 -16
- scitex/{ai/genai/openai.py → ml/_gen_ai/_OpenAI.py} +3 -3
- scitex/{ai/genai/params.py → ml/_gen_ai/_PARAMS.py} +51 -65
- scitex/{ai/genai/perplexity.py → ml/_gen_ai/_Perplexity.py} +3 -14
- scitex/ml/_gen_ai/__init__.py +43 -0
- scitex/{ai/genai/calc_cost.py → ml/_gen_ai/_calc_cost.py} +1 -1
- scitex/{ai/genai/format_output_func.py → ml/_gen_ai/_format_output_func.py} +4 -4
- scitex/{ai/genai/genai_factory.py → ml/_gen_ai/_genai_factory.py} +8 -8
- scitex/ml/activation/__init__.py +8 -0
- scitex/ml/activation/_define.py +11 -0
- scitex/{ai/classifier_server.py → ml/classification/Classifier.py} +5 -5
- scitex/ml/classification/CrossValidationExperiment.py +374 -0
- scitex/ml/classification/__init__.py +46 -0
- scitex/ml/classification/reporters/_BaseClassificationReporter.py +281 -0
- scitex/ml/classification/reporters/_ClassificationReporter.py +773 -0
- scitex/ml/classification/reporters/_MultiClassificationReporter.py +406 -0
- scitex/ml/classification/reporters/_SingleClassificationReporter.py +1834 -0
- scitex/ml/classification/reporters/__init__.py +11 -0
- scitex/ml/classification/reporters/reporter_utils/_Plotter.py +1028 -0
- scitex/ml/classification/reporters/reporter_utils/__init__.py +80 -0
- scitex/ml/classification/reporters/reporter_utils/aggregation.py +457 -0
- scitex/ml/classification/reporters/reporter_utils/data_models.py +313 -0
- scitex/ml/classification/reporters/reporter_utils/reporting.py +1056 -0
- scitex/ml/classification/reporters/reporter_utils/storage.py +221 -0
- scitex/ml/classification/reporters/reporter_utils/validation.py +395 -0
- scitex/ml/classification/timeseries/_TimeSeriesBlockingSplit.py +568 -0
- scitex/ml/classification/timeseries/_TimeSeriesCalendarSplit.py +688 -0
- scitex/ml/classification/timeseries/_TimeSeriesMetadata.py +139 -0
- scitex/ml/classification/timeseries/_TimeSeriesSlidingWindowSplit.py +1716 -0
- scitex/ml/classification/timeseries/_TimeSeriesSlidingWindowSplit_v01-not-using-n_splits.py +1685 -0
- scitex/ml/classification/timeseries/_TimeSeriesStrategy.py +84 -0
- scitex/ml/classification/timeseries/_TimeSeriesStratifiedSplit.py +610 -0
- scitex/ml/classification/timeseries/__init__.py +39 -0
- scitex/ml/classification/timeseries/_normalize_timestamp.py +436 -0
- scitex/ml/clustering/__init__.py +11 -0
- scitex/ml/clustering/_pca.py +115 -0
- scitex/ml/clustering/_umap.py +376 -0
- scitex/ml/feature_extraction/__init__.py +56 -0
- scitex/ml/feature_extraction/vit.py +149 -0
- scitex/ml/feature_selection/__init__.py +30 -0
- scitex/ml/feature_selection/feature_selection.py +364 -0
- scitex/ml/loss/_L1L2Losses.py +34 -0
- scitex/ml/loss/__init__.py +12 -0
- scitex/ml/loss/multi_task_loss.py +47 -0
- scitex/ml/metrics/__init__.py +56 -0
- scitex/ml/metrics/_calc_bacc.py +61 -0
- scitex/ml/metrics/_calc_bacc_from_conf_mat.py +38 -0
- scitex/ml/metrics/_calc_clf_report.py +78 -0
- scitex/ml/metrics/_calc_conf_mat.py +93 -0
- scitex/ml/metrics/_calc_feature_importance.py +183 -0
- scitex/ml/metrics/_calc_mcc.py +61 -0
- scitex/ml/metrics/_calc_pre_rec_auc.py +116 -0
- scitex/ml/metrics/_calc_roc_auc.py +110 -0
- scitex/ml/metrics/_calc_seizure_prediction_metrics.py +490 -0
- scitex/ml/metrics/_calc_silhouette_score.py +503 -0
- scitex/ml/metrics/_normalize_labels.py +83 -0
- scitex/ml/optim/Ranger_Deep_Learning_Optimizer/__init__.py +0 -0
- scitex/ml/optim/Ranger_Deep_Learning_Optimizer/ranger/__init__.py +3 -0
- scitex/ml/optim/Ranger_Deep_Learning_Optimizer/ranger/ranger.py +207 -0
- scitex/ml/optim/Ranger_Deep_Learning_Optimizer/ranger/ranger2020.py +238 -0
- scitex/ml/optim/Ranger_Deep_Learning_Optimizer/ranger/ranger913A.py +215 -0
- scitex/ml/optim/Ranger_Deep_Learning_Optimizer/ranger/rangerqh.py +184 -0
- scitex/ml/optim/Ranger_Deep_Learning_Optimizer/setup.py +24 -0
- scitex/ml/optim/__init__.py +13 -0
- scitex/ml/optim/_get_set.py +31 -0
- scitex/ml/optim/_optimizers.py +71 -0
- scitex/ml/plt/__init__.py +60 -0
- scitex/ml/plt/_plot_conf_mat.py +663 -0
- scitex/ml/plt/_plot_feature_importance.py +323 -0
- scitex/ml/plt/_plot_learning_curve.py +345 -0
- scitex/ml/plt/_plot_optuna_study.py +225 -0
- scitex/ml/plt/_plot_pre_rec_curve.py +290 -0
- scitex/ml/plt/_plot_roc_curve.py +255 -0
- scitex/ml/sk/__init__.py +11 -0
- scitex/ml/sk/_clf.py +58 -0
- scitex/ml/sk/_to_sktime.py +100 -0
- scitex/ml/sklearn/__init__.py +26 -0
- scitex/ml/sklearn/clf.py +58 -0
- scitex/ml/sklearn/to_sktime.py +100 -0
- scitex/{ai/training/early_stopping.py → ml/training/_EarlyStopping.py} +1 -2
- scitex/{ai → ml/training}/_LearningCurveLogger.py +198 -242
- scitex/ml/training/__init__.py +7 -0
- scitex/ml/utils/__init__.py +22 -0
- scitex/ml/utils/_check_params.py +50 -0
- scitex/ml/utils/_default_dataset.py +46 -0
- scitex/ml/utils/_format_samples_for_sktime.py +26 -0
- scitex/ml/utils/_label_encoder.py +134 -0
- scitex/ml/utils/_merge_labels.py +22 -0
- scitex/ml/utils/_sliding_window_data_augmentation.py +11 -0
- scitex/ml/utils/_under_sample.py +51 -0
- scitex/ml/utils/_verify_n_gpus.py +16 -0
- scitex/ml/utils/grid_search.py +148 -0
- scitex/nn/_BNet.py +15 -9
- scitex/nn/_Filters.py +2 -2
- scitex/nn/_ModulationIndex.py +2 -2
- scitex/nn/_PAC.py +1 -1
- scitex/nn/_Spectrogram.py +12 -3
- scitex/nn/__init__.py +9 -10
- scitex/path/__init__.py +18 -0
- scitex/path/_clean.py +4 -0
- scitex/path/_find.py +9 -4
- scitex/path/_symlink.py +348 -0
- scitex/path/_version.py +4 -3
- scitex/pd/__init__.py +2 -0
- scitex/pd/_get_unique.py +99 -0
- scitex/plt/__init__.py +114 -5
- scitex/plt/_subplots/_AxesWrapper.py +1 -3
- scitex/plt/_subplots/_AxisWrapper.py +7 -3
- scitex/plt/_subplots/_AxisWrapperMixins/_AdjustmentMixin.py +47 -13
- scitex/plt/_subplots/_AxisWrapperMixins/_MatplotlibPlotMixin.py +160 -2
- scitex/plt/_subplots/_AxisWrapperMixins/_SeabornMixin.py +26 -4
- scitex/plt/_subplots/_AxisWrapperMixins/_UnitAwareMixin.py +322 -0
- scitex/plt/_subplots/_AxisWrapperMixins/__init__.py +1 -0
- scitex/plt/_subplots/_FigWrapper.py +62 -6
- scitex/plt/_subplots/_export_as_csv.py +43 -27
- scitex/plt/_subplots/_export_as_csv_formatters/__init__.py +5 -4
- scitex/plt/_subplots/_export_as_csv_formatters/_format_annotate.py +81 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_bar.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_barh.py +20 -5
- scitex/plt/_subplots/_export_as_csv_formatters/_format_boxplot.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_contour.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_errorbar.py +35 -18
- scitex/plt/_subplots/_export_as_csv_formatters/_format_eventplot.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_fill.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_fill_between.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_hist.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_imshow.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_imshow2d.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot.py +15 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_box.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_conf_mat.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_ecdf.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_fillv.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_heatmap.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_image.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_joyplot.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_kde.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_line.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_mean_ci.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_mean_std.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_median_iqr.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_raster.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_rectangle.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_scatter.py +35 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_scatter_hist.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_shaded_line.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_violin.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_scatter.py +6 -4
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_barplot.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_boxplot.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_heatmap.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_histplot.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_jointplot.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_kdeplot.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_lineplot.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_pairplot.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_scatterplot.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_stripplot.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_swarmplot.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_violinplot.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_text.py +60 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_violin.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/_format_violinplot.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters/test_formatters.py +1 -3
- scitex/plt/_subplots/_export_as_csv_formatters.py +56 -59
- scitex/plt/ax/_style/_hide_spines.py +1 -3
- scitex/plt/ax/_style/_rotate_labels.py +180 -76
- scitex/plt/ax/_style/_rotate_labels_v01.py +248 -0
- scitex/plt/ax/_style/_set_meta.py +11 -4
- scitex/plt/ax/_style/_set_supxyt.py +3 -3
- scitex/plt/ax/_style/_set_xyt.py +3 -3
- scitex/plt/ax/_style/_share_axes.py +2 -2
- scitex/plt/color/__init__.py +4 -4
- scitex/plt/color/{_get_colors_from_cmap.py → _get_colors_from_conf_matap.py} +7 -7
- scitex/plt/utils/_configure_mpl.py +99 -86
- scitex/plt/utils/_histogram_utils.py +1 -3
- scitex/plt/utils/_is_valid_axis.py +1 -3
- scitex/plt/utils/_scitex_config.py +1 -0
- scitex/repro/__init__.py +75 -0
- scitex/{reproduce → repro}/_gen_ID.py +1 -1
- scitex/{reproduce → repro}/_gen_timestamp.py +1 -1
- scitex/repro_rng/_RandomStateManager.py +590 -0
- scitex/repro_rng/_RandomStateManager_v01-no-verbose-options.py +414 -0
- scitex/repro_rng/__init__.py +39 -0
- scitex/reproduce/__init__.py +25 -13
- scitex/reproduce/_hash_array.py +22 -0
- scitex/resource/_get_processor_usages.py +4 -4
- scitex/resource/_get_specs.py +2 -2
- scitex/resource/_log_processor_usages.py +2 -2
- scitex/rng/_RandomStateManager.py +590 -0
- scitex/rng/_RandomStateManager_v01-no-verbose-options.py +414 -0
- scitex/rng/__init__.py +39 -0
- scitex/scholar/__init__.py +309 -19
- scitex/scholar/__main__.py +319 -0
- scitex/scholar/auth/ScholarAuthManager.py +308 -0
- scitex/scholar/auth/__init__.py +12 -0
- scitex/scholar/auth/core/AuthenticationGateway.py +473 -0
- scitex/scholar/auth/core/BrowserAuthenticator.py +386 -0
- scitex/scholar/auth/core/StrategyResolver.py +309 -0
- scitex/scholar/auth/core/__init__.py +16 -0
- scitex/scholar/auth/gateway/_OpenURLLinkFinder.py +120 -0
- scitex/scholar/auth/gateway/_OpenURLResolver.py +209 -0
- scitex/scholar/auth/gateway/__init__.py +38 -0
- scitex/scholar/auth/gateway/_resolve_functions.py +101 -0
- scitex/scholar/auth/providers/BaseAuthenticator.py +166 -0
- scitex/scholar/auth/providers/EZProxyAuthenticator.py +484 -0
- scitex/scholar/auth/providers/OpenAthensAuthenticator.py +619 -0
- scitex/scholar/auth/providers/ShibbolethAuthenticator.py +686 -0
- scitex/scholar/auth/providers/__init__.py +18 -0
- scitex/scholar/auth/session/AuthCacheManager.py +189 -0
- scitex/scholar/auth/session/SessionManager.py +159 -0
- scitex/scholar/auth/session/__init__.py +11 -0
- scitex/scholar/auth/sso/BaseSSOAutomator.py +373 -0
- scitex/scholar/auth/sso/OpenAthensSSOAutomator.py +378 -0
- scitex/scholar/auth/sso/SSOAutomator.py +180 -0
- scitex/scholar/auth/sso/UniversityOfMelbourneSSOAutomator.py +380 -0
- scitex/scholar/auth/sso/__init__.py +15 -0
- scitex/scholar/browser/ScholarBrowserManager.py +705 -0
- scitex/scholar/browser/__init__.py +38 -0
- scitex/scholar/browser/utils/__init__.py +13 -0
- scitex/scholar/browser/utils/click_and_wait.py +205 -0
- scitex/scholar/browser/utils/close_unwanted_pages.py +140 -0
- scitex/scholar/browser/utils/wait_redirects.py +732 -0
- scitex/scholar/config/PublisherRules.py +132 -0
- scitex/scholar/config/ScholarConfig.py +126 -0
- scitex/scholar/config/__init__.py +17 -0
- scitex/scholar/core/Paper.py +627 -0
- scitex/scholar/core/Papers.py +722 -0
- scitex/scholar/core/Scholar.py +1975 -0
- scitex/scholar/core/__init__.py +9 -0
- scitex/scholar/impact_factor/ImpactFactorEngine.py +204 -0
- scitex/scholar/impact_factor/__init__.py +20 -0
- scitex/scholar/impact_factor/estimation/ImpactFactorEstimationEngine.py +0 -0
- scitex/scholar/impact_factor/estimation/__init__.py +40 -0
- scitex/scholar/impact_factor/estimation/build_database.py +0 -0
- scitex/scholar/impact_factor/estimation/core/__init__.py +28 -0
- scitex/scholar/impact_factor/estimation/core/cache_manager.py +523 -0
- scitex/scholar/impact_factor/estimation/core/calculator.py +355 -0
- scitex/scholar/impact_factor/estimation/core/journal_matcher.py +428 -0
- scitex/scholar/integration/__init__.py +59 -0
- scitex/scholar/integration/base.py +502 -0
- scitex/scholar/integration/mendeley/__init__.py +22 -0
- scitex/scholar/integration/mendeley/exporter.py +166 -0
- scitex/scholar/integration/mendeley/importer.py +236 -0
- scitex/scholar/integration/mendeley/linker.py +79 -0
- scitex/scholar/integration/mendeley/mapper.py +212 -0
- scitex/scholar/integration/zotero/__init__.py +27 -0
- scitex/scholar/integration/zotero/__main__.py +264 -0
- scitex/scholar/integration/zotero/exporter.py +351 -0
- scitex/scholar/integration/zotero/importer.py +372 -0
- scitex/scholar/integration/zotero/linker.py +415 -0
- scitex/scholar/integration/zotero/mapper.py +286 -0
- scitex/scholar/metadata_engines/ScholarEngine.py +588 -0
- scitex/scholar/metadata_engines/__init__.py +21 -0
- scitex/scholar/metadata_engines/individual/ArXivEngine.py +397 -0
- scitex/scholar/metadata_engines/individual/CrossRefEngine.py +274 -0
- scitex/scholar/metadata_engines/individual/CrossRefLocalEngine.py +263 -0
- scitex/scholar/metadata_engines/individual/OpenAlexEngine.py +350 -0
- scitex/scholar/metadata_engines/individual/PubMedEngine.py +329 -0
- scitex/scholar/metadata_engines/individual/SemanticScholarEngine.py +438 -0
- scitex/scholar/metadata_engines/individual/URLDOIEngine.py +410 -0
- scitex/scholar/metadata_engines/individual/_BaseDOIEngine.py +487 -0
- scitex/scholar/metadata_engines/individual/__init__.py +7 -0
- scitex/scholar/metadata_engines/utils/_PubMedConverter.py +469 -0
- scitex/scholar/metadata_engines/utils/_URLDOIExtractor.py +283 -0
- scitex/scholar/metadata_engines/utils/__init__.py +30 -0
- scitex/scholar/metadata_engines/utils/_metadata2bibtex.py +103 -0
- scitex/scholar/metadata_engines/utils/_standardize_metadata.py +376 -0
- scitex/scholar/pdf_download/ScholarPDFDownloader.py +579 -0
- scitex/scholar/pdf_download/__init__.py +5 -0
- scitex/scholar/pdf_download/strategies/__init__.py +38 -0
- scitex/scholar/pdf_download/strategies/chrome_pdf_viewer.py +376 -0
- scitex/scholar/pdf_download/strategies/direct_download.py +131 -0
- scitex/scholar/pdf_download/strategies/manual_download_fallback.py +167 -0
- scitex/scholar/pdf_download/strategies/manual_download_utils.py +996 -0
- scitex/scholar/pdf_download/strategies/response_body.py +207 -0
- scitex/scholar/pipelines/ScholarPipelineBibTeX.py +364 -0
- scitex/scholar/pipelines/ScholarPipelineParallel.py +478 -0
- scitex/scholar/pipelines/ScholarPipelineSingle.py +767 -0
- scitex/scholar/pipelines/__init__.py +49 -0
- scitex/scholar/storage/BibTeXHandler.py +1018 -0
- scitex/scholar/storage/PaperIO.py +468 -0
- scitex/scholar/storage/ScholarLibrary.py +182 -0
- scitex/scholar/storage/_DeduplicationManager.py +548 -0
- scitex/scholar/storage/_LibraryCacheManager.py +724 -0
- scitex/scholar/storage/_LibraryManager.py +1835 -0
- scitex/scholar/storage/__init__.py +28 -0
- scitex/scholar/url_finder/ScholarURLFinder.py +379 -0
- scitex/scholar/url_finder/__init__.py +7 -0
- scitex/scholar/url_finder/strategies/__init__.py +33 -0
- scitex/scholar/url_finder/strategies/find_pdf_urls_by_direct_links.py +261 -0
- scitex/scholar/url_finder/strategies/find_pdf_urls_by_dropdown.py +67 -0
- scitex/scholar/url_finder/strategies/find_pdf_urls_by_href.py +204 -0
- scitex/scholar/url_finder/strategies/find_pdf_urls_by_navigation.py +256 -0
- scitex/scholar/url_finder/strategies/find_pdf_urls_by_publisher_patterns.py +165 -0
- scitex/scholar/url_finder/strategies/find_pdf_urls_by_zotero_translators.py +163 -0
- scitex/scholar/url_finder/strategies/find_supplementary_urls_by_href.py +70 -0
- scitex/scholar/utils/__init__.py +22 -0
- scitex/scholar/utils/bibtex/__init__.py +9 -0
- scitex/scholar/utils/bibtex/_parse_bibtex.py +71 -0
- scitex/scholar/utils/cleanup/__init__.py +8 -0
- scitex/scholar/utils/cleanup/_cleanup_scholar_processes.py +96 -0
- scitex/scholar/utils/cleanup/cleanup_old_extractions.py +117 -0
- scitex/scholar/utils/text/_TextNormalizer.py +407 -0
- scitex/scholar/utils/text/__init__.py +9 -0
- scitex/scholar/zotero/__init__.py +38 -0
- scitex/session/__init__.py +51 -0
- scitex/session/_lifecycle.py +736 -0
- scitex/session/_manager.py +102 -0
- scitex/session/template.py +122 -0
- scitex/stats/__init__.py +30 -26
- scitex/stats/correct/__init__.py +21 -0
- scitex/stats/correct/_correct_bonferroni.py +551 -0
- scitex/stats/correct/_correct_fdr.py +634 -0
- scitex/stats/correct/_correct_holm.py +548 -0
- scitex/stats/correct/_correct_sidak.py +499 -0
- scitex/stats/descriptive/__init__.py +85 -0
- scitex/stats/descriptive/_circular.py +540 -0
- scitex/stats/descriptive/_describe.py +219 -0
- scitex/stats/descriptive/_nan.py +518 -0
- scitex/stats/descriptive/_real.py +189 -0
- scitex/stats/effect_sizes/__init__.py +41 -0
- scitex/stats/effect_sizes/_cliffs_delta.py +325 -0
- scitex/stats/effect_sizes/_cohens_d.py +342 -0
- scitex/stats/effect_sizes/_epsilon_squared.py +315 -0
- scitex/stats/effect_sizes/_eta_squared.py +302 -0
- scitex/stats/effect_sizes/_prob_superiority.py +296 -0
- scitex/stats/posthoc/__init__.py +19 -0
- scitex/stats/posthoc/_dunnett.py +463 -0
- scitex/stats/posthoc/_games_howell.py +383 -0
- scitex/stats/posthoc/_tukey_hsd.py +367 -0
- scitex/stats/power/__init__.py +19 -0
- scitex/stats/power/_power.py +433 -0
- scitex/stats/template.py +119 -0
- scitex/stats/utils/__init__.py +62 -0
- scitex/stats/utils/_effect_size.py +985 -0
- scitex/stats/utils/_formatters.py +270 -0
- scitex/stats/utils/_normalizers.py +927 -0
- scitex/stats/utils/_power.py +433 -0
- scitex/stats_v01/_EffectSizeCalculator.py +488 -0
- scitex/stats_v01/_StatisticalValidator.py +411 -0
- scitex/stats_v01/__init__.py +60 -0
- scitex/stats_v01/_additional_tests.py +415 -0
- scitex/{stats → stats_v01}/_p2stars.py +19 -5
- scitex/stats_v01/_two_sample_tests.py +141 -0
- scitex/stats_v01/desc/__init__.py +83 -0
- scitex/stats_v01/desc/_circular.py +540 -0
- scitex/stats_v01/desc/_describe.py +219 -0
- scitex/stats_v01/desc/_nan.py +518 -0
- scitex/{stats/desc/_nan.py → stats_v01/desc/_nan_v01-20250920_145731.py} +23 -12
- scitex/stats_v01/desc/_real.py +189 -0
- scitex/stats_v01/tests/__corr_test_optimized.py +221 -0
- scitex/stats_v01/tests/_corr_test_optimized.py +179 -0
- scitex/str/__init__.py +1 -3
- scitex/str/_clean_path.py +6 -2
- scitex/str/_latex_fallback.py +267 -160
- scitex/str/_parse.py +44 -36
- scitex/str/_printc.py +1 -3
- scitex/template/__init__.py +87 -0
- scitex/template/_create_project.py +267 -0
- scitex/template/create_pip_project.py +80 -0
- scitex/template/create_research.py +80 -0
- scitex/template/create_singularity.py +80 -0
- scitex/units.py +291 -0
- scitex/utils/_compress_hdf5.py +14 -3
- scitex/utils/_email.py +21 -2
- scitex/utils/_grid.py +6 -4
- scitex/utils/_notify.py +13 -10
- scitex/utils/_verify_scitex_format.py +589 -0
- scitex/utils/_verify_scitex_format_v01.py +370 -0
- scitex/utils/template.py +122 -0
- scitex/web/_search_pubmed.py +62 -16
- scitex-2.1.0.dist-info/LICENSE +21 -0
- scitex-2.1.0.dist-info/METADATA +677 -0
- scitex-2.1.0.dist-info/RECORD +919 -0
- {scitex-2.0.0.dist-info → scitex-2.1.0.dist-info}/WHEEL +1 -1
- scitex-2.1.0.dist-info/entry_points.txt +3 -0
- scitex/ai/__Classifiers.py +0 -101
- scitex/ai/classification/classification_reporter.py +0 -1137
- scitex/ai/classification/classifiers.py +0 -101
- scitex/ai/classification_reporter.py +0 -1161
- scitex/ai/genai/__init__.py +0 -277
- scitex/ai/genai/anthropic_provider.py +0 -320
- scitex/ai/genai/anthropic_refactored.py +0 -109
- scitex/ai/genai/auth_manager.py +0 -200
- scitex/ai/genai/base_provider.py +0 -291
- scitex/ai/genai/chat_history.py +0 -307
- scitex/ai/genai/cost_tracker.py +0 -276
- scitex/ai/genai/deepseek_provider.py +0 -251
- scitex/ai/genai/google_provider.py +0 -228
- scitex/ai/genai/groq_provider.py +0 -248
- scitex/ai/genai/image_processor.py +0 -250
- scitex/ai/genai/llama_provider.py +0 -214
- scitex/ai/genai/mock_provider.py +0 -127
- scitex/ai/genai/model_registry.py +0 -304
- scitex/ai/genai/openai_provider.py +0 -293
- scitex/ai/genai/perplexity_provider.py +0 -205
- scitex/ai/genai/provider_base.py +0 -302
- scitex/ai/genai/provider_factory.py +0 -370
- scitex/ai/genai/response_handler.py +0 -235
- scitex/ai/layer/_Pass.py +0 -21
- scitex/ai/layer/__init__.py +0 -10
- scitex/ai/layer/_switch.py +0 -8
- scitex/ai/metrics/_bACC.py +0 -51
- scitex/ai/plt/_learning_curve.py +0 -194
- scitex/ai/plt/_optuna_study.py +0 -111
- scitex/ai/plt/aucs/__init__.py +0 -2
- scitex/ai/plt/aucs/example.py +0 -60
- scitex/ai/plt/aucs/pre_rec_auc.py +0 -223
- scitex/ai/plt/aucs/roc_auc.py +0 -246
- scitex/ai/sampling/undersample.py +0 -29
- scitex/db/_SQLite3.py +0 -2136
- scitex/db/_SQLite3Mixins/_BlobMixin.py +0 -229
- scitex/gen/_close.py +0 -222
- scitex/gen/_start.py +0 -451
- scitex/general/__init__.py +0 -5
- scitex/io/_load_modules/_db.py +0 -24
- scitex/life/__init__.py +0 -10
- scitex/life/_monitor_rain.py +0 -49
- scitex/reproduce/_fix_seeds.py +0 -45
- scitex/res/__init__.py +0 -5
- scitex/scholar/_local_search.py +0 -454
- scitex/scholar/_paper.py +0 -244
- scitex/scholar/_pdf_downloader.py +0 -325
- scitex/scholar/_search.py +0 -393
- scitex/scholar/_vector_search.py +0 -370
- scitex/scholar/_web_sources.py +0 -457
- scitex/stats/desc/__init__.py +0 -40
- scitex-2.0.0.dist-info/METADATA +0 -307
- scitex-2.0.0.dist-info/RECORD +0 -572
- scitex-2.0.0.dist-info/licenses/LICENSE +0 -7
- /scitex/ai/{act → activation}/__init__.py +0 -0
- /scitex/ai/{act → activation}/_define.py +0 -0
- /scitex/ai/{early_stopping.py → training/_EarlyStopping.py} +0 -0
- /scitex/db/{_PostgreSQLMixins → _postgresql/_PostgreSQLMixins}/_ImportExportMixin.py +0 -0
- /scitex/db/{_PostgreSQLMixins → _postgresql/_PostgreSQLMixins}/_IndexMixin.py +0 -0
- /scitex/db/{_PostgreSQLMixins → _postgresql/_PostgreSQLMixins}/_RowMixin.py +0 -0
- /scitex/db/{_PostgreSQLMixins → _postgresql/_PostgreSQLMixins}/_TableMixin.py +0 -0
- /scitex/db/{_PostgreSQLMixins → _postgresql/_PostgreSQLMixins}/__init__.py +0 -0
- /scitex/{stats → stats_v01}/_calc_partial_corr.py +0 -0
- /scitex/{stats → stats_v01}/_corr_test_multi.py +0 -0
- /scitex/{stats → stats_v01}/_corr_test_wrapper.py +0 -0
- /scitex/{stats → stats_v01}/_describe_wrapper.py +0 -0
- /scitex/{stats → stats_v01}/_multiple_corrections.py +0 -0
- /scitex/{stats → stats_v01}/_nan_stats.py +0 -0
- /scitex/{stats → stats_v01}/_p2stars_wrapper.py +0 -0
- /scitex/{stats → stats_v01}/_statistical_tests.py +0 -0
- /scitex/{stats/desc/_describe.py → stats_v01/desc/_describe_v01-20250920_145731.py} +0 -0
- /scitex/{stats/desc/_real.py → stats_v01/desc/_real_v01-20250920_145731.py} +0 -0
- /scitex/{stats → stats_v01}/multiple/__init__.py +0 -0
- /scitex/{stats → stats_v01}/multiple/_bonferroni_correction.py +0 -0
- /scitex/{stats → stats_v01}/multiple/_fdr_correction.py +0 -0
- /scitex/{stats → stats_v01}/multiple/_multicompair.py +0 -0
- /scitex/{stats → stats_v01}/tests/__corr_test.py +0 -0
- /scitex/{stats → stats_v01}/tests/__corr_test_multi.py +0 -0
- /scitex/{stats → stats_v01}/tests/__corr_test_single.py +0 -0
- /scitex/{stats → stats_v01}/tests/__init__.py +0 -0
- /scitex/{stats → stats_v01}/tests/_brunner_munzel_test.py +0 -0
- /scitex/{stats → stats_v01}/tests/_nocorrelation_test.py +0 -0
- /scitex/{stats → stats_v01}/tests/_smirnov_grubbs.py +0 -0
- {scitex-2.0.0.dist-info → scitex-2.1.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Scitex utils module."""
|
|
3
|
+
|
|
4
|
+
from ._check_params import check_params
|
|
5
|
+
from ._default_dataset import DefaultDataset
|
|
6
|
+
from ._format_samples_for_sktime import format_samples_for_sktime
|
|
7
|
+
from ._label_encoder import LabelEncoder
|
|
8
|
+
from ._merge_labels import merge_labels
|
|
9
|
+
from ._sliding_window_data_augmentation import sliding_window_data_augmentation
|
|
10
|
+
from ._under_sample import under_sample
|
|
11
|
+
from ._verify_n_gpus import verify_n_gpus
|
|
12
|
+
|
|
13
|
+
__all__ = [
|
|
14
|
+
"DefaultDataset",
|
|
15
|
+
"LabelEncoder",
|
|
16
|
+
"check_params",
|
|
17
|
+
"format_samples_for_sktime",
|
|
18
|
+
"merge_labels",
|
|
19
|
+
"sliding_window_data_augmentation",
|
|
20
|
+
"under_sample",
|
|
21
|
+
"verify_n_gpus",
|
|
22
|
+
]
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# Time-stamp: "2024-02-17 12:38:40 (ywatanabe)"
|
|
3
|
+
|
|
4
|
+
from pprint import pprint as _pprint
|
|
5
|
+
from time import sleep
|
|
6
|
+
|
|
7
|
+
# def get_params(model, tgt_name=None, sleep_sec=2, show=False):
|
|
8
|
+
|
|
9
|
+
# name_shape_dict = {}
|
|
10
|
+
# for name, param in model.named_parameters():
|
|
11
|
+
# learnable = "Learnable" if param.requires_grad else "Freezed"
|
|
12
|
+
|
|
13
|
+
# if (tgt_name is not None) & (name == tgt_name):
|
|
14
|
+
# return param
|
|
15
|
+
# if tgt_name is None:
|
|
16
|
+
# # print(f"\n{param}\n{param.shape}\nname: {name}\n")
|
|
17
|
+
# if show is True:
|
|
18
|
+
# print(
|
|
19
|
+
# f"\n{param}: {param.shape}\nname: {name}\nStatus: {learnable}\n"
|
|
20
|
+
# )
|
|
21
|
+
# sleep(sleep_sec)
|
|
22
|
+
# name_shape_dict[name] = list(param.shape)
|
|
23
|
+
|
|
24
|
+
# if tgt_name is None:
|
|
25
|
+
# print()
|
|
26
|
+
# _pprint(name_shape_dict)
|
|
27
|
+
# print()
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def check_params(model, tgt_name=None, show=False):
|
|
31
|
+
|
|
32
|
+
out_dict = {}
|
|
33
|
+
|
|
34
|
+
for name, param in model.named_parameters():
|
|
35
|
+
learnable = "Learnable" if param.requires_grad else "Freezed"
|
|
36
|
+
|
|
37
|
+
if tgt_name is None:
|
|
38
|
+
out_dict[name] = (param.shape, learnable)
|
|
39
|
+
|
|
40
|
+
elif (tgt_name is not None) & (name == tgt_name):
|
|
41
|
+
out_dict[name] = (param.shape, learnable)
|
|
42
|
+
|
|
43
|
+
elif (tgt_name is not None) & (name != tgt_name):
|
|
44
|
+
continue
|
|
45
|
+
|
|
46
|
+
if show:
|
|
47
|
+
for k, v in out_dict.items():
|
|
48
|
+
print(f"\n{k}\n{v}")
|
|
49
|
+
|
|
50
|
+
return out_dict
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
|
|
3
|
+
from torch.utils.data import Dataset
|
|
4
|
+
import numpy as np
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class DefaultDataset(Dataset):
|
|
8
|
+
"""
|
|
9
|
+
Apply transform for the first element of arrs_list
|
|
10
|
+
|
|
11
|
+
Example:
|
|
12
|
+
n = 1024
|
|
13
|
+
n_chs = 19
|
|
14
|
+
X = np.random.rand(n, n_chs, 1000)
|
|
15
|
+
T = np.random.randint(0, 4, size=(n, 1))
|
|
16
|
+
S = np.random.randint(0, 999, size=(n, 1))
|
|
17
|
+
Sr = np.random.randint(0, 4, size=(n, 1))
|
|
18
|
+
|
|
19
|
+
arrs_list = [X, T, S, Sr]
|
|
20
|
+
transform = None
|
|
21
|
+
ds = _DefaultDataset(arrs_list, transform=transform)
|
|
22
|
+
len(ds) # 1024
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
def __init__(self, arrs_list, transform=None):
|
|
26
|
+
self.arrs_list = arrs_list
|
|
27
|
+
self.arrs = arrs_list # alias
|
|
28
|
+
|
|
29
|
+
assert np.all([len(arr) for arr in arrs_list])
|
|
30
|
+
|
|
31
|
+
self.length = len(arrs_list[0])
|
|
32
|
+
self.transform = transform
|
|
33
|
+
|
|
34
|
+
def __len__(self):
|
|
35
|
+
return self.length
|
|
36
|
+
|
|
37
|
+
def __getitem__(self, idx):
|
|
38
|
+
arrs_list_idx = [arr[idx] for arr in self.arrs_list]
|
|
39
|
+
|
|
40
|
+
# Here, you might want to transform, or apply DA on X as a numpy array
|
|
41
|
+
if self.transform:
|
|
42
|
+
dtype_orig = arrs_list_idx[0].dtype
|
|
43
|
+
arrs_list_idx[0] = self.transform(
|
|
44
|
+
arrs_list_idx[0].astype(np.float64)
|
|
45
|
+
).astype(dtype_orig)
|
|
46
|
+
return arrs_list_idx
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import pandas as pd
|
|
2
|
+
import torch
|
|
3
|
+
import numpy as np
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def _format_a_sample_for_sktime(x):
|
|
7
|
+
"""
|
|
8
|
+
x.shape: (n_chs, seq_len)
|
|
9
|
+
"""
|
|
10
|
+
dims = pd.Series(
|
|
11
|
+
[pd.Series(x[d], name=f"dim_{d}") for d in range(len(x))],
|
|
12
|
+
index=[f"dim_{i}" for i in np.arange(len(x))],
|
|
13
|
+
)
|
|
14
|
+
return dims
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def format_samples_for_sktime(X):
|
|
18
|
+
"""
|
|
19
|
+
X.shape: (n_samples, n_chs, seq_len)
|
|
20
|
+
"""
|
|
21
|
+
if torch.is_tensor(X):
|
|
22
|
+
X = X.numpy() # (64, 160, 1024)
|
|
23
|
+
|
|
24
|
+
X = X.astype(np.float64)
|
|
25
|
+
|
|
26
|
+
return pd.DataFrame([_format_a_sample_for_sktime(X[i]) for i in range(len(X))])
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-03-02 09:52:28 (ywatanabe)"
|
|
4
|
+
|
|
5
|
+
from warnings import warn
|
|
6
|
+
|
|
7
|
+
import numpy as np
|
|
8
|
+
import pandas as pd
|
|
9
|
+
import torch
|
|
10
|
+
from sklearn.preprocessing import LabelEncoder as SklearnLabelEncoder
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class LabelEncoder(SklearnLabelEncoder):
|
|
14
|
+
"""
|
|
15
|
+
An extension of the sklearn.preprocessing.LabelEncoder that supports incremental learning.
|
|
16
|
+
This means it can handle new classes without forgetting the old ones.
|
|
17
|
+
|
|
18
|
+
Attributes:
|
|
19
|
+
classes_ (np.ndarray): Holds the label for each class.
|
|
20
|
+
|
|
21
|
+
Example usage:
|
|
22
|
+
encoder = IncrementalLabelEncoder()
|
|
23
|
+
encoder.fit(np.array(["apple", "banana"]))
|
|
24
|
+
encoded_labels = encoder.transform(["apple", "banana"]) # This will give you the encoded labels
|
|
25
|
+
|
|
26
|
+
encoder.fit(["cherry"]) # Incrementally add "cherry"
|
|
27
|
+
encoder.transform(["apple", "banana", "cherry"]) # Now it works, including "cherry"
|
|
28
|
+
|
|
29
|
+
# Now you can use inverse_transform with the encoded labels
|
|
30
|
+
print(encoder.classes_)
|
|
31
|
+
original_labels = encoder.inverse_transform(encoded_labels)
|
|
32
|
+
print(original_labels) # This should print ['apple', 'banana']
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
def __init__(self):
|
|
36
|
+
super().__init__()
|
|
37
|
+
self.classes_ = np.array([])
|
|
38
|
+
|
|
39
|
+
def _check_input(self, y):
|
|
40
|
+
"""
|
|
41
|
+
Check and convert the input to a NumPy array if it is a list, tuple, pandas.Series, pandas.DataFrame, or torch.Tensor.
|
|
42
|
+
|
|
43
|
+
Arguments:
|
|
44
|
+
y (list, tuple, pd.Series, pd.DataFrame, torch.Tensor): The input labels.
|
|
45
|
+
|
|
46
|
+
Returns:
|
|
47
|
+
np.ndarray: The input labels converted to a NumPy array.
|
|
48
|
+
"""
|
|
49
|
+
if isinstance(y, (list, tuple)):
|
|
50
|
+
y = np.array(y)
|
|
51
|
+
elif isinstance(y, pd.Series):
|
|
52
|
+
y = y.values
|
|
53
|
+
elif isinstance(y, torch.Tensor):
|
|
54
|
+
y = y.numpy()
|
|
55
|
+
return y
|
|
56
|
+
|
|
57
|
+
def fit(self, y):
|
|
58
|
+
"""
|
|
59
|
+
Fit the label encoder with an array of labels, incrementally adding new classes.
|
|
60
|
+
|
|
61
|
+
Arguments:
|
|
62
|
+
y (list, tuple, np.ndarray, pd.Series, pd.DataFrame, torch.Tensor): The input labels.
|
|
63
|
+
|
|
64
|
+
Returns:
|
|
65
|
+
IncrementalLabelEncoder: The instance itself.
|
|
66
|
+
"""
|
|
67
|
+
y = self._check_input(y)
|
|
68
|
+
new_unique_labels = np.unique(y)
|
|
69
|
+
unique_labels = np.unique(np.concatenate((self.classes_, new_unique_labels)))
|
|
70
|
+
self.classes_ = unique_labels
|
|
71
|
+
return self
|
|
72
|
+
|
|
73
|
+
def transform(self, y):
|
|
74
|
+
"""
|
|
75
|
+
Transform labels to normalized encoding.
|
|
76
|
+
|
|
77
|
+
Arguments:
|
|
78
|
+
y (list, tuple, np.ndarray, pd.Series, pd.DataFrame, torch.Tensor): The input labels.
|
|
79
|
+
|
|
80
|
+
Returns:
|
|
81
|
+
np.ndarray: The encoded labels as a NumPy array.
|
|
82
|
+
|
|
83
|
+
Raises:
|
|
84
|
+
ValueError: If the input contains new labels that haven't been seen during `fit`.
|
|
85
|
+
"""
|
|
86
|
+
|
|
87
|
+
y = self._check_input(y)
|
|
88
|
+
diff = set(y) - set(self.classes_)
|
|
89
|
+
if diff:
|
|
90
|
+
raise ValueError(f"y contains new labels: {diff}")
|
|
91
|
+
return super().transform(y)
|
|
92
|
+
|
|
93
|
+
def inverse_transform(self, y):
|
|
94
|
+
"""
|
|
95
|
+
Transform labels back to original encoding.
|
|
96
|
+
|
|
97
|
+
Arguments:
|
|
98
|
+
y (np.ndarray): The encoded labels as a NumPy array.
|
|
99
|
+
|
|
100
|
+
Returns:
|
|
101
|
+
np.ndarray: The original labels as a NumPy array.
|
|
102
|
+
"""
|
|
103
|
+
|
|
104
|
+
return super().inverse_transform(y)
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
# # Obsolete warning for future compatibility
|
|
108
|
+
# class LabelEncoder(IncrementalLabelEncoder):
|
|
109
|
+
# def __init__(self, *args, **kwargs):
|
|
110
|
+
# """
|
|
111
|
+
# Initialize the LabelEncoder with a deprecation warning.
|
|
112
|
+
# """
|
|
113
|
+
# warn(
|
|
114
|
+
# "LabelEncoder is now obsolete; use IncrementalLabelEncoder instead.",
|
|
115
|
+
# category=FutureWarning,
|
|
116
|
+
# )
|
|
117
|
+
# super().__init__(*args, **kwargs)
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
if __name__ == "__main__":
|
|
121
|
+
# Example usage of IncrementalLabelEncoder
|
|
122
|
+
le = LabelEncoder()
|
|
123
|
+
le.fit(["A", "B"])
|
|
124
|
+
print(le.classes_)
|
|
125
|
+
|
|
126
|
+
le.fit(["C"])
|
|
127
|
+
print(le.classes_)
|
|
128
|
+
|
|
129
|
+
le.inverse_transform([0, 1, 2])
|
|
130
|
+
|
|
131
|
+
le.fit(["X"])
|
|
132
|
+
print(le.classes_)
|
|
133
|
+
|
|
134
|
+
le.inverse_transform([3])
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
|
|
3
|
+
import scitex
|
|
4
|
+
import numpy as np
|
|
5
|
+
|
|
6
|
+
# y1, y2 = T_tra, M_tra
|
|
7
|
+
# def merge_labels(y1, y2):
|
|
8
|
+
# y = [str(z1) + "-" + str(z2) for z1, z2 in zip(y1, y2)]
|
|
9
|
+
# conv_d = {z: i for i, z in enumerate(np.unique(y))}
|
|
10
|
+
# y = [conv_d[z] for z in y]
|
|
11
|
+
# return y
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def merge_labels(*ys, to_int=False):
|
|
15
|
+
if not len(ys) > 1: # Check if more than two arguments are passed
|
|
16
|
+
return ys[0]
|
|
17
|
+
else:
|
|
18
|
+
y = [scitex.gen.connect_nums(zs) for zs in zip(*ys)]
|
|
19
|
+
if to_int:
|
|
20
|
+
conv_d = {z: i for i, z in enumerate(np.unique(y))}
|
|
21
|
+
y = [conv_d[z] for z in y]
|
|
22
|
+
return np.array(y)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-01-24 13:56:36 (ywatanabe)"
|
|
4
|
+
|
|
5
|
+
import random
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def sliding_window_data_augmentation(x, window_size_pts):
|
|
9
|
+
start = random.randint(0, x.shape[-1] - window_size_pts)
|
|
10
|
+
end = start + window_size_pts
|
|
11
|
+
return x[..., start:end]
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
from collections import Counter
|
|
5
|
+
|
|
6
|
+
import numpy as np
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def under_sample(y, replace=False):
|
|
10
|
+
"""
|
|
11
|
+
Input:
|
|
12
|
+
Labels
|
|
13
|
+
Return:
|
|
14
|
+
Indices
|
|
15
|
+
|
|
16
|
+
Example:
|
|
17
|
+
t = ['a', 'b', 'c', 'b', 'c', 'a', 'c']
|
|
18
|
+
print(under_sample(t))
|
|
19
|
+
# [5 0 1 3 4 6]
|
|
20
|
+
print(under_sample(t))
|
|
21
|
+
# [5 0 1 3 6 2]
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
# find the minority and majority classes
|
|
25
|
+
class_counts = Counter(y)
|
|
26
|
+
# majority_class = max(class_counts, key=class_counts.get)
|
|
27
|
+
minority_class = min(class_counts, key=class_counts.get)
|
|
28
|
+
|
|
29
|
+
# compute the number of sample to draw from the majority class using
|
|
30
|
+
# a negative binomial distribution
|
|
31
|
+
n_minority_class = class_counts[minority_class]
|
|
32
|
+
n_majority_resampled = n_minority_class
|
|
33
|
+
|
|
34
|
+
# draw randomly with or without replacement
|
|
35
|
+
indices = np.hstack(
|
|
36
|
+
[
|
|
37
|
+
np.random.choice(
|
|
38
|
+
np.flatnonzero(y == k),
|
|
39
|
+
size=n_majority_resampled,
|
|
40
|
+
replace=replace,
|
|
41
|
+
)
|
|
42
|
+
for k in class_counts.keys()
|
|
43
|
+
]
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
return indices
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
if __name__ == "__main__":
|
|
50
|
+
t = np.array(["a", "b", "c", "b", "c", "a", "c"])
|
|
51
|
+
print(under_sample(t))
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import torch
|
|
2
|
+
import warnings
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def verify_n_gpus(n_gpus):
|
|
6
|
+
if torch.cuda.device_count() < n_gpus:
|
|
7
|
+
warnings.warn(
|
|
8
|
+
f"N_GPUS ({n_gpus}) is larger "
|
|
9
|
+
f"than n_gpus torch can acesses (= {torch.cuda.device_count()})"
|
|
10
|
+
f"Please check $CUDA_VISIBLE_DEVICES and your setting in this script.",
|
|
11
|
+
UserWarning,
|
|
12
|
+
)
|
|
13
|
+
return torch.cuda.device_count()
|
|
14
|
+
|
|
15
|
+
else:
|
|
16
|
+
return n_gpus
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
#!./env/bin/python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-04-22 23:54:02"
|
|
4
|
+
# Author: Yusuke Watanabe (ywatanabe@scitex.ai)
|
|
5
|
+
|
|
6
|
+
"""
|
|
7
|
+
This script defines scitex.ml.utils.grid_search
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
# Imports
|
|
11
|
+
import itertools as _itertools
|
|
12
|
+
import random as _random
|
|
13
|
+
import sys as _sys
|
|
14
|
+
|
|
15
|
+
import matplotlib.pyplot as _plt
|
|
16
|
+
import scitex as _scitex
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
# Functions
|
|
20
|
+
def yield_grids(params_grid: dict, random=False):
|
|
21
|
+
"""
|
|
22
|
+
Generator function that yields combinations of parameters from a grid.
|
|
23
|
+
|
|
24
|
+
Args:
|
|
25
|
+
params_grid (dict): A dictionary where keys are parameter names and values are lists of parameter values.
|
|
26
|
+
random (bool): If True, yields the parameter combinations in random order.
|
|
27
|
+
|
|
28
|
+
Yields:
|
|
29
|
+
dict: A dictionary of parameters for one set of conditions from the grid.
|
|
30
|
+
|
|
31
|
+
Example:
|
|
32
|
+
# Parameters
|
|
33
|
+
params_grid = {
|
|
34
|
+
"batch_size": [2**i for i in range(7)],
|
|
35
|
+
"n_chs": [2**i for i in range(7)],
|
|
36
|
+
"seq_len": [2**i for i in range(15)],
|
|
37
|
+
"fs": [2**i for i in range(8, 11)],
|
|
38
|
+
"n_segments": [2**i for i in range(6)],
|
|
39
|
+
"n_bands_pha": [2**i for i in range(7)],
|
|
40
|
+
"n_bands_amp": [2**i for i in range(7)],
|
|
41
|
+
"precision": ['fp16', 'fp32'],
|
|
42
|
+
"device": ['cpu', 'cuda'],
|
|
43
|
+
"package": ['tensorpac', 'scitex'],
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
# Example of using the generator
|
|
47
|
+
for param_dict in yield_grids(params_grid, random=True):
|
|
48
|
+
print(param_dict)
|
|
49
|
+
"""
|
|
50
|
+
combinations = list(_itertools.product(*params_grid.values()))
|
|
51
|
+
if random:
|
|
52
|
+
_random.shuffle(combinations) # [REVISED]
|
|
53
|
+
for values in combinations:
|
|
54
|
+
yield dict(zip(params_grid.keys(), values))
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
# def yield_grids(params_grid: dict, random=False):
|
|
58
|
+
# """
|
|
59
|
+
# Generator function that yields combinations of parameters from a grid.
|
|
60
|
+
|
|
61
|
+
# Args:
|
|
62
|
+
# params_grid (dict): A dictionary where keys are parameter names and values are lists of parameter values.
|
|
63
|
+
|
|
64
|
+
# Yields:
|
|
65
|
+
# dict: A dictionary of parameters for one set of conditions from the grid.
|
|
66
|
+
|
|
67
|
+
# Example:
|
|
68
|
+
# # Parameters
|
|
69
|
+
# params_grid = {
|
|
70
|
+
# "batch_size": [2**i for i in range(7)],
|
|
71
|
+
# "n_chs": [2**i for i in range(7)],
|
|
72
|
+
# "seq_len": [2**i for i in range(15)],
|
|
73
|
+
# "fs": [2**i for i in range(8, 11)],
|
|
74
|
+
# "n_segments": [2**i for i in range(6)],
|
|
75
|
+
# "n_bands_pha": [2**i for i in range(7)],
|
|
76
|
+
# "n_bands_amp": [2**i for i in range(7)],
|
|
77
|
+
# "precision": ['fp16', 'fp32'],
|
|
78
|
+
# "device": ['cpu', 'cuda'],
|
|
79
|
+
# "package": ['tensorpac', 'scitex'],
|
|
80
|
+
# }
|
|
81
|
+
|
|
82
|
+
# # Example of using the generator
|
|
83
|
+
# for param_dict in yield_grids(params_grid):
|
|
84
|
+
# print(param_dict)
|
|
85
|
+
# """
|
|
86
|
+
# print(f"\nThe Number of Combinations: {count_grids(params_grid):,}")
|
|
87
|
+
|
|
88
|
+
# for values in _itertools.product(*params_grid.values()):
|
|
89
|
+
# yield dict(zip(params_grid.keys(), values))
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def count_grids(params_grid):
|
|
93
|
+
"""
|
|
94
|
+
Calculate the total number of combinations possible from the given parameter grid.
|
|
95
|
+
|
|
96
|
+
Args:
|
|
97
|
+
params_grid (dict): A dictionary where keys are parameter names and values are lists of parameter values.
|
|
98
|
+
|
|
99
|
+
Returns:
|
|
100
|
+
int: The total number of combinations that can be generated from the parameter grid.
|
|
101
|
+
"""
|
|
102
|
+
# Get the number of values for each parameter and multiply them
|
|
103
|
+
num_combinations = 1
|
|
104
|
+
for values in params_grid.values():
|
|
105
|
+
num_combinations *= len(values)
|
|
106
|
+
return num_combinations
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
if __name__ == "__main__":
|
|
110
|
+
import pandas as pd
|
|
111
|
+
|
|
112
|
+
# Start
|
|
113
|
+
CONFIG, _sys.stdout, _sys.stderr, _plt, CC = _scitex.session.start(
|
|
114
|
+
_sys, _plt, verbose=False
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
# Parameters
|
|
118
|
+
N = 15
|
|
119
|
+
print(pd.DataFrame(pd.Series({f"2^{ii}": 2**ii for ii in range(N)})))
|
|
120
|
+
|
|
121
|
+
params_grid = {
|
|
122
|
+
"batch_size": [2**i for i in [3, 4, 5, 6]],
|
|
123
|
+
"n_chs": [2**i for i in [3, 4, 5, 6]],
|
|
124
|
+
"seq_len": [2**i for i in range(8, 13)],
|
|
125
|
+
"fs": [2**i for i in range(7, 10)],
|
|
126
|
+
"n_segments": [2**i for i in range(5)],
|
|
127
|
+
"n_bands_pha": [2**i for i in range(7)],
|
|
128
|
+
"n_bands_amp": [2**i for i in range(7)],
|
|
129
|
+
"precision": ["fp16", "fp32"],
|
|
130
|
+
"device": ["cpu", "cuda"],
|
|
131
|
+
"package": ["tensorpac", "_scitex"],
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
print(params_grid)
|
|
135
|
+
print(f"{count_grids(params_grid):,}")
|
|
136
|
+
|
|
137
|
+
# Example of using the generator
|
|
138
|
+
for param_dict in yield_grids(params_grid):
|
|
139
|
+
print(param_dict)
|
|
140
|
+
|
|
141
|
+
# Close
|
|
142
|
+
_scitex.session.close(CONFIG, verbose=False, notify=False)
|
|
143
|
+
|
|
144
|
+
# EOF
|
|
145
|
+
|
|
146
|
+
"""
|
|
147
|
+
/home/ywatanabe/proj/entrance/_scitex/ml/utils/grid_search.py
|
|
148
|
+
"""
|
scitex/nn/_BNet.py
CHANGED
|
@@ -6,15 +6,21 @@ import torch
|
|
|
6
6
|
import torch.nn as nn
|
|
7
7
|
import torch.nn.functional as F
|
|
8
8
|
from torchsummary import summary
|
|
9
|
-
import scitex
|
|
10
9
|
import numpy as np
|
|
11
|
-
|
|
10
|
+
|
|
11
|
+
# Import specific nn modules to avoid circular imports
|
|
12
|
+
from ._SpatialAttention import SpatialAttention
|
|
13
|
+
from ._SwapChannels import SwapChannels
|
|
14
|
+
from ._DropoutChannels import DropoutChannels
|
|
15
|
+
from ._FreqGainChanger import FreqGainChanger
|
|
16
|
+
from ._ChannelGainChanger import ChannelGainChanger
|
|
17
|
+
from ._MNet_1000 import MNet_1000
|
|
12
18
|
|
|
13
19
|
|
|
14
20
|
class BHead(nn.Module):
|
|
15
21
|
def __init__(self, n_chs_in, n_chs_out):
|
|
16
22
|
super().__init__()
|
|
17
|
-
self.sa =
|
|
23
|
+
self.sa = SpatialAttention(n_chs_in)
|
|
18
24
|
self.conv11 = nn.Conv1d(
|
|
19
25
|
in_channels=n_chs_in, out_channels=n_chs_out, kernel_size=1
|
|
20
26
|
)
|
|
@@ -31,9 +37,9 @@ class BNet(nn.Module):
|
|
|
31
37
|
self.dummy_param = nn.Parameter(torch.empty(0))
|
|
32
38
|
N_VIRTUAL_CHS = 32
|
|
33
39
|
|
|
34
|
-
self.sc =
|
|
35
|
-
self.dc =
|
|
36
|
-
self.fgc =
|
|
40
|
+
self.sc = SwapChannels()
|
|
41
|
+
self.dc = DropoutChannels(dropout=0.01)
|
|
42
|
+
self.fgc = FreqGainChanger(
|
|
37
43
|
BNet_config["n_bands"], BNet_config["SAMP_RATE"]
|
|
38
44
|
)
|
|
39
45
|
self.heads = nn.ModuleList(
|
|
@@ -43,11 +49,11 @@ class BNet(nn.Module):
|
|
|
43
49
|
]
|
|
44
50
|
)
|
|
45
51
|
|
|
46
|
-
self.cgcs = [
|
|
47
|
-
# self.cgc =
|
|
52
|
+
self.cgcs = [ChannelGainChanger(n_ch) for n_ch in BNet_config["n_chs"]]
|
|
53
|
+
# self.cgc = ChannelGainChanger(N_VIRTUAL_CHS)
|
|
48
54
|
|
|
49
55
|
MNet_config["n_chs"] = N_VIRTUAL_CHS # BNet_config["n_chs"] # override
|
|
50
|
-
self.MNet =
|
|
56
|
+
self.MNet = MNet_1000(MNet_config)
|
|
51
57
|
|
|
52
58
|
self.fcs = nn.ModuleList(
|
|
53
59
|
[
|
scitex/nn/_Filters.py
CHANGED
|
@@ -411,7 +411,7 @@ if __name__ == "__main__":
|
|
|
411
411
|
import scitex
|
|
412
412
|
|
|
413
413
|
# Start
|
|
414
|
-
CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.
|
|
414
|
+
CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.session.start(sys, plt, fig_scale=5)
|
|
415
415
|
|
|
416
416
|
xx, tt, fs = scitex.dsp.demo_sig(sig_type="chirp", fs=1024)
|
|
417
417
|
xx = torch.tensor(xx).cuda()
|
|
@@ -480,7 +480,7 @@ if __name__ == "__main__":
|
|
|
480
480
|
# plt.show()
|
|
481
481
|
|
|
482
482
|
# Close
|
|
483
|
-
scitex.
|
|
483
|
+
scitex.session.close(CONFIG)
|
|
484
484
|
|
|
485
485
|
"""
|
|
486
486
|
/home/ywatanabe/proj/entrance/scitex/dsp/nn/_Filters.py
|
scitex/nn/_ModulationIndex.py
CHANGED
|
@@ -170,7 +170,7 @@ if __name__ == "__main__":
|
|
|
170
170
|
import scitex
|
|
171
171
|
|
|
172
172
|
# Start
|
|
173
|
-
CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.
|
|
173
|
+
CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.session.start(sys, plt, fig_scale=3)
|
|
174
174
|
|
|
175
175
|
# Parameters
|
|
176
176
|
FS = 512
|
|
@@ -209,7 +209,7 @@ if __name__ == "__main__":
|
|
|
209
209
|
scitex.io.save(fig, CONFIG["SDIR"] + "modulation_index.png") # plt.show()
|
|
210
210
|
|
|
211
211
|
# Close
|
|
212
|
-
scitex.
|
|
212
|
+
scitex.session.close(CONFIG)
|
|
213
213
|
|
|
214
214
|
# EOF
|
|
215
215
|
|
scitex/nn/_PAC.py
CHANGED
|
@@ -302,7 +302,7 @@ class PAC(nn.Module):
|
|
|
302
302
|
|
|
303
303
|
if __name__ == "__main__":
|
|
304
304
|
# Start
|
|
305
|
-
CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.
|
|
305
|
+
CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.session.start(sys, plt)
|
|
306
306
|
|
|
307
307
|
ts = scitex.gen.TimeStamper()
|
|
308
308
|
|
scitex/nn/_Spectrogram.py
CHANGED
|
@@ -5,6 +5,9 @@
|
|
|
5
5
|
import torch
|
|
6
6
|
import torch.nn as nn
|
|
7
7
|
import torch.nn.functional as F
|
|
8
|
+
import numpy as np
|
|
9
|
+
import matplotlib.pyplot as plt
|
|
10
|
+
import scitex
|
|
8
11
|
from ..decorators import numpy_fn, torch_fn
|
|
9
12
|
|
|
10
13
|
|
|
@@ -103,9 +106,15 @@ def normalize(x, axis=-1, amp=1.0, cuda=False):
|
|
|
103
106
|
|
|
104
107
|
@torch_fn
|
|
105
108
|
def spectrograms(x, fs, dj=0.125, cuda=False):
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
+
try:
|
|
110
|
+
from wavelets_pytorch.transform import (
|
|
111
|
+
WaveletTransformTorch,
|
|
112
|
+
) # PyTorch version
|
|
113
|
+
except ImportError:
|
|
114
|
+
raise ImportError(
|
|
115
|
+
"The spectrograms function requires the wavelets-pytorch package. "
|
|
116
|
+
"Install it with: pip install wavelets-pytorch"
|
|
117
|
+
)
|
|
109
118
|
|
|
110
119
|
dt = 1 / fs
|
|
111
120
|
# dj = 0.125
|