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
scitex/pd/_find_indi.py
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-05 08:11:05 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/pd/_find_indi.py
|
|
5
|
+
|
|
6
|
+
from typing import Dict, List, Union
|
|
7
|
+
|
|
8
|
+
import pandas as pd
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
# def find_indi(df: pd.DataFrame, conditions: Dict[str, Union[str, int, float, List]]) -> pd.Series:
|
|
12
|
+
# """Finds indices of rows that satisfy all given conditions in a DataFrame.
|
|
13
|
+
|
|
14
|
+
# Example
|
|
15
|
+
# -------
|
|
16
|
+
# >>> df = pd.DataFrame({'A': [1, 2, 3], 'B': ['x', 'y', 'x']})
|
|
17
|
+
# >>> conditions = {'A': [1, 2], 'B': 'x'}
|
|
18
|
+
# >>> result = find_indi(df, conditions)
|
|
19
|
+
# >>> print(result)
|
|
20
|
+
# 0 True
|
|
21
|
+
# 1 False
|
|
22
|
+
# 2 False
|
|
23
|
+
# dtype: bool
|
|
24
|
+
|
|
25
|
+
# Parameters
|
|
26
|
+
# ----------
|
|
27
|
+
# df : pd.DataFrame
|
|
28
|
+
# Input DataFrame to search in
|
|
29
|
+
# conditions : Dict[str, Union[str, int, float, List]]
|
|
30
|
+
# Dictionary of column names and their target values
|
|
31
|
+
|
|
32
|
+
# Returns
|
|
33
|
+
# -------
|
|
34
|
+
# pd.Series
|
|
35
|
+
# Boolean Series indicating which rows satisfy all conditions
|
|
36
|
+
|
|
37
|
+
# Raises
|
|
38
|
+
# ------
|
|
39
|
+
# KeyError
|
|
40
|
+
# If any column in conditions is not found in DataFrame
|
|
41
|
+
# """
|
|
42
|
+
# if not all(col in df.columns for col in conditions):
|
|
43
|
+
# missing_cols = [col for col in conditions if col not in df.columns]
|
|
44
|
+
# raise KeyError(f"Columns not found in DataFrame: {missing_cols}")
|
|
45
|
+
|
|
46
|
+
# condition_series = []
|
|
47
|
+
# for key, value in conditions.items():
|
|
48
|
+
# if isinstance(value, (list, tuple)):
|
|
49
|
+
# condition_series.append(df[key].isin(value))
|
|
50
|
+
# else:
|
|
51
|
+
# condition_series.append(df[key] == value)
|
|
52
|
+
|
|
53
|
+
# return pd.concat(condition_series, axis=1).all(axis=1)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def find_indi(
|
|
57
|
+
df: pd.DataFrame, conditions: Dict[str, Union[str, int, float, List]]
|
|
58
|
+
) -> List[int]:
|
|
59
|
+
"""Finds indices of rows that satisfy conditions, handling NaN values.
|
|
60
|
+
|
|
61
|
+
Example
|
|
62
|
+
-------
|
|
63
|
+
>>> df = pd.DataFrame({'A': [1, 2, None], 'B': ['x', 'y', 'x']})
|
|
64
|
+
>>> conditions = {'A': [1, None], 'B': 'x'}
|
|
65
|
+
>>> result = find_indi(df, conditions)
|
|
66
|
+
|
|
67
|
+
Parameters
|
|
68
|
+
----------
|
|
69
|
+
df : pd.DataFrame
|
|
70
|
+
Input DataFrame
|
|
71
|
+
conditions : Dict[str, Union[str, int, float, List]]
|
|
72
|
+
Column conditions
|
|
73
|
+
|
|
74
|
+
Returns
|
|
75
|
+
-------
|
|
76
|
+
List[int]
|
|
77
|
+
List of integer indices of matching rows
|
|
78
|
+
"""
|
|
79
|
+
if not conditions:
|
|
80
|
+
return []
|
|
81
|
+
|
|
82
|
+
if not all(col in df.columns for col in conditions):
|
|
83
|
+
missing_cols = [col for col in conditions if col not in df.columns]
|
|
84
|
+
raise KeyError(f"Columns not found in DataFrame: {missing_cols}")
|
|
85
|
+
|
|
86
|
+
condition_series = []
|
|
87
|
+
for key, value in conditions.items():
|
|
88
|
+
if isinstance(value, (list, tuple)):
|
|
89
|
+
# Handle NaN in lists
|
|
90
|
+
has_na = False
|
|
91
|
+
try:
|
|
92
|
+
# Check for None
|
|
93
|
+
if None in value:
|
|
94
|
+
has_na = True
|
|
95
|
+
# Check for pd.NA (may raise TypeError)
|
|
96
|
+
elif any(v is pd.NA for v in value):
|
|
97
|
+
has_na = True
|
|
98
|
+
# Check for np.nan
|
|
99
|
+
elif any(pd.isna(v) for v in value):
|
|
100
|
+
has_na = True
|
|
101
|
+
except (TypeError, ValueError):
|
|
102
|
+
# If any check fails, try alternative approach
|
|
103
|
+
has_na = any(
|
|
104
|
+
pd.isna(v) if not isinstance(v, str) else False for v in value
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
if has_na:
|
|
108
|
+
condition = df[key].isin(value) | df[key].isna()
|
|
109
|
+
else:
|
|
110
|
+
condition = df[key].isin(value)
|
|
111
|
+
else:
|
|
112
|
+
# Handle single NaN value
|
|
113
|
+
if pd.isna(value):
|
|
114
|
+
condition = df[key].isna()
|
|
115
|
+
else:
|
|
116
|
+
condition = df[key] == value
|
|
117
|
+
condition_series.append(condition)
|
|
118
|
+
|
|
119
|
+
if condition_series:
|
|
120
|
+
mask = pd.concat(condition_series, axis=1).all(axis=1)
|
|
121
|
+
return df.index[mask].tolist()
|
|
122
|
+
else:
|
|
123
|
+
return []
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
# EOF
|
scitex/pd/_find_pval.py
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-03 03:25:00 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/pd/_find_pval.py
|
|
5
|
+
|
|
6
|
+
#!/usr/bin/env python3
|
|
7
|
+
# -*- coding: utf-8 -*-
|
|
8
|
+
# Time-stamp: "2024-10-06 11:09:07 (ywatanabe)"
|
|
9
|
+
# /home/ywatanabe/proj/_scitex_repo_openhands/src/scitex/stats/_find_pval_col.py
|
|
10
|
+
|
|
11
|
+
"""
|
|
12
|
+
Functionality:
|
|
13
|
+
- Identifies column name(s) in a DataFrame or keys in other data structures that correspond to p-values
|
|
14
|
+
Input:
|
|
15
|
+
- pandas DataFrame, numpy array, list, or dict
|
|
16
|
+
Output:
|
|
17
|
+
- String or list of strings representing the identified p-value column name(s) or key(s), or None if not found
|
|
18
|
+
Prerequisites:
|
|
19
|
+
- pandas, numpy libraries
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
import re
|
|
23
|
+
from typing import Dict, List, Optional, Union
|
|
24
|
+
|
|
25
|
+
import numpy as np
|
|
26
|
+
import pandas as pd
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def find_pval(
|
|
30
|
+
data: Union[pd.DataFrame, np.ndarray, List, Dict], multiple: bool = True
|
|
31
|
+
) -> Union[Optional[str], List[str]]:
|
|
32
|
+
"""
|
|
33
|
+
Find p-value column name(s) or key(s) in various data structures.
|
|
34
|
+
|
|
35
|
+
Example:
|
|
36
|
+
--------
|
|
37
|
+
>>> df = pd.DataFrame({'p_value': [0.05, 0.01], 'pval': [0.1, 0.001], 'other': [1, 2]})
|
|
38
|
+
>>> find_pval(df)
|
|
39
|
+
['p_value', 'pval']
|
|
40
|
+
>>> find_pval(df, multiple=False)
|
|
41
|
+
'p_value'
|
|
42
|
+
|
|
43
|
+
Parameters:
|
|
44
|
+
-----------
|
|
45
|
+
data : Union[pd.DataFrame, np.ndarray, List, Dict]
|
|
46
|
+
Data structure to search for p-value column or key
|
|
47
|
+
multiple : bool, optional
|
|
48
|
+
If True, return all matches; if False, return only the first match (default is True)
|
|
49
|
+
|
|
50
|
+
Returns:
|
|
51
|
+
--------
|
|
52
|
+
Union[Optional[str], List[str]]
|
|
53
|
+
Name(s) of the column(s) or key(s) that match p-value patterns, or None if not found
|
|
54
|
+
"""
|
|
55
|
+
if isinstance(data, pd.DataFrame):
|
|
56
|
+
return _find_pval_col(data, multiple)
|
|
57
|
+
elif isinstance(data, (np.ndarray, list, dict)):
|
|
58
|
+
return _find_pval(data, multiple)
|
|
59
|
+
else:
|
|
60
|
+
raise ValueError("Input must be a pandas DataFrame, numpy array, list, or dict")
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def _find_pval(
|
|
64
|
+
data: Union[np.ndarray, List, Dict], multiple: bool
|
|
65
|
+
) -> Union[Optional[str], List[str]]:
|
|
66
|
+
pattern = re.compile(r"p[-_]?val(ue)?(?!.*stars)", re.IGNORECASE)
|
|
67
|
+
matches = []
|
|
68
|
+
|
|
69
|
+
if isinstance(data, dict):
|
|
70
|
+
matches = [key for key in data.keys() if pattern.search(str(key))]
|
|
71
|
+
elif (
|
|
72
|
+
isinstance(data, (np.ndarray, list))
|
|
73
|
+
and len(data) > 0
|
|
74
|
+
and isinstance(data[0], dict)
|
|
75
|
+
):
|
|
76
|
+
matches = [key for key in data[0].keys() if pattern.search(str(key))]
|
|
77
|
+
|
|
78
|
+
return matches if multiple else (matches[0] if matches else None)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def _find_pval_col(
|
|
82
|
+
df: pd.DataFrame, multiple: bool = False
|
|
83
|
+
) -> Union[Optional[str], List[str]]:
|
|
84
|
+
"""
|
|
85
|
+
Find p-value column name(s) in a DataFrame.
|
|
86
|
+
|
|
87
|
+
Example:
|
|
88
|
+
--------
|
|
89
|
+
>>> df = pd.DataFrame({'p_value': [0.05, 0.01], 'pval': [0.1, 0.001], 'other': [1, 2]})
|
|
90
|
+
>>> find_pval_col(df)
|
|
91
|
+
['p_value', 'pval']
|
|
92
|
+
>>> find_pval_col(df, multiple=False)
|
|
93
|
+
'p_value'
|
|
94
|
+
|
|
95
|
+
Parameters:
|
|
96
|
+
-----------
|
|
97
|
+
df : pd.DataFrame
|
|
98
|
+
DataFrame to search for p-value column(s)
|
|
99
|
+
multiple : bool, optional
|
|
100
|
+
If True, return all matches; if False, return only the first match (default is False)
|
|
101
|
+
|
|
102
|
+
Returns:
|
|
103
|
+
--------
|
|
104
|
+
Union[Optional[str], List[str]]
|
|
105
|
+
Name(s) of the column(s) that match p-value patterns, or None if not found
|
|
106
|
+
"""
|
|
107
|
+
pattern = re.compile(r"p[-_]?val(ue)?(?!.*stars)", re.IGNORECASE)
|
|
108
|
+
matches = [col for col in df.columns if pattern.search(str(col))]
|
|
109
|
+
|
|
110
|
+
return matches if multiple else (matches[0] if matches else None)
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
# EOF
|
scitex/pd/_force_df.py
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-04-27 19:59:11 (ywatanabe)"
|
|
4
|
+
# File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/pd/_force_df.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "./src/scitex/pd/_force_df.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
# ----------------------------------------
|
|
11
|
+
|
|
12
|
+
import numpy as np
|
|
13
|
+
import pandas as pd
|
|
14
|
+
|
|
15
|
+
from ..types import is_listed_X
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def force_df(data, filler=np.nan):
|
|
19
|
+
"""
|
|
20
|
+
Convert various data types to pandas DataFrame.
|
|
21
|
+
|
|
22
|
+
Parameters
|
|
23
|
+
----------
|
|
24
|
+
data : various
|
|
25
|
+
The data to convert to DataFrame. Can be DataFrame, Series, ndarray,
|
|
26
|
+
list, tuple, dict, scalar value, etc.
|
|
27
|
+
filler : any, optional
|
|
28
|
+
Value to use for filling missing values, by default np.nan
|
|
29
|
+
|
|
30
|
+
Returns
|
|
31
|
+
-------
|
|
32
|
+
pd.DataFrame
|
|
33
|
+
Data converted to DataFrame
|
|
34
|
+
|
|
35
|
+
Examples
|
|
36
|
+
--------
|
|
37
|
+
>>> import scitex
|
|
38
|
+
>>> import pandas as pd
|
|
39
|
+
>>> import numpy as np
|
|
40
|
+
|
|
41
|
+
# DataFrame input returns the same DataFrame
|
|
42
|
+
>>> df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
|
|
43
|
+
>>> scitex.pd.force_df(df) is df
|
|
44
|
+
True
|
|
45
|
+
|
|
46
|
+
# Series input is converted to DataFrame
|
|
47
|
+
>>> series = pd.Series([1, 2, 3], name='test')
|
|
48
|
+
>>> scitex.pd.force_df(series)
|
|
49
|
+
test
|
|
50
|
+
0 1
|
|
51
|
+
1 2
|
|
52
|
+
2 3
|
|
53
|
+
|
|
54
|
+
# NumPy array input is converted to DataFrame
|
|
55
|
+
>>> arr = np.array([1, 2, 3])
|
|
56
|
+
>>> scitex.pd.force_df(arr)
|
|
57
|
+
value
|
|
58
|
+
0 1
|
|
59
|
+
1 2
|
|
60
|
+
2 3
|
|
61
|
+
|
|
62
|
+
# Scalar values are converted to single-value DataFrames
|
|
63
|
+
>>> scitex.pd.force_df(42)
|
|
64
|
+
value
|
|
65
|
+
0 42
|
|
66
|
+
|
|
67
|
+
# Lists and tuples are converted to DataFrame
|
|
68
|
+
>>> scitex.pd.force_df([1, 2, 3])
|
|
69
|
+
value
|
|
70
|
+
0 1
|
|
71
|
+
1 2
|
|
72
|
+
2 3
|
|
73
|
+
|
|
74
|
+
# Dictionaries are converted to DataFrame with appropriate handling
|
|
75
|
+
# of different length values
|
|
76
|
+
>>> data = {'A': [1, 2, 3], 'B': [4, 5]}
|
|
77
|
+
>>> scitex.pd.force_df(data)
|
|
78
|
+
A B
|
|
79
|
+
0 1 4
|
|
80
|
+
1 2 5
|
|
81
|
+
2 3 NaN
|
|
82
|
+
"""
|
|
83
|
+
# Return None as empty DataFrame
|
|
84
|
+
if data is None:
|
|
85
|
+
return pd.DataFrame()
|
|
86
|
+
|
|
87
|
+
# Return DataFrame as is
|
|
88
|
+
if isinstance(data, pd.DataFrame):
|
|
89
|
+
return data
|
|
90
|
+
|
|
91
|
+
# Convert Series to DataFrame
|
|
92
|
+
if isinstance(data, pd.Series):
|
|
93
|
+
return data.to_frame()
|
|
94
|
+
|
|
95
|
+
# Convert numpy array to DataFrame
|
|
96
|
+
if isinstance(data, np.ndarray):
|
|
97
|
+
# Handle 1D array
|
|
98
|
+
if data.ndim == 1:
|
|
99
|
+
return pd.DataFrame(data, columns=['value'])
|
|
100
|
+
# Handle 2D array
|
|
101
|
+
elif data.ndim == 2:
|
|
102
|
+
return pd.DataFrame(data)
|
|
103
|
+
# Handle higher dimensional arrays
|
|
104
|
+
else:
|
|
105
|
+
shape = data.shape
|
|
106
|
+
reshaped = data.reshape(shape[0], -1)
|
|
107
|
+
return pd.DataFrame(reshaped)
|
|
108
|
+
|
|
109
|
+
# Handle scalar values (int, float, str, etc.)
|
|
110
|
+
if isinstance(data, (int, float, str, bool)):
|
|
111
|
+
return pd.DataFrame([data], columns=['value'])
|
|
112
|
+
|
|
113
|
+
# Handle lists and tuples
|
|
114
|
+
if isinstance(data, (list, tuple)):
|
|
115
|
+
# Handle list of lists/arrays -> DataFrame
|
|
116
|
+
if len(data) > 0 and isinstance(data[0], (list, tuple, np.ndarray)):
|
|
117
|
+
return pd.DataFrame(data)
|
|
118
|
+
# Handle simple list/tuple -> single column DataFrame
|
|
119
|
+
else:
|
|
120
|
+
return pd.DataFrame(data, columns=['value'])
|
|
121
|
+
|
|
122
|
+
# Continue with the original implementation for dictionaries
|
|
123
|
+
if isinstance(data, dict):
|
|
124
|
+
# Original implementation
|
|
125
|
+
permutable_dict = data.copy()
|
|
126
|
+
|
|
127
|
+
# Get the lengths
|
|
128
|
+
max_len = 0
|
|
129
|
+
for k, v in permutable_dict.items():
|
|
130
|
+
# Check if v is an iterable (but not string) or treat as single length otherwise
|
|
131
|
+
if isinstance(v, (str, int, float)) or not hasattr(v, "__len__"):
|
|
132
|
+
length = 1
|
|
133
|
+
else:
|
|
134
|
+
length = len(v)
|
|
135
|
+
max_len = max(max_len, length)
|
|
136
|
+
|
|
137
|
+
# Replace with appropriately filled list
|
|
138
|
+
for k, v in permutable_dict.items():
|
|
139
|
+
if isinstance(v, (str, int, float)) or not hasattr(v, "__len__"):
|
|
140
|
+
permutable_dict[k] = [v] + [filler] * (max_len - 1)
|
|
141
|
+
else:
|
|
142
|
+
permutable_dict[k] = list(v) + [filler] * (max_len - len(v))
|
|
143
|
+
|
|
144
|
+
# Puts them into a DataFrame
|
|
145
|
+
return pd.DataFrame(permutable_dict)
|
|
146
|
+
|
|
147
|
+
# For any other iterable type
|
|
148
|
+
try:
|
|
149
|
+
return pd.DataFrame(list(data), columns=['value'])
|
|
150
|
+
except:
|
|
151
|
+
raise TypeError(f"Cannot convert object of type {type(data)} to DataFrame")
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
# EOF
|
scitex/pd/_from_xyz.py
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-09-26 07:22:18 (ywatanabe)"
|
|
4
|
+
# /home/ywatanabe/proj/_scitex_repo_openhands/src/scitex/pd/_from_xyz.py
|
|
5
|
+
|
|
6
|
+
import pandas as pd
|
|
7
|
+
import numpy as np
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def from_xyz(data_frame, x=None, y=None, z=None, square=False):
|
|
11
|
+
"""
|
|
12
|
+
Convert a DataFrame with 'x', 'y', 'z' format into a heatmap DataFrame.
|
|
13
|
+
|
|
14
|
+
Example
|
|
15
|
+
-------
|
|
16
|
+
import pandas as pd
|
|
17
|
+
data = pd.DataFrame({
|
|
18
|
+
'col1': ['A', 'B', 'C', 'A'],
|
|
19
|
+
'col2': ['X', 'Y', 'Z', 'Y'],
|
|
20
|
+
'p_val': [0.01, 0.05, 0.001, 0.1]
|
|
21
|
+
})
|
|
22
|
+
data = data.rename(columns={"col1": "x", "col2": "y", "p_val": "z"})
|
|
23
|
+
result = from_xyz(data)
|
|
24
|
+
print(result)
|
|
25
|
+
|
|
26
|
+
Parameters
|
|
27
|
+
----------
|
|
28
|
+
data_frame : pandas.DataFrame
|
|
29
|
+
Input DataFrame with columns for x, y, and z values.
|
|
30
|
+
x : str, optional
|
|
31
|
+
Name of the column to use as x-axis. Defaults to 'x'.
|
|
32
|
+
y : str, optional
|
|
33
|
+
Name of the column to use as y-axis. Defaults to 'y'.
|
|
34
|
+
z : str, optional
|
|
35
|
+
Name of the column to use as z-values. Defaults to 'z'.
|
|
36
|
+
square : bool, optional
|
|
37
|
+
If True, force the output to be a square matrix. Defaults to False.
|
|
38
|
+
|
|
39
|
+
Returns
|
|
40
|
+
-------
|
|
41
|
+
pandas.DataFrame
|
|
42
|
+
A DataFrame in heatmap/pivot format.
|
|
43
|
+
"""
|
|
44
|
+
x = x or "x"
|
|
45
|
+
y = y or "y"
|
|
46
|
+
z = z or "z"
|
|
47
|
+
|
|
48
|
+
heatmap = pd.pivot_table(data_frame, values=z, index=y, columns=x, aggfunc="first")
|
|
49
|
+
|
|
50
|
+
if square:
|
|
51
|
+
# Make it square by including all unique labels
|
|
52
|
+
all_labels = sorted(set(heatmap.index) | set(heatmap.columns))
|
|
53
|
+
heatmap = heatmap.reindex(index=all_labels, columns=all_labels)
|
|
54
|
+
|
|
55
|
+
heatmap = heatmap.fillna(0)
|
|
56
|
+
|
|
57
|
+
return heatmap
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
if __name__ == "__main__":
|
|
61
|
+
np.random.seed(42)
|
|
62
|
+
stats = pd.DataFrame(
|
|
63
|
+
{
|
|
64
|
+
"col1": np.random.choice(["A", "B", "C"], 100),
|
|
65
|
+
"col2": np.random.choice(["X", "Y", "Z"], 100),
|
|
66
|
+
"p_val": np.random.rand(100),
|
|
67
|
+
}
|
|
68
|
+
)
|
|
69
|
+
stats = stats.rename(columns={"col1": "x", "col2": "y", "p_val": "z"})
|
|
70
|
+
result = from_xyz(stats)
|
|
71
|
+
print(result)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-05 07:35:30 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/pd/_ignore_.py
|
|
5
|
+
|
|
6
|
+
import warnings
|
|
7
|
+
from contextlib import contextmanager
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@contextmanager
|
|
11
|
+
def ignore_setting_with_copy_warning():
|
|
12
|
+
"""
|
|
13
|
+
Context manager to temporarily ignore pandas SettingWithCopyWarning.
|
|
14
|
+
|
|
15
|
+
Example
|
|
16
|
+
-------
|
|
17
|
+
>>> with ignore_SettingWithCopyWarning():
|
|
18
|
+
... df['column'] = new_values # No warning will be shown
|
|
19
|
+
"""
|
|
20
|
+
try:
|
|
21
|
+
from pandas.errors import SettingWithCopyWarning
|
|
22
|
+
except ImportError:
|
|
23
|
+
from pandas.core.common import SettingWithCopyWarning
|
|
24
|
+
|
|
25
|
+
# Save current warning filters
|
|
26
|
+
with warnings.catch_warnings():
|
|
27
|
+
warnings.simplefilter(action="ignore", category=SettingWithCopyWarning)
|
|
28
|
+
yield
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
# Backward compatibility
|
|
32
|
+
ignore_SettingWithCopyWarning = ignore_setting_with_copy_warning # Deprecated
|
|
33
|
+
|
|
34
|
+
# EOF
|
scitex/pd/_melt_cols.py
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-10-05 23:04:16 (ywatanabe)"
|
|
4
|
+
# /home/ywatanabe/proj/_scitex_repo_openhands/src/scitex/pd/_melt_cols.py
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
#!/usr/bin/env python3
|
|
8
|
+
# -*- coding: utf-8 -*-
|
|
9
|
+
# Time-stamp: "2024-10-05 23:03:39 (ywatanabe)"
|
|
10
|
+
# /home/ywatanabe/proj/_scitex_repo_openhands/src/scitex/pd/_melt_cols.py
|
|
11
|
+
|
|
12
|
+
from typing import List, Optional
|
|
13
|
+
import pandas as pd
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def melt_cols(
|
|
17
|
+
df: pd.DataFrame, cols: List[str], id_columns: Optional[List[str]] = None
|
|
18
|
+
) -> pd.DataFrame:
|
|
19
|
+
"""
|
|
20
|
+
Melt specified columns while preserving links to other data in a DataFrame.
|
|
21
|
+
|
|
22
|
+
Example
|
|
23
|
+
-------
|
|
24
|
+
>>> data = pd.DataFrame({
|
|
25
|
+
... 'id': [1, 2, 3],
|
|
26
|
+
... 'name': ['Alice', 'Bob', 'Charlie'],
|
|
27
|
+
... 'score_1': [85, 90, 78],
|
|
28
|
+
... 'score_2': [92, 88, 95]
|
|
29
|
+
... })
|
|
30
|
+
>>> melted = melt_cols(data, cols=['score_1', 'score_2'])
|
|
31
|
+
>>> print(melted)
|
|
32
|
+
id name variable value
|
|
33
|
+
0 1 Alice score_1 85
|
|
34
|
+
1 2 Bob score_1 90
|
|
35
|
+
2 3 Charlie score_1 78
|
|
36
|
+
3 1 Alice score_2 92
|
|
37
|
+
4 2 Bob score_2 88
|
|
38
|
+
5 3 Charlie score_2 95
|
|
39
|
+
|
|
40
|
+
Parameters
|
|
41
|
+
----------
|
|
42
|
+
df : pd.DataFrame
|
|
43
|
+
Input DataFrame
|
|
44
|
+
cols : List[str]
|
|
45
|
+
Columns to be melted
|
|
46
|
+
id_columns : Optional[List[str]], default None
|
|
47
|
+
Columns to preserve as identifiers. If None, all columns not in 'cols' are used.
|
|
48
|
+
|
|
49
|
+
Returns
|
|
50
|
+
-------
|
|
51
|
+
pd.DataFrame
|
|
52
|
+
Melted DataFrame with preserved identifier columns
|
|
53
|
+
|
|
54
|
+
Raises
|
|
55
|
+
------
|
|
56
|
+
ValueError
|
|
57
|
+
If cols are not present in the DataFrame
|
|
58
|
+
"""
|
|
59
|
+
missing_melt = set(cols) - set(df.columns)
|
|
60
|
+
if missing_melt:
|
|
61
|
+
raise ValueError(f"Columns not found in DataFrame: {missing_melt}")
|
|
62
|
+
|
|
63
|
+
if id_columns is None:
|
|
64
|
+
id_columns = [col for col in df.columns if col not in cols]
|
|
65
|
+
|
|
66
|
+
df_copy = df.reset_index(drop=True)
|
|
67
|
+
df_copy["global_index"] = df_copy.index
|
|
68
|
+
|
|
69
|
+
# Use a different value_name if "value" is one of the columns being melted
|
|
70
|
+
value_name = "value" if "value" not in cols else "melted_value"
|
|
71
|
+
melted_df = df_copy[cols + ["global_index"]].melt(
|
|
72
|
+
id_vars=["global_index"], value_name=value_name
|
|
73
|
+
)
|
|
74
|
+
if id_columns:
|
|
75
|
+
formatted_df = melted_df.merge(
|
|
76
|
+
df_copy[id_columns + ["global_index"]], on="global_index"
|
|
77
|
+
)
|
|
78
|
+
return formatted_df.drop("global_index", axis=1)
|
|
79
|
+
else:
|
|
80
|
+
# No id columns to merge, just return melted data without global_index
|
|
81
|
+
return melted_df.drop("global_index", axis=1)
|