From 8863be0ebaf36f88f8e38b1831b3fe6452c15b41 Mon Sep 17 00:00:00 2001 From: Debasish Pal <48341250+debpal@users.noreply.github.com> Date: Wed, 14 May 2025 17:59:16 +0300 Subject: [PATCH 1/8] add pytest --- pyproject.toml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 7dce301..5329e6d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -43,6 +43,13 @@ Issues = "https://github.com/swat-model/pySWATPlus/issues" [tool.setuptools] packages = ["pySWATPlus"] + +[tool.pytest.ini_options] +addopts = "-rA -Wignore::DeprecationWarning --cov=pySWATPlus --cov-report=html:cov_pySWATPlus --cov-report=term -s" +testpaths = [ + "tests" +] + [tool.setuptools_scm] version_scheme = "post-release" local_scheme = "no-local-version" \ No newline at end of file From 58633b6c26ab61907aab86533ac1475e4a7ad5d9 Mon Sep 17 00:00:00 2001 From: Debasish Pal <48341250+debpal@users.noreply.github.com> Date: Wed, 14 May 2025 18:00:25 +0300 Subject: [PATCH 2/8] add pytest --- requirements.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/requirements.txt b/requirements.txt index 1768010..4f69263 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,5 @@ +pytest +pytest-cov pandas numpy pymoo From 099af15919249da2d517b0112427a2e967c39750 Mon Sep 17 00:00:00 2001 From: Debasish Pal <48341250+debpal@users.noreply.github.com> Date: Wed, 14 May 2025 18:01:46 +0300 Subject: [PATCH 3/8] add ignore=E501 --- setup.cfg | 2 ++ 1 file changed, 2 insertions(+) diff --git a/setup.cfg b/setup.cfg index 9272d75..8d60c8b 100644 --- a/setup.cfg +++ b/setup.cfg @@ -3,3 +3,5 @@ exclude = .ipynb_checkpoints __pycache__ .tox + +ignore = E501 From b33c1de3018fe78cc66b2164a4a412816b942dbb Mon Sep 17 00:00:00 2001 From: Debasish Pal <48341250+debpal@users.noreply.github.com> Date: Wed, 14 May 2025 18:02:57 +0300 Subject: [PATCH 4/8] add testing.yml --- .github/workflows/linting.yml | 2 +- .github/workflows/testing.yml | 40 +++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/testing.yml diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 5911cb7..2e0063d 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -35,4 +35,4 @@ jobs: - name: Lint with flake8 run: | - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics \ No newline at end of file + flake8 . --count --exit-zero --max-complexity=10 --statistics \ No newline at end of file diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml new file mode 100644 index 0000000..d05ab53 --- /dev/null +++ b/.github/workflows/testing.yml @@ -0,0 +1,40 @@ +name: pytest + +on: + push: + branches: + - main # Your branch name + paths: + - '**/*.py' # Trigger for changes in Python files + pull_request: + branches: + - main # Your branch name + paths: + - '**/*.py' # Trigger for changes in Python files + +jobs: + build: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v3 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install -r requirements.txt # Install dependencies + + - name: Run tests with pytest + run: | + export PYTHONPATH=$(pwd) + pytest -rA -Wignore::DeprecationWarning --cov=GeoAnalyze --cov-report=xml # Run tests and generate coverage report in XML format + From 7438bc305bd8ec6a3ea325e213445114e3879f37 Mon Sep 17 00:00:00 2001 From: Debasish Pal <48341250+debpal@users.noreply.github.com> Date: Wed, 14 May 2025 21:26:05 +0300 Subject: [PATCH 5/8] clean large files --- pySWATPlus/FileReader.py | 35 +++- pySWATPlus/PymooBestSolution.py | 29 ++- pySWATPlus/SWATProblem.py | 21 +-- pySWATPlus/SWATProblemMultimodel.py | 22 ++- pySWATPlus/TxtinoutReader.py | 129 +++++++++++--- tests/sample_data/aquifer_yrr.txt | 263 ++++++++++++++++++++++++++++ tests/test_filereader.py | 37 ++++ 7 files changed, 482 insertions(+), 54 deletions(-) create mode 100644 tests/sample_data/aquifer_yrr.txt create mode 100644 tests/test_filereader.py diff --git a/pySWATPlus/FileReader.py b/pySWATPlus/FileReader.py index 27b9ec4..45b5404 100644 --- a/pySWATPlus/FileReader.py +++ b/pySWATPlus/FileReader.py @@ -17,6 +17,7 @@ def read_csv( engine: Literal['c', 'python'], mode: Literal['dask', 'pandas'] = 'dask' ) -> Union[pd.DataFrame, dd.DataFrame]: + ''' Read a CSV file using either Dask or Pandas and filter the data based on criteria. @@ -38,7 +39,16 @@ def read_csv( - When `mode` is 'pandas', a Pandas DataFrame is returned. Example: - read_csv('plants.plt', skip_rows=[0], usecols=['name', 'plnt_typ', 'gro_trig'], filter_by={'plnt_typ': 'perennial'}, separator=r"[ ]{2,}", encoding="utf-8", engine='python', mode='dask') + + read_csv( + 'plants.plt', + skip_rows=[0], + usecols=['name', 'plnt_typ', 'gro_trig'], + filter_by={'plnt_typ': 'perennial'}, separator=r"[ ]{2,}", + encoding="utf-8", + engine='python', + mode='dask' + ) ''' if mode == 'dask': @@ -93,6 +103,7 @@ def __init__( usecols: List[str] = None, filter_by: Dict[str, Union[Any, List[Any], re.Pattern]] = {} ): + ''' Initialize a FileReader instance to read data from a file. @@ -101,7 +112,7 @@ def __init__( has_units (bool): Indicates if the file has units (default is False). index (str, optional): The name of the index column (default is None). usecols (List[str], optional): A list of column names to read (default is None). - filter_by (Dict[str, Union[Any, List[Any], re.Pattern]): A dictionary of column names and values to filter by (default is an empty dictionary). + filter_by (Dict[str, Union[Any, List[Any], re.Pattern], optional): A dictionary of column names and values to filter. Raises: FileNotFoundError: If the specified file does not exist. @@ -118,8 +129,8 @@ def __init__( Example: FileReader('plants.plt', has_units = False, index = 'name', usecols=['name', 'plnt_typ', 'gro_trig'], filter_by={'plnt_typ': 'perennial'}) - ''' + if not isinstance(path, (str, os.PathLike)): raise TypeError("path must be a string or os.PathLike object") @@ -199,7 +210,10 @@ def __init__( self.df = df self.path = path - def _store_text(self) -> None: + def _store_text( + self + ) -> None: + ''' Store the DataFrame as a formatted text file. @@ -211,6 +225,7 @@ def _store_text(self) -> None: Returns: None ''' + data_str = self.df.to_string(index=False, justify='left', col_space=15) # Find the length of the longest string in each column @@ -227,7 +242,10 @@ def _store_text(self) -> None: file.write(self.header_file) file.write(data_str) - def _store_csv(self) -> None: + def _store_csv( + self + ) -> None: + ''' Store the DataFrame as a CSV file. @@ -236,9 +254,13 @@ def _store_csv(self) -> None: Returns: None ''' + raise TypeError("Not implemented yet") - def overwrite_file(self) -> None: + def overwrite_file( + self + ) -> None: + ''' Overwrite the original file with the DataFrame. @@ -247,6 +269,7 @@ def overwrite_file(self) -> None: Returns: None ''' + if self.path.suffix == '.csv': self._store_csv() else: diff --git a/pySWATPlus/PymooBestSolution.py b/pySWATPlus/PymooBestSolution.py index 86e626f..ae8e8b0 100644 --- a/pySWATPlus/PymooBestSolution.py +++ b/pySWATPlus/PymooBestSolution.py @@ -11,33 +11,54 @@ class SolutionManager: Class to manage the best solution found during optimization. """ - def __init__(self): + def __init__( + self + ): + self.X = None self.path = None self.error = None self.lock = multiprocessing.Lock() - def add_solution(self, X: np.ndarray, path: Dict[str, str], error: float) -> None: + def add_solution( + self, + X: np.ndarray, + path: Dict[str, str], + error: float + ) -> None: + """ Add a solution if it is better than the current best solution. """ + with self.lock: if self.error is None or error < self.error: self.X = X self.path = path self.error = error - def get_solution(self) -> Tuple[np.ndarray, Dict[str, str], float]: + def get_solution( + self + ) -> Tuple[np.ndarray, Dict[str, str], float]: + """ Retrieve the best solution. """ + with self.lock: return self.X, self.path, self.error - def add_solutions(self, X_array: np.ndarray, paths_array: List[Dict[str, str]], errors_array: np.ndarray) -> None: + def add_solutions( + self, + X_array: np.ndarray, + paths_array: List[Dict[str, str]], + errors_array: np.ndarray + ) -> None: + """ Update the best solution based on provided paths and errors. Only the best solution is kept; others are deleted. """ + if len(errors_array) == 0: return diff --git a/pySWATPlus/SWATProblem.py b/pySWATPlus/SWATProblem.py index 1a87719..935dd7f 100644 --- a/pySWATPlus/SWATProblem.py +++ b/pySWATPlus/SWATProblem.py @@ -4,15 +4,17 @@ class SWATProblem(SWATProblemMultimodel): - def __init__(self, - params: Dict[str, Tuple[str, List[Tuple[str, str, float, float]]]], - function_to_evaluate: Callable, - param_arg_name: str, - n_workers: int = 1, - parallelization: str = 'threads', - debug: bool = False, - **kwargs: Dict[str, Any] - ) -> None: + def __init__( + self, + params: Dict[str, Tuple[str, List[Tuple[str, str, float, float]]]], + function_to_evaluate: Callable, + param_arg_name: str, + n_workers: int = 1, + parallelization: str = 'threads', + debug: bool = False, + **kwargs: Dict[str, Any] + ) -> None: + """ This feature inicializes a SWATProblem instance, which is used to perform optimization of the desired SWAT+ parameters by using the pymoo library. @@ -34,5 +36,4 @@ def __init__(self, None """ - # SWATProblemMultimodel.__init__(self, params, function_to_evaluate, param_arg_name, n_workers, parallelization, None, None, None, None, None, debug, **kwargs) super().__init__(params, function_to_evaluate, param_arg_name, n_workers, parallelization, None, None, None, None, None, debug, **kwargs) diff --git a/pySWATPlus/SWATProblemMultimodel.py b/pySWATPlus/SWATProblemMultimodel.py index f7e6efa..c51bc4c 100644 --- a/pySWATPlus/SWATProblemMultimodel.py +++ b/pySWATPlus/SWATProblemMultimodel.py @@ -17,6 +17,7 @@ def minimize_pymoo( verbose: bool = False, callback: Optional[Callable] = None ) -> Tuple[Optional[np.ndarray], Optional[str], Optional[float]]: + """ Perform optimization using the pymoo library. @@ -29,7 +30,8 @@ def minimize_pymoo( - callback (Optional[Callable], optional): A callback function that is called after each generation (default is None). Returns: - - Tuple[np.ndarray, Dict[str, str], float]: The best solution found during the optimization process, in the form of a tuple containing the decision variables, the path to the output files with the identifier, and the error. + - Tuple[np.ndarray, Dict[str, str], float]: The best solution found during the optimization process, in the form of a tuple containing the decision variables, + the path to the output files with the identifier, and the error. """ problem.solution_manager = SolutionManager() @@ -77,7 +79,9 @@ def __init__( ) -> None: """ - This class serves the same purpose as SWATProblem, with the added capability of running another model before executing SWAT+. This enables running a prior model in the same calibration process, wherein the parameters are calibrated simultaneously. For example, the prior model can modify an input file of SWAT+ before initiating SWAT+ (according to the parameters of the calibration). + This class serves the same purpose as SWATProblem, with the added capability of running another model before executing SWAT+. + This enables running a prior model in the same calibration process, wherein the parameters are calibrated simultaneously. + For example, the prior model can modify an input file of SWAT+ before initiating SWAT+ (according to the parameters of the calibration). Parameters: - params Dict[str, Tuple[str, List[Tuple[str, str, int, int]]]]): A dictionary containing the range of values to optimize. @@ -136,11 +140,14 @@ def __init__( self.solution_manager = None # it is initialized in the minize_pymoo function super().__init__(n_var=n_vars, n_obj=1, n_constr=0, xl=lb, xu=ub, elementwise_evaluation=False) - def _evaluate(self, - X: np.ndarray, - out: Dict[str, Any], - *args: Any, - **kwargs: Any): + def _evaluate( + self, + X: np.ndarray, + out: Dict[str, Any], + *args: Any, + **kwargs: Any + ): + """ Evaluate the objective function for a given set of input parameters. @@ -153,6 +160,7 @@ def _evaluate(self, Returns: None """ + if self.debug: print('starting _evaluate') diff --git a/pySWATPlus/TxtinoutReader.py b/pySWATPlus/TxtinoutReader.py index 14cb8ab..94c4d5f 100644 --- a/pySWATPlus/TxtinoutReader.py +++ b/pySWATPlus/TxtinoutReader.py @@ -13,7 +13,11 @@ class TxtinoutReader: - def __init__(self, path: str) -> None: + def __init__( + self, + path: str + ) -> None: + """ Initialize a TxtinoutReader instance for working with SWAT model data. @@ -57,7 +61,15 @@ def __init__(self, path: str) -> None: self.root_folder = path self.swat_exe_path = path / swat_exe - def _build_line_to_add(self, obj: str, daily: bool, monthly: bool, yearly: bool, avann: bool) -> str: + def _build_line_to_add( + self, + obj: str, + daily: bool, + monthly: bool, + yearly: bool, + avann: bool + ) -> str: + """ Build a line to add to the 'print.prt' file based on the provided parameters. @@ -71,6 +83,7 @@ def _build_line_to_add(self, obj: str, daily: bool, monthly: bool, yearly: bool, Returns: str: A formatted string representing the line to add to the 'print.prt' file. """ + print_periodicity = { 'daily': daily, 'monthly': monthly, @@ -89,9 +102,18 @@ def _build_line_to_add(self, obj: str, daily: bool, monthly: bool, yearly: bool, arg_to_add = arg_to_add.rstrip() arg_to_add += '\n' + return arg_to_add - def enable_object_in_print_prt(self, obj: str, daily: bool, monthly: bool, yearly: bool, avann: bool) -> None: + def enable_object_in_print_prt( + self, + obj: str, + daily: bool, + monthly: bool, + yearly: bool, + avann: bool + ) -> None: + """ Enable or update an object in the 'print.prt' file. If obj is not a default identifier, it will be added at the end of the file. @@ -132,8 +154,12 @@ def enable_object_in_print_prt(self, obj: str, daily: bool, monthly: bool, yearl with open(print_prt_path, 'w') as file: file.write(new_print_prt) - # modify yrc_start and yrc_end - def set_beginning_and_end_year(self, beginning: int, end: int) -> None: + def set_beginning_and_end_year( + self, + beginning: int, + end: int + ) -> None: + """ Modify the beginning and end year in the 'time.sim' file. @@ -170,8 +196,11 @@ def set_beginning_and_end_year(self, beginning: int, end: int) -> None: with open(time_sim_path, 'w') as file: file.writelines(lines) - # modify warmup - def set_warmup(self, warmup: int) -> None: + def set_warmup( + self, + warmup: int + ) -> None: + """ Modify the warmup period in the 'time.sim' file. @@ -181,6 +210,7 @@ def set_warmup(self, warmup: int) -> None: Returns: None """ + time_sim_path = self.root_folder / 'print.prt' # Open the file in read mode and read its contents @@ -203,7 +233,11 @@ def set_warmup(self, warmup: int) -> None: with open(time_sim_path, 'w') as file: file.writelines(lines) - def _enable_disable_csv_print(self, enable: bool = True) -> None: + def _enable_disable_csv_print( + self, + enable: bool = True + ) -> None: + """ Enable or disable CSV print in the 'print.prt' file. @@ -232,25 +266,41 @@ def _enable_disable_csv_print(self, enable: bool = True) -> None: with open(print_prt_path, 'w') as file: file.writelines(lines) - def enable_csv_print(self) -> None: + def enable_csv_print( + self + ) -> None: + """ Enable CSV print in the 'print.prt' file. Returns: None """ + self._enable_disable_csv_print(enable=True) - def disable_csv_print(self) -> None: + def disable_csv_print( + self + ) -> None: + """ Disable CSV print in the 'print.prt' file. Returns: None """ + self._enable_disable_csv_print(enable=False) - def register_file(self, filename: str, has_units: bool = False, index: Optional[str] = None, usecols: Optional[List[str]] = None, filter_by: Dict[str, Union[Any, List[Any], re.Pattern]] = {}) -> FileReader: + def register_file( + self, + filename: str, + has_units: bool = False, + index: Optional[str] = None, + usecols: Optional[List[str]] = None, + filter_by: Dict[str, Union[Any, List[Any], re.Pattern]] = {} + ) -> FileReader: + """ Register a file to work with in the SWAT model. @@ -266,13 +316,15 @@ def register_file(self, filename: str, has_units: bool = False, index: Optional[ """ file_path = os.path.join(self.root_folder, filename) + return FileReader(file_path, has_units, index, usecols, filter_by) - """ - if overwrite = True, content of target_dir folder will be deleted and txtinout folder will be copied there - if overwrite = False, txtinout folder will be copied to a new folder inside target_dir - """ - def copy_swat(self, target_dir: str = None, overwrite: bool = False) -> str: + def copy_swat( + self, + target_dir: str = None, + overwrite: bool = False + ) -> str: + """ Copy the SWAT model files to a specified directory. @@ -356,7 +408,11 @@ def copy_swat(self, target_dir: str = None, overwrite: bool = False) -> str: return temp_folder_path - def _run_swat(self, show_output: bool = True) -> None: + def _run_swat( + self, + show_output: bool = True + ) -> None: + """ Run the SWAT simulation. @@ -393,10 +449,12 @@ def _run_swat(self, show_output: bool = True) -> None: if output and show_output: print(output) - """ - params --> {filename: (id_col, [(id, col, value)])} - """ - def run_swat(self, params: Dict[str, Tuple[str, List[Tuple[Union[None, str, List[str], re.Pattern], str, Any]]]] = {}, show_output: bool = True) -> str: + def run_swat( + self, + params: Dict[str, Tuple[str, List[Tuple[Union[None, str, List[str], re.Pattern], str, Any]]]] = {}, + show_output: bool = True + ) -> str: + """ Run the SWAT simulation with modified input parameters. @@ -409,6 +467,7 @@ def run_swat(self, params: Dict[str, Tuple[str, List[Tuple[Union[None, str, List Returns: str: The path to the directory where the SWAT simulation was executed. """ + aux_txtinout = TxtinoutReader(self.root_folder) # Modify files for simulation @@ -440,7 +499,11 @@ def run_swat(self, params: Dict[str, Tuple[str, List[Tuple[Union[None, str, List return self.root_folder - def run_swat_star(self, args: Tuple[Dict[str, Tuple[str, List[Tuple[Union[None, str, List[str], re.Pattern], str, Any]]]], bool]) -> str: + def run_swat_star( + self, + args: Tuple[Dict[str, Tuple[str, List[Tuple[Union[None, str, List[str], re.Pattern], str, Any]]]], bool] + ) -> str: + """ Run the SWAT simulation with modified input parameters using arguments provided as a tuple. @@ -453,9 +516,17 @@ def run_swat_star(self, args: Tuple[Dict[str, Tuple[str, List[Tuple[Union[None, Returns: str: The path to the directory where the SWAT simulation was executed. """ + return self.run_swat(*args) - def copy_and_run(self, target_dir: str, overwrite: bool = False, params: Dict[str, Tuple[str, List[Tuple[Union[None, str, List[str], re.Pattern], str, Any]]]] = {}, show_output: bool = True) -> str: + def copy_and_run( + self, + target_dir: str, + overwrite: bool = False, + params: Dict[str, Tuple[str, List[Tuple[Union[None, str, List[str], re.Pattern], str, Any]]]] = {}, + show_output: bool = True + ) -> str: + """ Copy the SWAT model files to a specified directory, modify input parameters, and run the simulation. @@ -473,9 +544,14 @@ def copy_and_run(self, target_dir: str, overwrite: bool = False, params: Dict[st tmp_path = self.copy_swat(target_dir=target_dir, overwrite=overwrite) reader = TxtinoutReader(tmp_path) + return reader.run_swat(params, show_output=show_output) - def copy_and_run_star(self, args: Tuple[str, bool, Dict[str, Tuple[str, List[Tuple[Union[None, str, List[str], re.Pattern], str, Any]]]], bool]) -> str: + def copy_and_run_star( + self, + args: Tuple[str, bool, Dict[str, Tuple[str, List[Tuple[Union[None, str, List[str], re.Pattern], str, Any]]]], bool] + ) -> str: + """ Copy the SWAT model files to a specified directory, modify input parameters, and run the simulation using arguments provided as a tuple. @@ -488,11 +564,9 @@ def copy_and_run_star(self, args: Tuple[str, bool, Dict[str, Tuple[str, List[Tup Returns: str: The path to the directory where the SWAT simulation was executed. """ + return self.copy_and_run(*args) - """ - params --> [{filename: (id_col, [(id, col, value)])}] - """ def run_parallel_swat( self, params: List[Dict[str, Tuple[str, List[Tuple[Union[None, str, List[str], re.Pattern], str, Any]]]]], @@ -500,6 +574,7 @@ def run_parallel_swat( target_dir: str = None, parallelization: str = 'threads' ) -> List[str]: + """ Run SWAT simulations in parallel with modified input parameters. diff --git a/tests/sample_data/aquifer_yrr.txt b/tests/sample_data/aquifer_yrr.txt new file mode 100644 index 0000000..0676f8a --- /dev/null +++ b/tests/sample_data/aquifer_yrr.txt @@ -0,0 +1,263 @@ + exp_lake_and_one_outlet SWAT+ Jul 2 2024 MODULAR Rev 2024.61.0.1 + jday mon day yr unit gis_id name flo dep_wt stor rchrg seep revap no3_st minp orgn orgp no3_rchg no3_loss no3_lat no3_seep flo_cha flo_res flo_ls + mm m mm mm mm mm kg/ha_N kg/ha_P kg/ha_N kg/ha_P kg/ha_N kg/ha_N kg/ha_N kg/ha_N mm mm mm + 365 12 31 2015 1 10 aqu010 265.309 2.792 359.608 287.124 14.356 7.443 21.267 0.000 0.500 0.000 215.725 181.715 34.300 1.786 265.309 0.000 0.000 + 365 12 31 2015 2 20 aqu020 279.695 2.812 358.563 303.206 15.160 7.658 25.600 0.000 0.500 0.000 252.593 218.776 37.366 1.886 0.000 279.695 0.000 + 365 12 31 2015 3 30 aqu030 282.907 2.805 358.918 305.765 15.288 7.565 25.163 0.000 0.500 0.000 252.590 215.072 39.120 1.967 0.000 282.907 0.000 + 365 12 31 2015 4 40 aqu040 504.382 2.573 369.901 538.799 26.940 7.388 25.672 0.000 0.500 0.000 310.255 219.386 88.187 4.989 504.382 0.000 0.000 + 365 12 31 2015 5 50 aqu050 287.405 2.810 358.635 311.407 15.570 7.658 25.759 0.000 0.500 0.000 255.827 220.140 38.896 1.963 287.405 0.000 0.000 + 365 12 31 2015 6 60 aqu060 580.195 2.498 373.444 618.409 30.920 7.388 25.644 0.000 0.500 0.000 330.563 219.170 107.386 6.312 580.195 0.000 0.000 + 365 12 31 2015 7 70 aqu070 472.185 2.599 368.698 504.773 25.239 7.388 27.244 0.000 0.500 0.000 318.614 232.825 83.674 4.656 472.185 0.000 0.000 + 365 12 31 2015 8 80 aqu080 537.300 2.539 371.487 573.340 28.667 7.388 24.773 0.000 0.500 0.000 307.234 211.710 92.433 5.305 537.300 0.000 0.000 + 365 12 31 2015 9 90 aqu090 552.748 2.528 372.007 589.617 29.481 7.388 27.057 0.000 0.500 0.000 337.959 231.231 103.265 5.949 552.748 0.000 0.000 + 365 12 31 2015 10 100 aqu100 305.809 2.797 359.274 329.029 16.451 7.443 28.903 0.000 0.500 0.000 297.239 247.018 50.680 2.610 305.809 0.000 0.000 + 365 12 31 2015 11 110 aqu110 241.331 2.849 356.817 261.669 13.083 7.388 26.926 0.000 0.500 0.000 264.302 230.159 35.281 1.788 241.331 0.000 0.000 + 365 12 31 2015 12 120 aqu120 205.104 2.874 355.667 223.243 11.162 7.565 23.328 0.000 0.500 0.000 224.410 199.415 26.644 1.359 205.104 0.000 0.000 + 365 12 31 2015 13 130 aqu130 268.313 2.822 358.106 290.215 14.511 7.388 23.804 0.000 0.500 0.000 237.889 203.453 35.216 1.767 268.313 0.000 0.000 + 365 12 31 2015 14 140 aqu140 237.540 2.847 356.944 259.013 12.951 7.658 25.957 0.000 0.500 0.000 249.436 221.829 32.421 1.664 237.540 0.000 0.000 + 365 12 31 2015 15 150 aqu150 157.690 2.907 354.169 173.293 8.665 7.443 19.843 0.000 0.500 0.000 185.507 169.604 17.264 0.889 157.690 0.000 0.000 + 365 12 31 2015 16 160 aqu160 247.531 2.841 357.215 267.745 13.387 7.565 26.326 0.000 0.500 0.000 259.336 225.051 35.870 1.817 247.531 0.000 0.000 + 365 12 31 2015 17 170 aqu170 227.953 2.853 356.683 248.181 12.409 7.565 26.001 0.000 0.500 0.000 253.606 222.264 32.879 1.688 227.953 0.000 0.000 + 365 12 31 2015 18 180 aqu180 227.601 2.854 356.634 247.757 12.388 7.443 26.257 0.000 0.500 0.000 255.613 224.433 32.682 1.671 227.601 0.000 0.000 + 365 12 31 2015 19 190 aqu190 231.834 2.824 358.111 251.913 12.596 7.443 20.453 0.000 0.500 0.000 202.067 174.791 27.973 1.454 231.834 0.000 0.000 + 365 12 31 2015 20 200 aqu200 438.332 2.640 366.740 469.227 23.461 7.413 26.794 0.000 0.500 0.000 298.406 229.009 71.358 3.890 438.332 0.000 0.000 + 365 12 31 2015 21 210 aqu210 252.793 2.838 357.373 273.197 13.660 7.565 25.816 0.000 0.500 0.000 255.158 220.682 35.964 1.815 252.793 0.000 0.000 + 365 12 31 2015 22 220 aqu220 214.095 2.873 355.724 232.683 11.634 7.443 26.164 0.000 0.500 0.000 252.873 223.646 30.657 1.571 214.095 0.000 0.000 + 365 12 31 2015 23 230 aqu230 237.741 2.848 356.914 258.933 12.947 7.565 27.966 0.000 0.500 0.000 271.061 239.035 35.426 1.819 237.741 0.000 0.000 + 365 12 31 2015 24 240 aqu240 222.001 2.861 356.287 240.618 12.031 7.443 25.942 0.000 0.500 0.000 252.132 221.750 31.834 1.631 222.001 0.000 0.000 + 365 12 31 2015 25 250 aqu250 225.949 2.855 356.579 245.619 12.281 7.565 26.322 0.000 0.500 0.000 256.375 225.023 33.077 1.700 225.949 0.000 0.000 + 365 12 31 2015 26 260 aqu260 398.126 2.677 365.005 427.072 21.354 7.520 26.639 0.000 0.500 0.000 289.634 227.667 63.210 3.387 398.126 0.000 0.000 + 365 12 31 2015 27 270 aqu270 233.320 2.850 356.828 253.279 12.664 7.565 27.805 0.000 0.500 0.000 271.648 237.704 35.724 1.833 233.320 0.000 0.000 + 365 12 31 2015 28 280 aqu280 273.815 2.826 357.915 295.582 14.779 7.565 27.523 0.000 0.500 0.000 274.707 235.283 41.268 2.116 273.815 0.000 0.000 + 365 12 31 2015 29 290 aqu290 500.108 2.571 370.007 534.260 26.713 7.443 26.609 0.000 0.500 0.000 322.173 227.396 92.051 5.228 500.108 0.000 0.000 + 365 12 31 2015 30 300 aqu300 218.234 2.869 355.902 237.250 11.862 7.598 24.842 0.000 0.500 0.000 236.635 212.299 29.035 1.486 218.234 0.000 0.000 + 365 12 31 2015 31 310 aqu310 466.169 2.603 368.494 498.452 24.923 7.443 21.859 0.000 0.500 0.000 254.748 186.801 66.400 3.684 466.169 0.000 0.000 + 365 12 31 2015 32 320 aqu320 342.323 2.731 362.428 368.346 18.417 7.520 25.260 0.000 0.500 0.000 261.475 215.876 48.217 2.511 342.323 0.000 0.000 + 365 12 31 2015 33 330 aqu330 236.253 2.857 356.475 256.966 12.848 7.553 23.046 0.000 0.500 0.000 222.323 196.940 29.280 1.476 0.000 236.253 0.000 + 365 12 31 2015 34 340 aqu340 223.345 2.857 356.483 243.312 12.166 7.598 25.974 0.000 0.500 0.000 249.349 221.999 31.257 1.603 223.345 0.000 0.000 + 365 12 31 2015 35 350 aqu350 233.055 2.849 356.842 253.244 12.662 7.520 20.446 0.000 0.500 0.000 197.673 174.739 25.528 1.304 233.055 0.000 0.000 + 365 12 31 2015 36 360 aqu360 259.721 2.829 357.762 280.654 14.033 7.443 25.571 0.000 0.500 0.000 253.669 218.559 36.322 1.830 259.721 0.000 0.000 + 365 12 31 2015 37 370 aqu370 253.739 2.845 356.981 274.770 13.739 7.598 24.222 0.000 0.500 0.000 235.846 206.994 32.961 1.660 253.739 0.000 0.000 + 365 12 31 2015 38 380 aqu380 276.055 2.816 358.395 297.686 14.884 7.443 24.043 0.000 0.500 0.000 240.286 205.491 36.457 1.823 276.055 0.000 0.000 + 365 12 31 2015 39 390 aqu390 216.296 2.874 355.682 235.327 11.766 7.598 24.863 0.000 0.500 0.000 236.667 212.480 28.812 1.476 216.296 0.000 0.000 + 365 12 31 2015 40 400 aqu400 229.039 2.856 356.513 248.212 12.411 7.388 27.776 0.000 0.500 0.000 270.776 237.429 34.609 1.769 229.039 0.000 0.000 + 365 12 31 2015 41 410 aqu410 0.000 3.537 323.119 0.000 0.000 7.520 0.000 0.000 0.500 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 + 365 12 31 2015 42 420 aqu420 242.580 2.844 357.081 263.299 13.165 7.520 23.145 0.000 0.500 0.000 224.986 197.800 30.129 1.514 242.580 0.000 0.000 + 365 12 31 2015 43 430 aqu430 222.940 2.862 356.261 242.085 12.104 7.553 25.881 0.000 0.500 0.000 248.144 221.185 30.768 1.574 0.000 222.940 0.000 + 365 12 31 2015 44 440 aqu440 222.375 2.865 356.112 241.177 12.059 7.553 25.761 0.000 0.500 0.000 246.449 220.152 30.689 1.569 222.375 0.000 0.000 + 365 12 31 2015 45 450 aqu450 219.805 2.876 355.530 239.115 11.956 7.553 25.069 0.000 0.500 0.000 239.749 214.242 29.704 1.522 219.805 0.000 0.000 + 365 12 31 2015 46 460 aqu460 166.441 2.906 354.177 182.433 9.122 7.553 19.348 0.000 0.500 0.000 179.462 165.346 17.612 0.906 166.441 0.000 0.000 + 365 12 31 2015 47 470 aqu470 220.963 2.865 356.072 240.108 12.005 7.553 24.450 0.000 0.500 0.000 234.184 208.948 29.173 1.495 220.963 0.000 0.000 + 365 12 31 2015 48 480 aqu480 222.492 2.863 356.176 241.502 12.075 7.553 21.862 0.000 0.500 0.000 210.428 186.835 26.832 1.378 222.492 0.000 0.000 + 365 12 31 2015 49 490 aqu490 225.505 2.865 356.089 244.768 12.238 7.553 24.063 0.000 0.500 0.000 231.263 205.646 29.381 1.505 225.505 0.000 0.000 + 365 12 31 2015 50 500 aqu500 545.068 2.532 371.837 581.651 29.083 7.553 24.630 0.000 0.500 0.000 310.721 210.545 99.512 5.828 545.068 0.000 0.000 + 365 12 31 2015 51 510 aqu510 281.205 2.785 359.943 303.895 15.195 7.520 23.452 0.000 0.500 0.000 235.436 200.414 37.652 1.953 281.205 0.000 0.000 + 365 12 31 2015 52 51 aqu_deep051 0.000 18.806 2435.833 15.412 0.000 0.000 0.258 0.000 0.500 0.000 2.173 2.202 0.000 0.000 0.000 0.000 0.000 + 366 12 31 2016 1 10 aqu010 200.716 2.867 356.074 219.106 10.955 7.428 15.938 0.000 0.500 0.000 156.659 136.137 20.245 1.038 200.716 0.000 0.000 + 366 12 31 2016 2 20 aqu020 196.465 2.869 355.945 214.852 10.743 7.647 16.036 0.000 0.500 0.000 153.274 137.058 18.015 0.908 0.000 196.465 0.000 + 366 12 31 2016 3 30 aqu030 196.029 2.876 355.614 214.198 10.710 7.463 16.323 0.000 0.500 0.000 157.099 139.517 18.373 0.921 0.000 196.029 0.000 + 366 12 31 2016 4 40 aqu040 344.210 2.720 362.983 369.997 18.500 7.363 19.679 0.000 0.500 0.000 218.007 167.950 47.970 2.580 344.210 0.000 0.000 + 366 12 31 2016 5 50 aqu050 212.353 2.861 356.321 231.618 11.581 7.647 16.405 0.000 0.500 0.000 158.655 140.207 19.946 1.004 212.353 0.000 0.000 + 366 12 31 2016 6 60 aqu060 396.576 2.664 365.620 425.326 21.266 7.363 20.040 0.000 0.500 0.000 234.334 170.951 60.325 3.342 396.576 0.000 0.000 + 366 12 31 2016 7 70 aqu070 332.921 2.735 362.272 358.247 17.912 7.363 20.686 0.000 0.500 0.000 225.312 176.572 46.923 2.509 332.921 0.000 0.000 + 366 12 31 2016 8 80 aqu080 361.532 2.701 363.893 388.330 19.416 7.363 19.125 0.000 0.500 0.000 215.926 163.187 50.424 2.738 361.532 0.000 0.000 + 366 12 31 2016 9 90 aqu090 387.636 2.680 364.867 415.818 20.791 7.363 20.872 0.000 0.500 0.000 239.495 178.087 58.643 3.212 387.636 0.000 0.000 + 366 12 31 2016 10 100 aqu100 241.948 2.852 356.684 262.769 13.138 7.428 21.869 0.000 0.500 0.000 218.931 186.833 31.691 1.623 241.948 0.000 0.000 + 366 12 31 2016 11 110 aqu110 193.770 2.888 355.027 211.507 10.575 7.363 18.970 0.000 0.500 0.000 182.428 162.157 20.917 1.061 193.770 0.000 0.000 + 366 12 31 2016 12 120 aqu120 158.581 2.916 353.709 174.596 8.730 7.463 15.470 0.000 0.500 0.000 145.778 132.255 14.180 0.725 158.581 0.000 0.000 + 366 12 31 2016 13 130 aqu130 203.758 2.866 356.084 221.409 11.070 7.363 16.878 0.000 0.500 0.000 163.576 144.241 19.819 0.992 203.758 0.000 0.000 + 366 12 31 2016 14 140 aqu140 200.185 2.873 355.762 218.662 10.933 7.647 18.204 0.000 0.500 0.000 175.250 155.620 20.110 1.028 200.185 0.000 0.000 + 366 12 31 2016 15 150 aqu150 134.342 2.928 353.204 149.694 7.485 7.428 14.658 0.000 0.500 0.000 136.292 125.305 11.504 0.595 134.342 0.000 0.000 + 366 12 31 2016 16 160 aqu160 188.286 2.888 355.045 206.562 10.328 7.463 17.544 0.000 0.500 0.000 168.320 149.979 18.918 0.962 188.286 0.000 0.000 + 366 12 31 2016 17 170 aqu170 183.533 2.885 355.208 201.080 10.054 7.463 17.766 0.000 0.500 0.000 170.289 151.881 18.847 0.964 183.533 0.000 0.000 + 366 12 31 2016 18 180 aqu180 191.353 2.882 355.309 208.828 10.441 7.428 18.906 0.000 0.500 0.000 182.030 161.623 20.919 1.065 191.353 0.000 0.000 + 366 12 31 2016 19 190 aqu190 182.174 2.890 354.954 199.346 9.967 7.428 15.341 0.000 0.500 0.000 148.468 131.066 17.268 0.883 182.174 0.000 0.000 + 366 12 31 2016 20 200 aqu200 309.379 2.753 361.432 333.652 16.683 7.554 21.205 0.000 0.500 0.000 224.095 181.138 40.874 2.131 309.379 0.000 0.000 + 366 12 31 2016 21 210 aqu210 195.207 2.892 354.835 213.947 10.697 7.463 17.484 0.000 0.500 0.000 168.693 149.451 19.670 0.998 195.207 0.000 0.000 + 366 12 31 2016 22 220 aqu220 182.399 2.888 355.036 199.871 9.994 7.428 19.156 0.000 0.500 0.000 183.496 163.764 20.134 1.031 182.399 0.000 0.000 + 366 12 31 2016 23 230 aqu230 186.595 2.878 355.527 204.276 10.214 7.463 17.797 0.000 0.500 0.000 169.318 152.148 18.729 0.958 186.595 0.000 0.000 + 366 12 31 2016 24 240 aqu240 184.762 2.897 354.589 202.261 10.113 7.428 18.525 0.000 0.500 0.000 177.903 158.377 19.831 1.016 184.762 0.000 0.000 + 366 12 31 2016 25 250 aqu250 179.294 2.896 354.660 196.118 9.806 7.463 17.436 0.000 0.500 0.000 166.539 149.066 18.041 0.923 179.294 0.000 0.000 + 366 12 31 2016 26 260 aqu260 286.744 2.780 360.136 309.715 15.486 7.440 20.420 0.000 0.500 0.000 211.813 174.419 36.110 1.874 286.744 0.000 0.000 + 366 12 31 2016 27 270 aqu270 185.441 2.890 354.950 203.274 10.164 7.463 18.425 0.000 0.500 0.000 176.418 157.527 19.581 1.003 185.441 0.000 0.000 + 366 12 31 2016 28 280 aqu280 220.484 2.875 355.596 240.084 12.004 7.463 18.379 0.000 0.500 0.000 180.019 157.136 23.263 1.188 220.484 0.000 0.000 + 366 12 31 2016 29 290 aqu290 359.789 2.705 363.698 386.569 19.328 7.428 20.945 0.000 0.500 0.000 235.274 178.734 54.052 2.928 359.789 0.000 0.000 + 366 12 31 2016 30 300 aqu300 193.277 2.893 354.757 211.400 10.570 7.499 19.836 0.000 0.500 0.000 191.791 169.579 21.882 1.123 193.277 0.000 0.000 + 366 12 31 2016 31 310 aqu310 346.106 2.721 362.916 372.129 18.606 7.428 16.976 0.000 0.500 0.000 186.309 144.907 39.831 2.129 346.106 0.000 0.000 + 366 12 31 2016 32 320 aqu320 262.739 2.823 358.066 284.408 14.220 7.440 19.390 0.000 0.500 0.000 196.408 165.669 29.876 1.521 262.739 0.000 0.000 + 366 12 31 2016 33 330 aqu330 199.738 2.880 355.423 217.898 10.895 7.451 18.262 0.000 0.500 0.000 177.255 156.097 20.905 1.055 0.000 199.738 0.000 + 366 12 31 2016 34 340 aqu340 192.777 2.879 355.473 210.438 10.522 7.499 19.638 0.000 0.500 0.000 189.446 167.890 21.545 1.101 192.777 0.000 0.000 + 366 12 31 2016 35 350 aqu350 190.963 2.879 355.475 208.711 10.436 7.440 14.687 0.000 0.500 0.000 140.981 125.547 16.078 0.819 190.963 0.000 0.000 + 366 12 31 2016 36 360 aqu360 214.381 2.876 355.541 233.621 11.681 7.428 19.097 0.000 0.500 0.000 186.763 163.224 23.580 1.189 214.381 0.000 0.000 + 366 12 31 2016 37 370 aqu370 217.161 2.866 356.032 236.982 11.849 7.499 19.414 0.000 0.500 0.000 190.516 165.948 24.111 1.220 217.161 0.000 0.000 + 366 12 31 2016 38 380 aqu380 221.019 2.865 356.118 240.239 12.012 7.428 17.944 0.000 0.500 0.000 176.353 153.356 22.930 1.150 221.019 0.000 0.000 + 366 12 31 2016 39 390 aqu390 191.050 2.883 355.285 209.623 10.481 7.499 19.837 0.000 0.500 0.000 191.514 169.593 21.645 1.111 191.050 0.000 0.000 + 366 12 31 2016 40 400 aqu400 190.829 2.878 355.516 209.164 10.458 7.363 19.671 0.000 0.500 0.000 188.879 168.160 21.348 1.091 190.829 0.000 0.000 + 366 12 31 2016 41 410 aqu410 0.000 3.688 315.601 0.000 0.000 7.440 0.000 0.000 0.500 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 + 366 12 31 2016 42 420 aqu420 193.962 2.882 355.317 211.225 10.561 7.440 17.829 0.000 0.500 0.000 171.948 152.399 19.747 0.994 193.962 0.000 0.000 + 366 12 31 2016 43 430 aqu430 196.387 2.887 355.062 214.739 10.737 7.451 20.294 0.000 0.500 0.000 196.355 173.504 22.822 1.169 0.000 196.387 0.000 + 366 12 31 2016 44 440 aqu440 195.641 2.880 355.411 214.062 10.703 7.451 20.462 0.000 0.500 0.000 198.208 174.938 23.009 1.178 195.641 0.000 0.000 + 366 12 31 2016 45 450 aqu450 193.207 2.880 355.444 212.111 10.606 7.451 19.907 0.000 0.500 0.000 192.644 170.198 22.191 1.140 193.207 0.000 0.000 + 366 12 31 2016 46 460 aqu460 146.217 2.920 353.576 161.813 8.091 7.451 15.347 0.000 0.500 0.000 144.357 131.209 13.145 0.678 146.217 0.000 0.000 + 366 12 31 2016 47 470 aqu470 194.227 2.888 355.005 212.756 10.638 7.451 19.382 0.000 0.500 0.000 187.788 165.701 21.809 1.120 194.227 0.000 0.000 + 366 12 31 2016 48 480 aqu480 194.858 2.890 354.913 213.370 10.668 7.451 17.412 0.000 0.500 0.000 169.291 148.854 20.027 1.032 194.858 0.000 0.000 + 366 12 31 2016 49 490 aqu490 197.545 2.874 355.702 216.512 10.826 7.451 19.077 0.000 0.500 0.000 185.206 163.095 21.810 1.120 197.545 0.000 0.000 + 366 12 31 2016 50 500 aqu500 408.264 2.656 366.031 437.474 21.874 7.451 21.207 0.000 0.500 0.000 251.392 180.928 66.508 3.705 408.264 0.000 0.000 + 366 12 31 2016 51 510 aqu510 231.831 2.851 356.739 251.449 12.572 7.440 18.849 0.000 0.500 0.000 188.375 161.047 26.575 1.358 231.831 0.000 0.000 + 366 12 31 2016 52 51 aqu_deep051 0.000 18.355 2449.347 12.025 0.000 0.000 0.152 0.000 0.500 0.000 1.284 1.301 0.000 0.000 0.000 0.000 0.000 + 365 12 31 2017 1 10 aqu010 279.373 2.809 358.741 301.652 15.083 7.196 18.134 0.000 0.500 0.000 186.673 154.979 29.578 1.524 279.373 0.000 0.000 + 365 12 31 2017 2 20 aqu020 289.951 2.795 359.410 312.876 15.644 7.304 21.211 0.000 0.500 0.000 217.673 181.314 31.126 1.583 0.000 289.951 0.000 + 365 12 31 2017 3 30 aqu030 304.654 2.785 359.865 328.302 16.415 7.237 21.215 0.000 0.500 0.000 218.926 181.350 33.055 1.679 0.000 304.654 0.000 + 365 12 31 2017 4 40 aqu040 517.077 2.566 370.213 551.711 27.586 7.129 22.154 0.000 0.500 0.000 265.490 189.398 71.037 3.966 517.077 0.000 0.000 + 365 12 31 2017 5 50 aqu050 292.064 2.812 358.560 314.953 15.748 7.304 21.138 0.000 0.500 0.000 217.266 180.694 31.400 1.582 292.064 0.000 0.000 + 365 12 31 2017 6 60 aqu060 587.891 2.494 373.580 626.279 31.314 7.129 21.978 0.000 0.500 0.000 278.162 187.915 84.102 4.850 587.891 0.000 0.000 + 365 12 31 2017 7 70 aqu070 483.629 2.595 368.865 516.463 25.823 7.129 23.187 0.000 0.500 0.000 270.338 198.234 67.350 3.701 483.629 0.000 0.000 + 365 12 31 2017 8 80 aqu080 547.798 2.534 371.705 583.992 29.200 7.129 21.303 0.000 0.500 0.000 260.911 182.133 73.457 4.154 547.798 0.000 0.000 + 365 12 31 2017 9 90 aqu090 561.369 2.523 372.220 598.183 29.909 7.129 22.986 0.000 0.500 0.000 283.383 196.529 81.064 4.594 561.369 0.000 0.000 + 365 12 31 2017 10 100 aqu100 325.403 2.778 360.149 350.545 17.527 7.196 24.610 0.000 0.500 0.000 257.651 210.389 44.259 2.283 325.403 0.000 0.000 + 365 12 31 2017 11 110 aqu110 253.645 2.840 357.269 275.407 13.770 7.129 22.471 0.000 0.500 0.000 225.177 192.122 30.841 1.567 253.645 0.000 0.000 + 365 12 31 2017 12 120 aqu120 221.047 2.865 356.105 241.099 12.055 7.237 20.061 0.000 0.500 0.000 198.232 171.497 22.828 1.179 221.047 0.000 0.000 + 365 12 31 2017 13 130 aqu130 284.191 2.815 358.434 307.472 15.374 7.129 20.009 0.000 0.500 0.000 204.131 171.059 30.709 1.548 284.191 0.000 0.000 + 365 12 31 2017 14 140 aqu140 262.090 2.834 357.538 282.902 14.145 7.304 22.875 0.000 0.500 0.000 230.534 195.541 30.203 1.541 262.090 0.000 0.000 + 365 12 31 2017 15 150 aqu150 167.313 2.902 354.411 183.895 9.195 7.196 16.745 0.000 0.500 0.000 159.917 143.157 15.517 0.797 167.313 0.000 0.000 + 365 12 31 2017 16 160 aqu160 267.159 2.834 357.518 288.952 14.448 7.237 22.614 0.000 0.500 0.000 229.020 193.321 31.049 1.576 267.159 0.000 0.000 + 365 12 31 2017 17 170 aqu170 245.644 2.844 357.096 266.604 13.330 7.237 22.268 0.000 0.500 0.000 222.857 190.375 28.605 1.472 245.644 0.000 0.000 + 365 12 31 2017 18 180 aqu180 244.311 2.844 357.075 265.400 13.270 7.196 21.894 0.000 0.500 0.000 218.602 187.182 29.203 1.488 244.311 0.000 0.000 + 365 12 31 2017 19 190 aqu190 247.709 2.839 357.303 268.589 13.429 7.196 17.464 0.000 0.500 0.000 175.864 149.288 24.721 1.272 247.709 0.000 0.000 + 365 12 31 2017 20 200 aqu200 472.442 2.659 365.691 504.928 25.246 7.203 25.233 0.000 0.500 0.000 286.532 215.696 65.043 3.507 472.442 0.000 0.000 + 365 12 31 2017 21 210 aqu210 270.484 2.817 358.338 292.562 14.628 7.237 22.221 0.000 0.500 0.000 224.982 189.964 30.564 1.561 270.484 0.000 0.000 + 365 12 31 2017 22 220 aqu220 227.768 2.859 356.396 248.140 12.407 7.196 22.185 0.000 0.500 0.000 219.348 189.670 27.387 1.404 227.768 0.000 0.000 + 365 12 31 2017 23 230 aqu230 249.440 2.840 357.263 270.117 13.506 7.237 23.301 0.000 0.500 0.000 234.049 199.193 29.647 1.516 249.440 0.000 0.000 + 365 12 31 2017 24 240 aqu240 237.255 2.851 356.772 258.274 12.914 7.196 22.156 0.000 0.500 0.000 220.468 189.421 28.189 1.448 237.255 0.000 0.000 + 365 12 31 2017 25 250 aqu250 243.940 2.857 356.422 264.950 13.248 7.237 22.559 0.000 0.500 0.000 225.986 192.857 28.616 1.469 243.940 0.000 0.000 + 365 12 31 2017 26 260 aqu260 423.488 2.691 364.207 453.413 22.671 7.215 24.084 0.000 0.500 0.000 266.518 205.872 55.417 2.942 423.488 0.000 0.000 + 365 12 31 2017 27 270 aqu270 252.872 2.844 357.052 273.003 13.650 7.237 23.832 0.000 0.500 0.000 239.651 203.736 31.025 1.583 252.872 0.000 0.000 + 365 12 31 2017 28 280 aqu280 289.643 2.823 358.015 313.188 15.659 7.237 23.002 0.000 0.500 0.000 235.630 196.658 34.613 1.770 289.643 0.000 0.000 + 365 12 31 2017 29 290 aqu290 534.578 2.546 371.163 570.180 28.509 7.196 23.103 0.000 0.500 0.000 280.734 197.515 77.857 4.385 534.578 0.000 0.000 + 365 12 31 2017 30 300 aqu300 260.448 2.849 356.804 281.630 14.082 7.260 24.109 0.000 0.500 0.000 243.052 206.084 31.646 1.617 260.448 0.000 0.000 + 365 12 31 2017 31 310 aqu310 509.812 2.573 369.856 544.101 27.205 7.196 18.838 0.000 0.500 0.000 222.173 161.046 56.952 3.138 509.812 0.000 0.000 + 365 12 31 2017 32 320 aqu320 386.616 2.719 362.910 414.563 20.728 7.215 23.218 0.000 0.500 0.000 249.452 198.460 46.271 2.405 386.616 0.000 0.000 + 365 12 31 2017 33 330 aqu330 277.153 2.827 357.850 300.037 15.002 7.223 21.731 0.000 0.500 0.000 220.608 185.762 30.505 1.541 0.000 277.153 0.000 + 365 12 31 2017 34 340 aqu340 258.730 2.836 357.423 280.650 14.033 7.260 24.249 0.000 0.500 0.000 244.314 207.294 31.746 1.624 258.730 0.000 0.000 + 365 12 31 2017 35 350 aqu350 273.268 2.823 358.054 295.135 14.757 7.215 17.918 0.000 0.500 0.000 181.880 153.168 25.425 1.294 273.268 0.000 0.000 + 365 12 31 2017 36 360 aqu360 277.364 2.819 358.252 300.241 15.012 7.196 21.790 0.000 0.500 0.000 221.021 186.291 32.359 1.633 277.364 0.000 0.000 + 365 12 31 2017 37 370 aqu370 299.238 2.812 358.532 322.588 16.129 7.260 23.054 0.000 0.500 0.000 236.620 197.072 34.669 1.749 299.238 0.000 0.000 + 365 12 31 2017 38 380 aqu380 306.723 2.797 359.264 331.427 16.571 7.196 21.091 0.000 0.500 0.000 217.318 180.301 33.624 1.703 306.723 0.000 0.000 + 365 12 31 2017 39 390 aqu390 256.134 2.842 357.149 277.047 13.852 7.260 23.873 0.000 0.500 0.000 240.028 204.075 30.940 1.580 256.134 0.000 0.000 + 365 12 31 2017 40 400 aqu400 242.037 2.845 357.039 261.495 13.075 7.129 23.157 0.000 0.500 0.000 230.596 197.990 30.505 1.550 242.037 0.000 0.000 + 365 12 31 2017 41 410 aqu410 0.000 3.833 308.336 0.000 0.000 7.215 0.000 0.000 0.500 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 + 365 12 31 2017 42 420 aqu420 281.087 2.819 358.206 303.711 15.186 7.215 21.468 0.000 0.500 0.000 218.408 183.510 31.076 1.568 281.087 0.000 0.000 + 365 12 31 2017 43 430 aqu430 256.140 2.835 357.503 277.198 13.860 7.223 23.952 0.000 0.500 0.000 240.518 204.758 31.687 1.616 0.000 256.140 0.000 + 365 12 31 2017 44 440 aqu440 255.555 2.849 356.820 276.640 13.832 7.223 24.026 0.000 0.500 0.000 241.285 205.389 31.692 1.617 255.555 0.000 0.000 + 365 12 31 2017 45 450 aqu450 254.279 2.840 357.263 274.925 13.746 7.223 23.391 0.000 0.500 0.000 234.745 199.962 30.739 1.568 254.279 0.000 0.000 + 365 12 31 2017 46 460 aqu460 192.178 2.887 355.079 210.516 10.526 7.223 18.132 0.000 0.500 0.000 176.013 155.003 18.143 0.943 192.178 0.000 0.000 + 365 12 31 2017 47 470 aqu470 255.935 2.841 357.191 276.355 13.818 7.223 22.805 0.000 0.500 0.000 229.102 194.954 30.268 1.543 255.935 0.000 0.000 + 365 12 31 2017 48 480 aqu480 258.067 2.839 357.280 279.493 13.975 7.223 20.415 0.000 0.500 0.000 205.656 174.531 27.767 1.425 258.067 0.000 0.000 + 365 12 31 2017 49 490 aqu490 261.056 2.838 357.354 281.593 14.080 7.223 22.380 0.000 0.500 0.000 225.454 191.323 30.314 1.545 261.056 0.000 0.000 + 365 12 31 2017 50 500 aqu500 635.467 2.452 375.536 676.595 33.830 7.223 23.602 0.000 0.500 0.000 302.133 201.810 91.861 5.336 635.467 0.000 0.000 + 365 12 31 2017 51 510 aqu510 326.222 2.779 360.082 351.392 17.570 7.215 22.002 0.000 0.500 0.000 230.506 188.060 38.260 1.981 326.222 0.000 0.000 + 365 12 31 2017 52 51 aqu_deep051 0.000 17.879 2463.621 16.625 0.000 0.000 0.222 0.000 0.500 0.000 1.922 1.898 0.000 0.000 0.000 0.000 0.000 + 365 12 31 2018 1 10 aqu010 240.346 2.813 358.634 260.803 13.040 7.500 14.239 0.000 0.500 0.000 141.785 121.686 20.721 1.071 240.346 0.000 0.000 + 365 12 31 2018 2 20 aqu020 257.544 2.806 358.917 279.146 13.957 7.683 15.838 0.000 0.500 0.000 154.228 135.360 21.661 1.097 0.000 257.544 0.000 + 365 12 31 2018 3 30 aqu030 260.271 2.804 359.022 281.904 14.095 7.568 15.111 0.000 0.500 0.000 147.579 129.143 20.905 1.055 0.000 260.271 0.000 + 365 12 31 2018 4 40 aqu040 449.099 2.622 367.567 480.582 24.029 7.406 17.560 0.000 0.500 0.000 205.262 150.150 54.470 3.021 449.099 0.000 0.000 + 365 12 31 2018 5 50 aqu050 254.796 2.814 358.567 276.400 13.820 7.683 15.967 0.000 0.500 0.000 155.105 136.466 21.454 1.092 254.796 0.000 0.000 + 365 12 31 2018 6 60 aqu060 507.289 2.563 370.373 541.726 27.086 7.406 17.756 0.000 0.500 0.000 219.983 151.852 66.934 3.831 507.289 0.000 0.000 + 365 12 31 2018 7 70 aqu070 418.604 2.650 366.282 448.570 22.429 7.406 18.657 0.000 0.500 0.000 211.525 159.520 51.568 2.822 418.604 0.000 0.000 + 365 12 31 2018 8 80 aqu080 473.589 2.600 368.645 506.370 25.319 7.406 17.031 0.000 0.500 0.000 203.544 145.635 57.094 3.200 473.589 0.000 0.000 + 365 12 31 2018 9 90 aqu090 485.764 2.590 369.111 519.241 25.962 7.406 18.694 0.000 0.500 0.000 225.296 159.858 64.404 3.632 485.764 0.000 0.000 + 365 12 31 2018 10 100 aqu100 282.739 2.798 359.274 305.512 15.276 7.500 19.521 0.000 0.500 0.000 197.814 166.879 31.612 1.634 282.739 0.000 0.000 + 365 12 31 2018 11 110 aqu110 224.892 2.848 356.946 244.532 12.227 7.406 17.707 0.000 0.500 0.000 172.194 151.349 21.584 1.092 224.892 0.000 0.000 + 365 12 31 2018 12 120 aqu120 187.394 2.885 355.185 205.197 10.260 7.568 14.197 0.000 0.500 0.000 132.665 121.325 14.125 0.720 187.394 0.000 0.000 + 365 12 31 2018 13 130 aqu130 248.212 2.832 357.665 269.073 13.454 7.406 15.577 0.000 0.500 0.000 153.472 133.146 21.037 1.052 248.212 0.000 0.000 + 365 12 31 2018 14 140 aqu140 230.498 2.856 356.524 251.481 12.574 7.683 17.050 0.000 0.500 0.000 162.873 145.693 19.740 1.017 230.498 0.000 0.000 + 365 12 31 2018 15 150 aqu150 148.889 2.915 353.794 164.233 8.212 7.500 13.129 0.000 0.500 0.000 122.163 112.222 10.895 0.562 148.889 0.000 0.000 + 365 12 31 2018 16 160 aqu160 226.608 2.857 356.499 246.630 12.332 7.568 16.068 0.000 0.500 0.000 153.527 137.319 19.149 0.969 226.608 0.000 0.000 + 365 12 31 2018 17 170 aqu170 209.921 2.865 356.126 228.950 11.448 7.568 16.187 0.000 0.500 0.000 154.095 138.347 18.241 0.935 209.921 0.000 0.000 + 365 12 31 2018 18 180 aqu180 215.278 2.856 356.565 234.449 11.722 7.500 16.935 0.000 0.500 0.000 163.880 144.758 20.053 1.021 215.278 0.000 0.000 + 365 12 31 2018 19 190 aqu190 214.274 2.840 357.363 233.405 11.670 7.500 13.771 0.000 0.500 0.000 134.308 117.722 17.374 0.901 214.274 0.000 0.000 + 365 12 31 2018 20 200 aqu200 407.855 2.667 365.444 437.145 21.857 7.428 19.042 0.000 0.500 0.000 207.183 162.784 45.137 2.424 407.855 0.000 0.000 + 365 12 31 2018 21 210 aqu210 228.507 2.852 356.708 248.526 12.426 7.568 15.974 0.000 0.500 0.000 153.045 136.519 19.309 0.977 228.507 0.000 0.000 + 365 12 31 2018 22 220 aqu220 201.581 2.867 356.037 220.088 11.004 7.500 17.160 0.000 0.500 0.000 164.368 146.680 18.952 0.970 201.581 0.000 0.000 + 365 12 31 2018 23 230 aqu230 215.206 2.859 356.421 234.543 11.727 7.568 17.117 0.000 0.500 0.000 162.138 146.278 19.055 0.979 215.206 0.000 0.000 + 365 12 31 2018 24 240 aqu240 207.457 2.867 356.055 226.245 11.312 7.500 16.705 0.000 0.500 0.000 160.004 142.789 18.924 0.969 207.457 0.000 0.000 + 365 12 31 2018 25 250 aqu250 206.020 2.872 355.801 224.921 11.246 7.568 16.004 0.000 0.500 0.000 151.214 136.774 17.503 0.897 206.020 0.000 0.000 + 365 12 31 2018 26 260 aqu260 360.534 2.710 363.452 387.293 19.365 7.493 18.377 0.000 0.500 0.000 194.312 157.103 38.399 2.032 360.534 0.000 0.000 + 365 12 31 2018 27 270 aqu270 212.015 2.878 355.492 231.993 11.600 7.568 16.901 0.000 0.500 0.000 160.006 144.437 18.778 0.964 212.015 0.000 0.000 + 365 12 31 2018 28 280 aqu280 251.874 2.836 357.444 273.282 13.664 7.568 16.828 0.000 0.500 0.000 163.786 143.824 22.236 1.137 251.874 0.000 0.000 + 365 12 31 2018 29 290 aqu290 452.177 2.618 367.769 483.895 24.195 7.500 18.441 0.000 0.500 0.000 217.600 157.717 59.065 3.292 452.177 0.000 0.000 + 365 12 31 2018 30 300 aqu300 230.938 2.862 356.219 251.866 12.593 7.562 17.806 0.000 0.500 0.000 169.953 152.144 20.557 1.056 230.938 0.000 0.000 + 365 12 31 2018 31 310 aqu310 428.860 2.642 366.667 459.413 22.971 7.500 14.846 0.000 0.500 0.000 169.267 126.958 42.254 2.305 428.860 0.000 0.000 + 365 12 31 2018 32 320 aqu320 334.084 2.744 361.831 359.490 17.974 7.493 17.432 0.000 0.500 0.000 178.651 148.998 31.278 1.621 334.084 0.000 0.000 + 365 12 31 2018 33 330 aqu330 241.330 2.843 357.125 262.097 13.105 7.528 16.260 0.000 0.500 0.000 156.771 138.953 20.289 1.022 0.000 241.330 0.000 + 365 12 31 2018 34 340 aqu340 227.264 2.854 356.645 247.318 12.366 7.562 17.719 0.000 0.500 0.000 168.780 151.403 20.286 1.040 227.264 0.000 0.000 + 365 12 31 2018 35 350 aqu350 237.776 2.843 357.155 258.380 12.919 7.493 13.140 0.000 0.500 0.000 126.958 112.298 16.394 0.834 237.776 0.000 0.000 + 365 12 31 2018 36 360 aqu360 244.213 2.839 357.334 264.567 13.228 7.500 17.049 0.000 0.500 0.000 167.471 145.740 22.725 1.139 244.213 0.000 0.000 + 365 12 31 2018 37 370 aqu370 260.348 2.832 357.631 282.347 14.117 7.562 17.231 0.000 0.500 0.000 167.654 147.248 22.959 1.159 260.348 0.000 0.000 + 365 12 31 2018 38 380 aqu380 263.451 2.820 358.220 285.210 14.261 7.500 15.952 0.000 0.500 0.000 157.413 136.350 22.706 1.137 263.451 0.000 0.000 + 365 12 31 2018 39 390 aqu390 226.978 2.858 356.452 247.282 12.364 7.562 17.735 0.000 0.500 0.000 169.116 151.545 20.340 1.043 226.978 0.000 0.000 + 365 12 31 2018 40 400 aqu400 214.532 2.878 355.442 233.580 11.679 7.406 18.378 0.000 0.500 0.000 177.906 157.084 21.556 1.102 214.532 0.000 0.000 + 365 12 31 2018 41 410 aqu410 0.000 3.979 301.025 0.000 0.000 7.493 0.000 0.000 0.500 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 + 365 12 31 2018 42 420 aqu420 246.292 2.842 357.155 267.672 13.384 7.493 15.835 0.000 0.500 0.000 153.611 135.331 20.542 1.034 246.292 0.000 0.000 + 365 12 31 2018 43 430 aqu430 227.255 2.859 356.389 247.434 12.372 7.528 18.067 0.000 0.500 0.000 173.350 154.408 21.683 1.105 0.000 227.255 0.000 + 365 12 31 2018 44 440 aqu440 225.940 2.865 356.095 245.903 12.295 7.528 18.182 0.000 0.500 0.000 174.328 155.395 21.750 1.108 225.940 0.000 0.000 + 365 12 31 2018 45 450 aqu450 225.092 2.863 356.202 244.716 12.236 7.528 17.673 0.000 0.500 0.000 169.481 151.047 21.153 1.078 225.092 0.000 0.000 + 365 12 31 2018 46 460 aqu460 171.267 2.899 354.519 187.852 9.393 7.528 13.647 0.000 0.500 0.000 126.968 116.633 12.621 0.647 171.267 0.000 0.000 + 365 12 31 2018 47 470 aqu470 226.103 2.866 356.044 246.491 12.325 7.528 17.214 0.000 0.500 0.000 165.363 147.127 20.825 1.064 226.103 0.000 0.000 + 365 12 31 2018 48 480 aqu480 231.092 2.852 356.699 250.882 12.544 7.528 15.548 0.000 0.500 0.000 150.462 132.893 19.621 1.003 231.092 0.000 0.000 + 365 12 31 2018 49 490 aqu490 230.798 2.865 356.058 251.323 12.566 7.528 17.027 0.000 0.500 0.000 164.168 145.529 21.075 1.076 230.798 0.000 0.000 + 365 12 31 2018 50 500 aqu500 517.700 2.557 370.659 552.890 27.644 7.528 17.838 0.000 0.500 0.000 218.966 152.577 66.242 3.803 517.700 0.000 0.000 + 365 12 31 2018 51 510 aqu510 281.704 2.792 359.556 304.397 15.220 7.493 16.306 0.000 0.500 0.000 163.066 139.380 25.786 1.330 281.704 0.000 0.000 + 365 12 31 2018 52 51 aqu_deep051 0.000 17.347 2479.578 14.492 0.000 0.000 0.160 0.000 0.500 0.000 1.337 1.368 0.000 0.000 0.000 0.000 0.000 + 365 12 31 2019 1 10 aqu010 236.448 2.842 357.211 256.808 12.840 7.434 14.092 0.000 0.500 0.000 142.545 120.444 20.107 1.042 236.448 0.000 0.000 + 365 12 31 2019 2 20 aqu020 238.476 2.828 357.919 259.063 12.953 7.607 15.583 0.000 0.500 0.000 154.820 133.226 20.344 1.030 0.000 238.476 0.000 + 365 12 31 2019 3 30 aqu030 256.114 2.835 357.484 277.470 13.873 7.515 15.725 0.000 0.500 0.000 158.005 134.432 21.626 1.085 0.000 256.114 0.000 + 365 12 31 2019 4 40 aqu040 445.492 2.624 367.520 476.719 23.836 7.363 18.300 0.000 0.500 0.000 211.851 156.328 51.206 2.828 445.492 0.000 0.000 + 365 12 31 2019 5 50 aqu050 251.468 2.826 357.978 272.764 13.638 7.607 15.866 0.000 0.500 0.000 158.687 135.642 21.600 1.096 251.468 0.000 0.000 + 365 12 31 2019 6 60 aqu060 514.192 2.559 370.572 549.125 27.456 7.363 18.908 0.000 0.500 0.000 230.908 161.490 64.069 3.648 514.192 0.000 0.000 + 365 12 31 2019 7 70 aqu070 418.871 2.648 366.392 448.574 22.429 7.363 19.201 0.000 0.500 0.000 217.357 164.035 49.175 2.692 418.871 0.000 0.000 + 365 12 31 2019 8 80 aqu080 473.901 2.599 368.657 506.706 25.335 7.363 17.898 0.000 0.500 0.000 211.671 152.884 54.289 3.025 473.901 0.000 0.000 + 365 12 31 2019 9 90 aqu090 494.453 2.581 369.497 528.234 26.412 7.363 19.607 0.000 0.500 0.000 234.592 167.471 61.972 3.491 494.453 0.000 0.000 + 365 12 31 2019 10 100 aqu100 276.190 2.811 358.617 298.559 14.928 7.434 19.566 0.000 0.500 0.000 201.004 167.247 30.702 1.593 276.190 0.000 0.000 + 365 12 31 2019 11 110 aqu110 213.406 2.861 356.328 231.587 11.579 7.363 16.850 0.000 0.500 0.000 165.808 144.078 19.801 1.003 213.406 0.000 0.000 + 365 12 31 2019 12 120 aqu120 199.584 2.884 355.199 217.348 10.867 7.515 15.148 0.000 0.500 0.000 147.549 129.510 16.144 0.824 199.584 0.000 0.000 + 365 12 31 2019 13 130 aqu130 236.635 2.844 357.123 256.852 12.843 7.363 15.129 0.000 0.500 0.000 150.695 129.346 19.489 0.980 236.635 0.000 0.000 + 365 12 31 2019 14 140 aqu140 234.874 2.854 356.621 254.901 12.745 7.607 17.026 0.000 0.500 0.000 167.604 145.553 20.817 1.065 234.874 0.000 0.000 + 365 12 31 2019 15 150 aqu150 139.865 2.928 353.196 155.458 7.773 7.434 12.782 0.000 0.500 0.000 120.989 109.312 10.205 0.532 139.865 0.000 0.000 + 365 12 31 2019 16 160 aqu160 238.912 2.853 356.658 258.758 12.938 7.515 17.101 0.000 0.500 0.000 170.047 146.201 21.578 1.094 238.912 0.000 0.000 + 365 12 31 2019 17 170 aqu170 219.877 2.866 356.056 238.566 11.928 7.515 16.946 0.000 0.500 0.000 167.190 144.892 20.091 1.029 219.877 0.000 0.000 + 365 12 31 2019 18 180 aqu180 206.680 2.870 355.872 224.815 11.241 7.434 16.623 0.000 0.500 0.000 163.589 142.152 19.328 0.986 206.680 0.000 0.000 + 365 12 31 2019 19 190 aqu190 209.259 2.860 356.356 228.142 11.407 7.434 13.792 0.000 0.500 0.000 136.738 117.889 16.935 0.879 209.259 0.000 0.000 + 365 12 31 2019 20 200 aqu200 403.473 2.667 365.473 432.528 21.626 7.462 19.402 0.000 0.500 0.000 213.589 165.885 44.260 2.357 403.473 0.000 0.000 + 365 12 31 2019 21 210 aqu210 241.853 2.849 356.834 262.267 13.113 7.515 16.865 0.000 0.500 0.000 168.032 144.188 21.582 1.092 241.853 0.000 0.000 + 365 12 31 2019 22 220 aqu220 194.636 2.874 355.732 211.977 10.599 7.434 16.973 0.000 0.500 0.000 165.742 145.148 18.407 0.943 194.636 0.000 0.000 + 365 12 31 2019 23 230 aqu230 223.849 2.860 356.328 243.129 12.156 7.515 17.491 0.000 0.500 0.000 172.086 149.538 20.859 1.068 223.849 0.000 0.000 + 365 12 31 2019 24 240 aqu240 206.224 2.865 356.138 224.783 11.239 7.434 16.918 0.000 0.500 0.000 166.003 144.675 19.107 0.981 206.224 0.000 0.000 + 365 12 31 2019 25 250 aqu250 222.620 2.864 356.137 241.788 12.089 7.515 17.115 0.000 0.500 0.000 168.902 146.328 20.342 1.043 222.620 0.000 0.000 + 365 12 31 2019 26 260 aqu260 362.176 2.707 363.571 389.051 19.453 7.432 18.639 0.000 0.500 0.000 200.273 159.333 37.867 1.996 362.176 0.000 0.000 + 365 12 31 2019 27 270 aqu270 231.181 2.858 356.423 250.645 12.532 7.515 18.034 0.000 0.500 0.000 178.546 154.187 22.020 1.126 231.181 0.000 0.000 + 365 12 31 2019 28 280 aqu280 269.221 2.828 357.815 290.366 14.518 7.515 17.559 0.000 0.500 0.000 177.298 150.123 25.057 1.280 269.221 0.000 0.000 + 365 12 31 2019 29 290 aqu290 458.265 2.615 367.908 490.128 24.506 7.434 19.533 0.000 0.500 0.000 229.045 166.837 57.465 3.220 458.265 0.000 0.000 + 365 12 31 2019 30 300 aqu300 237.445 2.853 356.643 257.411 12.871 7.511 17.913 0.000 0.500 0.000 176.579 153.134 21.819 1.113 237.445 0.000 0.000 + 365 12 31 2019 31 310 aqu310 434.016 2.639 366.781 464.726 23.236 7.434 15.659 0.000 0.500 0.000 178.813 133.776 41.517 2.270 434.016 0.000 0.000 + 365 12 31 2019 32 320 aqu320 336.554 2.779 360.049 361.283 18.064 7.432 17.544 0.000 0.500 0.000 184.215 149.981 31.466 1.614 336.554 0.000 0.000 + 365 12 31 2019 33 330 aqu330 249.968 2.837 357.414 270.555 13.528 7.446 16.481 0.000 0.500 0.000 164.268 140.886 21.241 1.069 0.000 249.968 0.000 + 365 12 31 2019 34 340 aqu340 237.261 2.853 356.648 257.041 12.852 7.511 18.158 0.000 0.500 0.000 179.358 155.230 22.231 1.134 237.261 0.000 0.000 + 365 12 31 2019 35 350 aqu350 239.549 2.848 356.895 258.997 12.950 7.432 12.979 0.000 0.500 0.000 128.879 110.959 16.452 0.835 239.549 0.000 0.000 + 365 12 31 2019 36 360 aqu360 235.396 2.849 356.842 255.949 12.797 7.434 16.893 0.000 0.500 0.000 168.620 144.449 21.766 1.100 235.396 0.000 0.000 + 365 12 31 2019 37 370 aqu370 269.916 2.828 357.813 291.767 14.588 7.511 17.479 0.000 0.500 0.000 175.877 149.422 24.237 1.222 269.916 0.000 0.000 + 365 12 31 2019 38 380 aqu380 264.163 2.829 357.766 285.631 14.282 7.434 16.218 0.000 0.500 0.000 163.727 138.661 22.720 1.138 264.163 0.000 0.000 + 365 12 31 2019 39 390 aqu390 235.417 2.854 356.585 255.115 12.756 7.511 17.970 0.000 0.500 0.000 177.323 153.625 21.743 1.108 235.417 0.000 0.000 + 365 12 31 2019 40 400 aqu400 202.699 2.872 355.787 221.712 11.086 7.363 17.450 0.000 0.500 0.000 170.897 149.216 19.706 1.009 202.699 0.000 0.000 + 365 12 31 2019 41 410 aqu410 0.000 4.129 293.525 0.000 0.000 7.432 0.000 0.000 0.500 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 + 365 12 31 2019 42 420 aqu420 248.592 2.843 357.129 269.063 13.453 7.432 16.092 0.000 0.500 0.000 160.722 137.564 20.854 1.051 248.592 0.000 0.000 + 365 12 31 2019 43 430 aqu430 239.481 2.852 356.714 259.737 12.987 7.446 18.392 0.000 0.500 0.000 182.957 157.227 22.887 1.167 0.000 239.481 0.000 + 365 12 31 2019 44 440 aqu440 239.484 2.858 356.395 259.939 12.997 7.446 18.539 0.000 0.500 0.000 184.506 158.484 23.080 1.178 239.484 0.000 0.000 + 365 12 31 2019 45 450 aqu450 238.432 2.862 356.209 258.444 12.922 7.446 18.051 0.000 0.500 0.000 179.631 154.319 22.481 1.147 238.432 0.000 0.000 + 365 12 31 2019 46 460 aqu460 180.615 2.902 354.374 198.103 9.905 7.446 13.921 0.000 0.500 0.000 134.283 119.004 13.374 0.689 180.615 0.000 0.000 + 365 12 31 2019 47 470 aqu470 240.188 2.856 356.516 259.984 12.999 7.446 17.582 0.000 0.500 0.000 175.168 150.310 22.133 1.129 240.188 0.000 0.000 + 365 12 31 2019 48 480 aqu480 241.586 2.854 356.563 262.021 13.101 7.446 15.674 0.000 0.500 0.000 156.531 134.000 20.313 1.042 241.586 0.000 0.000 + 365 12 31 2019 49 490 aqu490 243.584 2.854 356.589 264.471 13.224 7.446 17.247 0.000 0.500 0.000 172.151 147.446 22.080 1.130 243.584 0.000 0.000 + 365 12 31 2019 50 500 aqu500 530.930 2.544 371.256 566.703 28.335 7.446 18.314 0.000 0.500 0.000 227.734 156.616 66.272 3.796 530.930 0.000 0.000 + 365 12 31 2019 51 510 aqu510 293.688 2.813 358.469 316.307 15.815 7.432 16.837 0.000 0.500 0.000 174.262 143.921 27.467 1.411 293.688 0.000 0.000 + 365 12 31 2019 52 51 aqu_deep051 0.000 16.876 2493.731 14.579 0.000 0.000 0.155 0.000 0.500 0.000 1.337 1.327 0.000 0.000 0.000 0.000 0.000 diff --git a/tests/test_filereader.py b/tests/test_filereader.py new file mode 100644 index 0000000..dceb6d6 --- /dev/null +++ b/tests/test_filereader.py @@ -0,0 +1,37 @@ +import os +import pySWATPlus +import pytest + + +@pytest.fixture(scope='class') +def file_reader(): + + # set up file path + test_folder = os.path.dirname(__file__) + data_folder = os.path.join(test_folder, 'sample_data') + data_file = os.path.join(data_folder, 'aquifer_yr.txt') + + # DataFrame from input data file + file_reader = pySWATPlus.FileReader( + path=data_file, + has_units=True + ) + + yield file_reader + + +def test_get_df( + file_reader +): + + # read DataFrame + df = file_reader.df + + assert df.shape[0] == 260 + + +def test_trigger( + file_reader +): + + assert str(2) == '2' From ef6d6196ab02327ecf4b0e1bd4595815070c473f Mon Sep 17 00:00:00 2001 From: Debasish Pal <48341250+debpal@users.noreply.github.com> Date: Wed, 14 May 2025 21:38:44 +0300 Subject: [PATCH 6/8] pytest check --- pyproject.toml | 3 ++- requirements.txt | 3 ++- tests/sample_data/{aquifer_yrr.txt => aquifer_yr.txt} | 0 tests/test_filereader.py | 4 ++-- 4 files changed, 6 insertions(+), 4 deletions(-) rename tests/sample_data/{aquifer_yrr.txt => aquifer_yr.txt} (100%) diff --git a/pyproject.toml b/pyproject.toml index 5329e6d..6c5d88f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,7 +32,8 @@ dependencies = [ "pandas", "pymoo", "tqdm", - "dask" + "dask", + "dask-expr" ] [project.urls] diff --git a/requirements.txt b/requirements.txt index 4f69263..62a6125 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,4 +4,5 @@ pandas numpy pymoo tqdm -dask \ No newline at end of file +dask +dask-expr \ No newline at end of file diff --git a/tests/sample_data/aquifer_yrr.txt b/tests/sample_data/aquifer_yr.txt similarity index 100% rename from tests/sample_data/aquifer_yrr.txt rename to tests/sample_data/aquifer_yr.txt diff --git a/tests/test_filereader.py b/tests/test_filereader.py index dceb6d6..546699a 100644 --- a/tests/test_filereader.py +++ b/tests/test_filereader.py @@ -28,8 +28,8 @@ def test_get_df( df = file_reader.df assert df.shape[0] == 260 - - + + def test_trigger( file_reader ): From 5560b92da43df25f1bf621c7287369a1a8aa7ae0 Mon Sep 17 00:00:00 2001 From: Debasish Pal <48341250+debpal@users.noreply.github.com> Date: Wed, 14 May 2025 21:42:05 +0300 Subject: [PATCH 7/8] update dependencies --- pyproject.toml | 3 ++- requirements.txt | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 6c5d88f..b3723ce 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,8 @@ dependencies = [ "pymoo", "tqdm", "dask", - "dask-expr" + "dask-expr", + "pyarrow" ] [project.urls] diff --git a/requirements.txt b/requirements.txt index 62a6125..ae08252 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,4 +5,5 @@ numpy pymoo tqdm dask -dask-expr \ No newline at end of file +dask-expr +pyarrow \ No newline at end of file From a192335975e3a478aa790edc5b5bb407314c9e2d Mon Sep 17 00:00:00 2001 From: Debasish Pal <48341250+debpal@users.noreply.github.com> Date: Wed, 14 May 2025 21:42:49 +0300 Subject: [PATCH 8/8] pytest check --- tests/test_filereader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_filereader.py b/tests/test_filereader.py index 546699a..c48d464 100644 --- a/tests/test_filereader.py +++ b/tests/test_filereader.py @@ -34,4 +34,4 @@ def test_trigger( file_reader ): - assert str(2) == '2' + assert str(3) == '3'