scitex 2.0.0__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- scitex/__init__.py +73 -0
- scitex/__main__.py +89 -0
- scitex/__version__.py +14 -0
- scitex/_sh.py +59 -0
- scitex/ai/_LearningCurveLogger.py +583 -0
- scitex/ai/__Classifiers.py +101 -0
- scitex/ai/__init__.py +55 -0
- scitex/ai/_gen_ai/_Anthropic.py +173 -0
- scitex/ai/_gen_ai/_BaseGenAI.py +336 -0
- scitex/ai/_gen_ai/_DeepSeek.py +175 -0
- scitex/ai/_gen_ai/_Google.py +161 -0
- scitex/ai/_gen_ai/_Groq.py +97 -0
- scitex/ai/_gen_ai/_Llama.py +142 -0
- scitex/ai/_gen_ai/_OpenAI.py +230 -0
- scitex/ai/_gen_ai/_PARAMS.py +565 -0
- scitex/ai/_gen_ai/_Perplexity.py +191 -0
- scitex/ai/_gen_ai/__init__.py +32 -0
- scitex/ai/_gen_ai/_calc_cost.py +78 -0
- scitex/ai/_gen_ai/_format_output_func.py +183 -0
- scitex/ai/_gen_ai/_genai_factory.py +71 -0
- scitex/ai/act/__init__.py +8 -0
- scitex/ai/act/_define.py +11 -0
- scitex/ai/classification/__init__.py +7 -0
- scitex/ai/classification/classification_reporter.py +1137 -0
- scitex/ai/classification/classifier_server.py +131 -0
- scitex/ai/classification/classifiers.py +101 -0
- scitex/ai/classification_reporter.py +1161 -0
- scitex/ai/classifier_server.py +131 -0
- scitex/ai/clustering/__init__.py +11 -0
- scitex/ai/clustering/_pca.py +115 -0
- scitex/ai/clustering/_umap.py +376 -0
- scitex/ai/early_stopping.py +149 -0
- scitex/ai/feature_extraction/__init__.py +56 -0
- scitex/ai/feature_extraction/vit.py +148 -0
- scitex/ai/genai/__init__.py +277 -0
- scitex/ai/genai/anthropic.py +177 -0
- scitex/ai/genai/anthropic_provider.py +320 -0
- scitex/ai/genai/anthropic_refactored.py +109 -0
- scitex/ai/genai/auth_manager.py +200 -0
- scitex/ai/genai/base_genai.py +336 -0
- scitex/ai/genai/base_provider.py +291 -0
- scitex/ai/genai/calc_cost.py +78 -0
- scitex/ai/genai/chat_history.py +307 -0
- scitex/ai/genai/cost_tracker.py +276 -0
- scitex/ai/genai/deepseek.py +188 -0
- scitex/ai/genai/deepseek_provider.py +251 -0
- scitex/ai/genai/format_output_func.py +183 -0
- scitex/ai/genai/genai_factory.py +71 -0
- scitex/ai/genai/google.py +169 -0
- scitex/ai/genai/google_provider.py +228 -0
- scitex/ai/genai/groq.py +104 -0
- scitex/ai/genai/groq_provider.py +248 -0
- scitex/ai/genai/image_processor.py +250 -0
- scitex/ai/genai/llama.py +155 -0
- scitex/ai/genai/llama_provider.py +214 -0
- scitex/ai/genai/mock_provider.py +127 -0
- scitex/ai/genai/model_registry.py +304 -0
- scitex/ai/genai/openai.py +230 -0
- scitex/ai/genai/openai_provider.py +293 -0
- scitex/ai/genai/params.py +565 -0
- scitex/ai/genai/perplexity.py +202 -0
- scitex/ai/genai/perplexity_provider.py +205 -0
- scitex/ai/genai/provider_base.py +302 -0
- scitex/ai/genai/provider_factory.py +370 -0
- scitex/ai/genai/response_handler.py +235 -0
- scitex/ai/layer/_Pass.py +21 -0
- scitex/ai/layer/__init__.py +10 -0
- scitex/ai/layer/_switch.py +8 -0
- scitex/ai/loss/_L1L2Losses.py +34 -0
- scitex/ai/loss/__init__.py +12 -0
- scitex/ai/loss/multi_task_loss.py +47 -0
- scitex/ai/metrics/__init__.py +9 -0
- scitex/ai/metrics/_bACC.py +51 -0
- scitex/ai/metrics/silhoute_score_block.py +496 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/__init__.py +0 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/__init__.py +3 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/ranger.py +207 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/ranger2020.py +238 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/ranger913A.py +215 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/rangerqh.py +184 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/setup.py +24 -0
- scitex/ai/optim/__init__.py +13 -0
- scitex/ai/optim/_get_set.py +31 -0
- scitex/ai/optim/_optimizers.py +71 -0
- scitex/ai/plt/__init__.py +21 -0
- scitex/ai/plt/_conf_mat.py +592 -0
- scitex/ai/plt/_learning_curve.py +194 -0
- scitex/ai/plt/_optuna_study.py +111 -0
- scitex/ai/plt/aucs/__init__.py +2 -0
- scitex/ai/plt/aucs/example.py +60 -0
- scitex/ai/plt/aucs/pre_rec_auc.py +223 -0
- scitex/ai/plt/aucs/roc_auc.py +246 -0
- scitex/ai/sampling/undersample.py +29 -0
- scitex/ai/sk/__init__.py +11 -0
- scitex/ai/sk/_clf.py +58 -0
- scitex/ai/sk/_to_sktime.py +100 -0
- scitex/ai/sklearn/__init__.py +26 -0
- scitex/ai/sklearn/clf.py +58 -0
- scitex/ai/sklearn/to_sktime.py +100 -0
- scitex/ai/training/__init__.py +7 -0
- scitex/ai/training/early_stopping.py +150 -0
- scitex/ai/training/learning_curve_logger.py +555 -0
- scitex/ai/utils/__init__.py +22 -0
- scitex/ai/utils/_check_params.py +50 -0
- scitex/ai/utils/_default_dataset.py +46 -0
- scitex/ai/utils/_format_samples_for_sktime.py +26 -0
- scitex/ai/utils/_label_encoder.py +134 -0
- scitex/ai/utils/_merge_labels.py +22 -0
- scitex/ai/utils/_sliding_window_data_augmentation.py +11 -0
- scitex/ai/utils/_under_sample.py +51 -0
- scitex/ai/utils/_verify_n_gpus.py +16 -0
- scitex/ai/utils/grid_search.py +148 -0
- scitex/context/__init__.py +9 -0
- scitex/context/_suppress_output.py +38 -0
- scitex/db/_BaseMixins/_BaseBackupMixin.py +30 -0
- scitex/db/_BaseMixins/_BaseBatchMixin.py +31 -0
- scitex/db/_BaseMixins/_BaseBlobMixin.py +81 -0
- scitex/db/_BaseMixins/_BaseConnectionMixin.py +43 -0
- scitex/db/_BaseMixins/_BaseImportExportMixin.py +39 -0
- scitex/db/_BaseMixins/_BaseIndexMixin.py +29 -0
- scitex/db/_BaseMixins/_BaseMaintenanceMixin.py +33 -0
- scitex/db/_BaseMixins/_BaseQueryMixin.py +52 -0
- scitex/db/_BaseMixins/_BaseRowMixin.py +32 -0
- scitex/db/_BaseMixins/_BaseSchemaMixin.py +44 -0
- scitex/db/_BaseMixins/_BaseTableMixin.py +66 -0
- scitex/db/_BaseMixins/_BaseTransactionMixin.py +52 -0
- scitex/db/_BaseMixins/__init__.py +30 -0
- scitex/db/_PostgreSQL.py +126 -0
- scitex/db/_PostgreSQLMixins/_BackupMixin.py +166 -0
- scitex/db/_PostgreSQLMixins/_BatchMixin.py +82 -0
- scitex/db/_PostgreSQLMixins/_BlobMixin.py +231 -0
- scitex/db/_PostgreSQLMixins/_ConnectionMixin.py +92 -0
- scitex/db/_PostgreSQLMixins/_ImportExportMixin.py +59 -0
- scitex/db/_PostgreSQLMixins/_IndexMixin.py +64 -0
- scitex/db/_PostgreSQLMixins/_MaintenanceMixin.py +175 -0
- scitex/db/_PostgreSQLMixins/_QueryMixin.py +108 -0
- scitex/db/_PostgreSQLMixins/_RowMixin.py +75 -0
- scitex/db/_PostgreSQLMixins/_SchemaMixin.py +126 -0
- scitex/db/_PostgreSQLMixins/_TableMixin.py +176 -0
- scitex/db/_PostgreSQLMixins/_TransactionMixin.py +57 -0
- scitex/db/_PostgreSQLMixins/__init__.py +34 -0
- scitex/db/_SQLite3.py +2136 -0
- scitex/db/_SQLite3Mixins/_BatchMixin.py +243 -0
- scitex/db/_SQLite3Mixins/_BlobMixin.py +229 -0
- scitex/db/_SQLite3Mixins/_ConnectionMixin.py +108 -0
- scitex/db/_SQLite3Mixins/_ImportExportMixin.py +80 -0
- scitex/db/_SQLite3Mixins/_IndexMixin.py +32 -0
- scitex/db/_SQLite3Mixins/_MaintenanceMixin.py +176 -0
- scitex/db/_SQLite3Mixins/_QueryMixin.py +83 -0
- scitex/db/_SQLite3Mixins/_RowMixin.py +75 -0
- scitex/db/_SQLite3Mixins/_TableMixin.py +183 -0
- scitex/db/_SQLite3Mixins/_TransactionMixin.py +71 -0
- scitex/db/_SQLite3Mixins/__init__.py +30 -0
- scitex/db/__init__.py +14 -0
- scitex/db/_delete_duplicates.py +397 -0
- scitex/db/_inspect.py +163 -0
- scitex/decorators/__init__.py +54 -0
- scitex/decorators/_auto_order.py +172 -0
- scitex/decorators/_batch_fn.py +127 -0
- scitex/decorators/_cache_disk.py +32 -0
- scitex/decorators/_cache_mem.py +12 -0
- scitex/decorators/_combined.py +98 -0
- scitex/decorators/_converters.py +282 -0
- scitex/decorators/_deprecated.py +26 -0
- scitex/decorators/_not_implemented.py +30 -0
- scitex/decorators/_numpy_fn.py +86 -0
- scitex/decorators/_pandas_fn.py +121 -0
- scitex/decorators/_preserve_doc.py +19 -0
- scitex/decorators/_signal_fn.py +95 -0
- scitex/decorators/_timeout.py +55 -0
- scitex/decorators/_torch_fn.py +136 -0
- scitex/decorators/_wrap.py +39 -0
- scitex/decorators/_xarray_fn.py +88 -0
- scitex/dev/__init__.py +15 -0
- scitex/dev/_analyze_code_flow.py +284 -0
- scitex/dev/_reload.py +59 -0
- scitex/dict/_DotDict.py +442 -0
- scitex/dict/__init__.py +18 -0
- scitex/dict/_listed_dict.py +42 -0
- scitex/dict/_pop_keys.py +36 -0
- scitex/dict/_replace.py +13 -0
- scitex/dict/_safe_merge.py +62 -0
- scitex/dict/_to_str.py +32 -0
- scitex/dsp/__init__.py +72 -0
- scitex/dsp/_crop.py +122 -0
- scitex/dsp/_demo_sig.py +331 -0
- scitex/dsp/_detect_ripples.py +212 -0
- scitex/dsp/_ensure_3d.py +18 -0
- scitex/dsp/_hilbert.py +78 -0
- scitex/dsp/_listen.py +702 -0
- scitex/dsp/_misc.py +30 -0
- scitex/dsp/_mne.py +32 -0
- scitex/dsp/_modulation_index.py +79 -0
- scitex/dsp/_pac.py +319 -0
- scitex/dsp/_psd.py +102 -0
- scitex/dsp/_resample.py +65 -0
- scitex/dsp/_time.py +36 -0
- scitex/dsp/_transform.py +68 -0
- scitex/dsp/_wavelet.py +212 -0
- scitex/dsp/add_noise.py +111 -0
- scitex/dsp/example.py +253 -0
- scitex/dsp/filt.py +155 -0
- scitex/dsp/norm.py +18 -0
- scitex/dsp/params.py +51 -0
- scitex/dsp/reference.py +43 -0
- scitex/dsp/template.py +25 -0
- scitex/dsp/utils/__init__.py +15 -0
- scitex/dsp/utils/_differential_bandpass_filters.py +120 -0
- scitex/dsp/utils/_ensure_3d.py +18 -0
- scitex/dsp/utils/_ensure_even_len.py +10 -0
- scitex/dsp/utils/_zero_pad.py +48 -0
- scitex/dsp/utils/filter.py +408 -0
- scitex/dsp/utils/pac.py +177 -0
- scitex/dt/__init__.py +8 -0
- scitex/dt/_linspace.py +130 -0
- scitex/etc/__init__.py +15 -0
- scitex/etc/wait_key.py +34 -0
- scitex/gen/_DimHandler.py +196 -0
- scitex/gen/_TimeStamper.py +244 -0
- scitex/gen/__init__.py +95 -0
- scitex/gen/_alternate_kwarg.py +13 -0
- scitex/gen/_cache.py +11 -0
- scitex/gen/_check_host.py +34 -0
- scitex/gen/_ci.py +12 -0
- scitex/gen/_close.py +222 -0
- scitex/gen/_embed.py +78 -0
- scitex/gen/_inspect_module.py +257 -0
- scitex/gen/_is_ipython.py +12 -0
- scitex/gen/_less.py +48 -0
- scitex/gen/_list_packages.py +139 -0
- scitex/gen/_mat2py.py +88 -0
- scitex/gen/_norm.py +170 -0
- scitex/gen/_paste.py +18 -0
- scitex/gen/_print_config.py +84 -0
- scitex/gen/_shell.py +48 -0
- scitex/gen/_src.py +111 -0
- scitex/gen/_start.py +451 -0
- scitex/gen/_symlink.py +55 -0
- scitex/gen/_symlog.py +27 -0
- scitex/gen/_tee.py +238 -0
- scitex/gen/_title2path.py +60 -0
- scitex/gen/_title_case.py +88 -0
- scitex/gen/_to_even.py +84 -0
- scitex/gen/_to_odd.py +34 -0
- scitex/gen/_to_rank.py +39 -0
- scitex/gen/_transpose.py +37 -0
- scitex/gen/_type.py +78 -0
- scitex/gen/_var_info.py +73 -0
- scitex/gen/_wrap.py +17 -0
- scitex/gen/_xml2dict.py +76 -0
- scitex/gen/misc.py +730 -0
- scitex/gen/path.py +0 -0
- scitex/general/__init__.py +5 -0
- scitex/gists/_SigMacro_processFigure_S.py +128 -0
- scitex/gists/_SigMacro_toBlue.py +172 -0
- scitex/gists/__init__.py +12 -0
- scitex/io/_H5Explorer.py +292 -0
- scitex/io/__init__.py +82 -0
- scitex/io/_cache.py +101 -0
- scitex/io/_flush.py +24 -0
- scitex/io/_glob.py +103 -0
- scitex/io/_json2md.py +113 -0
- scitex/io/_load.py +168 -0
- scitex/io/_load_configs.py +146 -0
- scitex/io/_load_modules/__init__.py +38 -0
- scitex/io/_load_modules/_catboost.py +66 -0
- scitex/io/_load_modules/_con.py +20 -0
- scitex/io/_load_modules/_db.py +24 -0
- scitex/io/_load_modules/_docx.py +42 -0
- scitex/io/_load_modules/_eeg.py +110 -0
- scitex/io/_load_modules/_hdf5.py +196 -0
- scitex/io/_load_modules/_image.py +19 -0
- scitex/io/_load_modules/_joblib.py +19 -0
- scitex/io/_load_modules/_json.py +18 -0
- scitex/io/_load_modules/_markdown.py +103 -0
- scitex/io/_load_modules/_matlab.py +37 -0
- scitex/io/_load_modules/_numpy.py +39 -0
- scitex/io/_load_modules/_optuna.py +155 -0
- scitex/io/_load_modules/_pandas.py +69 -0
- scitex/io/_load_modules/_pdf.py +31 -0
- scitex/io/_load_modules/_pickle.py +24 -0
- scitex/io/_load_modules/_torch.py +16 -0
- scitex/io/_load_modules/_txt.py +126 -0
- scitex/io/_load_modules/_xml.py +49 -0
- scitex/io/_load_modules/_yaml.py +23 -0
- scitex/io/_mv_to_tmp.py +19 -0
- scitex/io/_path.py +286 -0
- scitex/io/_reload.py +78 -0
- scitex/io/_save.py +539 -0
- scitex/io/_save_modules/__init__.py +66 -0
- scitex/io/_save_modules/_catboost.py +22 -0
- scitex/io/_save_modules/_csv.py +89 -0
- scitex/io/_save_modules/_excel.py +49 -0
- scitex/io/_save_modules/_hdf5.py +249 -0
- scitex/io/_save_modules/_html.py +48 -0
- scitex/io/_save_modules/_image.py +140 -0
- scitex/io/_save_modules/_joblib.py +25 -0
- scitex/io/_save_modules/_json.py +25 -0
- scitex/io/_save_modules/_listed_dfs_as_csv.py +57 -0
- scitex/io/_save_modules/_listed_scalars_as_csv.py +42 -0
- scitex/io/_save_modules/_matlab.py +24 -0
- scitex/io/_save_modules/_mp4.py +29 -0
- scitex/io/_save_modules/_numpy.py +57 -0
- scitex/io/_save_modules/_optuna_study_as_csv_and_pngs.py +38 -0
- scitex/io/_save_modules/_pickle.py +45 -0
- scitex/io/_save_modules/_plotly.py +27 -0
- scitex/io/_save_modules/_text.py +23 -0
- scitex/io/_save_modules/_torch.py +26 -0
- scitex/io/_save_modules/_yaml.py +29 -0
- scitex/life/__init__.py +10 -0
- scitex/life/_monitor_rain.py +49 -0
- scitex/linalg/__init__.py +17 -0
- scitex/linalg/_distance.py +63 -0
- scitex/linalg/_geometric_median.py +64 -0
- scitex/linalg/_misc.py +73 -0
- scitex/nn/_AxiswiseDropout.py +27 -0
- scitex/nn/_BNet.py +126 -0
- scitex/nn/_BNet_Res.py +164 -0
- scitex/nn/_ChannelGainChanger.py +44 -0
- scitex/nn/_DropoutChannels.py +50 -0
- scitex/nn/_Filters.py +489 -0
- scitex/nn/_FreqGainChanger.py +110 -0
- scitex/nn/_GaussianFilter.py +48 -0
- scitex/nn/_Hilbert.py +111 -0
- scitex/nn/_MNet_1000.py +157 -0
- scitex/nn/_ModulationIndex.py +221 -0
- scitex/nn/_PAC.py +414 -0
- scitex/nn/_PSD.py +40 -0
- scitex/nn/_ResNet1D.py +120 -0
- scitex/nn/_SpatialAttention.py +25 -0
- scitex/nn/_Spectrogram.py +161 -0
- scitex/nn/_SwapChannels.py +50 -0
- scitex/nn/_TransposeLayer.py +19 -0
- scitex/nn/_Wavelet.py +183 -0
- scitex/nn/__init__.py +63 -0
- scitex/os/__init__.py +8 -0
- scitex/os/_mv.py +50 -0
- scitex/parallel/__init__.py +8 -0
- scitex/parallel/_run.py +151 -0
- scitex/path/__init__.py +33 -0
- scitex/path/_clean.py +52 -0
- scitex/path/_find.py +108 -0
- scitex/path/_get_module_path.py +51 -0
- scitex/path/_get_spath.py +35 -0
- scitex/path/_getsize.py +18 -0
- scitex/path/_increment_version.py +87 -0
- scitex/path/_mk_spath.py +51 -0
- scitex/path/_path.py +19 -0
- scitex/path/_split.py +23 -0
- scitex/path/_this_path.py +19 -0
- scitex/path/_version.py +101 -0
- scitex/pd/__init__.py +41 -0
- scitex/pd/_find_indi.py +126 -0
- scitex/pd/_find_pval.py +113 -0
- scitex/pd/_force_df.py +154 -0
- scitex/pd/_from_xyz.py +71 -0
- scitex/pd/_ignore_SettingWithCopyWarning.py +34 -0
- scitex/pd/_melt_cols.py +81 -0
- scitex/pd/_merge_columns.py +221 -0
- scitex/pd/_mv.py +63 -0
- scitex/pd/_replace.py +62 -0
- scitex/pd/_round.py +93 -0
- scitex/pd/_slice.py +63 -0
- scitex/pd/_sort.py +91 -0
- scitex/pd/_to_numeric.py +53 -0
- scitex/pd/_to_xy.py +59 -0
- scitex/pd/_to_xyz.py +110 -0
- scitex/plt/__init__.py +36 -0
- scitex/plt/_subplots/_AxesWrapper.py +182 -0
- scitex/plt/_subplots/_AxisWrapper.py +249 -0
- scitex/plt/_subplots/_AxisWrapperMixins/_AdjustmentMixin.py +414 -0
- scitex/plt/_subplots/_AxisWrapperMixins/_MatplotlibPlotMixin.py +896 -0
- scitex/plt/_subplots/_AxisWrapperMixins/_SeabornMixin.py +368 -0
- scitex/plt/_subplots/_AxisWrapperMixins/_TrackingMixin.py +185 -0
- scitex/plt/_subplots/_AxisWrapperMixins/__init__.py +16 -0
- scitex/plt/_subplots/_FigWrapper.py +226 -0
- scitex/plt/_subplots/_SubplotsWrapper.py +171 -0
- scitex/plt/_subplots/__init__.py +111 -0
- scitex/plt/_subplots/_export_as_csv.py +232 -0
- scitex/plt/_subplots/_export_as_csv_formatters/__init__.py +61 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_bar.py +90 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_barh.py +49 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_boxplot.py +46 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_contour.py +39 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_errorbar.py +125 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_eventplot.py +72 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_fill.py +34 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_fill_between.py +36 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_hist.py +79 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_imshow.py +59 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_imshow2d.py +32 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot.py +79 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_box.py +75 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_conf_mat.py +64 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_ecdf.py +44 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_fillv.py +70 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_heatmap.py +66 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_image.py +95 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_joyplot.py +67 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_kde.py +52 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_line.py +46 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_mean_ci.py +46 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_mean_std.py +46 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_median_iqr.py +46 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_raster.py +44 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_rectangle.py +103 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_scatter_hist.py +82 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_shaded_line.py +58 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_violin.py +117 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_scatter.py +30 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_barplot.py +51 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_boxplot.py +93 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_heatmap.py +94 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_histplot.py +92 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_jointplot.py +65 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_kdeplot.py +59 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_lineplot.py +58 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_pairplot.py +45 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_scatterplot.py +70 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_stripplot.py +75 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_swarmplot.py +75 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_violinplot.py +155 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_violin.py +64 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_violinplot.py +77 -0
- scitex/plt/_subplots/_export_as_csv_formatters/test_formatters.py +210 -0
- scitex/plt/_subplots/_export_as_csv_formatters/verify_formatters.py +342 -0
- scitex/plt/_subplots/_export_as_csv_formatters.py +115 -0
- scitex/plt/_tpl.py +28 -0
- scitex/plt/ax/__init__.py +114 -0
- scitex/plt/ax/_plot/__init__.py +53 -0
- scitex/plt/ax/_plot/_plot_circular_hist.py +124 -0
- scitex/plt/ax/_plot/_plot_conf_mat.py +136 -0
- scitex/plt/ax/_plot/_plot_cube.py +57 -0
- scitex/plt/ax/_plot/_plot_ecdf.py +84 -0
- scitex/plt/ax/_plot/_plot_fillv.py +55 -0
- scitex/plt/ax/_plot/_plot_heatmap.py +266 -0
- scitex/plt/ax/_plot/_plot_image.py +94 -0
- scitex/plt/ax/_plot/_plot_joyplot.py +76 -0
- scitex/plt/ax/_plot/_plot_raster.py +172 -0
- scitex/plt/ax/_plot/_plot_rectangle.py +69 -0
- scitex/plt/ax/_plot/_plot_scatter_hist.py +133 -0
- scitex/plt/ax/_plot/_plot_shaded_line.py +142 -0
- scitex/plt/ax/_plot/_plot_statistical_shaded_line.py +221 -0
- scitex/plt/ax/_plot/_plot_violin.py +343 -0
- scitex/plt/ax/_style/__init__.py +38 -0
- scitex/plt/ax/_style/_add_marginal_ax.py +44 -0
- scitex/plt/ax/_style/_add_panel.py +92 -0
- scitex/plt/ax/_style/_extend.py +64 -0
- scitex/plt/ax/_style/_force_aspect.py +37 -0
- scitex/plt/ax/_style/_format_label.py +23 -0
- scitex/plt/ax/_style/_hide_spines.py +84 -0
- scitex/plt/ax/_style/_map_ticks.py +182 -0
- scitex/plt/ax/_style/_rotate_labels.py +215 -0
- scitex/plt/ax/_style/_sci_note.py +279 -0
- scitex/plt/ax/_style/_set_log_scale.py +299 -0
- scitex/plt/ax/_style/_set_meta.py +261 -0
- scitex/plt/ax/_style/_set_n_ticks.py +37 -0
- scitex/plt/ax/_style/_set_size.py +16 -0
- scitex/plt/ax/_style/_set_supxyt.py +116 -0
- scitex/plt/ax/_style/_set_ticks.py +276 -0
- scitex/plt/ax/_style/_set_xyt.py +121 -0
- scitex/plt/ax/_style/_share_axes.py +264 -0
- scitex/plt/ax/_style/_shift.py +139 -0
- scitex/plt/ax/_style/_show_spines.py +333 -0
- scitex/plt/color/_PARAMS.py +70 -0
- scitex/plt/color/__init__.py +52 -0
- scitex/plt/color/_add_hue_col.py +41 -0
- scitex/plt/color/_colors.py +205 -0
- scitex/plt/color/_get_colors_from_cmap.py +134 -0
- scitex/plt/color/_interpolate.py +29 -0
- scitex/plt/color/_vizualize_colors.py +54 -0
- scitex/plt/utils/__init__.py +44 -0
- scitex/plt/utils/_calc_bacc_from_conf_mat.py +46 -0
- scitex/plt/utils/_calc_nice_ticks.py +101 -0
- scitex/plt/utils/_close.py +68 -0
- scitex/plt/utils/_colorbar.py +96 -0
- scitex/plt/utils/_configure_mpl.py +295 -0
- scitex/plt/utils/_histogram_utils.py +132 -0
- scitex/plt/utils/_im2grid.py +70 -0
- scitex/plt/utils/_is_valid_axis.py +78 -0
- scitex/plt/utils/_mk_colorbar.py +65 -0
- scitex/plt/utils/_mk_patches.py +26 -0
- scitex/plt/utils/_scientific_captions.py +638 -0
- scitex/plt/utils/_scitex_config.py +223 -0
- scitex/reproduce/__init__.py +14 -0
- scitex/reproduce/_fix_seeds.py +45 -0
- scitex/reproduce/_gen_ID.py +55 -0
- scitex/reproduce/_gen_timestamp.py +35 -0
- scitex/res/__init__.py +5 -0
- scitex/resource/__init__.py +13 -0
- scitex/resource/_get_processor_usages.py +281 -0
- scitex/resource/_get_specs.py +280 -0
- scitex/resource/_log_processor_usages.py +190 -0
- scitex/resource/_utils/__init__.py +31 -0
- scitex/resource/_utils/_get_env_info.py +481 -0
- scitex/resource/limit_ram.py +33 -0
- scitex/scholar/__init__.py +24 -0
- scitex/scholar/_local_search.py +454 -0
- scitex/scholar/_paper.py +244 -0
- scitex/scholar/_pdf_downloader.py +325 -0
- scitex/scholar/_search.py +393 -0
- scitex/scholar/_vector_search.py +370 -0
- scitex/scholar/_web_sources.py +457 -0
- scitex/stats/__init__.py +31 -0
- scitex/stats/_calc_partial_corr.py +17 -0
- scitex/stats/_corr_test_multi.py +94 -0
- scitex/stats/_corr_test_wrapper.py +115 -0
- scitex/stats/_describe_wrapper.py +90 -0
- scitex/stats/_multiple_corrections.py +63 -0
- scitex/stats/_nan_stats.py +93 -0
- scitex/stats/_p2stars.py +116 -0
- scitex/stats/_p2stars_wrapper.py +56 -0
- scitex/stats/_statistical_tests.py +73 -0
- scitex/stats/desc/__init__.py +40 -0
- scitex/stats/desc/_describe.py +189 -0
- scitex/stats/desc/_nan.py +289 -0
- scitex/stats/desc/_real.py +94 -0
- scitex/stats/multiple/__init__.py +14 -0
- scitex/stats/multiple/_bonferroni_correction.py +72 -0
- scitex/stats/multiple/_fdr_correction.py +400 -0
- scitex/stats/multiple/_multicompair.py +28 -0
- scitex/stats/tests/__corr_test.py +277 -0
- scitex/stats/tests/__corr_test_multi.py +343 -0
- scitex/stats/tests/__corr_test_single.py +277 -0
- scitex/stats/tests/__init__.py +22 -0
- scitex/stats/tests/_brunner_munzel_test.py +192 -0
- scitex/stats/tests/_nocorrelation_test.py +28 -0
- scitex/stats/tests/_smirnov_grubbs.py +98 -0
- scitex/str/__init__.py +113 -0
- scitex/str/_clean_path.py +75 -0
- scitex/str/_color_text.py +52 -0
- scitex/str/_decapitalize.py +58 -0
- scitex/str/_factor_out_digits.py +281 -0
- scitex/str/_format_plot_text.py +498 -0
- scitex/str/_grep.py +48 -0
- scitex/str/_latex.py +155 -0
- scitex/str/_latex_fallback.py +471 -0
- scitex/str/_mask_api.py +39 -0
- scitex/str/_mask_api_key.py +8 -0
- scitex/str/_parse.py +158 -0
- scitex/str/_print_block.py +47 -0
- scitex/str/_print_debug.py +68 -0
- scitex/str/_printc.py +62 -0
- scitex/str/_readable_bytes.py +38 -0
- scitex/str/_remove_ansi.py +23 -0
- scitex/str/_replace.py +134 -0
- scitex/str/_search.py +125 -0
- scitex/str/_squeeze_space.py +36 -0
- scitex/tex/__init__.py +10 -0
- scitex/tex/_preview.py +103 -0
- scitex/tex/_to_vec.py +116 -0
- scitex/torch/__init__.py +18 -0
- scitex/torch/_apply_to.py +34 -0
- scitex/torch/_nan_funcs.py +77 -0
- scitex/types/_ArrayLike.py +44 -0
- scitex/types/_ColorLike.py +21 -0
- scitex/types/__init__.py +14 -0
- scitex/types/_is_listed_X.py +70 -0
- scitex/utils/__init__.py +22 -0
- scitex/utils/_compress_hdf5.py +116 -0
- scitex/utils/_email.py +120 -0
- scitex/utils/_grid.py +148 -0
- scitex/utils/_notify.py +247 -0
- scitex/utils/_search.py +121 -0
- scitex/web/__init__.py +38 -0
- scitex/web/_search_pubmed.py +438 -0
- scitex/web/_summarize_url.py +158 -0
- scitex-2.0.0.dist-info/METADATA +307 -0
- scitex-2.0.0.dist-info/RECORD +572 -0
- scitex-2.0.0.dist-info/WHEEL +6 -0
- scitex-2.0.0.dist-info/licenses/LICENSE +7 -0
- scitex-2.0.0.dist-info/top_level.txt +1 -0
scitex/gen/_symlink.py
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-02 13:29:31 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/gen/_symlink.py
|
|
5
|
+
|
|
6
|
+
import os
|
|
7
|
+
from ..str._color_text import color_text
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def symlink(tgt, src, force=False):
|
|
11
|
+
"""Create a symbolic link.
|
|
12
|
+
|
|
13
|
+
This function creates a symbolic link from the target to the source.
|
|
14
|
+
If the force parameter is True, it will remove any existing file at
|
|
15
|
+
the source path before creating the symlink.
|
|
16
|
+
|
|
17
|
+
Parameters
|
|
18
|
+
----------
|
|
19
|
+
tgt : str
|
|
20
|
+
The target path (the file or directory to be linked to).
|
|
21
|
+
src : str
|
|
22
|
+
The source path (where the symbolic link will be created).
|
|
23
|
+
force : bool, optional
|
|
24
|
+
If True, remove the existing file at the src path before creating
|
|
25
|
+
the symlink (default is False).
|
|
26
|
+
|
|
27
|
+
Returns
|
|
28
|
+
-------
|
|
29
|
+
None
|
|
30
|
+
|
|
31
|
+
Raises
|
|
32
|
+
------
|
|
33
|
+
OSError
|
|
34
|
+
If the symlink creation fails.
|
|
35
|
+
|
|
36
|
+
Example
|
|
37
|
+
-------
|
|
38
|
+
>>> symlink('/path/to/target', '/path/to/link')
|
|
39
|
+
>>> symlink('/path/to/target', '/path/to/existing_file', force=True)
|
|
40
|
+
"""
|
|
41
|
+
if force:
|
|
42
|
+
try:
|
|
43
|
+
os.remove(src)
|
|
44
|
+
except FileNotFoundError:
|
|
45
|
+
pass
|
|
46
|
+
|
|
47
|
+
# Calculate the relative path from src to tgt
|
|
48
|
+
src_dir = os.path.dirname(src)
|
|
49
|
+
relative_tgt = os.path.relpath(tgt, src_dir)
|
|
50
|
+
|
|
51
|
+
os.symlink(relative_tgt, src)
|
|
52
|
+
print(color_text(f"\nSymlink was created: {src} -> {relative_tgt}\n", c="yellow"))
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
# EOF
|
scitex/gen/_symlog.py
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!./env/bin/python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-07-06 07:16:38 (ywatanabe)"
|
|
4
|
+
# ./src/scitex/gen/_symlog.py
|
|
5
|
+
|
|
6
|
+
import numpy as np
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def symlog(x, linthresh=1.0):
|
|
10
|
+
"""
|
|
11
|
+
Apply a symmetric log transformation to the input data.
|
|
12
|
+
|
|
13
|
+
Parameters
|
|
14
|
+
----------
|
|
15
|
+
x : array-like
|
|
16
|
+
Input data to be transformed.
|
|
17
|
+
linthresh : float, optional
|
|
18
|
+
Range within which the transformation is linear. Defaults to 1.0.
|
|
19
|
+
|
|
20
|
+
Returns
|
|
21
|
+
-------
|
|
22
|
+
array-like
|
|
23
|
+
Symmetrically transformed data.
|
|
24
|
+
"""
|
|
25
|
+
sign_x = np.sign(x)
|
|
26
|
+
abs_x = np.abs(x)
|
|
27
|
+
return sign_x * (np.log1p(abs_x / linthresh))
|
scitex/gen/_tee.py
ADDED
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-02-15 00:02:15 (ywatanabe)"
|
|
4
|
+
# File: ./src/scitex/gen/_tee.py
|
|
5
|
+
|
|
6
|
+
THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/gen/_tee.py"
|
|
7
|
+
|
|
8
|
+
"""
|
|
9
|
+
Functionality:
|
|
10
|
+
* Redirects and logs standard output and error streams
|
|
11
|
+
* Filters progress bar outputs from stderr logging
|
|
12
|
+
* Maintains original stdout/stderr functionality while logging
|
|
13
|
+
Input:
|
|
14
|
+
* System stdout/stderr streams
|
|
15
|
+
* Output file paths for logging
|
|
16
|
+
Output:
|
|
17
|
+
* Wrapped stdout/stderr objects with logging capability
|
|
18
|
+
* Log files containing stdout and stderr outputs
|
|
19
|
+
Prerequisites:
|
|
20
|
+
* Python 3.6+
|
|
21
|
+
* scitex package for path handling and colored printing
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
"""Imports"""
|
|
25
|
+
import os as _os
|
|
26
|
+
import re
|
|
27
|
+
import sys
|
|
28
|
+
from typing import Any, List, TextIO
|
|
29
|
+
|
|
30
|
+
from ..str._clean_path import clean_path
|
|
31
|
+
from ..path import split
|
|
32
|
+
from ..str._printc import printc
|
|
33
|
+
|
|
34
|
+
"""Functions & Classes"""
|
|
35
|
+
# class Tee(object):
|
|
36
|
+
# """Duplicates output streams to both console and log files.
|
|
37
|
+
|
|
38
|
+
# Example
|
|
39
|
+
# -------
|
|
40
|
+
# >>> import sys
|
|
41
|
+
# >>> sys.stdout = Tee(sys.stdout, "stdout.txt")
|
|
42
|
+
# >>> sys.stderr = Tee(sys.stderr, "stderr.txt")
|
|
43
|
+
# >>> print("Hello") # Outputs to both console and stdout.txt
|
|
44
|
+
# >>> raise Exception("Error") # Outputs to both console and stderr.txt
|
|
45
|
+
# """
|
|
46
|
+
|
|
47
|
+
# def __init__(self, sys_stdout_or_stderr, spath):
|
|
48
|
+
# """
|
|
49
|
+
# Parameters
|
|
50
|
+
# ----------
|
|
51
|
+
# stream : TextIO
|
|
52
|
+
# Original output stream (sys.stdout or sys.stderr)
|
|
53
|
+
# log_path : str
|
|
54
|
+
# Path to log file
|
|
55
|
+
# """
|
|
56
|
+
# self._files = [sys_stdout_or_stderr, open(spath, "w")]
|
|
57
|
+
# self._is_stderr = sys_stdout_or_stderr is sys.stderr
|
|
58
|
+
|
|
59
|
+
# def __getattr__(self, attr, *args):
|
|
60
|
+
# return self._wrap(attr, *args)
|
|
61
|
+
|
|
62
|
+
# def _wrap(self, attr, *args):
|
|
63
|
+
# def g(*a, **kw):
|
|
64
|
+
# for f in self._files:
|
|
65
|
+
# if self._is_stderr and f is not sys.stderr:
|
|
66
|
+
# # Filter tqdm lines from log file
|
|
67
|
+
# msg = a[0] if a else ""
|
|
68
|
+
# if not re.match(r"^[\s]*[0-9]+%.*\[A*$", msg):
|
|
69
|
+
# res = getattr(f, attr, *args)(*a, **kw)
|
|
70
|
+
# else:
|
|
71
|
+
# res = getattr(f, attr, *args)(*a, **kw)
|
|
72
|
+
# return res
|
|
73
|
+
|
|
74
|
+
# return g
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class Tee:
|
|
78
|
+
def __init__(self, stream: TextIO, log_path: str) -> None:
|
|
79
|
+
self._stream = stream
|
|
80
|
+
try:
|
|
81
|
+
self._log_file = open(log_path, "w", buffering=1) # Line buffering
|
|
82
|
+
except Exception as e:
|
|
83
|
+
printc(f"Failed to open log file {log_path}: {e}", c="red")
|
|
84
|
+
self._log_file = None
|
|
85
|
+
self._is_stderr = stream is sys.stderr
|
|
86
|
+
|
|
87
|
+
def write(self, data: Any) -> None:
|
|
88
|
+
self._stream.write(data)
|
|
89
|
+
if self._log_file is not None:
|
|
90
|
+
if self._is_stderr:
|
|
91
|
+
if isinstance(data, str) and not re.match(
|
|
92
|
+
r"^[\s]*[0-9]+%.*\[A*$", data
|
|
93
|
+
):
|
|
94
|
+
self._log_file.write(data)
|
|
95
|
+
self._log_file.flush() # Ensure immediate write
|
|
96
|
+
else:
|
|
97
|
+
self._log_file.write(data)
|
|
98
|
+
self._log_file.flush() # Ensure immediate write
|
|
99
|
+
|
|
100
|
+
def flush(self) -> None:
|
|
101
|
+
self._stream.flush()
|
|
102
|
+
if self._log_file is not None:
|
|
103
|
+
self._log_file.flush()
|
|
104
|
+
|
|
105
|
+
def isatty(self) -> bool:
|
|
106
|
+
return self._stream.isatty()
|
|
107
|
+
|
|
108
|
+
def fileno(self) -> int:
|
|
109
|
+
return self._stream.fileno()
|
|
110
|
+
|
|
111
|
+
@property
|
|
112
|
+
def buffer(self):
|
|
113
|
+
return self._stream.buffer
|
|
114
|
+
|
|
115
|
+
def close(self):
|
|
116
|
+
"""Explicitly close the log file."""
|
|
117
|
+
if hasattr(self, "_log_file") and self._log_file is not None:
|
|
118
|
+
try:
|
|
119
|
+
self._log_file.flush()
|
|
120
|
+
self._log_file.close()
|
|
121
|
+
self._log_file = None # Prevent double-close
|
|
122
|
+
except Exception:
|
|
123
|
+
pass
|
|
124
|
+
|
|
125
|
+
def __del__(self):
|
|
126
|
+
# Only attempt cleanup if Python is not shutting down
|
|
127
|
+
# This prevents "Exception ignored" errors during interpreter shutdown
|
|
128
|
+
if hasattr(self, "_log_file") and self._log_file is not None:
|
|
129
|
+
try:
|
|
130
|
+
# Check if the file object is still valid
|
|
131
|
+
if hasattr(self._log_file, "closed") and not self._log_file.closed:
|
|
132
|
+
self.close()
|
|
133
|
+
except Exception:
|
|
134
|
+
# Silently ignore exceptions during cleanup
|
|
135
|
+
pass
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
# class Tee:
|
|
139
|
+
# def __init__(self, stream: TextIO, log_path: str) -> None:
|
|
140
|
+
# self._files: List[TextIO] = [stream, open(log_path, "w")]
|
|
141
|
+
# self._is_stderr: bool = stream is sys.stderr
|
|
142
|
+
# self._stream = stream
|
|
143
|
+
|
|
144
|
+
# def write(self, data: Any) -> None:
|
|
145
|
+
# for file in self._files:
|
|
146
|
+
# if hasattr(file, 'write'):
|
|
147
|
+
# if self._is_stderr and file is not sys.stderr:
|
|
148
|
+
# if isinstance(data, str) and not re.match(r"^[\s]*[0-9]+%.*\[A*$", data):
|
|
149
|
+
# file.write(data)
|
|
150
|
+
# else:
|
|
151
|
+
# file.write(data)
|
|
152
|
+
|
|
153
|
+
# def flush(self) -> None:
|
|
154
|
+
# for file in self._files:
|
|
155
|
+
# if hasattr(file, 'flush'):
|
|
156
|
+
# file.flush()
|
|
157
|
+
|
|
158
|
+
# def isatty(self) -> bool:
|
|
159
|
+
# return getattr(self._stream, 'isatty', lambda: False)()
|
|
160
|
+
|
|
161
|
+
# def fileno(self) -> int:
|
|
162
|
+
# """Delegate fileno to original stream for IPython compatibility"""
|
|
163
|
+
# return self._stream.fileno()
|
|
164
|
+
|
|
165
|
+
# @property
|
|
166
|
+
# def buffer(self):
|
|
167
|
+
# return getattr(self._stream, 'buffer', self._stream)
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
def tee(sys, sdir=None, verbose=True):
|
|
171
|
+
"""Redirects stdout and stderr to both console and log files.
|
|
172
|
+
|
|
173
|
+
Example
|
|
174
|
+
-------
|
|
175
|
+
>>> import sys
|
|
176
|
+
>>> sys.stdout, sys.stderr = tee(sys)
|
|
177
|
+
>>> print("abc") # stdout
|
|
178
|
+
>>> print(1 / 0) # stderr
|
|
179
|
+
|
|
180
|
+
Parameters
|
|
181
|
+
----------
|
|
182
|
+
sys_module : module
|
|
183
|
+
System module containing stdout and stderr
|
|
184
|
+
sdir : str, optional
|
|
185
|
+
Directory for log files
|
|
186
|
+
verbose : bool, default=True
|
|
187
|
+
Whether to print log file locations
|
|
188
|
+
|
|
189
|
+
Returns
|
|
190
|
+
-------
|
|
191
|
+
tuple[Any, Any]
|
|
192
|
+
Wrapped stdout and stderr objects
|
|
193
|
+
"""
|
|
194
|
+
import inspect
|
|
195
|
+
|
|
196
|
+
####################
|
|
197
|
+
## Determine sdir
|
|
198
|
+
## DO NOT MODIFY THIS
|
|
199
|
+
####################
|
|
200
|
+
if sdir is None:
|
|
201
|
+
THIS_FILE = inspect.stack()[1].filename
|
|
202
|
+
if "ipython" in THIS_FILE:
|
|
203
|
+
THIS_FILE = f"/tmp/{_os.getenv('USER')}.py"
|
|
204
|
+
sdir = clean_path(_os.path.splitext(THIS_FILE)[0] + "_out")
|
|
205
|
+
|
|
206
|
+
sdir = _os.path.join(sdir, "logs/")
|
|
207
|
+
_os.makedirs(sdir, exist_ok=True)
|
|
208
|
+
|
|
209
|
+
spath_stdout = sdir + "stdout.log"
|
|
210
|
+
spath_stderr = sdir + "stderr.log"
|
|
211
|
+
sys_stdout = Tee(sys.stdout, spath_stdout)
|
|
212
|
+
sys_stderr = Tee(sys.stderr, spath_stderr)
|
|
213
|
+
|
|
214
|
+
if verbose:
|
|
215
|
+
message = f"Standard output/error are being logged at:\n\t{spath_stdout}\n\t{spath_stderr}"
|
|
216
|
+
printc(message)
|
|
217
|
+
|
|
218
|
+
return sys_stdout, sys_stderr
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
main = tee
|
|
222
|
+
|
|
223
|
+
if __name__ == "__main__":
|
|
224
|
+
# # Argument Parser
|
|
225
|
+
import matplotlib.pyplot as plt
|
|
226
|
+
import scitex
|
|
227
|
+
|
|
228
|
+
# import argparse
|
|
229
|
+
# parser = argparse.ArgumentParser(description='')
|
|
230
|
+
# parser.add_argument('--var', '-v', type=int, default=1, help='')
|
|
231
|
+
# parser.add_argument('--flag', '-f', action='store_true', default=False, help='')
|
|
232
|
+
# args = parser.parse_args()
|
|
233
|
+
# Main
|
|
234
|
+
CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.gen.start(sys, plt, verbose=False)
|
|
235
|
+
main(sys, CONFIG["SDIR"])
|
|
236
|
+
scitex.gen.close(CONFIG, verbose=False, notify=False)
|
|
237
|
+
|
|
238
|
+
# EOF
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#!./env/bin/python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: 2024-05-12 21:02:21 (7)
|
|
4
|
+
# /sshx:ywatanabe@444:/home/ywatanabe/proj/scitex/src/scitex/gen/_title2spath.py
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def title2path(title):
|
|
8
|
+
"""
|
|
9
|
+
Convert a title (string or dictionary) to a path-friendly string.
|
|
10
|
+
|
|
11
|
+
Parameters
|
|
12
|
+
----------
|
|
13
|
+
title : str or dict
|
|
14
|
+
The input title to be converted.
|
|
15
|
+
|
|
16
|
+
Returns
|
|
17
|
+
-------
|
|
18
|
+
str
|
|
19
|
+
A path-friendly string derived from the input title.
|
|
20
|
+
"""
|
|
21
|
+
if isinstance(title, dict):
|
|
22
|
+
from scitex.dict import to_str
|
|
23
|
+
|
|
24
|
+
title = to_str(title)
|
|
25
|
+
|
|
26
|
+
path = title
|
|
27
|
+
|
|
28
|
+
patterns = [":", ";", "=", "[", "]"]
|
|
29
|
+
for pattern in patterns:
|
|
30
|
+
path = path.replace(pattern, "")
|
|
31
|
+
|
|
32
|
+
path = path.replace("_-_", "-")
|
|
33
|
+
path = path.replace(" ", "_")
|
|
34
|
+
|
|
35
|
+
while "__" in path:
|
|
36
|
+
path = path.replace("__", "_")
|
|
37
|
+
|
|
38
|
+
return path.lower()
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
# def title2path(title):
|
|
42
|
+
# if isinstance(title, dict):
|
|
43
|
+
# title = dict2str(title)
|
|
44
|
+
|
|
45
|
+
# path = title
|
|
46
|
+
|
|
47
|
+
# # Comma patterns
|
|
48
|
+
# patterns = [":", ";", "=", "[", "]"]
|
|
49
|
+
# for pp in patterns:
|
|
50
|
+
# path = path.replace(pp, "")
|
|
51
|
+
|
|
52
|
+
# # Exceptions
|
|
53
|
+
# path = path.replace("_-_", "-")
|
|
54
|
+
# path = path.replace(" ", "_")
|
|
55
|
+
|
|
56
|
+
# # Consective under scores
|
|
57
|
+
# for _ in range(10):
|
|
58
|
+
# path = path.replace("__", "_")
|
|
59
|
+
|
|
60
|
+
# return path.lower()
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
#!./env/bin/python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-04-24 15:05:34"
|
|
4
|
+
# Author: Yusuke Watanabe (ywata1989@gmail.com)
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
This script does XYZ.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
"""
|
|
13
|
+
Imports
|
|
14
|
+
"""
|
|
15
|
+
import sys
|
|
16
|
+
|
|
17
|
+
import matplotlib.pyplot as plt
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
"""
|
|
21
|
+
Config
|
|
22
|
+
"""
|
|
23
|
+
# CONFIG = scitex.gen.load_configs()
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
"""
|
|
27
|
+
Functions & Classes
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def title_case(text):
|
|
32
|
+
"""
|
|
33
|
+
Converts a string to title case while keeping certain prepositions, conjunctions, and articles in lowercase,
|
|
34
|
+
and ensuring words detected as potential acronyms (all uppercase) are fully capitalized.
|
|
35
|
+
|
|
36
|
+
Parameters:
|
|
37
|
+
- text (str): The text to convert to title case.
|
|
38
|
+
|
|
39
|
+
Returns:
|
|
40
|
+
- str: The converted text in title case with certain words in lowercase and potential acronyms fully capitalized.
|
|
41
|
+
|
|
42
|
+
Examples:
|
|
43
|
+
--------
|
|
44
|
+
print(title_case("welcome to the world of ai and using CPUs for gaming")) # Welcome to the World of AI and Using CPUs for Gaming
|
|
45
|
+
"""
|
|
46
|
+
# List of words to keep in lowercase
|
|
47
|
+
lowercase_words = [
|
|
48
|
+
"a",
|
|
49
|
+
"an",
|
|
50
|
+
"the",
|
|
51
|
+
"and",
|
|
52
|
+
"but",
|
|
53
|
+
"or",
|
|
54
|
+
"nor",
|
|
55
|
+
"at",
|
|
56
|
+
"by",
|
|
57
|
+
"to",
|
|
58
|
+
"in",
|
|
59
|
+
"with",
|
|
60
|
+
"of",
|
|
61
|
+
"on",
|
|
62
|
+
]
|
|
63
|
+
|
|
64
|
+
words = text.split()
|
|
65
|
+
final_words = []
|
|
66
|
+
for word in words:
|
|
67
|
+
# Check if the word is fully in uppercase and more than one character, suggesting an acronym
|
|
68
|
+
if word.isupper() and len(word) > 1:
|
|
69
|
+
final_words.append(word)
|
|
70
|
+
elif word.lower() in lowercase_words:
|
|
71
|
+
final_words.append(word.lower())
|
|
72
|
+
else:
|
|
73
|
+
final_words.append(word.capitalize())
|
|
74
|
+
return " ".join(final_words)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def main():
|
|
78
|
+
# Example usage:
|
|
79
|
+
text = "welcome to the world of ai and using CPUs for gaming"
|
|
80
|
+
print(title_case(text))
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
if __name__ == "__main__":
|
|
84
|
+
CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.gen.start(sys, plt, verbose=False)
|
|
85
|
+
main()
|
|
86
|
+
scitex.gen.close(CONFIG, verbose=False, notify=False)
|
|
87
|
+
|
|
88
|
+
# EOF
|
scitex/gen/_to_even.py
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-25 23:40:12 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/gen/_to_even.py
|
|
5
|
+
|
|
6
|
+
THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/gen/_to_even.py"
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def to_even(n):
|
|
10
|
+
"""Convert a number to the nearest even number less than or equal to itself.
|
|
11
|
+
|
|
12
|
+
Parameters
|
|
13
|
+
----------
|
|
14
|
+
n : int or float
|
|
15
|
+
The input number to be converted.
|
|
16
|
+
|
|
17
|
+
Returns
|
|
18
|
+
-------
|
|
19
|
+
int
|
|
20
|
+
The nearest even number less than or equal to the input.
|
|
21
|
+
|
|
22
|
+
Example
|
|
23
|
+
-------
|
|
24
|
+
>>> to_even(5)
|
|
25
|
+
4
|
|
26
|
+
>>> to_even(6)
|
|
27
|
+
6
|
|
28
|
+
>>> to_even(3.7)
|
|
29
|
+
2
|
|
30
|
+
>>> to_even(-2.3)
|
|
31
|
+
-4
|
|
32
|
+
>>> to_even(-0.1)
|
|
33
|
+
-2
|
|
34
|
+
"""
|
|
35
|
+
import math
|
|
36
|
+
|
|
37
|
+
# Handle integers directly to avoid float conversion issues with large numbers
|
|
38
|
+
# Note: bool is a subclass of int, so we need to exclude it
|
|
39
|
+
if isinstance(n, int) and not isinstance(n, bool):
|
|
40
|
+
if n % 2 == 0:
|
|
41
|
+
return int(n) # Ensure we return int, not bool
|
|
42
|
+
else:
|
|
43
|
+
return int(n - 1) # Ensure we return int, not bool
|
|
44
|
+
|
|
45
|
+
# Handle special float values
|
|
46
|
+
if isinstance(n, float):
|
|
47
|
+
if math.isnan(n):
|
|
48
|
+
raise ValueError("Cannot convert NaN to even")
|
|
49
|
+
if math.isinf(n):
|
|
50
|
+
raise OverflowError("Cannot convert infinity to even")
|
|
51
|
+
# Python can actually convert sys.float_info.max to int, so we don't need this check
|
|
52
|
+
# Only infinity truly can't be converted
|
|
53
|
+
|
|
54
|
+
# Try to handle custom objects with __int__ (but not float types)
|
|
55
|
+
if hasattr(n, '__int__') and not isinstance(n, (float, bool)):
|
|
56
|
+
try:
|
|
57
|
+
n_int = int(n)
|
|
58
|
+
if n_int % 2 == 0:
|
|
59
|
+
return int(n_int)
|
|
60
|
+
else:
|
|
61
|
+
return int(n_int - 1)
|
|
62
|
+
except:
|
|
63
|
+
pass
|
|
64
|
+
|
|
65
|
+
# Check for string type explicitly - raise TypeError
|
|
66
|
+
if isinstance(n, str):
|
|
67
|
+
raise TypeError(f"must be real number, not {type(n).__name__}")
|
|
68
|
+
|
|
69
|
+
# Convert to float for all other cases
|
|
70
|
+
try:
|
|
71
|
+
n_float = float(n)
|
|
72
|
+
except (TypeError, ValueError):
|
|
73
|
+
raise TypeError(f"must be real number, not {type(n).__name__}")
|
|
74
|
+
|
|
75
|
+
# Use floor for float values
|
|
76
|
+
floored = int(math.floor(n_float))
|
|
77
|
+
|
|
78
|
+
# If odd, subtract 1 to get the next lower even number
|
|
79
|
+
if floored % 2 != 0:
|
|
80
|
+
return int(floored - 1) # Ensure we return int, not bool
|
|
81
|
+
return int(floored) # Ensure we return int, not bool
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
# EOF
|
scitex/gen/_to_odd.py
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-25 23:40:22 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/gen/_to_odd.py
|
|
5
|
+
|
|
6
|
+
THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/gen/_to_odd.py"
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def to_odd(n):
|
|
10
|
+
"""Convert a number to the nearest odd number less than or equal to itself.
|
|
11
|
+
|
|
12
|
+
Parameters
|
|
13
|
+
----------
|
|
14
|
+
n : int or float
|
|
15
|
+
The input number to be converted.
|
|
16
|
+
|
|
17
|
+
Returns
|
|
18
|
+
-------
|
|
19
|
+
int
|
|
20
|
+
The nearest odd number less than or equal to the input.
|
|
21
|
+
|
|
22
|
+
Example
|
|
23
|
+
-------
|
|
24
|
+
>>> to_odd(6)
|
|
25
|
+
5
|
|
26
|
+
>>> to_odd(7)
|
|
27
|
+
7
|
|
28
|
+
>>> to_odd(5.8)
|
|
29
|
+
5
|
|
30
|
+
"""
|
|
31
|
+
return int(n) - ((int(n) + 1) % 2)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
# EOF
|
scitex/gen/_to_rank.py
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-02 13:05:47 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/gen/_to_rank.py
|
|
5
|
+
#!./env/bin/python3
|
|
6
|
+
# -*- coding: utf-8 -*-
|
|
7
|
+
# Time-stamp: "2024-08-29 22:10:06 (ywatanabe)"
|
|
8
|
+
# ./src/scitex/gen/data_processing/_to_rank.py
|
|
9
|
+
|
|
10
|
+
import torch
|
|
11
|
+
|
|
12
|
+
# from .._converters import
|
|
13
|
+
from ..decorators import torch_fn
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@torch_fn
|
|
17
|
+
def to_rank(tensor, method="average"):
|
|
18
|
+
sorted_tensor, indices = torch.sort(tensor)
|
|
19
|
+
ranks = torch.empty_like(tensor)
|
|
20
|
+
ranks[indices] = (
|
|
21
|
+
torch.arange(len(tensor), dtype=tensor.dtype, device=tensor.device) + 1
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
if method == "average":
|
|
25
|
+
ranks = ranks.float()
|
|
26
|
+
ties = torch.nonzero(sorted_tensor[1:] == sorted_tensor[:-1])
|
|
27
|
+
for i in range(len(ties)):
|
|
28
|
+
start = ties[i]
|
|
29
|
+
end = start + 1
|
|
30
|
+
while (
|
|
31
|
+
end < len(sorted_tensor) and sorted_tensor[end] == sorted_tensor[start]
|
|
32
|
+
):
|
|
33
|
+
end += 1
|
|
34
|
+
ranks[indices[start:end]] = ranks[indices[start:end]].mean()
|
|
35
|
+
|
|
36
|
+
return ranks
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# EOF
|
scitex/gen/_transpose.py
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#!./env/bin/python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-08-24 09:47:16 (ywatanabe)"
|
|
4
|
+
# ./src/scitex/gen/_transpose.py
|
|
5
|
+
|
|
6
|
+
from ..decorators import numpy_fn
|
|
7
|
+
import numpy as np
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@numpy_fn
|
|
11
|
+
def transpose(arr_like, src_dims, tgt_dims):
|
|
12
|
+
"""
|
|
13
|
+
Transpose an array-like object based on source and target dimensions.
|
|
14
|
+
|
|
15
|
+
Parameters
|
|
16
|
+
----------
|
|
17
|
+
arr_like : np.array
|
|
18
|
+
The input array to be transposed.
|
|
19
|
+
src_dims : np.array
|
|
20
|
+
List of dimension names in the source order.
|
|
21
|
+
tgt_dims : np.array
|
|
22
|
+
List of dimension names in the target order.
|
|
23
|
+
|
|
24
|
+
Returns
|
|
25
|
+
-------
|
|
26
|
+
np.array
|
|
27
|
+
The transposed array.
|
|
28
|
+
|
|
29
|
+
Raises
|
|
30
|
+
------
|
|
31
|
+
AssertionError
|
|
32
|
+
If source and target dimensions don't contain the same elements.
|
|
33
|
+
"""
|
|
34
|
+
assert set(src_dims) == set(
|
|
35
|
+
tgt_dims
|
|
36
|
+
), "Source and target dimensions must contain the same elements"
|
|
37
|
+
return arr_like.transpose(*[np.where(src_dims == dim)[0][0] for dim in tgt_dims])
|