From 39a04bf34b37c8700d45258791fcafb08f798cf4 Mon Sep 17 00:00:00 2001 From: saket0187 Date: Wed, 10 Jun 2026 13:03:29 +0530 Subject: [PATCH 1/4] Add fixes --- python/grass/temporal/univar_statistics.py | 11 +- temporal/t.rast.univar/t.rast.univar.md | 12 +- .../testsuite/test_t_rast_univar.py | 151 +++++++++--------- 3 files changed, 87 insertions(+), 87 deletions(-) diff --git a/python/grass/temporal/univar_statistics.py b/python/grass/temporal/univar_statistics.py index 730a55a26bc..bbeec3af969 100755 --- a/python/grass/temporal/univar_statistics.py +++ b/python/grass/temporal/univar_statistics.py @@ -127,10 +127,10 @@ def compute_univar_stats( else: eol = "" string += f"{fs}{stats['mean']}{fs}{stats['min']}" - string += f"{fs}{stats['max']}{fs}{stats['mean_of_abs']}" + string += f"{fs}{stats['max']}{fs}{stats['range']}{fs}{stats['mean_of_abs']}" string += f"{fs}{stats['stddev']}{fs}{stats['variance']}" string += f"{fs}{stats['coeff_var']}{fs}{stats['sum']}" - string += f"{fs}{stats['null_cells']}{fs}{stats['n']}" + string += f"{fs}{stats['null_cells']}{fs}{stats['cells']}" string += f"{fs}{stats['n']}" if "median" in stats: string += f"{fs}{stats['first_quartile']}{fs}{stats['median']}" @@ -241,6 +241,7 @@ def print_gridded_dataset_univar_statistics( "mean", "min", "max", + "range", "mean_of_abs", "stddev", "variance", @@ -248,7 +249,7 @@ def print_gridded_dataset_univar_statistics( "sum", "null_cells", "cells", - "non_null_cells", + "n", ] ) if extended is True: @@ -270,8 +271,6 @@ def print_gridded_dataset_univar_statistics( # Define flags flag = "" - if format != "json": - flag = "g" if extended is True: flag += "e" if type == "strds" and rast_region is True and not zones: @@ -284,7 +283,7 @@ def print_gridded_dataset_univar_statistics( zones=zones, percentile=percentile, stdout_=PIPE, - format="json" if format == "json" else None, + format="json" if format == "json" else "shell", run_=False, ) diff --git a/temporal/t.rast.univar/t.rast.univar.md b/temporal/t.rast.univar/t.rast.univar.md index 46d0a0643bd..2e2091750c1 100644 --- a/temporal/t.rast.univar/t.rast.univar.md +++ b/temporal/t.rast.univar/t.rast.univar.md @@ -35,13 +35,11 @@ Obtain the univariate statistics for the raster space time dataset "tempmean_monthly" (precision reduced to 2 decimals in this example): ```sh -t.rast.univar -e tempmean_monthly -id|start|end|mean|min|max|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|first_quartile|median|third_quartile|percentile_90 -2009_01_tempmean@climate_2009_2012|2009-01-01 00:00:00|2009-02-01 00:00:00|3.90|-3.38|7.43|3.95|1.79|3.20|45.91|1977967.31|503233|1010600|2.80|3.92|5.21|6.23 -2009_02_tempmean@climate_2009_2012|2009-02-01 00:00:00|2009-03-01 00:00:00|5.91|-1.82|8.01|5.92|1.63|2.65|27.53|2999555.60|503233|1010600|5.44|6.26|7.07|7.48 -... -2012_11_tempmean@climate_2009_2012|2012-11-01 00:00:00|2012-12-01 00:00:00|8.03|1.79|10.91|8.03|1.32|1.73|16.41|4072472.77|503233|1010600|7.49|8.13|8.96|9.48 -2012_12_tempmean@climate_2009_2012|2012-12-01 00:00:00|2013-01-01 00:00:00|8.71|1.76|11.98|8.71|1.72|2.95|19.74|4418403.77|503233|1010600|7.84|8.95|9.99|10.67 +t.rast.univar -e input=nc_lst_daily +id|semantic_label|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n|first_quartile|median|third_quartile +aqua_lst_day20020705@modis2002lst||2002-07-05 00:00:00|2002-07-06 00:00:00|36.24265068193782|25.730000000000018|45.77000000000004|20.04000000000002|36.24265068193782|2.6171016196159838|6.849220887396605|7.221054670044495|16252219.360000012|390977|839405|448428|34.49000000000001|36.07000000000005|37.83000000000004 +aqua_lst_day20020706@modis2002lst||2002-07-06 00:00:00|2002-07-07 00:00:00|28.219656852808374|25.630000000000052|34.81|9.17999999999995|28.219656852808374|1.6350578714604542|2.6734142430247916|5.794038814819025|6960604.120000008|592747|839405|246658|27.110000000000014|27.970000000000027|28.970000000000027 +aqua_lst_day20020707@modis2002lst||2002-07-07 00:00:00|2002-07-08 00:00:00|32.642155464172674|25.630000000000052|44.670000000000016|19.039999999999964|32.642155464172674|3.1874224286049917|10.159661738374142|9.764742503305083|23321318.54000002|124951|839405|714454|30.350000000000023|32.450000000000045|34.77000000000004 ``` You can use format options as well to output the statistics in diff --git a/temporal/t.rast.univar/testsuite/test_t_rast_univar.py b/temporal/t.rast.univar/testsuite/test_t_rast_univar.py index d30994a0cfe..b177f7e4527 100644 --- a/temporal/t.rast.univar/testsuite/test_t_rast_univar.py +++ b/temporal/t.rast.univar/testsuite/test_t_rast_univar.py @@ -164,11 +164,11 @@ def test_with_all_maps(self): self.runModule("g.region", **self.default_region, res=1) self.assertModule(t_rast_univar) - univar_text = """id|semantic_label|start|end|mean|min|max|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|non_null_cells -a_1@testing||2001-01-01 00:00:00|2001-04-01 00:00:00|100|100|100|100|0|0|0|960000|0|9600|9600 -a_2@testing||2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|200|0|0|0|1920000|0|9600|9600 -a_3@testing||2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|300|0|0|0|2880000|0|9600|9600 -a_4@testing||2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|400|0|0|0|3840000|0|9600|9600 + univar_text = """id|semantic_label|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n +a_1@testing||2001-01-01 00:00:00|2001-04-01 00:00:00|100|100|100|0|100|0|0|0|960000|0|9600|9600 +a_2@testing||2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|0|200|0|0|0|1920000|0|9600|9600 +a_3@testing||2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|0|300|0|0|0|2880000|0|9600|9600 +a_4@testing||2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|0|400|0|0|0|3840000|0|9600|9600 """ for ref, res in zip( univar_text.split("\n"), @@ -191,10 +191,10 @@ def test_with_subset_of_maps(self): self.runModule("g.region", **self.default_region, res=1) self.assertModule(t_rast_univar) - univar_text = """id|semantic_label|start|end|mean|min|max|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|non_null_cells -a_2@testing||2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|200|0|0|0|1920000|0|9600|9600 -a_3@testing||2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|300|0|0|0|2880000|0|9600|9600 -a_4@testing||2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|400|0|0|0|3840000|0|9600|9600 + univar_text = """id|semantic_label|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n +a_2@testing||2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|0|200|0|0|0|1920000|0|9600|9600 +a_3@testing||2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|0|300|0|0|0|2880000|0|9600|9600 +a_4@testing||2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|0|400|0|0|0|3840000|0|9600|9600 """ for ref, res in zip( univar_text.split("\n"), @@ -217,10 +217,10 @@ def test_coarser_resolution(self): self.runModule("g.region", **self.default_region, res=10) self.assertModule(t_rast_univar) - univar_text = """id|semantic_label|start|end|mean|min|max|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|non_null_cells -a_2@testing||2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|200|0|0|0|19200|0|96|96 -a_3@testing||2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|300|0|0|0|28800|0|96|96 -a_4@testing||2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|400|0|0|0|38400|0|96|96 + univar_text = """id|semantic_label|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n +a_2@testing||2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|0|200|0|0|0|19200|0|96|96 +a_3@testing||2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|0|300|0|0|0|28800|0|96|96 +a_4@testing||2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|0|400|0|0|0|38400|0|96|96 """ for ref, res in zip( @@ -246,10 +246,10 @@ def test_subset_with_output(self): verbose=True, ) - univar_text = """id|semantic_label|start|end|mean|min|max|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|non_null_cells -a_2@testing||2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|200|0|0|0|1920000|0|9600|9600 -a_3@testing||2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|300|0|0|0|2880000|0|9600|9600 -a_4@testing||2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|400|0|0|0|3840000|0|9600|9600 + univar_text = """id|semantic_label|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n +a_2@testing||2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|0|200|0|0|0|1920000|0|9600|9600 +a_3@testing||2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|0|300|0|0|0|2880000|0|9600|9600 +a_4@testing||2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|0|400|0|0|0|3840000|0|9600|9600 """ univar_output = Path("univar_output.txt").read_text() @@ -274,10 +274,10 @@ def test_subset_with_extended_statistics_and_output(self): verbose=True, ) - univar_text = """id|semantic_label|start|end|mean|min|max|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|non_null_cells|first_quartile|median|third_quartile|percentile_10|percentile_97_5 -a_2@m2||2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|200|0|0|0|1920000|0|9600|9600|200|200|200|200|200 -a_3@m2||2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|300|0|0|0|2880000|0|9600|9600|300|300|300|300|300 -a_4@m2||2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|400|0|0|0|3840000|0|9600|9600|400|400|400|400|400 + univar_text = """id|semantic_label|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n|first_quartile|median|third_quartile|percentile_10|percentile_97_5 +a_2@m2||2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|0|200|0|0|0|1920000|0|9600|9600|200|200|200|200|200 +a_3@m2||2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|0|300|0|0|0|2880000|0|9600|9600|300|300|300|300|300 +a_4@m2||2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|0|400|0|0|0|3840000|0|9600|9600|400|400|400|400|400 """ univar_output = Path("univar_output.txt").read_text() @@ -300,9 +300,9 @@ def test_subset_with_extended_statistics_and_output(self): verbose=True, ) - univar_text = """a_2@testing||2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|200|0|0|0|1920000|0|9600|9600 -a_3@testing||2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|300|0|0|0|2880000|0|9600|9600 -a_4@testing||2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|400|0|0|0|3840000|0|9600|9600 + univar_text = """a_2@testing||2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|0|200|0|0|0|1920000|0|9600|9600 +a_3@testing||2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|0|300|0|0|0|2880000|0|9600|9600 +a_4@testing||2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|0|400|0|0|0|3840000|0|9600|9600 """ univar_output = Path("univar_output.txt").read_text() @@ -343,19 +343,19 @@ def test_with_zones(self): self.runModule("g.region", **self.default_region, res=1) self.assertModule(t_rast_univar) - univar_text = """id|semantic_label|start|end|zone|mean|min|max|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|non_null_cells -a_1@PERMANENT||2001-01-01 00:00:00|2001-04-01 00:00:00|1|100|100|100|100|0|0|0|60000|0|600|600 -a_1@PERMANENT||2001-01-01 00:00:00|2001-04-01 00:00:00|2|100|100|100|100|0|0|0|168000|0|1680|1680 -a_1@PERMANENT||2001-01-01 00:00:00|2001-04-01 00:00:00|3|100|100|100|100|0|0|0|732000|0|7320|7320 -a_2@PERMANENT||2001-04-01 00:00:00|2001-07-01 00:00:00|1|200|200|200|200|0|0|0|120000|0|600|600 -a_2@PERMANENT||2001-04-01 00:00:00|2001-07-01 00:00:00|2|200|200|200|200|0|0|0|336000|0|1680|1680 -a_2@PERMANENT||2001-04-01 00:00:00|2001-07-01 00:00:00|3|200|200|200|200|0|0|0|1464000|0|7320|7320 -a_3@PERMANENT||2001-07-01 00:00:00|2001-10-01 00:00:00|1|300|300|300|300|0|0|0|180000|0|600|600 -a_3@PERMANENT||2001-07-01 00:00:00|2001-10-01 00:00:00|2|300|300|300|300|0|0|0|504000|0|1680|1680 -a_3@PERMANENT||2001-07-01 00:00:00|2001-10-01 00:00:00|3|300|300|300|300|0|0|0|2196000|0|7320|7320 -a_4@PERMANENT||2001-10-01 00:00:00|2002-01-01 00:00:00|1|400|400|400|400|0|0|0|240000|0|600|600 -a_4@PERMANENT||2001-10-01 00:00:00|2002-01-01 00:00:00|2|400|400|400|400|0|0|0|672000|0|1680|1680 -a_4@PERMANENT||2001-10-01 00:00:00|2002-01-01 00:00:00|3|400|400|400|400|0|0|0|2928000|0|7320|7320 + univar_text = """id|semantic_label|start|end|zone|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n +a_1@PERMANENT||2001-01-01 00:00:00|2001-04-01 00:00:00|1|100|100|100|0|100|0|0|0|60000|0|600|600 +a_1@PERMANENT||2001-01-01 00:00:00|2001-04-01 00:00:00|2|100|100|100|0|100|0|0|0|168000|0|1680|1680 +a_1@PERMANENT||2001-01-01 00:00:00|2001-04-01 00:00:00|3|100|100|100|0|100|0|0|0|732000|0|7320|7320 +a_2@PERMANENT||2001-04-01 00:00:00|2001-07-01 00:00:00|1|200|200|200|0|200|0|0|0|120000|0|600|600 +a_2@PERMANENT||2001-04-01 00:00:00|2001-07-01 00:00:00|2|200|200|200|0|200|0|0|0|336000|0|1680|1680 +a_2@PERMANENT||2001-04-01 00:00:00|2001-07-01 00:00:00|3|200|200|200|0|200|0|0|0|1464000|0|7320|7320 +a_3@PERMANENT||2001-07-01 00:00:00|2001-10-01 00:00:00|1|300|300|300|0|300|0|0|0|180000|0|600|600 +a_3@PERMANENT||2001-07-01 00:00:00|2001-10-01 00:00:00|2|300|300|300|0|300|0|0|0|504000|0|1680|1680 +a_3@PERMANENT||2001-07-01 00:00:00|2001-10-01 00:00:00|3|300|300|300|0|300|0|0|0|2196000|0|7320|7320 +a_4@PERMANENT||2001-10-01 00:00:00|2002-01-01 00:00:00|1|400|400|400|0|400|0|0|0|240000|0|600|600 +a_4@PERMANENT||2001-10-01 00:00:00|2002-01-01 00:00:00|2|400|400|400|0|400|0|0|0|672000|0|1680|1680 +a_4@PERMANENT||2001-10-01 00:00:00|2002-01-01 00:00:00|3|400|400|400|0|400|0|0|0|2928000|0|7320|7320 """ for ref, res in zip( @@ -383,19 +383,19 @@ def test_with_zones_and_r(self): self.runModule("g.region", **self.default_region, res=1) self.assertModule(t_rast_univar) - univar_text = """id|semantic_label|start|end|zone|mean|min|max|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|non_null_cells -a_1@PERMANENT||2001-01-01 00:00:00|2001-04-01 00:00:00|1|100|100|100|100|0|0|0|60000|0|600|600 -a_1@PERMANENT||2001-01-01 00:00:00|2001-04-01 00:00:00|2|100|100|100|100|0|0|0|168000|0|1680|1680 -a_1@PERMANENT||2001-01-01 00:00:00|2001-04-01 00:00:00|3|100|100|100|100|0|0|0|732000|0|7320|7320 -a_2@PERMANENT||2001-04-01 00:00:00|2001-07-01 00:00:00|1|200|200|200|200|0|0|0|120000|0|600|600 -a_2@PERMANENT||2001-04-01 00:00:00|2001-07-01 00:00:00|2|200|200|200|200|0|0|0|336000|0|1680|1680 -a_2@PERMANENT||2001-04-01 00:00:00|2001-07-01 00:00:00|3|200|200|200|200|0|0|0|1464000|0|7320|7320 -a_3@PERMANENT||2001-07-01 00:00:00|2001-10-01 00:00:00|1|300|300|300|300|0|0|0|180000|0|600|600 -a_3@PERMANENT||2001-07-01 00:00:00|2001-10-01 00:00:00|2|300|300|300|300|0|0|0|504000|0|1680|1680 -a_3@PERMANENT||2001-07-01 00:00:00|2001-10-01 00:00:00|3|300|300|300|300|0|0|0|2196000|0|7320|7320 -a_4@PERMANENT||2001-10-01 00:00:00|2002-01-01 00:00:00|1|400|400|400|400|0|0|0|240000|0|600|600 -a_4@PERMANENT||2001-10-01 00:00:00|2002-01-01 00:00:00|2|400|400|400|400|0|0|0|672000|0|1680|1680 -a_4@PERMANENT||2001-10-01 00:00:00|2002-01-01 00:00:00|3|400|400|400|400|0|0|0|2928000|0|7320|7320 + univar_text = """id|semantic_label|start|end|zone|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n +a_1@PERMANENT||2001-01-01 00:00:00|2001-04-01 00:00:00|1|100|100|100|0|100|0|0|0|60000|0|600|600 +a_1@PERMANENT||2001-01-01 00:00:00|2001-04-01 00:00:00|2|100|100|100|0|100|0|0|0|168000|0|1680|1680 +a_1@PERMANENT||2001-01-01 00:00:00|2001-04-01 00:00:00|3|100|100|100|0|100|0|0|0|732000|0|7320|7320 +a_2@PERMANENT||2001-04-01 00:00:00|2001-07-01 00:00:00|1|200|200|200|0|200|0|0|0|120000|0|600|600 +a_2@PERMANENT||2001-04-01 00:00:00|2001-07-01 00:00:00|2|200|200|200|0|200|0|0|0|336000|0|1680|1680 +a_2@PERMANENT||2001-04-01 00:00:00|2001-07-01 00:00:00|3|200|200|200|0|200|0|0|0|1464000|0|7320|7320 +a_3@PERMANENT||2001-07-01 00:00:00|2001-10-01 00:00:00|1|300|300|300|0|300|0|0|0|180000|0|600|600 +a_3@PERMANENT||2001-07-01 00:00:00|2001-10-01 00:00:00|2|300|300|300|0|300|0|0|0|504000|0|1680|1680 +a_3@PERMANENT||2001-07-01 00:00:00|2001-10-01 00:00:00|3|300|300|300|0|300|0|0|0|2196000|0|7320|7320 +a_4@PERMANENT||2001-10-01 00:00:00|2002-01-01 00:00:00|1|400|400|400|0|400|0|0|0|240000|0|600|600 +a_4@PERMANENT||2001-10-01 00:00:00|2002-01-01 00:00:00|2|400|400|400|0|400|0|0|0|672000|0|1680|1680 +a_4@PERMANENT||2001-10-01 00:00:00|2002-01-01 00:00:00|3|400|400|400|0|400|0|0|0|2928000|0|7320|7320 """ for ref, res in zip( @@ -420,11 +420,11 @@ def test_with_semantic_label(self): self.runModule("g.region", **self.default_region, res=1) self.assertModule(t_rast_univar) - univar_text = """id|semantic_label|start|end|mean|min|max|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|non_null_cells -b_1@PERMANENT|S2_B1|2001-01-01 00:00:00|2001-04-01 00:00:00|110|110|110|110|0|0|0|1056000|0|9600|9600 -b_2@PERMANENT|S2_B1|2001-04-01 00:00:00|2001-07-01 00:00:00|220|220|220|220|0|0|0|2112000|0|9600|9600 -b_3@PERMANENT|S2_B1|2001-07-01 00:00:00|2001-10-01 00:00:00|330|330|330|330|0|0|0|3168000|0|9600|9600 -b_4@PERMANENT|S2_B1|2001-10-01 00:00:00|2002-01-01 00:00:00|440|440|440|440|0|0|0|4224000|0|9600|9600 + univar_text = """id|semantic_label|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n +b_1@PERMANENT|S2_B1|2001-01-01 00:00:00|2001-04-01 00:00:00|110|110|110|0|110|0|0|0|1056000|0|9600|9600 +b_2@PERMANENT|S2_B1|2001-04-01 00:00:00|2001-07-01 00:00:00|220|220|220|0|220|0|0|0|2112000|0|9600|9600 +b_3@PERMANENT|S2_B1|2001-07-01 00:00:00|2001-10-01 00:00:00|330|330|330|0|330|0|0|0|3168000|0|9600|9600 +b_4@PERMANENT|S2_B1|2001-10-01 00:00:00|2002-01-01 00:00:00|440|440|440|0|440|0|0|0|4224000|0|9600|9600 """ for ref, res in zip( univar_text.split("\n"), @@ -449,11 +449,11 @@ def test_with_semantic_label_parallel(self): self.runModule("g.region", **self.default_region, res=1) self.assertModule(t_rast_univar) - univar_text = """id|semantic_label|start|end|mean|min|max|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|non_null_cells -b_1@PERMANENT|S2_B1|2001-01-01 00:00:00|2001-04-01 00:00:00|110|110|110|110|0|0|0|1056000|0|9600|9600 -b_2@PERMANENT|S2_B1|2001-04-01 00:00:00|2001-07-01 00:00:00|220|220|220|220|0|0|0|2112000|0|9600|9600 -b_3@PERMANENT|S2_B1|2001-07-01 00:00:00|2001-10-01 00:00:00|330|330|330|330|0|0|0|3168000|0|9600|9600 -b_4@PERMANENT|S2_B1|2001-10-01 00:00:00|2002-01-01 00:00:00|440|440|440|440|0|0|0|4224000|0|9600|9600 + univar_text = """id|semantic_label|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n +b_1@PERMANENT|S2_B1|2001-01-01 00:00:00|2001-04-01 00:00:00|110|110|110|0|110|0|0|0|1056000|0|9600|9600 +b_2@PERMANENT|S2_B1|2001-04-01 00:00:00|2001-07-01 00:00:00|220|220|220|0|220|0|0|0|2112000|0|9600|9600 +b_3@PERMANENT|S2_B1|2001-07-01 00:00:00|2001-10-01 00:00:00|330|330|330|0|330|0|0|0|3168000|0|9600|9600 +b_4@PERMANENT|S2_B1|2001-10-01 00:00:00|2002-01-01 00:00:00|440|440|440|0|440|0|0|0|4224000|0|9600|9600 """ for ref, res in zip( univar_text.split("\n"), @@ -479,11 +479,11 @@ def test_with_spatial_filter_intersects(self): self.runModule("g.region", res=1, s=-5, n=85, w=-5, e=125) self.assertModule(t_rast_univar) - univar_text = """id|semantic_label|start|end|mean|min|max|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|non_null_cells -d_1@stbl||2001-01-01 00:00:00|2001-04-01 00:00:00|100|100|100|100|0|0|0|960000|2100|9600|9600 -d_2@stbl||2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|200|0|0|0|120000|11100|600|600 -d_3@stbl||2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|300|0|0|0|120000|11300|400|400 -d_4@stbl||2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|400|0|0|0|10000|11675|25|25 + univar_text = """id|semantic_label|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n +d_1@stbl||2001-01-01 00:00:00|2001-04-01 00:00:00|100|100|100|0|100|0|0|0|960000|2100|11700|9600 +d_2@stbl||2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|0|200|0|0|0|120000|11100|11700|600 +d_3@stbl||2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|0|300|0|0|0|120000|11300|11700|400 +d_4@stbl||2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|0|400|0|0|0|10000|11675|11700|25 """ for ref, res in zip( univar_text.split("\n"), @@ -510,8 +510,8 @@ def test_with_spatial_filter_contains(self): self.assertModule(t_rast_univar) print(t_rast_univar.outputs.stdout) - univar_text = """id|semantic_label|start|end|mean|min|max|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|non_null_cells -d_1@stbl||2001-01-01 00:00:00|2001-04-01 00:00:00|100|100|100|100|0|0|0|770000|0|7700|7700 + univar_text = """id|semantic_label|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n +d_1@stbl||2001-01-01 00:00:00|2001-04-01 00:00:00|100|100|100|0|100|0|0|0|770000|0|7700|7700 """ for ref, res in zip( univar_text.split("\n"), @@ -537,8 +537,8 @@ def test_with_spatial_filter_is_contained(self): self.runModule("g.region", res=1, s=-5, n=85, w=-5, e=125) self.assertModule(t_rast_univar) - univar_text = """id|semantic_label|start|end|mean|min|max|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|non_null_cells -d_1@stbl||2001-01-01 00:00:00|2001-04-01 00:00:00|100|100|100|100|0|0|0|960000|2100|9600|9600 + univar_text = """id|semantic_label|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n +d_1@stbl||2001-01-01 00:00:00|2001-04-01 00:00:00|100|100|100|0|100|0|0|0|960000|2100|11700|9600 """ for ref, res in zip( univar_text.split("\n"), @@ -563,11 +563,11 @@ def test_format_csv(self): self.runModule("g.region", **self.default_region, res=1) self.assertModule(t_rast_univar) - univar_text = """id,semantic_label,start,end,mean,min,max,mean_of_abs,stddev,variance,coeff_var,sum,null_cells,cells,non_null_cells -a_1@testing,,2001-01-01 00:00:00,2001-04-01 00:00:00,100,100,100,100,0,0,0,960000,0,9600,9600 -a_2@testing,,2001-04-01 00:00:00,2001-07-01 00:00:00,200,200,200,200,0,0,0,1920000,0,9600,9600 -a_3@testing,,2001-07-01 00:00:00,2001-10-01 00:00:00,300,300,300,300,0,0,0,2880000,0,9600,9600 -a_4@testing,,2001-10-01 00:00:00,2002-01-01 00:00:00,400,400,400,400,0,0,0,3840000,0,9600,9600 + univar_text = """id,semantic_label,start,end,mean,min,max,range,mean_of_abs,stddev,variance,coeff_var,sum,null_cells,cells,n +a_1@testing,,2001-01-01 00:00:00,2001-04-01 00:00:00,100,100,100,0,100,0,0,0,960000,0,9600,9600 +a_2@testing,,2001-04-01 00:00:00,2001-07-01 00:00:00,200,200,200,0,200,0,0,0,1920000,0,9600,9600 +a_3@testing,,2001-07-01 00:00:00,2001-10-01 00:00:00,300,300,300,0,300,0,0,0,2880000,0,9600,9600 +a_4@testing,,2001-10-01 00:00:00,2002-01-01 00:00:00,400,400,400,0,400,0,0,0,3840000,0,9600,9600 """ for ref, res in zip( univar_text.splitlines(), @@ -603,6 +603,7 @@ def test_format_json(self): "mean": 200, "min": 200, "max": 200, + "range": 0, "mean_of_abs": 200, "stddev": 0, "variance": 0, @@ -620,6 +621,7 @@ def test_format_json(self): "mean": 300, "min": 300, "max": 300, + "range": 0, "mean_of_abs": 300, "stddev": 0, "variance": 0, @@ -637,6 +639,7 @@ def test_format_json(self): "mean": 400, "min": 400, "max": 400, + "range": 0, "mean_of_abs": 400, "stddev": 0, "variance": 0, From 929213ea7cfbd932c94cde35288c5d79747ea10a Mon Sep 17 00:00:00 2001 From: saket0187 Date: Wed, 10 Jun 2026 14:06:38 +0530 Subject: [PATCH 2/4] Update tests for t.rast3d.univar --- .../testsuite/test_t_rast3d_univar.py | 84 +++++++++---------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/temporal/t.rast3d.univar/testsuite/test_t_rast3d_univar.py b/temporal/t.rast3d.univar/testsuite/test_t_rast3d_univar.py index 2904634ee4b..32b46857852 100644 --- a/temporal/t.rast3d.univar/testsuite/test_t_rast3d_univar.py +++ b/temporal/t.rast3d.univar/testsuite/test_t_rast3d_univar.py @@ -69,11 +69,11 @@ def test_with_all_maps(self): ) self.assertModule(t_rast3d_univar) - univar_text = """id|start|end|mean|min|max|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|non_null_cells -a_1@testing|2001-01-01 00:00:00|2001-04-01 00:00:00|100|100|100|100|0|0|0|48000000|0|480000|480000 -a_2@testing|2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|200|0|0|0|96000000|0|480000|480000 -a_3@testing|2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|300|0|0|0|144000000|0|480000|480000 -a_4@testing|2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|400|0|0|0|192000000|0|480000|480000 + univar_text = """id|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n +a_1@testing|2001-01-01 00:00:00|2001-04-01 00:00:00|100|100|100|0|100|0|0|0|48000000|0|480000|480000 +a_2@testing|2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|0|200|0|0|0|96000000|0|480000|480000 +a_3@testing|2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|0|300|0|0|0|144000000|0|480000|480000 +a_4@testing|2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|0|400|0|0|0|192000000|0|480000|480000 """ for ref, res in zip( univar_text.split("\n"), @@ -95,10 +95,10 @@ def test_with_subset_of_maps(self): ) self.assertModule(t_rast3d_univar) - univar_text = """id|start|end|mean|min|max|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|non_null_cells -a_2@testing|2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|200|0|0|0|96000000|0|480000|480000 -a_3@testing|2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|300|0|0|0|144000000|0|480000|480000 -a_4@testing|2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|400|0|0|0|192000000|0|480000|480000 + univar_text = """id|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n +a_2@testing|2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|0|200|0|0|0|96000000|0|480000|480000 +a_3@testing|2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|0|300|0|0|0|144000000|0|480000|480000 +a_4@testing|2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|0|400|0|0|0|192000000|0|480000|480000 """ for ref, res in zip( univar_text.split("\n"), @@ -120,10 +120,10 @@ def test_subset_with_output(self): verbose=True, ) - univar_text = """id|start|end|mean|min|max|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|non_null_cells -a_2@testing|2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|200|0|0|0|96000000|0|480000|480000 -a_3@testing|2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|300|0|0|0|144000000|0|480000|480000 -a_4@testing|2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|400|0|0|0|192000000|0|480000|480000 + univar_text = """id|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n +a_2@testing|2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|0|200|0|0|0|96000000|0|480000|480000 +a_3@testing|2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|0|300|0|0|0|144000000|0|480000|480000 +a_4@testing|2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|0|400|0|0|0|192000000|0|480000|480000 """ univar_output = Path("univar_output.txt").read_text() @@ -146,9 +146,9 @@ def test_subset_with_output_no_header(self): verbose=True, ) - univar_text = """a_2@testing|2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|200|0|0|0|96000000|0|480000|480000 -a_3@testing|2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|300|0|0|0|144000000|0|480000|480000 -a_4@testing|2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|400|0|0|0|192000000|0|480000|480000 + univar_text = """a_2@testing|2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|0|200|0|0|0|96000000|0|480000|480000 +a_3@testing|2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|0|300|0|0|0|144000000|0|480000|480000 +a_4@testing|2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|0|400|0|0|0|192000000|0|480000|480000 """ univar_output = Path("univar_output.txt").read_text() @@ -189,19 +189,19 @@ def test_with_zones(self): self.runModule("g.region", res=1) self.assertModule(t_rast_univar_zones) - univar_text = """id|start|end|zone|mean|min|max|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|non_null_cells -a_1@PERMANENT|2001-01-01 00:00:00|2001-04-01 00:00:00|1|100|100|100|100|0|0|0|3000000|0|30000|30000 -a_1@PERMANENT|2001-01-01 00:00:00|2001-04-01 00:00:00|2|100|100|100|100|0|0|0|8400000|0|84000|84000 -a_1@PERMANENT|2001-01-01 00:00:00|2001-04-01 00:00:00|3|100|100|100|100|0|0|0|36600000|0|366000|366000 -a_2@PERMANENT|2001-04-01 00:00:00|2001-07-01 00:00:00|1|200|200|200|200|0|0|0|6000000|0|30000|30000 -a_2@PERMANENT|2001-04-01 00:00:00|2001-07-01 00:00:00|2|200|200|200|200|0|0|0|16800000|0|84000|84000 -a_2@PERMANENT|2001-04-01 00:00:00|2001-07-01 00:00:00|3|200|200|200|200|0|0|0|73200000|0|366000|366000 -a_3@PERMANENT|2001-07-01 00:00:00|2001-10-01 00:00:00|1|300|300|300|300|0|0|0|9000000|0|30000|30000 -a_3@PERMANENT|2001-07-01 00:00:00|2001-10-01 00:00:00|2|300|300|300|300|0|0|0|25200000|0|84000|84000 -a_3@PERMANENT|2001-07-01 00:00:00|2001-10-01 00:00:00|3|300|300|300|300|0|0|0|109800000|0|366000|366000 -a_4@PERMANENT|2001-10-01 00:00:00|2002-01-01 00:00:00|1|400|400|400|400|0|0|0|12000000|0|30000|30000 -a_4@PERMANENT|2001-10-01 00:00:00|2002-01-01 00:00:00|2|400|400|400|400|0|0|0|33600000|0|84000|84000 -a_4@PERMANENT|2001-10-01 00:00:00|2002-01-01 00:00:00|3|400|400|400|400|0|0|0|146400000|0|366000|366000 + univar_text = """id|start|end|zone|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n +a_1@PERMANENT|2001-01-01 00:00:00|2001-04-01 00:00:00|1|100|100|100|0|100|0|0|0|3000000|0|30000|30000 +a_1@PERMANENT|2001-01-01 00:00:00|2001-04-01 00:00:00|2|100|100|100|0|100|0|0|0|8400000|0|84000|84000 +a_1@PERMANENT|2001-01-01 00:00:00|2001-04-01 00:00:00|3|100|100|100|0|100|0|0|0|36600000|0|366000|366000 +a_2@PERMANENT|2001-04-01 00:00:00|2001-07-01 00:00:00|1|200|200|200|0|200|0|0|0|6000000|0|30000|30000 +a_2@PERMANENT|2001-04-01 00:00:00|2001-07-01 00:00:00|2|200|200|200|0|200|0|0|0|16800000|0|84000|84000 +a_2@PERMANENT|2001-04-01 00:00:00|2001-07-01 00:00:00|3|200|200|200|0|200|0|0|0|73200000|0|366000|366000 +a_3@PERMANENT|2001-07-01 00:00:00|2001-10-01 00:00:00|1|300|300|300|0|300|0|0|0|9000000|0|30000|30000 +a_3@PERMANENT|2001-07-01 00:00:00|2001-10-01 00:00:00|2|300|300|300|0|300|0|0|0|25200000|0|84000|84000 +a_3@PERMANENT|2001-07-01 00:00:00|2001-10-01 00:00:00|3|300|300|300|0|300|0|0|0|109800000|0|366000|366000 +a_4@PERMANENT|2001-10-01 00:00:00|2002-01-01 00:00:00|1|400|400|400|0|400|0|0|0|12000000|0|30000|30000 +a_4@PERMANENT|2001-10-01 00:00:00|2002-01-01 00:00:00|2|400|400|400|0|400|0|0|0|33600000|0|84000|84000 +a_4@PERMANENT|2001-10-01 00:00:00|2002-01-01 00:00:00|3|400|400|400|0|400|0|0|0|146400000|0|366000|366000 """ for ref, res in zip( @@ -229,19 +229,19 @@ def test_with_zones_parallel(self): self.runModule("g.region", res=1) self.assertModule(t_rast_univar_zones) - univar_text = """id|start|end|zone|mean|min|max|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|non_null_cells -a_1@PERMANENT|2001-01-01 00:00:00|2001-04-01 00:00:00|1|100|100|100|100|0|0|0|3000000|0|30000|30000 -a_1@PERMANENT|2001-01-01 00:00:00|2001-04-01 00:00:00|2|100|100|100|100|0|0|0|8400000|0|84000|84000 -a_1@PERMANENT|2001-01-01 00:00:00|2001-04-01 00:00:00|3|100|100|100|100|0|0|0|36600000|0|366000|366000 -a_2@PERMANENT|2001-04-01 00:00:00|2001-07-01 00:00:00|1|200|200|200|200|0|0|0|6000000|0|30000|30000 -a_2@PERMANENT|2001-04-01 00:00:00|2001-07-01 00:00:00|2|200|200|200|200|0|0|0|16800000|0|84000|84000 -a_2@PERMANENT|2001-04-01 00:00:00|2001-07-01 00:00:00|3|200|200|200|200|0|0|0|73200000|0|366000|366000 -a_3@PERMANENT|2001-07-01 00:00:00|2001-10-01 00:00:00|1|300|300|300|300|0|0|0|9000000|0|30000|30000 -a_3@PERMANENT|2001-07-01 00:00:00|2001-10-01 00:00:00|2|300|300|300|300|0|0|0|25200000|0|84000|84000 -a_3@PERMANENT|2001-07-01 00:00:00|2001-10-01 00:00:00|3|300|300|300|300|0|0|0|109800000|0|366000|366000 -a_4@PERMANENT|2001-10-01 00:00:00|2002-01-01 00:00:00|1|400|400|400|400|0|0|0|12000000|0|30000|30000 -a_4@PERMANENT|2001-10-01 00:00:00|2002-01-01 00:00:00|2|400|400|400|400|0|0|0|33600000|0|84000|84000 -a_4@PERMANENT|2001-10-01 00:00:00|2002-01-01 00:00:00|3|400|400|400|400|0|0|0|146400000|0|366000|366000 + univar_text = """id|start|end|zone|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n +a_1@PERMANENT|2001-01-01 00:00:00|2001-04-01 00:00:00|1|100|100|100|0|100|0|0|0|3000000|0|30000|30000 +a_1@PERMANENT|2001-01-01 00:00:00|2001-04-01 00:00:00|2|100|100|100|0|100|0|0|0|8400000|0|84000|84000 +a_1@PERMANENT|2001-01-01 00:00:00|2001-04-01 00:00:00|3|100|100|100|0|100|0|0|0|36600000|0|366000|366000 +a_2@PERMANENT|2001-04-01 00:00:00|2001-07-01 00:00:00|1|200|200|200|0|200|0|0|0|6000000|0|30000|30000 +a_2@PERMANENT|2001-04-01 00:00:00|2001-07-01 00:00:00|2|200|200|200|0|200|0|0|0|16800000|0|84000|84000 +a_2@PERMANENT|2001-04-01 00:00:00|2001-07-01 00:00:00|3|200|200|200|0|200|0|0|0|73200000|0|366000|366000 +a_3@PERMANENT|2001-07-01 00:00:00|2001-10-01 00:00:00|1|300|300|300|0|300|0|0|0|9000000|0|30000|30000 +a_3@PERMANENT|2001-07-01 00:00:00|2001-10-01 00:00:00|2|300|300|300|0|300|0|0|0|25200000|0|84000|84000 +a_3@PERMANENT|2001-07-01 00:00:00|2001-10-01 00:00:00|3|300|300|300|0|300|0|0|0|109800000|0|366000|366000 +a_4@PERMANENT|2001-10-01 00:00:00|2002-01-01 00:00:00|1|400|400|400|0|400|0|0|0|12000000|0|30000|30000 +a_4@PERMANENT|2001-10-01 00:00:00|2002-01-01 00:00:00|2|400|400|400|0|400|0|0|0|33600000|0|84000|84000 +a_4@PERMANENT|2001-10-01 00:00:00|2002-01-01 00:00:00|3|400|400|400|0|400|0|0|0|146400000|0|366000|366000 """ for ref, res in zip( From 6b95516df55e8e50b265a21623df58f00fe9329a Mon Sep 17 00:00:00 2001 From: saket0187 Date: Tue, 16 Jun 2026 22:33:53 +0530 Subject: [PATCH 3/4] Apply same order --- python/grass/temporal/univar_statistics.py | 70 +++------ temporal/t.rast.univar/t.rast.univar.md | 8 +- .../testsuite/test_t_rast_univar.py | 148 +++++++++--------- .../testsuite/test_t_rast3d_univar.py | 84 +++++----- 4 files changed, 146 insertions(+), 164 deletions(-) diff --git a/python/grass/temporal/univar_statistics.py b/python/grass/temporal/univar_statistics.py index bbeec3af969..410834edb9c 100755 --- a/python/grass/temporal/univar_statistics.py +++ b/python/grass/temporal/univar_statistics.py @@ -54,7 +54,6 @@ def compute_univar_stats( Only available for strds. :param output_format: Output format specification """ - string = "" id = registered_map_info["id"] start = registered_map_info["start_time"] end = registered_map_info["end_time"] @@ -106,44 +105,23 @@ def compute_univar_stats( return processed_stats - eol = "" + lines = univar_stats.strip().split("\n") + if len(lines) < 2: + return "" - for idx, stats_kv in enumerate(univar_stats.split(";")): - stats = gs.utils.parse_key_val(stats_kv) - string += ( - f"{id}{fs}{semantic_label}{fs}{start}{fs}{end}" - if stats_module.name == "r.univar" - else f"{id}{fs}{start}{fs}{end}" - ) - if stats_module.inputs.zones: - if idx == 0: - zone = str(stats["zone"]) - string = "" - continue - string += f"{fs}{zone}" - if "zone" in stats: - zone = str(stats["zone"]) - eol = "\n" - else: - eol = "" - string += f"{fs}{stats['mean']}{fs}{stats['min']}" - string += f"{fs}{stats['max']}{fs}{stats['range']}{fs}{stats['mean_of_abs']}" - string += f"{fs}{stats['stddev']}{fs}{stats['variance']}" - string += f"{fs}{stats['coeff_var']}{fs}{stats['sum']}" - string += f"{fs}{stats['null_cells']}{fs}{stats['cells']}" - string += f"{fs}{stats['n']}" - if "median" in stats: - string += f"{fs}{stats['first_quartile']}{fs}{stats['median']}" - string += f"{fs}{stats['third_quartile']}" - if stats_module.inputs.percentile: - for perc in stats_module.inputs.percentile: - perc_value = stats[ - "percentile_" - f"{str(perc).rstrip('0').rstrip('.').replace('.', '_')}" - ] - string += f"{fs}{perc_value}" - string += eol - return string + prefix = ( + f"{id}{fs}{semantic_label}{fs}{start}{fs}{end}" + if stats_module.name == "r.univar" + else f"{id}{fs}{start}{fs}{end}" + ) + + output_rows = [] + for line in lines[1:]: + if line.strip(): + formatted_line = line.replace(",", fs) + output_rows.append(f"{prefix}{fs}{formatted_line}") + + return "\n".join(output_rows) def print_gridded_dataset_univar_statistics( @@ -235,21 +213,21 @@ def print_gridded_dataset_univar_statistics( else ["id", "start", "end"] ) if zones: - cols.append("zone") + cols.extend(["zone", "label"]) cols.extend( [ - "mean", + "non_null_cells", + "null_cells", "min", "max", "range", + "mean", "mean_of_abs", "stddev", "variance", "coeff_var", "sum", - "null_cells", - "cells", - "n", + "sum_abs", ] ) if extended is True: @@ -262,6 +240,9 @@ def print_gridded_dataset_univar_statistics( for perc in percentile ] ) + else: + cols.extend(["percentile_90"]) + if no_header is False and format != "json": string = fs.join(cols) if output is None: @@ -283,7 +264,8 @@ def print_gridded_dataset_univar_statistics( zones=zones, percentile=percentile, stdout_=PIPE, - format="json" if format == "json" else "shell", + format="json" if format == "json" else "csv", + quiet=True, run_=False, ) diff --git a/temporal/t.rast.univar/t.rast.univar.md b/temporal/t.rast.univar/t.rast.univar.md index 2e2091750c1..e1d10114585 100644 --- a/temporal/t.rast.univar/t.rast.univar.md +++ b/temporal/t.rast.univar/t.rast.univar.md @@ -36,10 +36,10 @@ Obtain the univariate statistics for the raster space time dataset ```sh t.rast.univar -e input=nc_lst_daily -id|semantic_label|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n|first_quartile|median|third_quartile -aqua_lst_day20020705@modis2002lst||2002-07-05 00:00:00|2002-07-06 00:00:00|36.24265068193782|25.730000000000018|45.77000000000004|20.04000000000002|36.24265068193782|2.6171016196159838|6.849220887396605|7.221054670044495|16252219.360000012|390977|839405|448428|34.49000000000001|36.07000000000005|37.83000000000004 -aqua_lst_day20020706@modis2002lst||2002-07-06 00:00:00|2002-07-07 00:00:00|28.219656852808374|25.630000000000052|34.81|9.17999999999995|28.219656852808374|1.6350578714604542|2.6734142430247916|5.794038814819025|6960604.120000008|592747|839405|246658|27.110000000000014|27.970000000000027|28.970000000000027 -aqua_lst_day20020707@modis2002lst||2002-07-07 00:00:00|2002-07-08 00:00:00|32.642155464172674|25.630000000000052|44.670000000000016|19.039999999999964|32.642155464172674|3.1874224286049917|10.159661738374142|9.764742503305083|23321318.54000002|124951|839405|714454|30.350000000000023|32.450000000000045|34.77000000000004 +id|semantic_label|start|end|non_null_cells|null_cells|min|max|range|mean|mean_of_abs|stddev|variance|coeff_var|sum|sum_abs|first_quartile|median|third_quartile|percentile_90 +aqua_lst_day20020705@modis2002lst||2002-07-05 00:00:00|2002-07-06 00:00:00|448428|390977|25.730000000000018|45.77000000000004|20.04000000000002|36.24265068193782|36.24265068193782|2.6171016196159838|6.849220887396605|7.221054670044495|16252219.360000012|16252219.360000012|34.49000000000001|36.07000000000005|37.83000000000004|40.01000000000005 +aqua_lst_day20020706@modis2002lst||2002-07-06 00:00:00|2002-07-07 00:00:00|246658|592747|25.630000000000052|34.81|9.17999999999995|28.219656852808374|28.219656852808374|1.6350578714604542|2.6734142430247916|5.794038814819025|6960604.120000008|6960604.120000008|27.110000000000014|27.970000000000027|28.970000000000027|30.450000000000045 +aqua_lst_day20020707@modis2002lst||2002-07-07 00:00:00|2002-07-08 00:00:00|714454|124951|25.630000000000052|44.670000000000016|19.039999999999964|32.642155464172674|32.642155464172674|3.1874224286049917|10.159661738374142|9.764742503305083|23321318.54000002|23321318.54000002|30.350000000000023|32.450000000000045|34.77000000000004|36.950000000000045 ``` You can use format options as well to output the statistics in diff --git a/temporal/t.rast.univar/testsuite/test_t_rast_univar.py b/temporal/t.rast.univar/testsuite/test_t_rast_univar.py index b177f7e4527..f811ec358c9 100644 --- a/temporal/t.rast.univar/testsuite/test_t_rast_univar.py +++ b/temporal/t.rast.univar/testsuite/test_t_rast_univar.py @@ -164,11 +164,11 @@ def test_with_all_maps(self): self.runModule("g.region", **self.default_region, res=1) self.assertModule(t_rast_univar) - univar_text = """id|semantic_label|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n -a_1@testing||2001-01-01 00:00:00|2001-04-01 00:00:00|100|100|100|0|100|0|0|0|960000|0|9600|9600 -a_2@testing||2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|0|200|0|0|0|1920000|0|9600|9600 -a_3@testing||2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|0|300|0|0|0|2880000|0|9600|9600 -a_4@testing||2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|0|400|0|0|0|3840000|0|9600|9600 + univar_text = """id|semantic_label|start|end|non_null_cells|null_cells|min|max|range|mean|mean_of_abs|stddev|variance|coeff_var|sum|sum_abs +a_1@testing||2001-01-01 00:00:00|2001-04-01 00:00:00|9600|0|100|100|0|100|100|0|0|0|960000|960000 +a_2@testing||2001-04-01 00:00:00|2001-07-01 00:00:00|9600|0|200|200|0|200|200|0|0|0|1920000|1920000 +a_3@testing||2001-07-01 00:00:00|2001-10-01 00:00:00|9600|0|300|300|0|300|300|0|0|0|2880000|2880000 +a_4@testing||2001-10-01 00:00:00|2002-01-01 00:00:00|9600|0|400|400|0|400|400|0|0|0|3840000|3840000 """ for ref, res in zip( univar_text.split("\n"), @@ -191,10 +191,10 @@ def test_with_subset_of_maps(self): self.runModule("g.region", **self.default_region, res=1) self.assertModule(t_rast_univar) - univar_text = """id|semantic_label|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n -a_2@testing||2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|0|200|0|0|0|1920000|0|9600|9600 -a_3@testing||2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|0|300|0|0|0|2880000|0|9600|9600 -a_4@testing||2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|0|400|0|0|0|3840000|0|9600|9600 + univar_text = """id|semantic_label|start|end|non_null_cells|null_cells|min|max|range|mean|mean_of_abs|stddev|variance|coeff_var|sum|sum_abs +a_2@testing||2001-04-01 00:00:00|2001-07-01 00:00:00|9600|0|200|200|0|200|200|0|0|0|1920000|1920000 +a_3@testing||2001-07-01 00:00:00|2001-10-01 00:00:00|9600|0|300|300|0|300|300|0|0|0|2880000|2880000 +a_4@testing||2001-10-01 00:00:00|2002-01-01 00:00:00|9600|0|400|400|0|400|400|0|0|0|3840000|3840000 """ for ref, res in zip( univar_text.split("\n"), @@ -217,10 +217,10 @@ def test_coarser_resolution(self): self.runModule("g.region", **self.default_region, res=10) self.assertModule(t_rast_univar) - univar_text = """id|semantic_label|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n -a_2@testing||2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|0|200|0|0|0|19200|0|96|96 -a_3@testing||2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|0|300|0|0|0|28800|0|96|96 -a_4@testing||2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|0|400|0|0|0|38400|0|96|96 + univar_text = """id|semantic_label|start|end|non_null_cells|null_cells|min|max|range|mean|mean_of_abs|stddev|variance|coeff_var|sum|sum_abs +a_2@testing||2001-04-01 00:00:00|2001-07-01 00:00:00|96|0|200|200|0|200|200|0|0|0|19200|19200 +a_3@testing||2001-07-01 00:00:00|2001-10-01 00:00:00|96|0|300|300|0|300|300|0|0|0|28800|28800 +a_4@testing||2001-10-01 00:00:00|2002-01-01 00:00:00|96|0|400|400|0|400|400|0|0|0|38400|38400 """ for ref, res in zip( @@ -246,10 +246,10 @@ def test_subset_with_output(self): verbose=True, ) - univar_text = """id|semantic_label|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n -a_2@testing||2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|0|200|0|0|0|1920000|0|9600|9600 -a_3@testing||2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|0|300|0|0|0|2880000|0|9600|9600 -a_4@testing||2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|0|400|0|0|0|3840000|0|9600|9600 + univar_text = """id|semantic_label|start|end|non_null_cells|null_cells|min|max|range|mean|mean_of_abs|stddev|variance|coeff_var|sum|sum_abs +a_2@testing||2001-04-01 00:00:00|2001-07-01 00:00:00|9600|0|200|200|0|200|200|0|0|0|1920000|1920000 +a_3@testing||2001-07-01 00:00:00|2001-10-01 00:00:00|9600|0|300|300|0|300|300|0|0|0|2880000|2880000 +a_4@testing||2001-10-01 00:00:00|2002-01-01 00:00:00|9600|0|400|400|0|400|400|0|0|0|3840000|3840000 """ univar_output = Path("univar_output.txt").read_text() @@ -274,10 +274,10 @@ def test_subset_with_extended_statistics_and_output(self): verbose=True, ) - univar_text = """id|semantic_label|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n|first_quartile|median|third_quartile|percentile_10|percentile_97_5 -a_2@m2||2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|0|200|0|0|0|1920000|0|9600|9600|200|200|200|200|200 -a_3@m2||2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|0|300|0|0|0|2880000|0|9600|9600|300|300|300|300|300 -a_4@m2||2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|0|400|0|0|0|3840000|0|9600|9600|400|400|400|400|400 + univar_text = """id|semantic_label|start|end|non_null_cells|null_cells|min|max|range|mean|mean_of_abs|stddev|variance|coeff_var|sum|sum_abs|first_quartile|median|third_quartile|percentile_10|percentile_97_5 +a_2@m2||2001-04-01 00:00:00|2001-07-01 00:00:00|9600|0|200|200|0|200|200|0|0|0|1920000|1920000|200|200|200|200|200 +a_3@m2||2001-07-01 00:00:00|2001-10-01 00:00:00|9600|0|300|300|0|300|300|0|0|0|2880000|2880000|300|300|300|300|300 +a_4@m2||2001-10-01 00:00:00|2002-01-01 00:00:00|9600|0|400|400|0|400|400|0|0|0|3840000|3840000|400|400|400|400|400 """ univar_output = Path("univar_output.txt").read_text() @@ -300,9 +300,9 @@ def test_subset_with_extended_statistics_and_output(self): verbose=True, ) - univar_text = """a_2@testing||2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|0|200|0|0|0|1920000|0|9600|9600 -a_3@testing||2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|0|300|0|0|0|2880000|0|9600|9600 -a_4@testing||2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|0|400|0|0|0|3840000|0|9600|9600 + univar_text = """a_2@testing||2001-04-01 00:00:00|2001-07-01 00:00:00|9600|0|200|200|0|200|200|0|0|0|1920000|1920000 +a_3@testing||2001-07-01 00:00:00|2001-10-01 00:00:00|9600|0|300|300|0|300|300|0|0|0|2880000|2880000 +a_4@testing||2001-10-01 00:00:00|2002-01-01 00:00:00|9600|0|400|400|0|400|400|0|0|0|3840000|3840000 """ univar_output = Path("univar_output.txt").read_text() @@ -343,19 +343,19 @@ def test_with_zones(self): self.runModule("g.region", **self.default_region, res=1) self.assertModule(t_rast_univar) - univar_text = """id|semantic_label|start|end|zone|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n -a_1@PERMANENT||2001-01-01 00:00:00|2001-04-01 00:00:00|1|100|100|100|0|100|0|0|0|60000|0|600|600 -a_1@PERMANENT||2001-01-01 00:00:00|2001-04-01 00:00:00|2|100|100|100|0|100|0|0|0|168000|0|1680|1680 -a_1@PERMANENT||2001-01-01 00:00:00|2001-04-01 00:00:00|3|100|100|100|0|100|0|0|0|732000|0|7320|7320 -a_2@PERMANENT||2001-04-01 00:00:00|2001-07-01 00:00:00|1|200|200|200|0|200|0|0|0|120000|0|600|600 -a_2@PERMANENT||2001-04-01 00:00:00|2001-07-01 00:00:00|2|200|200|200|0|200|0|0|0|336000|0|1680|1680 -a_2@PERMANENT||2001-04-01 00:00:00|2001-07-01 00:00:00|3|200|200|200|0|200|0|0|0|1464000|0|7320|7320 -a_3@PERMANENT||2001-07-01 00:00:00|2001-10-01 00:00:00|1|300|300|300|0|300|0|0|0|180000|0|600|600 -a_3@PERMANENT||2001-07-01 00:00:00|2001-10-01 00:00:00|2|300|300|300|0|300|0|0|0|504000|0|1680|1680 -a_3@PERMANENT||2001-07-01 00:00:00|2001-10-01 00:00:00|3|300|300|300|0|300|0|0|0|2196000|0|7320|7320 -a_4@PERMANENT||2001-10-01 00:00:00|2002-01-01 00:00:00|1|400|400|400|0|400|0|0|0|240000|0|600|600 -a_4@PERMANENT||2001-10-01 00:00:00|2002-01-01 00:00:00|2|400|400|400|0|400|0|0|0|672000|0|1680|1680 -a_4@PERMANENT||2001-10-01 00:00:00|2002-01-01 00:00:00|3|400|400|400|0|400|0|0|0|2928000|0|7320|7320 + univar_text = """id|semantic_label|start|end|zone|label|non_null_cells|null_cells|min|max|range|mean|mean_of_abs|stddev|variance|coeff_var|sum|sum_abs +a_1@PERMANENT||2001-01-01 00:00:00|2001-04-01 00:00:00|1||600|0|100|100|0|100|100|0|0|0|60000|60000 +a_1@PERMANENT||2001-01-01 00:00:00|2001-04-01 00:00:00|2||1680|0|100|100|0|100|100|0|0|0|168000|168000 +a_1@PERMANENT||2001-01-01 00:00:00|2001-04-01 00:00:00|3||7320|0|100|100|0|100|100|0|0|0|732000|732000 +a_2@PERMANENT||2001-04-01 00:00:00|2001-07-01 00:00:00|1||600|0|200|200|0|200|200|0|0|0|120000|120000 +a_2@PERMANENT||2001-04-01 00:00:00|2001-07-01 00:00:00|2||1680|0|200|200|0|200|200|0|0|0|336000|336000 +a_2@PERMANENT||2001-04-01 00:00:00|2001-07-01 00:00:00|3||7320|0|200|200|0|200|200|0|0|0|1464000|1464000 +a_3@PERMANENT||2001-07-01 00:00:00|2001-10-01 00:00:00|1||600|0|300|300|0|300|300|0|0|0|180000|180000 +a_3@PERMANENT||2001-07-01 00:00:00|2001-10-01 00:00:00|2||1680|0|300|300|0|300|300|0|0|0|504000|504000 +a_3@PERMANENT||2001-07-01 00:00:00|2001-10-01 00:00:00|3||7320|0|300|300|0|300|300|0|0|0|2196000|2196000 +a_4@PERMANENT||2001-10-01 00:00:00|2002-01-01 00:00:00|1||600|0|400|400|0|400|400|0|0|0|240000|240000 +a_4@PERMANENT||2001-10-01 00:00:00|2002-01-01 00:00:00|2||1680|0|400|400|0|400|400|0|0|0|672000|672000 +a_4@PERMANENT||2001-10-01 00:00:00|2002-01-01 00:00:00|3||7320|0|400|400|0|400|400|0|0|0|2928000|2928000 """ for ref, res in zip( @@ -383,19 +383,19 @@ def test_with_zones_and_r(self): self.runModule("g.region", **self.default_region, res=1) self.assertModule(t_rast_univar) - univar_text = """id|semantic_label|start|end|zone|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n -a_1@PERMANENT||2001-01-01 00:00:00|2001-04-01 00:00:00|1|100|100|100|0|100|0|0|0|60000|0|600|600 -a_1@PERMANENT||2001-01-01 00:00:00|2001-04-01 00:00:00|2|100|100|100|0|100|0|0|0|168000|0|1680|1680 -a_1@PERMANENT||2001-01-01 00:00:00|2001-04-01 00:00:00|3|100|100|100|0|100|0|0|0|732000|0|7320|7320 -a_2@PERMANENT||2001-04-01 00:00:00|2001-07-01 00:00:00|1|200|200|200|0|200|0|0|0|120000|0|600|600 -a_2@PERMANENT||2001-04-01 00:00:00|2001-07-01 00:00:00|2|200|200|200|0|200|0|0|0|336000|0|1680|1680 -a_2@PERMANENT||2001-04-01 00:00:00|2001-07-01 00:00:00|3|200|200|200|0|200|0|0|0|1464000|0|7320|7320 -a_3@PERMANENT||2001-07-01 00:00:00|2001-10-01 00:00:00|1|300|300|300|0|300|0|0|0|180000|0|600|600 -a_3@PERMANENT||2001-07-01 00:00:00|2001-10-01 00:00:00|2|300|300|300|0|300|0|0|0|504000|0|1680|1680 -a_3@PERMANENT||2001-07-01 00:00:00|2001-10-01 00:00:00|3|300|300|300|0|300|0|0|0|2196000|0|7320|7320 -a_4@PERMANENT||2001-10-01 00:00:00|2002-01-01 00:00:00|1|400|400|400|0|400|0|0|0|240000|0|600|600 -a_4@PERMANENT||2001-10-01 00:00:00|2002-01-01 00:00:00|2|400|400|400|0|400|0|0|0|672000|0|1680|1680 -a_4@PERMANENT||2001-10-01 00:00:00|2002-01-01 00:00:00|3|400|400|400|0|400|0|0|0|2928000|0|7320|7320 + univar_text = """id|semantic_label|start|end|zone|label|non_null_cells|null_cells|min|max|range|mean|mean_of_abs|stddev|variance|coeff_var|sum|sum_abs +a_1@PERMANENT||2001-01-01 00:00:00|2001-04-01 00:00:00|1||600|0|100|100|0|100|100|0|0|0|60000|60000 +a_1@PERMANENT||2001-01-01 00:00:00|2001-04-01 00:00:00|2||1680|0|100|100|0|100|100|0|0|0|168000|168000 +a_1@PERMANENT||2001-01-01 00:00:00|2001-04-01 00:00:00|3||7320|0|100|100|0|100|100|0|0|0|732000|732000 +a_2@PERMANENT||2001-04-01 00:00:00|2001-07-01 00:00:00|1||600|0|200|200|0|200|200|0|0|0|120000|120000 +a_2@PERMANENT||2001-04-01 00:00:00|2001-07-01 00:00:00|2||1680|0|200|200|0|200|200|0|0|0|336000|336000 +a_2@PERMANENT||2001-04-01 00:00:00|2001-07-01 00:00:00|3||7320|0|200|200|0|200|200|0|0|0|1464000|1464000 +a_3@PERMANENT||2001-07-01 00:00:00|2001-10-01 00:00:00|1||600|0|300|300|0|300|300|0|0|0|180000|180000 +a_3@PERMANENT||2001-07-01 00:00:00|2001-10-01 00:00:00|2||1680|0|300|300|0|300|300|0|0|0|504000|504000 +a_3@PERMANENT||2001-07-01 00:00:00|2001-10-01 00:00:00|3||7320|0|300|300|0|300|300|0|0|0|2196000|2196000 +a_4@PERMANENT||2001-10-01 00:00:00|2002-01-01 00:00:00|1||600|0|400|400|0|400|400|0|0|0|240000|240000 +a_4@PERMANENT||2001-10-01 00:00:00|2002-01-01 00:00:00|2||1680|0|400|400|0|400|400|0|0|0|672000|672000 +a_4@PERMANENT||2001-10-01 00:00:00|2002-01-01 00:00:00|3||7320|0|400|400|0|400|400|0|0|0|2928000|2928000 """ for ref, res in zip( @@ -420,11 +420,11 @@ def test_with_semantic_label(self): self.runModule("g.region", **self.default_region, res=1) self.assertModule(t_rast_univar) - univar_text = """id|semantic_label|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n -b_1@PERMANENT|S2_B1|2001-01-01 00:00:00|2001-04-01 00:00:00|110|110|110|0|110|0|0|0|1056000|0|9600|9600 -b_2@PERMANENT|S2_B1|2001-04-01 00:00:00|2001-07-01 00:00:00|220|220|220|0|220|0|0|0|2112000|0|9600|9600 -b_3@PERMANENT|S2_B1|2001-07-01 00:00:00|2001-10-01 00:00:00|330|330|330|0|330|0|0|0|3168000|0|9600|9600 -b_4@PERMANENT|S2_B1|2001-10-01 00:00:00|2002-01-01 00:00:00|440|440|440|0|440|0|0|0|4224000|0|9600|9600 + univar_text = """id|semantic_label|start|end|non_null_cells|null_cells|min|max|range|mean|mean_of_abs|stddev|variance|coeff_var|sum|sum_abs +b_1@PERMANENT|S2_B1|2001-01-01 00:00:00|2001-04-01 00:00:00|9600|0|110|110|0|110|110|0|0|0|1056000|1056000 +b_2@PERMANENT|S2_B1|2001-04-01 00:00:00|2001-07-01 00:00:00|9600|0|220|220|0|220|220|0|0|0|2112000|2112000 +b_3@PERMANENT|S2_B1|2001-07-01 00:00:00|2001-10-01 00:00:00|9600|0|330|330|0|330|330|0|0|0|3168000|3168000 +b_4@PERMANENT|S2_B1|2001-10-01 00:00:00|2002-01-01 00:00:00|9600|0|440|440|0|440|440|0|0|0|4224000|4224000 """ for ref, res in zip( univar_text.split("\n"), @@ -449,11 +449,11 @@ def test_with_semantic_label_parallel(self): self.runModule("g.region", **self.default_region, res=1) self.assertModule(t_rast_univar) - univar_text = """id|semantic_label|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n -b_1@PERMANENT|S2_B1|2001-01-01 00:00:00|2001-04-01 00:00:00|110|110|110|0|110|0|0|0|1056000|0|9600|9600 -b_2@PERMANENT|S2_B1|2001-04-01 00:00:00|2001-07-01 00:00:00|220|220|220|0|220|0|0|0|2112000|0|9600|9600 -b_3@PERMANENT|S2_B1|2001-07-01 00:00:00|2001-10-01 00:00:00|330|330|330|0|330|0|0|0|3168000|0|9600|9600 -b_4@PERMANENT|S2_B1|2001-10-01 00:00:00|2002-01-01 00:00:00|440|440|440|0|440|0|0|0|4224000|0|9600|9600 + univar_text = """id|semantic_label|start|end|non_null_cells|null_cells|min|max|range|mean|mean_of_abs|stddev|variance|coeff_var|sum|sum_abs +b_1@PERMANENT|S2_B1|2001-01-01 00:00:00|2001-04-01 00:00:00|9600|0|110|110|0|110|110|0|0|0|1056000|1056000 +b_2@PERMANENT|S2_B1|2001-04-01 00:00:00|2001-07-01 00:00:00|9600|0|220|220|0|220|220|0|0|0|2112000|2112000 +b_3@PERMANENT|S2_B1|2001-07-01 00:00:00|2001-10-01 00:00:00|9600|0|330|330|0|330|330|0|0|0|3168000|3168000 +b_4@PERMANENT|S2_B1|2001-10-01 00:00:00|2002-01-01 00:00:00|9600|0|440|440|0|440|440|0|0|0|4224000|4224000 """ for ref, res in zip( univar_text.split("\n"), @@ -479,11 +479,11 @@ def test_with_spatial_filter_intersects(self): self.runModule("g.region", res=1, s=-5, n=85, w=-5, e=125) self.assertModule(t_rast_univar) - univar_text = """id|semantic_label|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n -d_1@stbl||2001-01-01 00:00:00|2001-04-01 00:00:00|100|100|100|0|100|0|0|0|960000|2100|11700|9600 -d_2@stbl||2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|0|200|0|0|0|120000|11100|11700|600 -d_3@stbl||2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|0|300|0|0|0|120000|11300|11700|400 -d_4@stbl||2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|0|400|0|0|0|10000|11675|11700|25 + univar_text = """id|semantic_label|start|end|non_null_cells|null_cells|min|max|range|mean|mean_of_abs|stddev|variance|coeff_var|sum|sum_abs +d_1@stbl||2001-01-01 00:00:00|2001-04-01 00:00:00|9600|2100|100|100|0|100|100|0|0|0|960000|960000 +d_2@stbl||2001-04-01 00:00:00|2001-07-01 00:00:00|600|11100|200|200|0|200|200|0|0|0|120000|120000 +d_3@stbl||2001-07-01 00:00:00|2001-10-01 00:00:00|400|11300|300|300|0|300|300|0|0|0|120000|120000 +d_4@stbl||2001-10-01 00:00:00|2002-01-01 00:00:00|25|11675|400|400|0|400|400|0|0|0|10000|10000 """ for ref, res in zip( univar_text.split("\n"), @@ -510,8 +510,8 @@ def test_with_spatial_filter_contains(self): self.assertModule(t_rast_univar) print(t_rast_univar.outputs.stdout) - univar_text = """id|semantic_label|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n -d_1@stbl||2001-01-01 00:00:00|2001-04-01 00:00:00|100|100|100|0|100|0|0|0|770000|0|7700|7700 + univar_text = """id|semantic_label|start|end|non_null_cells|null_cells|min|max|range|mean|mean_of_abs|stddev|variance|coeff_var|sum|sum_abs +d_1@stbl||2001-01-01 00:00:00|2001-04-01 00:00:00|7700|0|100|100|0|100|100|0|0|0|770000|770000 """ for ref, res in zip( univar_text.split("\n"), @@ -537,8 +537,8 @@ def test_with_spatial_filter_is_contained(self): self.runModule("g.region", res=1, s=-5, n=85, w=-5, e=125) self.assertModule(t_rast_univar) - univar_text = """id|semantic_label|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n -d_1@stbl||2001-01-01 00:00:00|2001-04-01 00:00:00|100|100|100|0|100|0|0|0|960000|2100|11700|9600 + univar_text = """id|semantic_label|start|end|non_null_cells|null_cells|min|max|range|mean|mean_of_abs|stddev|variance|coeff_var|sum|sum_abs +d_1@stbl||2001-01-01 00:00:00|2001-04-01 00:00:00|9600|2100|100|100|0|100|100|0|0|0|960000|960000 """ for ref, res in zip( univar_text.split("\n"), @@ -563,11 +563,11 @@ def test_format_csv(self): self.runModule("g.region", **self.default_region, res=1) self.assertModule(t_rast_univar) - univar_text = """id,semantic_label,start,end,mean,min,max,range,mean_of_abs,stddev,variance,coeff_var,sum,null_cells,cells,n -a_1@testing,,2001-01-01 00:00:00,2001-04-01 00:00:00,100,100,100,0,100,0,0,0,960000,0,9600,9600 -a_2@testing,,2001-04-01 00:00:00,2001-07-01 00:00:00,200,200,200,0,200,0,0,0,1920000,0,9600,9600 -a_3@testing,,2001-07-01 00:00:00,2001-10-01 00:00:00,300,300,300,0,300,0,0,0,2880000,0,9600,9600 -a_4@testing,,2001-10-01 00:00:00,2002-01-01 00:00:00,400,400,400,0,400,0,0,0,3840000,0,9600,9600 + univar_text = """id,semantic_label,start,end,non_null_cells,null_cells,min,max,range,mean,mean_of_abs,stddev,variance,coeff_var,sum,sum_abs +a_1@testing,,2001-01-01 00:00:00,2001-04-01 00:00:00,9600,0,100,100,0,100,100,0,0,0,960000,960000 +a_2@testing,,2001-04-01 00:00:00,2001-07-01 00:00:00,9600,0,200,200,0,200,200,0,0,0,1920000,1920000 +a_3@testing,,2001-07-01 00:00:00,2001-10-01 00:00:00,9600,0,300,300,0,300,300,0,0,0,2880000,2880000 +a_4@testing,,2001-10-01 00:00:00,2002-01-01 00:00:00,9600,0,400,400,0,400,400,0,0,0,3840000,3840000 """ for ref, res in zip( univar_text.splitlines(), diff --git a/temporal/t.rast3d.univar/testsuite/test_t_rast3d_univar.py b/temporal/t.rast3d.univar/testsuite/test_t_rast3d_univar.py index 32b46857852..4bc6985aa8f 100644 --- a/temporal/t.rast3d.univar/testsuite/test_t_rast3d_univar.py +++ b/temporal/t.rast3d.univar/testsuite/test_t_rast3d_univar.py @@ -69,11 +69,11 @@ def test_with_all_maps(self): ) self.assertModule(t_rast3d_univar) - univar_text = """id|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n -a_1@testing|2001-01-01 00:00:00|2001-04-01 00:00:00|100|100|100|0|100|0|0|0|48000000|0|480000|480000 -a_2@testing|2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|0|200|0|0|0|96000000|0|480000|480000 -a_3@testing|2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|0|300|0|0|0|144000000|0|480000|480000 -a_4@testing|2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|0|400|0|0|0|192000000|0|480000|480000 + univar_text = """id|start|end|non_null_cells|null_cells|min|max|range|mean|mean_of_abs|stddev|variance|coeff_var|sum|sum_abs +a_1@testing|2001-01-01 00:00:00|2001-04-01 00:00:00|480000|0|100|100|0|100|100|0|0|0|48000000|48000000 +a_2@testing|2001-04-01 00:00:00|2001-07-01 00:00:00|480000|0|200|200|0|200|200|0|0|0|96000000|96000000 +a_3@testing|2001-07-01 00:00:00|2001-10-01 00:00:00|480000|0|300|300|0|300|300|0|0|0|144000000|144000000 +a_4@testing|2001-10-01 00:00:00|2002-01-01 00:00:00|480000|0|400|400|0|400|400|0|0|0|192000000|192000000 """ for ref, res in zip( univar_text.split("\n"), @@ -95,10 +95,10 @@ def test_with_subset_of_maps(self): ) self.assertModule(t_rast3d_univar) - univar_text = """id|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n -a_2@testing|2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|0|200|0|0|0|96000000|0|480000|480000 -a_3@testing|2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|0|300|0|0|0|144000000|0|480000|480000 -a_4@testing|2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|0|400|0|0|0|192000000|0|480000|480000 + univar_text = """id|start|end|non_null_cells|null_cells|min|max|range|mean|mean_of_abs|stddev|variance|coeff_var|sum|sum_abs +a_2@testing|2001-04-01 00:00:00|2001-07-01 00:00:00|480000|0|200|200|0|200|200|0|0|0|96000000|96000000 +a_3@testing|2001-07-01 00:00:00|2001-10-01 00:00:00|480000|0|300|300|0|300|300|0|0|0|144000000|144000000 +a_4@testing|2001-10-01 00:00:00|2002-01-01 00:00:00|480000|0|400|400|0|400|400|0|0|0|192000000|192000000 """ for ref, res in zip( univar_text.split("\n"), @@ -120,10 +120,10 @@ def test_subset_with_output(self): verbose=True, ) - univar_text = """id|start|end|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n -a_2@testing|2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|0|200|0|0|0|96000000|0|480000|480000 -a_3@testing|2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|0|300|0|0|0|144000000|0|480000|480000 -a_4@testing|2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|0|400|0|0|0|192000000|0|480000|480000 + univar_text = """id|start|end|non_null_cells|null_cells|min|max|range|mean|mean_of_abs|stddev|variance|coeff_var|sum|sum_abs +a_2@testing|2001-04-01 00:00:00|2001-07-01 00:00:00|480000|0|200|200|0|200|200|0|0|0|96000000|96000000 +a_3@testing|2001-07-01 00:00:00|2001-10-01 00:00:00|480000|0|300|300|0|300|300|0|0|0|144000000|144000000 +a_4@testing|2001-10-01 00:00:00|2002-01-01 00:00:00|480000|0|400|400|0|400|400|0|0|0|192000000|192000000 """ univar_output = Path("univar_output.txt").read_text() @@ -146,9 +146,9 @@ def test_subset_with_output_no_header(self): verbose=True, ) - univar_text = """a_2@testing|2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|0|200|0|0|0|96000000|0|480000|480000 -a_3@testing|2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|0|300|0|0|0|144000000|0|480000|480000 -a_4@testing|2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|0|400|0|0|0|192000000|0|480000|480000 + univar_text = """a_2@testing|2001-04-01 00:00:00|2001-07-01 00:00:00|480000|0|200|200|0|200|200|0|0|0|96000000|96000000 +a_3@testing|2001-07-01 00:00:00|2001-10-01 00:00:00|480000|0|300|300|0|300|300|0|0|0|144000000|144000000 +a_4@testing|2001-10-01 00:00:00|2002-01-01 00:00:00|480000|0|400|400|0|400|400|0|0|0|192000000|192000000 """ univar_output = Path("univar_output.txt").read_text() @@ -189,19 +189,19 @@ def test_with_zones(self): self.runModule("g.region", res=1) self.assertModule(t_rast_univar_zones) - univar_text = """id|start|end|zone|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n -a_1@PERMANENT|2001-01-01 00:00:00|2001-04-01 00:00:00|1|100|100|100|0|100|0|0|0|3000000|0|30000|30000 -a_1@PERMANENT|2001-01-01 00:00:00|2001-04-01 00:00:00|2|100|100|100|0|100|0|0|0|8400000|0|84000|84000 -a_1@PERMANENT|2001-01-01 00:00:00|2001-04-01 00:00:00|3|100|100|100|0|100|0|0|0|36600000|0|366000|366000 -a_2@PERMANENT|2001-04-01 00:00:00|2001-07-01 00:00:00|1|200|200|200|0|200|0|0|0|6000000|0|30000|30000 -a_2@PERMANENT|2001-04-01 00:00:00|2001-07-01 00:00:00|2|200|200|200|0|200|0|0|0|16800000|0|84000|84000 -a_2@PERMANENT|2001-04-01 00:00:00|2001-07-01 00:00:00|3|200|200|200|0|200|0|0|0|73200000|0|366000|366000 -a_3@PERMANENT|2001-07-01 00:00:00|2001-10-01 00:00:00|1|300|300|300|0|300|0|0|0|9000000|0|30000|30000 -a_3@PERMANENT|2001-07-01 00:00:00|2001-10-01 00:00:00|2|300|300|300|0|300|0|0|0|25200000|0|84000|84000 -a_3@PERMANENT|2001-07-01 00:00:00|2001-10-01 00:00:00|3|300|300|300|0|300|0|0|0|109800000|0|366000|366000 -a_4@PERMANENT|2001-10-01 00:00:00|2002-01-01 00:00:00|1|400|400|400|0|400|0|0|0|12000000|0|30000|30000 -a_4@PERMANENT|2001-10-01 00:00:00|2002-01-01 00:00:00|2|400|400|400|0|400|0|0|0|33600000|0|84000|84000 -a_4@PERMANENT|2001-10-01 00:00:00|2002-01-01 00:00:00|3|400|400|400|0|400|0|0|0|146400000|0|366000|366000 + univar_text = """id|start|end|zone|label|non_null_cells|null_cells|min|max|range|mean|mean_of_abs|stddev|variance|coeff_var|sum|sum_abs +a_1@PERMANENT|2001-01-01 00:00:00|2001-04-01 00:00:00|1||30000|0|100|100|0|100|100|0|0|0|3000000|3000000 +a_1@PERMANENT|2001-01-01 00:00:00|2001-04-01 00:00:00|2||84000|0|100|100|0|100|100|0|0|0|8400000|8400000 +a_1@PERMANENT|2001-01-01 00:00:00|2001-04-01 00:00:00|3||366000|0|100|100|0|100|100|0|0|0|36600000|36600000 +a_2@PERMANENT|2001-04-01 00:00:00|2001-07-01 00:00:00|1||30000|0|200|200|0|200|200|0|0|0|6000000|6000000 +a_2@PERMANENT|2001-04-01 00:00:00|2001-07-01 00:00:00|2||84000|0|200|200|0|200|200|0|0|0|16800000|16800000 +a_2@PERMANENT|2001-04-01 00:00:00|2001-07-01 00:00:00|3||366000|0|200|200|0|200|200|0|0|0|73200000|73200000 +a_3@PERMANENT|2001-07-01 00:00:00|2001-10-01 00:00:00|1||30000|0|300|300|0|300|300|0|0|0|9000000|9000000 +a_3@PERMANENT|2001-07-01 00:00:00|2001-10-01 00:00:00|2||84000|0|300|300|0|300|300|0|0|0|25200000|25200000 +a_3@PERMANENT|2001-07-01 00:00:00|2001-10-01 00:00:00|3||366000|0|300|300|0|300|300|0|0|0|109800000|109800000 +a_4@PERMANENT|2001-10-01 00:00:00|2002-01-01 00:00:00|1||30000|0|400|400|0|400|400|0|0|0|12000000|12000000 +a_4@PERMANENT|2001-10-01 00:00:00|2002-01-01 00:00:00|2||84000|0|400|400|0|400|400|0|0|0|33600000|33600000 +a_4@PERMANENT|2001-10-01 00:00:00|2002-01-01 00:00:00|3||366000|0|400|400|0|400|400|0|0|0|146400000|146400000 """ for ref, res in zip( @@ -229,19 +229,19 @@ def test_with_zones_parallel(self): self.runModule("g.region", res=1) self.assertModule(t_rast_univar_zones) - univar_text = """id|start|end|zone|mean|min|max|range|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|cells|n -a_1@PERMANENT|2001-01-01 00:00:00|2001-04-01 00:00:00|1|100|100|100|0|100|0|0|0|3000000|0|30000|30000 -a_1@PERMANENT|2001-01-01 00:00:00|2001-04-01 00:00:00|2|100|100|100|0|100|0|0|0|8400000|0|84000|84000 -a_1@PERMANENT|2001-01-01 00:00:00|2001-04-01 00:00:00|3|100|100|100|0|100|0|0|0|36600000|0|366000|366000 -a_2@PERMANENT|2001-04-01 00:00:00|2001-07-01 00:00:00|1|200|200|200|0|200|0|0|0|6000000|0|30000|30000 -a_2@PERMANENT|2001-04-01 00:00:00|2001-07-01 00:00:00|2|200|200|200|0|200|0|0|0|16800000|0|84000|84000 -a_2@PERMANENT|2001-04-01 00:00:00|2001-07-01 00:00:00|3|200|200|200|0|200|0|0|0|73200000|0|366000|366000 -a_3@PERMANENT|2001-07-01 00:00:00|2001-10-01 00:00:00|1|300|300|300|0|300|0|0|0|9000000|0|30000|30000 -a_3@PERMANENT|2001-07-01 00:00:00|2001-10-01 00:00:00|2|300|300|300|0|300|0|0|0|25200000|0|84000|84000 -a_3@PERMANENT|2001-07-01 00:00:00|2001-10-01 00:00:00|3|300|300|300|0|300|0|0|0|109800000|0|366000|366000 -a_4@PERMANENT|2001-10-01 00:00:00|2002-01-01 00:00:00|1|400|400|400|0|400|0|0|0|12000000|0|30000|30000 -a_4@PERMANENT|2001-10-01 00:00:00|2002-01-01 00:00:00|2|400|400|400|0|400|0|0|0|33600000|0|84000|84000 -a_4@PERMANENT|2001-10-01 00:00:00|2002-01-01 00:00:00|3|400|400|400|0|400|0|0|0|146400000|0|366000|366000 + univar_text = """id|start|end|zone|label|non_null_cells|null_cells|min|max|range|mean|mean_of_abs|stddev|variance|coeff_var|sum|sum_abs +a_1@PERMANENT|2001-01-01 00:00:00|2001-04-01 00:00:00|1||30000|0|100|100|0|100|100|0|0|0|3000000|3000000 +a_1@PERMANENT|2001-01-01 00:00:00|2001-04-01 00:00:00|2||84000|0|100|100|0|100|100|0|0|0|8400000|8400000 +a_1@PERMANENT|2001-01-01 00:00:00|2001-04-01 00:00:00|3||366000|0|100|100|0|100|100|0|0|0|36600000|36600000 +a_2@PERMANENT|2001-04-01 00:00:00|2001-07-01 00:00:00|1||30000|0|200|200|0|200|200|0|0|0|6000000|6000000 +a_2@PERMANENT|2001-04-01 00:00:00|2001-07-01 00:00:00|2||84000|0|200|200|0|200|200|0|0|0|16800000|16800000 +a_2@PERMANENT|2001-04-01 00:00:00|2001-07-01 00:00:00|3||366000|0|200|200|0|200|200|0|0|0|73200000|73200000 +a_3@PERMANENT|2001-07-01 00:00:00|2001-10-01 00:00:00|1||30000|0|300|300|0|300|300|0|0|0|9000000|9000000 +a_3@PERMANENT|2001-07-01 00:00:00|2001-10-01 00:00:00|2||84000|0|300|300|0|300|300|0|0|0|25200000|25200000 +a_3@PERMANENT|2001-07-01 00:00:00|2001-10-01 00:00:00|3||366000|0|300|300|0|300|300|0|0|0|109800000|109800000 +a_4@PERMANENT|2001-10-01 00:00:00|2002-01-01 00:00:00|1||30000|0|400|400|0|400|400|0|0|0|12000000|12000000 +a_4@PERMANENT|2001-10-01 00:00:00|2002-01-01 00:00:00|2||84000|0|400|400|0|400|400|0|0|0|33600000|33600000 +a_4@PERMANENT|2001-10-01 00:00:00|2002-01-01 00:00:00|3||366000|0|400|400|0|400|400|0|0|0|146400000|146400000 """ for ref, res in zip( From 9973b4a40b37c9cdbe3c5216aaddfbd2a7613a9f Mon Sep 17 00:00:00 2001 From: Anna Petrasova Date: Wed, 17 Jun 2026 22:51:00 -0400 Subject: [PATCH 4/4] Unrelated fix in manual page --- temporal/t.rast.univar/t.rast.univar.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/temporal/t.rast.univar/t.rast.univar.md b/temporal/t.rast.univar/t.rast.univar.md index e1d10114585..e46b74eb2eb 100644 --- a/temporal/t.rast.univar/t.rast.univar.md +++ b/temporal/t.rast.univar/t.rast.univar.md @@ -139,7 +139,7 @@ t.rast.univar -e input=nc_lst_daily format=json ## SEE ALSO -*[t.create](t.create.md), [t.info](t.info.md) [t.create](r.univar.md),* +*[t.create](t.create.md), [t.info](t.info.md) [r.univar](r.univar.md),* ## AUTHOR