Skip to main content

Python implementation of Tank Hydrological model by Sugawara and Funiyuki (1956)

Project description

TJ_HYD_TANK

PyPI - Version

Python implementation of the Tank Hydrological model by Sugawara and Funiyuki (1956), based on the original code from tank-model by hckaraman.

Installation

To install the package, run:

pip install tj_hyd_tank

Getting Started

Prepare the Dataset

Dataset Requirements

Your dataset should contain the following columns: Date, Precipitation, Evapotranspiration, and **Discharge **. The column names are customizable.

Example:

Date Q P E
10/9/2016 0.25694 0 2.79
10/10/2016 0.25812 0 3.46
10/11/2016 0.30983 0 3.65
10/12/2016 0.31422 0 3.46
10/13/2016 0.30866 0 5.64
10/14/2016 0.30868 0 3.24
10/15/2016 0.31299 0 3.41
... ... ... ...

Ensure the time intervals between dates are consistent (e.g., 24 hours) for accurate model performance.

Basin File

Use a HEC-HMS basin file.

Quick Start

import pandas as pd
from tj_hyd_tank import TJHydTANK, TANKColNames, TANKConfig

df = pd.read_csv('assets/data_example.csv')
tank_cols_name = TANKColNames(
    date='Date',
    precipitation='P',
    evapotranspiration='E',
    discharge='Q'
)
tank_config = TANKConfig(
    start_date=None,
    end_date=None,
    interval=24.0
)

tank = TJHydTANK(
    basin_file='assets/CedarCreek.basin',
    df=df,
    tank_col_names=tank_cols_name,
    tank_config=tank_config
)

Accessing Basin Definitions

from tj_hyd_tank import Subbasin, Reach

for basin_def in tank.basin_defs:
    print(basin_def.name, basin_def.type)
    print(basin_def.stats)
    if isinstance(basin_def, (Subbasin, Reach)):
        print(basin_def.params)

Accessing Root Nodes

from tj_hyd_tank import Subbasin, Reach

for root_node in tank.root_node:
    print(root_node.name, root_node.type)
    print(root_node.stats)
    if isinstance(root_node, (Subbasin, Reach)):
        print(root_node.params)

Plotting Q_obs vs Q_sim for a Basin Definition

outlet1 = tank.get_basin_def_by_name('Outlet1')
if outlet1 is not None:
    tank.show_discharge(outlet1)

Reconfiguring and Displaying Subbasin Properties

from tj_hyd_tank import SubbasinParams

w170 = tank.get_basin_def_by_name('W170')
if w170 is not None:
    if isinstance(w170, Subbasin):
        tank.reconfig_subbasin_params(
            w170,
            SubbasinParams(
                t0_is=0.02,
                t0_soc_uo=80.0
            )
        )
        print('Q_tank_0', w170.Q_tank_0.tolist())
        print('Q_tank_1', w170.Q_tank_1.tolist())
        print('Q_tank_2', w170.Q_tank_2.tolist())
        print('Q_tank_3', w170.Q_tank_3.tolist())
        print('bottom_outlet_flow_tank_0', w170.bottom_outlet_flow_tank_0.tolist())
        print('bottom_outlet_flow_tank_1', w170.bottom_outlet_flow_tank_1.tolist())
        print('bottom_outlet_flow_tank_2', w170.bottom_outlet_flow_tank_2.tolist())

Reconfiguring the TANK Model

tank.reconfig_tank(
    TANKConfig(
        start_date=pd.to_datetime('09/10/2016', dayfirst=True, utc=True),
        end_date=pd.to_datetime('20/10/2016', dayfirst=True, utc=True)
    )
)

Exporting Data to DataFrame

outlet1_df = tank.to_dataframe(outlet1)
outlet1_df

Viewing Logs

print(tank.logs)

BasinDef Subclass

Subbasin

  • Params: SubbasinParams

Junction

  • Params: BasinDefParams

Sink

  • Params: BasinDefParams

Reach

  • Params: ReachParams

Exception Classes

InvalidBasinFileException

Raised when a basin file is invalid, possibly due to incorrect format or corrupted data.

FileNotFoundException

Raised when a specified file cannot be located. The missing file's name is included for easy identification.

MissingColumnsException

Raised when required columns are missing from the dataset. The exception specifies which column is absent.

ColumnContainsEmptyDataException

Raised when a specified column contains empty data, ensuring all necessary fields are populated.

InvalidDatetimeException

Raised for invalid datetime entries, such as incorrect formatting or out-of-range values.

InvalidDatetimeIntervalException

Raised when the provided datetime interval is invalid, ensuring consistency in date ranges or intervals.

InvalidStartDateException

Raised for invalid start dates, particularly for time-based events or ranges.

InvalidEndDateException

Raised for invalid end dates, handling errors related to the conclusion of time-based events or ranges.

InvalidDateRangeException

Raised when the date range is invalid, such as when the start date is after the end date. An optional message may provide additional context.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tj_hyd_tank-1.2.0.tar.gz (10.4 kB view details)

Uploaded Source

Built Distribution

tj_hyd_tank-1.2.0-py3-none-any.whl (10.3 kB view details)

Uploaded Python 3

File details

Details for the file tj_hyd_tank-1.2.0.tar.gz.

File metadata

  • Download URL: tj_hyd_tank-1.2.0.tar.gz
  • Upload date:
  • Size: 10.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.3 Linux/6.8.0-41-generic

File hashes

Hashes for tj_hyd_tank-1.2.0.tar.gz
Algorithm Hash digest
SHA256 84712e2280c892d8bb9819639a8dfa9c142ba400a363bf4ff159c73cdde07ccf
MD5 9954ece959339156195d3eb765f4e7a4
BLAKE2b-256 c4950ce4dd3e1ba866f0bef2ec683fb71d1d8a7b32cb05e970b64ac18dd5f2cd

See more details on using hashes here.

File details

Details for the file tj_hyd_tank-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: tj_hyd_tank-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 10.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.3 Linux/6.8.0-41-generic

File hashes

Hashes for tj_hyd_tank-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2bed6ddd55b59a68e8f7e2ec6ba29e148bc1b3777ec84f088a4347365f86e462
MD5 8cbdd7211939556b9fa8f09bd287a592
BLAKE2b-256 6e8551d1ee5a4b2f6d3c30bb85b03384dc545b1f43598943a1c7a98d3ccacc49

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page