def test_register(self): Logger.cleanup() Logger.register_log('filename', 'log') self.assertEqual({'log': 'filename'}, Logger.log_file_handles) with self.assertRaises(ValueError): Logger.register_log('fname2', 'log') Logger.cleanup()
def test_solver_logging(self): Logger.cleanup() mock = MockFile() Logger.log_file_handles = {'step': mock} obj = EquationSolver() obj.TraceStep = 2 obj.RunEquationReduction = False # By forcing 't' into the variable list, no automatic creation of time variables obj.ParseString(""" x=t z=x+1 z(0) = 2. exogenous t=[10.]*20 MaxTime=3""") obj.ExtractVariableList() obj.SetInitialConditions() self.assertEqual([], mock.buffer) obj.SolveStep(1) self.assertEqual([], mock.buffer) obj.SolveStep(2) # I do not care what the contents are; I just want to validate # that it triggers self.assertTrue(len(mock.buffer) > 0) # Reset the buffer mock.buffer = [] obj.SolveStep(3) self.assertEqual([], mock.buffer)
def _FinalSteps(self): # pragma: no cover self.EquationSolver.ParseString(self.FinalEquations) self.EquationSolver.SolveEquation() self.LogInfo() self.State = 'Finished Running' Logger(self.EquationSolver.GenerateCSVtext(), 'timeseries') Logger.cleanup()
def test_empty(self): mock = MockFile() Logger.log_file_handles = {'log': mock} Logger('', endline=False) self.assertEqual([], mock.buffer) Logger('', endline=True) self.assertEqual([' \n'], mock.buffer) Logger.cleanup()
def main(self, base_file_name=None): # pragma: no cover """ Routine that does most of the work of model building. The model is build based upon the Sector objects that have been registered as children of this Model. The base_file_name is the base filename that is used for Logging operations; just used to call Logger.register_standard_logs(base_file_name). It is recommended that you call Logger.register_standard_logs() before main, so that Sector creation can be logged. The major operations: [1] Call GenerateEquations() on all Sectors. The fact that GenerateEquations() is only called now at the Sector level means that Sectors can be created independently, and the GenerateEquations() call which ties it to other sectors is only called after all other sectors are created. (There is at least one exception where Sectors have to be created in a specific order, which we want to avoid.) [2] Cleanup work: processing initial conditions, exogenous variables, replacing aliases in equations. [3] Tie the sector level equations into a single block of equations. (Currently strings, not Equation objects.) [4] The equations are passed to self.EquationSolver, and they are solved. The user can then use GetTimeSeries() to access the output time series (if they can be calculated.) :param base_file_name: str :return: None """ self.State = 'Running' try: if base_file_name is not None: Logger.register_standard_logs(base_file_name) Logger('Starting Model main()') self._GenerateFullSectorCodes() self._GenerateEquations() self._FixAliases() self._GenerateRegisteredCashFlows() self._ProcessExogenous() self.FinalEquations = self._CreateFinalEquations() self.EquationSolver.ParseString(self.FinalEquations) self.EquationSolver.SolveEquation() self.LogInfo() except Warning as e: self.LogInfo(ex=e) print('Warning triggered: ' + str(e)) return self.FinalEquations except Exception as e: self.LogInfo(ex=e) raise finally: self.State = 'Finished Running' Logger(self.EquationSolver.GenerateCSVtext(), 'timeseries') Logger.cleanup() return self.FinalEquations
def test_write_2(self): mock = MockFile() Logger.log_file_handles = {'log': mock} Logger('text') self.assertEqual(['text\n'], mock.buffer) Logger('text2\n', priority=0) self.assertEqual(['text\n', 'text2\n'], mock.buffer) Logger.priority_cutoff = 5 Logger("low_priority", priority=6) self.assertEqual(['text\n', 'text2\n'], mock.buffer) Logger('higher', priority=5) # Low priority messages have an indent. self.assertEqual(['text\n', 'text2\n', (' ' * 4) + 'higher\n'], mock.buffer) Logger.cleanup()
def OnRunModel(self): name = self.GetModelName() if name is None: # Not sure how we get here, but, go back to chooser frame self.FrameChooser.tkraise() return self.CleanupOnModelChange() Logger.cleanup() if not self.Parameters.LogDir == '': base_name = os.path.join(self.Parameters.LogDir, name) Logger.register_standard_logs(base_file_name=base_name) python_mod = self.Importer(name) try: self.Model = python_mod.build_model() except Exception as e: messagebox.showinfo(message=str(e), icon='error', title='Error') raise e if type(self.Model) is not Model: raise ValueError('Expected a Model, got {0} instead'.format( type(Model))) self.Sectors = self.Model.GetSectors() self.UpdateModelViewer() self.FrameModelViewer.tkraise()
def test_formatting(self): mock = MockFile() Logger.log_file_handles = {'log': mock} Logger('Format={0} {1}', data_to_format=(1, 'yay'), endline=False) self.assertEqual(['Format=1 yay'], mock.buffer) Logger.cleanup()
def test_cleanup(self): mock = MockFile() Logger.log_file_handles = {'log': mock} self.assertFalse(mock.is_closed) Logger.cleanup() self.assertTrue(mock.is_closed)