Repository: CURENT/andes (language: python)

Issue:
PSSE Parser Modification
Modified PSSE parser files for ``ESAC1A`` and ``IEEEVC``.


Discussion / hints:

Fix patch:
diff --git a/TODO.md b/TODO.md
index a7f2134ab..bd6f73cf3 100644
--- a/TODO.md
+++ b/TODO.md
@@ -5,15 +5,16 @@
 * Separate array-enabled parameters from NumParam into
   `BaseConvParam`, which implements `iconvert` and `oconvert`,
   and then `ListParam`
-* Improve the robustness of accessing the fields of `pycode` by properly
-  handling `KeyError`s.
-* Numba code generation for all models. Add a function for triggering
-  all the JIT compilation before simulation.
+[x] Improve the robustness of accessing the fields of `pycode` by properly
+    handling `KeyError`s.
+[x] Numba code generation for all models. Add a function for triggering
+    all the JIT compilation before simulation. `andes prep -c` does it.
 * Unit Model Test framework.
 
 # Later Versions
 
 * Allow selection of output variables
+* Timeseries data input support. Reading data from file.
 * `PQTS` model for PQ with time-series.
 * Generalize two-terminal and multi-terminal devices
 * Allow for semi-analytical derivation of equations
diff --git a/andes/cases/ieee14/ieee14_ieeevc.dyr b/andes/cases/ieee14/ieee14_ieeevc.dyr
new file mode 100644
index 000000000..02fb3bc92
--- /dev/null
+++ b/andes/cases/ieee14/ieee14_ieeevc.dyr
@@ -0,0 +1,71 @@
+      1 'GENROU' 1     6.5000      0.60000E-01  0.20000      0.50000E-01
+          4.0000       0.0000       1.8000       1.7500      0.60000
+         0.80000      0.23000      0.15000      0.90000E-01  0.38000      /
+      1 'ST2CUT' 1          1            0            0            0
+          0.0000       0.0000       0.0000       0.0000       30.000
+          30.000      0.23000      0.25000E-01  0.23000      0.25000E-01
+          0.0000       0.0000      0.60000E-01 -0.60000E-01   0.0000
+          0.0000      /
+      1 'ESST3A' 1    0.20000E-01  0.20000     -0.20000       8.0000
+          1.0000       5.0000       20.000       0.0000       99.000
+         -99.000       1.0000       3.6700      0.43500       5.4800
+         0.10000E-01  0.98000E-02   3.8600       3.3300      0.40000
+          99.000       0.0000    /
+      8 'IEEEVC' 1     0.0000      0.60000E-01  /
+      1 'TGOV1'  1    0.50000E-01  0.50000E-01   1.0500      0.30000
+          1.0000       2.1000       0.0000      /
+      2 'GENROU' 1     6.5000      0.60000E-01  0.20000      0.50000E-01
+          6.5000       0.0000       1.8000       1.7500      0.60000
+         0.80000      0.28000      0.15000      0.90000E-01  0.38000      /
+      2 'ST2CUT' 1          1            0            0            0
+          10.000       0.0000       0.0000       0.0000       3.0000
+          3.0000      0.15000      0.50000E-01  0.15000      0.50000E-01
+         0.15000      0.50000E-01  0.50000E-01 -0.50000E-01   0.0000
+          0.0000      /
+      2 'EXST1'  1    0.20000E-01   99.000      -99.000       0.0000
+         0.20000E-01   50.000      0.20000E-01   9999.0      -9999.0
+          0.0000      0.10000E-01   1.0000    /
+      2 'IEEEG1' 1          0           0        20.000      0.10000
+          0.0000      0.20000       1.0000      -1.0000      0.95000
+          0.0000      0.10000       0.0000       0.0000       0.0000
+          0.0000       0.0000       0.0000      0.30000       0.0000
+          8.7200      0.70000       0.0000    /
+      3 'GENROU' 1     6.5000      0.60000E-01  0.20000      0.50000E-01
+          5.0000       0.0000       1.8000       1.7500      0.60000
+         0.80000      0.34000      0.15000      0.90000E-01  0.38000      /
+      3 'IEEEST' 1          3            0       0.0000       0.0000
+          0.0000       0.0000       0.0000       0.0000       0.0000
+          0.0000       0.0000      0.75000       1.0000       4.2000
+         -2.0000      0.10000     -0.10000       0.0000       0.0000      /
+      3 'ESST3A' 1    0.20000E-01  0.20000     -0.20000       8.0000
+          1.0000       5.0000       20.000       0.0000       99.000
+         -99.000       1.0000       3.6700      0.43500       5.4800
+         0.10000E-01  0.98000E-02   3.8600       3.3300      0.40000
+          99.000       0.0000    /
+      3 'IEEEG1' 1          0           0        20.000      0.10000
+          0.0000      0.20000       1.0000      -1.0000      0.95000
+          0.0000      0.10000       0.0000       0.0000       0.0000
+          0.0000       0.0000       0.0000      0.30000       0.0000
+          8.7200      0.70000       0.0000    /
+      6 'GENROU' 1     6.5000      0.60000E-01  0.20000      0.50000E-01
+          5.0000       0.0000       1.8000       1.7500      0.60000
+         0.80000      0.28000      0.15000      0.90000E-01  0.38000      /
+      6 'ESST3A' 1    0.20000E-01  0.20000     -0.20000       8.0000
+          1.0000       5.0000       20.000       0.0000       99.000
+         -99.000       1.0000       3.6700      0.43500       5.4800
+         0.10000E-01  0.98000E-02   3.8600       3.3300      0.40000
+          99.000       0.0000    /
+      6 'TGOV1'  1    0.50000E-01  0.50000E-01   1.0500      0.30000
+          1.0000       2.1000       0.0000      /
+      8 'GENROU' 1     6.5000      0.60000E-01  0.20000      0.50000E-01
+          5.0000       0.0000       1.8000       1.7500      0.60000
+         0.80000      0.34000      0.15000      0.90000E-01  0.38000      /
+      8 'ESST3A' 1    0.20000E-01  0.20000     -0.20000       8.0000
+          1.0000       5.0000       20.000       0.0000       99.000
+         -99.000       1.0000       3.6700      0.43500       5.4800
+         0.10000E-01  0.98000E-02   3.8600       3.3300      0.40000
+          99.000       0.0000    /
+      8 'TGOV1'  1    0.50000E-01  0.50000E-01   1.0500      0.30000
+          1.0000       2.1000       0.0000      /
+  Line  'Toggler'  Line_1  1.0 /
+  Line  'Toggler'  Line_1  1.1 /
\ No newline at end of file
diff --git a/andes/cases/ieee14/ieee14_ieeevc.raw b/andes/cases/ieee14/ieee14_ieeevc.raw
new file mode 100644
index 000000000..8f2850af2
--- /dev/null
+++ b/andes/cases/ieee14/ieee14_ieeevc.raw
@@ -0,0 +1,92 @@
+0,   100.00,  32, 0, 1, 60.00     / PSS(R)E 32 RAW created by rawd32  SUN, MAY 17 2020  20:38
+ IEEE 14 BUS TEST CASE
+ 03/06/14 CONTO           100.0  1962 W
+     1,'BUS1        ',  69.0000,3,   1,   1,   1,1.03000,   0.0000
+     2,'BUS2        ',  69.0000,2,   1,   1,   1,1.01970,  -1.6032
+     3,'BUS3        ',  69.0000,2,   1,   1,   1,1.00042,  -3.4433
+     4,'BUS4        ',  69.0000,1,   1,   1,   1,0.99858,  -4.2812
+     5,'BUS5        ',  69.0000,1,   1,   1,   1,1.00443,  -3.6850
+     6,'BUS6        ', 138.0000,2,   2,   2,   2,0.99871,  -6.3024
+     7,'BUS7        ', 138.0000,1,   2,   2,   2,1.00682,  -4.8292
+     8,'BUS8        ',  69.0000,2,   2,   2,   2,1.01895,  -1.3945
+     9,'BUS9        ', 138.0000,1,   2,   2,   2,1.00193,  -7.3053
+    10,'BUS10       ', 138.0000,1,   2,   2,   2,0.99351,  -7.4600
+    11,'BUS11       ', 138.0000,1,   2,   2,   2,0.99245,  -7.0444
+    12,'BUS12       ', 138.0000,1,   2,   2,   2,0.98639,  -7.3874
+    13,'BUS13       ', 138.0000,1,   2,   2,   2,0.98403,  -7.6654
+    14,'BUS14       ', 138.0000,1,   2,   2,   2,0.99063,  -9.5636
+ 0 /End of Bus data, Begin Load data
+     2,'1 ',1,   1,   1,    21.700,    12.700,     0.000,     0.000,     0.000,     0.000,   1,1
+     3,'1 ',1,   1,   1,    50.000,    25.000,     0.000,     0.000,     0.000,     0.000,   1,1
+     4,'1 ',1,   1,   1,    47.800,    10.000,     0.000,     0.000,     0.000,     0.000,   1,1
+     5,'1 ',1,   1,   1,     7.600,     1.600,     0.000,     0.000,     0.000,     0.000,   1,1
+     6,'1 ',1,   2,   2,    15.000,     7.500,     0.000,     0.000,     0.000,     0.000,   2,1
+     9,'1 ',1,   2,   2,    29.500,    16.600,     0.000,     0.000,     0.000,     0.000,   2,1
+    10,'1 ',1,   2,   2,     9.000,     5.800,     0.000,     0.000,     0.000,     0.000,   2,1
+    11,'1 ',1,   2,   2,     3.500,     1.800,     0.000,     0.000,     0.000,     0.000,   2,1
+    12,'1 ',1,   2,   2,     6.100,     1.600,     0.000,     0.000,     0.000,     0.000,   2,1
+    13,'1 ',1,   2,   2,    13.500,     5.800,     0.000,     0.000,     0.000,     0.000,   2,1
+    14,'1 ',1,   2,   2,    20.000,     7.000,     0.000,     0.000,     0.000,     0.000,   2,1
+ 0 /End of Load data, Begin Fixed shunt data
+ 0 /End of Fixed shunt data, Begin Generator data
+     1,'1 ',    81.442,     1.962,   100.000,   -50.000,1.03000,     0,   100.000, 0.00000E+0, 2.30000E-1, 0.00000E+0, 0.00000E+0,1.00000,1,  100.0,   200.000,    50.000,   1,1.0000
+     2,'1 ',    40.000,    15.000,    15.000,   -40.000,1.03000,     0,   100.000, 0.00000E+0, 1.30000E-1, 0.00000E+0, 0.00000E+0,1.00000,1,  100.0,    50.000,    10.000,   1,1.0000
+     3,'1 ',    40.000,    15.000,    15.000,   -10.000,1.01000,     0,   100.000, 0.00000E+0, 1.30000E-1, 0.00000E+0, 0.00000E+0,1.00000,1,  100.0,    50.000,    10.000,   1,1.0000
+     6,'1 ',    30.000,    10.000,    10.000,    -6.000,1.03000,     0,   100.000, 0.00000E+0, 1.20000E-1, 0.00000E+0, 0.00000E+0,1.00000,1,  100.0,    50.000,    10.000,   1,1.0000
+     8,'1 ',    35.000,    10.000,    10.000,    -6.000,1.03000,     0,   100.000, 0.00000E+0, 1.20000E-1, 0.00000E+0, 0.00000E+0,1.00000,1,  100.0,    50.000,    10.000,   1,1.0000
+ 0 /End of Generator data, Begin Branch data
+     1,      2,'1 ', 1.93800E-2, 5.91700E-2,   0.05280,  100.00,  100.00,    0.00,  0.00000,  0.00000,  0.00000,  0.00000,1,1,   0.00,   1,1.0000
+     1,      5,'1 ', 5.40300E-2, 2.23040E-1,   0.04920,  100.00,  100.00,    0.00,  0.00000,  0.00000,  0.00000,  0.00000,1,1,   0.00,   1,1.0000
+     2,      3,'1 ', 4.69900E-2, 1.97970E-1,   0.04380,  100.00,  100.00,    0.00,  0.00000,  0.00000,  0.00000,  0.00000,1,1,   0.00,   1,1.0000
+     2,      4,'1 ', 5.81100E-2, 1.76320E-1,   0.03400,  100.00,  100.00,    0.00,  0.00000,  0.00000,  0.00000,  0.00000,1,1,   0.00,   1,1.0000
+     2,      5,'1 ', 5.69500E-2, 1.73880E-1,   0.03460,  100.00,  100.00,    0.00,  0.00000,  0.00000,  0.00000,  0.00000,1,1,   0.00,   1,1.0000
+     3,      4,'1 ', 6.70100E-2, 1.71030E-1,   0.01280,  100.00,  100.00,    0.00,  0.00000,  0.00000,  0.00000,  0.00000,1,1,   0.00,   1,1.0000
+     4,      5,'1 ', 1.33500E-2, 4.21100E-2,   0.00000,  100.00,  100.00,    0.00,  0.00000,  0.00000,  0.00000,  0.00000,1,1,   0.00,   1,1.0000
+     6,     11,'1 ', 9.49800E-2, 1.98900E-1,   0.00000,  100.00,  100.00,    0.00,  0.00000,  0.00000,  0.00000,  0.00000,1,1,   0.00,   1,1.0000
+     6,     12,'1 ', 1.22910E-1, 2.55810E-1,   0.00000,  100.00,  100.00,    0.00,  0.00000,  0.00000,  0.00000,  0.00000,1,1,   0.00,   1,1.0000
+     6,     13,'1 ', 6.61500E-2, 1.30270E-1,   0.00000,  100.00,  100.00,    0.00,  0.00000,  0.00000,  0.00000,  0.00000,1,1,   0.00,   1,1.0000
+     7,      9,'1 ',-0.00000E+0, 1.10010E-1,   0.00000,  100.00,  100.00,    0.00,  0.00000,  0.00000,  0.00000,  0.00000,1,1,   0.00,   1,1.0000
+     9,     10,'1 ', 3.18100E-2, 8.45000E-2,   0.00000,  100.00,  100.00,    0.00,  0.00000,  0.00000,  0.00000,  0.00000,1,1,   0.00,   1,1.0000
+     9,     14,'1 ', 1.27110E-1, 2.70380E-1,   0.00000,  100.00,  100.00,    0.00,  0.00000,  0.00000,  0.00000,  0.00000,1,1,   0.00,   1,1.0000
+    10,     11,'1 ', 8.20500E-2, 1.92070E-1,   0.00000,  100.00,  100.00,    0.00,  0.00000,  0.00000,  0.00000,  0.00000,1,1,   0.00,   1,1.0000
+    12,     13,'1 ', 2.20920E-1, 1.99880E-1,   0.00000,  100.00,  100.00,    0.00,  0.00000,  0.00000,  0.00000,  0.00000,1,1,   0.00,   1,1.0000
+    13,     14,'1 ', 1.70930E-1, 3.48020E-1,   0.00000,  100.00,  100.00,    0.00,  0.00000,  0.00000,  0.00000,  0.00000,1,1,   0.00,   1,1.0000
+ 0 /End of Branch data, Begin Transformer data
+     4,     7,     0,'1 ',1,1,1, 0.00000E+0, 0.00000E+0,2,'                                        ',1,   1,1.0000
+ 0.00000E+0, 2.09120E-1,   100.00
+0.99677,   0.000,   0.000,    20.00,    20.00,     0.00,-1,      0, 1.10000, 0.90000, 1.10000, 0.90000,  32, 0, 0.00000, 0.00000,  0.000
+1.00000,   0.000
+     4,     9,     0,'1 ',1,1,1, 0.00000E+0, 0.00000E+0,2,'                                        ',1,   1,1.0000
+ 0.00000E+0, 5.56180E-1,   100.00
+0.99677,   0.000,   0.000,    20.00,    20.00,     0.00,-1,      0, 1.10000, 0.90000, 1.10000, 0.90000,  32, 0, 0.00000, 0.00000,  0.000
+1.00000,   0.000
+     6,     5,     0,'1 ',1,1,1, 0.00000E+0, 0.00000E+0,1,'                                        ',1,   1,1.0000
+ 0.00000E+0, 2.52020E-1,   100.00
+0.99677,   0.000,   0.000,    50.00,    50.00,     0.00,-1,      0, 1.10000, 0.90000, 1.10000, 0.90000,  32, 0, 0.00000, 0.00000,  0.000
+1.00000,   0.000
+     8,     7,     0,'1 ',1,1,1, 0.00000E+0, 0.00000E+0,1,'                                        ',1,   1,1.0000
+ 0.00000E+0, 1.76150E-1,   100.00
+0.99677,   0.000,   0.000,    50.00,    50.00,     0.00,-1,      0, 1.10000, 0.90000, 1.10000, 0.90000,  32, 0, 0.00000, 0.00000,  0.000
+1.00000,   0.000
+ 0 /End of Transformer data, Begin Area interchange data
+   1,     2,     0.000,   999.990,'AREA1       '
+   2,     0,     0.000,    10.000,'AREA2       '
+ 0 /End of Area interchange data, Begin Two-terminal dc line data
+ 0 /End of Two-terminal dc line data, Begin VSC dc line data
+ 0 /End of VSC dc line data, Begin Impedance correction table data
+ 0 /End of Impedance correction table data, Begin Multi-terminal dc line data
+ 0 /End of Multi-terminal dc line data, Begin Multi-section line data
+ 0 /End of Multi-section line data, Begin Zone data
+   1,'ZONE1       '
+   2,'ZONE2       '
+ 0 /End of Zone data, Begin Inter-area transfer data
+ 0 /End of Inter-area transfer data, Begin Owner data
+   1,'OWNER1      '
+   2,'OWNER2      '
+ 0 /End of Owner data, Begin FACTS device data
+ 0 /End of FACTS device data, Begin Switched shunt data
+     9,1,0,1,1.02500,0.96000,     0,  100.0,'            ',   19.00, 3,   5.00, 1,   4.00
+    14,1,0,1,1.02500,0.96000,     0,  100.0,'            ',   15.00, 3,   5.00
+ 0 /End of Switched shunt data, Begin GNE device data
+ 0 /End of GNE device data
+Q
diff --git a/andes/cases/ieee14/ieee14_ieeevc.xlsx b/andes/cases/ieee14/ieee14_ieeevc2.xlsx
similarity index 100%
rename from andes/cases/ieee14/ieee14_ieeevc.xlsx
rename to andes/cases/ieee14/ieee14_ieeevc2.xlsx
diff --git a/andes/core/model.py b/andes/core/model.py
index 09439b3c5..dd71e0a5b 100644
--- a/andes/core/model.py
+++ b/andes/core/model.py
@@ -627,6 +627,10 @@ def __init__(self, system=None, config=None):
         self.tex_names = OrderedDict((('dae_t', 't_{dae}'),
                                       ('sys_f', 'f_{sys}'),
                                       ('sys_mva', 'S_{b,sys}'),
+                                      ('__zeros', '0'),
+                                      ('__ones', '1'),
+                                      ('__falses', '0'),
+                                      ('__trues', '1'),
                                       ))
 
         # Model behavior flags
@@ -965,6 +969,12 @@ def refresh_inputs(self):
         for key, val in self.config.as_dict(refresh=True).items():
             self._input[key] = np.array(val)
 
+        # zeros and ones
+        self._input['__zeros'] = np.zeros(self.n)
+        self._input['__ones'] = np.ones(self.n)
+        self._input['__falses'] = np.full(self.n, False)
+        self._input['__trues'] = np.full(self.n, True)
+
         # --- below are numpy scalars ---
         # update`dae_t` and `sys_f`, and `sys_mva`
         self._input['sys_f'] = np.array(self.system.config.freq, dtype=float)
diff --git a/andes/core/symprocessor.py b/andes/core/symprocessor.py
index f741edb88..9251dddac 100644
--- a/andes/core/symprocessor.py
+++ b/andes/core/symprocessor.py
@@ -4,6 +4,7 @@
 
 import os
 import logging
+import inspect
 import pprint
 import sympy
 import numpy as np
@@ -24,6 +25,8 @@
 
 logger = logging.getLogger(__name__)
 
+select_args_add = ["__zeros", "__ones", "__falses", "__trues"]
+
 
 class SymProcessor:
     """
@@ -138,6 +141,10 @@ def generate_symbols(self):
         self.inputs_dict['dae_t'] = Symbol('dae_t')
         self.inputs_dict['sys_f'] = Symbol('sys_f')
         self.inputs_dict['sys_mva'] = Symbol('sys_mva')
+        self.inputs_dict['__zeros'] = Symbol('__zeros')
+        self.inputs_dict['__ones'] = Symbol('__ones')
+        self.inputs_dict['__falses'] = Symbol('__falses')
+        self.inputs_dict['__trues'] = Symbol('__trues')
 
         # custom functions
         self.lambdify_func[0]['Indicator'] = lambda x: x
@@ -156,6 +163,7 @@ def _check_expr_symbols(self, expr):
             if item not in self.inputs_dict.values():
                 raise ValueError(f'{self.class_name} expression "{expr}" contains unknown symbol "{item}"')
 
+        fs = sorted(fs, key=lambda s: s.name)
         return fs
 
     def generate_equations(self):
@@ -194,12 +202,20 @@ def generate_equations(self):
                             eargs.append(str(s))
 
                     elist.append(expr)
+
+            sym_args = sorted(sym_args, key=lambda s: s.name)
+            eargs.sort()
+
             if len(elist) == 0 or not any(elist):  # `any`, not `all`
                 self.calls.__dict__[ename] = None
             else:
                 self.calls.__dict__[ename] = lambdify(sym_args, tuple(elist),
                                                       modules=self.lambdify_func)
 
+                # manually append additional arguments for select.
+                if 'select' in inspect.getsource(self.calls.__dict__[ename]):
+                    eargs.extend(select_args_add)
+
         # convert to SymPy matrices
         self.f_matrix = Matrix(self.f_list)
         self.g_matrix = Matrix(self.g_list)
@@ -223,11 +239,15 @@ def generate_services(self):
             except (SympifyError, TypeError) as e:
                 logger.error(f'Error parsing equation for {instance.owner.class_name}.{name}')
                 raise e
-            self._check_expr_symbols(expr)
+
+            fs = self._check_expr_symbols(expr)
             s_syms[name] = expr
-            s_args[name] = [str(i) for i in expr.free_symbols]
+            s_args[name] = [str(i) for i in fs]
             s_calls[name] = lambdify(s_args[name], s_syms[name], modules=self.lambdify_func)
 
+            if 'select' in inspect.getsource(s_calls[name]):
+                s_args[name].extend(select_args_add)
+
         # TODO: below triggers DeprecationWarning with SymPy 1.9
         self.s_matrix = Matrix(list(s_syms.values()))
 
@@ -296,9 +316,16 @@ def generate_jacobians(self, diag_eps=1e-8):
                 j_calls[jname].append(e_symbolic)
 
         for jname in j_calls:
+            # sort for stable argument list
+            j_args[jname].sort(key=lambda s: s.name)
+
             self.calls.j_args[jname] = [str(i) for i in j_args[jname]]
             self.calls.j[jname] = lambdify(j_args[jname], tuple(j_calls[jname]), modules=self.lambdify_func)
 
+            # manually append additional arguments for select
+            if 'select' in inspect.getsource(self.calls.j[jname]):
+                self.calls.j_args[jname].extend(select_args_add)
+
         self.calls.j_names = list(j_calls.keys())
 
         # The for-loop below is intended to add an epsilon small value to the diagonal of `gy`.
@@ -388,15 +415,12 @@ def generate_pycode(self, pycode_path, yapf_pycode):
         this function can be the bottleneck.
         """
 
-        pycode_path = get_pycode_path(pycode_path, mkdir=True)
+        out = list()
+        yf = yapf_pycode
 
-        file_path = os.path.join(pycode_path, f'{self.class_name}.py')
         header = \
             """from collections import OrderedDict  # NOQA
 
-import numpy
-
-
 from numpy import ones_like, zeros_like, full, array                # NOQA
 from numpy import nan, pi, sin, cos, tan, sqrt, exp, select         # NOQA
 from numpy import greater_equal, less_equal, greater, less, equal   # NOQA
@@ -407,39 +431,55 @@ def generate_pycode(self, pycode_path, yapf_pycode):
 
 from andes.core.npfunc import *                                     # NOQA
 
-
 """
-        yf = yapf_pycode
+        # header goes first
+        out.append(header)
 
-        with open(file_path, 'w') as f:
-            f.write(header)
+        # checksum
+        out.append(f'md5 = "{self.calls.md5}"\n')
+
+        # equations
+        out.append(self._rename_func(self.calls.f, 'f_update', yf))
+        out.append(self._rename_func(self.calls.g, 'g_update', yf))
+
+        # jacobians
+        for name in self.calls.j:
+            out.append(self._rename_func(self.calls.j[name], f'{name}_update', yf))
+
+        # initialization: assignments
+        for name in self.calls.ia:
+            out.append(self._rename_func(self.calls.ia[name], f'{name}_ia', yf))
+        for name in self.calls.ii:
+            out.append(self._rename_func(self.calls.ii[name], f'{name}_ii', yf))
+        for name in self.calls.ij:
+            out.append(self._rename_func(self.calls.ij[name], f'{name}_ij', yf))
 
-            # checksum
-            f.write(f'md5 = "{self.calls.md5}"\n\n')
+        # services
+        for name in self.calls.s:
+            out.append(self._rename_func(self.calls.s[name], f'{name}_svc', yf))
 
-            # equations
-            f.write(self._rename_func(self.calls.f, 'f_update', yf))
-            f.write(self._rename_func(self.calls.g, 'g_update', yf))
+        # variables
+        for name in dilled_vars:
+            out.append(f'{name} = ' + pprint.pformat(self.calls.__dict__[name]))
 
-            # jacobians
-            for name in self.calls.j:
-                f.write(self._rename_func(self.calls.j[name], f'{name}_update', yf))
+        out_str = '\n'.join(out)
+
+        pycode_path = get_pycode_path(pycode_path, mkdir=True)
+        file_path = os.path.join(pycode_path, f'{self.class_name}.py')
 
-            # initialization: assignments
-            for name in self.calls.ia:
-                f.write(self._rename_func(self.calls.ia[name], f'{name}_ia', yf))
-            for name in self.calls.ii:
-                f.write(self._rename_func(self.calls.ii[name], f'{name}_ii', yf))
-            for name in self.calls.ij:
-                f.write(self._rename_func(self.calls.ij[name], f'{name}_ij', yf))
+        # do not overwrite file if already up to date
+        if os.path.isfile(file_path):
+            with open(file_path, 'r') as f:
+                fread = f.readlines()
 
-            # services
-            for name in self.calls.s:
-                f.write(self._rename_func(self.calls.s[name], f'{name}_svc', yf))
+            fread = ''.join(fread)
+            if fread == out_str:
+                logger.debug("<%s>: generated code is up-to-date and not overwritten.",
+                             self.parent.class_name)
+                return
 
-            # variables
-            for name in dilled_vars:
-                f.write(f'\n{name} = ' + pprint.pformat(self.calls.__dict__[name]))
+        with open(file_path, 'w') as f:
+            f.write(out_str)
 
     def _rename_func(self, func, func_name, yapf_pycode=False):
         """
@@ -447,17 +487,23 @@ def _rename_func(self, func, func_name, yapf_pycode=False):
 
         This function does not check for name conflicts.
         Install `yapf` for optional code reformatting (takes extra processing time).
+
+        It also patches function argument list for select.
         """
-        import inspect
 
         if func is None:
             return f"# empty {func_name}\n"
 
         src = inspect.getsource(func)
         src = src.replace("def _lambdifygenerated(", f"def {func_name}(")
+
         # remove `Indicator`
         src = src.replace("Indicator", "")
 
+        # append additional arguments for select
+        if 'select' in src:
+            src = src.replace("):", ", __zeros, __ones, __falses, __trues):")
+
         if yapf_pycode:
             try:
                 from yapf.yapflib.yapf_api import FormatCode
@@ -474,7 +520,7 @@ def generate_dependency(self):
         """
         self.v_str_syms = OrderedDict()
         self.v_iter_syms = OrderedDict()
-        deps = dict()
+        deps = OrderedDict()
 
         # convert to symbols
         for name, instance in self.cache.all_vars.items():
@@ -592,18 +638,25 @@ def lambdify_init(self):
         ij_args = OrderedDict()
 
         for name, expr in self.init_asn.items():
-            self._check_expr_symbols(expr)
-            ia_args[name] = [str(i) for i in expr.free_symbols]
+            fs = self._check_expr_symbols(expr)
+            ia_args[name] = [str(i) for i in fs]
             init_a[name] = lambdify(ia_args[name], expr, modules=self.lambdify_func)
+            if 'select' in inspect.getsource(init_a[name]):
+                ia_args[name].extend(select_args_add)
 
         for name, expr in self.init_itn.items():
-            self._check_expr_symbols(expr)
-            ii_args[name] = [str(i) for i in expr.free_symbols]
+            fs = self._check_expr_symbols(expr)
+            ii_args[name] = [str(i) for i in fs]
             init_i[name] = lambdify(ii_args[name], expr, modules=self.lambdify_func)
+            if 'select' in inspect.getsource(init_i[name]):
+                ii_args[name].extend(select_args_add)
 
             jexpr = self.init_jac[name]
-            ij_args[name] = [str(i) for i in jexpr.free_symbols]
+            fs = self._check_expr_symbols(jexpr)
+            ij_args[name] = [str(i) for i in fs]
             init_j[name] = lambdify(ij_args[name], jexpr, modules=self.lambdify_func)
+            if 'select' in inspect.getsource(init_j[name]):
+                ij_args[name].extend(select_args_add)
 
         self.calls.ia = init_a
         self.calls.ii = init_i
@@ -632,7 +685,8 @@ def _store_deps(name, sympified, vars_int_dict, deps):
     """
 
     deps[name] = []
-    for fs in sympified.free_symbols:
+    free_symbols = sorted(sympified.free_symbols, key=lambda s: s.name)
+    for fs in free_symbols:
         if fs not in vars_int_dict.values():
             continue
         if fs not in deps[name]:
@@ -642,6 +696,19 @@ def _store_deps(name, sympified, vars_int_dict, deps):
 def resolve_deps(graph):
     """
     Resolve dependency for a dict-based graph using recursion.
+
+    Parameters
+    ----------
+    graph : dict
+        Each key is a variable name, and the corresponding value
+        is the list of variables the key depends on.
+
+    Returns
+    -------
+    list
+        A list of initialization sequence. Elements are either a
+        variable name or a list of mutually-dependent variables
+        that need iterative initialization.
     """
 
     seq = list()      # sequence after resolving dependency
diff --git a/andes/io/psse-dyr.yaml b/andes/io/psse-dyr.yaml
index 8434664eb..355ecae78 100644
--- a/andes/io/psse-dyr.yaml
+++ b/andes/io/psse-dyr.yaml
@@ -124,8 +124,11 @@ IEEEVC:
             SynGen:
                 bus: BUS
                 subidx: ID
+        avr:
+            Exciter:
+                syn: syn
     outputs:
-        syn: syn
+        avr: avr
         rc : rc
         xc : xc
 
@@ -244,7 +247,6 @@ ESAC1A:
         - KE
         - KF
         - TF
-        - Switch
     destination: ESAC1A
     find:
         syn:
diff --git a/andes/io/psse.py b/andes/io/psse.py
index eb9d8b426..4b1089eae 100644
--- a/andes/io/psse.py
+++ b/andes/io/psse.py
@@ -10,9 +10,13 @@
 
 import andes.io
 
+from andes.core.symprocessor import resolve_deps
+from andes.models import file_classes
+from andes.utils.func import list_flatten
 from andes.shared import deg2rad, pd, yaml
 from andes.utils.misc import to_number
 from collections import defaultdict
+
 logger = logging.getLogger(__name__)
 
 
@@ -213,7 +217,7 @@ def read_add(system, file):
     with open(f'{dirname}/psse-dyr.yaml', 'r') as f:
         dyr_yaml = yaml.full_load(f)
 
-    sorted_models = sort_psse_models(dyr_yaml)
+    sorted_models = sort_psse_models(dyr_yaml, system)
 
     for psse_model in dyr_dict:
         if psse_model in dyr_yaml:
@@ -265,6 +269,10 @@ def read_add(system, file):
                             cond_values.append(dyr_dict[psse_model][col])
 
                     try:
+                        logger.debug("<%s> trying to find <%s> using cond_names=%s and cond_values=%s",
+                                     psse_model, model, cond_names, cond_values)
+                        logger.debug("<%s> contains %d devices", model, system.__dict__[model].n)
+
                         find[name] = system.__dict__[model].find_idx(cond_names, cond_values,
                                                                      allow_none=allow_none)
                     except IndexError as e:
@@ -627,21 +635,54 @@ def _add_devices_from_dict(params, system):
             system.add(name, p)
 
 
-def sort_psse_models(dyr_yaml):
+def sort_psse_models(dyr_yaml, system):
     """
     Sort supported models so that model names are ordered by dependency.
+
+    Dependency is determined by checking the ``find`` key in
+    ``psse-dyr.yaml`` for each model.
+
+    Returns
+    -------
+    list
+        The sequence of model names for loading parameters.
     """
-    from andes.models import file_classes
-    from andes.utils.func import list_flatten
 
     andes_models = list_flatten(list(file_classes.values()))
-    number = dict()
+    graph = defaultdict(list)
 
     for psse_model in dyr_yaml:
-        dest = dyr_yaml[psse_model]['destination']
-        if dest in andes_models:
-            number[dest] = andes_models.index(dest)
 
-    sorted_models = [k for k, v in sorted(number.items(), key=lambda item: item[1])]
-
-    return sorted_models
+        # build model dependency graph
+        if 'find' in dyr_yaml[psse_model]:
+            # below is a list of `dict_keys`
+            dep_models = [item.keys() for item in dyr_yaml[psse_model]['find'].values()]
+
+            # extract strings from single-element `dict_keys`
+            dep_models = [list(item)[0] for item in dep_models]
+            graph[psse_model].extend(dep_models)
+
+    # resolve PSS/E model dependency based on `find`
+    # `find` requires the model indices to have existed
+    for key in graph:
+        value = list(graph[key])
+        for item in graph[key]:
+            if item in system.groups:
+                value.remove(item)
+                value.extend(list(system.groups[item].models.keys()))
+        graph[key] = value
+
+    sequence = resolve_deps(graph)
+    # does not support ciruclar dependencies
+    for item in sequence:
+        if not isinstance(item, str):
+            raise NotImplementedError("Circular depencency exists for models %s. %s".
+                                      item, "Please report this bug.")
+
+    # prepend no-dependency models to the front
+    nodep_models = list()
+    for item in andes_models:
+        if item not in sequence:
+            nodep_models.append(item)
+
+    return nodep_models + sequence
diff --git a/andes/models/__init__.py b/andes/models/__init__.py
index 8086f9554..d25aa1715 100644
--- a/andes/models/__init__.py
+++ b/andes/models/__init__.py
@@ -18,7 +18,7 @@
     ('bus', ['Bus']),
     ('pq', ['PQ']),
     ('pv', ['PV', 'Slack']),
-    ('shunt', ['Shunt', 'ShuntSw']),
+    ('shunt', ['Shunt', "ShuntTD", 'ShuntSw']),
     ('line', ['Line', 'Jumper']),
     ('area', ['Area', 'ACE', 'ACEc']),
     ('dynload', ['ZIP', 'FLoad']),
diff --git a/andes/models/shunt.py b/andes/models/shunt.py
index 15faaf878..efbb38706 100644
--- a/andes/models/shunt.py
+++ b/andes/models/shunt.py
@@ -7,7 +7,7 @@
 
 from andes.core.model import Model, ModelData
 from andes.core.param import IdxParam, NumParam
-from andes.core.var import ExtAlgeb
+from andes.core.var import ExtAlgeb, Algeb
 from andes.core.service import SwBlock, ConstService
 from andes.core.discrete import ShuntAdjust
 
@@ -62,6 +62,27 @@ def __init__(self, system=None, config=None):
         ShuntModel.__init__(self, system, config)
 
 
+class ShuntTD(Shunt):
+    """
+    Static shunt model with inverse transformation from phasor to time-domain.
+    """
+
+    def __init__(self, system=None, config=None):
+        Shunt.__init__(self, system, config)
+        self.vta = Algeb(e_str='v / sqrt(3) * cos(2*pi * sys_f * dae_t + a) - vta',
+                         v_str='v / sqrt(3) * cos(2*pi * sys_f * dae_t + a)',
+                         tex_name='V_{ta}',
+                         )
+        self.vtb = Algeb(e_str='v / sqrt(3) * cos(2*pi * sys_f * dae_t + a - 2/3*pi) - vtb',
+                         v_str='v / sqrt(3) * cos(2*pi * sys_f * dae_t + a - 2/3*pi)',
+                         tex_name='V_{tb}',
+                         )
+        self.vtc = Algeb(e_str='v / sqrt(3) * cos(2*pi * sys_f * dae_t + a + 2/3*pi) - vtc',
+                         v_str='v / sqrt(3) * cos(2*pi * sys_f * dae_t + a + 2/3*pi)',
+                         tex_name='V_{tc}',
+                         )
+
+
 class ShuntSwData(ShuntData):
     """
     Data for switched shunts.
diff --git a/andes/routines/__init__.py b/andes/routines/__init__.py
index 0ffbec4c6..ab5b7082e 100644
--- a/andes/routines/__init__.py
+++ b/andes/routines/__init__.py
@@ -10,3 +10,5 @@
 
 class_names = list_flatten(list(all_routines.values()))
 routine_cli = OrderedDict([(item.lower(), item) for item in class_names])
+
+from andes.routines import daeint    # NOQA
diff --git a/andes/routines/daeint.py b/andes/routines/daeint.py
new file mode 100644
index 000000000..8b0db43a6
--- /dev/null
+++ b/andes/routines/daeint.py
@@ -0,0 +1,241 @@
+"""
+Integration methods for DAE.
+"""
+
+import logging
+import numpy as np
+
+from andes.shared import sparse, matrix, tqdm
+
+
+logger = logging.getLogger(__name__)
+
+
+class ImplicitIter:
+    """
+    Base class for implicit iterative methods.
+    """
+
+    @staticmethod
+    def calc_jac(tds, gxs, gys):
+        pass
+
+    @staticmethod
+    def calc_q(x, f, Tf, h, x0, f0):
+        pass
+
+    @staticmethod
+    def step(tds):
+        """
+        Integrate with Implicit Trapezoidal Method (ITM) to the current time.
+
+        This function has an internal Newton-Raphson loop for algebraized semi-explicit DAE.
+        The function returns the convergence status when done but does NOT progress simulation time.
+
+        Returns
+        -------
+        bool
+            Convergence status in ``tds.converged``.
+
+        """
+        system = tds.system
+        dae = tds.system.dae
+
+        if tds.h == 0:
+            logger.error("Current step size is zero. Integration is not permitted.")
+            return False
+
+        tds.mis = [1, 1]
+        tds.niter = 0
+        tds.converged = False
+
+        tds.x0[:] = dae.x
+        tds.y0[:] = dae.y
+        tds.f0[:] = dae.f
+
+        while True:
+            tds.fg_update(models=system.exist.pflow_tds)
+
+            # lazy Jacobian update
+
+            reason = ''
+            if dae.t == 0:
+                reason = 't=0'
+            elif tds.config.honest:
+                reason = 'using honest method'
+            elif tds.custom_event:
+                reason = 'custom event set'
+            elif not tds.last_converged:
+                reason = 'non-convergence in the last step'
+            elif tds.niter > 4 and (tds.niter + 1) % 3 == 0:
+                reason = 'update every 6 iterations'
+            elif dae.t - tds._last_switch_t < 0.1:
+                reason = 'within 0.1s of event'
+
+            if reason:
+                system.j_update(models=system.exist.pflow_tds, info=reason)
+
+                # set flag in `solver.worker.factorize`, not `solver.factorize`.
+                tds.solver.worker.factorize = True
+
+            # `Tf` should remain constant throughout the simulation, even if the corresponding diff. var.
+            # is pegged by the anti-windup limiters.
+
+            # solve implicit trapezoidal method (ITM) integration
+            if tds.config.g_scale > 0:
+                gxs = tds.config.g_scale * tds.h * dae.gx
+                gys = tds.config.g_scale * tds.h * dae.gy
+            else:
+                gxs = dae.gx
+                gys = dae.gy
+
+            # calculate complete Jacobian matrix ``Ac```
+            tds.Ac = tds.method.calc_jac(tds, gxs, gys)
+
+            # equation `tds.qg[:dae.n] = 0` is the implicit form of differential equations using ITM
+            tds.qg[:dae.n] = tds.method.calc_q(dae.x, dae.f, dae.Tf, tds.h, tds.x0, tds.f0)
+
+            # reset the corresponding q elements for pegged anti-windup limiter
+            for item in system.antiwindups:
+                for key, _, eqval in item.x_set:
+                    np.put(tds.qg, key, eqval)
+
+            # set or scale the algebraic residuals
+            if tds.config.g_scale > 0:
+                tds.qg[dae.n:] = tds.config.g_scale * tds.h * dae.g
+            else:
+                tds.qg[dae.n:] = dae.g
+
+            # calculate variable corrections
+            if not tds.config.linsolve:
+                inc = tds.solver.solve(tds.Ac, matrix(tds.qg))
+            else:
+                inc = tds.solver.linsolve(tds.Ac, matrix(tds.qg))
+
+            # check for np.nan first
+            if np.isnan(inc).any():
+                tds.err_msg = 'NaN found in solution. Convergence is not likely'
+                tds.niter = tds.config.max_iter + 1
+                tds.busted = True
+                break
+
+            # reset small values to reduce chattering
+            inc[np.where(np.abs(inc) < tds.tol_zero)] = 0
+
+            # set new values
+            dae.x -= inc[:dae.n].ravel()
+            dae.y -= inc[dae.n: dae.n + dae.m].ravel()
+
+            # synchronize solutions to model internal storage
+            system.vars_to_models()
+
+            # store `inc` to tds for debugging
+            tds.inc = inc
+
+            mis = np.max(np.abs(inc))
+
+            # store initial maximum mismatch
+            if tds.niter == 0:
+                tds.mis[0] = mis
+            else:
+                tds.mis[-1] = mis
+
+            tds.niter += 1
+
+            # converged
+            if mis <= tds.config.tol:
+                tds.converged = True
+                break
+
+            # non-convergence cases
+            if tds.niter > tds.config.max_iter:
+                tqdm.write(f'* Max. iter. {tds.config.max_iter} reached for t={dae.t:.6f}s, '
+                           f'h={tds.h:.6f}s, max inc={mis:.4g} ')
+
+                # debug helpers
+                g_max = np.argmax(abs(dae.g))
+                inc_max = np.argmax(abs(inc))
+                tds._debug_g(g_max)
+                tds._debug_ac(inc_max)
+                break
+
+            if (mis > 1e6) and (mis > 1e6 * tds.mis[0]):
+                tds.err_msg = 'Error increased too quickly.'
+                break
+
+        if not tds.converged:
+            dae.x[:] = np.array(tds.x0)
+            dae.y[:] = np.array(tds.y0)
+            dae.f[:] = np.array(tds.f0)
+            system.vars_to_models()
+
+        tds.last_converged = tds.converged
+
+        return tds.converged
+
+
+class BackEuler(ImplicitIter):
+    """
+    Backward Euler's integration method.
+    """
+    @staticmethod
+    def calc_jac(tds, gxs, gys):
+        """
+        Build full Jacobian matrix ``Ac`` for Trapezoid method.
+        """
+
+        dae = tds.system.dae
+
+        return sparse([[tds.Teye - tds.h * dae.fx, gxs],
+                       [-tds.h * dae.fy, gys]], 'd')
+
+    @staticmethod
+    def calc_q(x, f, Tf, h, x0, f0):
+        """
+        Calculate the residual of algebraized differential equations.
+
+        Notes
+        -----
+        Numba jit somehow slows down this function for the 14-bus
+        and the 2k-bus systems.
+        """
+
+        return Tf * (x - x0) - h * f
+
+
+class Trapezoid(ImplicitIter):
+    """
+    Trapezoidal methods.
+    """
+
+    @staticmethod
+    def calc_jac(tds, gxs, gys):
+        """
+        Build full Jacobian matrix ``Ac`` for Trapezoid method.
+        """
+
+        dae = tds.system.dae
+
+        return sparse([[tds.Teye - tds.h * 0.5 * dae.fx, gxs],
+                       [-tds.h * 0.5 * dae.fy, gys]], 'd')
+
+    @staticmethod
+    def calc_q(x, f, Tf, h, x0, f0):
+        """
+        Calculate the residual of algebraized differential equations.
+
+        Notes
+        -----
+        Numba jit somehow slows down this function for the 14-bus
+        and the 2k-bus systems.
+        """
+
+        return Tf * (x - x0) - h * 0.5 * (f + f0)
+
+
+# --- solution method name-to-class mapping ---
+# !!! add new solvers to below
+
+method_map = {"trapezoid": Trapezoid,
+              "backeuler": BackEuler,
+              }
diff --git a/andes/routines/tds.py b/andes/routines/tds.py
index 6bfaa244e..3ff4e17b7 100644
--- a/andes/routines/tds.py
+++ b/andes/routines/tds.py
@@ -10,10 +10,12 @@
 from collections import OrderedDict
 
 from andes.routines.base import BaseRoutine
+from andes.routines.daeint import method_map, Trapezoid
+
 from andes.utils.misc import elapsed, is_notebook, is_interactive
 from andes.utils.tab import Tab
 from andes.shared import tqdm, np, pd
-from andes.shared import matrix, sparse, spdiag
+from andes.shared import matrix, spdiag
 
 logger = logging.getLogger(__name__)
 
@@ -25,7 +27,8 @@ class TDS(BaseRoutine):
 
     def __init__(self, system=None, config=None):
         super().__init__(system, config)
-        self.config.add(OrderedDict((('tol', 1e-6),
+        self.config.add(OrderedDict((('method', 'trapezoid'),
+                                     ('tol', 1e-6),
                                      ('t0', 0.0),
                                      ('tf', 20.0),
                                      ('fixt', 1),
@@ -45,6 +48,7 @@ def __init__(self, system=None, config=None):
                                      ('store_i', 0.0),
                                      )))
         self.config.add_extra("_help",
+                              method='DAE solution method',
                               tol="convergence tolerance",
                               t0="simulation starting time",
                               tf="simulation ending time",
@@ -65,6 +69,7 @@ def __init__(self, system=None, config=None):
                               store_i='store RHS of external algeb. equations',
                               )
         self.config.add_extra("_alt",
+                              method=tuple(method_map.keys()),
                               tol="float",
                               t0=">=0",
                               tf=">t0",
@@ -134,6 +139,10 @@ def __init__(self, system=None, config=None):
         self.Ac = None
         self.inc = None
 
+        # set DAE solver
+        self.method = Trapezoid()
+        self.set_method(self.config.method)
+
     def init(self):
         """
         Initialize the status, storage and values for TDS.
@@ -393,10 +402,7 @@ def run(self, no_pbar=False, no_summary=False, **kwargs):
 
     def itm_step(self):
         """
-        Integrate with Implicit Trapezoidal Method (ITM) to the current time.
-
-        This function has an internal Newton-Raphson loop for algebraized semi-explicit DAE.
-        The function returns the convergence status when done but does NOT progress simulation time.
+        Integrate for the step size of ``self.h`` using implicit trapezoid method.
 
         Returns
         -------
@@ -404,139 +410,7 @@ def itm_step(self):
             Convergence status in ``self.converged``.
 
         """
-        system = self.system
-        dae = self.system.dae
-
-        if self.h == 0:
-            logger.error("Current step size is zero. Integration is not permitted.")
-            return False
-
-        self.mis = [1, 1]
-        self.niter = 0
-        self.converged = False
-
-        self.x0[:] = dae.x
-        self.y0[:] = dae.y
-        self.f0[:] = dae.f
-
-        while True:
-            self.fg_update(models=system.exist.pflow_tds)
-
-            # lazy Jacobian update
-
-            reason = ''
-            if dae.t == 0:
-                reason = 't=0'
-            elif self.config.honest:
-                reason = 'using honest method'
-            elif self.custom_event:
-                reason = 'custom event set'
-            elif not self.last_converged:
-                reason = 'non-convergence in the last step'
-            elif self.niter > 4 and (self.niter + 1) % 3 == 0:
-                reason = 'update every 6 iterations'
-            elif dae.t - self._last_switch_t < 0.1:
-                reason = 'within 0.1s of event'
-
-            if reason:
-                system.j_update(models=system.exist.pflow_tds, info=reason)
-
-                # set flag in `solver.worker.factorize`, not `solver.factorize`.
-                self.solver.worker.factorize = True
-
-            # `Tf` should remain constant throughout the simulation, even if the corresponding diff. var.
-            # is pegged by the anti-windup limiters.
-
-            # solve implicit trapezoidal method (ITM) integration
-            if self.config.g_scale > 0:
-                gxs = self.config.g_scale * self.h * dae.gx
-                gys = self.config.g_scale * self.h * dae.gy
-            else:
-                gxs = dae.gx
-                gys = dae.gy
-
-            self.Ac = sparse([[self.Teye - self.h * 0.5 * dae.fx, gxs],
-                              [-self.h * 0.5 * dae.fy, gys]], 'd')
-
-            # equation `self.qg[:dae.n] = 0` is the implicit form of differential equations using ITM
-            self.qg[:dae.n] = dae.Tf * (dae.x - self.x0) - self.h * 0.5 * (dae.f + self.f0)
-
-            # reset the corresponding q elements for pegged anti-windup limiter
-            for item in system.antiwindups:
-                for key, _, eqval in item.x_set:
-                    np.put(self.qg, key, eqval)
-
-            # set or scale the algebraic residuals
-            if self.config.g_scale > 0:
-                self.qg[dae.n:] = self.config.g_scale * self.h * dae.g
-            else:
-                self.qg[dae.n:] = dae.g
-
-            # calculate variable corrections
-            if not self.config.linsolve:
-                inc = self.solver.solve(self.Ac, matrix(self.qg))
-            else:
-                inc = self.solver.linsolve(self.Ac, matrix(self.qg))
-
-            # check for np.nan first
-            if np.isnan(inc).any():
-                self.err_msg = 'NaN found in solution. Convergence is not likely'
-                self.niter = self.config.max_iter + 1
-                self.busted = True
-                break
-
-            # reset small values to reduce chattering
-            inc[np.where(np.abs(inc) < self.tol_zero)] = 0
-
-            # set new values
-            dae.x -= inc[:dae.n].ravel()
-            dae.y -= inc[dae.n: dae.n + dae.m].ravel()
-
-            # synchronize solutions to model internal storage
-            system.vars_to_models()
-
-            # store `inc` to self for debugging
-            self.inc = inc
-
-            mis = np.max(np.abs(inc))
-
-            # store initial maximum mismatch
-            if self.niter == 0:
-                self.mis[0] = mis
-            else:
-                self.mis[-1] = mis
-
-            self.niter += 1
-
-            # converged
-            if mis <= self.config.tol:
-                self.converged = True
-                break
-            # non-convergence cases
-            if self.niter > self.config.max_iter:
-                tqdm.write(f'* Max. iter. {self.config.max_iter} reached for t={dae.t:.6f}s, '
-                           f'h={self.h:.6f}s, max inc={mis:.4g} ')
-
-                # debug helpers
-                g_max = np.argmax(abs(dae.g))
-                inc_max = np.argmax(abs(inc))
-                self._debug_g(g_max)
-                self._debug_ac(inc_max)
-                break
-
-            if (mis > 1e6) and (mis > 1e6 * self.mis[0]):
-                self.err_msg = 'Error increased too quickly.'
-                break
-
-        if not self.converged:
-            dae.x[:] = np.array(self.x0)
-            dae.y[:] = np.array(self.y0)
-            dae.f[:] = np.array(self.f0)
-            system.vars_to_models()
-
-        self.last_converged = self.converged
-
-        return self.converged
+        return self.method.step(self)
 
     def _csv_step(self):
         """
@@ -1034,3 +908,18 @@ def streaming_step(self):
             system.streaming.sync_and_handle()
             system.streaming.vars_to_modules()
             system.streaming.vars_to_pmu()
+
+    def set_method(self, name: str = 'trapezoid'):
+        """
+        Set DAE solution method.
+
+        name : str, optional, default: trapezoid
+            DAE solver name
+        """
+
+        if name not in method_map:
+            logger.error('"%s" is not a registered dae method name. " \
+                         "Falling back to trapezoid.', name)
+            name = 'trapezoid'
+
+        self.method = method_map[name]()
diff --git a/andes/shared.py b/andes/shared.py
index 56b9b3309..d37316b15 100644
--- a/andes/shared.py
+++ b/andes/shared.py
@@ -33,6 +33,10 @@
 # --- constants ---
 
 deg2rad = math.pi/180
+pi2o3 = math.pi * 2 / 3
+sqrt3 = math.sqrt(3)
+isqrt3 = math.sqrt(1/3)
+
 jac_names = ('fx', 'fy', 'gx', 'gy')
 jac_types = ('c', '')
 
diff --git a/andes/system.py b/andes/system.py
index 0d53434fb..e9c1e6f37 100644
--- a/andes/system.py
+++ b/andes/system.py
@@ -437,7 +437,7 @@ def setup(self):
 
         # assign address at the end before adding devices and processing parameters
         self.set_address(self.exist.pflow)
-        self.set_dae_names(self.exist.pflow)
+        self.set_dae_names(self.exist.pflow)        # needs perf. optimization
         self.store_sparse_pattern(self.exist.pflow)
         self.store_adder_setter(self.exist.pflow)
 
diff --git a/andes/utils/sympy.py b/andes/utils/sympy.py
index a0dd39a54..2c749fa47 100644
--- a/andes/utils/sympy.py
+++ b/andes/utils/sympy.py
@@ -13,22 +13,22 @@ def _numpycode(self, printer):
         Updated numpy code printer.
         """
 
-        # find any symbol:
-        s = list(self.atoms(sym.Symbol))[0]
-
         def broadcastarg(arg):
             if arg.has(sym.Symbol):
                 return printer._print(arg)
             if arg == 0:
-                return 'zeros_like({0})'.format(s)
+                return '__zeros'
 
-            return printer._print(arg*sym.Symbol('ones_like({0})'.format(s)))
+            return '__ones'
 
         def broadcastcond(cond):
             if cond.has(sym.Symbol):
                 return printer._print(cond)
 
-            return 'full({0}.shape,{1})'.format(printer._print(s), printer._print(cond))
+            if cond:
+                return '__trues'
+            else:
+                return '__falses'
 
         # Piecewise function printer
 
diff --git a/docs/source/release-notes.rst b/docs/source/release-notes.rst
index 99f0ee170..e7c0076f0 100644
--- a/docs/source/release-notes.rst
+++ b/docs/source/release-notes.rst
@@ -9,6 +9,14 @@ The APIs before v3.0.0 are in beta and may change without prior notice.
 v1.5 Notes
 ----------
 
+v1.5.3 (2021-10-31)
+```````````````````
+- Revered special arguments for the generated ``select`` function.
+- Stabilized the argument list of pycode. If the pycode is identical
+  to existing ones, the existing file will not be overwritten.
+  As a result, compiled code is fully cached.
+- Partially seperated time-domain integration method into ``daeint.py``.
+
 v1.5.2 (2021-10-27)
 ```````````````````
 - Removed ``CVXOPT`` dependency.
diff --git a/examples/demonstration/2.5 demo_IEEEVC.ipynb b/examples/demonstration/2.5 demo_IEEEVC.ipynb
index bb4adcb9b..c81c49357 100644
--- a/examples/demonstration/2.5 demo_IEEEVC.ipynb
+++ b/examples/demonstration/2.5 demo_IEEEVC.ipynb
@@ -11,7 +11,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": 1,
    "metadata": {
     "execution": {
      "iopub.execute_input": "2021-09-26T22:41:50.949182Z",
@@ -30,7 +30,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": 2,
    "metadata": {
     "execution": {
      "iopub.execute_input": "2021-09-26T22:41:51.718124Z",
@@ -45,12 +45,12 @@
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "Working directory: \"/Users/jinningwang/Documents/work/andes/examples/demonstration\"\n",
-      "Loaded config from file \"/Users/jinningwang/.andes/andes.rc\"\n",
-      "Loaded generated Python code in \"/Users/jinningwang/.andes/pycode\".\n",
-      "Parsing input file \"/Users/jinningwang/Documents/work/andes/andes/cases/ieee14/ieee14_ieeevc.xlsx\"...\n",
-      "Input file parsed in 0.3611 seconds.\n",
-      "System internal structure set up in 0.0212 seconds.\n"
+      "Working directory: \"/home/hcui7/repos/andes/examples/demonstration\"\n",
+      "Loaded config from file \"/home/hcui7/.andes/andes.rc\"\n",
+      "Loaded generated Python code in \"/home/hcui7/.andes/pycode\".\n",
+      "Parsing input file \"/home/hcui7/repos/andes/andes/cases/ieee14/ieee14_ieeevc2.xlsx\"...\n",
+      "Input file parsed in 0.2516 seconds.\n",
+      "System internal structure set up in 0.0179 seconds.\n"
      ]
     },
     {
@@ -59,13 +59,13 @@
        "True"
       ]
      },
-     "execution_count": 3,
+     "execution_count": 2,
      "metadata": {},
      "output_type": "execute_result"
     }
    ],
    "source": [
-    "ss = andes.load(get_case('ieee14/ieee14_ieeevc.xlsx'),\n",
+    "ss = andes.load(get_case('ieee14/ieee14_ieeevc2.xlsx'),\n",
     "                setup=False,\n",
     "                no_output=True)\n",
     "ss.setup()"
@@ -83,7 +83,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": 3,
    "metadata": {
     "execution": {
      "iopub.execute_input": "2021-09-26T22:41:52.417917Z",
@@ -107,14 +107,13 @@
       "   Sparse solver: KLU\n",
       " Solution method: NR method\n",
       " Sparse addition: Fast in-place (kvxopt)\n",
+      "Numba compilation initiated, parallel=False, cache=True.\n",
       "Power flow initialized.\n",
       "0: |F(x)| = 0.5605182134\n",
       "1: |F(x)| = 0.006202200332\n",
       "2: |F(x)| = 5.819382825e-06\n",
       "3: |F(x)| = 6.967745825e-12\n",
-      "Converged in 4 iterations in 0.0054 seconds.\n",
-      "Initialization for dynamics completed in 0.0195 seconds.\n",
-      "Initialization was successful.\n"
+      "Converged in 4 iterations in 0.0045 seconds.\n"
      ]
     },
     {
@@ -123,7 +122,7 @@
        "True"
       ]
      },
-     "execution_count": 4,
+     "execution_count": 3,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -134,7 +133,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 4,
    "metadata": {
     "execution": {
      "iopub.execute_input": "2021-09-26T22:41:52.442840Z",
@@ -152,24 +151,27 @@
       "\n",
       "-> Time Domain Simulation Summary:\n",
       "Sparse Solver: KLU\n",
-      "Simulation time: 0.0-20 s.\n",
-      "Fixed step size: h=33.33 ms. Shrink if not converged.\n"
+      "Simulation time: 0-20 s.\n",
+      "Fixed step size: h=33.33 ms. Shrink if not converged.\n",
+      "Numba compilation initiated, parallel=False, cache=True.\n",
+      "Initialization for dynamics completed in 1.4151 seconds.\n",
+      "Initialization was successful.\n"
      ]
     },
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "<Toggler Toggler_1>: Line.Line_1 status changed to 0 at t=1.0 sec.    \n",
-      "<Toggler Toggler_2>: Line.Line_1 status changed to 1 at t=1.1 sec.    \n",
-      "100%|████████████████████████████████| 100/100 [00:01<00:00, 76.41%/s]"
+      "<Toggler Toggler_1>: Line.Line_1 status changed to 0 at t=1.0 sec.\n",
+      "<Toggler Toggler_2>: Line.Line_1 status changed to 1 at t=1.1 sec.\n",
+      "100%|███████████████████████████████| 100/100 [00:00<00:00, 109.66%/s]"
      ]
     },
     {
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "Simulation completed in 1.3090 seconds.\n"
+      "Simulation completed in 0.9123 seconds.\n"
      ]
     },
     {
@@ -185,7 +187,7 @@
        "True"
       ]
      },
-     "execution_count": 5,
+     "execution_count": 4,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -197,7 +199,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 5,
    "metadata": {
     "execution": {
      "iopub.execute_input": "2021-09-26T22:41:56.174327Z",
@@ -213,7 +215,7 @@
        "0"
       ]
      },
-     "execution_count": 6,
+     "execution_count": 5,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -224,7 +226,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": 6,
    "metadata": {
     "execution": {
      "iopub.execute_input": "2021-09-26T22:41:56.186528Z",
@@ -236,7 +238,7 @@
    "outputs": [
     {
      "data": {
-      "image/png": "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\n",
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhoAAAFrCAYAAACXLyDfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA0uklEQVR4nO3de3wcV33///eRLMuWbWktx7kQJyQyISQBAmsbKIFCk1Upl9JvqGTTC9CWSqK0QPn9ilT9eoFSeIhVS/voj7Z8taa/wrf0YksthS/w5VHJtFBKoLYUrimUaBOIE0IcSyvZ8V06vz/OzGp2tSvtyDvai1/Px2Mfu3vmzMyZ3Zmdz55z5oyx1goAACAKDZUuAAAAqF8EGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIbKl2AcjHGGElPk3Sq0mUBAKAGbZP0mC3zSJ51E2jIBRnHK10IAABq2C5Jj5ZzgaECDWNMh6QuSWlJHZJS1tpM2LzGmISXLSZpn6RD1tqpwLwJb560JFlrJ0oo3ilJeuSRR9Ta2hpmswAAuKLNz8/rhhtukCJoFQhbozFqrd0jZQOJg5K615B3VNI91toJY0y79363lzchqdta2+fNN+5PK0VrayuBBgAAVaLkQMM76WdZa9OBmomwebuDNRiSMoHXI5L2BObrLLWMAACguoS56iQhaSYvbcYYEw+bN68ppFsuuPADlHZrbcYYEzfGxKy16UKFMcY0G2Na/YdcJxYAAFBFwgQasSLp7WvJ6wUSSUnj1tqUlxyXC0j8vh293utCBiXNBR50BAUAoMqU46qT2FryWmunjDFpSUljTJe1dkwuEOmQNOHVaqQkzUoyBZY1JOlPAu+3iWADQB1YWFjQxYsXK10M1JmmpiY1Njau+3rDBBoZLa+9aFdu/4pQeb1gYlTSuDFmu1wtRsa/OsWbLmNMPK9Ph6y15yWd99+7YTQAoLadPn1ax48fV5mHMgBkjNGuXbu0devWdV1vmEBjQlJfgfRjYfJ6nUJHrbXbvTS/D0ZH4DUAXHEWFhZ0/PhxtbS0aOfOnfyBQtlYa3XixAkdP35ct9xyy7rWbJQcaHhXgGTfex03jwXGxojL1UakV8prjJmRC0R8/nxTXt5jXifQjDdfOr82AwDq0cWLF2Wt1c6dO7V58+ZKFwd1ZufOnXr44Yd18eLF6gw0PN1eB86jcgNtBcfQGPTSh1fK6/XNOGSM6fXydcq7nNWfT67fxqSXzuWtAK4o1GQgCpXar0y9tAN6l7jOzc3NMWAXgJp07tw5PfTQQ7r55pu1adOmShenpk1MTGh0dFSpVEr9/f3q7OxUe3u7RkZGsmm7d+9WJpPRyZMnlUqlNDo6WrY8mUxGQ0NDmpqaUjKZVH9/f7Zsw8PDGhoa0v79+zUyMpJT7lQqpenpae3evVvt7e2KxWJKp9NKJBLq6OjI38ysqakp9fT0aHJysmielfav+fl5tbW1SVKbtXZ+TR96MdbaunhIapVk5+bmbCTOzVv7yLFolg0A1tqzZ8/aBx54wJ49e7bSRakL09PTVpKdnZ1dMc1aaycnJ+3IyEhZ80xOThbMY621yWRyWVoikcjOG1yeJDs9PV10O0dHR7P5VrLS/jU3N2clWUmttsznZ24TX6rP9ksfuVu6eK7SJQEAlKC9ffkwT4XSJCkej5c9TzweV0dHh1KpVE6eiYkJdXXlDhE1POx6HfT29uakx+PxZWn5urq6ctZbbQg0SrV5u7Rhk9REdSYA1IupqSml0+6Cx/3795c9T19f37LmkampqWXNIENDQ+rrK3SxptTdXeyWYrWBQKNkVoo9vdKFAICqMzY2pr6+PmUyGUnuxDgxUcpNtysnlUppeHhYPT092bRYLFb2PL29vUqn09kgpNAy0um0MplM0T4Yq/XPqHblGBn0ynB+Xnryu9L470ud7610aQBcIc5eWND0idPrvt7dO7dq88bVL4EcGxtTV1eXRkZGlE6nFY/H1dnZmXNirUa9vb3LTvhR5InFYkokEhoZGVEymVQqlSpaK1KvCDRKde2dkj4ufff/EGgAWDfTJ07rNR/60rqv99Nve4mefX3bqvm6urqUyWSyQYYk7d27d9UTdLUI9pWYmJhQIrH8puSXm6evr089PT1KJpPKZDLLPhu/tiL4GQal0+nsFSi1iECjVC/slTZukT7569K5eWkTl9ACiN7unVv16be9pCLrLVX+iTWdTi/r7Fitgk0SxWphLjdPV1eXuru7lUqlijaB9Pf3a2RkpODnNjU1VTOfZyEEGqXKPCLt2C3JSj/8unTzSytdIgBXgM0bG0uqWaikdDqt3bt3S9Kyvgb+eBL79u2T5E666XRaY2Njisfj2TEixsbGFIvF1N7ernQ6nfMvP5FIZPOOjY3p5MmT2rdvn9LpdM74FPlmZmZKSvPL6Y9BUa48QV1dXRoYGNDs7GzB+ZLJpDo7O5VKpXKuMvH7vZSqUI1JpRFolOpv/od0y09KTVukH36NQAMAPL29vRoYGNDY2Jik3GaEe+65R0eOHJGk7GWefX19Gh8flyR1dnaqo6ND8XhcIyMjGh0dzQ62NTIyorGxMR07diwnKDl06JC6urqUSqWyfUTy+cuQ3BUdBw4ckKTsFSBDQ0PZ4Gh6elqpVEqDg4OampoqS558g4ODq3boHB8f1/DwsAYGBrIDduV/noVMTExkP08/qKumGhBGBi3VH90ivaBH2rVXat0l7Xxm+dcB4IpWbyODBgOGYNr4+LiSyaQkac+ePZqcnNTw8LDi8bgSiUTO64GBAR04cCDbdyE4ra+vT93d3QX7TGC5So0MyuWtpTp/SmreJu2+myADAErk/9uXlpoBduzYIck1i+zdu1eSdPTo0ezr8fHx7Gt/zAm/30Mwn1/DgepG00kpFi5Kl85Kza3Sfx6Urr5duumuSpcKAKpaIpHQ+Ph4dkyN9vb2nLRgE4S0NL5ELBbLvu7o6NDhw4ez/RbS6bQOHz6sTCazbCAsVCeaTkpxZkYavlk68HHpc4PSnT8n3f075V0HgCtevTWdlFsmk1FPT0+27wXCoemkmrW0S78/K936qkqXBACuWENDQ5UuAtaAppNSNRCTAUAl+R1IUVs4e5bixHeljySkJx+sdEkAAKgpBBqluPCUdPyodPGMG0vj6mdVukQAANQEmk7Ces2fVLoEAADUDGo0wpr/oXRurtKlAACgJhBohPVXndKX/7zSpQAAoCbQdFKK7TdJ945IbbsqXRIAQAn84c9TqZT6+/vV2dmp9vZ2jYyMZNN2796tTCajkydPKpVKaXR0tGx5/JvJTU1NKZlM5tz8bXh4WENDQ9q/f/+yQcdSqZSmp6ez9zqJxWLZEVCL3StlamoqOyja0aNHdfDgweq6sZq1ti4eklol2bm5ORupP7nD2iPvi3YdAK5IZ8+etQ888IA9e/ZspYtSF6anp60kOzs7u2KatdZOTk7akZGRsuaZnJwsmMdaa5PJ5LK0RCKRnTe4PEl2enq66HYGl5VMJm08Hi+Yb6X9a25uzkqyklptmc/PNJ2U4vQJN/T4UycrXRIAQIn8u5+uliYpe9O2cuaJx+Pq6OjI3rXWNzExsezuqsPDw5KUc4t4fxn5aUFTU1M5A5l1dXVpamoqe2+YakCgUYq5R6TP/pY0/2ilSwIAKKPgSXn//v1lz9PX17esecS/UVzQ0NCQ+vr6Ci67u7u7aPnj8bgOHjyYfe/fuK5YIFQJBBphvW1SetlApUsBAFVjbGxMfX192ZNcd3d3ts9AtUqlUhoeHlZPT082Lb9fQzny9Pb2Kp1O59Qw5C8jnU4rk8kU7YOxUv8MSTm1I4cOHVIikaiqPhp0Bg1rQ3OlSwDgSnPqcfcI2hxzHdUvnpNOfGf5PE97nnt+8ntu0MGg2I3uHk5PPSnNHc+d1rxN2rFbpRobG1NXV5dGRkaUTqcVj8fV2dlZVVX3hfT29q56Mi5HnlgspkQioZGRESWTSaVSqaK1Ipcrk8lobGxMk5OTkSx/rQg0whr9JWn33VL8jZUuCYArxbG/lr7wgdy05+yXfvaga9JNvWz5PO/xxvv5519zIxsH3ZuS7jwgffsTrlk4aPfd0hs+UXLRurq6lMlkskGGJO3du7eq/lGvJFgbMDExoUQiUfY8fX196unpUTKZVCaTWfbZ+LUVwc8wKJ1OZ69AWcnAwIDGx8er7rMn0ChFc6s7+Jq3SsePSTueUekSAbiS7P1l6dZX5qZtjrnn1uul3i8Un/d/fLhwjYYk3XGvtGtf7rTmbaGLl39iTafTyzo7Vqtgk0SxWpjLzdPV1aXu7m6lUqmiTSD9/f0aGRkp+LlNTU2t+nkODw9rYGBAHR0d2Sasagk4CDRKcdUzQkX4AFBW2651j0KaNi01kxRy1S3Fp225yj0uUzqd1u7drrklv6+BP57Evn0uoOnq6lI6ndbY2Jji8Xh2jIixsTHFYjG1t7crnU7n/MtPJBLZvGNjYzp58qT27dundDqdMz5FvpmZmZLS/HL6TQ7lyhPU1dWlgYEBzc7OFpwvmUyqs7NTqVQq5yoTP2hYif9Z+kHG4cOHV7xSZb0RaJRiccH9I9i4pdIlAYCq09vbq4GBAY2NjUnKbUa45557dOTIEUnKXubZ19en8fFxSVJnZ6c6OjoUj8c1MjKi0dHR7GBbIyMjGhsb07Fjx3KCkkOHDqmrq0upVCrbRySfvwzJXdFx4MABScpeATI0NJQNjqanp5VKpTQ4OKipqamy5Mk3ODi4YodOSRofH8/WTPgDduV/nvnS6fSyq1JisVhVBRoVH2irXA9FOWDX8Ulr391q7WNf9wbs+sPyrwPAFa/eBuwaHx+3vb29y9L6+/uz7/3BpZLJpB0fH1/2ur+/305OTmbzB6f19vZmX2N1DNhVKxLvkZ716kqXAgBqgv9vX1pqBtixY4ck92987969ktzQ2f7r8fHx7Gt/zAm/30Mwn1/DgepG00lYz6mNDk4AUGmJRELj4+PZMTXa29tz0oJNENJS58VYLJZ93dHRkdPnIJ1O6/Dhw8pkMssGwkJ1MtY1O9Q8Y0yrpLm5uTm1traWd+GPTkkHf0Lq+3fpyf+W2juk65dfggQAl+PcuXN66KGHdPPNN2vTpk2VLk7VyWQy6unpyfa9QDgr7V/z8/Nqa2uTpDZr7Xw510vTSVgT75G++9lKlwIArjjBe3qgdtB0UoprnyP91oNL160DANZdMpmsdBGwBgQapWhskrburHQpAACoOaGaTowxHcaYfmNMl/ccW0teY0zCe3QZY5LGmIIdHrxpRdexbk5OS3//c9LMQ5UuCYArQL30nUN1qdR+FbaPxqi1dthaOyZpTNLBNeYdlTTjTZv23ufwgo/iQ76tp3Nzrl/G+VPSrr1Lw/cCQBk1NjZKki5cuFDhkqAe+fuVv5+tl5KbTowxOUOaWWvTxpiCFzCXkLfbWjsVeJ8psJgOSdV3+7/uj1a6BADq1IYNG9TS0qITJ06oqalJDQ3010d5LC4u6sSJE2ppadGGDevbayLM2hKS8gd3nzHGxPOChlXzWmsnAundknIuhjbGdFlrx4wx1dfz59J5yTRKjXRvAVBexhhdd911euihh/T973+/0sVBnWloaNCNN94oY8y6rjfM2TJWJL19LXm9ppEDksattalAekyFazhyGGOaJTUHksLfcnAtPrRHuvP10t2/uy6rA3Bl2bhxo2655RaaT1B2GzdurEgtWTn+lsfWktdaO2WMSUtK+jUY3qT9wcBjBYOS3h1i3WvXer30k++Xtl23LqsDcGVraGhgwC7UjTChTUbLay/aVbj2oaS81tqMXEfQUWNMzOvHcbjE8gxJags8dpU4X3jbrpFe/Btc4goAQEhhAo2JIunHwuT1LmudDaT5HT79DqT7jTG9xpheL22w0OWv1trz1tp5/yHpVAnbsDZnZqRvf0I6m4lsFQAA1KOSm068K0ey770rS455tRJ+n4uMtTa9Ul5jzIxyAxF/vvwOpTLGjEgasdZW9uqT2Yel0V+S3vKlihYDAIBaE7aPRrd3JchRSfvkrhjxDXrpwyvl9fpmHPJqLCSpU9Ke4Eq8DqH+9AFjzEihQKQifnVCatpc6VIAAFATuHtrKfy7t77lS+6+JwAA1BHu3lpNPv1O6Ztjq+cDAADcVK0kTZtdTcaGTdL3xqWWHZUuEQAANYFAoxRX30ZHUAAA1oCmEwAAEBkCjVI8dr/0h1dLj3+r0iUBAKCm0HRSCmulhfOSrHTXO6Srb690iQAAqAkEGmG9oKfSJQAAoGbQdBLW9OelE/9d6VIAAFATCDTC+tTbpW+Wet83AACubDSdlOLq26S3fkXafnOlSwIAQE0h0ChF02YXbAAAgFBoOinF7PelT/6GNHe80iUBAKCmEGiU4sxJ6f6/kc7OSu0d0padlS4RAAA1gaaTsN70qUqXAACAmkGNBgAAiAyBRlh/8ULpC3+0cp6Fi9J//Jn05Q+55hYAAK5QBBql2HqNdNdvur4ZF57yhiNfQcMG6YFPSZ9/n5R6uTT36HqUEgCAqkOgUYq266XOP5C2Xbt63vOnJWOkN49Lv/5VaXFB+oefd7UcAABcYQg0SnH+lPTwl1wQsZIffVv609vdc0ODtP0m6cDfSD/6lvTgxLoUFQCAakKgUYonvyd99NXS7EMr57vvL6WNW6WrnrmU9rTnS79xTLr1ldGWEQCAKkSgEdbPH5b2vnl5+rl56Vtj0r43S41NudPab3a3mn/gk64ppVTWSqdPSCe+K53NXFaxAQCoBMbRCOua2wunf/ez0qVz0nP2F57++Dekw2+Ufiopvegtq6/n1OOuI+mpHy6ltd0o9f6btGVH2FIDQHksLkqy7rX1nhsaXd+0hUuSXVhK96c1Nrn5Fi4sX17TJvd88dzyaY0bXTP0wsXlf9JKXe6l87nlkdx8DY2uvIuXcqeZBmnDRjfPpQId/zc0u229dEGyi3ll2iA1bnBlze+XZ4ybd7VtjWq5q32Ghba1TOov0Eh2SJsCFTU//WfS835Omvpf0md+KzfvTS+R3vBP0oUzUvKm5ct6x9el1uvcpaqS+7KP/KG0a+/yppDHvynd+GNS7IbC5bruTmnfr0pH/kDqeLl09bOW51lclB4cl575Cnely55fdoHN5nYXcJz4jtTS7vJ+9DVS2w3SzS+Vrn2utO06afN2t0PNPizNPCSd/pGb79SPpGckpFsS0vFJ6d//2OXdcpW7kmb7TdJtP+2We3Ja2rjF3d/Ft3Gr2yEvnHFX3AQP2g2bpI0t3gFwwX1GDRvczo/oWOsexiz96C1edD9Q1rrnxib3XS5cdKPb2sXAw0rbn+6WNfuw+5FZXFiavv3p0qY2af6Hbuj94Lwt7e7ePxfPSt//j6X1+Y9nvtLthw99UXrqhJvuL/uGF0g7dksn/tubN1CebddKt7/W/fh/5S+Wl/eFb5E2tUrfHJOeeCB3+jM6pY6XSY9/S5r8qJfurXPrtdLdv+O29VNvly6eyZ23873uGDj6Eem//2UpXVZ61mtcLeWPHpA+838H5ltwn88bPuGW+7f7vc8p8Bm+9s+lp/+Y9OU/l776P73jxjt2bvtp6ZVJ99n/1SuW0v1j613fc89/8zrpsfv9L909vfpPpGe/Tpr8mDT+e9lkyUo3/7j0+r+Vzs1JH7xt+XLf+S133P/DL0jf+5fcMv3k+6QX/Zr07U9IY78SOM6t+/3q+6J7+76r3b4W9Navut+0T79Duv/judNe8k4p8R73fX/sNbnTWq+X/q8H3Ov/9/nSqcdyp7/p0+437l/fL33pT3OnPf8N0s/8ufTkd6W/fFHutMaN0u+dcK8/co/7fQ7q/qh0x73ue/mX38mdduurpJ/7e+mpJ6U/foaW+e1H3H749wek6c/nTnvVH0sv6JG+OSp9oi932q590q96ffXef83y5b79fjfy9Cd/ffkdwl/229JPDErpf5U+/rO507bfLL3ja+71n97ujvWgN4+7427896Wv/GXutH2/Kr36g+6P8Id+fHmZyqT+Ao17fl/aGjhJXh93z7v2Sa94f27e1qe558am5dMktzNJ0vN/UXrmT0lX3Sp945D7Yc8PNF7xfvfDu5LO90oP/4f0d/ulX/6s1LZradqjU9Jn3yU9eswd0NfdKb18oPByFi5JN75I+s5npK//3VL626bcj/jn3+d2dMn9GG69NnBTOO9H/8nvuQP/qSdd044faHz4xa5mJujX7nMBz+cGXMAWdNdvuityfnCf68fiMw1S6y7pnd4B/uG7XOCTDUQapJ/9iDsAvjoife1vXbq8AOXWn5J+/F3uPjP/1OMv1D01Nkm/9Gn3+lNvc8GRP80Y6WX97gf32/8sHfurpXmNcfvB3b/rfohHf3lpHj/P/o+5k/PEe9x3Irt0Un/RW9zn9L0J6QsfyD0JXn2bdO//dIv5yxfnnSQXpTf+sxS7UfrcoPRfn849mb3ordJdb5fSX5BGf2kp3VoXTL71y265H3yWdPqJpenS0o/IxHvcyTnI/xH50bel1Mtyp23cJv0/3r17/u6AC2KDXv/30rNe5favI+/NnXb7z0j7/5f7Qcv/0ZOk331CamiW/i0pff9LudNe+yG3j/7gPunT73T7QUOje376i12gYRekf/+gSws+nv+L7pj8wX3S98Zzp7XvdoHG2VnpB1/xAjBv2ReeWlr//GNu//anm4bAvzyzFCT70/yAe0Oz+/6y6zTu2PJdH3fHUXD6lqvctGufLT33wFK6JF3zbPfc3Crt/RVv9caVIRijP6dLuuku5ezf/rH8tOdJL/2twLxyZZTcH4C7fzdvucbt25IUf6P7w+MzRrrhhe71dXe6YCa43JZALepP/5nbB4PL9a/Ie/4bpZteuvR5Skt/qnbeKt2bUo7gH5pXJpf/hu681T3fca+0M+/Glu3e3bS3Xbd8uSbwZ/Pu31ve9Hz9Hvd8S+fyW0r454XmbcuXK7nPVpLueof03NfnLdc739zwwuXzBj/DQsv1y7Hvze6PYdA1d7jnq+9YPq//nUrueL+UV7vT3uGen9MtXfe83Gk7vEAqdqP0mj+TPvAry8tVBsbmVynVKGNMq6S5ubk5tba2RreiP322dOfrlw5iSToz42oISvkXn/mB9Nevdj+or3i/+1H8yoelB/5Zuvp2t6M8/cWll+dsxvXhOP0j90O7qc2dnO2iO/iDB3Ixly4sVRX+4D7X3+TimaXt2X23W+5j97vyS8r+wLTvdkHI6Sek9L+5akj/sWGT9Lyfd9n/86A7uS8ueNMvSvE3uR+L73xGevDI0r8ka13t0PN/wf2j/vz7lPPPrKFB+hnvpHrkDwNl8vK8oE+6YZ/7d/qNf8j913bd86SX/KYry6felvuvTZLuHXEH7hf/2J2ggyedO1/vPotHjkpTH1uaJuP+Eb/kN90y/s/AUrpf43DXO12T17c/4f51B0+ST3+x+9c285Cb7p+QTKP73ONvcMu9/+Ou5iE47zNfIW29Wnrsa9LJB3PLu/1m6brnum39wVcCy22QGprcOiU3b85yjftx2hxzfYSeOrEUDJgGV8O17RoX8J5+fHlA0LLDLePCU16tS0MgoGh03x+AqjI/P6+2tjZJarPWzpdz2QQaYRUKNP761a524nUjpS3jqSelphbX5PBvH5C+9U/Sj71Vet4vunY4AADWUZSBBme1yzX/mGuC+Jm/WD2vz69SlaQf75de/tvlLxcAAFWAQCOs+Bvd2Bi+b3/C9Rm47TXF51kJ1cgAgDpGoBHWy/pz33/rH6VbfjK3YxgAAJDEgF3hPXa/lHnEvT5/ynWUu+PeypYJAIAqRaAR1qE3uCsOJHf50zu+QaABAEARBBqX4/QJdxlfQ2OlSwIAQFUi0AirscmNgHn6CemDz5T+639XukQAAFQtAo2wNm5xt4v/zmckGenGEINrAQBwhSHQCGvb01ytxg/uc5e5coMzAACK4vLWsH7Bu9nNh1+yNK49AAAoiBqNtVhclOYfXbrRDQAAKIgajbCOvFd64r+kd00vv1UyAADIESrQMMZ0SOqSlJbUISllrc2EzWuM8e+BG5O0T9Iha+2UNy0uyZ++T1JPsXVUxIWnpNmH3dDhDc2VLg0AAFUtbI3GqLV2j5QNJA5K6l5D3lFJ91hrJ4wx7d773d60hLV22JuvX9IRSXtCljM6G7dITzwgpV4u9fxrabeGBwDgClVyHw0vWMiy1qa1VPMQNm+3X4PhyXjzxSUNBtLHJMXzl1dRG7e65/nHCDIAAFhFmM6gCUkzeWkzXnAQKq+1diKQ3i1pxEufktQTmBbz581fgTGm2RjT6j8kbSt1Qy6LH2i0XLVyPgAAECrQiBVJb19LXmNM3BiTlDRurU356dbasUD+A5ImivTRGJQ0F3gcL1bwsnrWq6QtO6WWQpsNAACCynF5a2wteb3aiyFJu40xXfkZjTExuc6kxfqADElqCzx2hSjH2rXtkq6+XdpCjQYAAKsJ0xk0o+W1F+1e+pryWmszxphRSePGmO15NRdJSZ3Frjix1p6XdN5/b9arv8Tsw+45/sb1WR8AADUsTI3GRJH0Y2HyGmMSxpjZQFrae852+PSuNklaa9PGmJhXu1EdTj0uPfQFNxQ5AABYUcmBhnflSJZ3JcixwNgY2atDVsk7o9xAJC4pExhHo0vSlB9kSNpfVeNobNzinh/5amXLAQBADQg7jka314HzqNxgWsH+E4Ne+vBKea21U8aYQ8aYXi9fp7xxMryAZNR77S83IynbWbTiFhfc82P3S3veVNmyAABQ5Yy1ttJlKAvvEte5ubk5tba2RreihYvSJ39DSrxbaqX5BABQ++bn59XW1iZJbdba+XIum3udhNXYJL1upNKlAACgJnD3VgAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEBkCDQAAEJkNYTIbYzokdUlKS+qQlLLWZsLmNcYkvGwxSfskHbLWToVdBwAAqG6hAg1Jo9baPVI2IDgoqXsNeUcl3WOtnTDGtHvvd69hHQAAoIqV3HTinfSzrLVpSYk15u32azA8mbDrAAAA1S9MH42EpJm8tBljTDxsXmvtRCC9W9LIGtYBAACqXJimk1iR9Pa15PWChwOSxq21qbDrMMY0S2oOJG0rMi8AAKiQclx1EltLXq/pZEjSbmNM1xrWMShpLvA4HqIcAABgHYQJNDJaXrPQ7qWvKa93NcmopFFjTCzkOoYktQUeu4oXHQAAVEKYQGOiSPqxMHmNMQljzGwgLe09d4RZh7X2vLV23n9IOlVkXgAAUCEl99Gw1qaNMdn33hUixwJjY8QlZay16ZXyGmNmlBtQ+PP542gUXQcAAKgtYcfR6DbGJCUdlRtoKzi+xaCXPrxSXmvtlDHmkDGm18vXKWlPiesAAAA1xFhrK12GsjDGtEqam5ubU2tra6WLAwBAzZifn1dbW5sktXndEcqGe50AAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIEGgAAIDIbAiT2RjTIalLUlpSh6SUtTYTNq8xJi4p4WXdJ6knMK3DmzbjzTdmrU2HKScAAKgOoQINSaPW2j1SNiA4KKl7DXkT1tphb1q/pCOS9njTuvxp3vQRSX0hywkAAKpAyU0nXrCQ5dUyJMLm9WozBgOTxyTFA/McKLVMAACguoXpo+E3ZwTNeIFDyXmttVOSegLpMX96IN+kMabDGJOQNB6ijAAAoIqECTRiRdLbw+a11o4F0g5Imgj09fCbV6YldeflzTLGNBtjWv2HpG3Fiw4AACohbB+NQmJrzWuMicl1GN0TSE5IGpDrCDpijJG1tlAfjUFJ7w5TUAAAsL7C1GhktLz2ot1LX2vepKTOvCtO9llrJ6y1KUm7Je3P7/PhGZLUFnjsKm0zAADAegkTaEwUST+2lrze1SZJa23aGBPzajfiko76ebxOpEMqUGtirT1vrZ33H5JOlbQVAABg3ZQcaOSPZeHVMhwLjo3h1zyUkLdL0pQfZEja702bkhtXI2iH14EUAADUGGOtLT2zCxj65God9kkaCgQPo5KOBsbHKJjXS5/OW3TGWrvdmy8hV7OR8aZNlDJgl9chdG5ubk6tra0lbxMAAFe6+fl5tbW1SVKb10pQNqECjWpGoAEAwNpEGWhwrxMAABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAg0AABAZAo0SnTp3Ue889DXd9nuf0ye/9miliwMAQE3YECazMaZDUpektKQOSSlrbSZsXmNMXFLCy7pPUk9wOcaYhDdPWpKstRNhyhmFf5w8rv/99cd0adFq+onTlS4OAAA1IVSgIWnUWrtHygYSByV1ryFvwlo77E3rl3REkp83IanbWtvnzTcuaXfIcpbdidPndU3rpkoXAwCAmlJy04l30s+y1qa1VCtRcl6vNmMwMHlMUjwwz4ikgcB8naWWMUqzZy5q+5amShcDAICaEqaPRkLSTF7ajBc4lJzXWjslqSeQHgtM75DUbq3NGGPixpiYF2xUXObMBW1v2VjpYgAAUFPCBBqxIuntYfNaa8cCaQckTXh9NOJyAYfft6PXe72MMabZGNPqPyRtW3ULLsPsUxcVI9AAACCUsH00ComtNa8xJibXYXSPl9Qu1wl0wqvVSEmalWQKLGtQ0rtDlnXNZs9c0DOu3rpeqwMAoC6EqdHIaHntRbuXvta8SUmdgStO0pIy/vu8q1TyDUlqCzx2rVL+y5I5c1HbW+ijAQBAGGECjWKXmB5bS17vapOktTZtjIl5tRsl98ew1p631s77D0mnSp13LWbPXKDpBACAkEoONPI7ZXodN48Fax38K0dKyNslacoPMiTtt9ZmvPmOeWn+fGmvA2nFnL2woPOXFrnqBACAkML20eg2xiQlHZUbaCs4hsaglz68Ul4veBj1XvvzZiSl/PkkJY0xk3J9Nyp+eevsmQuSRI0GAAAhhQo0vBqHAe/tWN607lLyeumFOnf60zOS+sKUK2qZMxclSbHN1GgAABAG9zopwaXFRUlS84bGCpcEAIDaQqABAAAiQ6ABAAAiQ6ABAAAiQ6ABAAAiQ6ABAAAiQ6ABAAAiQ6ABAAAiQ6ABAAAiQ6ABAAAiQ6ABAAAiQ6ABAAAiQ6ABAAAiQ6ABAAAiQ6ABAAAiQ6ABAAAiQ6ABAAAiQ6ABAAAiQ6ABAAAiQ6ABAAAiQ6ABAAAiQ6ABAAAiQ6ABAAAiQ6ARUlOj0blLi5UuBgAANYFAI6S2lo3KnLlQ6WIAAFATCDRC2t7SpMyZi5UuBgAANWFDpQtQbqkvTmvzlm1lXebjc+eyr2Obm/RY5twKuaUHnzit/+8/HtKXH3xSZy4saEvzBt3+tFbtuXG7XtjRrtuubVVDg1lxGQuLVidPn9cTp87r/KUFLSy6tOamBm1r3qBtm5q0ddMGtTQ1rrqsYqy1urRoZa1kjGQkGWO8Z/e6XljrttP6ryXvvUuX934xO20pjwL5Cs2vbHpuvsVFm11usfmVkx7Il1e2xSLlXzZ/qWWz/rTg+kosm5cv5zPLm3/5Z5b7XsFyBl4vBpabk7/o97rCtBXmXGm+ldgVZly5LCstc5V1rnE7VlzsWj+AyxHB70kUv1BR/OyZCEpa7nKee+p0eRcYUHeBxsfv+74aN20p+3JvbG/RNa3NirVs1AM/nC+Y5+yFBSU/9x197L6HtXNrs1793OsU27xRmbMX9K1H5/SBz31HFy4tqnWTCzx2bW/R5qZGbWg0mj97SU+ePq8nT5/XiVPuebGE3wJjpE0bGrV5Y6M2NzVqU1ODNjQ06NLioi4tWl1asLq4sKiFxcDzotWlhcWSl78sAJFLDL43Rmrw8ig4T4H5JSM/Nip8Ult+ElKBad5cbjtWPJmj0krdjxrMUp78/WjF5a+47pVnXu33euXZV1n2ZZV7tXmLZ7ic9UYhisMwimN7paBuzcuMpJzld+nsUxEs1am7QOOLA3ertbU1suXHWpo0W6DpZPL7M3rX6Df0aOasfudVt+kNP/Z0NW9ozMlz7uKCvvZIRv/50Iy++6NTevCJ07pwaVGXFhe1tXmDrtrarDtviGnn1mZd07pJV29r1s5tzWrZ6GotGo3RuUsLOn3ukk6du6RT5y/p9LlLOntxQee8x9kLC7q0aNXUaNTY0KANDUYbGo2aGhvU2GC0oWHptZ/HaOV/o8F/rMX+iWbnX+GfrAJ5Fu3Sj2F+DUoweMmZHkwzSz+z2ZOTd2JS3sls6SSXf3LzT2yFl11ofml58NTQsHy5hebXsuWt8LrgNgfmX21ZxeZfoWwN2WkFgoESll1w/jqqFQPq2fz8vNreH82y6y7QiNr2lo2aO3NR1lrNn72k+9In9amvP6rPfvNx3bmrTZ95+0v1jKu3Fpx3U1OjXtSxQy/q2LHOpQYAoDIINEKKtTTpwsKifvsfv6nDk4/IWummHS36o67n6nXxXWpcY38JAADqEYFGSLGWjZKkQ8ce0btecatee+fTdEN7S4VLBQBAdSLQCCm2uUmStKmpQb/+E8+ocGkAAKhujKMRUqzFBRqvuOPaCpcEAIDqR41GSDe2t+gPXnuHXhe/vtJFAQCg6hFohGSM0ZtefFOliwEAQE2g6QQAAEQmVI2GMaZDUpektKQOSSlrbSZsXmNMXFLCy7pPUk+h5RhjkpKGiq0DAABUt7BNJ6PW2j1SNpA4KKl7DXkT1tphb1q/pCOS9gRn9oKRfklDIcsIAACqRMlNJ16wkGWtTWupVqLkvF4AMRiYPCYpnj+PXC1IutTyAQCA6hOmj0ZC0kxe2owXOJSc11o7JaknkB7zp/sJxpgua+1YiLIBAIAqFKbpJFYkvT1s3rwg4oCkiUD/jZikzGqFMcY0S2oOJJX33vAAAOCyleOqk9ha83pBRZdy+3nst9ZOlLCsQUlzgcfxEOUAAADrIEygkdHy2ot2Fa59KDVvUlJnoDYjIelwieUZktQWeOwqcT4AALBOwgQaxWoZjq0lr3e1SdJamzbGxLzaDUnab4zpNcb0ynUIHSzUD8Rae95aO+8/JJ0qeUsAAMC6KLmPhhcQZN97V4kcyxsbI2OtTZeQt0vSlB9kyDWXpJQXoBhjRiSNeFetAACAGhN2HI1ubxCto3IDbQX7Vgx66cMr5fWCjlHvtT9vRlLKf+MFH73e2wFjzIh3tQoAAKghxlpb6TKUhTGmVdLcI488otbW1koXBwCAmjE/P68bbrhBktq87ghlU083VWuX5H9QAAAgvHZJBBpF+AN+7VJ9dwzdJncpL9tZP66UbWU76wvbWV/87cwfbPOy1VOg4TtV7mqfahLo18J21okrZVvZzvrCdtaX4AUc5cZt4gEAQGQINAAAQGTqKdA4L+kPvOd6xnbWnytlW9nO+sJ21pfItrNuLm8FAADVp55qNAAAQJUh0AAAAJGpqctbveHLuySl5W64lvLvn3I5eauRd++YhPd2n6SeFbY1LknW2ilvu2O1MmR7mLLX8nfq3d9nQpJWK3MtfZ9eWQ9aa/fkpdfdsbrCttbVsbrKdtbNsbrCdtbVsbrS/rlux6m1tmYekiYDrzskjZYjbzU+JPUHXwe3p0DeEUnWe4zL7ewV34YSt7PkstfydxrYxuCjv0jemvg+vR+duPsZWft3VQvf6yrbWjfH6irbWTfH6irbWVfH6kr753odpxX/EEJ8WB35B7Ck2cvNW40P7wCYDbzv8HbkjiL5eyXFqnEnL2FbSyp7LX+n3vZ15aUV/OGqxe8z/8e6no/VAttal8dqkRNw3R2rBb7PujpWV9o/1/M4raU+GgktHxp1xq+6uoy8Vce6qreeQFLMey46NKy1NmOrrGqyVCWWvda/0zH/tVc1O7ZC9pr+PsWxKnGs1vJ3WjfH6ir757odp7XURyNWJL39MvNWpeDOLumApIkVduaYd0BIrg1uxFqbjrJ8ZVRq2WNF5q/67zT4vRljYpLaV/l+avn7lDhWOVYLq/rvtB6P1WL7p7d9hZT9OK2lQKOYWER5q4K3M3RJ2rNCtmynHGNMWq6tcHfkhSuPyy17LIIyRSkpaWCVPLX8fa4kFlHeqsCxuqpYBGWKUl0dqyXun1IEx2ktNZ1ktDx6avfSLydvtUtK6lylaq4j8DotqcPrIVwLSi17RjX+nXoHeqKEatZa/j4ljtXMCnlq+bvlWF2ulr7P/P0zo3U6Tmsp0Jgokn7sMvNWLWNMv6SktTZtjIkVqury2siOFJi97Lf6LbeQZa+H73SvVjkwa/n7DOBY5VgtpJa+07o6Vovsn+t2nNZMoJHf7uVFjccC1VZxP5JcLW8t8Nr9pvwdQ9L+QtsqF0UHq/cSksZqZFtXLHu9fadyPcCX/QjVw/cZPLHW+7GaH0TU67Gat511e6wW6atQN8dqsf1zPY/TmrrXibdxfZKOynW8GQp8KKOSjlprh1fLW+28sk/nJWestdu96fnb6g/IkpG021q7Wrti1Vip7PX0nUrZfxW7rbV9eek1+X0aYxKSOuWuzR+W24Yxb1pdHavFtrXejtVVvtO6OVZX2k5vel0cqyXsn+tynNZUoAEAAGpLzTSdAACA2kOgAQAAIkOgAQAAIkOgAQAAIkOgAQAAIkOgAQAAIkOgAaBqeYMGJb1xDwpN7/Wmx9a5aABKRKABQJIbxMgYM22M6fdO4JPewz+ZT/u3hfbSu1ZbZhl0yN0Rs+AQyNbalNwAQlV/Z1DgSlUPd28FUB4xuZsupSXJGNMpacY7mcsYc0juxD8lN/RyLd27AkCFUKMBwNeef0+DIGvtlLyaA2vtRDUNKQ2gehFoAPAdLlMeAMii6QSAJKmUGgprbcbrp3FQru9EyuuomZQ0IndHyw65G1YNyDXHJJR3gypvnriXf18pN6Py7zzpzRMrdT4AlUWgASAUa+2U11/Dfz9hjJmQ69/RLUnGmG5JXd6dH6e8jqQxL1DpkJS01u7x8rYbY/r9u0SuoFfudtcT/nxRbB+A8iLQAFAOJ72HLyNX8xB83+4990maybtkdV8J6xiTNGmMSUs6JCm19uICWC8EGgCikllh2lTeJaulBA0z1trtXtPNAUmjck00AKoYnUEBrFVsjdMPyfXbyCo2IFeeQWNMh7V2yuubkSlhHgAVRo0GgBzeSb9DrrOmjDG9ko55l7cqUKMwY4wZkwsoDnjTJvLmnZILKjokDRhjBrw+HgPGmKTcYFuSVHBArjwnJSWMMTNyzTCHVskPoAoYa22lywAABXmjj06tNL5HKXkAVA5NJwAAIDIEGgAAIDIEGgCqWVpS30p3b5W7NHZmXUsFoGT00QAAAJGhRgMAAESGQAMAAESGQAMAAESGQAMAAESGQAMAAESGQAMAAESGQAMAAESGQAMAAESGQAMAAETm/wd3Wf6CsSiuLwAAAABJRU5ErkJggg==",
       "text/plain": [
        "<Figure size 600x400 with 1 Axes>"
       ]
@@ -248,7 +250,7 @@
     },
     {
      "data": {
-      "image/png": "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\n",
+      "image/png": "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",
       "text/plain": [
        "<Figure size 600x400 with 1 Axes>"
       ]
@@ -264,7 +266,7 @@
        "(<Figure size 600x400 with 1 Axes>, <AxesSubplot:xlabel='Time [s]'>)"
       ]
      },
-     "execution_count": 7,
+     "execution_count": 6,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -284,7 +286,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": 7,
    "metadata": {
     "execution": {
      "iopub.execute_input": "2021-09-26T22:41:57.710348Z",
@@ -298,13 +300,13 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "\r\n",
-      "    _           _         | Version 1.4.4.post41.dev0+g10fad9b3\r\n",
-      "   /_\\  _ _  __| |___ ___ | Python 3.7.10 on Darwin, 10/10/2021 12:26:03 AM\r\n",
-      "  / _ \\| ' \\/ _` / -_|_-< | \r\n",
-      " /_/ \\_\\_||_\\__,_\\___/__/ | This program comes with ABSOLUTELY NO WARRANTY.\r\n",
-      "\r\n",
-      "No output file found in the working directory.\r\n"
+      "\n",
+      "    _           _         | Version 1.5.0.post18.dev0+g3d8a275a\n",
+      "   /_\\  _ _  __| |___ ___ | Python 3.9.6 on Linux, 10/29/2021 09:55:35 PM\n",
+      "  / _ \\| ' \\/ _` / -_|_-< | \n",
+      " /_/ \\_\\_||_\\__,_\\___/__/ | This program comes with ABSOLUTELY NO WARRANTY.\n",
+      "\n",
+      "No output file found in the working directory.\n"
      ]
     }
    ],
@@ -316,11 +318,10 @@
  "metadata": {
   "hide_input": false,
   "interpreter": {
-   "hash": "b8c542af61804583455bb3cc02c5acff1b7eab71b36b048085e6e502c5a0f30d"
+   "hash": "491bc57f30212ab10e081de3c9da13bbea8cb936a32794256be1d301e32fe2dd"
   },
   "kernelspec": {
-   "display_name": "Python 3 (ipykernel)",
-   "language": "python",
+   "display_name": "Python 3.9.6 64-bit ('a': conda)",
    "name": "python3"
   },
   "language_info": {
@@ -333,7 +334,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.7.10"
+   "version": "3.9.6"
   },
   "toc": {
    "base_numbering": 1,


Test patch:
diff --git a/tests/test_snapshot.py b/tests/test_snapshot.py
index 5941f43dd..c810d5fed 100644
--- a/tests/test_snapshot.py
+++ b/tests/test_snapshot.py
@@ -20,7 +20,10 @@ def test_save_ss(self):
         Test saving a snapshot.
         """
 
-        ss = andes.run(andes.get_case("kundur/kundur_full.xlsx"))
+        ss = andes.run(andes.get_case("kundur/kundur_full.xlsx"),
+                       default_config=True,  # remove if outside tests
+                       )
+
         ss.TDS.config.tf = 2
         ss.TDS.run()