pysits 2.0.0.dev8__tar.gz → 2.0.0.dev9__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.dev8 → pysits-2.0.0.dev9}/PKG-INFO +1 -1
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pyproject.toml +1 -1
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/__init__.py +4 -0
- pysits-2.0.0.dev9/pysits/docs/content/sits_from_parquet.md +26 -0
- pysits-2.0.0.dev9/pysits/docs/content/sits_to_parquet.md +23 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/sits/exporters/__init__.py +9 -1
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/sits/exporters/files.py +30 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/tests/test_exporters.py +51 -1
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/uv.lock +1 -1
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/.gitattributes +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/.github/actions/setup-pysits/action.yml +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/.github/workflows/ruff.yaml +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/.github/workflows/tests.yaml +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/.gitignore +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/.pre-commit-config.yaml +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/LICENSE +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/README.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/conda/meta.yaml +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/backend/__init__.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/backend/arrow.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/backend/functions.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/backend/loaders.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/backend/pkgs.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/backend/rinterface.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/conversions/__init__.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/conversions/clojure.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/conversions/common.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/conversions/decorators.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/conversions/dsl/__init__.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/conversions/dsl/base.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/conversions/dsl/mask.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/conversions/dsl/tuning.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/conversions/stac.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/conversions/tibble.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/conversions/vector.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/conversions/xarray.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/__init__.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/impute_linear.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/impute_mean.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/impute_mean_window.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/impute_median.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/plot.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_accuracy.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_accuracy_summary.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_add_base_cube.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_apply.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_as_geopandas.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_bands.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_barlow_twins.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_bbox.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_classify.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_clean.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_cluster_clean.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_cluster_dendro.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_cluster_frequency.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_colors.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_colors_qgis.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_colors_reset.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_colors_set.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_colors_show.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_combine_predictions.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_confidence_sampling.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_config.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_config_show.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_config_user_file.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_contrastive_learning.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_cube.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_cube_copy.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_encode.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_formula_linear.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_formula_logref.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_geo_dist.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_get_class.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_get_data.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_get_probs.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_kfold_validate.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_label_classification.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_labels.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_labels_summary.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_lightgbm.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_lighttae.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_list_collections.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_lstm_fcn.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_merge.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_mixture_model.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_mlp.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_model_export.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_mosaic.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_parallel.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_patterns.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_pre_train.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_pred_features.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_pred_normalize.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_pred_references.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_pred_sample.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_predictors.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_random_sampling.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_reclassify.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_reduce.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_reduce_imbalance.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_regularize.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_resnet.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_rfor.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_roi_to_tiles.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_sample.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_sampling_design.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_sankey.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_segment.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_select.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_show_prediction.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_slic.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_smooth.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_snic.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_som_clean_samples.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_som_evaluate_cluster.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_som_map.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_som_remove_samples.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_ssl_lejepa.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_ssl_mae.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_ssl_vicreg.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_stats.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_stratified_sampling.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_svm.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_tae.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_tempcnn.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_texture.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_tiles_to_roi.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_timeline.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_timeseries_to_csv.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_to_csv.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_to_xlsx.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_train.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_tuning.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_tuning_hparams.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_uncertainty.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_uncertainty_sampling.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_validate.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_variance.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_view.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/sits_xgboost.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/content/summary.md +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/docs/decorators.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/extras/__init__.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/extras/earthdatalogin.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/extras/torch.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/jinja.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/models/__init__.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/models/base.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/models/data/__init__.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/models/data/accuracy.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/models/data/base.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/models/data/cube.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/models/data/frame.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/models/data/frame_accessor.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/models/data/matrix.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/models/data/table.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/models/data/ts.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/models/data/tuning.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/models/data/vector.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/models/frame.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/models/ml.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/models/resolver.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/models/visual.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/network.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/settings.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/sits/__init__.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/sits/colors.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/sits/config.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/sits/context.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/sits/cube.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/sits/data.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/sits/exporters/sf.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/sits/exporters/xarray.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/sits/impute.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/sits/ml.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/sits/segment.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/sits/tiles.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/sits/ts.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/sits/tuning.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/sits/utils.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/sits/visualization.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/templates/cube.html +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/templates/plot.html +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/templates/tuning.html +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/visualization/__init__.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/visualization/base.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/visualization/device.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/visualization/host.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/visualization/leaflet.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/pysits/visualization/options.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/tests/conftest.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/tests/test_backend.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/tests/test_classification.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/tests/test_config.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/tests/test_conversions.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/tests/test_cube.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/tests/test_data.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/tests/test_dsl.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/tests/test_embedding.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/tests/test_exporters_geopandas.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/tests/test_exporters_xarray.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/tests/test_extras.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/tests/test_indexing.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/tests/test_ml_models.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/tests/test_network.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/tests/test_resolver.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/tests/test_rl_models.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/tests/test_som.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/tests/test_tiles.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/tests/test_tuning.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/tests/test_utils.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/tests/test_validation.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/tests/test_visual_models.py +0 -0
- {pysits-2.0.0.dev8 → pysits-2.0.0.dev9}/tests/test_visualization.py +0 -0
|
@@ -87,8 +87,10 @@ from .sits.data import sits_summary as summary
|
|
|
87
87
|
from .sits.exporters import (
|
|
88
88
|
sits_as_geopandas,
|
|
89
89
|
sits_as_xarray,
|
|
90
|
+
sits_from_parquet,
|
|
90
91
|
sits_timeseries_to_csv,
|
|
91
92
|
sits_to_csv,
|
|
93
|
+
sits_to_parquet,
|
|
92
94
|
sits_to_xlsx,
|
|
93
95
|
)
|
|
94
96
|
from .sits.impute import (
|
|
@@ -276,6 +278,8 @@ __all__ = (
|
|
|
276
278
|
"sits_as_geopandas",
|
|
277
279
|
"sits_to_xlsx",
|
|
278
280
|
"sits_timeseries_to_csv",
|
|
281
|
+
"sits_to_parquet",
|
|
282
|
+
"sits_from_parquet",
|
|
279
283
|
# Tuning
|
|
280
284
|
"sits_tuning_hparams",
|
|
281
285
|
"sits_tuning",
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
Read sits time series from the Parquet format
|
|
2
|
+
|
|
3
|
+
Reads a file written by `sits_to_parquet` and rebuilds the time series,
|
|
4
|
+
with its class, column order and nested series.
|
|
5
|
+
|
|
6
|
+
Files written by other programs are also read. Their class is then
|
|
7
|
+
inferred from the columns, which must include "longitude", "latitude",
|
|
8
|
+
"start_date", "end_date" and "label".
|
|
9
|
+
|
|
10
|
+
Args:
|
|
11
|
+
file (str | pathlib.Path): Full path or HTTP(S) URL of the file to
|
|
12
|
+
read (valid file name with extension ".parquet").
|
|
13
|
+
|
|
14
|
+
Returns:
|
|
15
|
+
SITSTimeSeriesModel: Time series.
|
|
16
|
+
|
|
17
|
+
Raises:
|
|
18
|
+
httpx2.HTTPError: If a remote file cannot be downloaded.
|
|
19
|
+
|
|
20
|
+
Examples:
|
|
21
|
+
import tempfile
|
|
22
|
+
from pysits import *
|
|
23
|
+
|
|
24
|
+
parquet_file = tempfile.gettempdir() + "/samples.parquet"
|
|
25
|
+
sits_to_parquet(samples_modis_ndvi, file=parquet_file)
|
|
26
|
+
samples = sits_from_parquet(parquet_file)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
Export sits time series to the Parquet format
|
|
2
|
+
|
|
3
|
+
Writes a set of time series to a Parquet file. The layout is long: one
|
|
4
|
+
row per sample and date, with the time series as plain columns. The
|
|
5
|
+
file metadata keeps what is needed to rebuild the data with
|
|
6
|
+
`sits_from_parquet` (class, column order and bands). It also follows
|
|
7
|
+
GeoParquet 1.1, so tools like GDAL and QGIS read the file as points.
|
|
8
|
+
|
|
9
|
+
Args:
|
|
10
|
+
data (SITSTimeSeriesModel): Time series.
|
|
11
|
+
|
|
12
|
+
file (str | pathlib.Path): Full path of the exported file (valid
|
|
13
|
+
file name with extension ".parquet").
|
|
14
|
+
|
|
15
|
+
Returns:
|
|
16
|
+
None
|
|
17
|
+
|
|
18
|
+
Examples:
|
|
19
|
+
import tempfile
|
|
20
|
+
from pysits import *
|
|
21
|
+
|
|
22
|
+
parquet_file = tempfile.gettempdir() + "/samples.parquet"
|
|
23
|
+
sits_to_parquet(samples_modis_ndvi, file=parquet_file)
|
|
@@ -17,7 +17,13 @@
|
|
|
17
17
|
|
|
18
18
|
"""Exporters module."""
|
|
19
19
|
|
|
20
|
-
from .files import
|
|
20
|
+
from .files import (
|
|
21
|
+
sits_from_parquet,
|
|
22
|
+
sits_timeseries_to_csv,
|
|
23
|
+
sits_to_csv,
|
|
24
|
+
sits_to_parquet,
|
|
25
|
+
sits_to_xlsx,
|
|
26
|
+
)
|
|
21
27
|
from .sf import sits_as_geopandas
|
|
22
28
|
from .xarray import sits_as_xarray
|
|
23
29
|
|
|
@@ -27,4 +33,6 @@ __all__ = (
|
|
|
27
33
|
"sits_to_csv",
|
|
28
34
|
"sits_to_xlsx",
|
|
29
35
|
"sits_timeseries_to_csv",
|
|
36
|
+
"sits_to_parquet",
|
|
37
|
+
"sits_from_parquet",
|
|
30
38
|
)
|
|
@@ -17,10 +17,15 @@
|
|
|
17
17
|
|
|
18
18
|
"""Files exporter."""
|
|
19
19
|
|
|
20
|
+
from pathlib import Path
|
|
21
|
+
|
|
20
22
|
from pysits.backend.pkgs import r_pkg_sits
|
|
21
23
|
from pysits.conversions.decorators import function_call
|
|
22
24
|
from pysits.docs import attach_doc
|
|
23
25
|
from pysits.models.data.frame import SITSFrame
|
|
26
|
+
from pysits.models.data.ts import SITSTimeSeriesModel
|
|
27
|
+
from pysits.models.resolver import resolve_and_invoke_content_class
|
|
28
|
+
from pysits.network import fetch_to_tempfile, is_remote
|
|
24
29
|
|
|
25
30
|
|
|
26
31
|
@function_call(r_pkg_sits.sits_to_csv, SITSFrame)
|
|
@@ -41,3 +46,28 @@ def sits_to_xlsx(*args, **kwargs) -> None:
|
|
|
41
46
|
@attach_doc("sits_timeseries_to_csv")
|
|
42
47
|
def sits_timeseries_to_csv(*args, **kwargs) -> None:
|
|
43
48
|
"""Export a full sits timeseries to CSV format."""
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
@function_call(r_pkg_sits.sits_to_parquet, lambda x: None)
|
|
52
|
+
@attach_doc("sits_to_parquet")
|
|
53
|
+
def sits_to_parquet(*args, **kwargs) -> None:
|
|
54
|
+
"""Export sits time series to the Parquet format."""
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
@function_call(r_pkg_sits.sits_from_parquet, resolve_and_invoke_content_class)
|
|
58
|
+
def _sits_from_parquet(*args, **kwargs) -> SITSTimeSeriesModel:
|
|
59
|
+
"""Read sits time series from a local Parquet file."""
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
@attach_doc("sits_from_parquet")
|
|
63
|
+
def sits_from_parquet(file: str | Path) -> SITSTimeSeriesModel:
|
|
64
|
+
"""Read sits time series from the Parquet format."""
|
|
65
|
+
# If file is remote
|
|
66
|
+
if is_remote(file):
|
|
67
|
+
# Download it to a temporary file
|
|
68
|
+
with fetch_to_tempfile(str(file), suffix=".parquet") as local_file:
|
|
69
|
+
# Read it
|
|
70
|
+
return _sits_from_parquet(local_file)
|
|
71
|
+
|
|
72
|
+
# Otherwise, read it directly
|
|
73
|
+
return _sits_from_parquet(file)
|
|
@@ -25,8 +25,15 @@ import pytest
|
|
|
25
25
|
from pysits.backend.pkgs import r_pkg_sits
|
|
26
26
|
from pysits.models.data.frame import SITSFrame
|
|
27
27
|
from pysits.models.data.matrix import SITSConfusionMatrix
|
|
28
|
+
from pysits.models.data.ts import SITSTimeSeriesModel
|
|
28
29
|
from pysits.sits.context import cerrado_2classes
|
|
29
|
-
from pysits.sits.exporters import
|
|
30
|
+
from pysits.sits.exporters import (
|
|
31
|
+
sits_from_parquet,
|
|
32
|
+
sits_timeseries_to_csv,
|
|
33
|
+
sits_to_csv,
|
|
34
|
+
sits_to_parquet,
|
|
35
|
+
sits_to_xlsx,
|
|
36
|
+
)
|
|
30
37
|
from pysits.sits.ml import sits_rfor
|
|
31
38
|
from pysits.sits.ts import sits_sample, sits_validate
|
|
32
39
|
|
|
@@ -94,3 +101,46 @@ def test_sits_to_xlsx(tmp_path: Path, accuracy):
|
|
|
94
101
|
r_pkg_sits.sits_to_xlsx(accuracy._instance, file=str(r_file))
|
|
95
102
|
|
|
96
103
|
assert read_xlsx(py_file) == read_xlsx(r_file)
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def test_sits_parquet(tmp_path: Path):
|
|
107
|
+
"""Test time series export / import using parquet."""
|
|
108
|
+
# local file
|
|
109
|
+
file = tmp_path / "samples.parquet"
|
|
110
|
+
|
|
111
|
+
# export samples as parquet
|
|
112
|
+
sits_to_parquet(cerrado_2classes, file=file)
|
|
113
|
+
|
|
114
|
+
# import samples from parquet
|
|
115
|
+
samples = sits_from_parquet(file)
|
|
116
|
+
|
|
117
|
+
# samples must be a time series model
|
|
118
|
+
assert isinstance(samples, SITSTimeSeriesModel)
|
|
119
|
+
|
|
120
|
+
# metadata and nested series must be equal to the original samples
|
|
121
|
+
metadata = samples.drop(columns="time_series")
|
|
122
|
+
expected = cerrado_2classes.drop(columns="time_series")
|
|
123
|
+
|
|
124
|
+
assert metadata.equals(expected)
|
|
125
|
+
assert all(
|
|
126
|
+
ts.equals(expected_ts)
|
|
127
|
+
for ts, expected_ts in zip(
|
|
128
|
+
samples["time_series"], cerrado_2classes["time_series"], strict=True
|
|
129
|
+
)
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def test_sits_from_parquet_remote(http_server):
|
|
134
|
+
"""Test time series import using remote parquet file."""
|
|
135
|
+
# remote file
|
|
136
|
+
directory, base_url = http_server
|
|
137
|
+
|
|
138
|
+
# export samples as parquet
|
|
139
|
+
sits_to_parquet(cerrado_2classes, file=directory / "samples.parquet")
|
|
140
|
+
|
|
141
|
+
# import samples from parquet
|
|
142
|
+
samples = sits_from_parquet(f"{base_url}/samples.parquet")
|
|
143
|
+
|
|
144
|
+
# samples must be a time series model
|
|
145
|
+
assert isinstance(samples, SITSTimeSeriesModel)
|
|
146
|
+
assert len(samples) == len(cerrado_2classes)
|
|
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
|
|
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
|
|
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
|
|
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
|