From d122546171a128377a0298a343c465a20b8702a8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?K=C3=BChle=2C=20Laura=20Christine=20=28lakue103=29?=
 <laura.kuehle@uni-duesseldorf.de>
Date: Wed, 19 Jan 2022 17:35:14 +0100
Subject: [PATCH] Fixed QObject error by using an non-interactive backend for
 matplotlib.

---
 ANN_Data_Generator.py     |  6 +++---
 ANN_Training.py           | 17 ++++++++++++-----
 DG_Approximation.py       |  6 ++++--
 Plotting.py               |  4 +++-
 Snakefile                 |  8 ++++----
 Troubled_Cell_Detector.py |  4 +++-
 Update_Scheme.py          |  5 +++--
 7 files changed, 32 insertions(+), 18 deletions(-)

diff --git a/ANN_Data_Generator.py b/ANN_Data_Generator.py
index 1c80916..1a799fb 100644
--- a/ANN_Data_Generator.py
+++ b/ANN_Data_Generator.py
@@ -4,7 +4,7 @@
 
 """
 import os
-import timeit
+import time
 import numpy as np
 
 import DG_Approximation
@@ -89,13 +89,13 @@ class TrainingDataGenerator(object):
             Dictionary containing input (normalized and non-normalized) and output data.
 
         """
-        tic = timeit.default_timer()
+        tic = time.perf_counter()
         print('Calculating training data...\n')
         data_dict = self._calculate_data_set(num_samples)
         print('Finished calculating training data!')
 
         self._save_data(data_dict)
-        toc = timeit.default_timer()
+        toc = time.perf_counter()
         print('Total runtime:', toc-tic)
         return data_dict
 
diff --git a/ANN_Training.py b/ANN_Training.py
index cd09c15..79131b8 100644
--- a/ANN_Training.py
+++ b/ANN_Training.py
@@ -2,17 +2,23 @@
 """
 @author: Laura C. Kühle, Soraya Terrab (sorayaterrab)
 
+Code-Style: E226, W503
+Docstring-Style: D200, D400
+
 TODO: Test new ANN set-up with Soraya
-TODO: Integrate Main.py into Snakefile
+TODO: Integrate Main.py into Snakefile -> Done
+TODO: Generalize output for approximate_solution rule -> Done
 TODO: Remove object set-up (for more flexibility)
 TODO: Add documentation
-TODO: Improve log output (+ switch log: to correct pos after params:)
+TODO: Improve log output
+TODO: Fix logs in Snakefile -> Done
 TODO: Throw exception for error due to missing classes
-TODO: Fix QObject timer error
+TODO: Fix QObject timer error -> Done
 
 """
 import numpy as np
-import matplotlib.pyplot as plt
+import matplotlib
+from matplotlib import pyplot as plt
 import os
 import torch
 from torch.utils.data import TensorDataset, DataLoader, random_split
@@ -22,6 +28,7 @@ from sklearn.metrics import accuracy_score, precision_recall_fscore_support, roc
 import ANN_Model
 from Plotting import plot_classification_accuracy, plot_boxplot
 
+matplotlib.use('Agg')
 
 class ModelTrainer(object):
     def __init__(self, config):
@@ -121,7 +128,7 @@ class ModelTrainer(object):
         # Saving Model
         name = self._model_name
 
-        # Set paths for plot files if not existing already
+        # Set paths for files if not existing already
         model_dir = self._dir + '/trained models'
         if not os.path.exists(model_dir):
             os.makedirs(model_dir)
diff --git a/DG_Approximation.py b/DG_Approximation.py
index 6336f78..a4114a3 100644
--- a/DG_Approximation.py
+++ b/DG_Approximation.py
@@ -27,7 +27,8 @@ import os
 import numpy as np
 from sympy import Symbol
 import math
-import matplotlib.pyplot as plt
+import matplotlib
+from matplotlib import pyplot as plt
 
 import Troubled_Cell_Detector
 import Initial_Condition
@@ -36,6 +37,7 @@ import Quadrature
 import Update_Scheme
 from Basis_Function import OrthonormalLegendre
 
+matplotlib.use('Agg')
 x = Symbol('x')
 
 
@@ -298,7 +300,7 @@ class DGScheme(object):
         output_matrix[0] = output_matrix[self._num_grid_cells]
         output_matrix.append(output_matrix[1])
 
-        print(np.array(output_matrix).shape)
+        # print(np.array(output_matrix).shape)
         return np.transpose(np.array(output_matrix))
 
     def build_training_data(self, adjustment, stencil_length, initial_condition=None):
diff --git a/Plotting.py b/Plotting.py
index 16019dc..ff5e608 100644
--- a/Plotting.py
+++ b/Plotting.py
@@ -8,11 +8,13 @@ TODO: Adjust documentation for plot_classification_accuracy()
 
 """
 import numpy as np
-import matplotlib.pyplot as plt
+import matplotlib
+from matplotlib import pyplot as plt
 import seaborn as sns
 from sympy import Symbol
 
 
+matplotlib.use('Agg')
 x = Symbol('x')
 z = Symbol('z')
 sns.set()
diff --git a/Snakefile b/Snakefile
index ae46980..a170be8 100644
--- a/Snakefile
+++ b/Snakefile
@@ -1,5 +1,5 @@
 import sys
-import timeit
+import time
 
 import ANN_Data_Generator, Initial_Condition, ANN_Training
 from ANN_Training import evaluate_models
@@ -37,7 +37,7 @@ rule approximate_solution:
             sys.stdout = logfile
             sys.stderr = logfile
 
-            tic = timeit.default_timer()
+            tic = time.perf_counter()
 
             print(params.dg_params)
             dg_scheme = DGScheme(plot_dir=params.plot_dir, **params.dg_params)
@@ -45,8 +45,8 @@ rule approximate_solution:
             dg_scheme.approximate()
             dg_scheme.save_plots(params.plot_name)
 
-            toc = timeit.default_timer()
-            print('Time:',toc-tic)
+            toc = time.perf_counter()
+            print(f'Time: {toc - tic:0.4f}s')
 
 rule test_model:
     input:
diff --git a/Troubled_Cell_Detector.py b/Troubled_Cell_Detector.py
index ef91fcc..3028247 100644
--- a/Troubled_Cell_Detector.py
+++ b/Troubled_Cell_Detector.py
@@ -9,7 +9,8 @@ TODO: Load ANN state and config in reset
 
 """
 import numpy as np
-import matplotlib.pyplot as plt
+import matplotlib
+from matplotlib import pyplot as plt
 import seaborn as sns
 import torch
 from sympy import Symbol
@@ -18,6 +19,7 @@ import ANN_Model
 from Plotting import plot_solution_and_approx, plot_semilog_error, plot_error, plot_shock_tube, \
     plot_details, calculate_approximate_solution, calculate_exact_solution
 
+matplotlib.use('Agg')
 x = Symbol('x')
 z = Symbol('z')
 
diff --git a/Update_Scheme.py b/Update_Scheme.py
index f5dc8d8..5d91109 100644
--- a/Update_Scheme.py
+++ b/Update_Scheme.py
@@ -2,12 +2,13 @@
 """
 @author: Laura C. Kühle
 
-TODO: Discuss descriptions (matrices, cfl number, right-hand side, etc.)
+TODO: Discuss descriptions (matrices, cfl number, right-hand side, limiting slope, basis, wavelet,
+    etc.)
 TODO: Discuss referencing info on SSPRK3
 
 """
 import numpy as np
-import timeit
+import time
 
 
 class UpdateScheme(object):
-- 
GitLab