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/io/_cache.py
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
#!./env/bin/python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-08-20 19:42:38 (ywatanabe)"
|
|
4
|
+
# ./src/scitex/io/_cache.py
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
import os
|
|
8
|
+
import pickle
|
|
9
|
+
import sys
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def cache(id, *args):
|
|
14
|
+
"""
|
|
15
|
+
Store or fetch data using a pickle file.
|
|
16
|
+
|
|
17
|
+
This function provides a simple caching mechanism for storing and retrieving
|
|
18
|
+
Python objects. It uses pickle to serialize the data and stores it in a file
|
|
19
|
+
with a unique identifier. If the data is already cached, it can be retrieved
|
|
20
|
+
without recomputation.
|
|
21
|
+
|
|
22
|
+
Parameters:
|
|
23
|
+
-----------
|
|
24
|
+
id : str
|
|
25
|
+
A unique identifier for the cache file.
|
|
26
|
+
*args : str
|
|
27
|
+
Variable names to be cached or loaded.
|
|
28
|
+
|
|
29
|
+
Returns:
|
|
30
|
+
--------
|
|
31
|
+
tuple
|
|
32
|
+
A tuple of cached values corresponding to the input variable names.
|
|
33
|
+
|
|
34
|
+
Raises:
|
|
35
|
+
-------
|
|
36
|
+
ValueError
|
|
37
|
+
If the cache file is not found and not all variables are defined.
|
|
38
|
+
|
|
39
|
+
Example:
|
|
40
|
+
--------
|
|
41
|
+
>>> import scitex
|
|
42
|
+
>>> import numpy as np
|
|
43
|
+
>>>
|
|
44
|
+
>>> # Variables to cache
|
|
45
|
+
>>> var1 = "x"
|
|
46
|
+
>>> var2 = 1
|
|
47
|
+
>>> var3 = np.ones(10)
|
|
48
|
+
>>>
|
|
49
|
+
>>> # Saving
|
|
50
|
+
>>> var1, var2, var3 = scitex.io.cache("my_id", "var1", "var2", "var3")
|
|
51
|
+
>>> print(var1, var2, var3)
|
|
52
|
+
>>>
|
|
53
|
+
>>> # Loading when not all variables are defined and the id exists
|
|
54
|
+
>>> del var1, var2, var3
|
|
55
|
+
>>> var1, var2, var3 = scitex.io.cache("my_id", "var1", "var2", "var3")
|
|
56
|
+
>>> print(var1, var2, var3)
|
|
57
|
+
"""
|
|
58
|
+
cache_dir = Path.home() / ".cache" / "your_app_name"
|
|
59
|
+
cache_dir.mkdir(parents=True, exist_ok=True)
|
|
60
|
+
cache_file = cache_dir / f"{id}.pkl"
|
|
61
|
+
|
|
62
|
+
does_cache_file_exist = cache_file.exists()
|
|
63
|
+
|
|
64
|
+
# Get the caller's local variables
|
|
65
|
+
caller_locals = sys._getframe(1).f_locals
|
|
66
|
+
are_all_variables_defined = all(arg in caller_locals for arg in args)
|
|
67
|
+
|
|
68
|
+
if are_all_variables_defined:
|
|
69
|
+
# If all variables are defined, save them to cache and return as-is
|
|
70
|
+
data_to_cache = {arg: caller_locals[arg] for arg in args}
|
|
71
|
+
with cache_file.open("wb") as f:
|
|
72
|
+
pickle.dump(data_to_cache, f)
|
|
73
|
+
return tuple(data_to_cache.values())
|
|
74
|
+
else:
|
|
75
|
+
if does_cache_file_exist:
|
|
76
|
+
# If cache exists, load and return the values
|
|
77
|
+
with cache_file.open("rb") as f:
|
|
78
|
+
loaded_data = pickle.load(f)
|
|
79
|
+
return tuple(loaded_data[arg] for arg in args)
|
|
80
|
+
else:
|
|
81
|
+
raise ValueError("Cache file not found and not all variables are defined.")
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
# Usage example
|
|
85
|
+
if __name__ == "__main__":
|
|
86
|
+
import scitex
|
|
87
|
+
import numpy as np
|
|
88
|
+
|
|
89
|
+
# Variables to cache
|
|
90
|
+
var1 = "x"
|
|
91
|
+
var2 = 1
|
|
92
|
+
var3 = np.ones(10)
|
|
93
|
+
|
|
94
|
+
# Saving
|
|
95
|
+
var1, var2, var3 = scitex.io.cache("my_id", "var1", "var2", "var3")
|
|
96
|
+
print(var1, var2, var3)
|
|
97
|
+
|
|
98
|
+
# Loading when not all variables are defined and the id exists
|
|
99
|
+
del var1, var2, var3
|
|
100
|
+
var1, var2, var3 = scitex.io.cache("my_id", "var1", "var2", "var3")
|
|
101
|
+
print(var1, var2, var3)
|
scitex/io/_flush.py
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-02 03:23:44 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/io/_flush.py
|
|
5
|
+
|
|
6
|
+
import os
|
|
7
|
+
import sys
|
|
8
|
+
import warnings
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def flush(sys=sys):
|
|
12
|
+
"""
|
|
13
|
+
Flushes the system's stdout and stderr, and syncs the file system.
|
|
14
|
+
This ensures all pending write operations are completed.
|
|
15
|
+
"""
|
|
16
|
+
if sys is None:
|
|
17
|
+
warnings.warn("flush needs sys. Skipping.")
|
|
18
|
+
else:
|
|
19
|
+
sys.stdout.flush()
|
|
20
|
+
sys.stderr.flush()
|
|
21
|
+
os.sync()
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# EOF
|
scitex/io/_glob.py
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-25 00:31:08 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/io/_glob.py
|
|
5
|
+
|
|
6
|
+
THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/io/_glob.py"
|
|
7
|
+
|
|
8
|
+
import re as _re
|
|
9
|
+
from glob import glob as _glob
|
|
10
|
+
from ..str._parse import parse as _parse
|
|
11
|
+
from natsort import natsorted as _natsorted
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def glob(expression, parse=False, ensure_one=False):
|
|
15
|
+
"""
|
|
16
|
+
Perform a glob operation with natural sorting and extended pattern support.
|
|
17
|
+
|
|
18
|
+
This function extends the standard glob functionality by adding natural sorting
|
|
19
|
+
and support for curly brace expansion in the glob pattern.
|
|
20
|
+
|
|
21
|
+
Parameters:
|
|
22
|
+
-----------
|
|
23
|
+
expression : str
|
|
24
|
+
The glob pattern to match against file paths. Supports standard glob syntax
|
|
25
|
+
and curly brace expansion (e.g., 'dir/{a,b}/*.txt').
|
|
26
|
+
parse : bool, optional
|
|
27
|
+
Whether to parse the matched paths. Default is False.
|
|
28
|
+
ensure_one : bool, optional
|
|
29
|
+
Ensure exactly one match is found. Default is False.
|
|
30
|
+
|
|
31
|
+
Returns:
|
|
32
|
+
--------
|
|
33
|
+
Union[List[str], Tuple[List[str], List[dict]]]
|
|
34
|
+
If parse=False: A naturally sorted list of file paths
|
|
35
|
+
If parse=True: Tuple of (paths, parsed results)
|
|
36
|
+
|
|
37
|
+
Examples:
|
|
38
|
+
---------
|
|
39
|
+
>>> glob('data/*.txt')
|
|
40
|
+
['data/file1.txt', 'data/file2.txt', 'data/file10.txt']
|
|
41
|
+
|
|
42
|
+
>>> glob('data/{a,b}/*.txt')
|
|
43
|
+
['data/a/file1.txt', 'data/a/file2.txt', 'data/b/file1.txt']
|
|
44
|
+
|
|
45
|
+
>>> paths, parsed = glob('data/subj_{id}/run_{run}.txt', parse=True)
|
|
46
|
+
>>> paths
|
|
47
|
+
['data/subj_001/run_01.txt', 'data/subj_001/run_02.txt']
|
|
48
|
+
>>> parsed
|
|
49
|
+
[{'id': '001', 'run': '01'}, {'id': '001', 'run': '02'}]
|
|
50
|
+
|
|
51
|
+
>>> paths, parsed = glob('data/subj_{id}/run_{run}.txt', parse=True, ensure_one=True)
|
|
52
|
+
AssertionError # if more than one file matches
|
|
53
|
+
"""
|
|
54
|
+
glob_pattern = _re.sub(r"{[^}]*}", "*", expression)
|
|
55
|
+
# Enable recursive globbing for ** patterns
|
|
56
|
+
recursive = "**" in glob_pattern
|
|
57
|
+
try:
|
|
58
|
+
found_paths = _natsorted(_glob(eval(glob_pattern), recursive=recursive))
|
|
59
|
+
except:
|
|
60
|
+
found_paths = _natsorted(_glob(glob_pattern, recursive=recursive))
|
|
61
|
+
|
|
62
|
+
if ensure_one:
|
|
63
|
+
assert len(found_paths) == 1
|
|
64
|
+
|
|
65
|
+
if parse:
|
|
66
|
+
parsed = [_parse(found_path, expression) for found_path in found_paths]
|
|
67
|
+
return found_paths, parsed
|
|
68
|
+
|
|
69
|
+
else:
|
|
70
|
+
return found_paths
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def parse_glob(expression, ensure_one=False):
|
|
74
|
+
"""
|
|
75
|
+
Convenience function for glob with parsing enabled.
|
|
76
|
+
|
|
77
|
+
Parameters:
|
|
78
|
+
-----------
|
|
79
|
+
expression : str
|
|
80
|
+
The glob pattern to match against file paths.
|
|
81
|
+
ensure_one : bool, optional
|
|
82
|
+
Ensure exactly one match is found. Default is False.
|
|
83
|
+
|
|
84
|
+
Returns:
|
|
85
|
+
--------
|
|
86
|
+
Tuple[List[str], List[dict]]
|
|
87
|
+
Matched paths and parsed results.
|
|
88
|
+
|
|
89
|
+
Examples:
|
|
90
|
+
---------
|
|
91
|
+
>>> paths, parsed = pglob('data/subj_{id}/run_{run}.txt')
|
|
92
|
+
>>> paths
|
|
93
|
+
['data/subj_001/run_01.txt', 'data/subj_001/run_02.txt']
|
|
94
|
+
>>> parsed
|
|
95
|
+
[{'id': '001', 'run': '01'}, {'id': '001', 'run': '02'}]
|
|
96
|
+
|
|
97
|
+
>>> paths, parsed = pglob('data/subj_{id}/run_{run}.txt', ensure_one=True)
|
|
98
|
+
AssertionError # if more than one file matches
|
|
99
|
+
"""
|
|
100
|
+
return glob(expression, parse=True, ensure_one=ensure_one)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
# EOF
|
scitex/io/_json2md.py
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-12-19 15:37:46 (ywatanabe)"
|
|
4
|
+
# File: ./Ninja/workspace/formats/json2md.py
|
|
5
|
+
|
|
6
|
+
THIS_FILE = "/home/ywatanabe/.emacs.d/lisp/Ninja/workspace/formats/json2md.py"
|
|
7
|
+
|
|
8
|
+
import json
|
|
9
|
+
import sys
|
|
10
|
+
import argparse
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def json2md(obj, level=1):
|
|
14
|
+
output = []
|
|
15
|
+
if isinstance(obj, dict):
|
|
16
|
+
for key, value in obj.items():
|
|
17
|
+
if output: # Add extra newline between sections
|
|
18
|
+
output.append("")
|
|
19
|
+
output.append("#" * level + " " + str(key))
|
|
20
|
+
if isinstance(value, (dict, list)):
|
|
21
|
+
output.append(json2md(value, level + 1))
|
|
22
|
+
else:
|
|
23
|
+
output.append(str(value) + "\n")
|
|
24
|
+
elif isinstance(obj, list):
|
|
25
|
+
for item in obj:
|
|
26
|
+
if isinstance(item, (dict, list)):
|
|
27
|
+
output.append(json2md(item, level))
|
|
28
|
+
else:
|
|
29
|
+
output.append("* " + str(item))
|
|
30
|
+
return "\n".join(filter(None, output))
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def main():
|
|
34
|
+
parser = argparse.ArgumentParser(description="Convert JSON to Markdown")
|
|
35
|
+
parser.add_argument("input", help="Input JSON file")
|
|
36
|
+
parser.add_argument("-o", "--output", help="Output file (default: stdout)")
|
|
37
|
+
args = parser.parse_args()
|
|
38
|
+
|
|
39
|
+
try:
|
|
40
|
+
with open(args.input, "r") as f:
|
|
41
|
+
data = json.load(f)
|
|
42
|
+
|
|
43
|
+
result = json2md(data)
|
|
44
|
+
|
|
45
|
+
if args.output:
|
|
46
|
+
with open(args.output, "w") as f:
|
|
47
|
+
f.write(result)
|
|
48
|
+
else:
|
|
49
|
+
print(result)
|
|
50
|
+
|
|
51
|
+
except FileNotFoundError:
|
|
52
|
+
print(f"Error: File {args.input} not found", file=sys.stderr)
|
|
53
|
+
sys.exit(1)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
if __name__ == "__main__":
|
|
57
|
+
main()
|
|
58
|
+
|
|
59
|
+
"""
|
|
60
|
+
python ./Ninja/workspace/formats/json2md.py
|
|
61
|
+
python -m workspace.formats.json2md
|
|
62
|
+
"""
|
|
63
|
+
# EOF
|
|
64
|
+
|
|
65
|
+
# #!/usr/bin/env python3
|
|
66
|
+
# # -*- coding: utf-8 -*-
|
|
67
|
+
# # Time-stamp: "2024-12-19 15:29:28 (ywatanabe)"
|
|
68
|
+
# # File: ./Ninja/workspace/formats/json2md.py
|
|
69
|
+
|
|
70
|
+
# THIS_FILE = "/home/ywatanabe/.emacs.d/lisp/Ninja/workspace/formats/json2md.py"
|
|
71
|
+
|
|
72
|
+
# import json
|
|
73
|
+
# import sys
|
|
74
|
+
|
|
75
|
+
# def json2md(obj, level=1):
|
|
76
|
+
# output = []
|
|
77
|
+
# if isinstance(obj, dict):
|
|
78
|
+
# for key, value in obj.items():
|
|
79
|
+
# if output: # Add extra newline between sections
|
|
80
|
+
# output.append("")
|
|
81
|
+
# output.append("#" * level + " " + str(key))
|
|
82
|
+
# if isinstance(value, (dict, list)):
|
|
83
|
+
# output.append(json2md(value, level + 1))
|
|
84
|
+
# else:
|
|
85
|
+
# output.append(str(value) + "\n")
|
|
86
|
+
# elif isinstance(obj, list):
|
|
87
|
+
# for item in obj:
|
|
88
|
+
# if isinstance(item, (dict, list)):
|
|
89
|
+
# output.append(json2md(item, level))
|
|
90
|
+
# else:
|
|
91
|
+
# output.append("* " + str(item))
|
|
92
|
+
# return "\n".join(filter(None, output))
|
|
93
|
+
|
|
94
|
+
# def main():
|
|
95
|
+
# if len(sys.argv) != 2:
|
|
96
|
+
# print("Usage: json2md.py <input.json>")
|
|
97
|
+
# sys.exit(1)
|
|
98
|
+
|
|
99
|
+
# lpath = sys.argv[1].replace("/./", "/")
|
|
100
|
+
# with open(lpath, "r") as f:
|
|
101
|
+
# data = json.load(f)
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
# if __name__ == "__main__":
|
|
105
|
+
# main()
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
# """
|
|
109
|
+
# python ./Ninja/workspace/formats/json2md.py
|
|
110
|
+
# python -m workspace.formats.json2md
|
|
111
|
+
# """
|
|
112
|
+
|
|
113
|
+
# # EOF
|
scitex/io/_load.py
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-04-10 08:05:53 (ywatanabe)"
|
|
4
|
+
# File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/io/_load.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "/ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/io/_load.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
# ----------------------------------------
|
|
11
|
+
|
|
12
|
+
from typing import Any
|
|
13
|
+
import glob
|
|
14
|
+
from ..decorators import preserve_doc
|
|
15
|
+
from ..str._clean_path import clean_path
|
|
16
|
+
|
|
17
|
+
# from ._load_modules._catboost import _load_catboost
|
|
18
|
+
from ._load_modules._con import _load_con
|
|
19
|
+
from ._load_modules._db import _load_sqlite3db
|
|
20
|
+
from ._load_modules._docx import _load_docx
|
|
21
|
+
from ._load_modules._eeg import _load_eeg_data
|
|
22
|
+
from ._load_modules._hdf5 import _load_hdf5
|
|
23
|
+
from ._load_modules._image import _load_image
|
|
24
|
+
from ._load_modules._joblib import _load_joblib
|
|
25
|
+
from ._load_modules._json import _load_json
|
|
26
|
+
from ._load_modules._markdown import _load_markdown
|
|
27
|
+
from ._load_modules._numpy import _load_npy
|
|
28
|
+
from ._load_modules._matlab import _load_matlab
|
|
29
|
+
from ._load_modules._pandas import _load_csv, _load_excel, _load_tsv
|
|
30
|
+
from ._load_modules._pdf import _load_pdf
|
|
31
|
+
from ._load_modules._pickle import _load_pickle
|
|
32
|
+
from ._load_modules._torch import _load_torch
|
|
33
|
+
from ._load_modules._txt import _load_txt
|
|
34
|
+
from ._load_modules._xml import _load_xml
|
|
35
|
+
from ._load_modules._yaml import _load_yaml
|
|
36
|
+
from ._load_modules._matlab import _load_matlab
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def load(lpath: str, show: bool = False, verbose: bool = False, **kwargs) -> Any:
|
|
40
|
+
"""
|
|
41
|
+
Load data from various file formats.
|
|
42
|
+
|
|
43
|
+
This function supports loading data from multiple file formats.
|
|
44
|
+
|
|
45
|
+
Parameters
|
|
46
|
+
----------
|
|
47
|
+
lpath : str
|
|
48
|
+
The path to the file to be loaded.
|
|
49
|
+
show : bool, optional
|
|
50
|
+
If True, display additional information during loading. Default is False.
|
|
51
|
+
verbose : bool, optional
|
|
52
|
+
If True, print verbose output during loading. Default is False.
|
|
53
|
+
**kwargs : dict
|
|
54
|
+
Additional keyword arguments to be passed to the specific loading function.
|
|
55
|
+
|
|
56
|
+
Returns
|
|
57
|
+
-------
|
|
58
|
+
object
|
|
59
|
+
The loaded data object, which can be of various types depending on the input file format.
|
|
60
|
+
|
|
61
|
+
Raises
|
|
62
|
+
------
|
|
63
|
+
ValueError
|
|
64
|
+
If the file extension is not supported.
|
|
65
|
+
FileNotFoundError
|
|
66
|
+
If the specified file does not exist.
|
|
67
|
+
|
|
68
|
+
Supported Extensions
|
|
69
|
+
-------------------
|
|
70
|
+
- Data formats: .csv, .tsv, .xls, .xlsx, .xlsm, .xlsb, .json, .yaml, .yml
|
|
71
|
+
- Scientific: .npy, .npz, .mat, .hdf5, .con
|
|
72
|
+
- ML/DL: .pth, .pt, .cbm, .joblib, .pkl
|
|
73
|
+
- Documents: .txt, .log, .event, .md, .docx, .pdf, .xml
|
|
74
|
+
- Images: .jpg, .png, .tiff, .tif
|
|
75
|
+
- EEG data: .vhdr, .vmrk, .edf, .bdf, .gdf, .cnt, .egi, .eeg, .set
|
|
76
|
+
- Database: .db
|
|
77
|
+
|
|
78
|
+
Examples
|
|
79
|
+
--------
|
|
80
|
+
>>> data = load('data.csv')
|
|
81
|
+
>>> image = load('image.png')
|
|
82
|
+
>>> model = load('model.pth')
|
|
83
|
+
"""
|
|
84
|
+
lpath = clean_path(lpath)
|
|
85
|
+
|
|
86
|
+
# Check if it's a glob pattern
|
|
87
|
+
if "*" in lpath or "?" in lpath or "[" in lpath:
|
|
88
|
+
# Handle glob pattern
|
|
89
|
+
matched_files = sorted(glob.glob(lpath))
|
|
90
|
+
if not matched_files:
|
|
91
|
+
raise FileNotFoundError(f"No files found matching pattern: {lpath}")
|
|
92
|
+
# Load all matched files
|
|
93
|
+
results = []
|
|
94
|
+
for file_path in matched_files:
|
|
95
|
+
results.append(load(file_path, show=show, verbose=verbose, **kwargs))
|
|
96
|
+
return results
|
|
97
|
+
|
|
98
|
+
if not os.path.exists(lpath):
|
|
99
|
+
raise FileNotFoundError(f"{lpath} not found.")
|
|
100
|
+
|
|
101
|
+
loaders_dict = {
|
|
102
|
+
# Default
|
|
103
|
+
"": _load_txt,
|
|
104
|
+
# Config/Settings
|
|
105
|
+
"yaml": _load_yaml,
|
|
106
|
+
"yml": _load_yaml,
|
|
107
|
+
"json": _load_json,
|
|
108
|
+
"xml": _load_xml,
|
|
109
|
+
# ML/DL Models
|
|
110
|
+
"pth": _load_torch,
|
|
111
|
+
"pt": _load_torch,
|
|
112
|
+
# "cbm": _load_catboost,
|
|
113
|
+
"joblib": _load_joblib,
|
|
114
|
+
"pkl": _load_pickle,
|
|
115
|
+
"pickle": _load_pickle,
|
|
116
|
+
"gz": _load_pickle, # For .pkl.gz files
|
|
117
|
+
# Tabular Data
|
|
118
|
+
"csv": _load_csv,
|
|
119
|
+
"tsv": _load_tsv,
|
|
120
|
+
"xls": _load_excel,
|
|
121
|
+
"xlsx": _load_excel,
|
|
122
|
+
"xlsm": _load_excel,
|
|
123
|
+
"xlsb": _load_excel,
|
|
124
|
+
"db": _load_sqlite3db,
|
|
125
|
+
# Scientific Data
|
|
126
|
+
"npy": _load_npy,
|
|
127
|
+
"npz": _load_npy,
|
|
128
|
+
"mat": _load_matlab,
|
|
129
|
+
"hdf5": _load_hdf5,
|
|
130
|
+
"h5": _load_hdf5,
|
|
131
|
+
"con": _load_con,
|
|
132
|
+
# Documents
|
|
133
|
+
"txt": _load_txt,
|
|
134
|
+
"tex": _load_txt,
|
|
135
|
+
"log": _load_txt,
|
|
136
|
+
"event": _load_txt,
|
|
137
|
+
"py": _load_txt,
|
|
138
|
+
"sh": _load_txt,
|
|
139
|
+
"md": _load_markdown,
|
|
140
|
+
"docx": _load_docx,
|
|
141
|
+
"pdf": _load_pdf,
|
|
142
|
+
# Images
|
|
143
|
+
"jpg": _load_image,
|
|
144
|
+
"png": _load_image,
|
|
145
|
+
"tiff": _load_image,
|
|
146
|
+
"tif": _load_image,
|
|
147
|
+
# EEG Data
|
|
148
|
+
"vhdr": _load_eeg_data,
|
|
149
|
+
"vmrk": _load_eeg_data,
|
|
150
|
+
"edf": _load_eeg_data,
|
|
151
|
+
"bdf": _load_eeg_data,
|
|
152
|
+
"gdf": _load_eeg_data,
|
|
153
|
+
"cnt": _load_eeg_data,
|
|
154
|
+
"egi": _load_eeg_data,
|
|
155
|
+
"eeg": _load_eeg_data,
|
|
156
|
+
"set": _load_eeg_data,
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
ext = lpath.split(".")[-1] if "." in lpath else ""
|
|
160
|
+
loader = preserve_doc(loaders_dict.get(ext, _load_txt))
|
|
161
|
+
|
|
162
|
+
try:
|
|
163
|
+
return loader(lpath, **kwargs)
|
|
164
|
+
except (ValueError, FileNotFoundError) as e:
|
|
165
|
+
raise ValueError(f"Error loading file {lpath}: {str(e)}")
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
# EOF
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Timestamp: "2025-04-22 07:19:03 (ywatanabe)"
|
|
4
|
+
# File: /ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/io/_load_configs.py
|
|
5
|
+
# ----------------------------------------
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
__FILE__ = "/ssh:sp:/home/ywatanabe/proj/scitex_repo/src/scitex/io/_load_configs.py"
|
|
9
|
+
__DIR__ = os.path.dirname(__FILE__)
|
|
10
|
+
# ----------------------------------------
|
|
11
|
+
|
|
12
|
+
THIS_FILE = "/home/ywatanabe/proj/scitex_repo/src/scitex/io/_load_configs.py"
|
|
13
|
+
#!/usr/bin/env python3
|
|
14
|
+
# -*- coding: utf-8 -*-
|
|
15
|
+
# Time-stamp: "2025-02-27 11:09:00 (ywatanabe)"
|
|
16
|
+
# File: ./scitex_repo/src/scitex/io/_load_configs.py
|
|
17
|
+
|
|
18
|
+
from ..dict import DotDict
|
|
19
|
+
from ._load import load
|
|
20
|
+
from ._glob import glob
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def load_configs(IS_DEBUG=None, show=False, verbose=False):
|
|
24
|
+
"""Load YAML configuration files from ./config directory.
|
|
25
|
+
|
|
26
|
+
Parameters
|
|
27
|
+
----------
|
|
28
|
+
IS_DEBUG : bool, optional
|
|
29
|
+
Debug mode flag. If None, reads from IS_DEBUG.yaml
|
|
30
|
+
show : bool
|
|
31
|
+
Show configuration changes
|
|
32
|
+
verbose : bool
|
|
33
|
+
Print detailed information
|
|
34
|
+
|
|
35
|
+
Returns
|
|
36
|
+
-------
|
|
37
|
+
DotDict
|
|
38
|
+
Merged configuration dictionary
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
def apply_debug_values(config, IS_DEBUG):
|
|
42
|
+
"""Apply debug values if IS_DEBUG is True."""
|
|
43
|
+
if not IS_DEBUG or not isinstance(config, (dict, DotDict)):
|
|
44
|
+
return config
|
|
45
|
+
|
|
46
|
+
for key, value in list(config.items()):
|
|
47
|
+
if key.startswith(("DEBUG_", "debug_")):
|
|
48
|
+
dk_wo_debug_prefix = key.split("_", 1)[1]
|
|
49
|
+
config[dk_wo_debug_prefix] = value
|
|
50
|
+
if show or verbose:
|
|
51
|
+
print(f"{key} -> {dk_wo_debug_prefix}")
|
|
52
|
+
elif isinstance(value, (dict, DotDict)):
|
|
53
|
+
config[key] = apply_debug_values(value, IS_DEBUG)
|
|
54
|
+
return config
|
|
55
|
+
|
|
56
|
+
try:
|
|
57
|
+
# Set debug mode
|
|
58
|
+
IS_DEBUG = (
|
|
59
|
+
IS_DEBUG
|
|
60
|
+
or os.getenv("CI") == "True"
|
|
61
|
+
or (
|
|
62
|
+
os.path.exists("./config/IS_DEBUG.yaml")
|
|
63
|
+
and load("./config/IS_DEBUG.yaml").get("IS_DEBUG")
|
|
64
|
+
)
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
# Load and merge configs
|
|
68
|
+
CONFIGS = {}
|
|
69
|
+
for lpath in glob("./config/*.yaml"):
|
|
70
|
+
if config := load(lpath):
|
|
71
|
+
CONFIGS.update(apply_debug_values(config, IS_DEBUG))
|
|
72
|
+
|
|
73
|
+
return DotDict(CONFIGS)
|
|
74
|
+
|
|
75
|
+
except Exception as e:
|
|
76
|
+
print(f"Error loading configs: {e}")
|
|
77
|
+
return DotDict({})
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
# def load_configs(IS_DEBUG=None, show=False, verbose=False):
|
|
81
|
+
# """
|
|
82
|
+
# Load configuration files from the ./config directory.
|
|
83
|
+
|
|
84
|
+
# Parameters:
|
|
85
|
+
# -----------
|
|
86
|
+
# IS_DEBUG : bool, optional
|
|
87
|
+
# If True, use debug configurations. If None, check ./config/IS_DEBUG.yaml.
|
|
88
|
+
# show : bool, optional
|
|
89
|
+
# If True, display additional information during loading.
|
|
90
|
+
# verbose : bool, optional
|
|
91
|
+
# If True, print verbose output during loading.
|
|
92
|
+
|
|
93
|
+
# Returns:
|
|
94
|
+
# --------
|
|
95
|
+
# DotDict
|
|
96
|
+
# A dictionary-like object containing the loaded configurations.
|
|
97
|
+
# """
|
|
98
|
+
|
|
99
|
+
# def apply_debug_values(config, IS_DEBUG):
|
|
100
|
+
# if IS_DEBUG:
|
|
101
|
+
# if isinstance(config, (dict, DotDict)):
|
|
102
|
+
# for key, value in list(config.items()):
|
|
103
|
+
# try:
|
|
104
|
+
# if key.startswith(("DEBUG_", "debug_")):
|
|
105
|
+
# dk_wo_debug_prefix = key.split("_", 1)[1]
|
|
106
|
+
# config[dk_wo_debug_prefix] = value
|
|
107
|
+
# if show or verbose:
|
|
108
|
+
# print(f"\n{key} -> {dk_wo_debug_prefix}\n")
|
|
109
|
+
# elif isinstance(value, (dict, DotDict)):
|
|
110
|
+
# config[key] = apply_debug_values(value, IS_DEBUG)
|
|
111
|
+
# except Exception as e:
|
|
112
|
+
# print(e)
|
|
113
|
+
# return config
|
|
114
|
+
|
|
115
|
+
# if os.getenv("CI") == "True":
|
|
116
|
+
# IS_DEBUG = True
|
|
117
|
+
|
|
118
|
+
# try:
|
|
119
|
+
# # Check ./config/IS_DEBUG.yaml file if IS_DEBUG argument is not passed
|
|
120
|
+
# if IS_DEBUG is None:
|
|
121
|
+
# IS_DEBUG_PATH = "./config/IS_DEBUG.yaml"
|
|
122
|
+
# if os.path.exists(IS_DEBUG_PATH):
|
|
123
|
+
# IS_DEBUG = load("./config/IS_DEBUG.yaml").get("IS_DEBUG")
|
|
124
|
+
# else:
|
|
125
|
+
# IS_DEBUG = False
|
|
126
|
+
|
|
127
|
+
# # Main
|
|
128
|
+
# CONFIGS = {}
|
|
129
|
+
# for lpath in glob("./config/*.yaml"):
|
|
130
|
+
# config = load(lpath)
|
|
131
|
+
# if config:
|
|
132
|
+
# CONFIG = apply_debug_values(config, IS_DEBUG)
|
|
133
|
+
# CONFIGS.update(CONFIG)
|
|
134
|
+
|
|
135
|
+
# CONFIGS = DotDict(CONFIGS)
|
|
136
|
+
|
|
137
|
+
# except Exception as e:
|
|
138
|
+
# print(e)
|
|
139
|
+
# CONFIGS = DotDict({})
|
|
140
|
+
|
|
141
|
+
# return CONFIGS
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
#
|
|
145
|
+
|
|
146
|
+
# EOF
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Time-stamp: "2024-11-14 07:41:25 (ywatanabe)"
|
|
4
|
+
# File: ./scitex_repo/src/scitex/io/_load_modules/__init__.py
|
|
5
|
+
|
|
6
|
+
import importlib as __importlib
|
|
7
|
+
import inspect as __inspect
|
|
8
|
+
import os as __os
|
|
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 only functions and classes from the module
|
|
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
|
+
|
|
25
|
+
# Clean up temporary variables
|
|
26
|
+
del (
|
|
27
|
+
__os,
|
|
28
|
+
__importlib,
|
|
29
|
+
__inspect,
|
|
30
|
+
current_dir,
|
|
31
|
+
filename,
|
|
32
|
+
module_name,
|
|
33
|
+
module,
|
|
34
|
+
name,
|
|
35
|
+
obj,
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
# EOF
|