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,89 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-16 12:12:18 (ywatanabe)"
|
|
4
|
+
# File: /data/gpfs/projects/punim2354/ywatanabe/scitex_repo/src/scitex/io/_save_modules/_csv.py
|
|
5
|
+
|
|
6
|
+
import os
|
|
7
|
+
import pandas as pd
|
|
8
|
+
import numpy as np
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def _save_csv(obj, spath: str, **kwargs) -> None:
|
|
12
|
+
"""
|
|
13
|
+
Save data to a CSV file, handling various input types appropriately.
|
|
14
|
+
|
|
15
|
+
Parameters
|
|
16
|
+
----------
|
|
17
|
+
obj : Any
|
|
18
|
+
The object to save. Can be DataFrame, Series, ndarray, list, tuple, dict, or scalar.
|
|
19
|
+
spath : str
|
|
20
|
+
Path where the CSV file will be saved.
|
|
21
|
+
**kwargs : dict
|
|
22
|
+
Additional keyword arguments to pass to the pandas to_csv method.
|
|
23
|
+
|
|
24
|
+
Returns
|
|
25
|
+
-------
|
|
26
|
+
None
|
|
27
|
+
|
|
28
|
+
Raises
|
|
29
|
+
------
|
|
30
|
+
ValueError
|
|
31
|
+
If the object type cannot be converted to CSV format.
|
|
32
|
+
"""
|
|
33
|
+
# Check if path already exists
|
|
34
|
+
if os.path.exists(spath):
|
|
35
|
+
# Calculate hash of new data
|
|
36
|
+
data_hash = None
|
|
37
|
+
|
|
38
|
+
# Process based on type
|
|
39
|
+
if isinstance(obj, (pd.Series, pd.DataFrame)):
|
|
40
|
+
data_hash = hash(obj.to_string())
|
|
41
|
+
elif isinstance(obj, np.ndarray):
|
|
42
|
+
data_hash = hash(pd.DataFrame(obj).to_string())
|
|
43
|
+
else:
|
|
44
|
+
# For other types, create a string representation and hash it
|
|
45
|
+
try:
|
|
46
|
+
data_str = str(obj)
|
|
47
|
+
data_hash = hash(data_str)
|
|
48
|
+
except:
|
|
49
|
+
# If we can't hash it, proceed with saving
|
|
50
|
+
pass
|
|
51
|
+
|
|
52
|
+
# Compare with existing file if hash calculation was successful
|
|
53
|
+
if data_hash is not None:
|
|
54
|
+
try:
|
|
55
|
+
existing_df = pd.read_csv(spath)
|
|
56
|
+
existing_hash = hash(existing_df.to_string())
|
|
57
|
+
|
|
58
|
+
# Skip if hashes match
|
|
59
|
+
if existing_hash == data_hash:
|
|
60
|
+
return
|
|
61
|
+
except:
|
|
62
|
+
# If reading fails, proceed with saving
|
|
63
|
+
pass
|
|
64
|
+
|
|
65
|
+
# Set default index=False if not explicitly specified in kwargs
|
|
66
|
+
if 'index' not in kwargs:
|
|
67
|
+
kwargs['index'] = False
|
|
68
|
+
|
|
69
|
+
# Save the file based on type
|
|
70
|
+
if isinstance(obj, (pd.Series, pd.DataFrame)):
|
|
71
|
+
obj.to_csv(spath, **kwargs)
|
|
72
|
+
elif isinstance(obj, np.ndarray):
|
|
73
|
+
pd.DataFrame(obj).to_csv(spath, **kwargs)
|
|
74
|
+
elif isinstance(obj, (int, float)):
|
|
75
|
+
pd.DataFrame([obj]).to_csv(spath, **kwargs)
|
|
76
|
+
elif isinstance(obj, (list, tuple)):
|
|
77
|
+
if all(isinstance(x, (int, float)) for x in obj):
|
|
78
|
+
pd.DataFrame(obj).to_csv(spath, **kwargs)
|
|
79
|
+
elif all(isinstance(x, pd.DataFrame) for x in obj):
|
|
80
|
+
pd.concat(obj).to_csv(spath, **kwargs)
|
|
81
|
+
else:
|
|
82
|
+
pd.DataFrame({"data": obj}).to_csv(spath, **kwargs)
|
|
83
|
+
elif isinstance(obj, dict):
|
|
84
|
+
pd.DataFrame.from_dict(obj).to_csv(spath, **kwargs)
|
|
85
|
+
else:
|
|
86
|
+
try:
|
|
87
|
+
pd.DataFrame({"data": [obj]}).to_csv(spath, **kwargs)
|
|
88
|
+
except:
|
|
89
|
+
raise ValueError(f"Unable to save type {type(obj)} as CSV")
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-06-12 12:59:00 (ywatanabe)"
|
|
4
|
+
# File: /ssh:sp:/home/ywatanabe/proj/.claude-worktree/scitex_repo/src/scitex/io/_save_modules/_excel.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "./src/scitex/io/_save_modules/_excel.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
# ----------------------------------------
|
|
11
|
+
|
|
12
|
+
"""
|
|
13
|
+
Excel saving functionality for scitex.io.save
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
import pandas as pd
|
|
17
|
+
import numpy as np
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def save_excel(obj, spath, **kwargs):
|
|
21
|
+
"""Handle Excel file saving.
|
|
22
|
+
|
|
23
|
+
Parameters
|
|
24
|
+
----------
|
|
25
|
+
obj : pd.DataFrame, dict, or np.ndarray
|
|
26
|
+
Object to save as Excel file
|
|
27
|
+
spath : str
|
|
28
|
+
Path where Excel file will be saved
|
|
29
|
+
**kwargs
|
|
30
|
+
Additional keyword arguments passed to pandas.DataFrame.to_excel()
|
|
31
|
+
|
|
32
|
+
Raises
|
|
33
|
+
------
|
|
34
|
+
ValueError
|
|
35
|
+
If object type cannot be saved as Excel file
|
|
36
|
+
"""
|
|
37
|
+
if isinstance(obj, pd.DataFrame):
|
|
38
|
+
obj.to_excel(spath, index=False, **kwargs)
|
|
39
|
+
elif isinstance(obj, dict):
|
|
40
|
+
df = pd.DataFrame(obj)
|
|
41
|
+
df.to_excel(spath, index=False, **kwargs)
|
|
42
|
+
elif isinstance(obj, np.ndarray):
|
|
43
|
+
df = pd.DataFrame(obj)
|
|
44
|
+
df.to_excel(spath, index=False, **kwargs)
|
|
45
|
+
else:
|
|
46
|
+
raise ValueError(f"Cannot save object of type {type(obj)} as Excel file")
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
# EOF
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-06-14 18:26:02 (ywatanabe)"
|
|
4
|
+
# File: /ssh:sp:/home/ywatanabe/proj/SciTeX-Code/src/scitex/io/_save_modules/_hdf5.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
__FILE__ = (
|
|
8
|
+
"./src/scitex/io/_save_modules/_hdf5.py"
|
|
9
|
+
)
|
|
10
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
11
|
+
# ----------------------------------------
|
|
12
|
+
|
|
13
|
+
def _save_hdf5(obj, spath, key=None, override=False, **kwargs):
|
|
14
|
+
import os
|
|
15
|
+
import pickle
|
|
16
|
+
|
|
17
|
+
import h5py
|
|
18
|
+
import numpy as np
|
|
19
|
+
|
|
20
|
+
if not isinstance(obj, dict):
|
|
21
|
+
obj = {"data": obj}
|
|
22
|
+
|
|
23
|
+
if "compression" not in kwargs:
|
|
24
|
+
kwargs["compression"] = "gzip"
|
|
25
|
+
|
|
26
|
+
mode = "a"
|
|
27
|
+
|
|
28
|
+
with h5py.File(spath, mode) as h5_file:
|
|
29
|
+
if key:
|
|
30
|
+
# Check if the full path exists
|
|
31
|
+
key_exists = False
|
|
32
|
+
try:
|
|
33
|
+
parts = key.split("/")
|
|
34
|
+
current = h5_file
|
|
35
|
+
for part in parts:
|
|
36
|
+
if part in current:
|
|
37
|
+
current = current[part]
|
|
38
|
+
else:
|
|
39
|
+
break
|
|
40
|
+
else:
|
|
41
|
+
key_exists = True
|
|
42
|
+
except:
|
|
43
|
+
key_exists = False
|
|
44
|
+
|
|
45
|
+
if not override and key_exists:
|
|
46
|
+
return
|
|
47
|
+
|
|
48
|
+
if override and key_exists:
|
|
49
|
+
del h5_file[key]
|
|
50
|
+
|
|
51
|
+
key_parts = key.split("/")
|
|
52
|
+
current_group = h5_file
|
|
53
|
+
|
|
54
|
+
for part in key_parts[:-1]:
|
|
55
|
+
if part:
|
|
56
|
+
current_group = current_group.require_group(part)
|
|
57
|
+
|
|
58
|
+
final_key = key_parts[-1] if key_parts[-1] else ""
|
|
59
|
+
target_group = (
|
|
60
|
+
current_group.create_group(final_key)
|
|
61
|
+
if final_key
|
|
62
|
+
else current_group
|
|
63
|
+
)
|
|
64
|
+
else:
|
|
65
|
+
target_group = h5_file
|
|
66
|
+
|
|
67
|
+
for dataset_name, data in obj.items():
|
|
68
|
+
if isinstance(data, str):
|
|
69
|
+
target_group.create_dataset(
|
|
70
|
+
dataset_name, data=data, dtype=h5py.string_dtype()
|
|
71
|
+
)
|
|
72
|
+
else:
|
|
73
|
+
data_array = np.asarray(data)
|
|
74
|
+
|
|
75
|
+
if data_array.dtype == np.object_:
|
|
76
|
+
pickled_data = pickle.dumps(data)
|
|
77
|
+
target_group.create_dataset(
|
|
78
|
+
dataset_name, data=np.void(pickled_data)
|
|
79
|
+
)
|
|
80
|
+
elif data_array.ndim == 0:
|
|
81
|
+
target_group.create_dataset(dataset_name, data=data)
|
|
82
|
+
else:
|
|
83
|
+
target_group.create_dataset(
|
|
84
|
+
dataset_name, data=data, **kwargs
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
# def _save_hdf5(obj, spath, key=None, **kwargs):
|
|
89
|
+
# """
|
|
90
|
+
# Save a dictionary of arrays or a single array to an HDF5 file.
|
|
91
|
+
|
|
92
|
+
# Parameters
|
|
93
|
+
# ----------
|
|
94
|
+
# obj : dict or array-like
|
|
95
|
+
# Dictionary of arrays to save (keys will be dataset names) or
|
|
96
|
+
# a single array/data to save (will be saved as 'data').
|
|
97
|
+
# spath : str
|
|
98
|
+
# Path where the HDF5 file will be saved.
|
|
99
|
+
# key : str, optional
|
|
100
|
+
# Path/key within the HDF5 file where data will be saved.
|
|
101
|
+
# If None, saves to root.
|
|
102
|
+
# **kwargs : dict
|
|
103
|
+
# Additional keyword arguments passed to create_dataset.
|
|
104
|
+
# Common: compression='gzip', compression_opts=9, shuffle=True
|
|
105
|
+
|
|
106
|
+
# Returns
|
|
107
|
+
# -------
|
|
108
|
+
# None
|
|
109
|
+
# """
|
|
110
|
+
# import numpy as np
|
|
111
|
+
|
|
112
|
+
# # Convert single array to dict
|
|
113
|
+
# if not isinstance(obj, dict):
|
|
114
|
+
# obj = {'data': obj}
|
|
115
|
+
|
|
116
|
+
# # Set default compression if not specified
|
|
117
|
+
# if "compression" not in kwargs:
|
|
118
|
+
# kwargs["compression"] = "gzip"
|
|
119
|
+
|
|
120
|
+
# mode = "a" if key else "w"
|
|
121
|
+
|
|
122
|
+
# with h5py.File(spath, mode) as hf:
|
|
123
|
+
# if key:
|
|
124
|
+
# if key in hf:
|
|
125
|
+
# del hf[key]
|
|
126
|
+
# group = hf.create_group(key)
|
|
127
|
+
# else:
|
|
128
|
+
# group = hf
|
|
129
|
+
|
|
130
|
+
# for name, data in obj.items():
|
|
131
|
+
# try:
|
|
132
|
+
# # Check if data is scalar and remove incompatible options
|
|
133
|
+
# if np.isscalar(data) or (isinstance(data, np.ndarray) and data.ndim == 0):
|
|
134
|
+
# # Remove chunk/compression options for scalars
|
|
135
|
+
# scalar_kwargs = {k: v for k, v in kwargs.items()
|
|
136
|
+
# if k not in ['chunks', 'compression', 'compression_opts',
|
|
137
|
+
# 'shuffle', 'fletcher32', 'maxshape']}
|
|
138
|
+
# group.create_dataset(name, data=data, **scalar_kwargs)
|
|
139
|
+
# else:
|
|
140
|
+
# group.create_dataset(name, data=data, **kwargs)
|
|
141
|
+
# except TypeError as e:
|
|
142
|
+
# if "Object dtype" in str(
|
|
143
|
+
# e
|
|
144
|
+
# ) or "has no native HDF5 equivalent" in str(e):
|
|
145
|
+
# if isinstance(data, np.ndarray) and data.dtype == object:
|
|
146
|
+
# if all(isinstance(item, str) for item in data.flat):
|
|
147
|
+
# dt = h5py.string_dtype(encoding="utf-8")
|
|
148
|
+
# group.create_dataset(
|
|
149
|
+
# name, data=data.astype(dt), **kwargs
|
|
150
|
+
# )
|
|
151
|
+
# else:
|
|
152
|
+
# str_data = np.array(
|
|
153
|
+
# [str(item) for item in data.flat]
|
|
154
|
+
# ).reshape(data.shape)
|
|
155
|
+
# dt = h5py.string_dtype(encoding="utf-8")
|
|
156
|
+
# group.create_dataset(
|
|
157
|
+
# name, data=str_data, dtype=dt, **kwargs
|
|
158
|
+
# )
|
|
159
|
+
# else:
|
|
160
|
+
# group.attrs[name] = str(data)
|
|
161
|
+
# else:
|
|
162
|
+
# raise
|
|
163
|
+
|
|
164
|
+
# #!/usr/bin/env python3
|
|
165
|
+
# # -*- coding: utf-8 -*-
|
|
166
|
+
# # Timestamp: "2025-05-16 12:24:04 (ywatanabe)"
|
|
167
|
+
# # File: /data/gpfs/projects/punim2354/ywatanabe/scitex_repo/src/scitex/io/_save_modules/_hdf5.py
|
|
168
|
+
|
|
169
|
+
# import h5py
|
|
170
|
+
|
|
171
|
+
# def _save_hdf5(obj, spath, key=None, **kwargs):
|
|
172
|
+
# """
|
|
173
|
+
# Save a dictionary of arrays to an HDF5 file.
|
|
174
|
+
|
|
175
|
+
# Parameters
|
|
176
|
+
# ----------
|
|
177
|
+
# obj : dict
|
|
178
|
+
# Dictionary of arrays to save. Keys will be dataset names.
|
|
179
|
+
# spath : str
|
|
180
|
+
# Path where the HDF5 file will be saved.
|
|
181
|
+
# key : str, optional
|
|
182
|
+
# Path to the group within the HDF5 file. If None, saves to root.
|
|
183
|
+
# **kwargs : dict
|
|
184
|
+
# Additional keyword arguments passed to create_dataset.
|
|
185
|
+
|
|
186
|
+
# Returns
|
|
187
|
+
# -------
|
|
188
|
+
# None
|
|
189
|
+
# """
|
|
190
|
+
# import numpy as np
|
|
191
|
+
|
|
192
|
+
# name_list, obj_list = [], []
|
|
193
|
+
# for k, v in obj.items():
|
|
194
|
+
# name_list.append(k)
|
|
195
|
+
# obj_list.append(v)
|
|
196
|
+
|
|
197
|
+
# with h5py.File(spath, "w") as hf:
|
|
198
|
+
# # If key is specified, create/get the group
|
|
199
|
+
# if key:
|
|
200
|
+
# group = hf.require_group(key)
|
|
201
|
+
# else:
|
|
202
|
+
# group = hf
|
|
203
|
+
|
|
204
|
+
# for name, data in zip(name_list, obj_list):
|
|
205
|
+
# try:
|
|
206
|
+
# # Try to save directly
|
|
207
|
+
# group.create_dataset(name, data=data, **kwargs)
|
|
208
|
+
# except TypeError as e:
|
|
209
|
+
# if "Object dtype" in str(
|
|
210
|
+
# e
|
|
211
|
+
# ) or "has no native HDF5 equivalent" in str(e):
|
|
212
|
+
# # Handle object dtype by converting to appropriate format
|
|
213
|
+
# if isinstance(data, np.ndarray) and data.dtype == object:
|
|
214
|
+
# # Try to convert to string array
|
|
215
|
+
# try:
|
|
216
|
+
# # Check if all elements are strings
|
|
217
|
+
# if all(
|
|
218
|
+
# isinstance(item, str) for item in data.flat
|
|
219
|
+
# ):
|
|
220
|
+
# # Save as variable-length string
|
|
221
|
+
# dt = h5py.string_dtype(encoding="utf-8")
|
|
222
|
+
# group.create_dataset(
|
|
223
|
+
# name, data=data.astype(dt), **kwargs
|
|
224
|
+
# )
|
|
225
|
+
# else:
|
|
226
|
+
# # Convert to string representation
|
|
227
|
+
# str_data = np.array(
|
|
228
|
+
# [str(item) for item in data.flat]
|
|
229
|
+
# ).reshape(data.shape)
|
|
230
|
+
# dt = h5py.string_dtype(encoding="utf-8")
|
|
231
|
+
# group.create_dataset(
|
|
232
|
+
# name, data=str_data, dtype=dt, **kwargs
|
|
233
|
+
# )
|
|
234
|
+
# except Exception:
|
|
235
|
+
# # If conversion fails, save as attributes or skip
|
|
236
|
+
# group.attrs[name] = str(data)
|
|
237
|
+
# print(
|
|
238
|
+
# f"Warning: Dataset '{name}' saved as attribute due to incompatible dtype"
|
|
239
|
+
# )
|
|
240
|
+
# else:
|
|
241
|
+
# # For non-array objects, save as attribute
|
|
242
|
+
# group.attrs[name] = str(data)
|
|
243
|
+
# print(
|
|
244
|
+
# f"Warning: Dataset '{name}' saved as attribute due to incompatible type"
|
|
245
|
+
# )
|
|
246
|
+
# else:
|
|
247
|
+
# raise # Re-raise if it's a different error
|
|
248
|
+
|
|
249
|
+
# EOF
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-06-12 13:45:00 (ywatanabe)"
|
|
4
|
+
# File: /ssh:sp:/home/ywatanabe/proj/.claude-worktree/scitex_repo/src/scitex/io/_save_modules/_html.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "./src/scitex/io/_save_modules/_html.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
# ----------------------------------------
|
|
11
|
+
|
|
12
|
+
"""
|
|
13
|
+
HTML saving functionality for scitex.io.save
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
import plotly
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def save_html(obj, spath, **kwargs):
|
|
20
|
+
"""Handle HTML file saving (primarily for Plotly figures).
|
|
21
|
+
|
|
22
|
+
Parameters
|
|
23
|
+
----------
|
|
24
|
+
obj : plotly.graph_objs.Figure or str
|
|
25
|
+
Plotly figure object or HTML string to save
|
|
26
|
+
spath : str
|
|
27
|
+
Path where HTML file will be saved
|
|
28
|
+
**kwargs
|
|
29
|
+
Additional keyword arguments passed to plotly.io.write_html()
|
|
30
|
+
|
|
31
|
+
Notes
|
|
32
|
+
-----
|
|
33
|
+
- Primarily designed for saving Plotly interactive figures
|
|
34
|
+
- Can also save raw HTML strings
|
|
35
|
+
"""
|
|
36
|
+
if hasattr(obj, 'write_html'):
|
|
37
|
+
# Plotly figure object
|
|
38
|
+
obj.write_html(spath, **kwargs)
|
|
39
|
+
elif isinstance(obj, str):
|
|
40
|
+
# Raw HTML string
|
|
41
|
+
with open(spath, 'w') as f:
|
|
42
|
+
f.write(obj)
|
|
43
|
+
else:
|
|
44
|
+
# Try to convert to HTML using plotly
|
|
45
|
+
plotly.io.write_html(obj, spath, **kwargs)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
# EOF
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-18 14:52:34 (ywatanabe)"
|
|
4
|
+
# File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/io/_save_modules/_save_image.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
__FILE__ = (
|
|
8
|
+
"./src/scitex/io/_save_modules/_save_image.py"
|
|
9
|
+
)
|
|
10
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
11
|
+
# ----------------------------------------
|
|
12
|
+
|
|
13
|
+
import io as _io
|
|
14
|
+
|
|
15
|
+
import plotly
|
|
16
|
+
from PIL import Image
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def save_image(obj, spath, **kwargs):
|
|
20
|
+
# png
|
|
21
|
+
if spath.endswith(".png"):
|
|
22
|
+
# plotly
|
|
23
|
+
if isinstance(obj, plotly.graph_objs.Figure):
|
|
24
|
+
obj.write_image(file=spath, format="png")
|
|
25
|
+
# PIL image
|
|
26
|
+
elif isinstance(obj, Image.Image):
|
|
27
|
+
obj.save(spath)
|
|
28
|
+
# matplotlib
|
|
29
|
+
else:
|
|
30
|
+
try:
|
|
31
|
+
obj.savefig(spath)
|
|
32
|
+
except:
|
|
33
|
+
obj.figure.savefig(spath)
|
|
34
|
+
del obj
|
|
35
|
+
|
|
36
|
+
# tiff
|
|
37
|
+
elif spath.endswith(".tiff") or spath.endswith(".tif"):
|
|
38
|
+
# PIL image
|
|
39
|
+
if isinstance(obj, Image.Image):
|
|
40
|
+
obj.save(spath)
|
|
41
|
+
# matplotlib
|
|
42
|
+
else:
|
|
43
|
+
try:
|
|
44
|
+
obj.savefig(spath, dpi=300, format="tiff")
|
|
45
|
+
except:
|
|
46
|
+
obj.figure.savefig(spath, dpi=300, format="tiff")
|
|
47
|
+
|
|
48
|
+
del obj
|
|
49
|
+
|
|
50
|
+
# jpeg
|
|
51
|
+
elif spath.endswith(".jpeg") or spath.endswith(".jpg"):
|
|
52
|
+
buf = _io.BytesIO()
|
|
53
|
+
|
|
54
|
+
# plotly
|
|
55
|
+
if isinstance(obj, plotly.graph_objs.Figure):
|
|
56
|
+
obj.write_image(buf, format="png")
|
|
57
|
+
buf.seek(0)
|
|
58
|
+
img = Image.open(buf)
|
|
59
|
+
img.convert("RGB").save(spath, "JPEG")
|
|
60
|
+
buf.close()
|
|
61
|
+
|
|
62
|
+
# PIL image
|
|
63
|
+
elif isinstance(obj, Image.Image):
|
|
64
|
+
obj.save(spath)
|
|
65
|
+
|
|
66
|
+
# matplotlib
|
|
67
|
+
else:
|
|
68
|
+
try:
|
|
69
|
+
obj.savefig(buf, format="png")
|
|
70
|
+
except:
|
|
71
|
+
obj.figure.savefig(buf, format="png")
|
|
72
|
+
|
|
73
|
+
buf.seek(0)
|
|
74
|
+
img = Image.open(buf)
|
|
75
|
+
img.convert("RGB").save(spath, "JPEG")
|
|
76
|
+
buf.close()
|
|
77
|
+
del obj
|
|
78
|
+
|
|
79
|
+
# GIF
|
|
80
|
+
elif spath.endswith(".gif"):
|
|
81
|
+
# PIL image
|
|
82
|
+
if isinstance(obj, Image.Image):
|
|
83
|
+
obj.save(spath, save_all=True)
|
|
84
|
+
# plotly - convert via PNG first
|
|
85
|
+
elif isinstance(obj, plotly.graph_objs.Figure):
|
|
86
|
+
buf = _io.BytesIO()
|
|
87
|
+
obj.write_image(buf, format="png")
|
|
88
|
+
buf.seek(0)
|
|
89
|
+
img = Image.open(buf)
|
|
90
|
+
img.save(spath, "GIF")
|
|
91
|
+
buf.close()
|
|
92
|
+
# matplotlib
|
|
93
|
+
else:
|
|
94
|
+
buf = _io.BytesIO()
|
|
95
|
+
try:
|
|
96
|
+
obj.savefig(buf, format="png")
|
|
97
|
+
except:
|
|
98
|
+
obj.figure.savefig(buf, format="png")
|
|
99
|
+
buf.seek(0)
|
|
100
|
+
img = Image.open(buf)
|
|
101
|
+
img.save(spath, "GIF")
|
|
102
|
+
buf.close()
|
|
103
|
+
del obj
|
|
104
|
+
|
|
105
|
+
# SVG
|
|
106
|
+
elif spath.endswith(".svg"):
|
|
107
|
+
# Plotly
|
|
108
|
+
if isinstance(obj, plotly.graph_objs.Figure):
|
|
109
|
+
obj.write_image(file=spath, format="svg")
|
|
110
|
+
# Matplotlib
|
|
111
|
+
else:
|
|
112
|
+
try:
|
|
113
|
+
obj.savefig(spath, format="svg")
|
|
114
|
+
except AttributeError:
|
|
115
|
+
obj.figure.savefig(spath, format="svg")
|
|
116
|
+
del obj
|
|
117
|
+
|
|
118
|
+
# PDF
|
|
119
|
+
elif spath.endswith(".pdf"):
|
|
120
|
+
# Plotly
|
|
121
|
+
if isinstance(obj, plotly.graph_objs.Figure):
|
|
122
|
+
obj.write_image(file=spath, format="pdf")
|
|
123
|
+
# PIL Image - convert to PDF
|
|
124
|
+
elif isinstance(obj, Image.Image):
|
|
125
|
+
# Convert RGBA to RGB if needed
|
|
126
|
+
if obj.mode == 'RGBA':
|
|
127
|
+
rgb_img = Image.new('RGB', obj.size, (255, 255, 255))
|
|
128
|
+
rgb_img.paste(obj, mask=obj.split()[3])
|
|
129
|
+
rgb_img.save(spath, "PDF")
|
|
130
|
+
else:
|
|
131
|
+
obj.save(spath, "PDF")
|
|
132
|
+
# Matplotlib
|
|
133
|
+
else:
|
|
134
|
+
try:
|
|
135
|
+
obj.savefig(spath, format="pdf")
|
|
136
|
+
except AttributeError:
|
|
137
|
+
obj.figure.savefig(spath, format="pdf")
|
|
138
|
+
del obj
|
|
139
|
+
|
|
140
|
+
# EOF
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-16 12:22:56 (ywatanabe)"
|
|
4
|
+
# File: /data/gpfs/projects/punim2354/ywatanabe/scitex_repo/src/scitex/io/_save_modules/_joblib.py
|
|
5
|
+
|
|
6
|
+
import joblib
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def _save_joblib(obj, spath):
|
|
10
|
+
"""
|
|
11
|
+
Save an object using joblib serialization.
|
|
12
|
+
|
|
13
|
+
Parameters
|
|
14
|
+
----------
|
|
15
|
+
obj : Any
|
|
16
|
+
Object to serialize.
|
|
17
|
+
spath : str
|
|
18
|
+
Path where the joblib file will be saved.
|
|
19
|
+
|
|
20
|
+
Returns
|
|
21
|
+
-------
|
|
22
|
+
None
|
|
23
|
+
"""
|
|
24
|
+
with open(spath, "wb") as s:
|
|
25
|
+
joblib.dump(obj, s, compress=3)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-16 12:27:18 (ywatanabe)"
|
|
4
|
+
# File: /data/gpfs/projects/punim2354/ywatanabe/scitex_repo/src/scitex/io/_save_modules/_json.py
|
|
5
|
+
|
|
6
|
+
import json
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def _save_json(obj, spath):
|
|
10
|
+
"""
|
|
11
|
+
Save a Python object as a JSON file.
|
|
12
|
+
|
|
13
|
+
Parameters
|
|
14
|
+
----------
|
|
15
|
+
obj : dict or list
|
|
16
|
+
The object to serialize to JSON.
|
|
17
|
+
spath : str
|
|
18
|
+
Path where the JSON file will be saved.
|
|
19
|
+
|
|
20
|
+
Returns
|
|
21
|
+
-------
|
|
22
|
+
None
|
|
23
|
+
"""
|
|
24
|
+
with open(spath, "w") as f:
|
|
25
|
+
json.dump(obj, f, indent=4)
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-18 14:52:59 (ywatanabe)"
|
|
4
|
+
# File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/io/_save_modules/_save_listed_dfs_as_csv.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
__FILE__ = (
|
|
8
|
+
"./src/scitex/io/_save_modules/_save_listed_dfs_as_csv.py"
|
|
9
|
+
)
|
|
10
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
11
|
+
# ----------------------------------------
|
|
12
|
+
# Time-stamp: "2024-11-02 21:28:56 (ywatanabe)"
|
|
13
|
+
|
|
14
|
+
import csv
|
|
15
|
+
|
|
16
|
+
import numpy as np
|
|
17
|
+
|
|
18
|
+
from .._mv_to_tmp import _mv_to_tmp
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def _save_listed_dfs_as_csv(
|
|
23
|
+
listed_dfs,
|
|
24
|
+
spath_csv,
|
|
25
|
+
indi_suffix=None,
|
|
26
|
+
overwrite=False,
|
|
27
|
+
verbose=False,
|
|
28
|
+
):
|
|
29
|
+
"""listed_dfs:
|
|
30
|
+
[df1, df2, df3, ..., dfN]. They will be written vertically in the order.
|
|
31
|
+
|
|
32
|
+
spath_csv:
|
|
33
|
+
/hoge/fuga/foo.csv
|
|
34
|
+
|
|
35
|
+
indi_suffix:
|
|
36
|
+
At the left top cell on the output csv file, '{}'.format(indi_suffix[i])
|
|
37
|
+
will be added, where i is the index of the df.On the other hand,
|
|
38
|
+
when indi_suffix=None is passed, only '{}'.format(i) will be added.
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
if overwrite == True:
|
|
42
|
+
_mv_to_tmp(spath_csv, L=2)
|
|
43
|
+
|
|
44
|
+
indi_suffix = np.arange(len(listed_dfs)) if indi_suffix is None else indi_suffix
|
|
45
|
+
for i, df in enumerate(listed_dfs):
|
|
46
|
+
with open(spath_csv, mode="a") as f:
|
|
47
|
+
f_writer = csv.writer(f)
|
|
48
|
+
i_suffix = indi_suffix[i]
|
|
49
|
+
f_writer.writerow(["{}".format(indi_suffix[i])])
|
|
50
|
+
df.to_csv(spath_csv, mode="a", index=True, header=True)
|
|
51
|
+
with open(spath_csv, mode="a") as f:
|
|
52
|
+
f_writer = csv.writer(f)
|
|
53
|
+
f_writer.writerow([""])
|
|
54
|
+
if verbose:
|
|
55
|
+
print("Saved to: {}".format(spath_csv))
|
|
56
|
+
|
|
57
|
+
# EOF
|