From 18818fb7cf544188c6a96b0fc83745c3e8f59339 Mon Sep 17 00:00:00 2001
From: David Robert Verelst <dave@dtu.dk>
Date: Thu, 31 Aug 2017 15:57:52 +0200
Subject: [PATCH] prepost.GenerateDLCs: some fail safe warnings, cosmetics

---
 wetb/prepost/GenerateDLCs.py | 77 +++++++++++++-----------------------
 1 file changed, 27 insertions(+), 50 deletions(-)

diff --git a/wetb/prepost/GenerateDLCs.py b/wetb/prepost/GenerateDLCs.py
index f1cf530..0a08058 100644
--- a/wetb/prepost/GenerateDLCs.py
+++ b/wetb/prepost/GenerateDLCs.py
@@ -79,32 +79,31 @@ class GeneralDLC(object):
                 cases_len.append(len(v))
         cases_index = multi_for(list(map(range, cases_len)))
 
-#        for irow, row in enumerate(cases_index):
-#            counter = floor(irow/len(variables['[wsp]']))+1
-#            for icol, col in enumerate(row):
-#                if variables_order[icol] == '[seed]':
-#                    value = '%4.4i' % (1000*counter + row[variables_order.index('[wsp]')]+1)
-#                elif variables_order[icol] == '[wave_seed]':  #shfe: wave_seed
-#                    value = '%4.4i' % (1000*counter + row[variables_order.index('[wsp]')]+1)
-#                else:
-#                    value = variables[variables_order[icol]][col]
-#                    if not isinstance(value, float) and not isinstance(value, int):
-#                        value = str(value)
-#                dlc[variables_order[icol]].append(value)
+        if '[wsp]' in variables_order:
+            i_wsp = variables_order.index('[wsp]')
+            len_wsp = len(variables['[wsp]'])
+        else:
+            raise ValueError('Missing VARIABLE (V) [wsp] tag!')
+        if '[seed]' in variables_order:
+            i_seed = variables_order.index('[seed]')
+        if '[wave_seed]' in variables_order:
+            i_wave_seed = variables_order.index('[wave_seed]')
+        if i_seed > i_wsp:
+            raise ValueError('column [seed] should come BEFORE [wsp] !!')
+
         for irow, row in enumerate(cases_index):
-            counter = floor(irow/len(variables['[wsp]']))+1
             for icol, col in enumerate(row):
                 if variables_order[icol] == '[seed]':
-                    value = '%4.4i' % (1000*counter + row[variables_order.index('[wsp]')]+1)
+                    counter = floor(irow/len_wsp) + 1
+                    value = '%4.4i' % (1000*counter + row[i_wsp] + 1)
                 elif variables_order[icol] == '[wave_seed]':
-                    value = '%4.4i' % ( 100*(row[variables_order.index('[wsp]')]+1) + \
-                                        row[variables_order.index('[wave_seed]')]+1)
-
+                    value = '%4.4i' % (100*(row[i_wsp]+1) + row[i_wave_seed] + 1)
+#                    value = '%4.4i' % (1000*counter + row[i_wsp] + 101)
 #                    value = '%4.4i' % (irow+1)
-#                    value = '%4.4i' % (10000*(row[variables_order.index('[wave_dir]')]+1) + \
-#                                        1000*(row[variables_order.index('[Hs]')]+1) + \
-#                                        10*(row[variables_order.index('[Tp]')]+1) +\
-#                                        row[variables_order.index('[seed]')]+1)
+#                    value = '%4.4i' % (10000*(row[i_wave_dir])] + 1) + \
+#                                        1000*(row[i_Hs])] + 1) + \
+#                                        10*(row[i_Tp])] + 1) +\
+#                                        row[i_seed])] + 1)
 
                 else:
                     value = variables[variables_order[icol]][col]
@@ -153,8 +152,8 @@ class GeneralDLC(object):
         # specify the precision of the tag as used in the formulas
         # this does NOT affect the precision of the tag itself, only when used
         # in a formula based tag.
-        formats = {'[wsp]':'%2.2i', '[gridgustdelay]':'%2.2i',
-                   '[wdir]':'%3.3i', '[G_phi0]':'%3.3i',
+        formats = {'[wsp]':'%02i', '[gridgustdelay]':'%02i',
+                   '[wdir]':'%03i', '[G_phi0]':'%03i',
                    '[sign]':'%s',
                    '[Hs]':'%05.02f', '[Tp]':'%05.02f'}
 
@@ -168,7 +167,7 @@ class GeneralDLC(object):
                             try:
                                 fmt = formats[key]
                             except KeyError:
-                                fmt = '%4.4i'
+                                fmt = '%04i'
                             try:
                                 value = float(dlc[key][i])
                             except ValueError:
@@ -209,14 +208,15 @@ class GenerateDLCCases(GeneralDLC):
 
     """
 
-    def execute(self, filename='DLCs.xlsx', folder=''):
+    def execute(self, filename='DLCs.xlsx', folder='', isheets=None):
 
         book = xlrd.open_workbook(filename)
 
-        nsheets = book.nsheets
+        if isheets is None:
+            isheets = list(range(1, book.nsheets))
 
         # Loop through all the sheets. Each sheet correspond to a DLC.
-        for isheet in range(1, nsheets):
+        for isheet in isheets:
 
             # Read all the initialization constants and functions in the
             # first sheet
@@ -277,29 +277,6 @@ class GenerateDLCCases(GeneralDLC):
             df.to_excel(os.path.join(folder, sheet.name+'.xlsx'), index=False)
 
 
-class RunTest():
-    """
-    Class to perform basic testing of the GenerateDLCCases class. It writes the
-    spreadsheets and compare them with a reference set.
-    """
-    def execute(self):
-
-        from pandas.util.testing import assert_frame_equal
-        a = GenerateDLCCases()
-        a.execute()
-
-        book = xlrd.open_workbook('DLCs.xlsx')
-        nsheets = book.nsheets
-        for isheet in range(1, nsheets):
-            sheet = book.sheets()[isheet]
-            print('Sheet #%i' % isheet, sheet.name)
-            book1 = pd.read_excel('Reference/'+sheet.name+'.xlsx')
-
-            book2 = pd.read_excel(sheet.name+'.xls')
-
-            book2 = book2[book1.columns]
-            assert_frame_equal(book1, book2, check_dtype=False)
-
 if __name__ == '__main__':
 
     parser = ArgumentParser(description = "generator of DLB spreadsheets")
-- 
GitLab