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,66 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-12-12 06:50:19 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/io/_load_modules/_catboost.py
|
|
5
|
+
|
|
6
|
+
from typing import Union
|
|
7
|
+
|
|
8
|
+
try:
|
|
9
|
+
from catboost import CatBoostClassifier, CatBoostRegressor
|
|
10
|
+
CATBOOST_AVAILABLE = True
|
|
11
|
+
except ImportError:
|
|
12
|
+
CATBOOST_AVAILABLE = False
|
|
13
|
+
# Create placeholder classes for testing
|
|
14
|
+
class CatBoostClassifier:
|
|
15
|
+
pass
|
|
16
|
+
class CatBoostRegressor:
|
|
17
|
+
pass
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def _load_catboost(
|
|
21
|
+
lpath: str, **kwargs
|
|
22
|
+
) -> Union["CatBoostClassifier", "CatBoostRegressor"]:
|
|
23
|
+
"""
|
|
24
|
+
Loads a CatBoost model from a file.
|
|
25
|
+
|
|
26
|
+
Parameters
|
|
27
|
+
----------
|
|
28
|
+
lpath : str
|
|
29
|
+
Path to the CatBoost model file (.cbm extension)
|
|
30
|
+
**kwargs : dict
|
|
31
|
+
Additional keyword arguments passed to load_model method
|
|
32
|
+
|
|
33
|
+
Returns
|
|
34
|
+
-------
|
|
35
|
+
Union[CatBoostClassifier, CatBoostRegressor]
|
|
36
|
+
Loaded CatBoost model object
|
|
37
|
+
|
|
38
|
+
Raises
|
|
39
|
+
------
|
|
40
|
+
ValueError
|
|
41
|
+
If file extension is not .cbm
|
|
42
|
+
FileNotFoundError
|
|
43
|
+
If model file does not exist
|
|
44
|
+
ImportError
|
|
45
|
+
If CatBoost is not installed
|
|
46
|
+
|
|
47
|
+
Examples
|
|
48
|
+
--------
|
|
49
|
+
>>> model = _load_catboost('model.cbm')
|
|
50
|
+
>>> predictions = model.predict(X_test)
|
|
51
|
+
"""
|
|
52
|
+
if not CATBOOST_AVAILABLE:
|
|
53
|
+
raise ImportError("CatBoost is not installed. Please install with: pip install catboost")
|
|
54
|
+
|
|
55
|
+
if not (lpath.endswith(".cbm") or lpath.endswith(".CBM")):
|
|
56
|
+
raise ValueError("File must have .cbm extension")
|
|
57
|
+
|
|
58
|
+
try:
|
|
59
|
+
model = CatBoostClassifier().load_model(lpath, **kwargs)
|
|
60
|
+
except:
|
|
61
|
+
model = CatBoostRegressor().load_model(lpath, **kwargs)
|
|
62
|
+
|
|
63
|
+
return model
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
# EOF
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-14 07:51:45 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/io/_load_modules/_con.py
|
|
5
|
+
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
import mne
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def _load_con(lpath: str, **kwargs) -> Any:
|
|
12
|
+
if not lpath.endswith(".con"):
|
|
13
|
+
raise ValueError("File must have .con extension")
|
|
14
|
+
obj = mne.io.read_raw_fif(lpath, preload=True, **kwargs)
|
|
15
|
+
obj = obj.to_data_frame()
|
|
16
|
+
obj["samp_rate"] = obj.info["sfreq"]
|
|
17
|
+
return obj
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
# EOF
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-25 11:50:05 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/io/_load_modules/_db.py
|
|
5
|
+
|
|
6
|
+
THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/io/_load_modules/_db.py"
|
|
7
|
+
|
|
8
|
+
from typing import Any
|
|
9
|
+
|
|
10
|
+
from ...db._SQLite3 import SQLite3
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _load_sqlite3db(lpath: str, use_temp=False) -> Any:
|
|
14
|
+
if not lpath.endswith(".db"):
|
|
15
|
+
raise ValueError("File must have .db extension")
|
|
16
|
+
try:
|
|
17
|
+
obj = SQLite3(lpath, use_temp=use_temp)
|
|
18
|
+
|
|
19
|
+
return obj
|
|
20
|
+
except Exception as e:
|
|
21
|
+
raise ValueError(str(e))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# EOF
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-14 07:55:35 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/io/_load_modules/_docx.py
|
|
5
|
+
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def _load_docx(lpath: str, **kwargs) -> Any:
|
|
10
|
+
"""
|
|
11
|
+
Load and extract text content from a .docx file.
|
|
12
|
+
|
|
13
|
+
Parameters:
|
|
14
|
+
-----------
|
|
15
|
+
lpath : str
|
|
16
|
+
The path to the .docx file.
|
|
17
|
+
|
|
18
|
+
Returns:
|
|
19
|
+
--------
|
|
20
|
+
str
|
|
21
|
+
The extracted text content from the .docx file.
|
|
22
|
+
|
|
23
|
+
Raises:
|
|
24
|
+
-------
|
|
25
|
+
FileNotFoundError
|
|
26
|
+
If the specified file does not exist.
|
|
27
|
+
docx.opc.exceptions.PackageNotFoundError
|
|
28
|
+
If the file is not a valid .docx file.
|
|
29
|
+
"""
|
|
30
|
+
if not lpath.endswith(".docx"):
|
|
31
|
+
raise ValueError("File must have .docx extension")
|
|
32
|
+
|
|
33
|
+
from docx import Document
|
|
34
|
+
|
|
35
|
+
doc = Document(lpath)
|
|
36
|
+
full_text = []
|
|
37
|
+
for para in doc.paragraphs:
|
|
38
|
+
full_text.append(para.text)
|
|
39
|
+
return "".join(full_text)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
# EOF
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-14 07:56:27 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/io/_load_modules/_eeg.py
|
|
5
|
+
|
|
6
|
+
import os
|
|
7
|
+
import warnings
|
|
8
|
+
from typing import Any
|
|
9
|
+
|
|
10
|
+
import mne
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _load_eeg_data(path: str, **kwargs) -> Any:
|
|
14
|
+
"""
|
|
15
|
+
Load EEG data based on file extension and associated files using MNE-Python.
|
|
16
|
+
|
|
17
|
+
This function supports various EEG file formats including BrainVision, EDF, BDF, GDF, CNT, EGI, and SET.
|
|
18
|
+
It also handles special cases for .eeg files (BrainVision and Nihon Koden).
|
|
19
|
+
|
|
20
|
+
Parameters:
|
|
21
|
+
-----------
|
|
22
|
+
lpath : str
|
|
23
|
+
The path to the EEG file to be loaded.
|
|
24
|
+
**kwargs : dict
|
|
25
|
+
Additional keyword arguments to be passed to the specific MNE loading function.
|
|
26
|
+
|
|
27
|
+
Returns:
|
|
28
|
+
--------
|
|
29
|
+
raw : mne.io.Raw
|
|
30
|
+
The loaded raw EEG data.
|
|
31
|
+
|
|
32
|
+
Raises:
|
|
33
|
+
-------
|
|
34
|
+
ValueError
|
|
35
|
+
If the file extension is not supported.
|
|
36
|
+
|
|
37
|
+
Notes:
|
|
38
|
+
------
|
|
39
|
+
This function uses MNE-Python to load the EEG data. It automatically detects the file format
|
|
40
|
+
based on the file extension and uses the appropriate MNE function to load the data.
|
|
41
|
+
"""
|
|
42
|
+
# Get the file extension
|
|
43
|
+
extension = lpath.split(".")[-1]
|
|
44
|
+
|
|
45
|
+
allowed_extensions = [
|
|
46
|
+
".vhdr",
|
|
47
|
+
".vmrk",
|
|
48
|
+
".edf",
|
|
49
|
+
".bdf",
|
|
50
|
+
".gdf",
|
|
51
|
+
".cnt",
|
|
52
|
+
".egi",
|
|
53
|
+
".eeg",
|
|
54
|
+
".set",
|
|
55
|
+
]
|
|
56
|
+
|
|
57
|
+
if extension not in allowed_extensions:
|
|
58
|
+
raise ValueError(
|
|
59
|
+
f"File must have one of these extensions: {', '.join(allowed_extensions)}"
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
with warnings.catch_warnings():
|
|
63
|
+
warnings.simplefilter("ignore", RuntimeWarning)
|
|
64
|
+
|
|
65
|
+
# Load the data based on the file extension
|
|
66
|
+
if extension in ["vhdr", "vmrk"]:
|
|
67
|
+
# Load BrainVision data
|
|
68
|
+
raw = mne.io.read_raw_brainvision(lpath, preload=True, **kwargs)
|
|
69
|
+
elif extension == "edf":
|
|
70
|
+
# Load European data format
|
|
71
|
+
raw = mne.io.read_raw_edf(lpath, preload=True, **kwargs)
|
|
72
|
+
elif extension == "bdf":
|
|
73
|
+
# Load BioSemi data format
|
|
74
|
+
raw = mne.io.read_raw_bdf(lpath, preload=True, **kwargs)
|
|
75
|
+
elif extension == "gdf":
|
|
76
|
+
# Load Gen data format
|
|
77
|
+
raw = mne.io.read_raw_gdf(lpath, preload=True, **kwargs)
|
|
78
|
+
elif extension == "cnt":
|
|
79
|
+
# Load Neuroscan CNT data
|
|
80
|
+
raw = mne.io.read_raw_cnt(lpath, preload=True, **kwargs)
|
|
81
|
+
elif extension == "egi":
|
|
82
|
+
# Load EGI simple binary data
|
|
83
|
+
raw = mne.io.read_raw_egi(lpath, preload=True, **kwargs)
|
|
84
|
+
elif extension == "set":
|
|
85
|
+
# ???
|
|
86
|
+
raw = mne.io.read_raw(lpath, preload=True, **kwargs)
|
|
87
|
+
elif extension == "eeg":
|
|
88
|
+
is_BrainVision = any(
|
|
89
|
+
os.path.isfile(lpath.replace(".eeg", ext)) for ext in [".vhdr", ".vmrk"]
|
|
90
|
+
)
|
|
91
|
+
is_NihonKoden = any(
|
|
92
|
+
os.path.isfile(lpath.replace(".eeg", ext))
|
|
93
|
+
for ext in [".21e", ".pnt", ".log"]
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
# Brain Vision
|
|
97
|
+
if is_BrainVision:
|
|
98
|
+
lpath_v = lpath.replace(".eeg", ".vhdr")
|
|
99
|
+
raw = mne.io.read_raw_brainvision(lpath_v, preload=True, **kwargs)
|
|
100
|
+
# Nihon Koden
|
|
101
|
+
if is_NihonKoden:
|
|
102
|
+
# raw = mne.io.read_raw_nihon(lpath, preload=True, **kwargs)
|
|
103
|
+
raw = mne.io.read_raw(lpath, preload=True, **kwargs)
|
|
104
|
+
else:
|
|
105
|
+
raise ValueError(f"Unsupported file extension: {extension}")
|
|
106
|
+
|
|
107
|
+
return raw
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
# EOF
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-06-16 17:40:55 (ywatanabe)"
|
|
4
|
+
# File: /ssh:sp:/home/ywatanabe/proj/SciTeX-Code/src/scitex/io/_load_modules/_hdf5.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
__FILE__ = (
|
|
8
|
+
"./src/scitex/io/_load_modules/_hdf5.py"
|
|
9
|
+
)
|
|
10
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
11
|
+
# ----------------------------------------
|
|
12
|
+
|
|
13
|
+
import warnings
|
|
14
|
+
from typing import Any
|
|
15
|
+
|
|
16
|
+
import h5py
|
|
17
|
+
import numpy as np
|
|
18
|
+
|
|
19
|
+
# Time-stamp: "2024-11-14 07:55:37 (ywatanabe)"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _load_group(group):
|
|
25
|
+
"""Recursively load an HDF5 group."""
|
|
26
|
+
obj = {}
|
|
27
|
+
for key in group.keys():
|
|
28
|
+
if isinstance(group[key], h5py.Group):
|
|
29
|
+
# Recursively load subgroups
|
|
30
|
+
obj[key] = _load_group(group[key])
|
|
31
|
+
else:
|
|
32
|
+
# Load dataset
|
|
33
|
+
dataset = group[key]
|
|
34
|
+
# Check if it's a scalar dataset
|
|
35
|
+
if dataset.shape == ():
|
|
36
|
+
data = dataset[()]
|
|
37
|
+
else:
|
|
38
|
+
data = dataset[:]
|
|
39
|
+
|
|
40
|
+
# Decode bytes to string if needed
|
|
41
|
+
if isinstance(data, bytes):
|
|
42
|
+
obj[key] = data.decode("utf-8")
|
|
43
|
+
elif isinstance(data, np.void):
|
|
44
|
+
# Handle pickled data
|
|
45
|
+
import pickle
|
|
46
|
+
|
|
47
|
+
obj[key] = pickle.loads(data.tobytes())
|
|
48
|
+
else:
|
|
49
|
+
obj[key] = data
|
|
50
|
+
# Load attributes
|
|
51
|
+
for key in group.attrs.keys():
|
|
52
|
+
obj[key] = group.attrs[key]
|
|
53
|
+
return obj
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def _load_hdf5(lpath: str, key: str = None, **kwargs) -> Any:
|
|
57
|
+
"""Load HDF5 file with automatic group/root switching."""
|
|
58
|
+
try:
|
|
59
|
+
with h5py.File(lpath, "r") as hf:
|
|
60
|
+
if key:
|
|
61
|
+
if key not in hf:
|
|
62
|
+
return None
|
|
63
|
+
target = hf[key]
|
|
64
|
+
else:
|
|
65
|
+
target = hf
|
|
66
|
+
|
|
67
|
+
obj = {}
|
|
68
|
+
for key_name in target.keys():
|
|
69
|
+
try:
|
|
70
|
+
if isinstance(target[key_name], h5py.Group):
|
|
71
|
+
obj[key_name] = _load_group(target[key_name])
|
|
72
|
+
else:
|
|
73
|
+
dataset = target[key_name]
|
|
74
|
+
if dataset.shape == ():
|
|
75
|
+
data = dataset[()]
|
|
76
|
+
else:
|
|
77
|
+
data = dataset[:]
|
|
78
|
+
|
|
79
|
+
if isinstance(data, bytes):
|
|
80
|
+
obj[key_name] = data.decode("utf-8")
|
|
81
|
+
elif isinstance(data, np.void):
|
|
82
|
+
import pickle
|
|
83
|
+
|
|
84
|
+
obj[key_name] = pickle.loads(data.tobytes())
|
|
85
|
+
else:
|
|
86
|
+
obj[key_name] = data
|
|
87
|
+
except (RuntimeError, OSError) as e:
|
|
88
|
+
print(f"Warning: Could not load key '{key_name}': {e}")
|
|
89
|
+
continue
|
|
90
|
+
|
|
91
|
+
for attr_name in target.attrs.keys():
|
|
92
|
+
obj[attr_name] = target.attrs[attr_name]
|
|
93
|
+
return obj
|
|
94
|
+
|
|
95
|
+
except (RuntimeError, OSError) as e:
|
|
96
|
+
key_warning_str = f" with {key}" if key else ""
|
|
97
|
+
warnings.warn(f"Error loading {lpath}{key_warning_str}:\n{e}")
|
|
98
|
+
return None
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
# def _load_hdf5(lpath: str, key: str = None, **kwargs) -> Any:
|
|
102
|
+
# """Load HDF5 file with automatic group/root switching."""
|
|
103
|
+
# with h5py.File(lpath, "r") as hf:
|
|
104
|
+
# if key:
|
|
105
|
+
# if key not in hf:
|
|
106
|
+
# return None
|
|
107
|
+
# target = hf[key]
|
|
108
|
+
# else:
|
|
109
|
+
# target = hf
|
|
110
|
+
|
|
111
|
+
# obj = {}
|
|
112
|
+
# for key in target.keys():
|
|
113
|
+
# if isinstance(target[key], h5py.Group):
|
|
114
|
+
# # Recursively load groups
|
|
115
|
+
# obj[key] = _load_group(target[key])
|
|
116
|
+
# else:
|
|
117
|
+
# # Load dataset
|
|
118
|
+
# dataset = target[key]
|
|
119
|
+
# # Check if it's a scalar dataset
|
|
120
|
+
# if dataset.shape == ():
|
|
121
|
+
# data = dataset[()]
|
|
122
|
+
# else:
|
|
123
|
+
# data = dataset[:]
|
|
124
|
+
|
|
125
|
+
# # Decode bytes to string if needed
|
|
126
|
+
# if isinstance(data, bytes):
|
|
127
|
+
# obj[key] = data.decode("utf-8")
|
|
128
|
+
# elif isinstance(data, np.void):
|
|
129
|
+
# # Handle pickled data
|
|
130
|
+
# import pickle
|
|
131
|
+
|
|
132
|
+
# obj[key] = pickle.loads(data.tobytes())
|
|
133
|
+
# else:
|
|
134
|
+
# obj[key] = data
|
|
135
|
+
# for key in target.attrs.keys():
|
|
136
|
+
# obj[key] = target.attrs[key]
|
|
137
|
+
# return obj
|
|
138
|
+
|
|
139
|
+
# def _load_hdf5(lpath: str, **kwargs) -> Any:
|
|
140
|
+
# """Load HDF5 file."""
|
|
141
|
+
# if not (lpath.endswith(".hdf5") or lpath.endswith(".h5")):
|
|
142
|
+
# raise ValueError("File must have .hdf5 or .h5 extension")
|
|
143
|
+
|
|
144
|
+
# def load_item(item):
|
|
145
|
+
# """Recursively load items from HDF5."""
|
|
146
|
+
# if isinstance(item, h5py.Group):
|
|
147
|
+
# # Load groups as nested dicts
|
|
148
|
+
# result = {}
|
|
149
|
+
# for key in item.keys():
|
|
150
|
+
# result[key] = load_item(item[key])
|
|
151
|
+
# return result
|
|
152
|
+
# elif isinstance(item, h5py.Dataset):
|
|
153
|
+
# # Load datasets
|
|
154
|
+
# data = item[()]
|
|
155
|
+
# # Check if it's a pickled object
|
|
156
|
+
# if isinstance(data, np.void):
|
|
157
|
+
# import pickle
|
|
158
|
+
|
|
159
|
+
# return pickle.loads(data.tobytes())
|
|
160
|
+
# # Convert bytes to string
|
|
161
|
+
# elif isinstance(data, bytes):
|
|
162
|
+
# return data.decode("utf-8")
|
|
163
|
+
# # Convert numpy scalars to Python types
|
|
164
|
+
# elif isinstance(data, np.integer):
|
|
165
|
+
# return int(data)
|
|
166
|
+
# elif isinstance(data, np.floating):
|
|
167
|
+
# return float(data)
|
|
168
|
+
# elif isinstance(data, np.bool_):
|
|
169
|
+
# return bool(data)
|
|
170
|
+
# else:
|
|
171
|
+
# return data
|
|
172
|
+
# else:
|
|
173
|
+
# return item
|
|
174
|
+
|
|
175
|
+
# with h5py.File(lpath, "r") as hf:
|
|
176
|
+
# return load_item(hf)
|
|
177
|
+
|
|
178
|
+
# def _load_hdf5_group(lpath: str, key: str = None, **kwargs) -> Any:
|
|
179
|
+
# """Load specific group from HDF5 file."""
|
|
180
|
+
# with h5py.File(lpath, "r") as hf:
|
|
181
|
+
# if key:
|
|
182
|
+
# if key not in hf:
|
|
183
|
+
# return None
|
|
184
|
+
# group = hf[key]
|
|
185
|
+
# result = {}
|
|
186
|
+
# for key in group.keys():
|
|
187
|
+
# result[key] = group[key][:]
|
|
188
|
+
# for key in group.attrs.keys():
|
|
189
|
+
# result[key] = group.attrs[key]
|
|
190
|
+
# return result
|
|
191
|
+
# else:
|
|
192
|
+
# return _load_hdf5(lpath, **kwargs)
|
|
193
|
+
|
|
194
|
+
# # EOF
|
|
195
|
+
|
|
196
|
+
# EOF
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-14 07:55:38 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/io/_load_modules/_image.py
|
|
5
|
+
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
from PIL import Image
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def _load_image(lpath: str, **kwargs) -> Any:
|
|
12
|
+
"""Load image file."""
|
|
13
|
+
supported_exts = [".jpg", ".jpeg", ".png", ".tiff", ".tif"]
|
|
14
|
+
if not any(lpath.lower().endswith(ext) for ext in supported_exts):
|
|
15
|
+
raise ValueError("Unsupported image format")
|
|
16
|
+
return Image.open(lpath, **kwargs)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
# EOF
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-14 07:55:39 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/io/_load_modules/_joblib.py
|
|
5
|
+
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
import joblib
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def _load_joblib(lpath: str, **kwargs) -> Any:
|
|
12
|
+
"""Load joblib file."""
|
|
13
|
+
if not lpath.endswith(".joblib"):
|
|
14
|
+
raise ValueError("File must have .joblib extension")
|
|
15
|
+
with open(lpath, "rb") as f:
|
|
16
|
+
return joblib.load(f, **kwargs)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
# EOF
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-14 07:55:40 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/io/_load_modules/_json.py
|
|
5
|
+
|
|
6
|
+
import json
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def _load_json(lpath: str, **kwargs) -> Any:
|
|
11
|
+
"""Load JSON file."""
|
|
12
|
+
if not lpath.endswith(".json"):
|
|
13
|
+
raise ValueError("File must have .json extension")
|
|
14
|
+
with open(lpath, "r") as f:
|
|
15
|
+
return json.load(f)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
# EOF
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-14 07:55:42 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/io/_load_modules/_markdown.py
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def _load_markdown(lpath_md, style="plain_text", **kwargs):
|
|
8
|
+
"""
|
|
9
|
+
Load and convert Markdown content from a file.
|
|
10
|
+
|
|
11
|
+
This function reads a Markdown file and converts it to either HTML or plain text format.
|
|
12
|
+
|
|
13
|
+
Parameters:
|
|
14
|
+
-----------
|
|
15
|
+
lpath_md : str
|
|
16
|
+
The path to the Markdown file to be loaded.
|
|
17
|
+
style : str, optional
|
|
18
|
+
The output style of the converted content.
|
|
19
|
+
Options are "html" or "plain_text" (default).
|
|
20
|
+
|
|
21
|
+
Returns:
|
|
22
|
+
--------
|
|
23
|
+
str
|
|
24
|
+
The converted content of the Markdown file, either as HTML or plain text.
|
|
25
|
+
|
|
26
|
+
Raises:
|
|
27
|
+
-------
|
|
28
|
+
FileNotFoundError
|
|
29
|
+
If the specified file does not exist.
|
|
30
|
+
IOError
|
|
31
|
+
If there's an error reading the file.
|
|
32
|
+
ValueError
|
|
33
|
+
If an invalid style option is provided.
|
|
34
|
+
|
|
35
|
+
Notes:
|
|
36
|
+
------
|
|
37
|
+
This function uses the 'markdown' library to convert Markdown to HTML,
|
|
38
|
+
and 'html2text' to convert HTML to plain text when necessary.
|
|
39
|
+
"""
|
|
40
|
+
import html2text
|
|
41
|
+
import markdown
|
|
42
|
+
|
|
43
|
+
# Load Markdown content from a file
|
|
44
|
+
with open(lpath_md, "r") as file:
|
|
45
|
+
markdown_content = file.read()
|
|
46
|
+
|
|
47
|
+
# Convert Markdown to HTML
|
|
48
|
+
html_content = markdown.markdown(markdown_content)
|
|
49
|
+
if style == "html":
|
|
50
|
+
return html_content
|
|
51
|
+
elif style == "plain_text":
|
|
52
|
+
text_maker = html2text.HTML2Text()
|
|
53
|
+
text_maker.ignore_links = True
|
|
54
|
+
text_maker.bypass_tables = False
|
|
55
|
+
plain_text = text_maker.handle(html_content)
|
|
56
|
+
return plain_text
|
|
57
|
+
else:
|
|
58
|
+
raise ValueError("Invalid style option. Choose 'html' or 'plain_text'.")
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def load_markdown(lpath_md, style="plain_text"):
|
|
62
|
+
"""
|
|
63
|
+
Load and convert a Markdown file to either HTML or plain text.
|
|
64
|
+
|
|
65
|
+
Parameters:
|
|
66
|
+
-----------
|
|
67
|
+
lpath_md : str
|
|
68
|
+
The path to the Markdown file.
|
|
69
|
+
style : str, optional
|
|
70
|
+
The output style, either "html" or "plain_text" (default).
|
|
71
|
+
|
|
72
|
+
Returns:
|
|
73
|
+
--------
|
|
74
|
+
str
|
|
75
|
+
The converted content of the Markdown file.
|
|
76
|
+
"""
|
|
77
|
+
import html2text
|
|
78
|
+
import markdown
|
|
79
|
+
|
|
80
|
+
# Load Markdown content from a file
|
|
81
|
+
with open(lpath_md, "r") as file:
|
|
82
|
+
markdown_content = file.read()
|
|
83
|
+
|
|
84
|
+
# Convert Markdown to HTML
|
|
85
|
+
html_content = markdown.markdown(markdown_content)
|
|
86
|
+
if style == "html":
|
|
87
|
+
return html_content
|
|
88
|
+
|
|
89
|
+
elif style == "plain_text":
|
|
90
|
+
text_maker = html2text.HTML2Text()
|
|
91
|
+
text_maker.ignore_links = True
|
|
92
|
+
text_maker.bypass_tables = False
|
|
93
|
+
plain_text = text_maker.handle(html_content)
|
|
94
|
+
|
|
95
|
+
return plain_text
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
# def _load_markdown(lpath):
|
|
99
|
+
# md_text = StringIO(lpath.read().decode("utf-8"))
|
|
100
|
+
# html = markdown.markdown(md_text.read())
|
|
101
|
+
# return html
|
|
102
|
+
|
|
103
|
+
# EOF
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-04-10 08:07:03 (ywatanabe)"
|
|
4
|
+
# File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/io/_load_modules/_matlab.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "/ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/io/_load_modules/_matlab.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
# ----------------------------------------
|
|
11
|
+
|
|
12
|
+
from typing import Any
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _load_matlab(lpath: str, **kwargs) -> Any:
|
|
16
|
+
"""Load MATLAB file."""
|
|
17
|
+
if not lpath.endswith(".mat"):
|
|
18
|
+
raise ValueError("File must have .mat extension")
|
|
19
|
+
|
|
20
|
+
# Try using scipy.io first for binary .mat files
|
|
21
|
+
try:
|
|
22
|
+
# For MATLAB v7.3 files (HDF5 format)
|
|
23
|
+
from scipy.io import loadmat
|
|
24
|
+
|
|
25
|
+
return loadmat(lpath, **kwargs)
|
|
26
|
+
except Exception as e1:
|
|
27
|
+
# If scipy fails, try pymatreader or older MAT files
|
|
28
|
+
try:
|
|
29
|
+
from pymatreader import read_mat
|
|
30
|
+
|
|
31
|
+
return read_mat(lpath, **kwargs)
|
|
32
|
+
except Exception as e2:
|
|
33
|
+
# Both methods failed
|
|
34
|
+
raise ValueError(f"Error loading file {lpath}: {str(e1)}\nAnd: {str(e2)}")
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
# EOF
|