From 814549bf9f35d76f3e070c2a85f15b608f2a3935 Mon Sep 17 00:00:00 2001
From: jkriwet <jonathan.kriwet@eonerc.rwth-aachen.de>
Date: Tue, 5 Nov 2024 08:32:34 +0100
Subject: [PATCH] added simulation and calibration capability

---
 .../__pycache__/__init__.cpython-310.pyc      | Bin 157 -> 0 bytes
 .../calibration_class.cpython-310.pyc         | Bin 18874 -> 0 bytes
 .../energy_plus_api.cpython-310.pyc           | Bin 21651 -> 0 bytes
 .../__pycache__/utils.cpython-310.pyc         | Bin 3043 -> 0 bytes
 energyplus_calibrator/energy_plus_api.py      |  64 ++++++++++--------
 examples/e1_run_energyplus_simulation.py      |   9 +++
 6 files changed, 44 insertions(+), 29 deletions(-)
 delete mode 100644 energyplus_calibrator/__pycache__/__init__.cpython-310.pyc
 delete mode 100644 energyplus_calibrator/__pycache__/calibration_class.cpython-310.pyc
 delete mode 100644 energyplus_calibrator/__pycache__/energy_plus_api.cpython-310.pyc
 delete mode 100644 energyplus_calibrator/__pycache__/utils.cpython-310.pyc

diff --git a/energyplus_calibrator/__pycache__/__init__.cpython-310.pyc b/energyplus_calibrator/__pycache__/__init__.cpython-310.pyc
deleted file mode 100644
index cc656954d093f4c5933f27c989dd3fa3c11b6f1c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 157
zcmd1j<>g{vU|`t%t2hlrKL!!Vn2~{j!GVE+p_qk%fgyz<m_d`#ZzV$!NEku<a!9d?
zDM~HKFOEsgOD#&TEXXM>j!#a^$xJFrEXgmzAsQc_nU`4-AFo$Xd5gm)H$SB`C)EyQ
MaxoJF0|N^K01nS5ng9R*

diff --git a/energyplus_calibrator/__pycache__/calibration_class.cpython-310.pyc b/energyplus_calibrator/__pycache__/calibration_class.cpython-310.pyc
deleted file mode 100644
index a06ba46d2fd037c5de118254a50a2126fe8a3f69..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18874
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

diff --git a/energyplus_calibrator/__pycache__/energy_plus_api.cpython-310.pyc b/energyplus_calibrator/__pycache__/energy_plus_api.cpython-310.pyc
deleted file mode 100644
index 62f438879a721f3c291cee585ba7cb6b7f901289..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21651
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
BO_cxu

diff --git a/energyplus_calibrator/__pycache__/utils.cpython-310.pyc b/energyplus_calibrator/__pycache__/utils.cpython-310.pyc
deleted file mode 100644
index 31985f0c4c5f92099425d6221cbe3d778021570e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3043
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

diff --git a/energyplus_calibrator/energy_plus_api.py b/energyplus_calibrator/energy_plus_api.py
index 8542706..bc08172 100644
--- a/energyplus_calibrator/energy_plus_api.py
+++ b/energyplus_calibrator/energy_plus_api.py
@@ -34,13 +34,13 @@ class EPlusSimulationSetup(SimulationSetup):
         _default_solver: Default solver setting
         _allowed_solvers: List of allowed solver options
     """
-    sim_intervals: List[str] = Field(
+    sim_intervals: List[Union[str, Tuple[datetime, datetime]]] = Field(
         default=['2024-01-01 to 2024-01-02'],
         description='One or many simulation intervals in format "YYYY-MM-DD to YYYY-MM-DD"',
         title='sim_intervals'
     )
 
-    evaluation_intervals: List[str] = Field(
+    evaluation_intervals: List[Union[str, Tuple[datetime, datetime]]] = Field(
         default=['2024-01-01 to 2024-01-02'],
         description='One or many evaluation intervals in format "YYYY-MM-DD to YYYY-MM-DD"',
         title='evaluation_intervals'
@@ -50,7 +50,7 @@ class EPlusSimulationSetup(SimulationSetup):
         default='Timestep',
         description='Interval of the resulting dataframe ("Hourly" or "Timestep")',
         title='dataframe_interval'
-    ),
+    )
 
     n_steps_per_hour: int = Field(
         default=6,
@@ -63,42 +63,55 @@ class EPlusSimulationSetup(SimulationSetup):
 
     @field_validator('sim_intervals', 'evaluation_intervals')
     @classmethod
-    def check_intervals(cls,
-                        intervals: List[str]) -> List[Tuple[datetime, datetime]]:
+    def check_intervals(
+        cls, 
+        intervals: List[Union[str, Tuple[datetime, datetime]]]) -> List[Tuple[datetime, datetime]]:
         """
-        Validate and convert interval strings to datetime tuples.
+        Validate and convert interval strings or datetime tuples.
 
         Args:
-            intervals: List of interval strings in format "YYYY-MM-DD to YYYY-MM-DD"
+            intervals: List of either:
+                - interval strings in format "YYYY-MM-DD to YYYY-MM-DD"
+                - tuples of (start_datetime, stop_datetime)
 
         Returns:
-            List of (start, stop) datetime tuples
+            List of (start_datetime, stop_datetime) tuples
 
         Raises:
             ValueError: If intervals are invalid or not chronologically ordered
         """
+        
         if intervals is None:
             return intervals
+            
         _intervals = []
-        for sim_interval in intervals:
-            if not isinstance(sim_interval, str):
-                return intervals
-            start, stop = sim_interval.split(' to ')
-            start = datetime.strptime(start, "%Y-%m-%d")
-            stop = datetime.strptime(stop, "%Y-%m-%d")
+        for interval in intervals:
+            # If already a datetime tuple, validate and add directly
+            if isinstance(interval, tuple):
+                start, stop = interval
+                if not (isinstance(start, datetime) and isinstance(stop, datetime)):
+                    raise ValueError('Tuple intervals must contain datetime objects')
+            # If string, parse to datetime tuple
+            elif isinstance(interval, str):
+                start, stop = interval.split(' to ')
+                start = datetime.strptime(start, "%Y-%m-%d")
+                stop = datetime.strptime(stop, "%Y-%m-%d")
+            else:
+                raise ValueError('Intervals must be either strings or datetime tuples')
 
             if stop <= start:
-                raise ValueError('Start must be before stop in sim intervals')
-
+                raise ValueError('Start must be before stop in intervals')
+                
             _intervals.append((start, stop))
 
+        # Check chronological order
         for n in range(len(_intervals) - 1):
             if _intervals[n][1] > _intervals[n + 1][0]:
                 raise ValueError(
-                    'When specifying sim intervals, they must be increasing in time, meaning the first'
-                    'simulation interval is the "oldest" interval')
+                    'Intervals must be increasing in time, meaning the first '
+                    'interval is the "oldest" interval')
 
-        return intervals
+        return _intervals
 
     @field_validator('dataframe_interval')
     @classmethod
@@ -192,8 +205,7 @@ class EnergyPlusAPI(SimulationAPI):
             model_name=str(model_path),
             n_cpu=n_cpu
         )
-
-        # set via the sim_intervals in the simulation setup
+        # will be set via the intervals in the simulation setup
         self._start_date = None
         self._stop_date = None
 
@@ -299,10 +311,7 @@ class EnergyPlusAPI(SimulationAPI):
 
         _dfs = []
 
-        for interval in self.sim_setup.sim_intervals:
-            start, stop = interval.split(' to ')
-            start = datetime.strptime(start, "%Y-%m-%d")
-            stop = datetime.strptime(stop, "%Y-%m-%d")
+        for start, stop in self.sim_setup.sim_intervals:
             self._start_date = start
             self._stop_date = stop
 
@@ -521,10 +530,7 @@ class EnergyPlusAPI(SimulationAPI):
         """
         
         _df_list = []
-        for interval in self.sim_setup.evaluation_intervals:
-            start, stop = interval.split(' to ')
-            start = datetime.strptime(start, "%Y-%m-%d")
-            stop = datetime.strptime(stop, "%Y-%m-%d")
+        for start, stop in self.sim_setup.evaluation_intervals:
             _df = df.loc[(df.index > start) &
                          (df.index <= stop + pd.Timedelta(days=1))].copy()
             _df_list.append(_df)
diff --git a/examples/e1_run_energyplus_simulation.py b/examples/e1_run_energyplus_simulation.py
index 2a15861..d696ab7 100644
--- a/examples/e1_run_energyplus_simulation.py
+++ b/examples/e1_run_energyplus_simulation.py
@@ -18,6 +18,15 @@ def main():
                             '2015-01-01 to 2015-02-01'
                         ]}
     
+    simulation_setup = {"output_interval": 600,
+                        "sim_intervals": [
+                            '2015-01-01 to 2015-02-01'
+                        ],
+                        "evaluation_intervals": [
+                            '2015-01-01 to 2015-02-01'
+                        ],
+                        "dataframe_interval": "Hourly"}
+    
     parameters = None
 
     EP_API = EnergyPlusAPI(
-- 
GitLab