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,47 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-03 03:44:47 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/str/_print_block.py
|
|
5
|
+
|
|
6
|
+
from ._color_text import color_text
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def printc(message, char="-", n=40, c="cyan"):
|
|
10
|
+
"""Print a message surrounded by a character border.
|
|
11
|
+
|
|
12
|
+
This function prints a given message surrounded by a border made of
|
|
13
|
+
a specified character. The border can be colored if desired.
|
|
14
|
+
|
|
15
|
+
Parameters
|
|
16
|
+
----------
|
|
17
|
+
message : str
|
|
18
|
+
The message to be printed inside the border.
|
|
19
|
+
char : str, optional
|
|
20
|
+
The character used to create the border (default is "-").
|
|
21
|
+
n : int, optional
|
|
22
|
+
The width of the border (default is 40).
|
|
23
|
+
c : str, optional
|
|
24
|
+
The color of the border. Can be 'red', 'green', 'yellow', 'blue',
|
|
25
|
+
'magenta', 'cyan', 'white', or 'grey' (default is None, which means no color).
|
|
26
|
+
|
|
27
|
+
Returns
|
|
28
|
+
-------
|
|
29
|
+
None
|
|
30
|
+
|
|
31
|
+
Example
|
|
32
|
+
-------
|
|
33
|
+
>>> print_block("Hello, World!", char="*", n=20, c="blue")
|
|
34
|
+
********************
|
|
35
|
+
* Hello, World! *
|
|
36
|
+
********************
|
|
37
|
+
|
|
38
|
+
Note: The actual output will be in green color.
|
|
39
|
+
"""
|
|
40
|
+
border = char * n
|
|
41
|
+
text = f"\n{border}\n{message}\n{border}\n"
|
|
42
|
+
if c is not None:
|
|
43
|
+
text = color_text(text, c)
|
|
44
|
+
print(text)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
# EOF
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-24 17:17:05 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/str/_print_debug.py
|
|
5
|
+
|
|
6
|
+
THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/str/_print_debug.py"
|
|
7
|
+
|
|
8
|
+
from ._printc import printc
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def print_debug():
|
|
12
|
+
"""Print a prominent debug mode banner.
|
|
13
|
+
|
|
14
|
+
Displays a highly visible yellow banner to indicate that the program
|
|
15
|
+
is running in debug mode. Useful for making debug runs immediately
|
|
16
|
+
distinguishable from production runs.
|
|
17
|
+
|
|
18
|
+
The banner consists of multiple lines of exclamation marks with
|
|
19
|
+
"DEBUG MODE" prominently displayed in the center.
|
|
20
|
+
|
|
21
|
+
Examples
|
|
22
|
+
--------
|
|
23
|
+
>>> # At the start of debug runs
|
|
24
|
+
>>> if DEBUG:
|
|
25
|
+
... print_debug()
|
|
26
|
+
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
27
|
+
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
28
|
+
!!!!!!!!!!!!!!!!!!!!!!!! DEBUG MODE !!!!!!!!!!!!!!!!!!!!!!!!
|
|
29
|
+
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
30
|
+
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
31
|
+
|
|
32
|
+
>>> # In configuration validation
|
|
33
|
+
>>> if config.debug_mode:
|
|
34
|
+
... print_debug()
|
|
35
|
+
... print("Debug logging enabled")
|
|
36
|
+
|
|
37
|
+
See Also
|
|
38
|
+
--------
|
|
39
|
+
printc : Colored printing function used internally
|
|
40
|
+
|
|
41
|
+
Notes
|
|
42
|
+
-----
|
|
43
|
+
The banner is printed in yellow color to ensure high visibility
|
|
44
|
+
in terminal output.
|
|
45
|
+
"""
|
|
46
|
+
printc(
|
|
47
|
+
(
|
|
48
|
+
f"{'!'*60}\n"
|
|
49
|
+
f"{'!'*60}\n"
|
|
50
|
+
f"{'!'*60}\n"
|
|
51
|
+
f"{'!'*60}\n"
|
|
52
|
+
f"{'!'*60}\n"
|
|
53
|
+
f"{'!'*60}\n"
|
|
54
|
+
f"{'!'*24} DEBUG MODE {'!'*24}\n"
|
|
55
|
+
f"{'!'*60}\n"
|
|
56
|
+
f"{'!'*60}\n"
|
|
57
|
+
f"{'!'*60}\n"
|
|
58
|
+
f"{'!'*60}\n"
|
|
59
|
+
f"{'!'*60}\n"
|
|
60
|
+
f"{'!'*60}"
|
|
61
|
+
),
|
|
62
|
+
c="yellow",
|
|
63
|
+
char="!",
|
|
64
|
+
n=60,
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
# EOF
|
scitex/str/_printc.py
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-06-14 19:09:38 (ywatanabe)"
|
|
4
|
+
# File: /ssh:sp:/home/ywatanabe/proj/SciTeX-Code/src/scitex/str/_printc.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
__FILE__ = (
|
|
8
|
+
"./src/scitex/str/_printc.py"
|
|
9
|
+
)
|
|
10
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
11
|
+
# ----------------------------------------
|
|
12
|
+
# Time-stamp: "2024-11-24 17:01:23 (ywatanabe)"
|
|
13
|
+
|
|
14
|
+
THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/str/_printc.py"
|
|
15
|
+
|
|
16
|
+
# Time-stamp: "2024-11-03 03:47:51 (ywatanabe)"
|
|
17
|
+
|
|
18
|
+
from ._color_text import color_text
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def printc(message, c="blue", char="-", n=40):
|
|
22
|
+
"""Print a message surrounded by a character border.
|
|
23
|
+
|
|
24
|
+
This function prints a given message surrounded by a border made of
|
|
25
|
+
a specified character. The border can be colored if desired.
|
|
26
|
+
|
|
27
|
+
Parameters
|
|
28
|
+
----------
|
|
29
|
+
message : str
|
|
30
|
+
The message to be printed inside the border.
|
|
31
|
+
char : str, optional
|
|
32
|
+
The character used to create the border (default is "-").
|
|
33
|
+
n : int, optional
|
|
34
|
+
The width of the border (default is 40).
|
|
35
|
+
c : str, optional
|
|
36
|
+
The color of the border. Can be 'red', 'green', 'yellow', 'blue',
|
|
37
|
+
'magenta', 'cyan', 'white', or 'grey' (default is None, which means no color).
|
|
38
|
+
|
|
39
|
+
Returns
|
|
40
|
+
-------
|
|
41
|
+
None
|
|
42
|
+
|
|
43
|
+
Example
|
|
44
|
+
-------
|
|
45
|
+
>>> print_block("Hello, World!", char="*", n=20, c="blue")
|
|
46
|
+
********************
|
|
47
|
+
* Hello, World! *
|
|
48
|
+
********************
|
|
49
|
+
|
|
50
|
+
Note: The actual output will be in green color.
|
|
51
|
+
"""
|
|
52
|
+
if char is not None:
|
|
53
|
+
border = char * n
|
|
54
|
+
text = f"\n{border}\n{message}\n{border}\n"
|
|
55
|
+
else:
|
|
56
|
+
text = f"\n{message}\n"
|
|
57
|
+
if c is not None:
|
|
58
|
+
text = color_text(text, c)
|
|
59
|
+
|
|
60
|
+
print(text)
|
|
61
|
+
|
|
62
|
+
# EOF
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-02 04:06:54 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/str/_readable_bytes.py
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def readable_bytes(num, suffix="B"):
|
|
8
|
+
"""Convert a number of bytes to a human-readable format.
|
|
9
|
+
|
|
10
|
+
Parameters
|
|
11
|
+
----------
|
|
12
|
+
num : int
|
|
13
|
+
The number of bytes to convert.
|
|
14
|
+
suffix : str, optional
|
|
15
|
+
The suffix to append to the unit (default is "B" for bytes).
|
|
16
|
+
|
|
17
|
+
Returns
|
|
18
|
+
-------
|
|
19
|
+
str
|
|
20
|
+
A human-readable string representation of the byte size.
|
|
21
|
+
|
|
22
|
+
Example
|
|
23
|
+
-------
|
|
24
|
+
>>> readable_bytes(1024)
|
|
25
|
+
'1.0 KiB'
|
|
26
|
+
>>> readable_bytes(1048576)
|
|
27
|
+
'1.0 MiB'
|
|
28
|
+
>>> readable_bytes(1073741824)
|
|
29
|
+
'1.0 GiB'
|
|
30
|
+
"""
|
|
31
|
+
for unit in ["", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi"]:
|
|
32
|
+
if abs(num) < 1024.0:
|
|
33
|
+
return "%3.1f %s%s" % (num, unit, suffix)
|
|
34
|
+
num /= 1024.0
|
|
35
|
+
return "%.1f %s%s" % (num, "Yi", suffix)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
# EOF
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-04 01:21:34 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/str/_remove_ansi.py
|
|
5
|
+
|
|
6
|
+
import re
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def remove_ansi(string):
|
|
10
|
+
"""
|
|
11
|
+
Removes ANSI escape sequences from a given text chunk.
|
|
12
|
+
|
|
13
|
+
Parameters:
|
|
14
|
+
- chunk (str): The text chunk to be cleaned.
|
|
15
|
+
|
|
16
|
+
Returns:
|
|
17
|
+
- str: The cleaned text chunk.
|
|
18
|
+
"""
|
|
19
|
+
ansi_escape = re.compile(r"\x1B[@-_][0-?]*[ -/]*[@-~]")
|
|
20
|
+
return ansi_escape.sub("", string)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# EOF
|
scitex/str/_replace.py
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-16 16:34:46 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/str/_replace.py
|
|
5
|
+
|
|
6
|
+
THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/str/_replace.py"
|
|
7
|
+
|
|
8
|
+
#!/usr/bin/env python3
|
|
9
|
+
# -*- coding: utf-8 -*-
|
|
10
|
+
# Time-stamp: "2024-11-16 16:30:25 (ywatanabe)"
|
|
11
|
+
# File: ./scitex_repo/src/scitex/str/_replace.py
|
|
12
|
+
|
|
13
|
+
THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/str/_replace.py"
|
|
14
|
+
|
|
15
|
+
from typing import Union, Dict, Optional
|
|
16
|
+
from ..dict import DotDict as _DotDict
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def replace(
|
|
20
|
+
string: str, replacements: Optional[Union[str, Dict[str, str]]] = None
|
|
21
|
+
) -> str:
|
|
22
|
+
"""Replace placeholders in the string with corresponding values from replacements.
|
|
23
|
+
|
|
24
|
+
This function replaces placeholders in the format {key} within the input string
|
|
25
|
+
with corresponding values from the replacements dictionary. If replacements is
|
|
26
|
+
a string, it replaces the entire input string.
|
|
27
|
+
|
|
28
|
+
Parameters
|
|
29
|
+
----------
|
|
30
|
+
string : str
|
|
31
|
+
The string containing placeholders in the format {key}
|
|
32
|
+
replacements : Optional[Union[str, Dict[str, str]]], optional
|
|
33
|
+
A dictionary containing key-value pairs for replacing placeholders in the string,
|
|
34
|
+
or a single string to replace the entire string
|
|
35
|
+
|
|
36
|
+
Returns
|
|
37
|
+
-------
|
|
38
|
+
str
|
|
39
|
+
The input string with placeholders replaced by their corresponding values
|
|
40
|
+
|
|
41
|
+
Examples
|
|
42
|
+
--------
|
|
43
|
+
>>> replace("Hello, {name}!", {"name": "World"})
|
|
44
|
+
'Hello, World!'
|
|
45
|
+
>>> replace("Original string", "New string")
|
|
46
|
+
'New string'
|
|
47
|
+
>>> replace("Value: {x}", {"x": "42"})
|
|
48
|
+
'Value: 42'
|
|
49
|
+
>>> template = "Hello, {name}! You are {age} years old."
|
|
50
|
+
>>> replacements = {"name": "Alice", "age": "30"}
|
|
51
|
+
>>> replace(template, replacements)
|
|
52
|
+
'Hello, Alice! You are 30 years old.'
|
|
53
|
+
"""
|
|
54
|
+
if not isinstance(string, str):
|
|
55
|
+
raise TypeError("Input 'string' must be a string")
|
|
56
|
+
|
|
57
|
+
if isinstance(replacements, str):
|
|
58
|
+
return replacements
|
|
59
|
+
|
|
60
|
+
if replacements is None:
|
|
61
|
+
return string
|
|
62
|
+
|
|
63
|
+
if not isinstance(replacements, (dict, _DotDict)):
|
|
64
|
+
raise TypeError("replacements must be either a string or a dictionary")
|
|
65
|
+
|
|
66
|
+
result = string
|
|
67
|
+
for key, value in replacements.items():
|
|
68
|
+
if value is not None:
|
|
69
|
+
placeholder = "{" + str(key) + "}"
|
|
70
|
+
result = result.replace(placeholder, str(value))
|
|
71
|
+
|
|
72
|
+
return result
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
# EOF
|
|
76
|
+
|
|
77
|
+
# #!/usr/bin/env python3
|
|
78
|
+
# # -*- coding: utf-8 -*-
|
|
79
|
+
# # Time-stamp: "2024-11-16 16:30:25 (ywatanabe)"
|
|
80
|
+
# # File: ./scitex_repo/src/scitex/str/_replace.py
|
|
81
|
+
|
|
82
|
+
# THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/str/_replace.py"
|
|
83
|
+
|
|
84
|
+
# def replace(string, replacements):
|
|
85
|
+
# """Replace placeholders in the string with corresponding values from replacements.
|
|
86
|
+
|
|
87
|
+
# This function replaces placeholders in the format {key} within the input string
|
|
88
|
+
# with corresponding values from the replacements dictionary. If replacements is
|
|
89
|
+
# a string, it replaces the entire input string.
|
|
90
|
+
|
|
91
|
+
# Parameters
|
|
92
|
+
# ----------
|
|
93
|
+
# string : str
|
|
94
|
+
# The string containing placeholders in the format {key}.
|
|
95
|
+
# replacements : dict or str, optional
|
|
96
|
+
# A dictionary containing key-value pairs for replacing placeholders in the string,
|
|
97
|
+
# or a single string to replace the entire string.
|
|
98
|
+
|
|
99
|
+
# Returns
|
|
100
|
+
# -------
|
|
101
|
+
# str
|
|
102
|
+
# The input string with placeholders replaced by their corresponding values.
|
|
103
|
+
|
|
104
|
+
# Examples
|
|
105
|
+
# --------
|
|
106
|
+
# >>> replace("Hello, {name}!", {"name": "World"})
|
|
107
|
+
# 'Hello, World!'
|
|
108
|
+
# >>> replace("Original string", "New string")
|
|
109
|
+
# 'New string'
|
|
110
|
+
# >>> replace("Value: {x}", {"x": 42})
|
|
111
|
+
# 'Value: 42'
|
|
112
|
+
# >>> template = "Hello, {name}! You are {age} years old."
|
|
113
|
+
# >>> replacements = {"name": "Alice", "age": "30"}
|
|
114
|
+
# >>> replace(template, replacements)
|
|
115
|
+
# 'Hello, Alice! You are 30 years old.'
|
|
116
|
+
# """
|
|
117
|
+
# if isinstance(replacements, str):
|
|
118
|
+
# return replacements
|
|
119
|
+
|
|
120
|
+
# if replacements is None:
|
|
121
|
+
# replacements = {}
|
|
122
|
+
|
|
123
|
+
# for k, v in replacements.items():
|
|
124
|
+
# if v is not None:
|
|
125
|
+
# try:
|
|
126
|
+
# string = string.replace("{" + k + "}", v)
|
|
127
|
+
# except Exception as e:
|
|
128
|
+
# pass
|
|
129
|
+
# return string
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
#
|
|
133
|
+
|
|
134
|
+
# EOF
|
scitex/str/_search.py
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-13 14:25:59 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/str/_search.py
|
|
5
|
+
|
|
6
|
+
import re
|
|
7
|
+
from collections import abc
|
|
8
|
+
|
|
9
|
+
import numpy as np
|
|
10
|
+
import pandas as pd
|
|
11
|
+
import xarray as xr
|
|
12
|
+
from natsort import natsorted
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def search(
|
|
16
|
+
patterns,
|
|
17
|
+
strings,
|
|
18
|
+
only_perfect_match=False,
|
|
19
|
+
as_bool=False,
|
|
20
|
+
ensure_one=False,
|
|
21
|
+
):
|
|
22
|
+
"""Search for patterns in strings using regular expressions.
|
|
23
|
+
|
|
24
|
+
Parameters
|
|
25
|
+
----------
|
|
26
|
+
patterns : str or list of str
|
|
27
|
+
The pattern(s) to search for. Can be a single string or a list of strings.
|
|
28
|
+
strings : str or list of str
|
|
29
|
+
The string(s) to search in. Can be a single string or a list of strings.
|
|
30
|
+
only_perfect_match : bool, optional
|
|
31
|
+
If True, only exact matches are considered (default is False).
|
|
32
|
+
as_bool : bool, optional
|
|
33
|
+
If True, return a boolean array instead of indices (default is False).
|
|
34
|
+
ensure_one : bool, optional
|
|
35
|
+
If True, ensures only one match is found (default is False).
|
|
36
|
+
|
|
37
|
+
Returns
|
|
38
|
+
-------
|
|
39
|
+
tuple
|
|
40
|
+
A tuple containing two elements:
|
|
41
|
+
- If as_bool is False: (list of int, list of str)
|
|
42
|
+
The first element is a list of indices where matches were found.
|
|
43
|
+
The second element is a list of matched strings.
|
|
44
|
+
- If as_bool is True: (numpy.ndarray of bool, list of str)
|
|
45
|
+
The first element is a boolean array indicating matches.
|
|
46
|
+
The second element is a list of matched strings.
|
|
47
|
+
|
|
48
|
+
Example
|
|
49
|
+
-------
|
|
50
|
+
>>> patterns = ['orange', 'banana']
|
|
51
|
+
>>> strings = ['apple', 'orange', 'apple', 'apple_juice', 'banana', 'orange_juice']
|
|
52
|
+
>>> search(patterns, strings)
|
|
53
|
+
([1, 4, 5], ['orange', 'banana', 'orange_juice'])
|
|
54
|
+
|
|
55
|
+
>>> patterns = 'orange'
|
|
56
|
+
>>> strings = ['apple', 'orange', 'apple', 'apple_juice', 'banana', 'orange_juice']
|
|
57
|
+
>>> search(patterns, strings)
|
|
58
|
+
([1, 5], ['orange', 'orange_juice'])
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
def to_list(string_or_pattern):
|
|
62
|
+
"""Convert various input types to a list.
|
|
63
|
+
|
|
64
|
+
Handles conversion of different data structures to lists for
|
|
65
|
+
consistent processing in the search function.
|
|
66
|
+
|
|
67
|
+
Parameters
|
|
68
|
+
----------
|
|
69
|
+
string_or_pattern : str, list, tuple, array-like, or dict_keys
|
|
70
|
+
Input to be converted to list format.
|
|
71
|
+
|
|
72
|
+
Returns
|
|
73
|
+
-------
|
|
74
|
+
list
|
|
75
|
+
The input converted to list format.
|
|
76
|
+
|
|
77
|
+
Examples
|
|
78
|
+
--------
|
|
79
|
+
>>> to_list('hello')
|
|
80
|
+
['hello']
|
|
81
|
+
|
|
82
|
+
>>> to_list(['a', 'b'])
|
|
83
|
+
['a', 'b']
|
|
84
|
+
|
|
85
|
+
>>> to_list(np.array(['x', 'y']))
|
|
86
|
+
['x', 'y']
|
|
87
|
+
"""
|
|
88
|
+
if isinstance(string_or_pattern, (np.ndarray, pd.Series, xr.DataArray)):
|
|
89
|
+
return string_or_pattern.tolist()
|
|
90
|
+
elif isinstance(string_or_pattern, abc.KeysView):
|
|
91
|
+
return list(string_or_pattern)
|
|
92
|
+
elif not isinstance(string_or_pattern, (list, tuple, pd.Index)):
|
|
93
|
+
return [string_or_pattern]
|
|
94
|
+
return string_or_pattern
|
|
95
|
+
|
|
96
|
+
patterns = to_list(patterns)
|
|
97
|
+
strings = to_list(strings)
|
|
98
|
+
|
|
99
|
+
indices_matched = []
|
|
100
|
+
for pattern in patterns:
|
|
101
|
+
for index_str, string in enumerate(strings):
|
|
102
|
+
if only_perfect_match:
|
|
103
|
+
if pattern == string:
|
|
104
|
+
indices_matched.append(index_str)
|
|
105
|
+
else:
|
|
106
|
+
if re.search(pattern, string):
|
|
107
|
+
indices_matched.append(index_str)
|
|
108
|
+
|
|
109
|
+
indices_matched = natsorted(indices_matched)
|
|
110
|
+
keys_matched = list(np.array(strings)[indices_matched])
|
|
111
|
+
|
|
112
|
+
if ensure_one:
|
|
113
|
+
assert (
|
|
114
|
+
len(indices_matched) == 1
|
|
115
|
+
), "Expected exactly one match, but found {}".format(len(indices_matched))
|
|
116
|
+
|
|
117
|
+
if as_bool:
|
|
118
|
+
bool_matched = np.zeros(len(strings), dtype=bool)
|
|
119
|
+
bool_matched[np.unique(indices_matched)] = True
|
|
120
|
+
return bool_matched, keys_matched
|
|
121
|
+
else:
|
|
122
|
+
return indices_matched, keys_matched
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
# EOF
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-02 04:04:31 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/str/_squeeze_space.py
|
|
5
|
+
|
|
6
|
+
import re
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def squeeze_spaces(string, pattern=" +", repl=" "):
|
|
10
|
+
"""Replace multiple occurrences of a pattern in a string with a single replacement.
|
|
11
|
+
|
|
12
|
+
Parameters
|
|
13
|
+
----------
|
|
14
|
+
string : str
|
|
15
|
+
The input string to be processed.
|
|
16
|
+
pattern : str, optional
|
|
17
|
+
The regular expression pattern to match (default is " +", which matches one or more spaces).
|
|
18
|
+
repl : str or callable, optional
|
|
19
|
+
The replacement string or function (default is " ", a single space).
|
|
20
|
+
|
|
21
|
+
Returns
|
|
22
|
+
-------
|
|
23
|
+
str
|
|
24
|
+
The processed string with pattern occurrences replaced.
|
|
25
|
+
|
|
26
|
+
Example
|
|
27
|
+
-------
|
|
28
|
+
>>> squeeze_spaces("Hello world")
|
|
29
|
+
'Hello world'
|
|
30
|
+
>>> squeeze_spaces("a---b--c-d", pattern="-+", repl="-")
|
|
31
|
+
'a-b-c-d'
|
|
32
|
+
"""
|
|
33
|
+
return re.sub(pattern, repl, string)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
# EOF
|
scitex/tex/__init__.py
ADDED
scitex/tex/_preview.py
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2025-06-05 12:00:00 (ywatanabe)"
|
|
4
|
+
# File: ./src/scitex/tex/_preview.py
|
|
5
|
+
|
|
6
|
+
"""
|
|
7
|
+
LaTeX preview functionality with fallback mechanisms.
|
|
8
|
+
|
|
9
|
+
Functionality:
|
|
10
|
+
- Generate previews of LaTeX strings with automatic fallback
|
|
11
|
+
- Handle LaTeX rendering failures gracefully
|
|
12
|
+
Input:
|
|
13
|
+
List of LaTeX strings
|
|
14
|
+
Output:
|
|
15
|
+
Matplotlib figure with previews
|
|
16
|
+
Prerequisites:
|
|
17
|
+
matplotlib, numpy, scitex.plt, scitex.str._latex_fallback
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
import numpy as np
|
|
21
|
+
|
|
22
|
+
try:
|
|
23
|
+
from ..str._latex_fallback import safe_latex_render, latex_fallback_decorator
|
|
24
|
+
FALLBACK_AVAILABLE = True
|
|
25
|
+
except ImportError:
|
|
26
|
+
FALLBACK_AVAILABLE = False
|
|
27
|
+
def latex_fallback_decorator(fallback_strategy="auto", preserve_math=True):
|
|
28
|
+
def decorator(func):
|
|
29
|
+
return func
|
|
30
|
+
return decorator
|
|
31
|
+
|
|
32
|
+
def safe_latex_render(text, fallback_strategy="auto", preserve_math=True):
|
|
33
|
+
return text
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@latex_fallback_decorator(fallback_strategy="auto", preserve_math=True)
|
|
37
|
+
def preview(tex_str_list, enable_fallback=True):
|
|
38
|
+
r"""
|
|
39
|
+
Generate a preview of LaTeX strings with automatic fallback.
|
|
40
|
+
|
|
41
|
+
Parameters
|
|
42
|
+
----------
|
|
43
|
+
tex_str_list : list of str
|
|
44
|
+
List of LaTeX strings to preview
|
|
45
|
+
enable_fallback : bool, optional
|
|
46
|
+
Whether to enable LaTeX fallback mechanisms, by default True
|
|
47
|
+
|
|
48
|
+
Returns
|
|
49
|
+
-------
|
|
50
|
+
matplotlib.figure.Figure
|
|
51
|
+
Figure containing the previews
|
|
52
|
+
|
|
53
|
+
Examples
|
|
54
|
+
--------
|
|
55
|
+
>>> tex_strings = ["x^2", r"\sum_{i=1}^n i", r"\alpha + \beta"]
|
|
56
|
+
>>> fig = preview(tex_strings)
|
|
57
|
+
>>> scitex.plt.show()
|
|
58
|
+
|
|
59
|
+
Notes
|
|
60
|
+
-----
|
|
61
|
+
If LaTeX rendering fails, this function automatically falls back to
|
|
62
|
+
mathtext or unicode alternatives while preserving the preview layout.
|
|
63
|
+
"""
|
|
64
|
+
from ..plt import subplots
|
|
65
|
+
|
|
66
|
+
if not isinstance(tex_str_list, (list, tuple)):
|
|
67
|
+
tex_str_list = [tex_str_list]
|
|
68
|
+
|
|
69
|
+
fig, axes = subplots(
|
|
70
|
+
nrows=len(tex_str_list), ncols=1, figsize=(10, 3 * len(tex_str_list))
|
|
71
|
+
)
|
|
72
|
+
axes = np.atleast_1d(axes)
|
|
73
|
+
|
|
74
|
+
for ax, tex_string in zip(axes, tex_str_list):
|
|
75
|
+
try:
|
|
76
|
+
# Original LaTeX string (raw)
|
|
77
|
+
if enable_fallback and FALLBACK_AVAILABLE:
|
|
78
|
+
safe_raw = safe_latex_render(tex_string, "unicode", preserve_math=False)
|
|
79
|
+
ax.text(0.5, 0.7, safe_raw, size=20, ha="center", va="center")
|
|
80
|
+
else:
|
|
81
|
+
ax.text(0.5, 0.7, tex_string, size=20, ha="center", va="center")
|
|
82
|
+
|
|
83
|
+
# LaTeX-formatted string
|
|
84
|
+
latex_formatted = f"${tex_string}$" if not (tex_string.startswith("$") and tex_string.endswith("$")) else tex_string
|
|
85
|
+
|
|
86
|
+
if enable_fallback and FALLBACK_AVAILABLE:
|
|
87
|
+
safe_latex = safe_latex_render(latex_formatted, preserve_math=True)
|
|
88
|
+
ax.text(0.5, 0.3, safe_latex, size=20, ha="center", va="center")
|
|
89
|
+
else:
|
|
90
|
+
ax.text(0.5, 0.3, latex_formatted, size=20, ha="center", va="center")
|
|
91
|
+
|
|
92
|
+
except Exception as e:
|
|
93
|
+
# Fallback for individual preview failures
|
|
94
|
+
ax.text(0.5, 0.7, f"Raw: {tex_string}", size=16, ha="center", va="center")
|
|
95
|
+
ax.text(0.5, 0.3, f"Error: {str(e)[:50]}...", size=12, ha="center", va="center", color='red')
|
|
96
|
+
|
|
97
|
+
ax.hide_spines()
|
|
98
|
+
|
|
99
|
+
fig.tight_layout()
|
|
100
|
+
return fig
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
# EOF
|