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
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-02 17:53:27 (ywatanabe)"
|
|
4
|
+
# File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/color/_get_from_cmap.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "./src/scitex/plt/color/_get_from_cmap.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
# ----------------------------------------
|
|
11
|
+
|
|
12
|
+
from typing import List, Optional, Tuple, Union
|
|
13
|
+
|
|
14
|
+
import matplotlib
|
|
15
|
+
import numpy as np
|
|
16
|
+
|
|
17
|
+
# class ColorGetter:
|
|
18
|
+
# # https://stackoverflow.com/questions/26108436/how-can-i-get-the-matplotlib-rgb-color-given-the-colormap-name-boundrynorm-an
|
|
19
|
+
# def __init__(self, cmap_name, start_val, stop_val):
|
|
20
|
+
# self.cmap_name = cmap_name
|
|
21
|
+
# self.cmap = plt.get_cmap(cmap_name)
|
|
22
|
+
# self.norm = mpl.colors.Normalize(vmin=start_val, vmax=stop_val)
|
|
23
|
+
# self.scalarMap = cm.ScalarMappable(norm=self.norm, cmap=self.cmap)
|
|
24
|
+
|
|
25
|
+
# def get_rgb(self, val):
|
|
26
|
+
# return self.scalarMap.to_rgba(val)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def get_color_from_cmap(
|
|
30
|
+
cmap_name: str,
|
|
31
|
+
value: float,
|
|
32
|
+
value_range: Optional[Tuple[float, float]] = None,
|
|
33
|
+
alpha: float = 1.0,
|
|
34
|
+
) -> Tuple[float, float, float, float]:
|
|
35
|
+
"""Get a color from a colormap at a specific value.
|
|
36
|
+
|
|
37
|
+
Parameters
|
|
38
|
+
----------
|
|
39
|
+
cmap_name : str
|
|
40
|
+
Name of the colormap (e.g., 'viridis', 'plasma', 'Blues')
|
|
41
|
+
value : float
|
|
42
|
+
Value to map to a color in the colormap
|
|
43
|
+
value_range : tuple of (float, float), optional
|
|
44
|
+
Range of values to map to the colormap. If None, uses (0, 1)
|
|
45
|
+
alpha : float, optional
|
|
46
|
+
Alpha value for the color (0.0 to 1.0), by default 1.0
|
|
47
|
+
|
|
48
|
+
Returns
|
|
49
|
+
-------
|
|
50
|
+
tuple
|
|
51
|
+
RGBA color tuple with values from 0 to 1
|
|
52
|
+
"""
|
|
53
|
+
# Get the colormap using the recommended approach
|
|
54
|
+
cmap = matplotlib.colormaps[cmap_name]
|
|
55
|
+
|
|
56
|
+
# Normalize the value
|
|
57
|
+
if value_range is None:
|
|
58
|
+
norm_value = value
|
|
59
|
+
else:
|
|
60
|
+
min_val, max_val = value_range
|
|
61
|
+
norm_value = (value - min_val) / (max_val - min_val)
|
|
62
|
+
|
|
63
|
+
# Clip to ensure within range
|
|
64
|
+
norm_value = np.clip(norm_value, 0.0, 1.0)
|
|
65
|
+
|
|
66
|
+
# Get the color
|
|
67
|
+
rgba_color = list(cmap(norm_value))
|
|
68
|
+
|
|
69
|
+
# Set alpha
|
|
70
|
+
rgba_color[3] = alpha
|
|
71
|
+
|
|
72
|
+
return tuple(rgba_color)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def get_colors_from_cmap(
|
|
76
|
+
cmap_name: str,
|
|
77
|
+
n_colors: int,
|
|
78
|
+
value_range: Optional[Tuple[float, float]] = None,
|
|
79
|
+
alpha: float = 1.0,
|
|
80
|
+
) -> List[Tuple[float, float, float, float]]:
|
|
81
|
+
"""Get a list of evenly spaced colors from a colormap.
|
|
82
|
+
|
|
83
|
+
Parameters
|
|
84
|
+
----------
|
|
85
|
+
cmap_name : str
|
|
86
|
+
Name of the colormap (e.g., 'viridis', 'plasma', 'Blues')
|
|
87
|
+
n_colors : int
|
|
88
|
+
Number of colors to sample from the colormap
|
|
89
|
+
value_range : tuple of (float, float), optional
|
|
90
|
+
Range of values to map to the colormap. If None, uses (0, 1)
|
|
91
|
+
alpha : float, optional
|
|
92
|
+
Alpha value for the colors (0.0 to 1.0), by default 1.0
|
|
93
|
+
|
|
94
|
+
Returns
|
|
95
|
+
-------
|
|
96
|
+
list
|
|
97
|
+
List of RGBA color tuples with values from 0 to 1
|
|
98
|
+
"""
|
|
99
|
+
if value_range is None:
|
|
100
|
+
values = np.linspace(0, 1, n_colors)
|
|
101
|
+
else:
|
|
102
|
+
values = np.linspace(value_range[0], value_range[1], n_colors)
|
|
103
|
+
|
|
104
|
+
return [get_color_from_cmap(cmap_name, val, value_range, alpha) for val in values]
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def get_categorical_colors_from_cmap(
|
|
108
|
+
cmap_name: str, categories: Union[List, np.ndarray], alpha: float = 1.0
|
|
109
|
+
) -> dict:
|
|
110
|
+
"""Map categorical values to colors from a colormap.
|
|
111
|
+
|
|
112
|
+
Parameters
|
|
113
|
+
----------
|
|
114
|
+
cmap_name : str
|
|
115
|
+
Name of the colormap (e.g., 'viridis', 'plasma', 'Blues')
|
|
116
|
+
categories : list or np.ndarray
|
|
117
|
+
List of categories to map to colors
|
|
118
|
+
alpha : float, optional
|
|
119
|
+
Alpha value for the colors (0.0 to 1.0), by default 1.0
|
|
120
|
+
|
|
121
|
+
Returns
|
|
122
|
+
-------
|
|
123
|
+
dict
|
|
124
|
+
Dictionary mapping categories to RGBA color tuples
|
|
125
|
+
"""
|
|
126
|
+
unique_categories = np.unique(categories)
|
|
127
|
+
n_categories = len(unique_categories)
|
|
128
|
+
|
|
129
|
+
colors = get_colors_from_cmap(cmap_name, n_categories, alpha=alpha)
|
|
130
|
+
|
|
131
|
+
return {cat: colors[idx] for idx, cat in enumerate(unique_categories)}
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
# EOF
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-03 00:51:06 (ywatanabe)"
|
|
4
|
+
# File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/color/_interp_colors.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "./src/scitex/plt/color/_interp_colors.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
# ----------------------------------------
|
|
11
|
+
|
|
12
|
+
import matplotlib.colors as mcolors
|
|
13
|
+
import numpy as np
|
|
14
|
+
from scitex.decorators import deprecated
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def gen_interpolate(color_start, color_end, num_points, round=3):
|
|
18
|
+
color_start_rgba = np.array(mcolors.to_rgba(color_start))
|
|
19
|
+
color_end_rgba = np.array(mcolors.to_rgba(color_end))
|
|
20
|
+
rgba_values = np.linspace(color_start_rgba, color_end_rgba, num_points).round(round)
|
|
21
|
+
return [list(color) for color in rgba_values]
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@deprecated("Use gen_interpolate instead")
|
|
25
|
+
def interpolate(color_start, color_end, num_points, round=3):
|
|
26
|
+
return gen_interpolate(color_start, color_end, num_points, round=round)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# EOF
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-03 00:53:43 (ywatanabe)"
|
|
4
|
+
# File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/color/_vizualize_colors.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "./src/scitex/plt/color/_vizualize_colors.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
# ----------------------------------------
|
|
11
|
+
|
|
12
|
+
import numpy as np
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def vizualize_colors(colors):
|
|
16
|
+
|
|
17
|
+
def gen_rand_sample(size=100):
|
|
18
|
+
x = np.linspace(-1, 1, size)
|
|
19
|
+
y = np.random.normal(size=size)
|
|
20
|
+
s = np.random.randn(size)
|
|
21
|
+
return x, y, s
|
|
22
|
+
|
|
23
|
+
from .. import subplots as scitex_plt_subplots
|
|
24
|
+
|
|
25
|
+
fig, ax = scitex_plt_subplots()
|
|
26
|
+
|
|
27
|
+
for ii, (color_str, rgba) in enumerate(colors.items()):
|
|
28
|
+
xx, yy, ss = gen_rand_sample()
|
|
29
|
+
|
|
30
|
+
# # Box color plot
|
|
31
|
+
# ax.plot_rectangle(
|
|
32
|
+
# xx=ii, yy=0, width=1, height=1, color=rgba, label=color_str
|
|
33
|
+
# )
|
|
34
|
+
|
|
35
|
+
# Line plot
|
|
36
|
+
ax.plot_shaded_line(xx, yy - ss, yy, yy + ss, color=rgba, label=color_str)
|
|
37
|
+
|
|
38
|
+
# # Scatter plot
|
|
39
|
+
# axes[2].scatter(xx, yy, color=rgba, label=color_str)
|
|
40
|
+
|
|
41
|
+
# # KDE plot
|
|
42
|
+
# axes[3].plot_kde(yy, color=rgba, label=color_str)
|
|
43
|
+
|
|
44
|
+
# for ax in axes.flat:
|
|
45
|
+
# # ax.axis("off")
|
|
46
|
+
# ax.legend()
|
|
47
|
+
|
|
48
|
+
ax.legend()
|
|
49
|
+
# plt.tight_layout()
|
|
50
|
+
# plt.show()
|
|
51
|
+
return fig, ax
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
# EOF
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Scitex utils module."""
|
|
3
|
+
|
|
4
|
+
from ._calc_bacc_from_conf_mat import calc_bacc_from_conf_mat
|
|
5
|
+
from ._calc_nice_ticks import calc_nice_ticks
|
|
6
|
+
from ._close import close
|
|
7
|
+
from ._colorbar import add_shared_colorbar, colorbar
|
|
8
|
+
from ._configure_mpl import configure_mpl
|
|
9
|
+
from ._histogram_utils import HistogramBinManager, histogram_bin_manager
|
|
10
|
+
from ._im2grid import im2grid
|
|
11
|
+
from ._is_valid_axis import assert_valid_axis, is_valid_axis
|
|
12
|
+
from ._mk_colorbar import mk_colorbar
|
|
13
|
+
from ._mk_patches import mk_patches
|
|
14
|
+
from ._scientific_captions import ScientificCaption, add_figure_caption, add_panel_captions, caption_manager, create_figure_list, cross_ref, enhance_scitex_save_with_captions, export_captions, quick_caption, save_with_caption
|
|
15
|
+
from ._scitex_config import SciTeXConfig, configure_scitex_ecosystem, get_scitex_config
|
|
16
|
+
|
|
17
|
+
__all__ = [
|
|
18
|
+
"HistogramBinManager",
|
|
19
|
+
"SciTeXConfig",
|
|
20
|
+
"ScientificCaption",
|
|
21
|
+
"add_figure_caption",
|
|
22
|
+
"add_panel_captions",
|
|
23
|
+
"add_shared_colorbar",
|
|
24
|
+
"assert_valid_axis",
|
|
25
|
+
"calc_bacc_from_conf_mat",
|
|
26
|
+
"calc_nice_ticks",
|
|
27
|
+
"caption_manager",
|
|
28
|
+
"close",
|
|
29
|
+
"colorbar",
|
|
30
|
+
"configure_mpl",
|
|
31
|
+
"configure_scitex_ecosystem",
|
|
32
|
+
"create_figure_list",
|
|
33
|
+
"cross_ref",
|
|
34
|
+
"enhance_scitex_save_with_captions",
|
|
35
|
+
"export_captions",
|
|
36
|
+
"get_scitex_config",
|
|
37
|
+
"histogram_bin_manager",
|
|
38
|
+
"im2grid",
|
|
39
|
+
"is_valid_axis",
|
|
40
|
+
"mk_colorbar",
|
|
41
|
+
"mk_patches",
|
|
42
|
+
"quick_caption",
|
|
43
|
+
"save_with_caption",
|
|
44
|
+
]
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-02 10:09:35 (ywatanabe)"
|
|
4
|
+
# File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/utils/_calc_bacc_from_conf_mat.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "./src/scitex/plt/utils/_calc_bacc_from_conf_mat.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
# ----------------------------------------
|
|
11
|
+
|
|
12
|
+
import numpy as np
|
|
13
|
+
|
|
14
|
+
from ...context import suppress_output
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def calc_bacc_from_conf_mat(confusion_matrix: np.ndarray, n_round=3) -> float:
|
|
18
|
+
"""Calculates balanced accuracy from confusion matrix.
|
|
19
|
+
|
|
20
|
+
Parameters
|
|
21
|
+
----------
|
|
22
|
+
confusion_matrix : np.ndarray
|
|
23
|
+
Confusion matrix array
|
|
24
|
+
|
|
25
|
+
Returns
|
|
26
|
+
-------
|
|
27
|
+
float
|
|
28
|
+
Balanced accuracy score
|
|
29
|
+
|
|
30
|
+
Example
|
|
31
|
+
-------
|
|
32
|
+
>>> cm = np.array([[10, 2, 0], [1, 15, 3], [0, 2, 20]])
|
|
33
|
+
>>> bacc = calc_bacc_from_conf_mat(cm, n_round=3)
|
|
34
|
+
>>> print(f"Balanced Accuracy: bacc")
|
|
35
|
+
Balanced Accuracy: 0.889
|
|
36
|
+
"""
|
|
37
|
+
with suppress_output():
|
|
38
|
+
try:
|
|
39
|
+
per_class = np.diag(confusion_matrix) / np.nansum(confusion_matrix, axis=1)
|
|
40
|
+
bacc = np.nanmean(per_class)
|
|
41
|
+
except:
|
|
42
|
+
bacc = np.nan
|
|
43
|
+
return round(bacc, n_round)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
# EOF
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-01 13:40:19 (ywatanabe)"
|
|
4
|
+
# File: /home/ywatanabe/proj/_scitex_repo/src/scitex/plt/_calc_nice_ticks.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "./src/scitex/plt/_calc_nice_ticks.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
# ----------------------------------------
|
|
11
|
+
|
|
12
|
+
import matplotlib.ticker as mticker
|
|
13
|
+
import numpy as np
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def calc_nice_ticks(
|
|
17
|
+
min_val,
|
|
18
|
+
max_val,
|
|
19
|
+
allow_edge_min=True,
|
|
20
|
+
allow_edge_max=False,
|
|
21
|
+
pad_perc=5,
|
|
22
|
+
num_ticks=4,
|
|
23
|
+
prefer_integer=True,
|
|
24
|
+
):
|
|
25
|
+
"""
|
|
26
|
+
Calculate nice tick values for axes based on data range.
|
|
27
|
+
Parameters:
|
|
28
|
+
-----------
|
|
29
|
+
min_val : float
|
|
30
|
+
Minimum data value
|
|
31
|
+
max_val : float
|
|
32
|
+
Maximum data value
|
|
33
|
+
allow_edge_min : bool, optional
|
|
34
|
+
Whether to allow a tick at the min value, defaults to True
|
|
35
|
+
allow_edge_max : bool, optional
|
|
36
|
+
Whether to allow a tick at the max value, defaults to False
|
|
37
|
+
pad_perc : float, optional
|
|
38
|
+
Percentage of data range to pad, defaults to 5%
|
|
39
|
+
num_ticks : int, optional
|
|
40
|
+
Target number of ticks to display, defaults to 4
|
|
41
|
+
prefer_integer : bool, optional
|
|
42
|
+
If True, convert ticks to integers when possible, defaults to True
|
|
43
|
+
Returns:
|
|
44
|
+
--------
|
|
45
|
+
list
|
|
46
|
+
List of nicely spaced tick positions
|
|
47
|
+
"""
|
|
48
|
+
# Handle edge cases
|
|
49
|
+
if min_val == max_val:
|
|
50
|
+
if min_val == 0:
|
|
51
|
+
return [0, 1, 2, 3]
|
|
52
|
+
else:
|
|
53
|
+
# Create a small range around the single value
|
|
54
|
+
margin = abs(min_val) * 0.1
|
|
55
|
+
min_val -= margin
|
|
56
|
+
max_val += margin
|
|
57
|
+
|
|
58
|
+
# Store original values before padding
|
|
59
|
+
original_min = min_val
|
|
60
|
+
original_max = max_val
|
|
61
|
+
|
|
62
|
+
# Apply padding if needed
|
|
63
|
+
range_size = max_val - min_val
|
|
64
|
+
if not allow_edge_min:
|
|
65
|
+
min_val -= range_size * pad_perc / 100
|
|
66
|
+
if not allow_edge_max:
|
|
67
|
+
max_val += range_size * pad_perc / 100
|
|
68
|
+
|
|
69
|
+
# Use matplotlib's MaxNLocator to get nice tick locations
|
|
70
|
+
locator = mticker.MaxNLocator(
|
|
71
|
+
nbins=num_ticks,
|
|
72
|
+
steps=[1, 2, 5, 10],
|
|
73
|
+
integer=False,
|
|
74
|
+
symmetric=False,
|
|
75
|
+
prune=None,
|
|
76
|
+
min_n_ticks=3,
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
# Get tick locations
|
|
80
|
+
tick_locations = locator.tick_values(min_val, max_val)
|
|
81
|
+
|
|
82
|
+
# If we got too many ticks, try to reduce them
|
|
83
|
+
if len(tick_locations) > num_ticks + 1:
|
|
84
|
+
locator = mticker.MaxNLocator(nbins=num_ticks - 1)
|
|
85
|
+
tick_locations = locator.tick_values(min_val, max_val)
|
|
86
|
+
|
|
87
|
+
# Filter out ticks outside the original data range if needed
|
|
88
|
+
if not allow_edge_min:
|
|
89
|
+
tick_locations = [tick for tick in tick_locations if tick >= original_min]
|
|
90
|
+
if not allow_edge_max:
|
|
91
|
+
tick_locations = [tick for tick in tick_locations if tick <= original_max]
|
|
92
|
+
|
|
93
|
+
# Convert to integers if all values can be represented as integers
|
|
94
|
+
if prefer_integer and all(float(int(tick)) == tick for tick in tick_locations):
|
|
95
|
+
tick_locations = [int(tick) for tick in tick_locations]
|
|
96
|
+
|
|
97
|
+
# Convert to simple list
|
|
98
|
+
return np.array(tick_locations).tolist()
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
# EOF
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-04-29 20:41:30 (ywatanabe)"
|
|
4
|
+
# File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/_close.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "./src/scitex/plt/_close.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
# ----------------------------------------
|
|
11
|
+
|
|
12
|
+
import matplotlib
|
|
13
|
+
import matplotlib.pyplot as plt
|
|
14
|
+
import scitex.plt as scitex_plt
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def close(obj):
|
|
18
|
+
"""Close a matplotlib figure or SciTeX FigWrapper object.
|
|
19
|
+
|
|
20
|
+
Properly closes matplotlib figures to free memory, handling both
|
|
21
|
+
standard matplotlib Figure objects and SciTeX FigWrapper objects.
|
|
22
|
+
This is important for preventing memory leaks when creating many plots.
|
|
23
|
+
|
|
24
|
+
Parameters
|
|
25
|
+
----------
|
|
26
|
+
obj : matplotlib.figure.Figure or scitex.plt.FigWrapper
|
|
27
|
+
The figure object to close. Can be either a matplotlib Figure
|
|
28
|
+
or an SciTeX FigWrapper instance.
|
|
29
|
+
|
|
30
|
+
Raises
|
|
31
|
+
------
|
|
32
|
+
TypeError
|
|
33
|
+
If obj is neither a Figure nor FigWrapper object.
|
|
34
|
+
|
|
35
|
+
Examples
|
|
36
|
+
--------
|
|
37
|
+
>>> # Close a matplotlib figure
|
|
38
|
+
>>> fig, ax = plt.subplots()
|
|
39
|
+
>>> ax.plot([1, 2, 3], [1, 4, 9])
|
|
40
|
+
>>> close(fig)
|
|
41
|
+
|
|
42
|
+
>>> # Close an SciTeX FigWrapper
|
|
43
|
+
>>> fig, axes = scitex.plt.subplots(2, 2)
|
|
44
|
+
>>> close(fig)
|
|
45
|
+
|
|
46
|
+
>>> # Prevents memory leaks in loops
|
|
47
|
+
>>> for i in range(100):
|
|
48
|
+
... fig, ax = plt.subplots()
|
|
49
|
+
... ax.plot(data[i])
|
|
50
|
+
... plt.savefig(f'plot_{i}.png')
|
|
51
|
+
... close(fig) # Important!
|
|
52
|
+
|
|
53
|
+
See Also
|
|
54
|
+
--------
|
|
55
|
+
matplotlib.pyplot.close : Standard matplotlib close function
|
|
56
|
+
scitex.plt.subplots : Creates FigWrapper objects
|
|
57
|
+
"""
|
|
58
|
+
if isinstance(obj, matplotlib.figure.Figure):
|
|
59
|
+
plt.close(obj)
|
|
60
|
+
elif isinstance(obj, scitex_plt._subplots._FigWrapper.FigWrapper):
|
|
61
|
+
plt.close(obj.figure)
|
|
62
|
+
else:
|
|
63
|
+
raise TypeError(
|
|
64
|
+
f"Cannot close object of type {type(obj).__name__}. Expected FigWrapper or Figure object."
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
# EOF
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-06-08 11:15:00 (ywatanabe)"
|
|
4
|
+
# File: /src/scitex/plt/utils/_colorbar.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
|
|
7
|
+
"""Enhanced colorbar utilities for better placement with scitex.plt"""
|
|
8
|
+
|
|
9
|
+
import matplotlib.pyplot as plt
|
|
10
|
+
from matplotlib.cm import ScalarMappable
|
|
11
|
+
from matplotlib.colors import Normalize
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def colorbar(mappable, ax=None, **kwargs):
|
|
15
|
+
"""Enhanced colorbar function that ensures proper spacing.
|
|
16
|
+
|
|
17
|
+
This function wraps matplotlib.pyplot.colorbar with better defaults
|
|
18
|
+
to prevent overlap with axes when using constrained_layout.
|
|
19
|
+
|
|
20
|
+
Parameters
|
|
21
|
+
----------
|
|
22
|
+
mappable : matplotlib.cm.ScalarMappable
|
|
23
|
+
The mappable whose colorbar is to be made (e.g., from imshow, scatter)
|
|
24
|
+
ax : matplotlib.axes.Axes or list of Axes, optional
|
|
25
|
+
Parent axes from which space for a new colorbar axes will be stolen.
|
|
26
|
+
**kwargs : dict
|
|
27
|
+
Additional keyword arguments passed to matplotlib.pyplot.colorbar
|
|
28
|
+
|
|
29
|
+
Returns
|
|
30
|
+
-------
|
|
31
|
+
colorbar : matplotlib.colorbar.Colorbar
|
|
32
|
+
The colorbar instance
|
|
33
|
+
"""
|
|
34
|
+
# Set better defaults for colorbar placement
|
|
35
|
+
defaults = {
|
|
36
|
+
'fraction': 0.046, # Fraction of axes to use for colorbar
|
|
37
|
+
'pad': 0.04, # Padding between axes and colorbar
|
|
38
|
+
'aspect': 20, # Aspect ratio of colorbar
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
# Update defaults with any user-provided kwargs
|
|
42
|
+
for key, value in defaults.items():
|
|
43
|
+
if key not in kwargs:
|
|
44
|
+
kwargs[key] = value
|
|
45
|
+
|
|
46
|
+
# Create the colorbar
|
|
47
|
+
cbar = plt.colorbar(mappable, ax=ax, **kwargs)
|
|
48
|
+
|
|
49
|
+
# If using constrained_layout, ensure the figure updates
|
|
50
|
+
if ax is not None:
|
|
51
|
+
fig = ax.figure if hasattr(ax, 'figure') else ax[0].figure
|
|
52
|
+
if hasattr(fig, 'get_constrained_layout') and fig.get_constrained_layout():
|
|
53
|
+
# Force a layout update
|
|
54
|
+
fig.canvas.draw_idle()
|
|
55
|
+
|
|
56
|
+
return cbar
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def add_shared_colorbar(fig, axes, mappable, location='right', **kwargs):
|
|
60
|
+
"""Add a single colorbar shared by multiple axes.
|
|
61
|
+
|
|
62
|
+
Parameters
|
|
63
|
+
----------
|
|
64
|
+
fig : matplotlib.figure.Figure
|
|
65
|
+
The figure containing the axes
|
|
66
|
+
axes : array-like of Axes
|
|
67
|
+
The axes that will share the colorbar
|
|
68
|
+
mappable : matplotlib.cm.ScalarMappable
|
|
69
|
+
The mappable whose colorbar is to be made
|
|
70
|
+
location : {'right', 'bottom', 'left', 'top'}, optional
|
|
71
|
+
Where to place the colorbar (default: 'right')
|
|
72
|
+
**kwargs : dict
|
|
73
|
+
Additional keyword arguments passed to fig.colorbar
|
|
74
|
+
|
|
75
|
+
Returns
|
|
76
|
+
-------
|
|
77
|
+
colorbar : matplotlib.colorbar.Colorbar
|
|
78
|
+
The colorbar instance
|
|
79
|
+
"""
|
|
80
|
+
defaults = {
|
|
81
|
+
'shrink': 0.8, # Shrink colorbar to match axes height
|
|
82
|
+
'aspect': 30, # Make it thinner for shared colorbars
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
# Update defaults with any user-provided kwargs
|
|
86
|
+
for key, value in defaults.items():
|
|
87
|
+
if key not in kwargs:
|
|
88
|
+
kwargs[key] = value
|
|
89
|
+
|
|
90
|
+
# Create the shared colorbar
|
|
91
|
+
cbar = fig.colorbar(mappable, ax=axes, location=location, **kwargs)
|
|
92
|
+
|
|
93
|
+
return cbar
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
# EOF
|