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,232 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-18 18:14:08 (ywatanabe)"
|
|
4
|
+
# File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/plt/_subplots/_export_as_csv.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "./src/scitex/plt/_subplots/_export_as_csv.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
# ----------------------------------------
|
|
11
|
+
|
|
12
|
+
import warnings
|
|
13
|
+
|
|
14
|
+
import pandas as pd
|
|
15
|
+
|
|
16
|
+
from ._export_as_csv_formatters import (_format_bar, _format_barh,
|
|
17
|
+
_format_boxplot, _format_contour,
|
|
18
|
+
_format_errorbar, _format_eventplot,
|
|
19
|
+
_format_fill, _format_fill_between,
|
|
20
|
+
_format_hist, _format_imshow,
|
|
21
|
+
_format_imshow2d, _format_plot,
|
|
22
|
+
_format_plot_box,
|
|
23
|
+
_format_plot_conf_mat,
|
|
24
|
+
_format_plot_ecdf, _format_plot_fillv,
|
|
25
|
+
_format_plot_heatmap,
|
|
26
|
+
_format_plot_image,
|
|
27
|
+
_format_plot_joyplot, _format_plot_kde,
|
|
28
|
+
_format_plot_line,
|
|
29
|
+
_format_plot_mean_ci,
|
|
30
|
+
_format_plot_mean_std,
|
|
31
|
+
_format_plot_median_iqr,
|
|
32
|
+
_format_plot_raster,
|
|
33
|
+
_format_plot_rectangle,
|
|
34
|
+
_format_plot_scatter_hist,
|
|
35
|
+
_format_plot_shaded_line,
|
|
36
|
+
_format_plot_violin, _format_scatter,
|
|
37
|
+
_format_sns_barplot,
|
|
38
|
+
_format_sns_boxplot,
|
|
39
|
+
_format_sns_heatmap,
|
|
40
|
+
_format_sns_histplot,
|
|
41
|
+
_format_sns_jointplot,
|
|
42
|
+
_format_sns_kdeplot,
|
|
43
|
+
_format_sns_lineplot,
|
|
44
|
+
_format_sns_pairplot,
|
|
45
|
+
_format_sns_scatterplot,
|
|
46
|
+
_format_sns_stripplot,
|
|
47
|
+
_format_sns_swarmplot,
|
|
48
|
+
_format_sns_violinplot, _format_violin,
|
|
49
|
+
_format_violinplot)
|
|
50
|
+
|
|
51
|
+
from scitex.pd import to_xyz
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _to_numpy(data):
|
|
55
|
+
"""Convert various data types to numpy array.
|
|
56
|
+
|
|
57
|
+
Handles torch tensors, pandas Series/DataFrame, and other array-like objects.
|
|
58
|
+
|
|
59
|
+
Parameters
|
|
60
|
+
----------
|
|
61
|
+
data : array-like
|
|
62
|
+
Data to convert to numpy array
|
|
63
|
+
|
|
64
|
+
Returns
|
|
65
|
+
-------
|
|
66
|
+
numpy.ndarray
|
|
67
|
+
Data as numpy array
|
|
68
|
+
"""
|
|
69
|
+
if hasattr(data, 'numpy'): # torch tensor
|
|
70
|
+
return data.detach().numpy() if hasattr(data, 'detach') else data.numpy()
|
|
71
|
+
elif hasattr(data, 'values'): # pandas series/dataframe
|
|
72
|
+
return data.values
|
|
73
|
+
else:
|
|
74
|
+
return np.asarray(data)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def export_as_csv(history_records):
|
|
78
|
+
"""Convert plotting history records to a combined DataFrame suitable for CSV export.
|
|
79
|
+
|
|
80
|
+
Args:
|
|
81
|
+
history_records (dict): Dictionary of plotting records.
|
|
82
|
+
|
|
83
|
+
Returns:
|
|
84
|
+
pd.DataFrame: Combined DataFrame containing all plotting data.
|
|
85
|
+
|
|
86
|
+
Raises:
|
|
87
|
+
ValueError: If no plotting records are found or they cannot be combined.
|
|
88
|
+
"""
|
|
89
|
+
if len(history_records) <= 0:
|
|
90
|
+
warnings.warn("Plotting records not found. Cannot export empty data.")
|
|
91
|
+
return pd.DataFrame() # Return empty DataFrame instead of None
|
|
92
|
+
|
|
93
|
+
dfs = []
|
|
94
|
+
for record in list(history_records.values()):
|
|
95
|
+
try:
|
|
96
|
+
formatted_df = format_record(record)
|
|
97
|
+
if formatted_df is not None and not formatted_df.empty:
|
|
98
|
+
dfs.append(formatted_df)
|
|
99
|
+
except Exception as e:
|
|
100
|
+
warnings.warn(f"Failed to format record {record[0]}: {e}")
|
|
101
|
+
|
|
102
|
+
# If no valid dataframes were created, return an empty one
|
|
103
|
+
if not dfs:
|
|
104
|
+
warnings.warn("No valid data found to export.")
|
|
105
|
+
return pd.DataFrame()
|
|
106
|
+
|
|
107
|
+
try:
|
|
108
|
+
df = pd.concat(dfs, axis=1)
|
|
109
|
+
return df
|
|
110
|
+
except Exception as e:
|
|
111
|
+
warnings.warn(f"Failed to combine plotting records: {e}")
|
|
112
|
+
# Return a DataFrame with metadata about what records were attempted
|
|
113
|
+
meta_df = pd.DataFrame({
|
|
114
|
+
"record_id": [r[0] for r in history_records.values()],
|
|
115
|
+
"method": [r[1] for r in history_records.values()],
|
|
116
|
+
"has_data": ["Yes" if r[2] and r[2] != {} else "No" for r in history_records.values()]
|
|
117
|
+
})
|
|
118
|
+
return meta_df
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def format_record(record):
|
|
122
|
+
"""Route record to the appropriate formatting function based on plot method.
|
|
123
|
+
|
|
124
|
+
Args:
|
|
125
|
+
record (tuple): Plotting record tuple (id, method, tracked_dict, kwargs).
|
|
126
|
+
|
|
127
|
+
Returns:
|
|
128
|
+
pd.DataFrame: Formatted data for the plot record.
|
|
129
|
+
"""
|
|
130
|
+
id, method, tracked_dict, kwargs = record
|
|
131
|
+
|
|
132
|
+
# Basic Matplotlib functions
|
|
133
|
+
if method == "plot":
|
|
134
|
+
return _format_plot(id, tracked_dict, kwargs)
|
|
135
|
+
elif method == "scatter":
|
|
136
|
+
return _format_scatter(id, tracked_dict, kwargs)
|
|
137
|
+
elif method == "bar":
|
|
138
|
+
return _format_bar(id, tracked_dict, kwargs)
|
|
139
|
+
elif method == "barh":
|
|
140
|
+
return _format_barh(id, tracked_dict, kwargs)
|
|
141
|
+
elif method == "hist":
|
|
142
|
+
return _format_hist(id, tracked_dict, kwargs)
|
|
143
|
+
elif method == "boxplot":
|
|
144
|
+
return _format_boxplot(id, tracked_dict, kwargs)
|
|
145
|
+
elif method == "contour":
|
|
146
|
+
return _format_contour(id, tracked_dict, kwargs)
|
|
147
|
+
elif method == "errorbar":
|
|
148
|
+
return _format_errorbar(id, tracked_dict, kwargs)
|
|
149
|
+
elif method == "eventplot":
|
|
150
|
+
return _format_eventplot(id, tracked_dict, kwargs)
|
|
151
|
+
elif method == "fill":
|
|
152
|
+
return _format_fill(id, tracked_dict, kwargs)
|
|
153
|
+
elif method == "fill_between":
|
|
154
|
+
return _format_fill_between(id, tracked_dict, kwargs)
|
|
155
|
+
elif method == "imshow":
|
|
156
|
+
return _format_imshow(id, tracked_dict, kwargs)
|
|
157
|
+
elif method == "imshow2d":
|
|
158
|
+
return _format_imshow2d(id, tracked_dict, kwargs)
|
|
159
|
+
elif method == "violin":
|
|
160
|
+
return _format_violin(id, tracked_dict, kwargs)
|
|
161
|
+
elif method == "violinplot":
|
|
162
|
+
return _format_violinplot(id, tracked_dict, kwargs)
|
|
163
|
+
|
|
164
|
+
# Custom plotting functions
|
|
165
|
+
elif method == "plot_box":
|
|
166
|
+
return _format_plot_box(id, tracked_dict, kwargs)
|
|
167
|
+
elif method == "plot_conf_mat":
|
|
168
|
+
return _format_plot_conf_mat(id, tracked_dict, kwargs)
|
|
169
|
+
elif method == "plot_ecdf":
|
|
170
|
+
return _format_plot_ecdf(id, tracked_dict, kwargs)
|
|
171
|
+
elif method == "plot_fillv":
|
|
172
|
+
return _format_plot_fillv(id, tracked_dict, kwargs)
|
|
173
|
+
elif method == "plot_heatmap":
|
|
174
|
+
return _format_plot_heatmap(id, tracked_dict, kwargs)
|
|
175
|
+
elif method == "plot_image":
|
|
176
|
+
return _format_plot_image(id, tracked_dict, kwargs)
|
|
177
|
+
elif method == "plot_joyplot":
|
|
178
|
+
return _format_plot_joyplot(id, tracked_dict, kwargs)
|
|
179
|
+
elif method == "plot_kde":
|
|
180
|
+
return _format_plot_kde(id, tracked_dict, kwargs)
|
|
181
|
+
elif method == "plot_line":
|
|
182
|
+
return _format_plot_line(id, tracked_dict, kwargs)
|
|
183
|
+
elif method == "plot_mean_ci":
|
|
184
|
+
return _format_plot_mean_ci(id, tracked_dict, kwargs)
|
|
185
|
+
elif method == "plot_mean_std":
|
|
186
|
+
return _format_plot_mean_std(id, tracked_dict, kwargs)
|
|
187
|
+
elif method == "plot_median_iqr":
|
|
188
|
+
return _format_plot_median_iqr(id, tracked_dict, kwargs)
|
|
189
|
+
elif method == "plot_raster":
|
|
190
|
+
return _format_plot_raster(id, tracked_dict, kwargs)
|
|
191
|
+
elif method == "plot_rectangle":
|
|
192
|
+
return _format_plot_rectangle(id, tracked_dict, kwargs)
|
|
193
|
+
elif method == "plot_scatter_hist":
|
|
194
|
+
return _format_plot_scatter_hist(id, tracked_dict, kwargs)
|
|
195
|
+
elif method == "plot_shaded_line":
|
|
196
|
+
return _format_plot_shaded_line(id, tracked_dict, kwargs)
|
|
197
|
+
elif method == "plot_violin":
|
|
198
|
+
return _format_plot_violin(id, tracked_dict, kwargs)
|
|
199
|
+
|
|
200
|
+
# Seaborn functions
|
|
201
|
+
elif method == "sns_barplot":
|
|
202
|
+
return _format_sns_barplot(id, tracked_dict, kwargs)
|
|
203
|
+
elif method == "sns_boxplot":
|
|
204
|
+
return _format_sns_boxplot(id, tracked_dict, kwargs)
|
|
205
|
+
elif method == "sns_heatmap":
|
|
206
|
+
return _format_sns_heatmap(id, tracked_dict, kwargs)
|
|
207
|
+
elif method == "sns_histplot":
|
|
208
|
+
return _format_sns_histplot(id, tracked_dict, kwargs)
|
|
209
|
+
elif method == "sns_jointplot":
|
|
210
|
+
return _format_sns_jointplot(id, tracked_dict, kwargs)
|
|
211
|
+
elif method == "sns_kdeplot":
|
|
212
|
+
return _format_sns_kdeplot(id, tracked_dict, kwargs)
|
|
213
|
+
elif method == "sns_lineplot":
|
|
214
|
+
return _format_sns_lineplot(id, tracked_dict, kwargs)
|
|
215
|
+
elif method == "sns_pairplot":
|
|
216
|
+
return _format_sns_pairplot(id, tracked_dict, kwargs)
|
|
217
|
+
elif method == "sns_scatterplot":
|
|
218
|
+
return _format_sns_scatterplot(id, tracked_dict, kwargs)
|
|
219
|
+
elif method == "sns_stripplot":
|
|
220
|
+
return _format_sns_stripplot(id, tracked_dict, kwargs)
|
|
221
|
+
elif method == "sns_swarmplot":
|
|
222
|
+
return _format_sns_swarmplot(id, tracked_dict, kwargs)
|
|
223
|
+
elif method == "sns_violinplot":
|
|
224
|
+
return _format_sns_violinplot(id, tracked_dict, kwargs)
|
|
225
|
+
else:
|
|
226
|
+
# Unknown or unimplemented method
|
|
227
|
+
raise NotImplementedError(
|
|
228
|
+
f"CSV export for plot method '{method}' is not yet implemented in the scitex.plt module. "
|
|
229
|
+
f"Check the feature-request-export-as-csv-functions.md for implementation status."
|
|
230
|
+
)
|
|
231
|
+
|
|
232
|
+
# EOF
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-18 18:14:26 (ywatanabe)"
|
|
4
|
+
# File: /data/gpfs/projects/punim2354/ywatanabe/scitex_repo/src/scitex/plt/_subplots/_export_as_csv_formatters/__init__.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
__FILE__ = (
|
|
8
|
+
"./src/scitex/plt/_subplots/_export_as_csv_formatters/__init__.py"
|
|
9
|
+
)
|
|
10
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
11
|
+
# ----------------------------------------
|
|
12
|
+
|
|
13
|
+
# Standard matplotlib formatters
|
|
14
|
+
from ._format_plot import _format_plot
|
|
15
|
+
from ._format_scatter import _format_scatter
|
|
16
|
+
from ._format_bar import _format_bar
|
|
17
|
+
from ._format_barh import _format_barh
|
|
18
|
+
from ._format_hist import _format_hist
|
|
19
|
+
from ._format_boxplot import _format_boxplot
|
|
20
|
+
from ._format_contour import _format_contour
|
|
21
|
+
from ._format_errorbar import _format_errorbar
|
|
22
|
+
from ._format_eventplot import _format_eventplot
|
|
23
|
+
from ._format_fill import _format_fill
|
|
24
|
+
from ._format_fill_between import _format_fill_between
|
|
25
|
+
from ._format_imshow import _format_imshow
|
|
26
|
+
from ._format_imshow2d import _format_imshow2d
|
|
27
|
+
from ._format_violin import _format_violin
|
|
28
|
+
from ._format_violinplot import _format_violinplot
|
|
29
|
+
|
|
30
|
+
# Custom plotting formatters
|
|
31
|
+
from ._format_plot_box import _format_plot_box
|
|
32
|
+
from ._format_plot_conf_mat import _format_plot_conf_mat
|
|
33
|
+
from ._format_plot_ecdf import _format_plot_ecdf
|
|
34
|
+
from ._format_plot_fillv import _format_plot_fillv
|
|
35
|
+
from ._format_plot_heatmap import _format_plot_heatmap
|
|
36
|
+
from ._format_plot_image import _format_plot_image
|
|
37
|
+
from ._format_plot_joyplot import _format_plot_joyplot
|
|
38
|
+
from ._format_plot_kde import _format_plot_kde
|
|
39
|
+
from ._format_plot_line import _format_plot_line
|
|
40
|
+
from ._format_plot_mean_ci import _format_plot_mean_ci
|
|
41
|
+
from ._format_plot_mean_std import _format_plot_mean_std
|
|
42
|
+
from ._format_plot_median_iqr import _format_plot_median_iqr
|
|
43
|
+
from ._format_plot_raster import _format_plot_raster
|
|
44
|
+
from ._format_plot_rectangle import _format_plot_rectangle
|
|
45
|
+
from ._format_plot_scatter_hist import _format_plot_scatter_hist
|
|
46
|
+
from ._format_plot_shaded_line import _format_plot_shaded_line
|
|
47
|
+
from ._format_plot_violin import _format_plot_violin
|
|
48
|
+
|
|
49
|
+
# Seaborn formatters
|
|
50
|
+
from ._format_sns_barplot import _format_sns_barplot
|
|
51
|
+
from ._format_sns_boxplot import _format_sns_boxplot
|
|
52
|
+
from ._format_sns_heatmap import _format_sns_heatmap
|
|
53
|
+
from ._format_sns_histplot import _format_sns_histplot
|
|
54
|
+
from ._format_sns_jointplot import _format_sns_jointplot
|
|
55
|
+
from ._format_sns_kdeplot import _format_sns_kdeplot
|
|
56
|
+
from ._format_sns_lineplot import _format_sns_lineplot
|
|
57
|
+
from ._format_sns_pairplot import _format_sns_pairplot
|
|
58
|
+
from ._format_sns_scatterplot import _format_sns_scatterplot
|
|
59
|
+
from ._format_sns_stripplot import _format_sns_stripplot
|
|
60
|
+
from ._format_sns_swarmplot import _format_sns_swarmplot
|
|
61
|
+
from ._format_sns_violinplot import _format_sns_violinplot
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-19 15:45:51 (ywatanabe)"
|
|
4
|
+
# File: /data/gpfs/projects/punim2354/ywatanabe/scitex_repo/src/scitex/plt/_subplots/_export_as_csv_formatters/_format_bar.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
__FILE__ = (
|
|
8
|
+
"./src/scitex/plt/_subplots/_export_as_csv_formatters/_format_bar.py"
|
|
9
|
+
)
|
|
10
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
11
|
+
# ----------------------------------------
|
|
12
|
+
|
|
13
|
+
import pandas as pd
|
|
14
|
+
import numpy as np
|
|
15
|
+
|
|
16
|
+
def _format_bar(id, tracked_dict, kwargs):
|
|
17
|
+
"""Format data from a bar call for CSV export.
|
|
18
|
+
|
|
19
|
+
Simplified to focus only on essential x and y values.
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
id: The identifier for the plot
|
|
23
|
+
tracked_dict: Dictionary of tracked data
|
|
24
|
+
kwargs: Original keyword arguments
|
|
25
|
+
|
|
26
|
+
Returns:
|
|
27
|
+
pd.DataFrame: Formatted data ready for CSV export with just x and y values
|
|
28
|
+
"""
|
|
29
|
+
# Check if tracked_dict is empty or not a dictionary
|
|
30
|
+
if not tracked_dict or not isinstance(tracked_dict, dict):
|
|
31
|
+
return pd.DataFrame()
|
|
32
|
+
|
|
33
|
+
# Check if we have the newer format with bar_data
|
|
34
|
+
if 'bar_data' in tracked_dict and isinstance(tracked_dict['bar_data'], pd.DataFrame):
|
|
35
|
+
# Use the pre-formatted DataFrame but keep only x and height (y)
|
|
36
|
+
df = tracked_dict['bar_data'].copy()
|
|
37
|
+
|
|
38
|
+
# Keep only essential columns
|
|
39
|
+
essential_cols = [col for col in df.columns if col in ['x', 'height']]
|
|
40
|
+
if essential_cols:
|
|
41
|
+
df = df[essential_cols]
|
|
42
|
+
|
|
43
|
+
# Rename height to y for consistency
|
|
44
|
+
if 'height' in df.columns:
|
|
45
|
+
df = df.rename(columns={'height': 'y'})
|
|
46
|
+
|
|
47
|
+
# Add identifier to column names
|
|
48
|
+
df.columns = [f"{id}_{col}" for col in df.columns]
|
|
49
|
+
return df
|
|
50
|
+
|
|
51
|
+
# Legacy format - get the args from tracked_dict
|
|
52
|
+
args = tracked_dict.get('args', [])
|
|
53
|
+
|
|
54
|
+
# Extract x and y data if available
|
|
55
|
+
if len(args) >= 2:
|
|
56
|
+
x, y = args[0], args[1]
|
|
57
|
+
|
|
58
|
+
# Convert to arrays if possible for consistent handling
|
|
59
|
+
try:
|
|
60
|
+
x_array = np.asarray(x)
|
|
61
|
+
y_array = np.asarray(y)
|
|
62
|
+
|
|
63
|
+
# Create DataFrame with just x and y data
|
|
64
|
+
data = {
|
|
65
|
+
f"{id}_x": x_array,
|
|
66
|
+
f"{id}_y": y_array,
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return pd.DataFrame(data)
|
|
70
|
+
|
|
71
|
+
except (TypeError, ValueError):
|
|
72
|
+
# Fall back to direct values if conversion fails
|
|
73
|
+
return pd.DataFrame({f"{id}_x": x, f"{id}_y": y})
|
|
74
|
+
|
|
75
|
+
# If we have tracked data in another format (like our MatplotlibPlotMixin bar method)
|
|
76
|
+
result = {}
|
|
77
|
+
|
|
78
|
+
# Check for x position (might be in different keys)
|
|
79
|
+
for x_key in ['x', 'xs', 'positions']:
|
|
80
|
+
if x_key in tracked_dict:
|
|
81
|
+
result[f"{id}_x"] = tracked_dict[x_key]
|
|
82
|
+
break
|
|
83
|
+
|
|
84
|
+
# Check for y values (might be in different keys)
|
|
85
|
+
for y_key in ['y', 'ys', 'height', 'heights', 'values']:
|
|
86
|
+
if y_key in tracked_dict:
|
|
87
|
+
result[f"{id}_y"] = tracked_dict[y_key]
|
|
88
|
+
break
|
|
89
|
+
|
|
90
|
+
return pd.DataFrame(result) if result else pd.DataFrame()
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-18 18:14:26 (ywatanabe)"
|
|
4
|
+
# File: /data/gpfs/projects/punim2354/ywatanabe/scitex_repo/src/scitex/plt/_subplots/_export_as_csv_formatters/_format_barh.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
__FILE__ = (
|
|
8
|
+
"./src/scitex/plt/_subplots/_export_as_csv_formatters/_format_barh.py"
|
|
9
|
+
)
|
|
10
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
11
|
+
# ----------------------------------------
|
|
12
|
+
|
|
13
|
+
import pandas as pd
|
|
14
|
+
|
|
15
|
+
def _format_barh(id, tracked_dict, kwargs):
|
|
16
|
+
"""Format data from a barh call."""
|
|
17
|
+
# Check if tracked_dict is empty or not a dictionary
|
|
18
|
+
if not tracked_dict or not isinstance(tracked_dict, dict):
|
|
19
|
+
return pd.DataFrame()
|
|
20
|
+
|
|
21
|
+
# Get the args from tracked_dict
|
|
22
|
+
args = tracked_dict.get('args', [])
|
|
23
|
+
|
|
24
|
+
# Extract x and y data if available
|
|
25
|
+
if len(args) >= 2:
|
|
26
|
+
# Note: in barh, x is height, y is width (visually transposed from bar)
|
|
27
|
+
x, y = args[0], args[1]
|
|
28
|
+
|
|
29
|
+
# Get xerr from kwargs
|
|
30
|
+
xerr = kwargs.get("xerr")
|
|
31
|
+
|
|
32
|
+
# Convert single values to Series
|
|
33
|
+
if isinstance(x, (int, float)):
|
|
34
|
+
x = pd.Series(x, name="x")
|
|
35
|
+
if isinstance(y, (int, float)):
|
|
36
|
+
y = pd.Series(y, name="y")
|
|
37
|
+
else:
|
|
38
|
+
# Not enough arguments
|
|
39
|
+
return pd.DataFrame()
|
|
40
|
+
|
|
41
|
+
df = pd.DataFrame(
|
|
42
|
+
{f"{id}_barh_y": x, f"{id}_barh_x": y}
|
|
43
|
+
) # Swap x/y for barh
|
|
44
|
+
|
|
45
|
+
if xerr is not None:
|
|
46
|
+
if isinstance(xerr, (int, float)):
|
|
47
|
+
xerr = pd.Series(xerr, name="xerr")
|
|
48
|
+
df[f"{id}_barh_xerr"] = xerr
|
|
49
|
+
return df
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-18 18:14:26 (ywatanabe)"
|
|
4
|
+
# File: /data/gpfs/projects/punim2354/ywatanabe/scitex_repo/src/scitex/plt/_subplots/_export_as_csv_formatters/_format_boxplot.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
__FILE__ = (
|
|
8
|
+
"./src/scitex/plt/_subplots/_export_as_csv_formatters/_format_boxplot.py"
|
|
9
|
+
)
|
|
10
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
11
|
+
# ----------------------------------------
|
|
12
|
+
|
|
13
|
+
import numpy as np
|
|
14
|
+
import pandas as pd
|
|
15
|
+
import scitex
|
|
16
|
+
|
|
17
|
+
def _format_boxplot(id, tracked_dict, kwargs):
|
|
18
|
+
"""Format data from a boxplot call."""
|
|
19
|
+
# Check if tracked_dict is empty or not a dictionary
|
|
20
|
+
if not tracked_dict or not isinstance(tracked_dict, dict):
|
|
21
|
+
return pd.DataFrame()
|
|
22
|
+
|
|
23
|
+
# Get the args from tracked_dict
|
|
24
|
+
args = tracked_dict.get('args', [])
|
|
25
|
+
|
|
26
|
+
# Extract data if available
|
|
27
|
+
if len(args) >= 1:
|
|
28
|
+
x = args[0]
|
|
29
|
+
|
|
30
|
+
# One box plot
|
|
31
|
+
from scitex.types import is_listed_X as scitex_types_is_listed_X
|
|
32
|
+
|
|
33
|
+
if isinstance(x, np.ndarray) or scitex_types_is_listed_X(x, [float, int]):
|
|
34
|
+
df = pd.DataFrame(x)
|
|
35
|
+
else:
|
|
36
|
+
# Multiple boxes
|
|
37
|
+
import scitex.pd
|
|
38
|
+
df = scitex.pd.force_df({i_x: _x for i_x, _x in enumerate(x)})
|
|
39
|
+
|
|
40
|
+
# Add prefix to columns
|
|
41
|
+
df.columns = [f"{id}_boxplot_{col}_x" for col in df.columns]
|
|
42
|
+
df = df.apply(lambda col: col.dropna().reset_index(drop=True))
|
|
43
|
+
return df
|
|
44
|
+
|
|
45
|
+
# No valid data available
|
|
46
|
+
return pd.DataFrame()
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-18 18:14:26 (ywatanabe)"
|
|
4
|
+
# File: /data/gpfs/projects/punim2354/ywatanabe/scitex_repo/src/scitex/plt/_subplots/_export_as_csv_formatters/_format_contour.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
__FILE__ = (
|
|
8
|
+
"./src/scitex/plt/_subplots/_export_as_csv_formatters/_format_contour.py"
|
|
9
|
+
)
|
|
10
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
11
|
+
# ----------------------------------------
|
|
12
|
+
|
|
13
|
+
import pandas as pd
|
|
14
|
+
|
|
15
|
+
def _format_contour(id, tracked_dict, kwargs):
|
|
16
|
+
"""Format data from a contour call."""
|
|
17
|
+
# Check if tracked_dict is empty or not a dictionary
|
|
18
|
+
if not tracked_dict or not isinstance(tracked_dict, dict):
|
|
19
|
+
return pd.DataFrame()
|
|
20
|
+
|
|
21
|
+
# Get the args from tracked_dict
|
|
22
|
+
args = tracked_dict.get('args', [])
|
|
23
|
+
|
|
24
|
+
# Typical args: X, Y, Z where X and Y are 2D coordinate arrays and Z is the height array
|
|
25
|
+
if len(args) >= 3:
|
|
26
|
+
X, Y, Z = args[:3]
|
|
27
|
+
# Convert mesh grids to column vectors for export
|
|
28
|
+
X_flat = X.flatten()
|
|
29
|
+
Y_flat = Y.flatten()
|
|
30
|
+
Z_flat = Z.flatten()
|
|
31
|
+
df = pd.DataFrame(
|
|
32
|
+
{
|
|
33
|
+
f"{id}_contour_x": X_flat,
|
|
34
|
+
f"{id}_contour_y": Y_flat,
|
|
35
|
+
f"{id}_contour_z": Z_flat,
|
|
36
|
+
}
|
|
37
|
+
)
|
|
38
|
+
return df
|
|
39
|
+
return pd.DataFrame()
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-18 18:14:26 (ywatanabe)"
|
|
4
|
+
# File: /data/gpfs/projects/punim2354/ywatanabe/scitex_repo/src/scitex/plt/_subplots/_export_as_csv_formatters/_format_errorbar.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
__FILE__ = (
|
|
8
|
+
"./src/scitex/plt/_subplots/_export_as_csv_formatters/_format_errorbar.py"
|
|
9
|
+
)
|
|
10
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
11
|
+
# ----------------------------------------
|
|
12
|
+
|
|
13
|
+
import numpy as np
|
|
14
|
+
import pandas as pd
|
|
15
|
+
import scitex
|
|
16
|
+
|
|
17
|
+
def _format_errorbar(id, tracked_dict, kwargs):
|
|
18
|
+
"""Format data from an errorbar call."""
|
|
19
|
+
# Check if tracked_dict is empty or not a dictionary
|
|
20
|
+
if not tracked_dict or not isinstance(tracked_dict, dict):
|
|
21
|
+
return pd.DataFrame()
|
|
22
|
+
|
|
23
|
+
# Get the args from tracked_dict
|
|
24
|
+
args = tracked_dict.get('args', [])
|
|
25
|
+
|
|
26
|
+
# Typical args: x, y
|
|
27
|
+
# Typical kwargs: xerr, yerr
|
|
28
|
+
if len(args) >= 2:
|
|
29
|
+
x, y = args[:2]
|
|
30
|
+
xerr = kwargs.get("xerr")
|
|
31
|
+
yerr = kwargs.get("yerr")
|
|
32
|
+
|
|
33
|
+
try:
|
|
34
|
+
# Try using scitex.pd.force_df if available
|
|
35
|
+
try:
|
|
36
|
+
import scitex.pd
|
|
37
|
+
|
|
38
|
+
data = {f"{id}_errorbar_x": x, f"{id}_errorbar_y": y}
|
|
39
|
+
|
|
40
|
+
if xerr is not None:
|
|
41
|
+
if isinstance(xerr, (list, tuple)) and len(xerr) == 2:
|
|
42
|
+
# Asymmetric error
|
|
43
|
+
data[f"{id}_errorbar_xerr_neg"] = xerr[0]
|
|
44
|
+
data[f"{id}_errorbar_xerr_pos"] = xerr[1]
|
|
45
|
+
else:
|
|
46
|
+
# Symmetric error
|
|
47
|
+
data[f"{id}_errorbar_xerr"] = xerr
|
|
48
|
+
|
|
49
|
+
if yerr is not None:
|
|
50
|
+
if isinstance(yerr, (list, tuple)) and len(yerr) == 2:
|
|
51
|
+
# Asymmetric error
|
|
52
|
+
data[f"{id}_errorbar_yerr_neg"] = yerr[0]
|
|
53
|
+
data[f"{id}_errorbar_yerr_pos"] = yerr[1]
|
|
54
|
+
else:
|
|
55
|
+
# Symmetric error
|
|
56
|
+
data[f"{id}_errorbar_yerr"] = yerr
|
|
57
|
+
|
|
58
|
+
# Use scitex.pd.force_df to handle different length arrays
|
|
59
|
+
df = scitex.pd.force_df(data)
|
|
60
|
+
return df
|
|
61
|
+
except (ImportError, AttributeError):
|
|
62
|
+
# Fall back to pandas with manual padding
|
|
63
|
+
max_len = max(
|
|
64
|
+
[
|
|
65
|
+
len(arr) if hasattr(arr, "__len__") else 1
|
|
66
|
+
for arr in [x, y, xerr, yerr]
|
|
67
|
+
if arr is not None
|
|
68
|
+
]
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
# Function to pad arrays to the same length
|
|
72
|
+
def pad_to_length(arr, length):
|
|
73
|
+
if arr is None:
|
|
74
|
+
return None
|
|
75
|
+
if not hasattr(arr, "__len__"):
|
|
76
|
+
# Handle scalar values
|
|
77
|
+
return [arr] * length
|
|
78
|
+
if len(arr) >= length:
|
|
79
|
+
return arr
|
|
80
|
+
# Pad with NaN
|
|
81
|
+
return np.pad(
|
|
82
|
+
arr,
|
|
83
|
+
(0, length - len(arr)),
|
|
84
|
+
"constant",
|
|
85
|
+
constant_values=np.nan,
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
# Pad all arrays
|
|
89
|
+
x_padded = pad_to_length(x, max_len)
|
|
90
|
+
y_padded = pad_to_length(y, max_len)
|
|
91
|
+
|
|
92
|
+
data = {
|
|
93
|
+
f"{id}_errorbar_x": x_padded,
|
|
94
|
+
f"{id}_errorbar_y": y_padded,
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if xerr is not None:
|
|
98
|
+
if isinstance(xerr, (list, tuple)) and len(xerr) == 2:
|
|
99
|
+
xerr_neg_padded = pad_to_length(xerr[0], max_len)
|
|
100
|
+
xerr_pos_padded = pad_to_length(xerr[1], max_len)
|
|
101
|
+
data[f"{id}_errorbar_xerr_neg"] = xerr_neg_padded
|
|
102
|
+
data[f"{id}_errorbar_xerr_pos"] = xerr_pos_padded
|
|
103
|
+
else:
|
|
104
|
+
xerr_padded = pad_to_length(xerr, max_len)
|
|
105
|
+
data[f"{id}_errorbar_xerr"] = xerr_padded
|
|
106
|
+
|
|
107
|
+
if yerr is not None:
|
|
108
|
+
if isinstance(yerr, (list, tuple)) and len(yerr) == 2:
|
|
109
|
+
yerr_neg_padded = pad_to_length(yerr[0], max_len)
|
|
110
|
+
yerr_pos_padded = pad_to_length(yerr[1], max_len)
|
|
111
|
+
data[f"{id}_errorbar_yerr_neg"] = yerr_neg_padded
|
|
112
|
+
data[f"{id}_errorbar_yerr_pos"] = yerr_pos_padded
|
|
113
|
+
else:
|
|
114
|
+
yerr_padded = pad_to_length(yerr, max_len)
|
|
115
|
+
data[f"{id}_errorbar_yerr"] = yerr_padded
|
|
116
|
+
|
|
117
|
+
return pd.DataFrame(data)
|
|
118
|
+
except Exception as e:
|
|
119
|
+
# If all else fails, return an empty DataFrame
|
|
120
|
+
import warnings
|
|
121
|
+
|
|
122
|
+
warnings.warn(f"Error formatting errorbar data: {str(e)}")
|
|
123
|
+
return pd.DataFrame()
|
|
124
|
+
|
|
125
|
+
return pd.DataFrame()
|