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,121 @@
|
|
|
1
|
+
#!./env/bin/python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-07-13 08:14:19 (ywatanabe)"
|
|
4
|
+
# Author: Yusuke Watanabe (ywata1989@gmail.com)
|
|
5
|
+
|
|
6
|
+
"""
|
|
7
|
+
This script does XYZ.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
# Imports
|
|
11
|
+
import matplotlib.pyplot as plt
|
|
12
|
+
|
|
13
|
+
from ._format_label import format_label
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
# Functions
|
|
17
|
+
def set_xyt(ax, x=False, y=False, t=False, format_labels=True):
|
|
18
|
+
"""Sets xlabel, ylabel and title"""
|
|
19
|
+
|
|
20
|
+
if x is not False:
|
|
21
|
+
x = format_label(x) if format_labels else x
|
|
22
|
+
ax.set_xlabel(x)
|
|
23
|
+
|
|
24
|
+
if y is not False:
|
|
25
|
+
y = format_label(y) if format_labels else y
|
|
26
|
+
ax.set_ylabel(y)
|
|
27
|
+
|
|
28
|
+
if t is not False:
|
|
29
|
+
t = format_label(t) if format_labels else t
|
|
30
|
+
ax.set_title(t)
|
|
31
|
+
|
|
32
|
+
return ax
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def set_xytc(ax, x=False, y=False, t=False, c=False, methods=False, stats=False, format_labels=True):
|
|
36
|
+
"""Sets xlabel, ylabel, title, and caption with SciTeX-Paper integration
|
|
37
|
+
|
|
38
|
+
Parameters
|
|
39
|
+
----------
|
|
40
|
+
ax : matplotlib.axes.Axes or scitex AxisWrapper
|
|
41
|
+
The axes to modify
|
|
42
|
+
x : str or False, optional
|
|
43
|
+
X-axis label, by default False
|
|
44
|
+
y : str or False, optional
|
|
45
|
+
Y-axis label, by default False
|
|
46
|
+
t : str or False, optional
|
|
47
|
+
Title, by default False
|
|
48
|
+
c : str or False, optional
|
|
49
|
+
Caption to store for later use with scitex.io.save(), by default False
|
|
50
|
+
methods : str or False, optional
|
|
51
|
+
Methods description for SciTeX-Paper integration, by default False
|
|
52
|
+
stats : str or False, optional
|
|
53
|
+
Statistical analysis details for SciTeX-Paper integration, by default False
|
|
54
|
+
format_labels : bool, optional
|
|
55
|
+
Whether to apply automatic formatting, by default True
|
|
56
|
+
|
|
57
|
+
Returns
|
|
58
|
+
-------
|
|
59
|
+
ax : matplotlib.axes.Axes or scitex AxisWrapper
|
|
60
|
+
The modified axes
|
|
61
|
+
|
|
62
|
+
Examples
|
|
63
|
+
--------
|
|
64
|
+
>>> fig, ax = scitex.plt.subplots()
|
|
65
|
+
>>> ax.plot(x, y)
|
|
66
|
+
>>> ax.set_xytc(x='Time (s)', y='Voltage (mV)',
|
|
67
|
+
... t='Neural Signal',
|
|
68
|
+
... c='Example neural recording showing action potentials.',
|
|
69
|
+
... methods='Intracellular recordings performed using patch-clamp technique.',
|
|
70
|
+
... stats='Data analyzed using t-test with p<0.05 significance.')
|
|
71
|
+
>>> scitex.io.save(fig, 'neural_signal.png') # Caption automatically saved
|
|
72
|
+
"""
|
|
73
|
+
# Set labels and title using existing function
|
|
74
|
+
set_xyt(ax, x=x, y=y, t=t, format_labels=format_labels)
|
|
75
|
+
|
|
76
|
+
# Store caption and extended metadata for later use by scitex.io.save()
|
|
77
|
+
if c is not False or methods is not False or stats is not False:
|
|
78
|
+
# Store comprehensive metadata as axis attribute for retrieval by save function
|
|
79
|
+
metadata = {
|
|
80
|
+
'caption': c if c is not False else None,
|
|
81
|
+
'methods': methods if methods is not False else None,
|
|
82
|
+
'stats': stats if stats is not False else None
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if hasattr(ax, '_scitex_metadata'):
|
|
86
|
+
ax._scitex_metadata.update(metadata)
|
|
87
|
+
else:
|
|
88
|
+
# For matplotlib axes, store in figure metadata
|
|
89
|
+
fig = ax.get_figure()
|
|
90
|
+
if not hasattr(fig, '_scitex_metadata'):
|
|
91
|
+
fig._scitex_metadata = {}
|
|
92
|
+
# Use axis position as identifier
|
|
93
|
+
fig._scitex_metadata[ax] = metadata
|
|
94
|
+
|
|
95
|
+
# Backward compatibility - also store simple caption
|
|
96
|
+
if c is not False:
|
|
97
|
+
if hasattr(ax, '_scitex_caption'):
|
|
98
|
+
ax._scitex_caption = c
|
|
99
|
+
else:
|
|
100
|
+
fig = ax.get_figure()
|
|
101
|
+
if not hasattr(fig, '_scitex_captions'):
|
|
102
|
+
fig._scitex_captions = {}
|
|
103
|
+
fig._scitex_captions[ax] = c
|
|
104
|
+
|
|
105
|
+
return ax
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
if __name__ == "__main__":
|
|
109
|
+
# Start
|
|
110
|
+
CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.gen.start(sys, plt)
|
|
111
|
+
|
|
112
|
+
# (YOUR AWESOME CODE)
|
|
113
|
+
|
|
114
|
+
# Close
|
|
115
|
+
scitex.gen.close(CONFIG)
|
|
116
|
+
|
|
117
|
+
# EOF
|
|
118
|
+
|
|
119
|
+
"""
|
|
120
|
+
/ssh:ywatanabe@444:/home/ywatanabe/proj/entrance/scitex/plt/ax/_set_lt.py
|
|
121
|
+
"""
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-01 08:47:27 (ywatanabe)"
|
|
4
|
+
# File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/ax/_style/_share_axes.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "./src/scitex/plt/ax/_style/_share_axes.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
# ----------------------------------------
|
|
11
|
+
|
|
12
|
+
import matplotlib.pyplot as plt
|
|
13
|
+
import scitex
|
|
14
|
+
import numpy as np
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def sharexy(*multiple_axes):
|
|
18
|
+
"""Share both x and y axis limits across multiple axes.
|
|
19
|
+
|
|
20
|
+
Synchronizes both x and y axis limits across all provided axes objects,
|
|
21
|
+
ensuring they all display the same data range. Useful for comparing
|
|
22
|
+
multiple plots on the same scale.
|
|
23
|
+
|
|
24
|
+
Parameters
|
|
25
|
+
----------
|
|
26
|
+
*multiple_axes : matplotlib.axes.Axes or array of Axes
|
|
27
|
+
Variable number of axes objects to synchronize.
|
|
28
|
+
|
|
29
|
+
Examples
|
|
30
|
+
--------
|
|
31
|
+
>>> fig, (ax1, ax2, ax3) = plt.subplots(1, 3)
|
|
32
|
+
>>> ax1.plot([1, 2, 3], [1, 4, 9])
|
|
33
|
+
>>> ax2.plot([1, 2, 3], [2, 5, 8])
|
|
34
|
+
>>> ax3.plot([1, 2, 3], [3, 6, 10])
|
|
35
|
+
>>> sharexy(ax1, ax2, ax3) # All axes now show same range
|
|
36
|
+
|
|
37
|
+
See Also
|
|
38
|
+
--------
|
|
39
|
+
sharex : Share only x-axis limits
|
|
40
|
+
sharey : Share only y-axis limits
|
|
41
|
+
"""
|
|
42
|
+
sharex(*multiple_axes)
|
|
43
|
+
sharey(*multiple_axes)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def sharex(*multiple_axes):
|
|
47
|
+
"""Share x-axis limits across multiple axes.
|
|
48
|
+
|
|
49
|
+
Finds the global x-axis limits across all axes and applies them
|
|
50
|
+
to each axis, ensuring horizontal alignment of data.
|
|
51
|
+
|
|
52
|
+
Parameters
|
|
53
|
+
----------
|
|
54
|
+
*multiple_axes : matplotlib.axes.Axes or array of Axes
|
|
55
|
+
Variable number of axes objects to synchronize.
|
|
56
|
+
|
|
57
|
+
Returns
|
|
58
|
+
-------
|
|
59
|
+
axes : axes object(s)
|
|
60
|
+
The modified axes with shared x-limits.
|
|
61
|
+
xlim : tuple
|
|
62
|
+
The (xmin, xmax) limits applied.
|
|
63
|
+
|
|
64
|
+
Examples
|
|
65
|
+
--------
|
|
66
|
+
>>> fig, axes = plt.subplots(2, 1)
|
|
67
|
+
>>> axes[0].plot([1, 5], [1, 2])
|
|
68
|
+
>>> axes[1].plot([2, 4], [3, 4])
|
|
69
|
+
>>> sharex(axes[0], axes[1]) # Both show x-range [1, 5]
|
|
70
|
+
"""
|
|
71
|
+
xlim = get_global_xlim(*multiple_axes)
|
|
72
|
+
return set_xlims(*multiple_axes, xlim=xlim)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def sharey(*multiple_axes):
|
|
76
|
+
"""Share y-axis limits across multiple axes.
|
|
77
|
+
|
|
78
|
+
Finds the global y-axis limits across all axes and applies them
|
|
79
|
+
to each axis, ensuring vertical alignment of data.
|
|
80
|
+
|
|
81
|
+
Parameters
|
|
82
|
+
----------
|
|
83
|
+
*multiple_axes : matplotlib.axes.Axes or array of Axes
|
|
84
|
+
Variable number of axes objects to synchronize.
|
|
85
|
+
|
|
86
|
+
Returns
|
|
87
|
+
-------
|
|
88
|
+
axes : axes object(s)
|
|
89
|
+
The modified axes with shared y-limits.
|
|
90
|
+
ylim : tuple
|
|
91
|
+
The (ymin, ymax) limits applied.
|
|
92
|
+
|
|
93
|
+
Examples
|
|
94
|
+
--------
|
|
95
|
+
>>> fig, axes = plt.subplots(1, 2)
|
|
96
|
+
>>> axes[0].plot([1, 2], [1, 5])
|
|
97
|
+
>>> axes[1].plot([1, 2], [2, 4])
|
|
98
|
+
>>> sharey(axes[0], axes[1]) # Both show y-range [1, 5]
|
|
99
|
+
"""
|
|
100
|
+
ylim = get_global_ylim(*multiple_axes)
|
|
101
|
+
return set_ylims(*multiple_axes, ylim=ylim)
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def get_global_xlim(*multiple_axes):
|
|
105
|
+
"""Get the global x-axis limits across multiple axes.
|
|
106
|
+
|
|
107
|
+
Scans all provided axes to find the minimum and maximum x-values
|
|
108
|
+
across all of them. Handles both single axes and arrays of axes.
|
|
109
|
+
|
|
110
|
+
Parameters
|
|
111
|
+
----------
|
|
112
|
+
*multiple_axes : matplotlib.axes.Axes or array of Axes
|
|
113
|
+
Variable number of axes objects to scan.
|
|
114
|
+
|
|
115
|
+
Returns
|
|
116
|
+
-------
|
|
117
|
+
tuple
|
|
118
|
+
(xmin, xmax) representing the global x-axis limits.
|
|
119
|
+
|
|
120
|
+
Examples
|
|
121
|
+
--------
|
|
122
|
+
>>> fig, (ax1, ax2) = plt.subplots(1, 2)
|
|
123
|
+
>>> ax1.plot([1, 3], [1, 2]) # x-range: [1, 3]
|
|
124
|
+
>>> ax2.plot([2, 5], [1, 2]) # x-range: [2, 5]
|
|
125
|
+
>>> xlim = get_global_xlim(ax1, ax2)
|
|
126
|
+
>>> print(xlim) # (1, 5)
|
|
127
|
+
|
|
128
|
+
Notes
|
|
129
|
+
-----
|
|
130
|
+
There appears to be a bug in the current implementation where
|
|
131
|
+
get_ylim() is called instead of get_xlim(). This should be fixed.
|
|
132
|
+
"""
|
|
133
|
+
xmin, xmax = np.inf, -np.inf
|
|
134
|
+
for axes in multiple_axes:
|
|
135
|
+
# axes
|
|
136
|
+
if isinstance(axes, (np.ndarray, scitex.plt._subplots._AxesWrapper.AxesWrapper)):
|
|
137
|
+
for ax in axes.flat:
|
|
138
|
+
_xmin, _xmax = ax.get_xlim() # Fixed: was get_ylim()
|
|
139
|
+
xmin = min(xmin, _xmin)
|
|
140
|
+
xmax = max(xmax, _xmax)
|
|
141
|
+
# axis
|
|
142
|
+
else:
|
|
143
|
+
ax = axes
|
|
144
|
+
_xmin, _xmax = ax.get_xlim() # Fixed: was get_ylim()
|
|
145
|
+
xmin = min(xmin, _xmin)
|
|
146
|
+
xmax = max(xmax, _xmax)
|
|
147
|
+
|
|
148
|
+
return (xmin, xmax)
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
# def get_global_xlim(*multiple_axes):
|
|
152
|
+
# xmin, xmax = np.inf, -np.inf
|
|
153
|
+
# for axes in multiple_axes:
|
|
154
|
+
# for ax in axes.flat:
|
|
155
|
+
# _xmin, _xmax = ax.get_xlim()
|
|
156
|
+
# xmin = min(xmin, _xmin)
|
|
157
|
+
# xmax = max(xmax, _xmax)
|
|
158
|
+
# return (xmin, xmax)
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def get_global_ylim(*multiple_axes):
|
|
162
|
+
"""Get the global y-axis limits across multiple axes.
|
|
163
|
+
|
|
164
|
+
Scans all provided axes to find the minimum and maximum y-values
|
|
165
|
+
across all of them. Handles both single axes and arrays of axes.
|
|
166
|
+
|
|
167
|
+
Parameters
|
|
168
|
+
----------
|
|
169
|
+
*multiple_axes : matplotlib.axes.Axes or array of Axes
|
|
170
|
+
Variable number of axes objects to scan.
|
|
171
|
+
|
|
172
|
+
Returns
|
|
173
|
+
-------
|
|
174
|
+
tuple
|
|
175
|
+
(ymin, ymax) representing the global y-axis limits.
|
|
176
|
+
|
|
177
|
+
Examples
|
|
178
|
+
--------
|
|
179
|
+
>>> fig, (ax1, ax2) = plt.subplots(1, 2)
|
|
180
|
+
>>> ax1.plot([1, 2], [1, 3]) # y-range: [1, 3]
|
|
181
|
+
>>> ax2.plot([1, 2], [2, 5]) # y-range: [2, 5]
|
|
182
|
+
>>> ylim = get_global_ylim(ax1, ax2)
|
|
183
|
+
>>> print(ylim) # (1, 5)
|
|
184
|
+
"""
|
|
185
|
+
ymin, ymax = np.inf, -np.inf
|
|
186
|
+
for axes in multiple_axes:
|
|
187
|
+
# axes
|
|
188
|
+
if isinstance(axes, (np.ndarray, scitex.plt._subplots._AxesWrapper.AxesWrapper)):
|
|
189
|
+
for ax in axes.flat:
|
|
190
|
+
_ymin, _ymax = ax.get_ylim()
|
|
191
|
+
ymin = min(ymin, _ymin)
|
|
192
|
+
ymax = max(ymax, _ymax)
|
|
193
|
+
# axis
|
|
194
|
+
else:
|
|
195
|
+
ax = axes
|
|
196
|
+
_ymin, _ymax = ax.get_ylim()
|
|
197
|
+
ymin = min(ymin, _ymin)
|
|
198
|
+
ymax = max(ymax, _ymax)
|
|
199
|
+
|
|
200
|
+
return (ymin, ymax)
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
def set_xlims(*multiple_axes, xlim=None):
|
|
204
|
+
if xlim is None:
|
|
205
|
+
raise ValueError("Please set xlim. get_global_xlim() might be useful.")
|
|
206
|
+
|
|
207
|
+
for axes in multiple_axes:
|
|
208
|
+
# axes
|
|
209
|
+
if isinstance(axes, (np.ndarray, scitex.plt._subplots._AxesWrapper.AxesWrapper)):
|
|
210
|
+
for ax in axes.flat:
|
|
211
|
+
ax.set_xlim(xlim)
|
|
212
|
+
# axis
|
|
213
|
+
else:
|
|
214
|
+
ax = axes
|
|
215
|
+
ax.set_xlim(xlim)
|
|
216
|
+
|
|
217
|
+
# Return
|
|
218
|
+
if len(multiple_axes) == 1:
|
|
219
|
+
return multiple_axes[0], xlim
|
|
220
|
+
else:
|
|
221
|
+
return multiple_axes, xlim
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
def set_ylims(*multiple_axes, ylim=None):
|
|
225
|
+
if ylim is None:
|
|
226
|
+
raise ValueError("Please set ylim. get_global_xlim() might be useful.")
|
|
227
|
+
|
|
228
|
+
for axes in multiple_axes:
|
|
229
|
+
# axes
|
|
230
|
+
if isinstance(axes, (np.ndarray, scitex.plt._subplots._AxesWrapper.AxesWrapper)):
|
|
231
|
+
for ax in axes.flat:
|
|
232
|
+
ax.set_ylim(ylim)
|
|
233
|
+
|
|
234
|
+
# axis
|
|
235
|
+
else:
|
|
236
|
+
ax = axes
|
|
237
|
+
ax.set_ylim(ylim)
|
|
238
|
+
|
|
239
|
+
# Return
|
|
240
|
+
if len(multiple_axes) == 1:
|
|
241
|
+
return multiple_axes[0], ylim
|
|
242
|
+
else:
|
|
243
|
+
return multiple_axes, ylim
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
def main():
|
|
247
|
+
pass
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
if __name__ == "__main__":
|
|
251
|
+
# # Argument Parser
|
|
252
|
+
# import argparse
|
|
253
|
+
import sys
|
|
254
|
+
|
|
255
|
+
# parser = argparse.ArgumentParser(description='')
|
|
256
|
+
# parser.add_argument('--var', '-v', type=int, default=1, help='')
|
|
257
|
+
# parser.add_argument('--flag', '-f', action='store_true', default=False, help='')
|
|
258
|
+
# args = parser.parse_args()
|
|
259
|
+
# Main
|
|
260
|
+
CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.gen.start(sys, plt, verbose=False)
|
|
261
|
+
main()
|
|
262
|
+
scitex.gen.close(CONFIG, verbose=False, notify=False)
|
|
263
|
+
|
|
264
|
+
# EOF
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-02 09:00:54 (ywatanabe)"
|
|
4
|
+
# File: /home/ywatanabe/proj/scitex_repo/src/scitex/plt/ax/_style/_shift.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "./src/scitex/plt/ax/_style/_shift.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
# ----------------------------------------
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def shift(ax, dx=0, dy=0):
|
|
14
|
+
"""
|
|
15
|
+
Adjusts the position of an Axes object within a Figure by specified offsets in centimeters.
|
|
16
|
+
|
|
17
|
+
This function modifies the position of a given matplotlib.axes.Axes object by shifting it horizontally and vertically within its parent figure. The shift amounts are specified in centimeters, and the function converts these values into the figure's coordinate system to perform the adjustment.
|
|
18
|
+
|
|
19
|
+
Parameters:
|
|
20
|
+
- ax (matplotlib.axes.Axes): The Axes object to modify. This must be an instance of a Matplotlib Axes.
|
|
21
|
+
- dx (float): The horizontal offset in centimeters. Positive values shift the Axes to the right, while negative values shift it to the left.
|
|
22
|
+
- dy (float): The vertical offset in centimeters. Positive values shift the Axes up, while negative values shift it down.
|
|
23
|
+
|
|
24
|
+
Returns:
|
|
25
|
+
- matplotlib.axes.Axes: The modified Axes object with the adjusted position.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
bbox = ax.get_position()
|
|
29
|
+
|
|
30
|
+
# Convert centimeters to inches for consistency with matplotlib dimensions
|
|
31
|
+
dx_in, dy_in = dx / 2.54, dy / 2.54
|
|
32
|
+
|
|
33
|
+
# Calculate delta ratios relative to the figure size
|
|
34
|
+
fig = ax.get_figure()
|
|
35
|
+
fig_dx_in, fig_dy_in = fig.get_size_inches()
|
|
36
|
+
dx_ratio, dy_ratio = dx_in / fig_dx_in, dy_in / fig_dy_in
|
|
37
|
+
|
|
38
|
+
# Determine updated bbox position and optionally adjust dimensions
|
|
39
|
+
left = bbox.x0 + dx_ratio
|
|
40
|
+
bottom = bbox.y0 + dy_ratio
|
|
41
|
+
width = bbox.width
|
|
42
|
+
height = bbox.height
|
|
43
|
+
|
|
44
|
+
# Main
|
|
45
|
+
ax.set_position([left, bottom, width, height])
|
|
46
|
+
|
|
47
|
+
return ax
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
# def adjust_axes_position_and_dimension(
|
|
51
|
+
# ax, dx, dy, adjust_width_for_dx=False, adjust_height_for_dy=False
|
|
52
|
+
# ):
|
|
53
|
+
|
|
54
|
+
# def set_pos(ax, x_cm, y_cm, extend_x=False, extend_y=False):
|
|
55
|
+
# """
|
|
56
|
+
# Adjusts the position of an Axes object within a Figure by a specified offset in centimeters.
|
|
57
|
+
|
|
58
|
+
# Parameters:
|
|
59
|
+
# - ax (matplotlib.axes.Axes): The Axes object to modify.
|
|
60
|
+
# - x_cm (float): The horizontal offset in centimeters to adjust the Axes position.
|
|
61
|
+
# - y_cm (float): The vertical offset in centimeters to adjust the Axes position.
|
|
62
|
+
# - extend_x (bool): If True, reduces the width of the Axes by the horizontal offset.
|
|
63
|
+
# - extend_y (bool): If True, reduces the height of the Axes by the vertical offset.
|
|
64
|
+
|
|
65
|
+
# Returns:
|
|
66
|
+
# - ax (matplotlib.axes.Axes): The modified Axes object with the adjusted position.
|
|
67
|
+
# """
|
|
68
|
+
|
|
69
|
+
# bbox = ax.get_position()
|
|
70
|
+
|
|
71
|
+
# # Inches
|
|
72
|
+
# x_in, y_in = x_cm / 2.54, y_cm / 2.54
|
|
73
|
+
|
|
74
|
+
# # Calculates delta ratios
|
|
75
|
+
# fig = ax.get_figure()
|
|
76
|
+
# fig_x_in, fig_y_in = fig.get_size_inches()
|
|
77
|
+
# x_ratio, y_ratio = x_in / fig_x_in, y_in / fig_y_in
|
|
78
|
+
|
|
79
|
+
# # Determines updated bbox position
|
|
80
|
+
# left = bbox.x0 + x_ratio
|
|
81
|
+
# bottom = bbox.y0 + y_ratio
|
|
82
|
+
# width = bbox.width
|
|
83
|
+
# height = bbox.height
|
|
84
|
+
|
|
85
|
+
# if extend_x:
|
|
86
|
+
# width -= x_ratio
|
|
87
|
+
|
|
88
|
+
# if extend_y:
|
|
89
|
+
# height -= y_ratio
|
|
90
|
+
|
|
91
|
+
# ax.set_position([left, bottom, width, height])
|
|
92
|
+
|
|
93
|
+
# return ax
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
# def set_pos(
|
|
97
|
+
# fig,
|
|
98
|
+
# ax,
|
|
99
|
+
# x_cm,
|
|
100
|
+
# y_cm,
|
|
101
|
+
# dragh=False,
|
|
102
|
+
# dragv=False,
|
|
103
|
+
# ):
|
|
104
|
+
|
|
105
|
+
# bbox = ax.get_position()
|
|
106
|
+
|
|
107
|
+
# ## Calculates delta ratios
|
|
108
|
+
# fig_x_in, fig_y_in = fig.get_size_inches()
|
|
109
|
+
|
|
110
|
+
# x_in = float(x_cm) / 2.54
|
|
111
|
+
# y_in = float(y_cm) / 2.54
|
|
112
|
+
|
|
113
|
+
# x_ratio = x_in / fig_x_in
|
|
114
|
+
# y_ratio = y_in / fig_x_in
|
|
115
|
+
|
|
116
|
+
# ## Determines updated bbox position
|
|
117
|
+
# left = bbox.x0 + x_ratio
|
|
118
|
+
# bottom = bbox.y0 + y_ratio
|
|
119
|
+
# width = bbox.x1 - bbox.x0
|
|
120
|
+
# height = bbox.y1 - bbox.y0
|
|
121
|
+
|
|
122
|
+
# if dragh:
|
|
123
|
+
# width -= x_ratio
|
|
124
|
+
|
|
125
|
+
# if dragv:
|
|
126
|
+
# height -= y_ratio
|
|
127
|
+
|
|
128
|
+
# ax.set_pos(
|
|
129
|
+
# [
|
|
130
|
+
# left,
|
|
131
|
+
# bottom,
|
|
132
|
+
# width,
|
|
133
|
+
# height,
|
|
134
|
+
# ]
|
|
135
|
+
# )
|
|
136
|
+
|
|
137
|
+
# return ax
|
|
138
|
+
|
|
139
|
+
# EOF
|