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,82 @@
|
|
|
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_plot_scatter_hist.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
__FILE__ = (
|
|
8
|
+
"./src/scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_scatter_hist.py"
|
|
9
|
+
)
|
|
10
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
11
|
+
# ----------------------------------------
|
|
12
|
+
|
|
13
|
+
import numpy as np
|
|
14
|
+
import pandas as pd
|
|
15
|
+
|
|
16
|
+
def _format_plot_scatter_hist(id, tracked_dict, kwargs):
|
|
17
|
+
"""Format data from a plot_scatter_hist call.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
id (str): Identifier for the plot
|
|
21
|
+
tracked_dict (dict): Dictionary containing tracked data
|
|
22
|
+
kwargs (dict): Keyword arguments passed to plot_scatter_hist
|
|
23
|
+
|
|
24
|
+
Returns:
|
|
25
|
+
pd.DataFrame: Formatted scatter histogram data
|
|
26
|
+
"""
|
|
27
|
+
# Check if tracked_dict is empty or not a dictionary
|
|
28
|
+
if not tracked_dict or not isinstance(tracked_dict, dict):
|
|
29
|
+
return pd.DataFrame()
|
|
30
|
+
|
|
31
|
+
# Extract data from tracked_dict
|
|
32
|
+
x = tracked_dict.get('x')
|
|
33
|
+
y = tracked_dict.get('y')
|
|
34
|
+
|
|
35
|
+
if x is not None and y is not None:
|
|
36
|
+
# Create base DataFrame with x and y values
|
|
37
|
+
df = pd.DataFrame({
|
|
38
|
+
f"{id}_scatter_hist_x": x,
|
|
39
|
+
f"{id}_scatter_hist_y": y
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
# Add histogram data if available
|
|
43
|
+
hist_x = tracked_dict.get('hist_x')
|
|
44
|
+
hist_y = tracked_dict.get('hist_y')
|
|
45
|
+
bin_edges_x = tracked_dict.get('bin_edges_x')
|
|
46
|
+
bin_edges_y = tracked_dict.get('bin_edges_y')
|
|
47
|
+
|
|
48
|
+
# If we have histogram data
|
|
49
|
+
if hist_x is not None and bin_edges_x is not None:
|
|
50
|
+
# Calculate bin centers for x-axis histogram
|
|
51
|
+
bin_centers_x = 0.5 * (bin_edges_x[1:] + bin_edges_x[:-1])
|
|
52
|
+
|
|
53
|
+
# Create a DataFrame for x histogram data
|
|
54
|
+
hist_x_df = pd.DataFrame({
|
|
55
|
+
f"{id}_hist_x_bin_centers": bin_centers_x,
|
|
56
|
+
f"{id}_hist_x_counts": hist_x
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
# Add it to the main DataFrame using a MultiIndex
|
|
60
|
+
for i, (center, count) in enumerate(zip(bin_centers_x, hist_x)):
|
|
61
|
+
df.loc[f"hist_x_{i}", f"{id}_hist_x_bin"] = center
|
|
62
|
+
df.loc[f"hist_x_{i}", f"{id}_hist_x_count"] = count
|
|
63
|
+
|
|
64
|
+
# If we have y histogram data
|
|
65
|
+
if hist_y is not None and bin_edges_y is not None:
|
|
66
|
+
# Calculate bin centers for y-axis histogram
|
|
67
|
+
bin_centers_y = 0.5 * (bin_edges_y[1:] + bin_edges_y[:-1])
|
|
68
|
+
|
|
69
|
+
# Create a DataFrame for y histogram data
|
|
70
|
+
hist_y_df = pd.DataFrame({
|
|
71
|
+
f"{id}_hist_y_bin_centers": bin_centers_y,
|
|
72
|
+
f"{id}_hist_y_counts": hist_y
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
# Add it to the main DataFrame using a MultiIndex
|
|
76
|
+
for i, (center, count) in enumerate(zip(bin_centers_y, hist_y)):
|
|
77
|
+
df.loc[f"hist_y_{i}", f"{id}_hist_y_bin"] = center
|
|
78
|
+
df.loc[f"hist_y_{i}", f"{id}_hist_y_count"] = count
|
|
79
|
+
|
|
80
|
+
return df
|
|
81
|
+
|
|
82
|
+
return pd.DataFrame()
|
|
@@ -0,0 +1,58 @@
|
|
|
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_plot_shaded_line.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
__FILE__ = (
|
|
8
|
+
"./src/scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_shaded_line.py"
|
|
9
|
+
)
|
|
10
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
11
|
+
# ----------------------------------------
|
|
12
|
+
|
|
13
|
+
import pandas as pd
|
|
14
|
+
|
|
15
|
+
def _format_plot_shaded_line(id, tracked_dict, kwargs):
|
|
16
|
+
"""Format data from a plot_shaded_line call.
|
|
17
|
+
|
|
18
|
+
Args:
|
|
19
|
+
id (str): Identifier for the plot
|
|
20
|
+
tracked_dict (dict): Dictionary containing tracked data
|
|
21
|
+
kwargs (dict): Keyword arguments passed to plot_shaded_line
|
|
22
|
+
|
|
23
|
+
Returns:
|
|
24
|
+
pd.DataFrame: Formatted shaded line data
|
|
25
|
+
"""
|
|
26
|
+
# Check if tracked_dict is empty or not a dictionary
|
|
27
|
+
if not tracked_dict or not isinstance(tracked_dict, dict):
|
|
28
|
+
return pd.DataFrame()
|
|
29
|
+
|
|
30
|
+
# If we have a plot_df from plotting methods, use that directly
|
|
31
|
+
if 'plot_df' in tracked_dict and isinstance(tracked_dict['plot_df'], pd.DataFrame):
|
|
32
|
+
plot_df = tracked_dict['plot_df']
|
|
33
|
+
# Add the id prefix to all columns
|
|
34
|
+
return plot_df.add_prefix(f"{id}_")
|
|
35
|
+
|
|
36
|
+
# Try getting the individual components
|
|
37
|
+
x = tracked_dict.get('x')
|
|
38
|
+
y_middle = tracked_dict.get('y_middle')
|
|
39
|
+
y_lower = tracked_dict.get('y_lower')
|
|
40
|
+
y_upper = tracked_dict.get('y_upper')
|
|
41
|
+
|
|
42
|
+
# If we have all necessary components
|
|
43
|
+
if x is not None and y_middle is not None and y_lower is not None:
|
|
44
|
+
data = {
|
|
45
|
+
f"{id}_shaded_line_x": x,
|
|
46
|
+
f"{id}_shaded_line_y": y_middle,
|
|
47
|
+
f"{id}_shaded_line_lower": y_lower,
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if y_upper is not None:
|
|
51
|
+
data[f"{id}_shaded_line_upper"] = y_upper
|
|
52
|
+
else:
|
|
53
|
+
# If only y_lower is provided, assume it's symmetric around y_middle
|
|
54
|
+
data[f"{id}_shaded_line_upper"] = y_middle + (y_middle - y_lower)
|
|
55
|
+
|
|
56
|
+
return pd.DataFrame(data)
|
|
57
|
+
|
|
58
|
+
return pd.DataFrame()
|
|
@@ -0,0 +1,117 @@
|
|
|
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_plot_violin.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
__FILE__ = (
|
|
8
|
+
"./src/scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_violin.py"
|
|
9
|
+
)
|
|
10
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
11
|
+
# ----------------------------------------
|
|
12
|
+
|
|
13
|
+
import numpy as np
|
|
14
|
+
import pandas as pd
|
|
15
|
+
|
|
16
|
+
def _format_plot_violin(id, tracked_dict, kwargs):
|
|
17
|
+
"""Format data from a plot_violin call.
|
|
18
|
+
|
|
19
|
+
Formats data in a long-format for better compatibility.
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
id (str): Identifier for the plot
|
|
23
|
+
tracked_dict (dict): Dictionary containing tracked data
|
|
24
|
+
kwargs (dict): Keyword arguments passed to plot_violin
|
|
25
|
+
|
|
26
|
+
Returns:
|
|
27
|
+
pd.DataFrame: Formatted violin plot data in long format
|
|
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
|
+
# Extract data from tracked_dict
|
|
34
|
+
data = tracked_dict.get('data')
|
|
35
|
+
|
|
36
|
+
if data is not None:
|
|
37
|
+
# If data is a simple array or list
|
|
38
|
+
if isinstance(data, (np.ndarray, list)) and not isinstance(
|
|
39
|
+
data[0], (list, np.ndarray, dict)
|
|
40
|
+
):
|
|
41
|
+
# Convert to long format with group and value columns
|
|
42
|
+
rows = [{'group': '0', 'value': val} for val in data]
|
|
43
|
+
df = pd.DataFrame(rows)
|
|
44
|
+
# Prefix columns with id
|
|
45
|
+
df.columns = [f"{id}_plot_violin_{col}" for col in df.columns]
|
|
46
|
+
return df
|
|
47
|
+
|
|
48
|
+
# If data is a list of arrays (multiple violin plots)
|
|
49
|
+
elif isinstance(data, (list, tuple)) and all(
|
|
50
|
+
isinstance(x, (list, np.ndarray)) for x in data
|
|
51
|
+
):
|
|
52
|
+
# Get labels if available
|
|
53
|
+
labels = tracked_dict.get('labels')
|
|
54
|
+
|
|
55
|
+
# Convert to long format
|
|
56
|
+
rows = []
|
|
57
|
+
for i, values in enumerate(data):
|
|
58
|
+
# Use label if available, otherwise use index
|
|
59
|
+
group = labels[i] if labels and i < len(labels) else f"group{i:02d}"
|
|
60
|
+
for val in values:
|
|
61
|
+
rows.append({'group': str(group), 'value': val})
|
|
62
|
+
|
|
63
|
+
if rows:
|
|
64
|
+
df = pd.DataFrame(rows)
|
|
65
|
+
# Prefix columns with id
|
|
66
|
+
df.columns = [f"{id}_plot_violin_{col}" for col in df.columns]
|
|
67
|
+
return df
|
|
68
|
+
|
|
69
|
+
# If data is a dictionary
|
|
70
|
+
elif isinstance(data, dict):
|
|
71
|
+
# Convert to long format
|
|
72
|
+
rows = []
|
|
73
|
+
for group, values in data.items():
|
|
74
|
+
for val in values:
|
|
75
|
+
rows.append({'group': str(group), 'value': val})
|
|
76
|
+
|
|
77
|
+
if rows:
|
|
78
|
+
df = pd.DataFrame(rows)
|
|
79
|
+
# Prefix columns with id
|
|
80
|
+
df.columns = [f"{id}_plot_violin_{col}" for col in df.columns]
|
|
81
|
+
return df
|
|
82
|
+
|
|
83
|
+
# If data is a DataFrame
|
|
84
|
+
elif isinstance(data, pd.DataFrame):
|
|
85
|
+
# For DataFrame data with x and y columns
|
|
86
|
+
x = tracked_dict.get('x')
|
|
87
|
+
y = tracked_dict.get('y')
|
|
88
|
+
|
|
89
|
+
if x is not None and y is not None and x in data.columns and y in data.columns:
|
|
90
|
+
# Convert to long format
|
|
91
|
+
rows = []
|
|
92
|
+
for group_name, group_data in data.groupby(x):
|
|
93
|
+
for val in group_data[y]:
|
|
94
|
+
rows.append({'group': str(group_name), 'value': val})
|
|
95
|
+
|
|
96
|
+
if rows:
|
|
97
|
+
df = pd.DataFrame(rows)
|
|
98
|
+
# Prefix columns with id
|
|
99
|
+
df.columns = [f"{id}_plot_violin_{col}" for col in df.columns]
|
|
100
|
+
return df
|
|
101
|
+
else:
|
|
102
|
+
# For other dataframes, melt to long format
|
|
103
|
+
try:
|
|
104
|
+
# Try to melt to long format
|
|
105
|
+
result = pd.melt(data)
|
|
106
|
+
# Use variable column as group, value column as values
|
|
107
|
+
result.columns = ['group', 'value']
|
|
108
|
+
# Prefix columns with id
|
|
109
|
+
result.columns = [f"{id}_plot_violin_{col}" for col in result.columns]
|
|
110
|
+
return result
|
|
111
|
+
except Exception:
|
|
112
|
+
# If melt fails, just return the original with prefixed columns
|
|
113
|
+
result = data.copy()
|
|
114
|
+
result.columns = [f"{id}_plot_violin_{col}" for col in result.columns]
|
|
115
|
+
return result
|
|
116
|
+
|
|
117
|
+
return pd.DataFrame()
|
|
@@ -0,0 +1,30 @@
|
|
|
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_scatter.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
__FILE__ = (
|
|
8
|
+
"./src/scitex/plt/_subplots/_export_as_csv_formatters/_format_scatter.py"
|
|
9
|
+
)
|
|
10
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
11
|
+
# ----------------------------------------
|
|
12
|
+
|
|
13
|
+
import pandas as pd
|
|
14
|
+
|
|
15
|
+
def _format_scatter(id, tracked_dict, kwargs):
|
|
16
|
+
"""Format data from a scatter 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
|
+
x, y = args[0], args[1]
|
|
27
|
+
df = pd.DataFrame({f"{id}_scatter_x": x, f"{id}_scatter_y": y})
|
|
28
|
+
return df
|
|
29
|
+
|
|
30
|
+
return pd.DataFrame()
|
|
@@ -0,0 +1,51 @@
|
|
|
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_sns_barplot.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
__FILE__ = (
|
|
8
|
+
"./src/scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_barplot.py"
|
|
9
|
+
)
|
|
10
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
11
|
+
# ----------------------------------------
|
|
12
|
+
|
|
13
|
+
import numpy as np
|
|
14
|
+
import pandas as pd
|
|
15
|
+
|
|
16
|
+
def _format_sns_barplot(id, tracked_dict, kwargs):
|
|
17
|
+
"""Format data from a sns_barplot call.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
id (str): Identifier for the plot
|
|
21
|
+
tracked_dict (dict): Dictionary containing tracked data
|
|
22
|
+
kwargs (dict): Keyword arguments passed to sns_barplot
|
|
23
|
+
|
|
24
|
+
Returns:
|
|
25
|
+
pd.DataFrame: Formatted data for the plot
|
|
26
|
+
"""
|
|
27
|
+
# Check if tracked_dict is empty or not a dictionary
|
|
28
|
+
if not tracked_dict or not isinstance(tracked_dict, dict):
|
|
29
|
+
return pd.DataFrame()
|
|
30
|
+
|
|
31
|
+
# If 'data' key is in tracked_dict, use it
|
|
32
|
+
if 'data' in tracked_dict:
|
|
33
|
+
df = tracked_dict['data']
|
|
34
|
+
if isinstance(df, pd.DataFrame):
|
|
35
|
+
# Add the id prefix to all columns
|
|
36
|
+
return df.add_prefix(f"{id}_")
|
|
37
|
+
|
|
38
|
+
# Legacy handling for args
|
|
39
|
+
if 'args' in tracked_dict:
|
|
40
|
+
df = tracked_dict['args']
|
|
41
|
+
if isinstance(df, pd.DataFrame):
|
|
42
|
+
# When xyhue, without errorbar
|
|
43
|
+
try:
|
|
44
|
+
processed_df = pd.DataFrame(pd.Series(np.array(df).diagonal(), index=df.columns)).T
|
|
45
|
+
return processed_df.add_prefix(f"{id}_")
|
|
46
|
+
except (ValueError, TypeError, IndexError):
|
|
47
|
+
# If processing fails, return the original dataframe
|
|
48
|
+
return df.add_prefix(f"{id}_")
|
|
49
|
+
|
|
50
|
+
# Default empty DataFrame if we can't process the input
|
|
51
|
+
return pd.DataFrame()
|
|
@@ -0,0 +1,93 @@
|
|
|
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_sns_boxplot.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
__FILE__ = (
|
|
8
|
+
"./src/scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_boxplot.py"
|
|
9
|
+
)
|
|
10
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
11
|
+
# ----------------------------------------
|
|
12
|
+
|
|
13
|
+
import pandas as pd
|
|
14
|
+
import numpy as np
|
|
15
|
+
|
|
16
|
+
def _format_sns_boxplot(id, tracked_dict, kwargs):
|
|
17
|
+
"""Format data from a sns_boxplot call.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
id (str): Identifier for the plot
|
|
21
|
+
tracked_dict (dict): Dictionary containing tracked data
|
|
22
|
+
kwargs (dict): Keyword arguments passed to sns_boxplot
|
|
23
|
+
|
|
24
|
+
Returns:
|
|
25
|
+
pd.DataFrame: Formatted boxplot data
|
|
26
|
+
"""
|
|
27
|
+
# Check if tracked_dict is empty or not a dictionary
|
|
28
|
+
if not tracked_dict:
|
|
29
|
+
return pd.DataFrame()
|
|
30
|
+
|
|
31
|
+
# If tracked_dict is a dictionary, try to extract the data from it
|
|
32
|
+
if isinstance(tracked_dict, dict):
|
|
33
|
+
# First try to get 'data' key which is used in seaborn functions
|
|
34
|
+
if 'data' in tracked_dict:
|
|
35
|
+
data = tracked_dict['data']
|
|
36
|
+
if isinstance(data, pd.DataFrame):
|
|
37
|
+
result = data.copy()
|
|
38
|
+
# Add prefix to column names
|
|
39
|
+
result.columns = [f"{id}_sns_boxplot_{col}" for col in result.columns]
|
|
40
|
+
return result
|
|
41
|
+
|
|
42
|
+
# If no 'data' key, try to get data from args
|
|
43
|
+
args = tracked_dict.get('args', [])
|
|
44
|
+
if len(args) > 0:
|
|
45
|
+
# First arg is often the data for seaborn plots
|
|
46
|
+
data = args[0]
|
|
47
|
+
if isinstance(data, pd.DataFrame):
|
|
48
|
+
result = data.copy()
|
|
49
|
+
# Add prefix to column names
|
|
50
|
+
result.columns = [f"{id}_sns_boxplot_{col}" for col in result.columns]
|
|
51
|
+
return result
|
|
52
|
+
|
|
53
|
+
# Handle list or array data
|
|
54
|
+
elif isinstance(data, (list, np.ndarray)):
|
|
55
|
+
# Try to convert to DataFrame
|
|
56
|
+
try:
|
|
57
|
+
if all(isinstance(item, (list, np.ndarray)) for item in data):
|
|
58
|
+
# For list of lists/arrays (multiple groups)
|
|
59
|
+
data_dict = {}
|
|
60
|
+
for i, group_data in enumerate(data):
|
|
61
|
+
data_dict[f"{id}_sns_boxplot_group{i:02d}"] = group_data
|
|
62
|
+
return pd.DataFrame(data_dict)
|
|
63
|
+
else:
|
|
64
|
+
# For a single list/array
|
|
65
|
+
return pd.DataFrame({f"{id}_sns_boxplot_values": data})
|
|
66
|
+
except:
|
|
67
|
+
pass
|
|
68
|
+
|
|
69
|
+
# If tracked_dict is a DataFrame already, use it directly
|
|
70
|
+
elif isinstance(tracked_dict, pd.DataFrame):
|
|
71
|
+
result = tracked_dict.copy()
|
|
72
|
+
# Add prefix to column names
|
|
73
|
+
result.columns = [f"{id}_sns_boxplot_{col}" for col in result.columns]
|
|
74
|
+
return result
|
|
75
|
+
|
|
76
|
+
# If tracked_dict is list-like, try to convert it to a DataFrame
|
|
77
|
+
elif hasattr(tracked_dict, "__iter__") and not isinstance(tracked_dict, str):
|
|
78
|
+
try:
|
|
79
|
+
# For list-like data
|
|
80
|
+
if all(isinstance(item, (list, np.ndarray)) for item in tracked_dict):
|
|
81
|
+
# For list of lists/arrays (multiple groups)
|
|
82
|
+
data_dict = {}
|
|
83
|
+
for i, group_data in enumerate(tracked_dict):
|
|
84
|
+
data_dict[f"{id}_sns_boxplot_group{i:02d}"] = group_data
|
|
85
|
+
return pd.DataFrame(data_dict)
|
|
86
|
+
else:
|
|
87
|
+
# For a single list/array
|
|
88
|
+
return pd.DataFrame({f"{id}_sns_boxplot_values": tracked_dict})
|
|
89
|
+
except:
|
|
90
|
+
pass
|
|
91
|
+
|
|
92
|
+
# Return empty DataFrame if we couldn't extract useful data
|
|
93
|
+
return pd.DataFrame()
|
|
@@ -0,0 +1,94 @@
|
|
|
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_sns_heatmap.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
__FILE__ = (
|
|
8
|
+
"./src/scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_heatmap.py"
|
|
9
|
+
)
|
|
10
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
11
|
+
# ----------------------------------------
|
|
12
|
+
|
|
13
|
+
import pandas as pd
|
|
14
|
+
import numpy as np
|
|
15
|
+
|
|
16
|
+
def _format_sns_heatmap(id, tracked_dict, kwargs):
|
|
17
|
+
"""Format data from a sns_heatmap call.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
id (str): Identifier for the plot
|
|
21
|
+
tracked_dict (dict): Dictionary containing tracked data
|
|
22
|
+
kwargs (dict): Keyword arguments passed to sns_heatmap
|
|
23
|
+
|
|
24
|
+
Returns:
|
|
25
|
+
pd.DataFrame: Formatted data for the plot
|
|
26
|
+
"""
|
|
27
|
+
# Check if tracked_dict is empty
|
|
28
|
+
if not tracked_dict:
|
|
29
|
+
return pd.DataFrame()
|
|
30
|
+
|
|
31
|
+
# If tracked_dict is a dictionary
|
|
32
|
+
if isinstance(tracked_dict, dict):
|
|
33
|
+
# If 'data' key is in tracked_dict, use it
|
|
34
|
+
if 'data' in tracked_dict:
|
|
35
|
+
data = tracked_dict['data']
|
|
36
|
+
|
|
37
|
+
# Handle pandas DataFrame
|
|
38
|
+
if isinstance(data, pd.DataFrame):
|
|
39
|
+
df = data.copy()
|
|
40
|
+
# Add the id prefix to all columns
|
|
41
|
+
return df.add_prefix(f"{id}_sns_heatmap_")
|
|
42
|
+
|
|
43
|
+
# Handle numpy array
|
|
44
|
+
elif isinstance(data, np.ndarray):
|
|
45
|
+
# Create DataFrame from array with simple column names
|
|
46
|
+
rows, cols = data.shape if len(data.shape) >= 2 else (data.shape[0], 1)
|
|
47
|
+
df = pd.DataFrame(
|
|
48
|
+
data,
|
|
49
|
+
columns=[f"col_{i}" for i in range(cols)]
|
|
50
|
+
)
|
|
51
|
+
# Add the id prefix to all columns
|
|
52
|
+
return df.add_prefix(f"{id}_sns_heatmap_")
|
|
53
|
+
|
|
54
|
+
# Legacy handling for args
|
|
55
|
+
args = tracked_dict.get('args', [])
|
|
56
|
+
if len(args) > 0:
|
|
57
|
+
data = args[0] # First arg to sns_heatmap is typically the data matrix
|
|
58
|
+
|
|
59
|
+
# Handle pandas DataFrame
|
|
60
|
+
if isinstance(data, pd.DataFrame):
|
|
61
|
+
df = data.copy()
|
|
62
|
+
# Add the id prefix to all columns
|
|
63
|
+
return df.add_prefix(f"{id}_sns_heatmap_")
|
|
64
|
+
|
|
65
|
+
# Handle numpy array
|
|
66
|
+
elif isinstance(data, np.ndarray):
|
|
67
|
+
# Create DataFrame from array with simple column names
|
|
68
|
+
rows, cols = data.shape if len(data.shape) >= 2 else (data.shape[0], 1)
|
|
69
|
+
df = pd.DataFrame(
|
|
70
|
+
data,
|
|
71
|
+
columns=[f"col_{i}" for i in range(cols)]
|
|
72
|
+
)
|
|
73
|
+
# Add the id prefix to all columns
|
|
74
|
+
return df.add_prefix(f"{id}_sns_heatmap_")
|
|
75
|
+
|
|
76
|
+
# If tracked_dict is a DataFrame directly
|
|
77
|
+
elif isinstance(tracked_dict, pd.DataFrame):
|
|
78
|
+
df = tracked_dict.copy()
|
|
79
|
+
# Add the id prefix to all columns
|
|
80
|
+
return df.add_prefix(f"{id}_sns_heatmap_")
|
|
81
|
+
|
|
82
|
+
# If tracked_dict is a numpy array directly
|
|
83
|
+
elif isinstance(tracked_dict, np.ndarray):
|
|
84
|
+
# Create DataFrame from array with simple column names
|
|
85
|
+
rows, cols = tracked_dict.shape if len(tracked_dict.shape) >= 2 else (tracked_dict.shape[0], 1)
|
|
86
|
+
df = pd.DataFrame(
|
|
87
|
+
tracked_dict,
|
|
88
|
+
columns=[f"col_{i}" for i in range(cols)]
|
|
89
|
+
)
|
|
90
|
+
# Add the id prefix to all columns
|
|
91
|
+
return df.add_prefix(f"{id}_sns_heatmap_")
|
|
92
|
+
|
|
93
|
+
# Default empty DataFrame if we can't process the input
|
|
94
|
+
return pd.DataFrame()
|
|
@@ -0,0 +1,92 @@
|
|
|
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_sns_histplot.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
__FILE__ = (
|
|
8
|
+
"./src/scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_histplot.py"
|
|
9
|
+
)
|
|
10
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
11
|
+
# ----------------------------------------
|
|
12
|
+
|
|
13
|
+
import numpy as np
|
|
14
|
+
import pandas as pd
|
|
15
|
+
|
|
16
|
+
def _format_sns_histplot(id, tracked_dict, kwargs):
|
|
17
|
+
"""
|
|
18
|
+
Format data from a sns_histplot call as a bar plot representation.
|
|
19
|
+
|
|
20
|
+
This formatter extracts both the raw data and the binned data from seaborn histogram plots,
|
|
21
|
+
returning them in a format that can be visualized as a bar plot.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
id (str): Identifier for the plot
|
|
25
|
+
tracked_dict (dict): Dictionary containing tracked data
|
|
26
|
+
kwargs (dict): Keyword arguments passed to sns_histplot
|
|
27
|
+
|
|
28
|
+
Returns:
|
|
29
|
+
pd.DataFrame: Formatted data for the plot including bin information
|
|
30
|
+
"""
|
|
31
|
+
# Check if tracked_dict is empty or not a dictionary
|
|
32
|
+
if not tracked_dict or not isinstance(tracked_dict, dict):
|
|
33
|
+
return pd.DataFrame()
|
|
34
|
+
|
|
35
|
+
columns = {}
|
|
36
|
+
|
|
37
|
+
# Check if histogram result is available in tracked_dict
|
|
38
|
+
hist_result = tracked_dict.get('hist_result', None)
|
|
39
|
+
|
|
40
|
+
# If we have histogram result (counts and bin edges)
|
|
41
|
+
if hist_result is not None:
|
|
42
|
+
counts, bin_edges = hist_result
|
|
43
|
+
|
|
44
|
+
# Calculate bin centers for bar plot representation
|
|
45
|
+
bin_centers = 0.5 * (bin_edges[:-1] + bin_edges[1:])
|
|
46
|
+
bin_widths = bin_edges[1:] - bin_edges[:-1]
|
|
47
|
+
|
|
48
|
+
# Add bin information to DataFrame
|
|
49
|
+
columns[f"{id}_bin_centers"] = bin_centers
|
|
50
|
+
columns[f"{id}_bin_counts"] = counts
|
|
51
|
+
columns[f"{id}_bin_widths"] = bin_widths
|
|
52
|
+
columns[f"{id}_bin_edges_left"] = bin_edges[:-1]
|
|
53
|
+
columns[f"{id}_bin_edges_right"] = bin_edges[1:]
|
|
54
|
+
|
|
55
|
+
# Get raw data if available
|
|
56
|
+
if 'data' in tracked_dict:
|
|
57
|
+
df = tracked_dict['data']
|
|
58
|
+
if isinstance(df, pd.DataFrame):
|
|
59
|
+
# Extract column data from kwargs if available
|
|
60
|
+
x_col = kwargs.get('x')
|
|
61
|
+
if x_col and x_col in df.columns:
|
|
62
|
+
columns[f"{id}_raw_data"] = df[x_col].values
|
|
63
|
+
|
|
64
|
+
# Legacy handling for args
|
|
65
|
+
elif 'args' in tracked_dict:
|
|
66
|
+
args = tracked_dict['args']
|
|
67
|
+
if len(args) >= 1:
|
|
68
|
+
# First argument is typically the data
|
|
69
|
+
x = args[0]
|
|
70
|
+
if hasattr(x, 'values'): # pandas Series or DataFrame
|
|
71
|
+
columns[f"{id}_raw_data"] = x.values
|
|
72
|
+
else:
|
|
73
|
+
columns[f"{id}_raw_data"] = x
|
|
74
|
+
|
|
75
|
+
# If we have data to return
|
|
76
|
+
if columns:
|
|
77
|
+
# Ensure all arrays are the same length by padding with NaN
|
|
78
|
+
max_length = max(len(value) for value in columns.values() if hasattr(value, '__len__'))
|
|
79
|
+
for key, value in list(columns.items()):
|
|
80
|
+
if hasattr(value, '__len__') and len(value) < max_length:
|
|
81
|
+
# Pad with NaN if needed
|
|
82
|
+
if isinstance(value, np.ndarray):
|
|
83
|
+
columns[key] = np.pad(value, (0, max_length - len(value)),
|
|
84
|
+
mode='constant', constant_values=np.nan)
|
|
85
|
+
else:
|
|
86
|
+
padded = list(value) + [np.nan] * (max_length - len(value))
|
|
87
|
+
columns[key] = np.array(padded)
|
|
88
|
+
|
|
89
|
+
return pd.DataFrame(columns)
|
|
90
|
+
|
|
91
|
+
# Default empty DataFrame if we can't process the input
|
|
92
|
+
return pd.DataFrame()
|
|
@@ -0,0 +1,65 @@
|
|
|
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_sns_jointplot.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
__FILE__ = (
|
|
8
|
+
"./src/scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_jointplot.py"
|
|
9
|
+
)
|
|
10
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
11
|
+
# ----------------------------------------
|
|
12
|
+
|
|
13
|
+
import numpy as np
|
|
14
|
+
import pandas as pd
|
|
15
|
+
|
|
16
|
+
def _format_sns_jointplot(id, tracked_dict, kwargs):
|
|
17
|
+
"""Format data from a sns_jointplot call."""
|
|
18
|
+
# Check if tracked_dict is empty or not a dictionary
|
|
19
|
+
if not tracked_dict or not isinstance(tracked_dict, dict):
|
|
20
|
+
return pd.DataFrame()
|
|
21
|
+
|
|
22
|
+
# Get the args from tracked_dict
|
|
23
|
+
args = tracked_dict.get('args', [])
|
|
24
|
+
|
|
25
|
+
# Joint distribution plot in seaborn
|
|
26
|
+
if len(args) >= 1:
|
|
27
|
+
data = args[0]
|
|
28
|
+
|
|
29
|
+
# Get x and y variables from kwargs
|
|
30
|
+
x_var = kwargs.get("x")
|
|
31
|
+
y_var = kwargs.get("y")
|
|
32
|
+
|
|
33
|
+
# Handle DataFrame input
|
|
34
|
+
if isinstance(data, pd.DataFrame) and x_var and y_var:
|
|
35
|
+
# Extract the relevant columns
|
|
36
|
+
x_data = data[x_var]
|
|
37
|
+
y_data = data[y_var]
|
|
38
|
+
|
|
39
|
+
result = pd.DataFrame(
|
|
40
|
+
{f"{id}_joint_{x_var}": x_data, f"{id}_joint_{y_var}": y_data}
|
|
41
|
+
)
|
|
42
|
+
return result
|
|
43
|
+
|
|
44
|
+
# Handle direct x, y data arrays
|
|
45
|
+
elif isinstance(data, pd.DataFrame):
|
|
46
|
+
# If no x, y specified, return the whole dataframe
|
|
47
|
+
result = data.copy()
|
|
48
|
+
if id is not None:
|
|
49
|
+
result.columns = [
|
|
50
|
+
f"{id}_joint_{col}" for col in result.columns
|
|
51
|
+
]
|
|
52
|
+
return result
|
|
53
|
+
|
|
54
|
+
# Handle numpy arrays directly
|
|
55
|
+
elif (
|
|
56
|
+
all(arg in args for arg in range(2))
|
|
57
|
+
and isinstance(args[0], (np.ndarray, list))
|
|
58
|
+
and isinstance(args[1], (np.ndarray, list))
|
|
59
|
+
):
|
|
60
|
+
x_data, y_data = args[0], args[1]
|
|
61
|
+
return pd.DataFrame(
|
|
62
|
+
{f"{id}_joint_x": x_data, f"{id}_joint_y": y_data}
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
return pd.DataFrame()
|