コード例 #1
0
ファイル: test_utils.py プロジェクト: robabsmith/SFC_models
 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()
コード例 #2
0
ファイル: test_utils.py プロジェクト: robabsmith/SFC_models
 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)
コード例 #3
0
ファイル: models.py プロジェクト: vishalbelsare/SFC_models
 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()
コード例 #4
0
ファイル: test_utils.py プロジェクト: robabsmith/SFC_models
 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()
コード例 #5
0
ファイル: models.py プロジェクト: vishalbelsare/SFC_models
    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
コード例 #6
0
ファイル: test_utils.py プロジェクト: robabsmith/SFC_models
 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()
コード例 #7
0
ファイル: model_runner.py プロジェクト: vishalbelsare/sfc_gui
 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()
コード例 #8
0
ファイル: test_utils.py プロジェクト: robabsmith/SFC_models
 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()
コード例 #9
0
ファイル: test_utils.py プロジェクト: robabsmith/SFC_models
 def test_cleanup(self):
     mock = MockFile()
     Logger.log_file_handles = {'log': mock}
     self.assertFalse(mock.is_closed)
     Logger.cleanup()
     self.assertTrue(mock.is_closed)