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,333 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2025-06-04 11:15:00 (ywatanabe)"
|
|
4
|
+
# File: ./src/scitex/plt/ax/_style/_show_spines.py
|
|
5
|
+
|
|
6
|
+
"""
|
|
7
|
+
Functionality:
|
|
8
|
+
Show spines for matplotlib axes with intuitive API
|
|
9
|
+
Input:
|
|
10
|
+
Matplotlib axes object and spine visibility parameters
|
|
11
|
+
Output:
|
|
12
|
+
Axes with specified spines made visible
|
|
13
|
+
Prerequisites:
|
|
14
|
+
matplotlib
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
import matplotlib
|
|
18
|
+
from typing import Union, List
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def show_spines(
|
|
22
|
+
axis,
|
|
23
|
+
top: bool = True,
|
|
24
|
+
bottom: bool = True,
|
|
25
|
+
left: bool = True,
|
|
26
|
+
right: bool = True,
|
|
27
|
+
ticks: bool = True,
|
|
28
|
+
labels: bool = True,
|
|
29
|
+
restore_defaults: bool = True,
|
|
30
|
+
spine_width: float = None,
|
|
31
|
+
spine_color: str = None
|
|
32
|
+
):
|
|
33
|
+
"""
|
|
34
|
+
Shows the specified spines of a matplotlib Axes object and optionally restores ticks and labels.
|
|
35
|
+
|
|
36
|
+
This function provides the intuitive counterpart to hide_spines. It's especially useful when
|
|
37
|
+
you have spines hidden by default (as in scitex configuration) and want to selectively show them
|
|
38
|
+
for clearer scientific plots or specific visualization needs.
|
|
39
|
+
|
|
40
|
+
Parameters
|
|
41
|
+
----------
|
|
42
|
+
axis : matplotlib.axes.Axes
|
|
43
|
+
The Axes object for which the spines will be shown.
|
|
44
|
+
top : bool, optional
|
|
45
|
+
If True, shows the top spine. Defaults to True.
|
|
46
|
+
bottom : bool, optional
|
|
47
|
+
If True, shows the bottom spine. Defaults to True.
|
|
48
|
+
left : bool, optional
|
|
49
|
+
If True, shows the left spine. Defaults to True.
|
|
50
|
+
right : bool, optional
|
|
51
|
+
If True, shows the right spine. Defaults to True.
|
|
52
|
+
ticks : bool, optional
|
|
53
|
+
If True, restores ticks on the shown spines' axes. Defaults to True.
|
|
54
|
+
labels : bool, optional
|
|
55
|
+
If True, restores labels on the shown spines' axes. Defaults to True.
|
|
56
|
+
restore_defaults : bool, optional
|
|
57
|
+
If True, restores default tick positions and labels. Defaults to True.
|
|
58
|
+
spine_width : float, optional
|
|
59
|
+
Width of the spines to show. If None, uses matplotlib default.
|
|
60
|
+
spine_color : str, optional
|
|
61
|
+
Color of the spines to show. If None, uses matplotlib default.
|
|
62
|
+
|
|
63
|
+
Returns
|
|
64
|
+
-------
|
|
65
|
+
matplotlib.axes.Axes
|
|
66
|
+
The modified Axes object with the specified spines shown.
|
|
67
|
+
|
|
68
|
+
Examples
|
|
69
|
+
--------
|
|
70
|
+
>>> fig, ax = plt.subplots()
|
|
71
|
+
>>> # Show only bottom and left spines (classic scientific plot style)
|
|
72
|
+
>>> show_spines(ax, top=False, right=False)
|
|
73
|
+
>>> plt.show()
|
|
74
|
+
|
|
75
|
+
>>> # Show all spines with custom styling
|
|
76
|
+
>>> show_spines(ax, spine_width=1.5, spine_color='black')
|
|
77
|
+
>>> plt.show()
|
|
78
|
+
|
|
79
|
+
>>> # Show spines but without ticks/labels (for clean overlay plots)
|
|
80
|
+
>>> show_spines(ax, ticks=False, labels=False)
|
|
81
|
+
>>> plt.show()
|
|
82
|
+
|
|
83
|
+
Notes
|
|
84
|
+
-----
|
|
85
|
+
This function is designed to work seamlessly with scitex plotting where spines are hidden
|
|
86
|
+
by default. It provides an intuitive API for showing spines without needing to remember
|
|
87
|
+
that hide_spines(top=False, right=False) shows top and right spines.
|
|
88
|
+
"""
|
|
89
|
+
# Handle both matplotlib axes and scitex AxisWrapper
|
|
90
|
+
if hasattr(axis, '_axis_mpl'):
|
|
91
|
+
# This is an scitex AxisWrapper, get the underlying matplotlib axis
|
|
92
|
+
axis = axis._axis_mpl
|
|
93
|
+
|
|
94
|
+
assert isinstance(
|
|
95
|
+
axis, matplotlib.axes._axes.Axes
|
|
96
|
+
), "First argument must be a matplotlib axis or scitex AxisWrapper"
|
|
97
|
+
|
|
98
|
+
# Define which spines to show
|
|
99
|
+
spine_settings = {
|
|
100
|
+
"top": top,
|
|
101
|
+
"bottom": bottom,
|
|
102
|
+
"left": left,
|
|
103
|
+
"right": right
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
for spine_name, should_show in spine_settings.items():
|
|
107
|
+
# Set spine visibility
|
|
108
|
+
axis.spines[spine_name].set_visible(should_show)
|
|
109
|
+
|
|
110
|
+
if should_show:
|
|
111
|
+
# Set spine width if specified
|
|
112
|
+
if spine_width is not None:
|
|
113
|
+
axis.spines[spine_name].set_linewidth(spine_width)
|
|
114
|
+
|
|
115
|
+
# Set spine color if specified
|
|
116
|
+
if spine_color is not None:
|
|
117
|
+
axis.spines[spine_name].set_color(spine_color)
|
|
118
|
+
|
|
119
|
+
# Restore ticks if requested
|
|
120
|
+
if ticks and restore_defaults:
|
|
121
|
+
# Determine tick positions based on which spines are shown
|
|
122
|
+
if bottom and not top:
|
|
123
|
+
axis.xaxis.set_ticks_position('bottom')
|
|
124
|
+
elif top and not bottom:
|
|
125
|
+
axis.xaxis.set_ticks_position('top')
|
|
126
|
+
elif bottom and top:
|
|
127
|
+
axis.xaxis.set_ticks_position('both')
|
|
128
|
+
|
|
129
|
+
if left and not right:
|
|
130
|
+
axis.yaxis.set_ticks_position('left')
|
|
131
|
+
elif right and not left:
|
|
132
|
+
axis.yaxis.set_ticks_position('right')
|
|
133
|
+
elif left and right:
|
|
134
|
+
axis.yaxis.set_ticks_position('both')
|
|
135
|
+
|
|
136
|
+
# Restore labels if requested and restore_defaults is True
|
|
137
|
+
if labels and restore_defaults:
|
|
138
|
+
# Only restore if we haven't explicitly hidden them
|
|
139
|
+
# This preserves any custom tick labels that might have been set
|
|
140
|
+
current_xticks = axis.get_xticks()
|
|
141
|
+
current_yticks = axis.get_yticks()
|
|
142
|
+
|
|
143
|
+
if len(current_xticks) > 0 and (bottom or top):
|
|
144
|
+
# Generate default labels for x-axis
|
|
145
|
+
if not hasattr(axis, '_original_xticklabels'):
|
|
146
|
+
axis.set_xticks(current_xticks)
|
|
147
|
+
|
|
148
|
+
if len(current_yticks) > 0 and (left or right):
|
|
149
|
+
# Generate default labels for y-axis
|
|
150
|
+
if not hasattr(axis, '_original_yticklabels'):
|
|
151
|
+
axis.set_yticks(current_yticks)
|
|
152
|
+
|
|
153
|
+
return axis
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def show_all_spines(
|
|
157
|
+
axis,
|
|
158
|
+
spine_width: float = None,
|
|
159
|
+
spine_color: str = None,
|
|
160
|
+
ticks: bool = True,
|
|
161
|
+
labels: bool = True
|
|
162
|
+
):
|
|
163
|
+
"""
|
|
164
|
+
Convenience function to show all spines with optional styling.
|
|
165
|
+
|
|
166
|
+
Parameters
|
|
167
|
+
----------
|
|
168
|
+
axis : matplotlib.axes.Axes
|
|
169
|
+
The Axes object to modify.
|
|
170
|
+
spine_width : float, optional
|
|
171
|
+
Width of all spines.
|
|
172
|
+
spine_color : str, optional
|
|
173
|
+
Color of all spines.
|
|
174
|
+
ticks : bool, optional
|
|
175
|
+
Whether to show ticks. Defaults to True.
|
|
176
|
+
labels : bool, optional
|
|
177
|
+
Whether to show labels. Defaults to True.
|
|
178
|
+
|
|
179
|
+
Returns
|
|
180
|
+
-------
|
|
181
|
+
matplotlib.axes.Axes
|
|
182
|
+
The modified Axes object.
|
|
183
|
+
|
|
184
|
+
Examples
|
|
185
|
+
--------
|
|
186
|
+
>>> show_all_spines(ax, spine_width=1.2, spine_color='gray')
|
|
187
|
+
"""
|
|
188
|
+
return show_spines(
|
|
189
|
+
axis,
|
|
190
|
+
top=True, bottom=True, left=True, right=True,
|
|
191
|
+
ticks=ticks, labels=labels,
|
|
192
|
+
spine_width=spine_width, spine_color=spine_color
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
def show_classic_spines(
|
|
197
|
+
axis,
|
|
198
|
+
spine_width: float = None,
|
|
199
|
+
spine_color: str = None,
|
|
200
|
+
ticks: bool = True,
|
|
201
|
+
labels: bool = True
|
|
202
|
+
):
|
|
203
|
+
"""
|
|
204
|
+
Show only bottom and left spines (classic scientific plot style).
|
|
205
|
+
|
|
206
|
+
Parameters
|
|
207
|
+
----------
|
|
208
|
+
axis : matplotlib.axes.Axes
|
|
209
|
+
The Axes object to modify.
|
|
210
|
+
spine_width : float, optional
|
|
211
|
+
Width of the spines.
|
|
212
|
+
spine_color : str, optional
|
|
213
|
+
Color of the spines.
|
|
214
|
+
ticks : bool, optional
|
|
215
|
+
Whether to show ticks. Defaults to True.
|
|
216
|
+
labels : bool, optional
|
|
217
|
+
Whether to show labels. Defaults to True.
|
|
218
|
+
|
|
219
|
+
Returns
|
|
220
|
+
-------
|
|
221
|
+
matplotlib.axes.Axes
|
|
222
|
+
The modified Axes object.
|
|
223
|
+
|
|
224
|
+
Examples
|
|
225
|
+
--------
|
|
226
|
+
>>> show_classic_spines(ax) # Shows only bottom and left spines
|
|
227
|
+
"""
|
|
228
|
+
return show_spines(
|
|
229
|
+
axis,
|
|
230
|
+
top=False, bottom=True, left=True, right=False,
|
|
231
|
+
ticks=ticks, labels=labels,
|
|
232
|
+
spine_width=spine_width, spine_color=spine_color
|
|
233
|
+
)
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
def show_box_spines(
|
|
237
|
+
axis,
|
|
238
|
+
spine_width: float = None,
|
|
239
|
+
spine_color: str = None,
|
|
240
|
+
ticks: bool = True,
|
|
241
|
+
labels: bool = True
|
|
242
|
+
):
|
|
243
|
+
"""
|
|
244
|
+
Show all four spines to create a box around the plot.
|
|
245
|
+
|
|
246
|
+
This is an alias for show_all_spines but with more descriptive naming
|
|
247
|
+
for when you specifically want a boxed appearance.
|
|
248
|
+
|
|
249
|
+
Parameters
|
|
250
|
+
----------
|
|
251
|
+
axis : matplotlib.axes.Axes
|
|
252
|
+
The Axes object to modify.
|
|
253
|
+
spine_width : float, optional
|
|
254
|
+
Width of the box spines.
|
|
255
|
+
spine_color : str, optional
|
|
256
|
+
Color of the box spines.
|
|
257
|
+
ticks : bool, optional
|
|
258
|
+
Whether to show ticks. Defaults to True.
|
|
259
|
+
labels : bool, optional
|
|
260
|
+
Whether to show labels. Defaults to True.
|
|
261
|
+
|
|
262
|
+
Returns
|
|
263
|
+
-------
|
|
264
|
+
matplotlib.axes.Axes
|
|
265
|
+
The modified Axes object.
|
|
266
|
+
|
|
267
|
+
Examples
|
|
268
|
+
--------
|
|
269
|
+
>>> show_box_spines(ax, spine_width=1.0, spine_color='black')
|
|
270
|
+
"""
|
|
271
|
+
return show_all_spines(axis, spine_width, spine_color, ticks, labels)
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
def toggle_spines(
|
|
275
|
+
axis,
|
|
276
|
+
top: bool = None,
|
|
277
|
+
bottom: bool = None,
|
|
278
|
+
left: bool = None,
|
|
279
|
+
right: bool = None
|
|
280
|
+
):
|
|
281
|
+
"""
|
|
282
|
+
Toggle the visibility of spines (show if hidden, hide if shown).
|
|
283
|
+
|
|
284
|
+
Parameters
|
|
285
|
+
----------
|
|
286
|
+
axis : matplotlib.axes.Axes
|
|
287
|
+
The Axes object to modify.
|
|
288
|
+
top : bool, optional
|
|
289
|
+
If specified, sets top spine visibility. If None, toggles current state.
|
|
290
|
+
bottom : bool, optional
|
|
291
|
+
If specified, sets bottom spine visibility. If None, toggles current state.
|
|
292
|
+
left : bool, optional
|
|
293
|
+
If specified, sets left spine visibility. If None, toggles current state.
|
|
294
|
+
right : bool, optional
|
|
295
|
+
If specified, sets right spine visibility. If None, toggles current state.
|
|
296
|
+
|
|
297
|
+
Returns
|
|
298
|
+
-------
|
|
299
|
+
matplotlib.axes.Axes
|
|
300
|
+
The modified Axes object.
|
|
301
|
+
|
|
302
|
+
Examples
|
|
303
|
+
--------
|
|
304
|
+
>>> toggle_spines(ax) # Toggles all spines
|
|
305
|
+
>>> toggle_spines(ax, top=True, right=True) # Shows top and right, toggles others
|
|
306
|
+
"""
|
|
307
|
+
spine_names = ['top', 'bottom', 'left', 'right']
|
|
308
|
+
spine_params = [top, bottom, left, right]
|
|
309
|
+
|
|
310
|
+
for spine_name, param in zip(spine_names, spine_params):
|
|
311
|
+
if param is None:
|
|
312
|
+
# Toggle current state
|
|
313
|
+
current_state = axis.spines[spine_name].get_visible()
|
|
314
|
+
axis.spines[spine_name].set_visible(not current_state)
|
|
315
|
+
else:
|
|
316
|
+
# Set specific state
|
|
317
|
+
axis.spines[spine_name].set_visible(param)
|
|
318
|
+
|
|
319
|
+
return axis
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
# Convenient aliases for common use cases
|
|
323
|
+
def scientific_spines(axis, **kwargs):
|
|
324
|
+
"""Alias for show_classic_spines - shows only bottom and left spines."""
|
|
325
|
+
return show_classic_spines(axis, **kwargs)
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
def clean_spines(axis, **kwargs):
|
|
329
|
+
"""Alias for showing no spines - useful for overlay plots or clean visualizations."""
|
|
330
|
+
return show_spines(axis, top=False, bottom=False, left=False, right=False, **kwargs)
|
|
331
|
+
|
|
332
|
+
|
|
333
|
+
# EOF
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-02 09:14:09 (ywatanabe)"
|
|
4
|
+
# File: /home/ywatanabe/proj/_scitex_repo/src/scitex/plt/colors/_PARAMS.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "./src/scitex/plt/colors/_PARAMS.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
# ----------------------------------------
|
|
11
|
+
|
|
12
|
+
# RGB
|
|
13
|
+
RGB = {
|
|
14
|
+
"white": [255, 255, 255],
|
|
15
|
+
"black": [0, 0, 0],
|
|
16
|
+
"blue": [0, 128, 192],
|
|
17
|
+
"red": [255, 70, 50],
|
|
18
|
+
"pink": [255, 150, 200],
|
|
19
|
+
"green": [20, 180, 20],
|
|
20
|
+
"yellow": [230, 160, 20],
|
|
21
|
+
"gray": [128, 128, 128],
|
|
22
|
+
"grey": [128, 128, 128],
|
|
23
|
+
"purple": [200, 50, 255],
|
|
24
|
+
"light_blue": [20, 200, 200],
|
|
25
|
+
"brown": [128, 0, 0],
|
|
26
|
+
"navy": [0, 0, 100],
|
|
27
|
+
"orange": [228, 94, 50],
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
RGB_NORM = {
|
|
31
|
+
k: [round(r / 255, 2), round(g / 255, 2), round(b / 255, 2)]
|
|
32
|
+
for k, (r, g, b) in RGB.items()
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
# RGBA
|
|
36
|
+
DEF_ALPHA = 0.9
|
|
37
|
+
RGBA = {k: [r, g, b, DEF_ALPHA] for k, (r, g, b) in RGB.items()}
|
|
38
|
+
RGBA_NORM = {k: [r, g, b, DEF_ALPHA] for k, (r, g, b) in RGB_NORM.items()}
|
|
39
|
+
RGBA_NORM_FOR_CYCLE = {
|
|
40
|
+
k: v for k, v in RGBA_NORM.items() if k not in ["white", "grey", "black"]
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
# HEX
|
|
44
|
+
HEX = {
|
|
45
|
+
"blue": "#0080C0",
|
|
46
|
+
"red": "#FF4632",
|
|
47
|
+
"pink": "#FF96C8",
|
|
48
|
+
"green": "#14B414",
|
|
49
|
+
"yellow": "#E6A014",
|
|
50
|
+
"gray": "#808080",
|
|
51
|
+
"grey": "#808080",
|
|
52
|
+
"purple": "#C832FF",
|
|
53
|
+
"light_blue": "#14C8C8",
|
|
54
|
+
"brown": "#800000",
|
|
55
|
+
"navy": "#000064",
|
|
56
|
+
"orange": "#E45E32",
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
PARAMS = dict(
|
|
61
|
+
RGB=RGB,
|
|
62
|
+
RGBA=RGBA,
|
|
63
|
+
RGBA_NORM=RGBA_NORM,
|
|
64
|
+
RGBA_NORM_FOR_CYCLE=RGBA_NORM_FOR_CYCLE,
|
|
65
|
+
HEX=HEX,
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
# pprint(PARAMS)
|
|
69
|
+
|
|
70
|
+
# EOF
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Scitex color module."""
|
|
3
|
+
|
|
4
|
+
from ._add_hue_col import add_hue_col
|
|
5
|
+
from ._colors import bgr2bgra, bgr2rgb, bgra2bgr, bgra2hex, bgra2rgba, cycle_color, cycle_color_bgr, cycle_color_rgb, gradiate_color, gradiate_color_bgr, gradiate_color_bgra, gradiate_color_rgb, gradiate_color_rgba, rgb2bgr, rgb2rgba, rgba2bgra, rgba2hex, rgba2rgb, str2bgr, str2bgra, str2hex, str2rgb, str2rgba, to_hex, to_rgb, to_rgba, update_alpha
|
|
6
|
+
from ._get_colors_from_cmap import get_categorical_colors_from_cmap, get_color_from_cmap, get_colors_from_cmap
|
|
7
|
+
from ._interpolate import gen_interpolate, interpolate
|
|
8
|
+
from ._PARAMS import PARAMS, DEF_ALPHA, RGB, RGB_NORM, RGBA, RGBA_NORM
|
|
9
|
+
from ._vizualize_colors import vizualize_colors
|
|
10
|
+
|
|
11
|
+
__all__ = [
|
|
12
|
+
"PARAMS",
|
|
13
|
+
"DEF_ALPHA",
|
|
14
|
+
"RGB",
|
|
15
|
+
"RGB_NORM",
|
|
16
|
+
"RGBA",
|
|
17
|
+
"RGBA_NORM",
|
|
18
|
+
"add_hue_col",
|
|
19
|
+
"bgr2bgra",
|
|
20
|
+
"bgr2rgb",
|
|
21
|
+
"bgra2bgr",
|
|
22
|
+
"bgra2hex",
|
|
23
|
+
"bgra2rgba",
|
|
24
|
+
"cycle_color",
|
|
25
|
+
"cycle_color_bgr",
|
|
26
|
+
"cycle_color_rgb",
|
|
27
|
+
"gen_interpolate",
|
|
28
|
+
"get_categorical_colors_from_cmap",
|
|
29
|
+
"get_color_from_cmap",
|
|
30
|
+
"get_colors_from_cmap",
|
|
31
|
+
"gradiate_color",
|
|
32
|
+
"gradiate_color_bgr",
|
|
33
|
+
"gradiate_color_bgra",
|
|
34
|
+
"gradiate_color_rgb",
|
|
35
|
+
"gradiate_color_rgba",
|
|
36
|
+
"interpolate",
|
|
37
|
+
"rgb2bgr",
|
|
38
|
+
"rgb2rgba",
|
|
39
|
+
"rgba2bgra",
|
|
40
|
+
"rgba2hex",
|
|
41
|
+
"rgba2rgb",
|
|
42
|
+
"str2bgr",
|
|
43
|
+
"str2bgra",
|
|
44
|
+
"str2hex",
|
|
45
|
+
"str2rgb",
|
|
46
|
+
"str2rgba",
|
|
47
|
+
"to_hex",
|
|
48
|
+
"to_rgb",
|
|
49
|
+
"to_rgba",
|
|
50
|
+
"update_alpha",
|
|
51
|
+
"vizualize_colors",
|
|
52
|
+
]
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-02 18:02:24 (ywatanabe)"
|
|
4
|
+
# File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/color/_add_hue_col.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "./src/scitex/plt/color/_add_hue_col.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
# ----------------------------------------
|
|
11
|
+
|
|
12
|
+
import numpy as np
|
|
13
|
+
import pandas as pd
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def add_hue_col(df):
|
|
17
|
+
df["hue"] = 0
|
|
18
|
+
dummy_row = pd.DataFrame(
|
|
19
|
+
columns=df.columns,
|
|
20
|
+
data=np.array([np.nan for _ in df.columns]).reshape(1, -1),
|
|
21
|
+
)
|
|
22
|
+
dummy_row = {}
|
|
23
|
+
for col in df.columns:
|
|
24
|
+
dtype = df[col].dtype
|
|
25
|
+
if dtype is np.dtype(object):
|
|
26
|
+
dummy_row[col] = np.nan
|
|
27
|
+
if dtype is np.dtype(float):
|
|
28
|
+
dummy_row[col] = np.nan
|
|
29
|
+
if dtype is np.dtype(np.int64):
|
|
30
|
+
dummy_row[col] = np.nan
|
|
31
|
+
if dtype is np.dtype(bool):
|
|
32
|
+
dummy_row[col] = None
|
|
33
|
+
|
|
34
|
+
dummy_row = pd.DataFrame(pd.Series(dummy_row)).T
|
|
35
|
+
|
|
36
|
+
dummy_row["hue"] = 1
|
|
37
|
+
df_added = pd.concat([df, dummy_row], axis=0)
|
|
38
|
+
return df_added
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
# EOF
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-02 12:19:50 (ywatanabe)"
|
|
4
|
+
# File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/colors/_colors.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "./src/scitex/plt/colors/_colors.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
# ----------------------------------------
|
|
11
|
+
|
|
12
|
+
import matplotlib.colors as _colors
|
|
13
|
+
import numpy as np
|
|
14
|
+
|
|
15
|
+
from ...decorators._deprecated import deprecated
|
|
16
|
+
from ._PARAMS import PARAMS
|
|
17
|
+
|
|
18
|
+
# RGB
|
|
19
|
+
# ------------------------------
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def str2rgb(c):
|
|
23
|
+
return PARAMS["RGB"][c]
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def str2rgba(c, alpha=1.0):
|
|
27
|
+
rgba = rgb2rgba(PARAMS["RGB"][c])
|
|
28
|
+
rgba[-1] = alpha
|
|
29
|
+
return rgba
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def rgb2rgba(rgb, alpha=1.0, round=2):
|
|
33
|
+
rgb = np.array(rgb).astype(float)
|
|
34
|
+
rgb /= 255
|
|
35
|
+
return [*rgb.round(round), alpha]
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def rgba2rgb(rgba):
|
|
39
|
+
rgba = np.array(rgba).astype(float)
|
|
40
|
+
rgb = (rgba[:3] * 255).clip(0, 255)
|
|
41
|
+
return rgb.round(2).tolist()
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def rgba2hex(rgba):
|
|
45
|
+
return "#{:02x}{:02x}{:02x}{:02x}".format(
|
|
46
|
+
int(rgba[0]), int(rgba[1]), int(rgba[2]), int(rgba[3] * 255)
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def cycle_color_rgb(i_color, colors=None):
|
|
51
|
+
if colors is None:
|
|
52
|
+
colors = list(PARAMS["RGB"].keys())
|
|
53
|
+
n_colors = len(colors)
|
|
54
|
+
return colors[i_color % n_colors]
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def gradiate_color_rgb(rgb_or_rgba, n=5):
|
|
58
|
+
|
|
59
|
+
# Separate RGB and alpha if present
|
|
60
|
+
if len(rgb_or_rgba) == 4: # RGBA format
|
|
61
|
+
rgb = rgb_or_rgba[:3]
|
|
62
|
+
alpha = rgb_or_rgba[3]
|
|
63
|
+
has_alpha = True
|
|
64
|
+
else: # RGB format
|
|
65
|
+
rgb = rgb_or_rgba
|
|
66
|
+
alpha = None
|
|
67
|
+
has_alpha = False
|
|
68
|
+
|
|
69
|
+
# Scale RGB values to 0-1 range if they're in 0-255 range
|
|
70
|
+
if any(val > 1 for val in rgb):
|
|
71
|
+
rgb = [val / 255 for val in rgb]
|
|
72
|
+
|
|
73
|
+
rgb_hsv = _colors.rgb_to_hsv(np.array(rgb))
|
|
74
|
+
|
|
75
|
+
gradient = []
|
|
76
|
+
for step in range(n):
|
|
77
|
+
color_hsv = [
|
|
78
|
+
rgb_hsv[0],
|
|
79
|
+
rgb_hsv[1],
|
|
80
|
+
rgb_hsv[2] * (1.0 - (step / n)),
|
|
81
|
+
]
|
|
82
|
+
color_rgb = [int(v * 255) for v in _colors.hsv_to_rgb(color_hsv)]
|
|
83
|
+
|
|
84
|
+
if has_alpha:
|
|
85
|
+
gradient.append(rgb2rgba(color_rgb, alpha=alpha))
|
|
86
|
+
else:
|
|
87
|
+
gradient.append(color_rgb)
|
|
88
|
+
|
|
89
|
+
return gradient
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def gradiate_color_rgba(rgb_or_rgba, n=5):
|
|
93
|
+
return gradiate_color_rgb(rgb_or_rgba, n)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
# BGRA
|
|
97
|
+
# ------------------------------
|
|
98
|
+
def str2bgr(c):
|
|
99
|
+
return rgb2bgr(str2rgb(c))
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def str2bgra(c, alpha=1.0):
|
|
103
|
+
return rgba2bgra(str2rgba(c))
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def bgr2bgra(bgra, alpha=1.0, round=2):
|
|
107
|
+
return rgb2rgba(bgra, alpha=alpha, round=round)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def bgra2bgr(bgra):
|
|
111
|
+
return rgba2rgb(bgra)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def bgra2hex(bgra):
|
|
115
|
+
"""Convert BGRA color format to hex format."""
|
|
116
|
+
rgba = bgra2rgba(bgra)
|
|
117
|
+
return rgba2hex(rgba)
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def cycle_color_bgr(i_color, colors=None):
|
|
121
|
+
rgb_color = str2rgb(cycle_color(i_color, colors=colors))
|
|
122
|
+
return rgb2bgr(rgb_color)
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def gradiate_color_bgr(bgr_or_bgra, n=5):
|
|
126
|
+
rgb_or_rgba = (
|
|
127
|
+
bgr2rgb(bgr_or_bgra) if len(bgr_or_bgra) == 3 else bgra2rgba(bgr_or_bgra)
|
|
128
|
+
)
|
|
129
|
+
rgb_gradient = gradiate_color_rgb(rgb_or_rgba, n)
|
|
130
|
+
return [
|
|
131
|
+
rgb2bgr(color) if len(color) == 3 else rgba2bgra(color)
|
|
132
|
+
for color in rgb_gradient
|
|
133
|
+
]
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def gradiate_color_bgra(bgra, n=5):
|
|
137
|
+
return gradiate_color_bgr(bgra, n)
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
# Common
|
|
141
|
+
# ------------------------------
|
|
142
|
+
def bgr2rgb(bgr):
|
|
143
|
+
"""Convert BGR color format to RGB format."""
|
|
144
|
+
return [bgr[2], bgr[1], bgr[0]]
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def rgb2bgr(rgb):
|
|
148
|
+
"""Convert RGB color format to BGR format."""
|
|
149
|
+
return [rgb[2], rgb[1], rgb[0]]
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def bgra2rgba(bgra):
|
|
153
|
+
"""Convert BGRA color format to RGBA format."""
|
|
154
|
+
return [bgra[2], bgra[1], bgra[0], bgra[3]]
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def rgba2bgra(rgba):
|
|
158
|
+
"""Convert RGBA color format to BGRA format."""
|
|
159
|
+
return [rgba[2], rgba[1], rgba[0], rgba[3]]
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def str2hex(c):
|
|
163
|
+
return PARAMS["HEX"][c]
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
def update_alpha(rgba, alpha):
|
|
167
|
+
rgba_list = list(rgba)
|
|
168
|
+
rgba_list[-1] = alpha
|
|
169
|
+
return rgba_list
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
def cycle_color(i_color, colors=None):
|
|
173
|
+
return cycle_color_rgb(i_color, colors=colors)
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
# Deprecated
|
|
177
|
+
# ------------------------------
|
|
178
|
+
@deprecated("Use str2rgb instead")
|
|
179
|
+
def to_rgb(c):
|
|
180
|
+
return str2rgb(c)
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
@deprecated("use str2rgba instewad")
|
|
184
|
+
def to_rgba(c, alpha=1.0):
|
|
185
|
+
return str2rgba(c, alpha=alpha)
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
@deprecated("use str2hex instead")
|
|
189
|
+
def to_hex(c):
|
|
190
|
+
return PARAMS["HEX"][c]
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
@deprecated("use gradiate_color_rgb/rgba/bgr/bgra instead")
|
|
194
|
+
def gradiate_color(rgb_or_rgba, n=5):
|
|
195
|
+
return gradiate_color_rgb(rgb_or_rgba, n)
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
if __name__ == "__main__":
|
|
199
|
+
c = "blue"
|
|
200
|
+
print(to_rgb(c))
|
|
201
|
+
print(to_rgba(c))
|
|
202
|
+
print(to_hex(c))
|
|
203
|
+
print(cycle_color(1))
|
|
204
|
+
|
|
205
|
+
# EOF
|