scitex 2.0.0__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- scitex/__init__.py +73 -0
- scitex/__main__.py +89 -0
- scitex/__version__.py +14 -0
- scitex/_sh.py +59 -0
- scitex/ai/_LearningCurveLogger.py +583 -0
- scitex/ai/__Classifiers.py +101 -0
- scitex/ai/__init__.py +55 -0
- scitex/ai/_gen_ai/_Anthropic.py +173 -0
- scitex/ai/_gen_ai/_BaseGenAI.py +336 -0
- scitex/ai/_gen_ai/_DeepSeek.py +175 -0
- scitex/ai/_gen_ai/_Google.py +161 -0
- scitex/ai/_gen_ai/_Groq.py +97 -0
- scitex/ai/_gen_ai/_Llama.py +142 -0
- scitex/ai/_gen_ai/_OpenAI.py +230 -0
- scitex/ai/_gen_ai/_PARAMS.py +565 -0
- scitex/ai/_gen_ai/_Perplexity.py +191 -0
- scitex/ai/_gen_ai/__init__.py +32 -0
- scitex/ai/_gen_ai/_calc_cost.py +78 -0
- scitex/ai/_gen_ai/_format_output_func.py +183 -0
- scitex/ai/_gen_ai/_genai_factory.py +71 -0
- scitex/ai/act/__init__.py +8 -0
- scitex/ai/act/_define.py +11 -0
- scitex/ai/classification/__init__.py +7 -0
- scitex/ai/classification/classification_reporter.py +1137 -0
- scitex/ai/classification/classifier_server.py +131 -0
- scitex/ai/classification/classifiers.py +101 -0
- scitex/ai/classification_reporter.py +1161 -0
- scitex/ai/classifier_server.py +131 -0
- scitex/ai/clustering/__init__.py +11 -0
- scitex/ai/clustering/_pca.py +115 -0
- scitex/ai/clustering/_umap.py +376 -0
- scitex/ai/early_stopping.py +149 -0
- scitex/ai/feature_extraction/__init__.py +56 -0
- scitex/ai/feature_extraction/vit.py +148 -0
- scitex/ai/genai/__init__.py +277 -0
- scitex/ai/genai/anthropic.py +177 -0
- scitex/ai/genai/anthropic_provider.py +320 -0
- scitex/ai/genai/anthropic_refactored.py +109 -0
- scitex/ai/genai/auth_manager.py +200 -0
- scitex/ai/genai/base_genai.py +336 -0
- scitex/ai/genai/base_provider.py +291 -0
- scitex/ai/genai/calc_cost.py +78 -0
- scitex/ai/genai/chat_history.py +307 -0
- scitex/ai/genai/cost_tracker.py +276 -0
- scitex/ai/genai/deepseek.py +188 -0
- scitex/ai/genai/deepseek_provider.py +251 -0
- scitex/ai/genai/format_output_func.py +183 -0
- scitex/ai/genai/genai_factory.py +71 -0
- scitex/ai/genai/google.py +169 -0
- scitex/ai/genai/google_provider.py +228 -0
- scitex/ai/genai/groq.py +104 -0
- scitex/ai/genai/groq_provider.py +248 -0
- scitex/ai/genai/image_processor.py +250 -0
- scitex/ai/genai/llama.py +155 -0
- scitex/ai/genai/llama_provider.py +214 -0
- scitex/ai/genai/mock_provider.py +127 -0
- scitex/ai/genai/model_registry.py +304 -0
- scitex/ai/genai/openai.py +230 -0
- scitex/ai/genai/openai_provider.py +293 -0
- scitex/ai/genai/params.py +565 -0
- scitex/ai/genai/perplexity.py +202 -0
- scitex/ai/genai/perplexity_provider.py +205 -0
- scitex/ai/genai/provider_base.py +302 -0
- scitex/ai/genai/provider_factory.py +370 -0
- scitex/ai/genai/response_handler.py +235 -0
- scitex/ai/layer/_Pass.py +21 -0
- scitex/ai/layer/__init__.py +10 -0
- scitex/ai/layer/_switch.py +8 -0
- scitex/ai/loss/_L1L2Losses.py +34 -0
- scitex/ai/loss/__init__.py +12 -0
- scitex/ai/loss/multi_task_loss.py +47 -0
- scitex/ai/metrics/__init__.py +9 -0
- scitex/ai/metrics/_bACC.py +51 -0
- scitex/ai/metrics/silhoute_score_block.py +496 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/__init__.py +0 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/__init__.py +3 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/ranger.py +207 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/ranger2020.py +238 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/ranger913A.py +215 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/ranger/rangerqh.py +184 -0
- scitex/ai/optim/Ranger_Deep_Learning_Optimizer/setup.py +24 -0
- scitex/ai/optim/__init__.py +13 -0
- scitex/ai/optim/_get_set.py +31 -0
- scitex/ai/optim/_optimizers.py +71 -0
- scitex/ai/plt/__init__.py +21 -0
- scitex/ai/plt/_conf_mat.py +592 -0
- scitex/ai/plt/_learning_curve.py +194 -0
- scitex/ai/plt/_optuna_study.py +111 -0
- scitex/ai/plt/aucs/__init__.py +2 -0
- scitex/ai/plt/aucs/example.py +60 -0
- scitex/ai/plt/aucs/pre_rec_auc.py +223 -0
- scitex/ai/plt/aucs/roc_auc.py +246 -0
- scitex/ai/sampling/undersample.py +29 -0
- scitex/ai/sk/__init__.py +11 -0
- scitex/ai/sk/_clf.py +58 -0
- scitex/ai/sk/_to_sktime.py +100 -0
- scitex/ai/sklearn/__init__.py +26 -0
- scitex/ai/sklearn/clf.py +58 -0
- scitex/ai/sklearn/to_sktime.py +100 -0
- scitex/ai/training/__init__.py +7 -0
- scitex/ai/training/early_stopping.py +150 -0
- scitex/ai/training/learning_curve_logger.py +555 -0
- scitex/ai/utils/__init__.py +22 -0
- scitex/ai/utils/_check_params.py +50 -0
- scitex/ai/utils/_default_dataset.py +46 -0
- scitex/ai/utils/_format_samples_for_sktime.py +26 -0
- scitex/ai/utils/_label_encoder.py +134 -0
- scitex/ai/utils/_merge_labels.py +22 -0
- scitex/ai/utils/_sliding_window_data_augmentation.py +11 -0
- scitex/ai/utils/_under_sample.py +51 -0
- scitex/ai/utils/_verify_n_gpus.py +16 -0
- scitex/ai/utils/grid_search.py +148 -0
- scitex/context/__init__.py +9 -0
- scitex/context/_suppress_output.py +38 -0
- scitex/db/_BaseMixins/_BaseBackupMixin.py +30 -0
- scitex/db/_BaseMixins/_BaseBatchMixin.py +31 -0
- scitex/db/_BaseMixins/_BaseBlobMixin.py +81 -0
- scitex/db/_BaseMixins/_BaseConnectionMixin.py +43 -0
- scitex/db/_BaseMixins/_BaseImportExportMixin.py +39 -0
- scitex/db/_BaseMixins/_BaseIndexMixin.py +29 -0
- scitex/db/_BaseMixins/_BaseMaintenanceMixin.py +33 -0
- scitex/db/_BaseMixins/_BaseQueryMixin.py +52 -0
- scitex/db/_BaseMixins/_BaseRowMixin.py +32 -0
- scitex/db/_BaseMixins/_BaseSchemaMixin.py +44 -0
- scitex/db/_BaseMixins/_BaseTableMixin.py +66 -0
- scitex/db/_BaseMixins/_BaseTransactionMixin.py +52 -0
- scitex/db/_BaseMixins/__init__.py +30 -0
- scitex/db/_PostgreSQL.py +126 -0
- scitex/db/_PostgreSQLMixins/_BackupMixin.py +166 -0
- scitex/db/_PostgreSQLMixins/_BatchMixin.py +82 -0
- scitex/db/_PostgreSQLMixins/_BlobMixin.py +231 -0
- scitex/db/_PostgreSQLMixins/_ConnectionMixin.py +92 -0
- scitex/db/_PostgreSQLMixins/_ImportExportMixin.py +59 -0
- scitex/db/_PostgreSQLMixins/_IndexMixin.py +64 -0
- scitex/db/_PostgreSQLMixins/_MaintenanceMixin.py +175 -0
- scitex/db/_PostgreSQLMixins/_QueryMixin.py +108 -0
- scitex/db/_PostgreSQLMixins/_RowMixin.py +75 -0
- scitex/db/_PostgreSQLMixins/_SchemaMixin.py +126 -0
- scitex/db/_PostgreSQLMixins/_TableMixin.py +176 -0
- scitex/db/_PostgreSQLMixins/_TransactionMixin.py +57 -0
- scitex/db/_PostgreSQLMixins/__init__.py +34 -0
- scitex/db/_SQLite3.py +2136 -0
- scitex/db/_SQLite3Mixins/_BatchMixin.py +243 -0
- scitex/db/_SQLite3Mixins/_BlobMixin.py +229 -0
- scitex/db/_SQLite3Mixins/_ConnectionMixin.py +108 -0
- scitex/db/_SQLite3Mixins/_ImportExportMixin.py +80 -0
- scitex/db/_SQLite3Mixins/_IndexMixin.py +32 -0
- scitex/db/_SQLite3Mixins/_MaintenanceMixin.py +176 -0
- scitex/db/_SQLite3Mixins/_QueryMixin.py +83 -0
- scitex/db/_SQLite3Mixins/_RowMixin.py +75 -0
- scitex/db/_SQLite3Mixins/_TableMixin.py +183 -0
- scitex/db/_SQLite3Mixins/_TransactionMixin.py +71 -0
- scitex/db/_SQLite3Mixins/__init__.py +30 -0
- scitex/db/__init__.py +14 -0
- scitex/db/_delete_duplicates.py +397 -0
- scitex/db/_inspect.py +163 -0
- scitex/decorators/__init__.py +54 -0
- scitex/decorators/_auto_order.py +172 -0
- scitex/decorators/_batch_fn.py +127 -0
- scitex/decorators/_cache_disk.py +32 -0
- scitex/decorators/_cache_mem.py +12 -0
- scitex/decorators/_combined.py +98 -0
- scitex/decorators/_converters.py +282 -0
- scitex/decorators/_deprecated.py +26 -0
- scitex/decorators/_not_implemented.py +30 -0
- scitex/decorators/_numpy_fn.py +86 -0
- scitex/decorators/_pandas_fn.py +121 -0
- scitex/decorators/_preserve_doc.py +19 -0
- scitex/decorators/_signal_fn.py +95 -0
- scitex/decorators/_timeout.py +55 -0
- scitex/decorators/_torch_fn.py +136 -0
- scitex/decorators/_wrap.py +39 -0
- scitex/decorators/_xarray_fn.py +88 -0
- scitex/dev/__init__.py +15 -0
- scitex/dev/_analyze_code_flow.py +284 -0
- scitex/dev/_reload.py +59 -0
- scitex/dict/_DotDict.py +442 -0
- scitex/dict/__init__.py +18 -0
- scitex/dict/_listed_dict.py +42 -0
- scitex/dict/_pop_keys.py +36 -0
- scitex/dict/_replace.py +13 -0
- scitex/dict/_safe_merge.py +62 -0
- scitex/dict/_to_str.py +32 -0
- scitex/dsp/__init__.py +72 -0
- scitex/dsp/_crop.py +122 -0
- scitex/dsp/_demo_sig.py +331 -0
- scitex/dsp/_detect_ripples.py +212 -0
- scitex/dsp/_ensure_3d.py +18 -0
- scitex/dsp/_hilbert.py +78 -0
- scitex/dsp/_listen.py +702 -0
- scitex/dsp/_misc.py +30 -0
- scitex/dsp/_mne.py +32 -0
- scitex/dsp/_modulation_index.py +79 -0
- scitex/dsp/_pac.py +319 -0
- scitex/dsp/_psd.py +102 -0
- scitex/dsp/_resample.py +65 -0
- scitex/dsp/_time.py +36 -0
- scitex/dsp/_transform.py +68 -0
- scitex/dsp/_wavelet.py +212 -0
- scitex/dsp/add_noise.py +111 -0
- scitex/dsp/example.py +253 -0
- scitex/dsp/filt.py +155 -0
- scitex/dsp/norm.py +18 -0
- scitex/dsp/params.py +51 -0
- scitex/dsp/reference.py +43 -0
- scitex/dsp/template.py +25 -0
- scitex/dsp/utils/__init__.py +15 -0
- scitex/dsp/utils/_differential_bandpass_filters.py +120 -0
- scitex/dsp/utils/_ensure_3d.py +18 -0
- scitex/dsp/utils/_ensure_even_len.py +10 -0
- scitex/dsp/utils/_zero_pad.py +48 -0
- scitex/dsp/utils/filter.py +408 -0
- scitex/dsp/utils/pac.py +177 -0
- scitex/dt/__init__.py +8 -0
- scitex/dt/_linspace.py +130 -0
- scitex/etc/__init__.py +15 -0
- scitex/etc/wait_key.py +34 -0
- scitex/gen/_DimHandler.py +196 -0
- scitex/gen/_TimeStamper.py +244 -0
- scitex/gen/__init__.py +95 -0
- scitex/gen/_alternate_kwarg.py +13 -0
- scitex/gen/_cache.py +11 -0
- scitex/gen/_check_host.py +34 -0
- scitex/gen/_ci.py +12 -0
- scitex/gen/_close.py +222 -0
- scitex/gen/_embed.py +78 -0
- scitex/gen/_inspect_module.py +257 -0
- scitex/gen/_is_ipython.py +12 -0
- scitex/gen/_less.py +48 -0
- scitex/gen/_list_packages.py +139 -0
- scitex/gen/_mat2py.py +88 -0
- scitex/gen/_norm.py +170 -0
- scitex/gen/_paste.py +18 -0
- scitex/gen/_print_config.py +84 -0
- scitex/gen/_shell.py +48 -0
- scitex/gen/_src.py +111 -0
- scitex/gen/_start.py +451 -0
- scitex/gen/_symlink.py +55 -0
- scitex/gen/_symlog.py +27 -0
- scitex/gen/_tee.py +238 -0
- scitex/gen/_title2path.py +60 -0
- scitex/gen/_title_case.py +88 -0
- scitex/gen/_to_even.py +84 -0
- scitex/gen/_to_odd.py +34 -0
- scitex/gen/_to_rank.py +39 -0
- scitex/gen/_transpose.py +37 -0
- scitex/gen/_type.py +78 -0
- scitex/gen/_var_info.py +73 -0
- scitex/gen/_wrap.py +17 -0
- scitex/gen/_xml2dict.py +76 -0
- scitex/gen/misc.py +730 -0
- scitex/gen/path.py +0 -0
- scitex/general/__init__.py +5 -0
- scitex/gists/_SigMacro_processFigure_S.py +128 -0
- scitex/gists/_SigMacro_toBlue.py +172 -0
- scitex/gists/__init__.py +12 -0
- scitex/io/_H5Explorer.py +292 -0
- scitex/io/__init__.py +82 -0
- scitex/io/_cache.py +101 -0
- scitex/io/_flush.py +24 -0
- scitex/io/_glob.py +103 -0
- scitex/io/_json2md.py +113 -0
- scitex/io/_load.py +168 -0
- scitex/io/_load_configs.py +146 -0
- scitex/io/_load_modules/__init__.py +38 -0
- scitex/io/_load_modules/_catboost.py +66 -0
- scitex/io/_load_modules/_con.py +20 -0
- scitex/io/_load_modules/_db.py +24 -0
- scitex/io/_load_modules/_docx.py +42 -0
- scitex/io/_load_modules/_eeg.py +110 -0
- scitex/io/_load_modules/_hdf5.py +196 -0
- scitex/io/_load_modules/_image.py +19 -0
- scitex/io/_load_modules/_joblib.py +19 -0
- scitex/io/_load_modules/_json.py +18 -0
- scitex/io/_load_modules/_markdown.py +103 -0
- scitex/io/_load_modules/_matlab.py +37 -0
- scitex/io/_load_modules/_numpy.py +39 -0
- scitex/io/_load_modules/_optuna.py +155 -0
- scitex/io/_load_modules/_pandas.py +69 -0
- scitex/io/_load_modules/_pdf.py +31 -0
- scitex/io/_load_modules/_pickle.py +24 -0
- scitex/io/_load_modules/_torch.py +16 -0
- scitex/io/_load_modules/_txt.py +126 -0
- scitex/io/_load_modules/_xml.py +49 -0
- scitex/io/_load_modules/_yaml.py +23 -0
- scitex/io/_mv_to_tmp.py +19 -0
- scitex/io/_path.py +286 -0
- scitex/io/_reload.py +78 -0
- scitex/io/_save.py +539 -0
- scitex/io/_save_modules/__init__.py +66 -0
- scitex/io/_save_modules/_catboost.py +22 -0
- scitex/io/_save_modules/_csv.py +89 -0
- scitex/io/_save_modules/_excel.py +49 -0
- scitex/io/_save_modules/_hdf5.py +249 -0
- scitex/io/_save_modules/_html.py +48 -0
- scitex/io/_save_modules/_image.py +140 -0
- scitex/io/_save_modules/_joblib.py +25 -0
- scitex/io/_save_modules/_json.py +25 -0
- scitex/io/_save_modules/_listed_dfs_as_csv.py +57 -0
- scitex/io/_save_modules/_listed_scalars_as_csv.py +42 -0
- scitex/io/_save_modules/_matlab.py +24 -0
- scitex/io/_save_modules/_mp4.py +29 -0
- scitex/io/_save_modules/_numpy.py +57 -0
- scitex/io/_save_modules/_optuna_study_as_csv_and_pngs.py +38 -0
- scitex/io/_save_modules/_pickle.py +45 -0
- scitex/io/_save_modules/_plotly.py +27 -0
- scitex/io/_save_modules/_text.py +23 -0
- scitex/io/_save_modules/_torch.py +26 -0
- scitex/io/_save_modules/_yaml.py +29 -0
- scitex/life/__init__.py +10 -0
- scitex/life/_monitor_rain.py +49 -0
- scitex/linalg/__init__.py +17 -0
- scitex/linalg/_distance.py +63 -0
- scitex/linalg/_geometric_median.py +64 -0
- scitex/linalg/_misc.py +73 -0
- scitex/nn/_AxiswiseDropout.py +27 -0
- scitex/nn/_BNet.py +126 -0
- scitex/nn/_BNet_Res.py +164 -0
- scitex/nn/_ChannelGainChanger.py +44 -0
- scitex/nn/_DropoutChannels.py +50 -0
- scitex/nn/_Filters.py +489 -0
- scitex/nn/_FreqGainChanger.py +110 -0
- scitex/nn/_GaussianFilter.py +48 -0
- scitex/nn/_Hilbert.py +111 -0
- scitex/nn/_MNet_1000.py +157 -0
- scitex/nn/_ModulationIndex.py +221 -0
- scitex/nn/_PAC.py +414 -0
- scitex/nn/_PSD.py +40 -0
- scitex/nn/_ResNet1D.py +120 -0
- scitex/nn/_SpatialAttention.py +25 -0
- scitex/nn/_Spectrogram.py +161 -0
- scitex/nn/_SwapChannels.py +50 -0
- scitex/nn/_TransposeLayer.py +19 -0
- scitex/nn/_Wavelet.py +183 -0
- scitex/nn/__init__.py +63 -0
- scitex/os/__init__.py +8 -0
- scitex/os/_mv.py +50 -0
- scitex/parallel/__init__.py +8 -0
- scitex/parallel/_run.py +151 -0
- scitex/path/__init__.py +33 -0
- scitex/path/_clean.py +52 -0
- scitex/path/_find.py +108 -0
- scitex/path/_get_module_path.py +51 -0
- scitex/path/_get_spath.py +35 -0
- scitex/path/_getsize.py +18 -0
- scitex/path/_increment_version.py +87 -0
- scitex/path/_mk_spath.py +51 -0
- scitex/path/_path.py +19 -0
- scitex/path/_split.py +23 -0
- scitex/path/_this_path.py +19 -0
- scitex/path/_version.py +101 -0
- scitex/pd/__init__.py +41 -0
- scitex/pd/_find_indi.py +126 -0
- scitex/pd/_find_pval.py +113 -0
- scitex/pd/_force_df.py +154 -0
- scitex/pd/_from_xyz.py +71 -0
- scitex/pd/_ignore_SettingWithCopyWarning.py +34 -0
- scitex/pd/_melt_cols.py +81 -0
- scitex/pd/_merge_columns.py +221 -0
- scitex/pd/_mv.py +63 -0
- scitex/pd/_replace.py +62 -0
- scitex/pd/_round.py +93 -0
- scitex/pd/_slice.py +63 -0
- scitex/pd/_sort.py +91 -0
- scitex/pd/_to_numeric.py +53 -0
- scitex/pd/_to_xy.py +59 -0
- scitex/pd/_to_xyz.py +110 -0
- scitex/plt/__init__.py +36 -0
- scitex/plt/_subplots/_AxesWrapper.py +182 -0
- scitex/plt/_subplots/_AxisWrapper.py +249 -0
- scitex/plt/_subplots/_AxisWrapperMixins/_AdjustmentMixin.py +414 -0
- scitex/plt/_subplots/_AxisWrapperMixins/_MatplotlibPlotMixin.py +896 -0
- scitex/plt/_subplots/_AxisWrapperMixins/_SeabornMixin.py +368 -0
- scitex/plt/_subplots/_AxisWrapperMixins/_TrackingMixin.py +185 -0
- scitex/plt/_subplots/_AxisWrapperMixins/__init__.py +16 -0
- scitex/plt/_subplots/_FigWrapper.py +226 -0
- scitex/plt/_subplots/_SubplotsWrapper.py +171 -0
- scitex/plt/_subplots/__init__.py +111 -0
- scitex/plt/_subplots/_export_as_csv.py +232 -0
- scitex/plt/_subplots/_export_as_csv_formatters/__init__.py +61 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_bar.py +90 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_barh.py +49 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_boxplot.py +46 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_contour.py +39 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_errorbar.py +125 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_eventplot.py +72 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_fill.py +34 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_fill_between.py +36 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_hist.py +79 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_imshow.py +59 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_imshow2d.py +32 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot.py +79 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_box.py +75 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_conf_mat.py +64 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_ecdf.py +44 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_fillv.py +70 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_heatmap.py +66 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_image.py +95 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_joyplot.py +67 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_kde.py +52 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_line.py +46 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_mean_ci.py +46 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_mean_std.py +46 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_median_iqr.py +46 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_raster.py +44 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_rectangle.py +103 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_scatter_hist.py +82 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_shaded_line.py +58 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_plot_violin.py +117 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_scatter.py +30 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_barplot.py +51 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_boxplot.py +93 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_heatmap.py +94 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_histplot.py +92 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_jointplot.py +65 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_kdeplot.py +59 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_lineplot.py +58 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_pairplot.py +45 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_scatterplot.py +70 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_stripplot.py +75 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_swarmplot.py +75 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_sns_violinplot.py +155 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_violin.py +64 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_violinplot.py +77 -0
- scitex/plt/_subplots/_export_as_csv_formatters/test_formatters.py +210 -0
- scitex/plt/_subplots/_export_as_csv_formatters/verify_formatters.py +342 -0
- scitex/plt/_subplots/_export_as_csv_formatters.py +115 -0
- scitex/plt/_tpl.py +28 -0
- scitex/plt/ax/__init__.py +114 -0
- scitex/plt/ax/_plot/__init__.py +53 -0
- scitex/plt/ax/_plot/_plot_circular_hist.py +124 -0
- scitex/plt/ax/_plot/_plot_conf_mat.py +136 -0
- scitex/plt/ax/_plot/_plot_cube.py +57 -0
- scitex/plt/ax/_plot/_plot_ecdf.py +84 -0
- scitex/plt/ax/_plot/_plot_fillv.py +55 -0
- scitex/plt/ax/_plot/_plot_heatmap.py +266 -0
- scitex/plt/ax/_plot/_plot_image.py +94 -0
- scitex/plt/ax/_plot/_plot_joyplot.py +76 -0
- scitex/plt/ax/_plot/_plot_raster.py +172 -0
- scitex/plt/ax/_plot/_plot_rectangle.py +69 -0
- scitex/plt/ax/_plot/_plot_scatter_hist.py +133 -0
- scitex/plt/ax/_plot/_plot_shaded_line.py +142 -0
- scitex/plt/ax/_plot/_plot_statistical_shaded_line.py +221 -0
- scitex/plt/ax/_plot/_plot_violin.py +343 -0
- scitex/plt/ax/_style/__init__.py +38 -0
- scitex/plt/ax/_style/_add_marginal_ax.py +44 -0
- scitex/plt/ax/_style/_add_panel.py +92 -0
- scitex/plt/ax/_style/_extend.py +64 -0
- scitex/plt/ax/_style/_force_aspect.py +37 -0
- scitex/plt/ax/_style/_format_label.py +23 -0
- scitex/plt/ax/_style/_hide_spines.py +84 -0
- scitex/plt/ax/_style/_map_ticks.py +182 -0
- scitex/plt/ax/_style/_rotate_labels.py +215 -0
- scitex/plt/ax/_style/_sci_note.py +279 -0
- scitex/plt/ax/_style/_set_log_scale.py +299 -0
- scitex/plt/ax/_style/_set_meta.py +261 -0
- scitex/plt/ax/_style/_set_n_ticks.py +37 -0
- scitex/plt/ax/_style/_set_size.py +16 -0
- scitex/plt/ax/_style/_set_supxyt.py +116 -0
- scitex/plt/ax/_style/_set_ticks.py +276 -0
- scitex/plt/ax/_style/_set_xyt.py +121 -0
- scitex/plt/ax/_style/_share_axes.py +264 -0
- scitex/plt/ax/_style/_shift.py +139 -0
- scitex/plt/ax/_style/_show_spines.py +333 -0
- scitex/plt/color/_PARAMS.py +70 -0
- scitex/plt/color/__init__.py +52 -0
- scitex/plt/color/_add_hue_col.py +41 -0
- scitex/plt/color/_colors.py +205 -0
- scitex/plt/color/_get_colors_from_cmap.py +134 -0
- scitex/plt/color/_interpolate.py +29 -0
- scitex/plt/color/_vizualize_colors.py +54 -0
- scitex/plt/utils/__init__.py +44 -0
- scitex/plt/utils/_calc_bacc_from_conf_mat.py +46 -0
- scitex/plt/utils/_calc_nice_ticks.py +101 -0
- scitex/plt/utils/_close.py +68 -0
- scitex/plt/utils/_colorbar.py +96 -0
- scitex/plt/utils/_configure_mpl.py +295 -0
- scitex/plt/utils/_histogram_utils.py +132 -0
- scitex/plt/utils/_im2grid.py +70 -0
- scitex/plt/utils/_is_valid_axis.py +78 -0
- scitex/plt/utils/_mk_colorbar.py +65 -0
- scitex/plt/utils/_mk_patches.py +26 -0
- scitex/plt/utils/_scientific_captions.py +638 -0
- scitex/plt/utils/_scitex_config.py +223 -0
- scitex/reproduce/__init__.py +14 -0
- scitex/reproduce/_fix_seeds.py +45 -0
- scitex/reproduce/_gen_ID.py +55 -0
- scitex/reproduce/_gen_timestamp.py +35 -0
- scitex/res/__init__.py +5 -0
- scitex/resource/__init__.py +13 -0
- scitex/resource/_get_processor_usages.py +281 -0
- scitex/resource/_get_specs.py +280 -0
- scitex/resource/_log_processor_usages.py +190 -0
- scitex/resource/_utils/__init__.py +31 -0
- scitex/resource/_utils/_get_env_info.py +481 -0
- scitex/resource/limit_ram.py +33 -0
- scitex/scholar/__init__.py +24 -0
- scitex/scholar/_local_search.py +454 -0
- scitex/scholar/_paper.py +244 -0
- scitex/scholar/_pdf_downloader.py +325 -0
- scitex/scholar/_search.py +393 -0
- scitex/scholar/_vector_search.py +370 -0
- scitex/scholar/_web_sources.py +457 -0
- scitex/stats/__init__.py +31 -0
- scitex/stats/_calc_partial_corr.py +17 -0
- scitex/stats/_corr_test_multi.py +94 -0
- scitex/stats/_corr_test_wrapper.py +115 -0
- scitex/stats/_describe_wrapper.py +90 -0
- scitex/stats/_multiple_corrections.py +63 -0
- scitex/stats/_nan_stats.py +93 -0
- scitex/stats/_p2stars.py +116 -0
- scitex/stats/_p2stars_wrapper.py +56 -0
- scitex/stats/_statistical_tests.py +73 -0
- scitex/stats/desc/__init__.py +40 -0
- scitex/stats/desc/_describe.py +189 -0
- scitex/stats/desc/_nan.py +289 -0
- scitex/stats/desc/_real.py +94 -0
- scitex/stats/multiple/__init__.py +14 -0
- scitex/stats/multiple/_bonferroni_correction.py +72 -0
- scitex/stats/multiple/_fdr_correction.py +400 -0
- scitex/stats/multiple/_multicompair.py +28 -0
- scitex/stats/tests/__corr_test.py +277 -0
- scitex/stats/tests/__corr_test_multi.py +343 -0
- scitex/stats/tests/__corr_test_single.py +277 -0
- scitex/stats/tests/__init__.py +22 -0
- scitex/stats/tests/_brunner_munzel_test.py +192 -0
- scitex/stats/tests/_nocorrelation_test.py +28 -0
- scitex/stats/tests/_smirnov_grubbs.py +98 -0
- scitex/str/__init__.py +113 -0
- scitex/str/_clean_path.py +75 -0
- scitex/str/_color_text.py +52 -0
- scitex/str/_decapitalize.py +58 -0
- scitex/str/_factor_out_digits.py +281 -0
- scitex/str/_format_plot_text.py +498 -0
- scitex/str/_grep.py +48 -0
- scitex/str/_latex.py +155 -0
- scitex/str/_latex_fallback.py +471 -0
- scitex/str/_mask_api.py +39 -0
- scitex/str/_mask_api_key.py +8 -0
- scitex/str/_parse.py +158 -0
- scitex/str/_print_block.py +47 -0
- scitex/str/_print_debug.py +68 -0
- scitex/str/_printc.py +62 -0
- scitex/str/_readable_bytes.py +38 -0
- scitex/str/_remove_ansi.py +23 -0
- scitex/str/_replace.py +134 -0
- scitex/str/_search.py +125 -0
- scitex/str/_squeeze_space.py +36 -0
- scitex/tex/__init__.py +10 -0
- scitex/tex/_preview.py +103 -0
- scitex/tex/_to_vec.py +116 -0
- scitex/torch/__init__.py +18 -0
- scitex/torch/_apply_to.py +34 -0
- scitex/torch/_nan_funcs.py +77 -0
- scitex/types/_ArrayLike.py +44 -0
- scitex/types/_ColorLike.py +21 -0
- scitex/types/__init__.py +14 -0
- scitex/types/_is_listed_X.py +70 -0
- scitex/utils/__init__.py +22 -0
- scitex/utils/_compress_hdf5.py +116 -0
- scitex/utils/_email.py +120 -0
- scitex/utils/_grid.py +148 -0
- scitex/utils/_notify.py +247 -0
- scitex/utils/_search.py +121 -0
- scitex/web/__init__.py +38 -0
- scitex/web/_search_pubmed.py +438 -0
- scitex/web/_summarize_url.py +158 -0
- scitex-2.0.0.dist-info/METADATA +307 -0
- scitex-2.0.0.dist-info/RECORD +572 -0
- scitex-2.0.0.dist-info/WHEEL +6 -0
- scitex-2.0.0.dist-info/licenses/LICENSE +7 -0
- scitex-2.0.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-04 14:16:49 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/resource/_get_specs.py
|
|
5
|
+
|
|
6
|
+
"""
|
|
7
|
+
This script provides detailed system information including system basics, boot time, CPU, memory, disk, network, and custom user environment variables.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import platform as _platform
|
|
11
|
+
import sys
|
|
12
|
+
from datetime import datetime as _datetime
|
|
13
|
+
from pprint import pprint
|
|
14
|
+
|
|
15
|
+
import matplotlib.pyplot as plt
|
|
16
|
+
import psutil as _psutil
|
|
17
|
+
import yaml as _yaml
|
|
18
|
+
from ._utils._get_env_info import get_env_info
|
|
19
|
+
from ..str import readable_bytes
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def get_specs(
|
|
23
|
+
system=True,
|
|
24
|
+
# boot_time=True,
|
|
25
|
+
cpu=True,
|
|
26
|
+
gpu=True,
|
|
27
|
+
disk=True,
|
|
28
|
+
network=True,
|
|
29
|
+
verbose=False,
|
|
30
|
+
yaml=False,
|
|
31
|
+
):
|
|
32
|
+
"""
|
|
33
|
+
Collects and returns system specifications including system information, CPU, GPU, disk, and network details.
|
|
34
|
+
|
|
35
|
+
This function gathers various pieces of system information based on the parameters provided. It can return the data in a dictionary format or print it out based on the verbose flag. Additionally, there's an option to format the output as YAML.
|
|
36
|
+
|
|
37
|
+
Arguments:
|
|
38
|
+
system (bool): If True, collects system-wide information such as OS and node name. Default is True.
|
|
39
|
+
boot_time (bool): If True, collects system boot time. Currently commented out in the implementation. Default is True.
|
|
40
|
+
cpu (bool): If True, collects CPU-specific information including frequency and usage. Default is True.
|
|
41
|
+
gpu (bool): If True, collects GPU-specific information. Default is True.
|
|
42
|
+
disk (bool): If True, collects disk usage information for all partitions. Default is True.
|
|
43
|
+
network (bool): If True, collects network interface and traffic information. Default is True.
|
|
44
|
+
verbose (bool): If True, prints the collected information using pprint. Default is False.
|
|
45
|
+
yaml (bool): If True, formats the collected information as YAML. This modifies the return type to a YAML formatted string. Default is False.
|
|
46
|
+
|
|
47
|
+
Returns:
|
|
48
|
+
dict or str: By default, returns a dictionary containing the collected system specifications. If `yaml` is True, returns a YAML-formatted string instead.
|
|
49
|
+
|
|
50
|
+
Note:
|
|
51
|
+
- The actual collection of system, CPU, GPU, disk, and network information depends on the availability of corresponding libraries and access permissions.
|
|
52
|
+
- The `boot_time` argument is currently not used as its corresponding code is commented out.
|
|
53
|
+
- The function uses global variables and imports within its scope, which might affect its reusability and testability.
|
|
54
|
+
|
|
55
|
+
Example:
|
|
56
|
+
>>> specs = get_specs(verbose=True)
|
|
57
|
+
This will print and return the system specifications based on the default parameters.
|
|
58
|
+
|
|
59
|
+
Dependencies:
|
|
60
|
+
- This function depends on the `scitex` library for accessing system information and formatting output. Ensure this library is installed and properly configured.
|
|
61
|
+
- Python standard libraries: `datetime`, `platform`, `psutil`, `yaml` (optional for YAML output).
|
|
62
|
+
|
|
63
|
+
Raises:
|
|
64
|
+
PermissionError: If the function lacks necessary permissions to access certain system information, especially disk and network details.
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
# To prevent import errors, _SUPPLE_INFO is collected here.
|
|
68
|
+
global _SUPPLE_INFO
|
|
69
|
+
_SUPPLE_INFO = get_env_info()._asdict()
|
|
70
|
+
|
|
71
|
+
collected_info = {} # OrderedDict()
|
|
72
|
+
|
|
73
|
+
collected_info["Collected Time"] = _datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
74
|
+
if system:
|
|
75
|
+
collected_info["System Information"] = _system_info()
|
|
76
|
+
# if boot_time:
|
|
77
|
+
# collected_info["Boot Time"] = _boot_time_info()
|
|
78
|
+
if cpu:
|
|
79
|
+
collected_info["CPU Info"] = _cpu_info()
|
|
80
|
+
collected_info["Memory Info"] = _memory_info()
|
|
81
|
+
if gpu:
|
|
82
|
+
collected_info["GPU Info"] = _supple_nvidia_info()
|
|
83
|
+
# scitex.gen.placeholder()
|
|
84
|
+
if disk:
|
|
85
|
+
collected_info["Disk Info"] = _disk_info()
|
|
86
|
+
if network:
|
|
87
|
+
collected_info["Network Info"] = _network_info()
|
|
88
|
+
|
|
89
|
+
if yaml:
|
|
90
|
+
collected_info = _yaml.dump(collected_info, sort_keys=False)
|
|
91
|
+
|
|
92
|
+
if verbose:
|
|
93
|
+
pprint(collected_info)
|
|
94
|
+
|
|
95
|
+
return collected_info
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def _system_info():
|
|
99
|
+
uname = _platform.uname()
|
|
100
|
+
return {
|
|
101
|
+
"OS": _supple_os_info()["os"],
|
|
102
|
+
# "GCC version": _supple_os_info()["gcc_version"],
|
|
103
|
+
# "System": uname.system,
|
|
104
|
+
"Node Name": uname.node,
|
|
105
|
+
"Release": uname.release,
|
|
106
|
+
"Version": uname.version,
|
|
107
|
+
# "Machine": uname.machine,
|
|
108
|
+
# "Processor": uname.processor,
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
# def _boot_time_info():
|
|
113
|
+
# boot_time_timestamp = _psutil.boot_time()
|
|
114
|
+
# bt = _datetime.fromtimestamp(boot_time_timestamp)
|
|
115
|
+
# return {
|
|
116
|
+
# "Boot Time": f"{bt.year}-{bt.month:02d}-{bt.day:02d} {bt.hour:02d}:{bt.minute:02d}:{bt.second:02d}"
|
|
117
|
+
# }
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def _cpu_info():
|
|
121
|
+
cpufreq = _psutil.cpu_freq()
|
|
122
|
+
cpu_usage_per_core = _psutil.cpu_percent(percpu=True, interval=1)
|
|
123
|
+
return {
|
|
124
|
+
"Physical cores": _psutil.cpu_count(logical=False),
|
|
125
|
+
"Total cores": _psutil.cpu_count(logical=True),
|
|
126
|
+
"Max Frequency": f"{cpufreq.max:.2f} MHz",
|
|
127
|
+
"Min Frequency": f"{cpufreq.min:.2f} MHz",
|
|
128
|
+
"Current Frequency": f"{cpufreq.current:.2f} MHz",
|
|
129
|
+
"CPU Usage Per Core": {
|
|
130
|
+
f"Core {i}": f"{percentage}%"
|
|
131
|
+
for i, percentage in enumerate(cpu_usage_per_core)
|
|
132
|
+
},
|
|
133
|
+
"Total CPU Usage": f"{_psutil.cpu_percent()}%",
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def _memory_info():
|
|
138
|
+
import scitex
|
|
139
|
+
|
|
140
|
+
svmem = _psutil.virtual_memory()
|
|
141
|
+
swap = _psutil.swap_memory()
|
|
142
|
+
|
|
143
|
+
return {
|
|
144
|
+
"Memory": {
|
|
145
|
+
"Total": readable_bytes(svmem.total),
|
|
146
|
+
"Available": readable_bytes(svmem.available),
|
|
147
|
+
"Used": readable_bytes(svmem.used),
|
|
148
|
+
"Percentage": svmem.percent,
|
|
149
|
+
},
|
|
150
|
+
"SWAP": {
|
|
151
|
+
"Total": readable_bytes(swap.total),
|
|
152
|
+
"Free": readable_bytes(swap.free),
|
|
153
|
+
"Used": readable_bytes(swap.used),
|
|
154
|
+
"Percentage": swap.percent,
|
|
155
|
+
},
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
def _disk_info():
|
|
160
|
+
import scitex
|
|
161
|
+
|
|
162
|
+
partitions_info = {}
|
|
163
|
+
partitions = _psutil.disk_partitions()
|
|
164
|
+
for partition in partitions:
|
|
165
|
+
try:
|
|
166
|
+
usage = _psutil.disk_usage(partition.mountpoint)
|
|
167
|
+
partitions_info[partition.device] = {
|
|
168
|
+
"Mountpoint": partition.mountpoint,
|
|
169
|
+
"File system type": partition.fstype,
|
|
170
|
+
"Total Size": readable_bytes(usage.total),
|
|
171
|
+
"Used": readable_bytes(usage.used),
|
|
172
|
+
"Free": readable_bytes(usage.free),
|
|
173
|
+
"Percentage": usage.percent,
|
|
174
|
+
}
|
|
175
|
+
except PermissionError:
|
|
176
|
+
continue
|
|
177
|
+
|
|
178
|
+
disk_io = _psutil.disk_io_counters()
|
|
179
|
+
return {
|
|
180
|
+
"Partitions": partitions_info,
|
|
181
|
+
"Total read": readable_bytes(disk_io.read_bytes),
|
|
182
|
+
"Total write": readable_bytes(disk_io.write_bytes),
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
def _network_info():
|
|
187
|
+
import scitex
|
|
188
|
+
|
|
189
|
+
if_addrs = _psutil.net_if_addrs()
|
|
190
|
+
interfaces = {}
|
|
191
|
+
for interface_name, interface_addresses in if_addrs.items():
|
|
192
|
+
interface_info = []
|
|
193
|
+
for address in interface_addresses:
|
|
194
|
+
interface_info.append(
|
|
195
|
+
{
|
|
196
|
+
# "Address Type": "IP" if address.family == _psutil.AF_INET else "MAC",
|
|
197
|
+
"Address": address.address,
|
|
198
|
+
"Netmask": address.netmask,
|
|
199
|
+
"Broadcast": address.broadcast,
|
|
200
|
+
}
|
|
201
|
+
)
|
|
202
|
+
interfaces[interface_name] = interface_info
|
|
203
|
+
|
|
204
|
+
net_io = _psutil.net_io_counters()
|
|
205
|
+
return {
|
|
206
|
+
"Interfaces": interfaces,
|
|
207
|
+
"Total Sent": readable_bytes(net_io.bytes_sent),
|
|
208
|
+
"Total Received": readable_bytes(net_io.bytes_recv),
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
def _python_info():
|
|
213
|
+
return _supple_python_info()
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
def _supple_os_info():
|
|
217
|
+
_SUPPLE_OS_KEYS = [
|
|
218
|
+
"os",
|
|
219
|
+
"gcc_version",
|
|
220
|
+
]
|
|
221
|
+
return {k: _SUPPLE_INFO[k] for k in _SUPPLE_OS_KEYS}
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
def _supple_python_info():
|
|
225
|
+
_SUPPLE_PYTHON_KEYS = [
|
|
226
|
+
"python_version",
|
|
227
|
+
"torch_version",
|
|
228
|
+
"is_cuda_available",
|
|
229
|
+
"pip_version",
|
|
230
|
+
"pip_packages",
|
|
231
|
+
"conda_packages",
|
|
232
|
+
]
|
|
233
|
+
|
|
234
|
+
return {k: _SUPPLE_INFO[k] for k in _SUPPLE_PYTHON_KEYS}
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
def _supple_nvidia_info():
|
|
238
|
+
_SUPPLE_NVIDIA_KEYS = [
|
|
239
|
+
"nvidia_gpu_models",
|
|
240
|
+
"nvidia_driver_version",
|
|
241
|
+
"cuda_runtime_version",
|
|
242
|
+
"cudnn_version",
|
|
243
|
+
]
|
|
244
|
+
|
|
245
|
+
def replace_key(key):
|
|
246
|
+
return key
|
|
247
|
+
|
|
248
|
+
def replace_key(key):
|
|
249
|
+
key = key.replace("_", " ")
|
|
250
|
+
key = key.replace("nvidia", "NVIDIA")
|
|
251
|
+
key = key.replace("gpu", "GPU")
|
|
252
|
+
key = key.replace("cuda", "CUDA")
|
|
253
|
+
key = key.replace("cudnn", "cuDNN")
|
|
254
|
+
key = key.replace("driver", "Driver")
|
|
255
|
+
key = key.replace("runtime", "Runtime")
|
|
256
|
+
return key
|
|
257
|
+
|
|
258
|
+
return {replace_key(k): _SUPPLE_INFO[k] for k in _SUPPLE_NVIDIA_KEYS}
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
if __name__ == "__main__":
|
|
262
|
+
import scitex
|
|
263
|
+
|
|
264
|
+
# Start
|
|
265
|
+
CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.gen.start(sys, plt)
|
|
266
|
+
|
|
267
|
+
info = scitex.res.get_specs()
|
|
268
|
+
scitex.io.save(info, "specs.yaml")
|
|
269
|
+
|
|
270
|
+
# Close
|
|
271
|
+
scitex.gen.close(CONFIG)
|
|
272
|
+
|
|
273
|
+
# EOF
|
|
274
|
+
|
|
275
|
+
"""
|
|
276
|
+
/home/ywatanabe/proj/entrance/scitex/res/_get_specs.py
|
|
277
|
+
"""
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
# EOF
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-04 16:28:53 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/resource/_log_processor_usages.py
|
|
5
|
+
|
|
6
|
+
"""
|
|
7
|
+
Functionality:
|
|
8
|
+
* Monitors and logs system resource utilization over time
|
|
9
|
+
Input:
|
|
10
|
+
* Path for saving logs
|
|
11
|
+
* Monitoring duration and interval
|
|
12
|
+
Output:
|
|
13
|
+
* CSV file containing time-series resource usage data
|
|
14
|
+
Prerequisites:
|
|
15
|
+
* scitex package with processor usage monitoring capabilities
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
"""Imports"""
|
|
19
|
+
import math
|
|
20
|
+
import os
|
|
21
|
+
import sys
|
|
22
|
+
import time
|
|
23
|
+
from multiprocessing import Process
|
|
24
|
+
from typing import Union
|
|
25
|
+
|
|
26
|
+
import matplotlib.pyplot as plt
|
|
27
|
+
import scitex
|
|
28
|
+
import pandas as pd
|
|
29
|
+
|
|
30
|
+
from .._sh import sh
|
|
31
|
+
from ..io._load import load
|
|
32
|
+
from ..io._save import save
|
|
33
|
+
from ..str import printc
|
|
34
|
+
from ._get_processor_usages import get_processor_usages
|
|
35
|
+
|
|
36
|
+
"""Functions & Classes"""
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def log_processor_usages(
|
|
40
|
+
path: str = "/tmp/scitex/processor_usages.csv",
|
|
41
|
+
limit_min: float = 30,
|
|
42
|
+
interval_s: float = 1,
|
|
43
|
+
init: bool = True,
|
|
44
|
+
verbose: bool = False,
|
|
45
|
+
background: bool = False,
|
|
46
|
+
) -> Union[None, Process]:
|
|
47
|
+
"""Logs system resource usage over time.
|
|
48
|
+
|
|
49
|
+
Parameters
|
|
50
|
+
----------
|
|
51
|
+
path : str
|
|
52
|
+
Path to save the log file
|
|
53
|
+
limit_min : float
|
|
54
|
+
Monitoring duration in minutes
|
|
55
|
+
interval_s : float
|
|
56
|
+
Sampling interval in seconds
|
|
57
|
+
init : bool
|
|
58
|
+
Whether to clear existing log file
|
|
59
|
+
verbose : bool
|
|
60
|
+
Whether to print the log
|
|
61
|
+
background : bool
|
|
62
|
+
Whether to run in background
|
|
63
|
+
|
|
64
|
+
Returns
|
|
65
|
+
-------
|
|
66
|
+
Union[None, Process]
|
|
67
|
+
Process object if background=True, None otherwise
|
|
68
|
+
"""
|
|
69
|
+
if background:
|
|
70
|
+
process = Process(
|
|
71
|
+
target=_log_processor_usages,
|
|
72
|
+
args=(path, limit_min, interval_s, init, verbose),
|
|
73
|
+
)
|
|
74
|
+
process.start()
|
|
75
|
+
return process
|
|
76
|
+
|
|
77
|
+
return _log_processor_usages(
|
|
78
|
+
path=path,
|
|
79
|
+
limit_min=limit_min,
|
|
80
|
+
interval_s=interval_s,
|
|
81
|
+
init=init,
|
|
82
|
+
verbose=verbose,
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def _log_processor_usages(
|
|
87
|
+
path: str = "/tmp/scitex/processor_usages.csv",
|
|
88
|
+
limit_min: float = 30,
|
|
89
|
+
interval_s: float = 1,
|
|
90
|
+
init: bool = True,
|
|
91
|
+
verbose: bool = False,
|
|
92
|
+
) -> None:
|
|
93
|
+
"""Logs system resource usage over time.
|
|
94
|
+
|
|
95
|
+
Parameters
|
|
96
|
+
----------
|
|
97
|
+
path : str
|
|
98
|
+
Path to save the log file
|
|
99
|
+
limit_min : float
|
|
100
|
+
Monitoring duration in minutes
|
|
101
|
+
interval_s : float
|
|
102
|
+
Sampling interval in seconds
|
|
103
|
+
init : bool
|
|
104
|
+
Whether to clear existing log file
|
|
105
|
+
verbose : bool
|
|
106
|
+
Whether to print the log
|
|
107
|
+
|
|
108
|
+
Example
|
|
109
|
+
-------
|
|
110
|
+
>>> log_processor_usages(path="usage_log.csv", limit_min=5)
|
|
111
|
+
"""
|
|
112
|
+
assert path.endswith(".csv"), "Path must end with .csv"
|
|
113
|
+
|
|
114
|
+
# Log file initialization
|
|
115
|
+
_ensure_log_file(path, init)
|
|
116
|
+
printc(f"Log file can be monitored with with `tail -f {path}`")
|
|
117
|
+
|
|
118
|
+
limit_s = limit_min * 60
|
|
119
|
+
n_max = math.ceil(limit_s // interval_s)
|
|
120
|
+
|
|
121
|
+
for _ in range(n_max):
|
|
122
|
+
_add(path, verbose=verbose)
|
|
123
|
+
time.sleep(interval_s)
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
# def _ensure_log_file(path: str, init: bool) -> None:
|
|
127
|
+
# def _create_path(path):
|
|
128
|
+
# os.makedirs(os.path.dirname(path), exist_ok=True)
|
|
129
|
+
# empty_df = pd.DataFrame()
|
|
130
|
+
# save(empty_df, path, verbose=False)
|
|
131
|
+
# printc(f"{path} created.")
|
|
132
|
+
|
|
133
|
+
# if not os.path.exists(path):
|
|
134
|
+
# _create_path(path)
|
|
135
|
+
|
|
136
|
+
# else:
|
|
137
|
+
# if init and os.path.exists(path):
|
|
138
|
+
# try:
|
|
139
|
+
# sh(f"rm -f {path}")
|
|
140
|
+
# _create_path(path)
|
|
141
|
+
# except Exception as err:
|
|
142
|
+
# raise RuntimeError(f"Failed to init log file: {err}")
|
|
143
|
+
|
|
144
|
+
# def _add(path: str, verbose: bool = True) -> None:
|
|
145
|
+
# past = load(path)
|
|
146
|
+
# now = get_processor_usages()
|
|
147
|
+
|
|
148
|
+
# combined = pd.concat([past, now]).round(3)
|
|
149
|
+
# save(combined, path, verbose=verbose)
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def _add(path: str, verbose: bool = True) -> None:
|
|
153
|
+
"""Appends current resource usage to CSV file."""
|
|
154
|
+
now = get_processor_usages()
|
|
155
|
+
|
|
156
|
+
# Append mode without loading entire file
|
|
157
|
+
with open(path, "a") as f:
|
|
158
|
+
now.to_csv(f, header=f.tell() == 0, index=False)
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def _ensure_log_file(path: str, init: bool) -> None:
|
|
162
|
+
"""Creates or reinitializes log file with headers."""
|
|
163
|
+
|
|
164
|
+
def _create_path(path):
|
|
165
|
+
os.makedirs(os.path.dirname(path), exist_ok=True)
|
|
166
|
+
# Write only headers
|
|
167
|
+
headers = ["Timestamp", "CPU [%]", "RAM [GiB]", "GPU [%]", "VRAM [GiB]"]
|
|
168
|
+
pd.DataFrame(columns=headers).to_csv(path, index=False)
|
|
169
|
+
printc(f"{path} created.")
|
|
170
|
+
|
|
171
|
+
if not os.path.exists(path):
|
|
172
|
+
_create_path(path)
|
|
173
|
+
elif init:
|
|
174
|
+
try:
|
|
175
|
+
sh(f"rm -f {path}")
|
|
176
|
+
_create_path(path)
|
|
177
|
+
except Exception as err:
|
|
178
|
+
raise RuntimeError(f"Failed to init log file: {err}")
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
main = log_processor_usages
|
|
182
|
+
|
|
183
|
+
if __name__ == "__main__":
|
|
184
|
+
CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.gen.start(sys, plt, verbose=False)
|
|
185
|
+
main()
|
|
186
|
+
scitex.gen.close(CONFIG, verbose=False, notify=False)
|
|
187
|
+
|
|
188
|
+
# python -c "import scitex; scitex.resource.log_processor_usages(\"/tmp/processor_usages.csv\", init=True)"
|
|
189
|
+
|
|
190
|
+
# EOF
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-04 14:13:44 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/resource/_utils/__init__.py
|
|
5
|
+
|
|
6
|
+
import os
|
|
7
|
+
import importlib
|
|
8
|
+
import inspect
|
|
9
|
+
|
|
10
|
+
# Get the current directory
|
|
11
|
+
current_dir = os.path.dirname(__file__)
|
|
12
|
+
|
|
13
|
+
# Iterate through all Python files in the current directory
|
|
14
|
+
for filename in os.listdir(current_dir):
|
|
15
|
+
if filename.endswith(".py") and not filename.startswith("__"):
|
|
16
|
+
module_name = filename[:-3] # Remove .py extension
|
|
17
|
+
module = importlib.import_module(f".{module_name}", package=__name__)
|
|
18
|
+
|
|
19
|
+
# Import functions, classes, and specific module-level variables
|
|
20
|
+
for name, obj in inspect.getmembers(module):
|
|
21
|
+
if inspect.isfunction(obj) or inspect.isclass(obj):
|
|
22
|
+
if not name.startswith("_"):
|
|
23
|
+
globals()[name] = obj
|
|
24
|
+
# Also import specific module-level variables
|
|
25
|
+
elif name in ["TORCH_AVAILABLE", "env_info_fmt"]:
|
|
26
|
+
globals()[name] = obj
|
|
27
|
+
|
|
28
|
+
# Clean up temporary variables
|
|
29
|
+
del os, importlib, inspect, current_dir, filename, module_name, module, name, obj
|
|
30
|
+
|
|
31
|
+
# EOF
|