From 57c239174dead0367db11e8f5d7c24ccae15dcf7 Mon Sep 17 00:00:00 2001
From: Impact <pascal.mouquet@ird.fr>
Date: Mon, 6 May 2019 10:52:40 +0400
Subject: [PATCH] add time duration info to time_series

---
 sen2chain/time_series.py | 30 +++++++++++++++++++-----------
 1 file changed, 19 insertions(+), 11 deletions(-)

diff --git a/sen2chain/time_series.py b/sen2chain/time_series.py
index d002bed..63358d6 100644
--- a/sen2chain/time_series.py
+++ b/sen2chain/time_series.py
@@ -24,6 +24,8 @@ from typing import Sequence, List, Dict, Union
 import matplotlib.pyplot as plt
 import numpy as np
 import math
+from datetime import timedelta
+import time
 
 from .config import Config
 from .tiles import Tile, ProductsList
@@ -154,17 +156,20 @@ class TimeSeries:
         return stats
 
     def _get_stats(self) -> None:
+        start = time.time()
         """Compute stats in polygons."""
         with fiona.open(str(self._vectors_file), "r") as vectors:
             features = {feat["id"]: feat for feat in vectors}
-            for indice in self._indices_list:
-                logger.info("computing {}".format(indice))
+            for index2, indice in enumerate(self._indices_list):
+                logger.info("computing {}/{}: {}".format(index2 + 1, len(self._indices_list), indice))
                 rows_list = []
 
-                for tile, fid_list in self._tiles_geoms.items():
+                #~ for tile, fid_list in self._tiles_geoms.items():
+                for index3, tile in enumerate(self._tiles_geoms):
+                    fid_list = self._tiles_geoms[tile]
                     tile_obj = Tile(tile)
 
-                    logger.info("Tile: {}".format(tile))
+                    logger.info("Tile {}/{}: {}".format(index3 + 1, len(self._tiles_geoms), tile))
 
                     if TimeSeries._is_indice_in_tile(indice, tile_obj):
                         tile_indice_path = tile_obj.paths["indices"][indice.lower()]
@@ -172,12 +177,15 @@ class TimeSeries:
                                                                self._date_min, self._date_max,
                                                                self._cover_min, self._cover_max)
 
-                        for prod in products:
+                        for index1, prod in enumerate(products):
                             prod_path = tile_indice_path / prod.identifier[:(-12 - len(indice))] / prod.identifier
-
-                            for fid in fid_list:
+                            logger.info("Product {}/{}: {}".format(index1 + 1, len(products), prod.identifier))
+                            logger.info("{} features".format(len(fid_list)))
+                            
+                            for index, fid in enumerate(fid_list):
                                 df_dict = OrderedDict()
                                 df_dict["fid"] = fid
+                                
                                 # feat_properties = features[fid]["properties"]
                                 # if feat_properties:
                                     # df_dict.update(feat_properties)
@@ -194,6 +202,8 @@ class TimeSeries:
                                 rows_list.append(df_dict)
                 if rows_list:
                     self._df_dicts[indice] = TimeSeries._list_to_df(rows_list)
+        end = time.time()
+        logger.info("Execution time: {}".format(timedelta(seconds = end - start)))
 
     @staticmethod
     def _list_to_df(rows_list: List[Dict]) -> pd.DataFrame:
@@ -310,10 +320,8 @@ class TimeSeries:
         out_path_folder.mkdir(parents=True, exist_ok=True)
 
         for df_name, df in self.data.items():
-            if self._field_names:
-                fid_list = dict(zip(df.fid, df.name))
-            else:
-                fid_list = dict(zip(df.fid, df.fid))
+            fid_list = dict(zip(df.fid, df[self._key]))
+            if not self._field_names:
                 fid_list = fid_list.fromkeys(fid_list, '')
             
             cmap_dict = {'NDVI' : 'RdYlGn',
-- 
GitLab