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,114 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-02 20:12:46 (ywatanabe)"
|
|
4
|
+
# File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/ax/__init__.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "./src/scitex/plt/ax/__init__.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
# ----------------------------------------
|
|
11
|
+
|
|
12
|
+
# Adjust
|
|
13
|
+
from ._style._add_marginal_ax import add_marginal_ax
|
|
14
|
+
from ._style._add_panel import add_panel, panel
|
|
15
|
+
from ._style._extend import extend
|
|
16
|
+
from ._style._force_aspect import force_aspect
|
|
17
|
+
from ._style._format_label import format_label
|
|
18
|
+
from ._style._hide_spines import hide_spines
|
|
19
|
+
from ._style._show_spines import (
|
|
20
|
+
show_spines,
|
|
21
|
+
show_all_spines,
|
|
22
|
+
show_classic_spines,
|
|
23
|
+
show_box_spines,
|
|
24
|
+
toggle_spines,
|
|
25
|
+
scientific_spines,
|
|
26
|
+
clean_spines,
|
|
27
|
+
)
|
|
28
|
+
from ._style._map_ticks import map_ticks
|
|
29
|
+
from ._style._rotate_labels import rotate_labels
|
|
30
|
+
from ._style._sci_note import sci_note
|
|
31
|
+
from ._style._set_n_ticks import set_n_ticks
|
|
32
|
+
from ._style._set_size import set_size
|
|
33
|
+
from ._style._set_supxyt import set_supxyt
|
|
34
|
+
from ._style._set_ticks import set_ticks
|
|
35
|
+
from ._style._set_xyt import set_xyt
|
|
36
|
+
from ._style._shift import shift
|
|
37
|
+
from ._style._share_axes import (
|
|
38
|
+
get_global_xlim,
|
|
39
|
+
get_global_ylim,
|
|
40
|
+
set_xlims,
|
|
41
|
+
set_ylims,
|
|
42
|
+
sharex,
|
|
43
|
+
sharexy,
|
|
44
|
+
sharey,
|
|
45
|
+
)
|
|
46
|
+
from ._style._set_log_scale import (
|
|
47
|
+
set_log_scale,
|
|
48
|
+
smart_log_limits,
|
|
49
|
+
add_log_scale_indicator,
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
# Plot
|
|
53
|
+
from ._plot._plot_heatmap import plot_heatmap
|
|
54
|
+
from ._plot._plot_circular_hist import plot_circular_hist
|
|
55
|
+
from ._plot._plot_conf_mat import plot_conf_mat
|
|
56
|
+
from ._plot._plot_cube import plot_cube
|
|
57
|
+
from ._plot._plot_ecdf import plot_ecdf
|
|
58
|
+
from ._plot._plot_fillv import plot_fillv
|
|
59
|
+
from ._plot._plot_violin import plot_violin
|
|
60
|
+
from ._plot._plot_image import plot_image
|
|
61
|
+
from ._plot._plot_joyplot import plot_joyplot
|
|
62
|
+
from ._plot._plot_raster import plot_raster
|
|
63
|
+
from ._plot._plot_rectangle import plot_rectangle
|
|
64
|
+
from ._plot._plot_scatter_hist import plot_scatter_hist
|
|
65
|
+
from ._plot._plot_shaded_line import plot_shaded_line
|
|
66
|
+
from ._plot._plot_statistical_shaded_line import (
|
|
67
|
+
plot_line,
|
|
68
|
+
plot_mean_std,
|
|
69
|
+
plot_mean_ci,
|
|
70
|
+
plot_median_iqr,
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
# ################################################################################
|
|
75
|
+
# # For Matplotlib Compatibility
|
|
76
|
+
# ################################################################################
|
|
77
|
+
# import matplotlib.pyplot.axis as counter_part
|
|
78
|
+
# _local_module_attributes = list(globals().keys())
|
|
79
|
+
# print(_local_module_attributes)
|
|
80
|
+
|
|
81
|
+
# def __getattr__(name):
|
|
82
|
+
# """
|
|
83
|
+
# Fallback to fetch attributes from matplotlib.pyplot
|
|
84
|
+
# if they are not defined directly in this module.
|
|
85
|
+
# """
|
|
86
|
+
# try:
|
|
87
|
+
# # Get the attribute from matplotlib.pyplot
|
|
88
|
+
# return getattr(counter_part, name)
|
|
89
|
+
# except AttributeError:
|
|
90
|
+
# # Raise the standard error if not found in pyplot either
|
|
91
|
+
# raise AttributeError(
|
|
92
|
+
# f"module '{__name__}' nor matplotlib.pyplot has attribute '{name}'"
|
|
93
|
+
# ) from None
|
|
94
|
+
|
|
95
|
+
# def __dir__():
|
|
96
|
+
# """
|
|
97
|
+
# Provide combined directory for tab completion, including
|
|
98
|
+
# attributes from this module and matplotlib.pyplot.
|
|
99
|
+
# """
|
|
100
|
+
# # Get attributes defined explicitly in this module
|
|
101
|
+
# local_attrs = set(_local_module_attributes)
|
|
102
|
+
# # Get attributes from matplotlib.pyplot
|
|
103
|
+
# pyplot_attrs = set(dir(counter_part))
|
|
104
|
+
# # Return the sorted union
|
|
105
|
+
# return sorted(local_attrs.union(pyplot_attrs))
|
|
106
|
+
|
|
107
|
+
# """
|
|
108
|
+
# import matplotlib.pyplot as plt
|
|
109
|
+
# import scitex.plt as mplt
|
|
110
|
+
|
|
111
|
+
# print(set(dir(mplt.ax)) - set(dir(plt.axis)))
|
|
112
|
+
# """
|
|
113
|
+
|
|
114
|
+
# EOF
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-02 20:12:19 (ywatanabe)"
|
|
4
|
+
# File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/ax/_plot/__init__.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "./src/scitex/plt/ax/_plot/__init__.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
|
|
11
|
+
from ._plot_scatter_hist import plot_scatter_hist
|
|
12
|
+
from ._plot_heatmap import plot_heatmap
|
|
13
|
+
from ._plot_circular_hist import plot_circular_hist
|
|
14
|
+
from ._plot_conf_mat import plot_conf_mat
|
|
15
|
+
from ._plot_cube import plot_cube
|
|
16
|
+
from ._plot_ecdf import plot_ecdf
|
|
17
|
+
from ._plot_fillv import plot_fillv
|
|
18
|
+
from ._plot_violin import plot_violin, sns_plot_violin
|
|
19
|
+
from ._plot_image import plot_image
|
|
20
|
+
from ._plot_joyplot import plot_joyplot
|
|
21
|
+
from ._plot_raster import plot_raster
|
|
22
|
+
from ._plot_rectangle import plot_rectangle
|
|
23
|
+
from ._plot_shaded_line import plot_shaded_line, _plot_single_shaded_line
|
|
24
|
+
from ._plot_statistical_shaded_line import (
|
|
25
|
+
plot_line,
|
|
26
|
+
plot_mean_std,
|
|
27
|
+
plot_mean_ci,
|
|
28
|
+
plot_median_iqr,
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
__all__ = [
|
|
32
|
+
"plot_scatter_hist",
|
|
33
|
+
"plot_heatmap",
|
|
34
|
+
"plot_circular_hist",
|
|
35
|
+
"plot_conf_mat",
|
|
36
|
+
"plot_cube",
|
|
37
|
+
"plot_ecdf",
|
|
38
|
+
"plot_fillv",
|
|
39
|
+
"plot_violin",
|
|
40
|
+
"sns_plot_violin",
|
|
41
|
+
"plot_image",
|
|
42
|
+
"plot_joyplot",
|
|
43
|
+
"plot_raster",
|
|
44
|
+
"plot_rectangle",
|
|
45
|
+
"plot_shaded_line",
|
|
46
|
+
"_plot_single_shaded_line",
|
|
47
|
+
"plot_line",
|
|
48
|
+
"plot_mean_std",
|
|
49
|
+
"plot_mean_ci",
|
|
50
|
+
"plot_median_iqr",
|
|
51
|
+
]
|
|
52
|
+
|
|
53
|
+
# EOF
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-01 15:21:48 (ywatanabe)"
|
|
4
|
+
# File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/ax/_plot/_plot_circular_hist.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "./src/scitex/plt/ax/_plot/_plot_circular_hist.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
# ----------------------------------------
|
|
11
|
+
|
|
12
|
+
# Time-stamp: "2024-02-03 13:10:50 (ywatanabe)"
|
|
13
|
+
import matplotlib
|
|
14
|
+
import numpy as np
|
|
15
|
+
from ....plt.utils import assert_valid_axis
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def plot_circular_hist(
|
|
19
|
+
axis,
|
|
20
|
+
radians,
|
|
21
|
+
bins=16,
|
|
22
|
+
density=True,
|
|
23
|
+
offset=0,
|
|
24
|
+
gaps=True,
|
|
25
|
+
color=None,
|
|
26
|
+
range_bias=0,
|
|
27
|
+
):
|
|
28
|
+
"""
|
|
29
|
+
Example:
|
|
30
|
+
fig, ax = plt.subplots(subplot_kw=dict(projection="polar"))
|
|
31
|
+
ax = scitex.plt.plot_circular_hist(ax, radians)
|
|
32
|
+
Produce a circular histogram of angles on ax.
|
|
33
|
+
|
|
34
|
+
Parameters
|
|
35
|
+
----------
|
|
36
|
+
ax : matplotlib.axes._subplots.PolarAxesSubplot or scitex.plt._subplots.AxisWrapper
|
|
37
|
+
axis instance created with subplot_kw=dict(projection='polar').
|
|
38
|
+
|
|
39
|
+
radians : array
|
|
40
|
+
Angles to plot, expected in units of radians.
|
|
41
|
+
|
|
42
|
+
bins : int, optional
|
|
43
|
+
Defines the number of equal-width bins in the range. The default is 16.
|
|
44
|
+
|
|
45
|
+
density : bool, optional
|
|
46
|
+
If True plot frequency proportional to area. If False plot frequency
|
|
47
|
+
proportional to radius. The default is True.
|
|
48
|
+
|
|
49
|
+
offset : float, optional
|
|
50
|
+
Sets the offset for the location of the 0 direction in units of
|
|
51
|
+
radians. The default is 0.
|
|
52
|
+
|
|
53
|
+
gaps : bool, optional
|
|
54
|
+
Whether to allow gaps between bins. When gaps = False the bins are
|
|
55
|
+
forced to partition the entire [-pi, pi] range. The default is True.
|
|
56
|
+
|
|
57
|
+
Returns
|
|
58
|
+
-------
|
|
59
|
+
n : array or list of arrays
|
|
60
|
+
The number of values in each bin.
|
|
61
|
+
|
|
62
|
+
bins : array
|
|
63
|
+
The edges of the bins.
|
|
64
|
+
|
|
65
|
+
patches : `.BarContainer` or list of a single `.Polygon`
|
|
66
|
+
Container of individual artists used to create the histogram
|
|
67
|
+
or list of such containers if there are multiple input datasets.
|
|
68
|
+
"""
|
|
69
|
+
assert_valid_axis(axis, "First argument must be a matplotlib axis or scitex axis wrapper")
|
|
70
|
+
|
|
71
|
+
# Wrap angles to [-pi, pi)
|
|
72
|
+
radians = (radians + np.pi) % (2 * np.pi) - np.pi
|
|
73
|
+
|
|
74
|
+
# Force bins to partition entire circle
|
|
75
|
+
if not gaps:
|
|
76
|
+
bins = np.linspace(-np.pi, np.pi, num=bins + 1)
|
|
77
|
+
|
|
78
|
+
# Bin data and record counts
|
|
79
|
+
n, bins = np.histogram(
|
|
80
|
+
radians, bins=bins, range=(-np.pi + range_bias, np.pi + range_bias)
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
# Compute width of each bin
|
|
84
|
+
widths = np.diff(bins)
|
|
85
|
+
|
|
86
|
+
# By default plot frequency proportional to area
|
|
87
|
+
if density:
|
|
88
|
+
# Area to assign each bin
|
|
89
|
+
area = n / radians.size
|
|
90
|
+
# Calculate corresponding bin radius
|
|
91
|
+
radius = (area / np.pi) ** 0.5
|
|
92
|
+
# Otherwise plot frequency proportional to radius
|
|
93
|
+
else:
|
|
94
|
+
radius = n
|
|
95
|
+
|
|
96
|
+
mean_val = np.nanmean(radians)
|
|
97
|
+
std_val = np.nanstd(radians)
|
|
98
|
+
axis.axvline(mean_val, color=color)
|
|
99
|
+
axis.text(mean_val, 1, std_val)
|
|
100
|
+
|
|
101
|
+
# Plot data on ax
|
|
102
|
+
patches = axis.bar(
|
|
103
|
+
bins[:-1],
|
|
104
|
+
radius,
|
|
105
|
+
zorder=1,
|
|
106
|
+
align="edge",
|
|
107
|
+
width=widths,
|
|
108
|
+
edgecolor=color,
|
|
109
|
+
alpha=0.9,
|
|
110
|
+
fill=False,
|
|
111
|
+
linewidth=1,
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
# Set the direction of the zero angle
|
|
115
|
+
axis.set_theta_offset(offset)
|
|
116
|
+
|
|
117
|
+
# Remove ylabels for area plots (they are mostly obstructive)
|
|
118
|
+
if density:
|
|
119
|
+
axis.set_yticks([])
|
|
120
|
+
|
|
121
|
+
return n, bins, patches
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
# EOF
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-18 15:08:16 (ywatanabe)"
|
|
4
|
+
# File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/plt/ax/_plot/_plot_conf_mat.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "./src/scitex/plt/ax/_plot/_plot_conf_mat.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
# ----------------------------------------
|
|
11
|
+
|
|
12
|
+
from typing import List, Optional, Tuple, Union
|
|
13
|
+
|
|
14
|
+
import matplotlib
|
|
15
|
+
import matplotlib.pyplot as plt
|
|
16
|
+
import numpy as np
|
|
17
|
+
import pandas as pd
|
|
18
|
+
import seaborn as sns
|
|
19
|
+
|
|
20
|
+
from ...utils._calc_bacc_from_conf_mat import calc_bacc_from_conf_mat
|
|
21
|
+
from ...utils import assert_valid_axis
|
|
22
|
+
from .._style._extend import extend as scitex_plt_extend
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def plot_conf_mat(
|
|
26
|
+
axis: plt.Axes,
|
|
27
|
+
data: Union[np.ndarray, pd.DataFrame],
|
|
28
|
+
x_labels: Optional[List[str]] = None,
|
|
29
|
+
y_labels: Optional[List[str]] = None,
|
|
30
|
+
title: str = "Confusion Matrix",
|
|
31
|
+
cmap: str = "Blues",
|
|
32
|
+
cbar: bool = True,
|
|
33
|
+
cbar_kw: dict = {},
|
|
34
|
+
label_rotation_xy: Tuple[float, float] = (15, 15),
|
|
35
|
+
x_extend_ratio: float = 1.0,
|
|
36
|
+
y_extend_ratio: float = 1.0,
|
|
37
|
+
calc_bacc: bool = False,
|
|
38
|
+
**kwargs,
|
|
39
|
+
) -> Union[plt.Axes, Tuple[plt.Axes, float]]:
|
|
40
|
+
"""Creates a confusion matrix heatmap with optional balanced accuracy.
|
|
41
|
+
|
|
42
|
+
Parameters
|
|
43
|
+
----------
|
|
44
|
+
axis : plt.Axes or scitex.plt._subplots._AxisWrapper.AxisWrapper
|
|
45
|
+
Matplotlib axes or scitex axis wrapper to plot on
|
|
46
|
+
data : Union[np.ndarray, pd.DataFrame]
|
|
47
|
+
Confusion matrix data
|
|
48
|
+
x_labels : Optional[List[str]], optional
|
|
49
|
+
Labels for predicted classes
|
|
50
|
+
y_labels : Optional[List[str]], optional
|
|
51
|
+
Labels for true classes
|
|
52
|
+
title : str, optional
|
|
53
|
+
Plot title
|
|
54
|
+
cmap : str, optional
|
|
55
|
+
Colormap name
|
|
56
|
+
cbar : bool, optional
|
|
57
|
+
Whether to show colorbar
|
|
58
|
+
cbar_kw : dict, optional
|
|
59
|
+
Colorbar parameters
|
|
60
|
+
label_rotation_xy : Tuple[float, float], optional
|
|
61
|
+
(x,y) label rotation angles
|
|
62
|
+
x_extend_ratio : float, optional
|
|
63
|
+
X-axis extension ratio
|
|
64
|
+
y_extend_ratio : float, optional
|
|
65
|
+
Y-axis extension ratio
|
|
66
|
+
calc_bacc : bool, optional
|
|
67
|
+
Calculate Balanced Accuracy from Confusion Matrix
|
|
68
|
+
|
|
69
|
+
Returns
|
|
70
|
+
-------
|
|
71
|
+
Union[plt.Axes, Tuple[plt.Axes, float]] or Union[scitex.plt._subplots._AxisWrapper.AxisWrapper, Tuple[scitex.plt._subplots._AxisWrapper.AxisWrapper, float]]
|
|
72
|
+
Axes object and optionally balanced accuracy
|
|
73
|
+
|
|
74
|
+
Example
|
|
75
|
+
-------
|
|
76
|
+
>>> data = np.array([[10, 2, 0], [1, 15, 3], [0, 2, 20]])
|
|
77
|
+
>>> fig, ax = plt.subplots()
|
|
78
|
+
>>> ax, bacc = plot_conf_mat(ax, data, x_labels=['A','B','C'],
|
|
79
|
+
... y_labels=['X','Y','Z'], calc_bacc=True)
|
|
80
|
+
>>> print(f"Balanced Accuracy: {bacc:.3f}")
|
|
81
|
+
Balanced Accuracy: 0.889
|
|
82
|
+
"""
|
|
83
|
+
|
|
84
|
+
assert_valid_axis(axis, "First argument must be a matplotlib axis or scitex axis wrapper")
|
|
85
|
+
|
|
86
|
+
if not isinstance(data, pd.DataFrame):
|
|
87
|
+
data = pd.DataFrame(data)
|
|
88
|
+
|
|
89
|
+
bacc_val = calc_bacc_from_conf_mat(data.values)
|
|
90
|
+
title = f"{title} (bACC = {bacc_val:.3f})"
|
|
91
|
+
|
|
92
|
+
res = sns.heatmap(
|
|
93
|
+
data,
|
|
94
|
+
ax=axis,
|
|
95
|
+
cmap=cmap,
|
|
96
|
+
annot=True,
|
|
97
|
+
fmt=",d",
|
|
98
|
+
cbar=False,
|
|
99
|
+
vmin=0,
|
|
100
|
+
**kwargs,
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
res.invert_yaxis()
|
|
104
|
+
|
|
105
|
+
for _, spine in res.spines.items():
|
|
106
|
+
spine.set_visible(False)
|
|
107
|
+
|
|
108
|
+
axis.set_xlabel("Predicted label")
|
|
109
|
+
axis.set_ylabel("True label")
|
|
110
|
+
axis.set_title(title)
|
|
111
|
+
|
|
112
|
+
if x_labels is not None:
|
|
113
|
+
axis.set_xticklabels(x_labels)
|
|
114
|
+
if y_labels is not None:
|
|
115
|
+
axis.set_yticklabels(y_labels)
|
|
116
|
+
|
|
117
|
+
axis = scitex_plt_extend(axis, x_extend_ratio, y_extend_ratio)
|
|
118
|
+
if data.shape[0] == data.shape[1]:
|
|
119
|
+
axis.set_box_aspect(1)
|
|
120
|
+
axis.set_xticklabels(
|
|
121
|
+
axis.get_xticklabels(),
|
|
122
|
+
rotation=label_rotation_xy[0],
|
|
123
|
+
fontdict={"verticalalignment": "top"},
|
|
124
|
+
)
|
|
125
|
+
axis.set_yticklabels(
|
|
126
|
+
axis.get_yticklabels(),
|
|
127
|
+
rotation=label_rotation_xy[1],
|
|
128
|
+
fontdict={"horizontalalignment": "right"},
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
if calc_bacc:
|
|
132
|
+
return axis, bacc_val
|
|
133
|
+
else:
|
|
134
|
+
return axis, None
|
|
135
|
+
|
|
136
|
+
# EOF
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-01 15:21:37 (ywatanabe)"
|
|
4
|
+
# File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/ax/_plot/_plot_cube.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "./src/scitex/plt/ax/_plot/_plot_cube.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
# ----------------------------------------
|
|
11
|
+
|
|
12
|
+
from itertools import combinations, product
|
|
13
|
+
|
|
14
|
+
import numpy as np
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def plot_cube(ax, xlim, ylim, zlim, c="blue", alpha=1.0):
|
|
18
|
+
"""
|
|
19
|
+
Plot a 3D cube on the given axis.
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
ax: Matplotlib 3D axis
|
|
23
|
+
xlim: Range for x-axis as a tuple (min, max)
|
|
24
|
+
ylim: Range for y-axis as a tuple (min, max)
|
|
25
|
+
zlim: Range for z-axis as a tuple (min, max)
|
|
26
|
+
c: Color of the cube edges (default: 'blue')
|
|
27
|
+
alpha: Transparency of the cube edges (default: 1.0)
|
|
28
|
+
|
|
29
|
+
Returns:
|
|
30
|
+
Matplotlib axis with the cube plotted
|
|
31
|
+
"""
|
|
32
|
+
# Validate inputs
|
|
33
|
+
assert hasattr(ax, "plot3D"), "The axis must be a 3D axis with plot3D method"
|
|
34
|
+
assert len(xlim) == 2, "xlim must be a tuple of (min, max)"
|
|
35
|
+
assert len(ylim) == 2, "ylim must be a tuple of (min, max)"
|
|
36
|
+
assert len(zlim) == 2, "zlim must be a tuple of (min, max)"
|
|
37
|
+
assert xlim[0] < xlim[1], "xlim[0] must be less than xlim[1]"
|
|
38
|
+
assert ylim[0] < ylim[1], "ylim[0] must be less than ylim[1]"
|
|
39
|
+
assert zlim[0] < zlim[1], "zlim[0] must be less than zlim[1]"
|
|
40
|
+
|
|
41
|
+
# Get all corners of the cube
|
|
42
|
+
corners = np.array(list(product(xlim, ylim, zlim)))
|
|
43
|
+
|
|
44
|
+
# Draw edges between corners
|
|
45
|
+
for start, end in combinations(corners, 2):
|
|
46
|
+
# Check if the points form an edge (differ in exactly one dimension)
|
|
47
|
+
if np.sum(np.abs(start - end)) == xlim[1] - xlim[0]:
|
|
48
|
+
ax.plot3D(*zip(start, end), c=c, linewidth=3, alpha=alpha)
|
|
49
|
+
if np.sum(np.abs(start - end)) == ylim[1] - ylim[0]:
|
|
50
|
+
ax.plot3D(*zip(start, end), c=c, linewidth=3, alpha=alpha)
|
|
51
|
+
if np.sum(np.abs(start - end)) == zlim[1] - zlim[0]:
|
|
52
|
+
ax.plot3D(*zip(start, end), c=c, linewidth=3, alpha=alpha)
|
|
53
|
+
|
|
54
|
+
return ax
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
# EOF
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-01 20:17:59 (ywatanabe)"
|
|
4
|
+
# File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/ax/_plot/_plot_ecdf.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "./src/scitex/plt/ax/_plot/_plot_ecdf.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
# ----------------------------------------
|
|
11
|
+
|
|
12
|
+
import warnings
|
|
13
|
+
|
|
14
|
+
import matplotlib
|
|
15
|
+
import numpy as np
|
|
16
|
+
|
|
17
|
+
from ....pd._force_df import force_df as scitex_pd_force_df
|
|
18
|
+
from ....plt.utils import assert_valid_axis
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def plot_ecdf(axis, data, **kwargs):
|
|
22
|
+
"""Plot Empirical Cumulative Distribution Function (ECDF).
|
|
23
|
+
|
|
24
|
+
The ECDF shows the proportion of data points less than or equal to each value,
|
|
25
|
+
representing the empirical estimate of the cumulative distribution function.
|
|
26
|
+
|
|
27
|
+
Parameters
|
|
28
|
+
----------
|
|
29
|
+
axis : matplotlib.axes.Axes or scitex.plt._subplots.AxisWrapper
|
|
30
|
+
Matplotlib axis or scitex axis wrapper to plot on
|
|
31
|
+
data : array-like
|
|
32
|
+
Data to compute and plot ECDF for. NaN values are ignored.
|
|
33
|
+
**kwargs : dict
|
|
34
|
+
Additional arguments to pass to plot function
|
|
35
|
+
|
|
36
|
+
Returns
|
|
37
|
+
-------
|
|
38
|
+
tuple
|
|
39
|
+
(axis, DataFrame) containing the plot and data
|
|
40
|
+
"""
|
|
41
|
+
assert_valid_axis(axis, "First argument must be a matplotlib axis or scitex axis wrapper")
|
|
42
|
+
|
|
43
|
+
# Flatten and remove NaN values
|
|
44
|
+
data = np.hstack(data)
|
|
45
|
+
|
|
46
|
+
# Warnings
|
|
47
|
+
if np.isnan(data).any():
|
|
48
|
+
warnings.warn("NaN value are ignored for ECDF plot.")
|
|
49
|
+
data = data[~np.isnan(data)]
|
|
50
|
+
nn = len(data)
|
|
51
|
+
|
|
52
|
+
# Sort the data and compute the ECDF values
|
|
53
|
+
data_sorted = np.sort(data)
|
|
54
|
+
ecdf_perc = 100 * np.arange(1, len(data_sorted) + 1) / len(data_sorted)
|
|
55
|
+
|
|
56
|
+
# Create the pseudo x-axis for step plotting
|
|
57
|
+
x_step = np.repeat(data_sorted, 2)[1:]
|
|
58
|
+
y_step = np.repeat(ecdf_perc, 2)[:-1]
|
|
59
|
+
|
|
60
|
+
# Plot the ECDF using steps
|
|
61
|
+
axis.plot(x_step, y_step, drawstyle="steps-post", **kwargs)
|
|
62
|
+
|
|
63
|
+
# Scatter the original data points
|
|
64
|
+
axis.plot(data_sorted, ecdf_perc, marker=".", linestyle="none")
|
|
65
|
+
|
|
66
|
+
# Set ylim, xlim, and aspect ratio
|
|
67
|
+
axis.set_ylim(0, 100)
|
|
68
|
+
axis.set_xlim(0, 1.0)
|
|
69
|
+
|
|
70
|
+
# Create a DataFrame to hold the ECDF data
|
|
71
|
+
df = scitex_pd_force_df(
|
|
72
|
+
{
|
|
73
|
+
"x": data_sorted,
|
|
74
|
+
"y": ecdf_perc,
|
|
75
|
+
"n": nn,
|
|
76
|
+
"x_step": x_step,
|
|
77
|
+
"y_step": y_step,
|
|
78
|
+
}
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
return axis, df
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
# EOF
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-04-30 21:26:45 (ywatanabe)"
|
|
4
|
+
# File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/ax/_plot_fillv.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "./src/scitex/plt/ax/_plot_fillv.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
# ----------------------------------------
|
|
11
|
+
|
|
12
|
+
import matplotlib
|
|
13
|
+
import numpy as np
|
|
14
|
+
from ....plt.utils import assert_valid_axis
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def plot_fillv(axes, starts, ends, color="red", alpha=0.2):
|
|
18
|
+
"""
|
|
19
|
+
Fill between specified start and end intervals on an axis or array of axes.
|
|
20
|
+
|
|
21
|
+
Parameters
|
|
22
|
+
----------
|
|
23
|
+
axes : matplotlib.axes.Axes or scitex.plt._subplots.AxisWrapper or numpy.ndarray of axes
|
|
24
|
+
The axis object(s) to fill intervals on.
|
|
25
|
+
starts : array-like
|
|
26
|
+
Array-like of start positions.
|
|
27
|
+
ends : array-like
|
|
28
|
+
Array-like of end positions.
|
|
29
|
+
color : str, optional
|
|
30
|
+
The color to use for the filled regions. Default is "red".
|
|
31
|
+
alpha : float, optional
|
|
32
|
+
The alpha blending value, between 0 (transparent) and 1 (opaque). Default is 0.2.
|
|
33
|
+
|
|
34
|
+
Returns
|
|
35
|
+
-------
|
|
36
|
+
list
|
|
37
|
+
List of axes with filled intervals.
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
is_axes = isinstance(axes, np.ndarray)
|
|
41
|
+
|
|
42
|
+
axes = axes if isinstance(axes, np.ndarray) else [axes]
|
|
43
|
+
|
|
44
|
+
for ax in axes:
|
|
45
|
+
assert_valid_axis(ax, "First argument must be a matplotlib axis or scitex axis wrapper")
|
|
46
|
+
for start, end in zip(starts, ends):
|
|
47
|
+
ax.axvspan(start, end, color=color, alpha=alpha)
|
|
48
|
+
|
|
49
|
+
if not is_axes:
|
|
50
|
+
return axes[0]
|
|
51
|
+
else:
|
|
52
|
+
return axes
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
# EOF
|