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/_paste.py
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-03 02:13:54 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/gen/_paste.py
|
|
5
|
+
def paste():
|
|
6
|
+
import textwrap
|
|
7
|
+
|
|
8
|
+
import pyperclip
|
|
9
|
+
|
|
10
|
+
try:
|
|
11
|
+
clipboard_content = pyperclip.paste()
|
|
12
|
+
clipboard_content = textwrap.dedent(clipboard_content)
|
|
13
|
+
exec(clipboard_content)
|
|
14
|
+
except Exception as e:
|
|
15
|
+
print(f"Could not execute clipboard content: {e}")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
# EOF
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-10-13 18:53:04 (ywatanabe)"
|
|
4
|
+
# /home/yusukew/proj/scitex_repo/src/scitex/gen/_print_config.py
|
|
5
|
+
|
|
6
|
+
"""
|
|
7
|
+
1. Functionality:
|
|
8
|
+
- Prints configuration values from YAML files
|
|
9
|
+
2. Input:
|
|
10
|
+
- Configuration key (dot-separated for nested structures)
|
|
11
|
+
3. Output:
|
|
12
|
+
- Corresponding configuration value
|
|
13
|
+
4. Prerequisites:
|
|
14
|
+
- scitex package with load_configs function
|
|
15
|
+
|
|
16
|
+
Example:
|
|
17
|
+
python _print_config.py PATH.TITAN.MAT
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
import sys
|
|
22
|
+
import os
|
|
23
|
+
import argparse
|
|
24
|
+
from pprint import pprint
|
|
25
|
+
import sys
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def print_config(key):
|
|
29
|
+
|
|
30
|
+
CONFIG = scitex.io.load_configs()
|
|
31
|
+
|
|
32
|
+
if key is None:
|
|
33
|
+
print("Available configurations:")
|
|
34
|
+
pprint(CONFIG)
|
|
35
|
+
return
|
|
36
|
+
|
|
37
|
+
try:
|
|
38
|
+
keys = key.split(".")
|
|
39
|
+
value = CONFIG
|
|
40
|
+
for k in keys:
|
|
41
|
+
|
|
42
|
+
if isinstance(value, (dict, scitex.gen.utils._DotDict.DotDict)):
|
|
43
|
+
value = value.get(k)
|
|
44
|
+
|
|
45
|
+
elif isinstance(value, list):
|
|
46
|
+
try:
|
|
47
|
+
value = value[int(k)]
|
|
48
|
+
except (ValueError, IndexError):
|
|
49
|
+
value = None
|
|
50
|
+
|
|
51
|
+
elif isinstance(value, str):
|
|
52
|
+
break
|
|
53
|
+
|
|
54
|
+
else:
|
|
55
|
+
value = None
|
|
56
|
+
|
|
57
|
+
if value is None:
|
|
58
|
+
break
|
|
59
|
+
|
|
60
|
+
print(value)
|
|
61
|
+
|
|
62
|
+
except Exception as e:
|
|
63
|
+
print(f"Error: {e}")
|
|
64
|
+
print("Available configurations:")
|
|
65
|
+
pprint(value)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def print_config_main(args=None):
|
|
69
|
+
if args is None:
|
|
70
|
+
args = sys.argv[1:]
|
|
71
|
+
|
|
72
|
+
parser = argparse.ArgumentParser(description="Print configuration values")
|
|
73
|
+
parser.add_argument(
|
|
74
|
+
"key",
|
|
75
|
+
nargs="?",
|
|
76
|
+
default=None,
|
|
77
|
+
help="Configuration key (dot-separated for nested structures)",
|
|
78
|
+
)
|
|
79
|
+
parsed_args = parser.parse_args(args)
|
|
80
|
+
print_config(parsed_args.key)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
if __name__ == "__main__":
|
|
84
|
+
print_config_main()
|
scitex/gen/_shell.py
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-01-29 07:36:39 (ywatanabe)"
|
|
4
|
+
|
|
5
|
+
import os
|
|
6
|
+
import subprocess
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def run_shellscript(lpath_sh, *args):
|
|
10
|
+
# Check if the script is executable, if not, make it executable
|
|
11
|
+
if not os.access(lpath_sh, os.X_OK):
|
|
12
|
+
subprocess.run(["chmod", "+x", lpath_sh])
|
|
13
|
+
|
|
14
|
+
# Prepare the command with script path and arguments
|
|
15
|
+
command = [lpath_sh] + list(args)
|
|
16
|
+
|
|
17
|
+
# Run the shell script with arguments using run_shellcommand
|
|
18
|
+
return run_shellcommand(*command)
|
|
19
|
+
# return stdout, stderr, exit_code
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def run_shellcommand(command, *args):
|
|
23
|
+
# Prepare the command with additional arguments
|
|
24
|
+
full_command = [command] + list(args)
|
|
25
|
+
|
|
26
|
+
# Run the command
|
|
27
|
+
result = subprocess.run(
|
|
28
|
+
full_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
# Get the standard output and error
|
|
32
|
+
stdout = result.stdout
|
|
33
|
+
stderr = result.stderr
|
|
34
|
+
exit_code = result.returncode
|
|
35
|
+
|
|
36
|
+
# Check if the command ran successfully
|
|
37
|
+
if exit_code == 0:
|
|
38
|
+
print("Command executed successfully")
|
|
39
|
+
print("Output:", stdout)
|
|
40
|
+
else:
|
|
41
|
+
print("Command failed with error code:", exit_code)
|
|
42
|
+
print("Error:", stderr)
|
|
43
|
+
|
|
44
|
+
return {
|
|
45
|
+
"stdout": stdout,
|
|
46
|
+
"stderr": stderr,
|
|
47
|
+
"exit_code": exit_code,
|
|
48
|
+
}
|
scitex/gen/_src.py
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-06-13 22:44:28 (ywatanabe)"
|
|
4
|
+
# File: /ssh:sp:/home/ywatanabe/proj/SciTeX-Code/src/scitex/gen/_src.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
__FILE__ = (
|
|
8
|
+
"./src/scitex/gen/_src.py"
|
|
9
|
+
)
|
|
10
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
11
|
+
# ----------------------------------------
|
|
12
|
+
|
|
13
|
+
#!./env/bin/python3
|
|
14
|
+
|
|
15
|
+
import inspect
|
|
16
|
+
import subprocess
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def src(obj):
|
|
20
|
+
"""
|
|
21
|
+
Returns the source code of a given object using `less`.
|
|
22
|
+
Handles functions, classes, class instances, methods, and built-in functions.
|
|
23
|
+
"""
|
|
24
|
+
# If obj is an instance of a class, get the class of the instance.
|
|
25
|
+
if (
|
|
26
|
+
not inspect.isclass(obj)
|
|
27
|
+
and not inspect.isfunction(obj)
|
|
28
|
+
and not inspect.ismethod(obj)
|
|
29
|
+
):
|
|
30
|
+
obj = obj.__class__
|
|
31
|
+
|
|
32
|
+
try:
|
|
33
|
+
# Attempt to retrieve the source code
|
|
34
|
+
source_code = inspect.getsource(obj)
|
|
35
|
+
|
|
36
|
+
# Assuming scitex.gen.less is a placeholder for displaying text with `less`
|
|
37
|
+
# This part of the code is commented out as it seems to be a placeholder
|
|
38
|
+
# scitex.gen.less(source_code)
|
|
39
|
+
|
|
40
|
+
# Open a subprocess to use `less` for displaying the source code
|
|
41
|
+
process = subprocess.Popen(
|
|
42
|
+
["less"], stdin=subprocess.PIPE, encoding="utf8"
|
|
43
|
+
)
|
|
44
|
+
process.communicate(input=source_code)
|
|
45
|
+
if process.returncode != 0:
|
|
46
|
+
print(f"Process exited with return code {process.returncode}")
|
|
47
|
+
except OSError as e:
|
|
48
|
+
# Handle cases where the source code cannot be retrieved (e.g., built-in functions)
|
|
49
|
+
print(f"Cannot retrieve source code: {e}")
|
|
50
|
+
except TypeError as e:
|
|
51
|
+
# Handle cases where the object type is not supported
|
|
52
|
+
print(f"TypeError: {e}")
|
|
53
|
+
except Exception as e:
|
|
54
|
+
# Handle any other unexpected errors
|
|
55
|
+
print(f"Error: {e}")
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
# def src(obj):
|
|
59
|
+
# """
|
|
60
|
+
# Returns the source code of a given object using `less`.
|
|
61
|
+
# Handles functions, classes, class instances, and methods.
|
|
62
|
+
# """
|
|
63
|
+
# # If obj is an instance of a class, get the class of the instance.
|
|
64
|
+
# if (
|
|
65
|
+
# not inspect.isclass(obj)
|
|
66
|
+
# and not inspect.isfunction(obj)
|
|
67
|
+
# and not inspect.ismethod(obj)
|
|
68
|
+
# ):
|
|
69
|
+
# obj = obj.__class__
|
|
70
|
+
|
|
71
|
+
# try:
|
|
72
|
+
# # Attempt to retrieve the source code
|
|
73
|
+
# source_code = inspect.getsource(obj)
|
|
74
|
+
# scitex.gen.less(source_code)
|
|
75
|
+
|
|
76
|
+
# # # Open a subprocess to use `less` for displaying the source code
|
|
77
|
+
# # process = subprocess.Popen(
|
|
78
|
+
# # ["less"], stdin=subprocess.PIPE, encoding="utf8"
|
|
79
|
+
# # )
|
|
80
|
+
# # process.communicate(input=source_code)
|
|
81
|
+
# if process.returncode != 0:
|
|
82
|
+
# print(f"Process exited with return code {process.returncode}")
|
|
83
|
+
# except TypeError as e:
|
|
84
|
+
# # Handle cases where the object type is not supported
|
|
85
|
+
# print(f"TypeError: {e}")
|
|
86
|
+
# except Exception as e:
|
|
87
|
+
# # Handle any other unexpected errors
|
|
88
|
+
# print(f"Error: {e}")
|
|
89
|
+
|
|
90
|
+
# (YOUR AWESOME CODE)
|
|
91
|
+
|
|
92
|
+
if __name__ == "__main__":
|
|
93
|
+
import sys
|
|
94
|
+
|
|
95
|
+
import matplotlib.pyplot as plt
|
|
96
|
+
|
|
97
|
+
# Start
|
|
98
|
+
CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.gen.start(
|
|
99
|
+
sys, plt, verbose=False
|
|
100
|
+
)
|
|
101
|
+
import sys
|
|
102
|
+
|
|
103
|
+
# (YOUR AWESOME CODE)
|
|
104
|
+
# Close
|
|
105
|
+
scitex.gen.close(CONFIG, verbose=False, notify=False)
|
|
106
|
+
|
|
107
|
+
"""
|
|
108
|
+
/ssh:ywatanabe@444:/home/ywatanabe/proj/entrance/scitex/gen/_def.py
|
|
109
|
+
"""
|
|
110
|
+
|
|
111
|
+
# EOF
|
scitex/gen/_start.py
ADDED
|
@@ -0,0 +1,451 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-05-19 09:02:56 (ywatanabe)"
|
|
4
|
+
# File: /ssh:ywatanabe@sp:/home/ywatanabe/proj/scitex_repo/src/scitex/gen/_start.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
__FILE__ = (
|
|
8
|
+
"./src/scitex/gen/_start.py"
|
|
9
|
+
)
|
|
10
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
11
|
+
# ----------------------------------------
|
|
12
|
+
|
|
13
|
+
THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/gen/_start.py"
|
|
14
|
+
|
|
15
|
+
import inspect
|
|
16
|
+
import os as _os
|
|
17
|
+
import re
|
|
18
|
+
import sys as sys_module
|
|
19
|
+
from datetime import datetime
|
|
20
|
+
from pprint import pprint
|
|
21
|
+
from time import sleep
|
|
22
|
+
from typing import Any, Dict, Optional, Tuple
|
|
23
|
+
|
|
24
|
+
import matplotlib
|
|
25
|
+
import matplotlib.pyplot as plt_module
|
|
26
|
+
|
|
27
|
+
from ..dev._analyze_code_flow import analyze_code_flow
|
|
28
|
+
from ..dict import DotDict
|
|
29
|
+
from ..gen._tee import tee
|
|
30
|
+
from ..io import flush
|
|
31
|
+
from ..io._load import load
|
|
32
|
+
from ..io._load_configs import load_configs
|
|
33
|
+
from ..plt.utils._configure_mpl import configure_mpl
|
|
34
|
+
from ..reproduce._fix_seeds import fix_seeds
|
|
35
|
+
from ..reproduce._gen_ID import gen_ID
|
|
36
|
+
from ..str._clean_path import clean_path
|
|
37
|
+
from ..str._printc import printc as _printc
|
|
38
|
+
|
|
39
|
+
"""
|
|
40
|
+
Functionality:
|
|
41
|
+
* Initializes experimental environment with reproducible settings
|
|
42
|
+
* Sets up logging, random seeds, and matplotlib configurations
|
|
43
|
+
* Generates unique IDs for experiment tracking
|
|
44
|
+
Input:
|
|
45
|
+
* System modules (sys, os, random, numpy, torch)
|
|
46
|
+
* Matplotlib configuration parameters
|
|
47
|
+
* Directory paths and debugging flags
|
|
48
|
+
Output:
|
|
49
|
+
* Configured environment with unique ID
|
|
50
|
+
* Configured matplotlib instance
|
|
51
|
+
* Redirected stdout/stderr streams
|
|
52
|
+
Prerequisites:
|
|
53
|
+
* Python 3.6+
|
|
54
|
+
* matplotlib
|
|
55
|
+
* scitex package
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def _print_header(
|
|
60
|
+
ID: str,
|
|
61
|
+
PID: int,
|
|
62
|
+
file: str,
|
|
63
|
+
args: Any,
|
|
64
|
+
configs: Dict[str, Any],
|
|
65
|
+
verbose: bool = True,
|
|
66
|
+
) -> None:
|
|
67
|
+
"""Prints formatted header with scitex version, ID, and PID information.
|
|
68
|
+
|
|
69
|
+
Parameters
|
|
70
|
+
----------
|
|
71
|
+
ID : str
|
|
72
|
+
Unique identifier for the current run
|
|
73
|
+
PID : int
|
|
74
|
+
Process ID of the current Python process
|
|
75
|
+
configs : Dict[str, Any]
|
|
76
|
+
Configuration dictionary to display
|
|
77
|
+
verbose : bool, optional
|
|
78
|
+
Whether to print detailed information, by default True
|
|
79
|
+
"""
|
|
80
|
+
_printc(
|
|
81
|
+
(f"## scitex v{_get_scitex_version()}\n" f"## {ID} (PID: {PID})"), char="#"
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
_printc((f"{file}\n" f"{args}"), c="yellow", char="=")
|
|
85
|
+
sleep(1)
|
|
86
|
+
if verbose:
|
|
87
|
+
print(f"\n{'-'*40}\n")
|
|
88
|
+
pprint(configs)
|
|
89
|
+
print(f"\n{'-'*40}\n")
|
|
90
|
+
sleep(1)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def _initialize_env(IS_DEBUG: bool) -> Tuple[str, int]:
|
|
94
|
+
"""Initialize environment with ID and PID.
|
|
95
|
+
|
|
96
|
+
Parameters
|
|
97
|
+
----------
|
|
98
|
+
IS_DEBUG : bool
|
|
99
|
+
Debug mode flag
|
|
100
|
+
|
|
101
|
+
Returns
|
|
102
|
+
-------
|
|
103
|
+
tuple
|
|
104
|
+
(ID, PID) - Unique identifier and Process ID
|
|
105
|
+
"""
|
|
106
|
+
ID = gen_ID(N=4) if not IS_DEBUG else "DEBUG_" + gen_ID(N=4)
|
|
107
|
+
PID = _os.getpid()
|
|
108
|
+
return ID, PID
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def _setup_configs(
|
|
112
|
+
IS_DEBUG: bool,
|
|
113
|
+
ID: str,
|
|
114
|
+
PID: int,
|
|
115
|
+
file: str,
|
|
116
|
+
sdir: str,
|
|
117
|
+
relative_sdir: str,
|
|
118
|
+
verbose: bool,
|
|
119
|
+
) -> Dict[str, Any]:
|
|
120
|
+
"""Setup configuration dictionary with basic parameters.
|
|
121
|
+
|
|
122
|
+
Parameters
|
|
123
|
+
----------
|
|
124
|
+
IS_DEBUG : bool
|
|
125
|
+
Debug mode flag
|
|
126
|
+
ID : str
|
|
127
|
+
Unique identifier
|
|
128
|
+
PID : int
|
|
129
|
+
Process ID
|
|
130
|
+
sdir : str
|
|
131
|
+
Save directory path
|
|
132
|
+
relative_sdir : str
|
|
133
|
+
Relative save directory path
|
|
134
|
+
verbose : bool
|
|
135
|
+
Verbosity flag
|
|
136
|
+
|
|
137
|
+
Returns
|
|
138
|
+
-------
|
|
139
|
+
dict
|
|
140
|
+
Configuration dictionary
|
|
141
|
+
"""
|
|
142
|
+
|
|
143
|
+
CONFIGS = load_configs(IS_DEBUG).to_dict()
|
|
144
|
+
CONFIGS.update(
|
|
145
|
+
{
|
|
146
|
+
"ID": ID,
|
|
147
|
+
"PID": PID,
|
|
148
|
+
"START_TIME": datetime.now(),
|
|
149
|
+
"FILE": file,
|
|
150
|
+
"SDIR": sdir,
|
|
151
|
+
"REL_SDIR": relative_sdir,
|
|
152
|
+
}
|
|
153
|
+
)
|
|
154
|
+
return CONFIGS
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def _setup_matplotlib(
|
|
158
|
+
plt: plt_module = None, agg: bool = False, **mpl_kwargs: Any
|
|
159
|
+
) -> Tuple[Any, Optional[Dict[str, Any]]]:
|
|
160
|
+
"""Configure matplotlib settings.
|
|
161
|
+
|
|
162
|
+
Parameters
|
|
163
|
+
----------
|
|
164
|
+
plt : module
|
|
165
|
+
Matplotlib.pyplot module
|
|
166
|
+
agg : bool
|
|
167
|
+
Whether to use Agg backend
|
|
168
|
+
**mpl_kwargs : dict
|
|
169
|
+
Additional matplotlib configuration parameters
|
|
170
|
+
|
|
171
|
+
Returns
|
|
172
|
+
-------
|
|
173
|
+
tuple
|
|
174
|
+
(plt, CC) - Configured pyplot module and color cycle
|
|
175
|
+
"""
|
|
176
|
+
if plt is not None:
|
|
177
|
+
plt.close("all")
|
|
178
|
+
plt, CC = configure_mpl(plt, **mpl_kwargs)
|
|
179
|
+
CC["gray"] = CC["grey"]
|
|
180
|
+
if agg:
|
|
181
|
+
matplotlib.use("Agg")
|
|
182
|
+
return plt, CC
|
|
183
|
+
return plt, None
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
def start(
|
|
187
|
+
sys: sys_module = None,
|
|
188
|
+
plt: plt_module = None,
|
|
189
|
+
file: Optional[str] = None,
|
|
190
|
+
sdir: Optional[str] = None,
|
|
191
|
+
sdir_suffix: Optional[str] = None,
|
|
192
|
+
args: Optional[Any] = None,
|
|
193
|
+
os: Optional[Any] = None,
|
|
194
|
+
random: Optional[Any] = None,
|
|
195
|
+
np: Optional[Any] = None,
|
|
196
|
+
torch: Optional[Any] = None,
|
|
197
|
+
seed: int = 42,
|
|
198
|
+
agg: bool = False,
|
|
199
|
+
fig_size_mm: Tuple[int, int] = (160, 100),
|
|
200
|
+
fig_scale: float = 1.0,
|
|
201
|
+
dpi_display: int = 100,
|
|
202
|
+
dpi_save: int = 300,
|
|
203
|
+
fontsize="small",
|
|
204
|
+
autolayout=True,
|
|
205
|
+
show_execution_flow=False,
|
|
206
|
+
# font_size_base: int = 10,
|
|
207
|
+
# font_size_title: int = 10,
|
|
208
|
+
# font_size_axis_label: int = 8,
|
|
209
|
+
# font_size_tick_label: int = 7,
|
|
210
|
+
# font_size_legend: int = 6,
|
|
211
|
+
hide_top_right_spines: bool = True,
|
|
212
|
+
alpha: float = 0.9,
|
|
213
|
+
line_width: float = 1.0,
|
|
214
|
+
clear_logs: bool = False,
|
|
215
|
+
verbose: bool = True,
|
|
216
|
+
) -> Tuple[DotDict, Any, Any, Any, Optional[Dict[str, Any]]]:
|
|
217
|
+
"""Initialize experiment environment with reproducibility settings.
|
|
218
|
+
|
|
219
|
+
Parameters
|
|
220
|
+
----------
|
|
221
|
+
sys : module, optional
|
|
222
|
+
Python sys module for I/O redirection
|
|
223
|
+
plt : module, optional
|
|
224
|
+
Matplotlib pyplot module for plotting configuration
|
|
225
|
+
sdir : str, optional
|
|
226
|
+
Save directory path. If None, automatically generated
|
|
227
|
+
sdir_suffix : str, optional
|
|
228
|
+
Suffix to append to save directory
|
|
229
|
+
verbose : bool, default=True
|
|
230
|
+
Whether to print detailed information
|
|
231
|
+
args : object, optional
|
|
232
|
+
Command line arguments or configuration object
|
|
233
|
+
os, random, np, torch : modules, optional
|
|
234
|
+
Modules for random seed fixing
|
|
235
|
+
seed : int, default=42
|
|
236
|
+
Random seed for reproducibility
|
|
237
|
+
agg : bool, default=False
|
|
238
|
+
Whether to use matplotlib Agg backend
|
|
239
|
+
fig_size_mm : tuple, default=(160, 100)
|
|
240
|
+
Figure size in millimeters
|
|
241
|
+
fig_scale : float, default=1.0
|
|
242
|
+
Scale factor for figure size
|
|
243
|
+
dpi_display, dpi_save : int
|
|
244
|
+
DPI for display and saving
|
|
245
|
+
font_size_* : int
|
|
246
|
+
Various font size settings
|
|
247
|
+
hide_top_right_spines : bool, default=True
|
|
248
|
+
Whether to hide top and right spines
|
|
249
|
+
alpha : float, default=0.9
|
|
250
|
+
Default alpha value for plots
|
|
251
|
+
line_width : float, default=0.5
|
|
252
|
+
Default line width for plots
|
|
253
|
+
clear_logs : bool, default=False
|
|
254
|
+
Whether to clear existing log directory
|
|
255
|
+
|
|
256
|
+
Returns
|
|
257
|
+
-------
|
|
258
|
+
tuple
|
|
259
|
+
(CONFIGS, stdout, stderr, plt: Any = None, CC)
|
|
260
|
+
- CONFIGS: Configuration dictionary
|
|
261
|
+
- stdout, stderr: Redirected output streams
|
|
262
|
+
- plt: Configured matplotlib.pyplot module
|
|
263
|
+
- CC: Color cycle dictionary
|
|
264
|
+
"""
|
|
265
|
+
IS_DEBUG = _get_debug_mode()
|
|
266
|
+
ID, PID = _initialize_env(IS_DEBUG)
|
|
267
|
+
|
|
268
|
+
########################################
|
|
269
|
+
# Defines SDIR (DO NOT MODIFY THIS SECTION)
|
|
270
|
+
########################################
|
|
271
|
+
if sdir is None:
|
|
272
|
+
# Define __file__
|
|
273
|
+
if file:
|
|
274
|
+
caller_file = file
|
|
275
|
+
else:
|
|
276
|
+
caller_file = inspect.stack()[1].filename
|
|
277
|
+
if "ipython" in __file__:
|
|
278
|
+
caller_file = f"/tmp/{_os.getenv('USER')}.py"
|
|
279
|
+
|
|
280
|
+
# Convert to absolute path if relative
|
|
281
|
+
if not _os.path.isabs(caller_file):
|
|
282
|
+
caller_file = _os.path.abspath(caller_file)
|
|
283
|
+
|
|
284
|
+
# Define sdir
|
|
285
|
+
sdir = clean_path(
|
|
286
|
+
_os.path.splitext(caller_file)[0] + f"_out/RUNNING/{ID}/"
|
|
287
|
+
)
|
|
288
|
+
|
|
289
|
+
# Optional
|
|
290
|
+
if sdir_suffix:
|
|
291
|
+
sdir = sdir[:-1] + f"-{sdir_suffix}/"
|
|
292
|
+
|
|
293
|
+
if clear_logs:
|
|
294
|
+
_clear_python_log_dir(sdir + caller_file + "/")
|
|
295
|
+
_os.makedirs(sdir, exist_ok=True)
|
|
296
|
+
relative_sdir = _simplify_relative_path(sdir)
|
|
297
|
+
########################################
|
|
298
|
+
|
|
299
|
+
# Setup configs after having all necessary parameters
|
|
300
|
+
CONFIGS = _setup_configs(
|
|
301
|
+
IS_DEBUG, ID, PID, file, sdir, relative_sdir, verbose
|
|
302
|
+
)
|
|
303
|
+
|
|
304
|
+
# Logging
|
|
305
|
+
if sys is not None:
|
|
306
|
+
flush(sys)
|
|
307
|
+
sys.stdout, sys.stderr = tee(sys, sdir=sdir, verbose=verbose)
|
|
308
|
+
CONFIGS["sys"] = sys
|
|
309
|
+
|
|
310
|
+
# Random Seeds
|
|
311
|
+
fix_seeds(
|
|
312
|
+
os=os, random=random, np=np, torch=torch, seed=seed, verbose=verbose
|
|
313
|
+
)
|
|
314
|
+
|
|
315
|
+
# Matplotlib configurations
|
|
316
|
+
plt, CC = _setup_matplotlib(
|
|
317
|
+
plt,
|
|
318
|
+
agg,
|
|
319
|
+
fig_size_mm=fig_size_mm,
|
|
320
|
+
fig_scale=fig_scale,
|
|
321
|
+
dpi_display=dpi_display,
|
|
322
|
+
dpi_save=dpi_save,
|
|
323
|
+
hide_top_right_spines=hide_top_right_spines,
|
|
324
|
+
alpha=alpha,
|
|
325
|
+
line_width=line_width,
|
|
326
|
+
fontsize=fontsize,
|
|
327
|
+
autolayout=autolayout,
|
|
328
|
+
# font_size_base=font_size_base,
|
|
329
|
+
# font_size_title=font_size_title,
|
|
330
|
+
# font_size_axis_label=font_size_axis_label,
|
|
331
|
+
# font_size_tick_label=font_size_tick_label,
|
|
332
|
+
# font_size_legend=font_size_legend,
|
|
333
|
+
verbose=verbose,
|
|
334
|
+
)
|
|
335
|
+
|
|
336
|
+
# Adds argument-parsed variables
|
|
337
|
+
if args is not None:
|
|
338
|
+
CONFIGS["ARGS"] = vars(args) if hasattr(args, "__dict__") else args
|
|
339
|
+
|
|
340
|
+
CONFIGS = DotDict(CONFIGS)
|
|
341
|
+
|
|
342
|
+
_print_header(ID, PID, file, args, CONFIGS, verbose)
|
|
343
|
+
|
|
344
|
+
if show_execution_flow:
|
|
345
|
+
structure = analyze_code_flow(file)
|
|
346
|
+
_printc(structure)
|
|
347
|
+
|
|
348
|
+
# Return appropriate values based on whether sys was provided
|
|
349
|
+
if sys is not None:
|
|
350
|
+
return CONFIGS, sys.stdout, sys.stderr, plt, CC
|
|
351
|
+
else:
|
|
352
|
+
return CONFIGS, None, None, plt, CC
|
|
353
|
+
|
|
354
|
+
|
|
355
|
+
def _simplify_relative_path(sdir: str) -> str:
|
|
356
|
+
"""
|
|
357
|
+
Simplify the relative path by removing specific patterns.
|
|
358
|
+
|
|
359
|
+
Example
|
|
360
|
+
-------
|
|
361
|
+
sdir = '/home/user/scripts/memory-load/distance_between_gs_stats/RUNNING/2024Y-09M-12D-02h44m40s_GlBZ'
|
|
362
|
+
simplified_path = simplify_relative_path(sdir)
|
|
363
|
+
print(simplified_path)
|
|
364
|
+
# Output: './memory-load/distance_between_gs_stats/'
|
|
365
|
+
|
|
366
|
+
Parameters
|
|
367
|
+
----------
|
|
368
|
+
sdir : str
|
|
369
|
+
The directory path to simplify
|
|
370
|
+
|
|
371
|
+
Returns
|
|
372
|
+
-------
|
|
373
|
+
str
|
|
374
|
+
Simplified relative path
|
|
375
|
+
"""
|
|
376
|
+
base_path = _os.getcwd()
|
|
377
|
+
relative_sdir = _os.path.relpath(sdir, base_path) if base_path else sdir
|
|
378
|
+
simplified_path = relative_sdir.replace("scripts/", "./").replace(
|
|
379
|
+
"RUNNING/", ""
|
|
380
|
+
)
|
|
381
|
+
# Remove date-time pattern and random string
|
|
382
|
+
simplified_path = re.sub(
|
|
383
|
+
r"\d{4}Y-\d{2}M-\d{2}D-\d{2}h\d{2}m\d{2}s_\w+/?$", "", simplified_path
|
|
384
|
+
)
|
|
385
|
+
return simplified_path
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
def _get_debug_mode() -> bool:
|
|
389
|
+
# Debug mode check
|
|
390
|
+
try:
|
|
391
|
+
IS_DEBUG_PATH = "./config/IS_DEBUG.yaml"
|
|
392
|
+
if _os.path.exists(IS_DEBUG_PATH):
|
|
393
|
+
IS_DEBUG = load(IS_DEBUG_PATH).get("IS_DEBUG", False)
|
|
394
|
+
if IS_DEBUG == "true":
|
|
395
|
+
IS_DEBUG = True
|
|
396
|
+
else:
|
|
397
|
+
IS_DEBUG = False
|
|
398
|
+
|
|
399
|
+
except Exception as e:
|
|
400
|
+
print(e)
|
|
401
|
+
IS_DEBUG = False
|
|
402
|
+
return IS_DEBUG
|
|
403
|
+
|
|
404
|
+
|
|
405
|
+
def _clear_python_log_dir(log_dir: str) -> None:
|
|
406
|
+
try:
|
|
407
|
+
if _os.path.exists(log_dir):
|
|
408
|
+
_os.system(f"rm -rf {log_dir}")
|
|
409
|
+
except Exception as e:
|
|
410
|
+
print(f"Failed to clear directory {log_dir}: {e}")
|
|
411
|
+
|
|
412
|
+
|
|
413
|
+
def _get_scitex_version() -> str:
|
|
414
|
+
"""Gets scitex version"""
|
|
415
|
+
try:
|
|
416
|
+
import scitex
|
|
417
|
+
|
|
418
|
+
return scitex.__version__
|
|
419
|
+
except Exception as e:
|
|
420
|
+
print(e)
|
|
421
|
+
return "(not found)"
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
if __name__ == "__main__":
|
|
425
|
+
import os
|
|
426
|
+
import sys
|
|
427
|
+
|
|
428
|
+
import matplotlib.pyplot as plt
|
|
429
|
+
import scitex
|
|
430
|
+
|
|
431
|
+
# Config
|
|
432
|
+
CONFIG = scitex.io.load_configs()
|
|
433
|
+
|
|
434
|
+
# Functions
|
|
435
|
+
# Your awesome code here :)
|
|
436
|
+
|
|
437
|
+
if __name__ == "__main__":
|
|
438
|
+
# Start
|
|
439
|
+
CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.gen.start(sys, plt)
|
|
440
|
+
|
|
441
|
+
# Your awesome code here :)
|
|
442
|
+
|
|
443
|
+
# Close
|
|
444
|
+
scitex.gen.close(CONFIG)
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
"""
|
|
448
|
+
/home/ywatanabe/proj/entrance/scitex/gen/_start.py
|
|
449
|
+
"""
|
|
450
|
+
|
|
451
|
+
# EOF
|