pysits 2.0.0.dev4__tar.gz → 2.0.0.dev5__tar.gz
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.
- pysits-2.0.0.dev5/.claude/settings.local.json +5 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/PKG-INFO +1 -1
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pyproject.toml +1 -1
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/conversions/common.py +27 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/models/data/tuning.py +106 -34
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/templates/tuning.html +5 -65
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/tests/test_conversions.py +19 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/tests/test_tuning.py +46 -11
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/uv.lock +1 -1
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/.gitattributes +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/.github/actions/setup-pysits/action.yml +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/.github/workflows/ruff.yaml +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/.github/workflows/tests.yaml +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/.gitignore +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/.pre-commit-config.yaml +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/LICENSE +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/README.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/conda/meta.yaml +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/__init__.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/backend/__init__.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/backend/arrow.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/backend/functions.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/backend/loaders.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/backend/pkgs.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/conversions/__init__.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/conversions/clojure.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/conversions/decorators.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/conversions/dsl/__init__.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/conversions/dsl/base.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/conversions/dsl/mask.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/conversions/dsl/tuning.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/conversions/stac.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/conversions/tibble.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/conversions/vector.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/conversions/xarray.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/__init__.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/impute_linear.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/impute_mean.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/impute_mean_window.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/impute_median.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/plot.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_accuracy.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_accuracy_summary.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_add_base_cube.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_apply.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_as_geopandas.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_bands.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_barlow_twins.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_bbox.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_classify.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_clean.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_cluster_clean.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_cluster_dendro.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_cluster_frequency.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_colors.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_colors_qgis.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_colors_reset.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_colors_set.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_colors_show.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_combine_predictions.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_confidence_sampling.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_config.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_config_show.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_config_user_file.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_contrastive_learning.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_cube.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_cube_copy.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_encode.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_formula_linear.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_formula_logref.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_geo_dist.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_get_class.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_get_data.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_get_probs.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_kfold_validate.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_label_classification.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_labels.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_labels_summary.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_lightgbm.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_lighttae.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_list_collections.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_lstm_fcn.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_merge.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_mixture_model.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_mlp.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_model_export.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_mosaic.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_parallel.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_patterns.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_pre_train.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_pred_features.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_pred_normalize.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_pred_references.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_pred_sample.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_predictors.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_random_sampling.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_reclassify.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_reduce.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_reduce_imbalance.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_regularize.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_resnet.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_rfor.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_roi_to_tiles.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_sample.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_sampling_design.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_sankey.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_segment.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_select.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_show_prediction.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_slic.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_smooth.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_snic.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_som_clean_samples.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_som_evaluate_cluster.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_som_map.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_som_remove_samples.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_ssl_lejepa.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_ssl_mae.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_ssl_vicreg.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_stats.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_stratified_sampling.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_svm.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_tae.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_tempcnn.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_texture.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_tiles_to_roi.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_timeline.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_timeseries_to_csv.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_to_csv.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_to_xlsx.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_train.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_tuning.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_tuning_hparams.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_uncertainty.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_uncertainty_sampling.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_validate.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_variance.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_view.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/sits_xgboost.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/content/summary.md +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/docs/decorators.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/extras/__init__.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/extras/earthdatalogin.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/extras/torch.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/jinja.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/models/__init__.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/models/base.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/models/data/__init__.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/models/data/accuracy.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/models/data/base.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/models/data/cube.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/models/data/frame.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/models/data/frame_accessor.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/models/data/matrix.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/models/data/table.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/models/data/ts.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/models/data/vector.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/models/frame.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/models/ml.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/models/resolver.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/models/visual.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/settings.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/sits/__init__.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/sits/colors.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/sits/config.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/sits/context.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/sits/cube.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/sits/data.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/sits/exporters/__init__.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/sits/exporters/files.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/sits/exporters/sf.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/sits/exporters/xarray.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/sits/impute.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/sits/ml.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/sits/segment.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/sits/tiles.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/sits/ts.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/sits/tuning.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/sits/utils.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/sits/visualization.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/templates/cube.html +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/templates/plot.html +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/visualization/__init__.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/visualization/base.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/visualization/device.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/visualization/host.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/visualization/leaflet.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/pysits/visualization/options.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/tests/conftest.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/tests/test_classification.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/tests/test_config.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/tests/test_cube.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/tests/test_data.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/tests/test_dsl.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/tests/test_embedding.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/tests/test_exporters.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/tests/test_exporters_geopandas.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/tests/test_exporters_xarray.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/tests/test_extras.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/tests/test_indexing.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/tests/test_ml_models.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/tests/test_resolver.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/tests/test_rl_models.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/tests/test_som.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/tests/test_tiles.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/tests/test_utils.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/tests/test_validation.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/tests/test_visual_models.py +0 -0
- {pysits-2.0.0.dev4 → pysits-2.0.0.dev5}/tests/test_visualization.py +0 -0
|
@@ -58,6 +58,12 @@ TYPE_CONVERSIONS = {
|
|
|
58
58
|
EPOCH_START = date(1970, 1, 1)
|
|
59
59
|
|
|
60
60
|
|
|
61
|
+
#
|
|
62
|
+
# Prefixes of R expressions deparsed as text
|
|
63
|
+
#
|
|
64
|
+
R_DEPARSED_PREFIXES = ("c(", "list(")
|
|
65
|
+
|
|
66
|
+
|
|
61
67
|
#
|
|
62
68
|
# Base utilities
|
|
63
69
|
#
|
|
@@ -197,6 +203,27 @@ def eval_r_language(obj):
|
|
|
197
203
|
return obj
|
|
198
204
|
|
|
199
205
|
|
|
206
|
+
def eval_r_deparsed(obj):
|
|
207
|
+
"""Evaluate a deparsed R expression.
|
|
208
|
+
|
|
209
|
+
Args:
|
|
210
|
+
obj: The R object to evaluate.
|
|
211
|
+
|
|
212
|
+
Returns:
|
|
213
|
+
The evaluated R object. Objects that are not deparsed R expressions are
|
|
214
|
+
returned unchanged.
|
|
215
|
+
"""
|
|
216
|
+
value = obj
|
|
217
|
+
|
|
218
|
+
if isinstance(value, ro.StrVector) and len(value) == 1:
|
|
219
|
+
value = value[0]
|
|
220
|
+
|
|
221
|
+
if isinstance(value, str) and value.startswith(R_DEPARSED_PREFIXES):
|
|
222
|
+
return ro.r(value)
|
|
223
|
+
|
|
224
|
+
return obj
|
|
225
|
+
|
|
226
|
+
|
|
200
227
|
def convert_to_python(obj, as_type="str"):
|
|
201
228
|
"""Convert an R object to a Python representation.
|
|
202
229
|
|
|
@@ -21,14 +21,65 @@ from collections.abc import Callable
|
|
|
21
21
|
from typing import Any
|
|
22
22
|
|
|
23
23
|
from rpy2.rinterface_lib.sexp import NULLType
|
|
24
|
-
from rpy2.robjects.vectors import
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
from rpy2.robjects.vectors import (
|
|
25
|
+
BoolVector,
|
|
26
|
+
FloatVector,
|
|
27
|
+
IntVector,
|
|
28
|
+
ListVector,
|
|
29
|
+
StrVector,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
from pysits.conversions.common import (
|
|
33
|
+
R_DEPARSED_PREFIXES,
|
|
34
|
+
convert_to_python,
|
|
35
|
+
eval_r_deparsed,
|
|
36
|
+
eval_r_language,
|
|
37
|
+
)
|
|
27
38
|
from pysits.models.data.base import SITSData
|
|
28
39
|
from pysits.models.data.matrix import SITSConfusionMatrix
|
|
29
40
|
from pysits.models.data.ts import SITSTimeSeriesModel
|
|
30
41
|
|
|
42
|
+
#
|
|
43
|
+
# Python types associated with each R vector type
|
|
44
|
+
#
|
|
45
|
+
HPARAM_TYPES = {
|
|
46
|
+
BoolVector: "bool",
|
|
47
|
+
IntVector: "int",
|
|
48
|
+
FloatVector: "float",
|
|
49
|
+
StrVector: "str",
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
#
|
|
54
|
+
# Tuning results columns that are not hyper-parameters
|
|
55
|
+
#
|
|
56
|
+
TUNING_METRICS = ("accuracy", "kappa", "acc", "samples_validation")
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
#
|
|
60
|
+
# Utilities
|
|
61
|
+
#
|
|
62
|
+
def convert_hparam(value: Any) -> Any:
|
|
63
|
+
"""Convert a hyper-parameter value from R to Python.
|
|
64
|
+
|
|
65
|
+
Args:
|
|
66
|
+
value: The hyper-parameter value to convert.
|
|
67
|
+
|
|
68
|
+
Returns:
|
|
69
|
+
Any: Converted Python object.
|
|
70
|
+
"""
|
|
71
|
+
value = eval_r_deparsed(value)
|
|
72
|
+
|
|
73
|
+
for vector_type, as_type in HPARAM_TYPES.items():
|
|
74
|
+
if isinstance(value, vector_type):
|
|
75
|
+
return convert_to_python(value, as_type=as_type)
|
|
31
76
|
|
|
77
|
+
return convert_to_python(value)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
#
|
|
81
|
+
# Classes
|
|
82
|
+
#
|
|
32
83
|
class SITSTuningResults(SITSData):
|
|
33
84
|
"""Base class for sits accuracy results."""
|
|
34
85
|
|
|
@@ -62,14 +113,13 @@ class SITSTuningResults(SITSData):
|
|
|
62
113
|
if isinstance(values, NULLType):
|
|
63
114
|
return [None for i in range(len(self._instance.rx2("accuracy")))]
|
|
64
115
|
|
|
65
|
-
# Check if value is a
|
|
116
|
+
# Check if value is a deparsed R expression (e.g., "c(128, 128, 128)")
|
|
66
117
|
is_vector_as_string = any(
|
|
67
|
-
isinstance(x, str) and
|
|
68
|
-
for x in values
|
|
118
|
+
isinstance(x, str) and x.startswith(R_DEPARSED_PREFIXES) for x in values
|
|
69
119
|
)
|
|
70
120
|
|
|
71
121
|
if is_vector_as_string:
|
|
72
|
-
return
|
|
122
|
+
return [transform_func(eval_r_deparsed(x)) for x in values]
|
|
73
123
|
|
|
74
124
|
if isinstance(values, ListVector):
|
|
75
125
|
return [
|
|
@@ -138,47 +188,47 @@ class SITSTuningResults(SITSData):
|
|
|
138
188
|
]
|
|
139
189
|
|
|
140
190
|
@property
|
|
141
|
-
def cnn_layers(self) -> list[float]:
|
|
191
|
+
def cnn_layers(self) -> list[list[float]]:
|
|
142
192
|
"""Get the CNN layer configurations from the tuning results.
|
|
143
193
|
|
|
144
194
|
Returns:
|
|
145
|
-
A list
|
|
195
|
+
A list with the CNN layer configuration of each trial.
|
|
146
196
|
"""
|
|
147
197
|
return self._convert_from_r_list("cnn_layers", "float")
|
|
148
198
|
|
|
149
199
|
@property
|
|
150
|
-
def cnn_kernels(self) -> list[float]:
|
|
200
|
+
def cnn_kernels(self) -> list[list[float]]:
|
|
151
201
|
"""Get the CNN kernel configurations from the tuning results.
|
|
152
202
|
|
|
153
203
|
Returns:
|
|
154
|
-
A list
|
|
204
|
+
A list with the CNN kernel configuration of each trial.
|
|
155
205
|
"""
|
|
156
206
|
return self._convert_from_r_list("cnn_kernels", "float")
|
|
157
207
|
|
|
158
208
|
@property
|
|
159
|
-
def cnn_dropout_rates(self) -> list[float]:
|
|
209
|
+
def cnn_dropout_rates(self) -> list[list[float]]:
|
|
160
210
|
"""Get the CNN dropout rates from the tuning results.
|
|
161
211
|
|
|
162
212
|
Returns:
|
|
163
|
-
A list
|
|
213
|
+
A list with the CNN dropout rates of each trial.
|
|
164
214
|
"""
|
|
165
215
|
return self._convert_from_r_list("cnn_dropout_rates", "float")
|
|
166
216
|
|
|
167
217
|
@property
|
|
168
|
-
def dense_layer_nodes(self) -> list[float]:
|
|
218
|
+
def dense_layer_nodes(self) -> list[list[float]]:
|
|
169
219
|
"""Get the dense layer node configurations from the tuning results.
|
|
170
220
|
|
|
171
221
|
Returns:
|
|
172
|
-
A list
|
|
222
|
+
A list with the dense layer node configuration of each trial.
|
|
173
223
|
"""
|
|
174
224
|
return self._convert_from_r_list("dense_layer_nodes", "float")
|
|
175
225
|
|
|
176
226
|
@property
|
|
177
|
-
def dense_layer_dropout_rate(self) -> list[float]:
|
|
227
|
+
def dense_layer_dropout_rate(self) -> list[list[float]]:
|
|
178
228
|
"""Get the dense layer dropout rates from the tuning results.
|
|
179
229
|
|
|
180
230
|
Returns:
|
|
181
|
-
A list
|
|
231
|
+
A list with the dense layer dropout rates of each trial.
|
|
182
232
|
"""
|
|
183
233
|
return self._convert_from_r_list("dense_layer_dropout_rate", "float")
|
|
184
234
|
|
|
@@ -219,40 +269,33 @@ class SITSTuningResults(SITSData):
|
|
|
219
269
|
return [eval_r_language(x).rclass[0] for x in self._instance.rx2("optimizer")]
|
|
220
270
|
|
|
221
271
|
@property
|
|
222
|
-
def opt_hparams(self) -> list[dict[str,
|
|
272
|
+
def opt_hparams(self) -> list[dict[str, Any]]:
|
|
223
273
|
"""Get the optimizer hyperparameters from the tuning results.
|
|
224
274
|
|
|
225
275
|
Returns:
|
|
226
276
|
A list of dictionaries containing optimizer hyperparameters.
|
|
227
|
-
Each dictionary maps parameter names to their
|
|
277
|
+
Each dictionary maps parameter names to their values.
|
|
228
278
|
"""
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
values = self._convert_from_r_list("opt_hparams", "float")
|
|
234
|
-
|
|
235
|
-
# Merge dict results
|
|
236
|
-
for value in values:
|
|
237
|
-
results.append({k: v for d in value for k, v in d.items()})
|
|
238
|
-
|
|
239
|
-
return results
|
|
279
|
+
return self._convert_attribute(
|
|
280
|
+
"opt_hparams",
|
|
281
|
+
lambda x: {str(k): convert_hparam(v) for k, v in x.items()},
|
|
282
|
+
)
|
|
240
283
|
|
|
241
284
|
@property
|
|
242
|
-
def lr_decay_epochs(self) -> list[float]:
|
|
285
|
+
def lr_decay_epochs(self) -> list[list[float]]:
|
|
243
286
|
"""Get the learning rate decay epochs from the tuning results.
|
|
244
287
|
|
|
245
288
|
Returns:
|
|
246
|
-
A list
|
|
289
|
+
A list with the learning rate decay epochs of each trial.
|
|
247
290
|
"""
|
|
248
291
|
return self._convert_from_r_list("lr_decay_epochs", "float")
|
|
249
292
|
|
|
250
293
|
@property
|
|
251
|
-
def lr_decay_rate(self) -> list[float]:
|
|
294
|
+
def lr_decay_rate(self) -> list[list[float]]:
|
|
252
295
|
"""Get the learning rate decay rates from the tuning results.
|
|
253
296
|
|
|
254
297
|
Returns:
|
|
255
|
-
A list
|
|
298
|
+
A list with the learning rate decay rates of each trial.
|
|
256
299
|
"""
|
|
257
300
|
return self._convert_from_r_list("lr_decay_rate", "float")
|
|
258
301
|
|
|
@@ -283,9 +326,38 @@ class SITSTuningResults(SITSData):
|
|
|
283
326
|
"""
|
|
284
327
|
return self._convert_from_r_list("verbose", "bool")
|
|
285
328
|
|
|
329
|
+
@property
|
|
330
|
+
def hparams(self) -> dict[str, list[Any]]:
|
|
331
|
+
"""Get all the hyper-parameters tuned, one value per trial.
|
|
332
|
+
|
|
333
|
+
Returns:
|
|
334
|
+
A dictionary mapping each hyper-parameter name to its values.
|
|
335
|
+
"""
|
|
336
|
+
return {
|
|
337
|
+
name: getattr(self, name)
|
|
338
|
+
for name in self._instance.names
|
|
339
|
+
if name not in TUNING_METRICS
|
|
340
|
+
}
|
|
341
|
+
|
|
286
342
|
#
|
|
287
343
|
# Dunder methods
|
|
288
344
|
#
|
|
345
|
+
def __getattr__(self, name: str) -> list[Any]:
|
|
346
|
+
"""Get a hyper-parameter with no property associated with it.
|
|
347
|
+
|
|
348
|
+
Args:
|
|
349
|
+
name: The name of the hyper-parameter to get.
|
|
350
|
+
|
|
351
|
+
Returns:
|
|
352
|
+
A list with the hyper-parameter values, one per trial.
|
|
353
|
+
"""
|
|
354
|
+
if name.startswith("_") or name not in self._instance.names:
|
|
355
|
+
raise AttributeError(
|
|
356
|
+
f"'{type(self).__name__}' object has no attribute '{name}'"
|
|
357
|
+
)
|
|
358
|
+
|
|
359
|
+
return self._convert_attribute(name, convert_hparam)
|
|
360
|
+
|
|
289
361
|
def __str__(self):
|
|
290
362
|
"""String representation."""
|
|
291
363
|
return str(self._instance)
|
|
@@ -93,6 +93,7 @@
|
|
|
93
93
|
<div class="sits-accordion">
|
|
94
94
|
{# Assuming number of accuracy is the same as number of runs #}
|
|
95
95
|
{% set n_runs = tuning_obj.accuracy|length if tuning_obj.accuracy else 0 %}
|
|
96
|
+
{% set hparams = tuning_obj.hparams %}
|
|
96
97
|
{% for i in range(n_runs) %}
|
|
97
98
|
<div class="sits-accordion-item">
|
|
98
99
|
<div class="sits-accordion-header" onclick="toggleAccordion(this)">
|
|
@@ -109,73 +110,12 @@
|
|
|
109
110
|
<th>Value</th>
|
|
110
111
|
</tr>
|
|
111
112
|
|
|
112
|
-
{%
|
|
113
|
+
{% for name, values in hparams.items() %}
|
|
113
114
|
<tr>
|
|
114
|
-
<td>
|
|
115
|
-
{{ render_list_value(
|
|
115
|
+
<td>{{ name }}</td>
|
|
116
|
+
{{ render_list_value(values[i]) }}
|
|
116
117
|
</tr>
|
|
117
|
-
|
|
118
|
-
<td>CNN Kernels</td>
|
|
119
|
-
{{ render_list_value(tuning_obj.cnn_kernels[i]) }}
|
|
120
|
-
</tr>
|
|
121
|
-
<tr>
|
|
122
|
-
<td>CNN Dropout Rates</td>
|
|
123
|
-
{{ render_list_value(tuning_obj.cnn_dropout_rates[i]) }}
|
|
124
|
-
</tr>
|
|
125
|
-
{% endif %}
|
|
126
|
-
|
|
127
|
-
{% if tuning_obj.dense_layer_nodes %}
|
|
128
|
-
<tr>
|
|
129
|
-
<td>Dense Layer Nodes</td>
|
|
130
|
-
{{ render_list_value(tuning_obj.dense_layer_nodes[i]) }}
|
|
131
|
-
</tr>
|
|
132
|
-
<tr>
|
|
133
|
-
<td>Dense Layer Dropout Rate</td>
|
|
134
|
-
{{ render_list_value(tuning_obj.dense_layer_dropout_rate[i]) }}
|
|
135
|
-
</tr>
|
|
136
|
-
{% endif %}
|
|
137
|
-
|
|
138
|
-
<tr>
|
|
139
|
-
<td>Epochs</td>
|
|
140
|
-
<td>{{ tuning_obj.epochs[i] }}</td>
|
|
141
|
-
</tr>
|
|
142
|
-
<tr>
|
|
143
|
-
<td>Batch Size</td>
|
|
144
|
-
<td>{{ tuning_obj.batch_size[i] }}</td>
|
|
145
|
-
</tr>
|
|
146
|
-
<tr>
|
|
147
|
-
<td>Validation Split</td>
|
|
148
|
-
<td>{{ tuning_obj.validation_split[i] }}</td>
|
|
149
|
-
</tr>
|
|
150
|
-
|
|
151
|
-
{% if tuning_obj.optimizer %}
|
|
152
|
-
<tr>
|
|
153
|
-
<td>Optimizer</td>
|
|
154
|
-
<td>{{ tuning_obj.optimizer[i] }}</td>
|
|
155
|
-
</tr>
|
|
156
|
-
{% endif %}
|
|
157
|
-
|
|
158
|
-
{% if tuning_obj.lr_decay_epochs %}
|
|
159
|
-
<tr>
|
|
160
|
-
<td>Learning Rate Decay Epochs</td>
|
|
161
|
-
{{ render_list_value(tuning_obj.lr_decay_epochs[i]) }}
|
|
162
|
-
</tr>
|
|
163
|
-
<tr>
|
|
164
|
-
<td>Learning Rate Decay Rate</td>
|
|
165
|
-
{{ render_list_value(tuning_obj.lr_decay_rate[i]) }}
|
|
166
|
-
</tr>
|
|
167
|
-
{% endif %}
|
|
168
|
-
|
|
169
|
-
{% if tuning_obj.patience %}
|
|
170
|
-
<tr>
|
|
171
|
-
<td>Patience</td>
|
|
172
|
-
<td>{{ tuning_obj.patience[i] }}</td>
|
|
173
|
-
</tr>
|
|
174
|
-
<tr>
|
|
175
|
-
<td>Minimum Delta</td>
|
|
176
|
-
<td>{{ tuning_obj.min_delta[i] }}</td>
|
|
177
|
-
</tr>
|
|
178
|
-
{% endif %}
|
|
118
|
+
{% endfor %}
|
|
179
119
|
</table>
|
|
180
120
|
</div>
|
|
181
121
|
</div>
|
|
@@ -29,6 +29,7 @@ from pysits.conversions.common import (
|
|
|
29
29
|
convert_dict_like_to_r,
|
|
30
30
|
convert_list_like_to_r,
|
|
31
31
|
convert_to_python,
|
|
32
|
+
eval_r_deparsed,
|
|
32
33
|
)
|
|
33
34
|
from pysits.conversions.tibble import (
|
|
34
35
|
_column_to_datetime,
|
|
@@ -330,3 +331,21 @@ def test_pandas_cube_to_tibble_empty():
|
|
|
330
331
|
"""Test conversion of a cube pandas DataFrame without tiles."""
|
|
331
332
|
with pytest.raises(ValueError, match="at least one tile"):
|
|
332
333
|
pandas_cube_to_tibble(PandasDataFrame())
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
def test_eval_r_deparsed():
|
|
337
|
+
"""Test evaluation of deparsed R expressions."""
|
|
338
|
+
# Deparsed expression (e.g., as returned by ``sits_tuning`` hyper-parameters)
|
|
339
|
+
result = eval_r_deparsed("c(128, 128, 128)")
|
|
340
|
+
assert convert_to_python(result, as_type="float") == [128.0, 128.0, 128.0]
|
|
341
|
+
|
|
342
|
+
# Deparsed expression stored in a character vector
|
|
343
|
+
result = eval_r_deparsed(ro.StrVector(["c(0.9, 0.999)"]))
|
|
344
|
+
assert convert_to_python(result, as_type="float") == [0.9, 0.999]
|
|
345
|
+
|
|
346
|
+
# Values that are not deparsed expressions are returned unchanged
|
|
347
|
+
assert eval_r_deparsed("radial") == "radial"
|
|
348
|
+
|
|
349
|
+
values = ro.FloatVector([0.2])
|
|
350
|
+
|
|
351
|
+
assert eval_r_deparsed(values) is values
|
|
@@ -22,21 +22,19 @@ import pytest
|
|
|
22
22
|
from pysits.conversions.dsl.tuning import hparam
|
|
23
23
|
from pysits.models.data.tuning import SITSTuningResults
|
|
24
24
|
from pysits.sits.context import samples_modis_ndvi
|
|
25
|
-
from pysits.sits.ml import sits_tempcnn
|
|
25
|
+
from pysits.sits.ml import sits_rfor, sits_tempcnn
|
|
26
26
|
from pysits.sits.tuning import sits_tuning, sits_tuning_hparams
|
|
27
27
|
|
|
28
28
|
#
|
|
29
29
|
# Hyper-parameters options available for tuning
|
|
30
30
|
#
|
|
31
|
+
TRIALS = 2
|
|
32
|
+
|
|
31
33
|
CNN_LAYERS = [[128.0, 128.0, 128.0], [64.0, 64.0, 64.0]]
|
|
32
34
|
CNN_KERNELS = [[3.0, 3.0, 3.0], [5.0, 5.0, 5.0]]
|
|
33
35
|
BETAS = [[0.9, 0.999], [0.85, 0.99]]
|
|
34
36
|
OPTIMIZERS = ["optim_adamw", "optim_adam"]
|
|
35
|
-
|
|
36
|
-
#
|
|
37
|
-
# Number of trials used in the tests
|
|
38
|
-
#
|
|
39
|
-
TRIALS = 2
|
|
37
|
+
NUM_TREES = [50.0, 100.0]
|
|
40
38
|
|
|
41
39
|
|
|
42
40
|
@pytest.fixture(scope="module")
|
|
@@ -60,6 +58,20 @@ def tuned_tempcnn() -> SITSTuningResults:
|
|
|
60
58
|
)
|
|
61
59
|
|
|
62
60
|
|
|
61
|
+
@pytest.fixture(scope="module")
|
|
62
|
+
def tuned_rfor() -> SITSTuningResults:
|
|
63
|
+
"""Tuning results of a ``sits_rfor`` model."""
|
|
64
|
+
return sits_tuning(
|
|
65
|
+
samples=samples_modis_ndvi,
|
|
66
|
+
ml_method=sits_rfor,
|
|
67
|
+
params=sits_tuning_hparams(
|
|
68
|
+
num_trees=hparam("choice", *NUM_TREES),
|
|
69
|
+
),
|
|
70
|
+
trials=TRIALS,
|
|
71
|
+
multicores=1,
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
|
|
63
75
|
def test_tuning_metrics(tuned_tempcnn):
|
|
64
76
|
"""Test tuning metrics results."""
|
|
65
77
|
assert isinstance(tuned_tempcnn, SITSTuningResults)
|
|
@@ -81,9 +93,9 @@ def test_tuning_vector_hparams(tuned_tempcnn):
|
|
|
81
93
|
|
|
82
94
|
def test_tuning_scalar_hparams(tuned_tempcnn):
|
|
83
95
|
"""Test tuning results of hyper-parameters defined as scalars."""
|
|
84
|
-
assert tuned_tempcnn.epochs == [
|
|
85
|
-
assert tuned_tempcnn.validation_split == [
|
|
86
|
-
assert tuned_tempcnn.verbose == [
|
|
96
|
+
assert tuned_tempcnn.epochs == [1.0] * TRIALS
|
|
97
|
+
assert tuned_tempcnn.validation_split == [0.2] * TRIALS
|
|
98
|
+
assert tuned_tempcnn.verbose == [False] * TRIALS
|
|
87
99
|
|
|
88
100
|
|
|
89
101
|
def test_tuning_optimizer_hparams(tuned_tempcnn):
|
|
@@ -98,9 +110,32 @@ def test_tuning_optimizer_hparams(tuned_tempcnn):
|
|
|
98
110
|
assert opt_hparams["betas"] in BETAS
|
|
99
111
|
|
|
100
112
|
|
|
101
|
-
def
|
|
113
|
+
def test_tuning_generic_hparams(tuned_rfor):
|
|
114
|
+
"""Test tuning results of models with no hyper-parameter properties."""
|
|
115
|
+
assert len(tuned_rfor.num_trees) == TRIALS
|
|
116
|
+
|
|
117
|
+
for num_trees in tuned_rfor.num_trees:
|
|
118
|
+
assert num_trees in NUM_TREES
|
|
119
|
+
|
|
120
|
+
# Dict accessor and property accessor must be equivalent
|
|
121
|
+
assert tuned_rfor.hparams["num_trees"] == tuned_rfor.num_trees
|
|
122
|
+
|
|
123
|
+
# Hyper-parameters with no value defined are returned as ``None``
|
|
124
|
+
assert tuned_rfor.mtry == [None] * TRIALS
|
|
125
|
+
|
|
126
|
+
# Hyper-parameters not tuned are not available
|
|
127
|
+
with pytest.raises(AttributeError):
|
|
128
|
+
tuned_rfor.unknown_hparam
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def test_tuning_html_representation(tuned_tempcnn, tuned_rfor):
|
|
102
132
|
"""Test tuning HTML representation."""
|
|
133
|
+
# tempcnn representation
|
|
103
134
|
html = tuned_tempcnn._repr_html_()
|
|
104
|
-
|
|
105
135
|
for layers in tuned_tempcnn.cnn_layers:
|
|
106
136
|
assert str(layers) in html
|
|
137
|
+
|
|
138
|
+
# rfor representation
|
|
139
|
+
html = tuned_rfor._repr_html_()
|
|
140
|
+
for num_trees in tuned_rfor.num_trees:
|
|
141
|
+
assert str(num_trees) in html
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|