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/dt/_linspace.py
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-04-23 10:42:43 (ywatanabe)"
|
|
4
|
+
# File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/dt/_linspace.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "./src/scitex/dt/_linspace.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
# ----------------------------------------
|
|
11
|
+
|
|
12
|
+
from typing import Union, Optional, List, Any
|
|
13
|
+
import numpy as np
|
|
14
|
+
import datetime
|
|
15
|
+
from datetime import timedelta
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def linspace(
|
|
19
|
+
start_dt: datetime.datetime,
|
|
20
|
+
end_dt: datetime.datetime,
|
|
21
|
+
n_samples: Optional[int] = None,
|
|
22
|
+
sampling_rate: Optional[float] = None,
|
|
23
|
+
) -> np.ndarray:
|
|
24
|
+
"""
|
|
25
|
+
Create a linearly spaced array between two datetime objects.
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
start_dt: Starting datetime object
|
|
29
|
+
end_dt: Ending datetime object
|
|
30
|
+
n_samples: Number of samples to create (mutually exclusive with sampling_rate)
|
|
31
|
+
sampling_rate: Sampling rate in Hz (mutually exclusive with n_samples)
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
Array of datetime objects evenly spaced between start_dt and end_dt
|
|
35
|
+
"""
|
|
36
|
+
# Type checking
|
|
37
|
+
if not isinstance(start_dt, datetime.datetime):
|
|
38
|
+
raise TypeError(f"start_dt must be a datetime object, got {type(start_dt)}")
|
|
39
|
+
|
|
40
|
+
if not isinstance(end_dt, datetime.datetime):
|
|
41
|
+
raise TypeError(f"end_dt must be a datetime object, got {type(end_dt)}")
|
|
42
|
+
|
|
43
|
+
if n_samples is not None and not isinstance(n_samples, (int, float)):
|
|
44
|
+
raise TypeError(f"n_samples must be a number, got {type(n_samples)}")
|
|
45
|
+
|
|
46
|
+
if sampling_rate is not None and not isinstance(sampling_rate, (int, float)):
|
|
47
|
+
raise TypeError(f"sampling_rate must be a number, got {type(sampling_rate)}")
|
|
48
|
+
|
|
49
|
+
if start_dt >= end_dt:
|
|
50
|
+
raise ValueError("start_dt must be earlier than end_dt")
|
|
51
|
+
|
|
52
|
+
duration_seconds = (end_dt - start_dt).total_seconds()
|
|
53
|
+
|
|
54
|
+
if n_samples is not None and sampling_rate is not None:
|
|
55
|
+
raise ValueError("Provide either n_samples or sampling_rate, not both")
|
|
56
|
+
|
|
57
|
+
if n_samples is None and sampling_rate is None:
|
|
58
|
+
raise ValueError("Either n_samples or sampling_rate must be provided")
|
|
59
|
+
|
|
60
|
+
if sampling_rate is not None:
|
|
61
|
+
if sampling_rate <= 0:
|
|
62
|
+
raise ValueError("sampling_rate must be positive")
|
|
63
|
+
n_samples = int(duration_seconds * sampling_rate) + 1
|
|
64
|
+
else:
|
|
65
|
+
if n_samples <= 0:
|
|
66
|
+
raise ValueError("n_samples must be positive")
|
|
67
|
+
|
|
68
|
+
# Create linear space in seconds
|
|
69
|
+
seconds_array = np.linspace(0, duration_seconds, n_samples)
|
|
70
|
+
|
|
71
|
+
# Convert to datetime objects
|
|
72
|
+
datetime_array = np.array(
|
|
73
|
+
[start_dt + timedelta(seconds=float(sec)) for sec in seconds_array]
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
return datetime_array
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
# #!/usr/bin/env python3
|
|
80
|
+
# # -*- coding: utf-8 -*-
|
|
81
|
+
# # Timestamp: "2025-04-23 10:38:20 (ywatanabe)"
|
|
82
|
+
# # File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/dt/_linspace.py
|
|
83
|
+
# # ----------------------------------------
|
|
84
|
+
# import os
|
|
85
|
+
# __FILE__ = (
|
|
86
|
+
# "./src/scitex/dt/_linspace.py"
|
|
87
|
+
# )
|
|
88
|
+
# __DIR__ = os.path.dirname(__FILE__)
|
|
89
|
+
# # ----------------------------------------
|
|
90
|
+
|
|
91
|
+
# import numpy as np
|
|
92
|
+
# from datetime import timedelta
|
|
93
|
+
|
|
94
|
+
# def linspace(start_dt, end_dt, n_samples=None, sampling_rate=None):
|
|
95
|
+
# """
|
|
96
|
+
# Create a linearly spaced array between two datetime objects.
|
|
97
|
+
|
|
98
|
+
# Args:
|
|
99
|
+
# start_dt: Starting datetime object
|
|
100
|
+
# end_dt: Ending datetime object
|
|
101
|
+
# n_samples: Number of samples to create (mutually exclusive with sampling_rate)
|
|
102
|
+
# sampling_rate: Sampling rate in Hz (mutually exclusive with n_samples)
|
|
103
|
+
|
|
104
|
+
# Returns:
|
|
105
|
+
# Array of datetime objects evenly spaced between start_dt and end_dt
|
|
106
|
+
# """
|
|
107
|
+
|
|
108
|
+
# duration_seconds = (end_dt - start_dt).total_seconds()
|
|
109
|
+
|
|
110
|
+
# if n_samples is not None and sampling_rate is not None:
|
|
111
|
+
# raise ValueError("Provide either n_samples or sampling_rate, not both")
|
|
112
|
+
|
|
113
|
+
# if n_samples is None and sampling_rate is None:
|
|
114
|
+
# raise ValueError("Either n_samples or sampling_rate must be provided")
|
|
115
|
+
|
|
116
|
+
# if sampling_rate is not None:
|
|
117
|
+
# n_samples = int(duration_seconds * sampling_rate) + 1
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
# # Create linear space in seconds
|
|
121
|
+
# seconds_array = np.linspace(0, duration_seconds, n_samples)
|
|
122
|
+
|
|
123
|
+
# # Convert to datetime objects
|
|
124
|
+
# datetime_array = np.array([start_dt + timedelta(seconds=float(sec)) for sec in seconds_array])
|
|
125
|
+
|
|
126
|
+
# return datetime_array
|
|
127
|
+
|
|
128
|
+
# # EOF
|
|
129
|
+
|
|
130
|
+
# EOF
|
scitex/etc/__init__.py
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2025-01-09 08:45:00 (ywatanabe)"
|
|
4
|
+
# File: /data/gpfs/projects/punim2354/ywatanabe/.claude-worktree/scitex_repo/src/scitex/etc/__init__.py
|
|
5
|
+
|
|
6
|
+
"""
|
|
7
|
+
Utility functions for miscellaneous tasks.
|
|
8
|
+
|
|
9
|
+
This module provides utility functions that don't fit into other categories,
|
|
10
|
+
such as keyboard input handling for interactive programs.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from .wait_key import wait_key, count
|
|
14
|
+
|
|
15
|
+
__all__ = ["wait_key", "count"]
|
scitex/etc/wait_key.py
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2023-03-24 23:13:32 (ywatanabe)"
|
|
4
|
+
|
|
5
|
+
import readchar
|
|
6
|
+
import time
|
|
7
|
+
import multiprocessing
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def wait_key(p):
|
|
11
|
+
key = "x"
|
|
12
|
+
while key != "q":
|
|
13
|
+
key = readchar.readchar()
|
|
14
|
+
print(key)
|
|
15
|
+
print("q was pressed.")
|
|
16
|
+
p.terminate()
|
|
17
|
+
# event.set()
|
|
18
|
+
# raise Exception
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def count():
|
|
22
|
+
counter = 0
|
|
23
|
+
while True:
|
|
24
|
+
print(counter)
|
|
25
|
+
time.sleep(1)
|
|
26
|
+
counter += 1
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
if __name__ == "__main__":
|
|
30
|
+
p1 = multiprocessing.Process(target=count)
|
|
31
|
+
|
|
32
|
+
p1.start()
|
|
33
|
+
waitKey(p1)
|
|
34
|
+
print("aaa")
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-05 00:39:26 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/gen/_DimHandler.py
|
|
5
|
+
|
|
6
|
+
"""
|
|
7
|
+
This script demonstrates DimHandler, which:
|
|
8
|
+
1) Keeps designated dimensions,
|
|
9
|
+
2) Permutes the kept dimensions to the last while maintaining their relative order,
|
|
10
|
+
3) Reshapes the remaining dimensions to the first, batch dimension,
|
|
11
|
+
4) (Performs calculations),
|
|
12
|
+
5) Restores the summarized dimensions to their original shapes.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
# Imports
|
|
16
|
+
import sys
|
|
17
|
+
|
|
18
|
+
import matplotlib.pyplot as plt
|
|
19
|
+
import numpy as np
|
|
20
|
+
import torch
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# Functions
|
|
24
|
+
class DimHandler:
|
|
25
|
+
"""
|
|
26
|
+
A utility class for handling dimension manipulations on tensors or arrays, including reshaping and permuting dimensions.
|
|
27
|
+
|
|
28
|
+
Attributes:
|
|
29
|
+
orig_shape (tuple): The original shape of the input tensor or array before any manipulation.
|
|
30
|
+
keepdims (list): The list of dimensions to be kept and moved to the end.
|
|
31
|
+
n_non_keepdims (list): The sizes of the dimensions not kept, used for reshaping back to the original shape.
|
|
32
|
+
n_keepdims (list): The sizes of the kept dimensions, used for reshaping.
|
|
33
|
+
|
|
34
|
+
Example1:
|
|
35
|
+
import torch
|
|
36
|
+
|
|
37
|
+
dh = DimHandler()
|
|
38
|
+
x = torch.rand(1, 2, 3, 4, 5, 6) # Example tensor
|
|
39
|
+
print(x.shape) # torch.Size([1, 2, 3, 4, 5, 6])
|
|
40
|
+
x = dh.fit(x, keepdims=[0, 2, 5])
|
|
41
|
+
print(x.shape) # torch.Size([40, 1, 3, 6])
|
|
42
|
+
x = dh.unfit(x)
|
|
43
|
+
print(x.shape) # torch.Size([2, 4, 5, 1, 3, 6])
|
|
44
|
+
|
|
45
|
+
Example 2:
|
|
46
|
+
import torch
|
|
47
|
+
|
|
48
|
+
dh = DimHandler()
|
|
49
|
+
x = torch.rand(1, 2, 3, 4, 5, 6) # Example tensor
|
|
50
|
+
print(x.shape) # torch.Size([1, 2, 3, 4, 5, 6])
|
|
51
|
+
x = dh.fit(x, keepdims=[0, 2, 5])
|
|
52
|
+
print(x.shape) # torch.Size([40, 1, 3, 6])
|
|
53
|
+
y = x.mean(axis=-2) # calculation on the kept dims
|
|
54
|
+
print(y.shape) # torch.Size([40, 1, 6])
|
|
55
|
+
y = dh.unfit(y)
|
|
56
|
+
print(y.shape) # torch.Size([2, 4, 5, 1, 6])
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
def __init__(self):
|
|
60
|
+
pass
|
|
61
|
+
# self.orig_shape = None
|
|
62
|
+
# self.keepdims = None
|
|
63
|
+
|
|
64
|
+
def fit(self, x, keepdims=[]):
|
|
65
|
+
if isinstance(x, np.ndarray):
|
|
66
|
+
return self._fit_numpy(x, keepdims=keepdims)
|
|
67
|
+
elif isinstance(x, torch.Tensor):
|
|
68
|
+
return self._fit_torch(x, keepdims=keepdims)
|
|
69
|
+
|
|
70
|
+
def _fit_numpy(self, x, keepdims=[]):
|
|
71
|
+
"""
|
|
72
|
+
Reshapes the input NumPy array by flattening the dimensions not in `keepdims` and moving the kept dimensions to the end.
|
|
73
|
+
|
|
74
|
+
Arguments:
|
|
75
|
+
x (numpy.ndarray): The input array to be reshaped.
|
|
76
|
+
keepdims (list of int): The indices of the dimensions to keep.
|
|
77
|
+
|
|
78
|
+
Returns:
|
|
79
|
+
x_flattened (numpy.ndarray): The reshaped array with kept dimensions moved to the end.
|
|
80
|
+
"""
|
|
81
|
+
assert len(keepdims) <= len(
|
|
82
|
+
x.shape
|
|
83
|
+
), "keepdims cannot have more dimensions than the array itself."
|
|
84
|
+
|
|
85
|
+
# Normalize negative indices to positive indices
|
|
86
|
+
total_dims = len(x.shape)
|
|
87
|
+
keepdims = [dim if dim >= 0 else total_dims + dim for dim in keepdims]
|
|
88
|
+
keepdims = sorted(set(keepdims))
|
|
89
|
+
|
|
90
|
+
self.shape_fit = x.shape
|
|
91
|
+
|
|
92
|
+
non_keepdims = [ii for ii in range(len(self.shape_fit)) if ii not in keepdims]
|
|
93
|
+
|
|
94
|
+
self.n_non_keepdims = [self.shape_fit[nkd] for nkd in non_keepdims]
|
|
95
|
+
self.n_keepdims = [self.shape_fit[kd] for kd in keepdims]
|
|
96
|
+
|
|
97
|
+
# Permute the array dimensions so that the non-kept dimensions come first
|
|
98
|
+
new_order = non_keepdims + keepdims
|
|
99
|
+
x_permuted = np.transpose(x, axes=new_order)
|
|
100
|
+
|
|
101
|
+
# Flatten the non-kept dimensions
|
|
102
|
+
x_flattened = x_permuted.reshape(-1, *self.n_keepdims)
|
|
103
|
+
|
|
104
|
+
return x_flattened
|
|
105
|
+
|
|
106
|
+
def _fit_torch(self, x, keepdims=[]):
|
|
107
|
+
"""
|
|
108
|
+
Reshapes the input tensor or array by flattening the dimensions not in `keepdims` and moving the kept dimensions to the end.
|
|
109
|
+
|
|
110
|
+
Arguments:
|
|
111
|
+
x (torch.Tensor): The input tensor or array to be reshaped.
|
|
112
|
+
keepdims (list of int): The indices of the dimensions to keep.
|
|
113
|
+
|
|
114
|
+
Returns:
|
|
115
|
+
x_flattend (torch.Tensor): The reshaped tensor or array with kept dimensions moved to the end.
|
|
116
|
+
|
|
117
|
+
Note:
|
|
118
|
+
This method modifies the `orig_shape`, `keepdims`, `n_non_keepdims`, and `n_keepdims` attributes based on the input.
|
|
119
|
+
"""
|
|
120
|
+
assert len(keepdims) <= len(
|
|
121
|
+
x.shape
|
|
122
|
+
), "keepdims cannot have more dimensions than the tensor itself."
|
|
123
|
+
|
|
124
|
+
keepdims = torch.tensor(keepdims).clone().detach().cpu().int()
|
|
125
|
+
# Normalize negative indices to positive indices
|
|
126
|
+
total_dims = len(x.shape)
|
|
127
|
+
keepdims = [dim if dim >= 0 else total_dims + dim for dim in keepdims]
|
|
128
|
+
keepdims = sorted(set(keepdims))
|
|
129
|
+
|
|
130
|
+
self.shape_fit = x.shape
|
|
131
|
+
|
|
132
|
+
non_keepdims = [
|
|
133
|
+
int(ii) for ii in torch.arange(len(self.shape_fit)) if ii not in keepdims
|
|
134
|
+
]
|
|
135
|
+
|
|
136
|
+
self.n_non_keepdims = [self.shape_fit[nkd] for nkd in non_keepdims]
|
|
137
|
+
self.n_keepdims = [self.shape_fit[kd] for kd in keepdims]
|
|
138
|
+
|
|
139
|
+
x_permuted = x.permute(*non_keepdims, *keepdims)
|
|
140
|
+
x_flattend = x_permuted.reshape(-1, *self.n_keepdims)
|
|
141
|
+
|
|
142
|
+
return x_flattend
|
|
143
|
+
|
|
144
|
+
def unfit(self, y):
|
|
145
|
+
"""
|
|
146
|
+
Restores the first dimension of reshaped tensor or array back to its original shape before the `fit` operation.
|
|
147
|
+
|
|
148
|
+
Arguments:
|
|
149
|
+
y (torch.Tensor or numpy.array): The tensor or array to be restored to its original shape.
|
|
150
|
+
|
|
151
|
+
Returns:
|
|
152
|
+
y_restored (torch.Tensor or numpy.array): The tensor or array restored to its original shape.
|
|
153
|
+
"""
|
|
154
|
+
self.shape_unfit = y.shape
|
|
155
|
+
return y.reshape(*self.n_non_keepdims, *self.shape_unfit[1:])
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
if __name__ == "__main__":
|
|
159
|
+
import scitex
|
|
160
|
+
|
|
161
|
+
# Start
|
|
162
|
+
CONFIG, sys.stdout, sys.stderr, plt, CC = scitex.gen.start(sys, plt)
|
|
163
|
+
|
|
164
|
+
# Example1:
|
|
165
|
+
scitex.gen.printc("Example 1")
|
|
166
|
+
dh = DimHandler()
|
|
167
|
+
x = torch.rand(1, 2, 3, 4, 5, 6) # Example tensor
|
|
168
|
+
print(x.shape) # torch.Size([1, 2, 3, 4, 5, 6])
|
|
169
|
+
x = dh.fit(x, keepdims=[0, 2, 5])
|
|
170
|
+
print(x.shape) # torch.Size([40, 1, 3, 6])
|
|
171
|
+
x = dh.unfit(x)
|
|
172
|
+
print(x.shape) # torch.Size([2, 4, 5, 1, 3, 6])
|
|
173
|
+
|
|
174
|
+
# Example 2:
|
|
175
|
+
scitex.gen.printc("Example 2")
|
|
176
|
+
dh = DimHandler()
|
|
177
|
+
x = torch.rand(1, 2, 3, 4, 5, 6) # Example tensor
|
|
178
|
+
print(x.shape) # torch.Size([1, 2, 3, 4, 5, 6])
|
|
179
|
+
x = dh.fit(x, keepdims=[0, 2, 5])
|
|
180
|
+
print(x.shape) # torch.Size([40, 1, 3, 6])
|
|
181
|
+
y = x.mean(axis=-2) # calculation on the kept dims
|
|
182
|
+
print(y.shape) # torch.Size([40, 1, 6])
|
|
183
|
+
y = dh.unfit(y)
|
|
184
|
+
print(y.shape) # torch.Size([2, 4, 5, 1, 6])
|
|
185
|
+
|
|
186
|
+
# Close
|
|
187
|
+
scitex.gen.close(CONFIG)
|
|
188
|
+
|
|
189
|
+
# EOF
|
|
190
|
+
|
|
191
|
+
"""
|
|
192
|
+
/ssh:ywatanabe@444:/home/ywatanabe/proj/entrance/scitex/gen/_DimHandler.py
|
|
193
|
+
"""
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
# EOF
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "ywatanabe (2024-11-07 16:06:50)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/gen/_TimeStamper.py
|
|
5
|
+
|
|
6
|
+
import time
|
|
7
|
+
from typing import Union, Optional
|
|
8
|
+
import pandas as pd
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class TimeStamper:
|
|
12
|
+
"""
|
|
13
|
+
Functionality:
|
|
14
|
+
* Generates timestamps with comments and tracks elapsed time
|
|
15
|
+
* Records timestamps in a DataFrame for analysis
|
|
16
|
+
* Calculates time differences between timestamps
|
|
17
|
+
Input:
|
|
18
|
+
* Comments for each timestamp
|
|
19
|
+
* Format preference (simple or detailed)
|
|
20
|
+
Output:
|
|
21
|
+
* Formatted timestamp strings
|
|
22
|
+
* DataFrame with timestamp records
|
|
23
|
+
* Time differences between specified timestamps
|
|
24
|
+
Prerequisites:
|
|
25
|
+
* pandas
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
def __init__(self, is_simple: bool = True) -> None:
|
|
29
|
+
self.id: int = -1
|
|
30
|
+
self.start_time: float = time.time()
|
|
31
|
+
self._is_simple: bool = is_simple
|
|
32
|
+
self._prev: float = self.start_time
|
|
33
|
+
self._df_record: pd.DataFrame = pd.DataFrame(
|
|
34
|
+
columns=[
|
|
35
|
+
"timestamp",
|
|
36
|
+
"elapsed_since_start",
|
|
37
|
+
"elapsed_since_prev",
|
|
38
|
+
"comment",
|
|
39
|
+
"formatted_text",
|
|
40
|
+
]
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
def __call__(self, comment: str = "", verbose: bool = False) -> str:
|
|
44
|
+
now: float = time.time()
|
|
45
|
+
from_start: float = now - self.start_time
|
|
46
|
+
from_prev: float = now - self._prev
|
|
47
|
+
|
|
48
|
+
formatted_from_start: str = time.strftime("%H:%M:%S", time.gmtime(from_start))
|
|
49
|
+
formatted_from_prev: str = time.strftime("%H:%M:%S", time.gmtime(from_prev))
|
|
50
|
+
|
|
51
|
+
self.id += 1
|
|
52
|
+
self._prev = now
|
|
53
|
+
|
|
54
|
+
text: str = (
|
|
55
|
+
f"ID:{self.id} | {formatted_from_start} {comment} | "
|
|
56
|
+
if self._is_simple
|
|
57
|
+
else f"Time (id:{self.id}): total {formatted_from_start}, prev {formatted_from_prev} [hh:mm:ss]: {comment}\n"
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
self._df_record.loc[self.id] = [
|
|
61
|
+
now,
|
|
62
|
+
from_start,
|
|
63
|
+
from_prev,
|
|
64
|
+
comment,
|
|
65
|
+
text,
|
|
66
|
+
]
|
|
67
|
+
|
|
68
|
+
if verbose:
|
|
69
|
+
print(text)
|
|
70
|
+
return text
|
|
71
|
+
|
|
72
|
+
@property
|
|
73
|
+
def record(self) -> pd.DataFrame:
|
|
74
|
+
"""Returns the record DataFrame without the formatted_text column."""
|
|
75
|
+
return self._df_record[
|
|
76
|
+
[
|
|
77
|
+
"timestamp",
|
|
78
|
+
"elapsed_since_start",
|
|
79
|
+
"elapsed_since_prev",
|
|
80
|
+
"comment",
|
|
81
|
+
]
|
|
82
|
+
]
|
|
83
|
+
|
|
84
|
+
def delta(self, id1: int, id2: int) -> float:
|
|
85
|
+
"""Calculates time difference between two timestamps.
|
|
86
|
+
|
|
87
|
+
Parameters
|
|
88
|
+
----------
|
|
89
|
+
id1 : int
|
|
90
|
+
First timestamp ID
|
|
91
|
+
id2 : int
|
|
92
|
+
Second timestamp ID
|
|
93
|
+
|
|
94
|
+
Returns
|
|
95
|
+
-------
|
|
96
|
+
float
|
|
97
|
+
Time difference in seconds
|
|
98
|
+
|
|
99
|
+
Raises
|
|
100
|
+
------
|
|
101
|
+
ValueError
|
|
102
|
+
If IDs don't exist in records
|
|
103
|
+
"""
|
|
104
|
+
if id1 < 0:
|
|
105
|
+
id1 = len(self._df_record) + id1
|
|
106
|
+
if id2 < 0:
|
|
107
|
+
id2 = len(self._df_record) + id2
|
|
108
|
+
|
|
109
|
+
if not all(idx in self._df_record.index for idx in [id1, id2]):
|
|
110
|
+
raise ValueError("Invalid timestamp ID(s)")
|
|
111
|
+
|
|
112
|
+
return (
|
|
113
|
+
self._df_record.loc[id1, "timestamp"]
|
|
114
|
+
- self._df_record.loc[id2, "timestamp"]
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
if __name__ == "__main__":
|
|
119
|
+
ts = TimeStamper(is_simple=True)
|
|
120
|
+
ts("Starting process")
|
|
121
|
+
time.sleep(1)
|
|
122
|
+
ts("One second later")
|
|
123
|
+
time.sleep(2)
|
|
124
|
+
ts("Two seconds later")
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
# EOF
|
|
128
|
+
|
|
129
|
+
# #!/usr/bin/env python3
|
|
130
|
+
# # -*- coding: utf-8 -*-
|
|
131
|
+
# # Time-stamp: "ywatanabe (2024-11-07 16:06:50)"
|
|
132
|
+
# # File: ./scitex_repo/src/scitex/gen/_TimeStamper.py
|
|
133
|
+
|
|
134
|
+
# import time
|
|
135
|
+
# import pandas as pd
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
# class TimeStamper:
|
|
139
|
+
# """
|
|
140
|
+
# A class for generating timestamps with optional comments, tracking both the time since object creation and since the last call.
|
|
141
|
+
# """
|
|
142
|
+
|
|
143
|
+
# def __init__(self, is_simple=True):
|
|
144
|
+
# self.id = -1
|
|
145
|
+
# self.start_time = time.time()
|
|
146
|
+
# self._is_simple = is_simple
|
|
147
|
+
# self._prev = self.start_time
|
|
148
|
+
# self._df_record = pd.DataFrame(
|
|
149
|
+
# columns=[
|
|
150
|
+
# "timestamp",
|
|
151
|
+
# "elapsed_since_start",
|
|
152
|
+
# "elapsed_since_prev",
|
|
153
|
+
# "comment",
|
|
154
|
+
# "formatted_text",
|
|
155
|
+
# ]
|
|
156
|
+
# )
|
|
157
|
+
|
|
158
|
+
# def __call__(self, comment="", verbose=False):
|
|
159
|
+
# now = time.time()
|
|
160
|
+
# from_start = now - self.start_time
|
|
161
|
+
# from_prev = now - self._prev
|
|
162
|
+
# formatted_from_start = time.strftime(
|
|
163
|
+
# "%H:%M:%S", time.gmtime(from_start)
|
|
164
|
+
# )
|
|
165
|
+
# formatted_from_prev = time.strftime("%H:%M:%S", time.gmtime(from_prev))
|
|
166
|
+
# self.id += 1
|
|
167
|
+
# self._prev = now
|
|
168
|
+
# text = (
|
|
169
|
+
# f"ID:{self.id} | {formatted_from_start} {comment} | "
|
|
170
|
+
# if self._is_simple
|
|
171
|
+
# else f"Time (id:{self.id}): total {formatted_from_start}, prev {formatted_from_prev} [hh:mm:ss]: {comment}\n"
|
|
172
|
+
# )
|
|
173
|
+
|
|
174
|
+
# # Update DataFrame directly
|
|
175
|
+
# self._df_record.loc[self.id] = [
|
|
176
|
+
# now,
|
|
177
|
+
# from_start,
|
|
178
|
+
# from_prev,
|
|
179
|
+
# comment,
|
|
180
|
+
# text,
|
|
181
|
+
# ]
|
|
182
|
+
|
|
183
|
+
# if verbose:
|
|
184
|
+
# print(text)
|
|
185
|
+
# return text
|
|
186
|
+
|
|
187
|
+
# @property
|
|
188
|
+
# def record(self):
|
|
189
|
+
# return self._df_record[
|
|
190
|
+
# [
|
|
191
|
+
# "timestamp",
|
|
192
|
+
# "elapsed_since_start",
|
|
193
|
+
# "elapsed_since_prev",
|
|
194
|
+
# "comment",
|
|
195
|
+
# ]
|
|
196
|
+
# ]
|
|
197
|
+
|
|
198
|
+
# def delta(self, id1, id2):
|
|
199
|
+
# """
|
|
200
|
+
# Calculate the difference in seconds between two timestamps identified by their IDs.
|
|
201
|
+
|
|
202
|
+
# Parameters:
|
|
203
|
+
# id1 (int): The ID of the first timestamp.
|
|
204
|
+
# id2 (int): The ID of the second timestamp.
|
|
205
|
+
|
|
206
|
+
# Returns:
|
|
207
|
+
# float: The difference in seconds between the two timestamps.
|
|
208
|
+
|
|
209
|
+
# Raises:
|
|
210
|
+
# ValueError: If either id1 or id2 is not in the DataFrame index.
|
|
211
|
+
# """
|
|
212
|
+
# # Adjust for negative indices, similar to negative list indexing in Python
|
|
213
|
+
# if id1 < 0:
|
|
214
|
+
# id1 = len(self._df_record) + id1
|
|
215
|
+
# if id2 < 0:
|
|
216
|
+
# id2 = len(self._df_record) + id2
|
|
217
|
+
|
|
218
|
+
# # Check if both IDs exist in the DataFrame
|
|
219
|
+
# if (
|
|
220
|
+
# id1 not in self._df_record.index
|
|
221
|
+
# or id2 not in self._df_record.index
|
|
222
|
+
# ):
|
|
223
|
+
# raise ValueError(
|
|
224
|
+
# "One or both of the IDs do not exist in the record."
|
|
225
|
+
# )
|
|
226
|
+
|
|
227
|
+
# # Compute the difference in timestamps
|
|
228
|
+
# time_diff = (
|
|
229
|
+
# self._df_record.loc[id1, "timestamp"]
|
|
230
|
+
# - self._df_record.loc[id2, "timestamp"]
|
|
231
|
+
# )
|
|
232
|
+
# return time_diff
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
# if __name__ == "__main__":
|
|
236
|
+
# ts = TimeStamper(is_simple=True)
|
|
237
|
+
# ts("Starting process")
|
|
238
|
+
# time.sleep(1)
|
|
239
|
+
# ts("One second later")
|
|
240
|
+
# time.sleep(2)
|
|
241
|
+
# ts("Two seconds later")
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
# # EOF
|