diff --git a/genindex.html b/genindex.html index b84fe257..cdb0fadc 100644 --- a/genindex.html +++ b/genindex.html @@ -558,6 +558,13 @@

H

+
  • + hydrotools.nwm_client + +
  • @@ -661,6 +668,8 @@

    M

  • hydrotools.nwis_client
  • hydrotools.nwis_client.iv +
  • +
  • hydrotools.nwm_client
  • diff --git a/hydrotools.nwm_client.html b/hydrotools.nwm_client.html index 070721d5..1b0fbc49 100644 --- a/hydrotools.nwm_client.html +++ b/hydrotools.nwm_client.html @@ -285,8 +285,8 @@

    Submodules -

    Module contents

    +
    +

    Module contents

    @@ -347,7 +347,7 @@

    Module contentshydrotools.nwm_client subpackage diff --git a/objects.inv b/objects.inv index 661d2883..6097c479 100644 Binary files a/objects.inv and b/objects.inv differ diff --git a/py-modindex.html b/py-modindex.html index 19a5fbaa..5befba81 100644 --- a/py-modindex.html +++ b/py-modindex.html @@ -368,6 +368,12 @@

    Python Module Index

    hydrotools.nwis_client.iv + + +     + hydrotools.nwm_client + + diff --git a/python/nwm_client/build/lib/hydrotools/nwm_client/AzureFileCatalog.py b/python/nwm_client/build/lib/hydrotools/nwm_client/AzureFileCatalog.py new file mode 100644 index 00000000..98cd3ea1 --- /dev/null +++ b/python/nwm_client/build/lib/hydrotools/nwm_client/AzureFileCatalog.py @@ -0,0 +1,94 @@ +""" +============================================= +NWM Azure Blob Storage Container File Catalog +============================================= +Concrete implementation of a National Water Model file client for discovering +files on Microsoft Azure. + +https://planetarycomputer.microsoft.com/dataset/storage/noaa-nwm + +Classes +------- +AzureFileCatalog +""" +from .NWMFileCatalog import NWMFileCatalog +from hydrotools._restclient.urllib import Url +import azure.storage.blob +import planetary_computer +import adlfs +from typing import List + +class AzureFileCatalog(NWMFileCatalog): + """An Azure Cloud client class for NWM data. + This AzureFileCatalog class provides various methods for discovering NWM + files on Azure Blob Storage. + """ + + def __init__( + self, + server: str = 'https://noaanwm.blob.core.windows.net/' + ) -> None: + """Initialize catalog of NWM data source on Azure Blob Storage. + + Parameters + ---------- + server : str, required + Fully qualified path to Azure Cloud endpoint. + + Returns + ------- + None + """ + super().__init__() + self.server = server + + def list_blobs( + self, + configuration: str, + reference_time: str, + must_contain: str = 'channel_rt' + ) -> List[str]: + """List available blobs with provided parameters. + + Parameters + ---------- + configuration : str, required + Particular model simulation or forecast configuration. For a list + of available configurations see NWMDataService.configurations + reference_time : str, required + Model simulation or forecast issuance/reference time in + YYYYmmddTHHZ format. + must_contain : str, optional, default 'channel_rt' + Optional substring found in each blob name. + + Returns + ------- + A list of blob names that satisfy the criteria set by the parameters. + """ + # Validate configuration + self.raise_invalid_configuration(configuration) + + # Break-up reference time + issue_date, issue_time = self.separate_datetime(reference_time) + + # Get list of blobs + fs = adlfs.AzureBlobFileSystem( + "noaanwm", credential=planetary_computer.sas.get_token("noaanwm", "nwm").token + ) + blobs = fs.glob(f"nwm/nwm.{issue_date}/{configuration}/nwm.t{issue_time}*") + + # Return blob URLs + return [ + str(self.server / suffix) + for suffix in list(blobs) + if must_contain in suffix + ] + + @property + def server(self) -> str: + return self._server + + @server.setter + def server(self, server: str) -> None: + self._server = Url(server) + \ No newline at end of file diff --git a/python/nwm_client/build/lib/hydrotools/nwm_client/FileDownloader.py b/python/nwm_client/build/lib/hydrotools/nwm_client/FileDownloader.py new file mode 100644 index 00000000..565ff9dd --- /dev/null +++ b/python/nwm_client/build/lib/hydrotools/nwm_client/FileDownloader.py @@ -0,0 +1,209 @@ +""" +=============== +File Downloader +=============== +Tool for downloading files asynchronously. + +Classes +------- +FileDownloader +""" +import asyncio +import ssl +import aiohttp +import aiofiles +from pathlib import Path +from typing import List, Tuple, Union +import warnings +from http import HTTPStatus + +class FileDownloader: + """Provides a convenient interface to download a list of files + asynchronously using HTTP. + """ + + def __init__( + self, + output_directory: Union[str, Path] = Path("."), + create_directory: bool = False, + ssl_context: ssl.SSLContext = ssl.create_default_context(), + limit: int = 10 + ) -> None: + """Initialize File Downloader object with specified output directory. + + Parameters + ---------- + output_directory: str, pathlib.Path, optional, default "." + Output directory where files are written. + create_directory: bool, options, default False + Indicates whether to create the output directory if it does not + exist. + ssl_context : ssl.SSLContext, optional, default context + SSL configuration context. + limit: int, optional, default 10 + Number of simultaneous connections. + + Returns + ------- + None + """ + # Set output directory + self.output_directory = output_directory + + # Set directory creation + self.create_directory = create_directory + + # Setup SSL context + self.ssl_context = ssl_context + + # Set limit + self.limit = limit + + async def get_file( + self, + url: str, + filename: str, + session: aiohttp.ClientSession + ) -> None: + """Download a single file. + + Parameters + ---------- + url: str, required + URL path to file. + filename: str, required + Local filename used to write downloaded file. This will save the file + to self.output_directory/filename + session: aiohttp.ClientSession, required + Session object used for retrieval. + + Returns + ------- + None + """ + # Retrieve a single file + async with session.get(url, ssl=self.ssl_context, timeout=900) as response: + # Warn if unable to locate file + if response.status != HTTPStatus.OK: + status = HTTPStatus(response.status_code) + message = ( + f"HTTP Status: {status.value}" + + f" - {status.phrase}" + + f" - {status.description}\n" + + f"{response.url}" + ) + warnings.warn(message, RuntimeWarning) + return + + # Construct output file path + output_file = self.output_directory / filename + + # Stream download + async with aiofiles.open(output_file, 'wb') as fo: + while True: + chunk = await response.content.read(1024) + if not chunk: + break + await fo.write(chunk) + + async def get_files(self, src_dst_list: List[Tuple[str,str]]) -> None: + """Asynchronously download multiple files. + + Parameters + ---------- + src_dst_list: List[Tuple[str,str]], required + List of tuples containing two strings. The first string is the + source URL from which to retrieve a file, the second string is the + local filename where the file will be saved. + + Returns + ------- + None + """ + # Retrieve each file + connector = aiohttp.TCPConnector(limit=self.limit) + async with aiohttp.ClientSession(connector=connector) as session: + await asyncio.gather(*[self.get_file(url, filename, session) for url, filename in src_dst_list]) + + def get(self, src_dst_list: List[Tuple[str,str]], overwrite: bool = False) -> None: + """Setup event loop and asynchronously download multiple files. If + self.create_directory is True, an output directory will be + created if needed. + + Parameters + ---------- + src_dst_list: List[Tuple[str,str]], required + List of tuples containing two strings. The first string is the + source URL from which to retrieve a file, the second string is the + local filename where the file will be saved. + overwrite: bool, optional, default False + If True will overwrite destination file, if it exists. If False, + download of this file is skipped. + + Returns + ------- + None + + Examples + -------- + >>> from nwm_client.FileDownloader import FileDownloader + >>> downloader = FileDownloader(output_directory="my_output") + + >>> # This will download the pandas homepage and save it to "my_output/index.html" + >>> downloader.get( + >>> [("https://pandas.pydata.org/docs/user_guide/index.html","index.html")] + >>> ) + """ + # Shorten list to files that do not exist + if not overwrite: + short = [] + for src, dst in src_dst_list: + if (self.output_directory / dst).exists(): + message = f"File exists, skipping download of {self.output_directory / dst}" + warnings.warn(message, UserWarning) + continue + short.append((src, dst)) + src_dst_list = short + + # Check output directory, optionally create + if not self.output_directory.exists(): + if self.create_directory: + self.output_directory.mkdir(parents=True) + else: + message = f"{self.output_directory} does not exist." + raise FileNotFoundError(message) + + # Start event loop to retrieve files + asyncio.run(self.get_files(src_dst_list)) + + @property + def output_directory(self) -> Path: + return self._output_directory + + @output_directory.setter + def output_directory(self, output_directory: Union[str, Path]): + self._output_directory = Path(output_directory).expanduser().resolve() + + @property + def create_directory(self) -> bool: + return self._create_directory + + @create_directory.setter + def create_directory(self, create_directory: bool): + self._create_directory = bool(create_directory) + + @property + def ssl_context(self) -> ssl.SSLContext: + return self._ssl_context + + @ssl_context.setter + def ssl_context(self, ssl_context: ssl.SSLContext) -> None: + self._ssl_context = ssl_context + + @property + def limit(self) -> int: + return self._limit + + @limit.setter + def limit(self, limit: int) -> None: + self._limit = limit diff --git a/python/nwm_client/build/lib/hydrotools/nwm_client/GCPFileCatalog.py b/python/nwm_client/build/lib/hydrotools/nwm_client/GCPFileCatalog.py new file mode 100644 index 00000000..232152c2 --- /dev/null +++ b/python/nwm_client/build/lib/hydrotools/nwm_client/GCPFileCatalog.py @@ -0,0 +1,91 @@ +""" +====================================== +NWM Google Cloud Platform File Catalog +====================================== +Concrete implementation of a National Water Model file client for discovering +files on Google Cloud Platform (GCP). + +GCP -- https://console.cloud.google.com/marketplace/details/noaa-public/national-water-model + +Classes +------- +GCPFileCatalog +""" +from .NWMFileCatalog import NWMFileCatalog +from google.cloud import storage +from typing import List + +class GCPFileCatalog(NWMFileCatalog): + """A Google Cloud client class for NWM data. + This GCPFileCatalog class provides various methods for discovering NWM + files on Google Cloud Platform. + """ + + def __init__( + self, + bucket_name: str = 'national-water-model' + ) -> None: + """Initialize catalog of NWM data source on Google Cloud Platform. + + Parameters + ---------- + bucket_name : str, required, default 'national-water-model' + Name of Google Cloud Bucket + + Returns + ------- + None + """ + super().__init__() + self.bucket_name = bucket_name + + def list_blobs( + self, + configuration: str, + reference_time: str, + must_contain: str = 'channel_rt' + ) -> List[str]: + """List available blobs with provided parameters. + + Parameters + ---------- + configuration : str, required + Particular model simulation or forecast configuration. For a list + of available configurations see NWMDataService.configurations + reference_time : str, required + Model simulation or forecast issuance/reference time in + YYYYmmddTHHZ format. + must_contain : str, optional, default 'channel_rt' + Optional substring found in each blob name. + + Returns + ------- + A list of blob names that satisfy the criteria set by the parameters. + """ + # Validate configuration + self.raise_invalid_configuration(configuration) + + # Break-up reference time + issue_date, issue_time = self.separate_datetime(reference_time) + + # Connect to bucket with anonymous client + client = storage.Client.create_anonymous_client() + bucket = client.bucket(self.bucket_name) + + # Get list of blobs + blobs = client.list_blobs( + bucket, + prefix=f'nwm.{issue_date}/{configuration}/nwm.t{issue_time}' + ) + + # Return blob names + return [b.public_url for b in list(blobs) if must_contain in b.name] + + @property + def bucket_name(self) -> str: + return self._bucket_name + + @bucket_name.setter + def bucket_name(self, bucket_name: str) -> None: + self._bucket_name = bucket_name + \ No newline at end of file diff --git a/python/nwm_client/build/lib/hydrotools/nwm_client/HTTPFileCatalog.py b/python/nwm_client/build/lib/hydrotools/nwm_client/HTTPFileCatalog.py new file mode 100644 index 00000000..2a64f2dc --- /dev/null +++ b/python/nwm_client/build/lib/hydrotools/nwm_client/HTTPFileCatalog.py @@ -0,0 +1,151 @@ +""" +===================== +NWM HTTP File Catalog +===================== +Concrete implementation of a National Water Model file client for discovering +files on generic HTTP servers, for example: + +NOMADS -- https://nomads.ncep.noaa.gov/pub/data/nccf/com/nwm/prod/ + +Classes +------- +HTTPFileCatalog +""" +from .NWMFileCatalog import NWMFileCatalog +import asyncio +import aiohttp +import ssl +from bs4 import BeautifulSoup +from typing import List + +class HTTPFileCatalog(NWMFileCatalog): + """An HTTP client class for NWM data. + This HTTPFileCatalog class provides various methods for discovering NWM + files on generic web servers. + """ + + def __init__( + self, + server: str, + ssl_context: ssl.SSLContext = ssl.create_default_context() + ) -> None: + """Initialize HTTP File Catalog of NWM data source. + + Parameters + ---------- + server : str, required + Fully qualified path to web server endpoint. Example: + "https://nomads.ncep.noaa.gov/pub/data/nccf/com/nwm/prod/" + ssl_context : ssl.SSLContext, optional, default context + SSL configuration context. + + Returns + ------- + None + """ + super().__init__() + # Server path + self.server = server + + # Setup SSL context + self.ssl_context = ssl_context + + @staticmethod + async def get_html( + url: str, + ssl_context: ssl.SSLContext = ssl.create_default_context() + ) -> str: + """Retrieve an HTML document. + + Parameters + ---------- + url : str, required + Path to HTML document + ssl_context : ssl.SSLContext, optional, default context + SSL configuration context. + + Returns + ------- + HTML document retrieved from url. + """ + async with aiohttp.ClientSession() as session: + async with session.get(url, ssl=ssl_context) as response: + # Get html content + html_doc = await response.text() + + # Raise for no results found + if response.status >= 400: + raise FileNotFoundError(html_doc) + + # Otherwise return response content + return html_doc + + def list_blobs( + self, + configuration: str, + reference_time: str, + must_contain: str = 'channel_rt' + ) -> List[str]: + """List available blobs with provided parameters. + + Parameters + ---------- + configuration : str, required + Particular model simulation or forecast configuration. For a list + of available configurations see NWMDataService.configurations + reference_time : str, required + Model simulation or forecast issuance/reference time in + %Y%m%dT%HZ format. + must_contain : str, optional, default 'channel_rt' + Optional substring that must be found in each blob name. + + Returns + ------- + A list of blob names that satisfy the criteria set by the parameters. + """ + # Validate configuration + self.raise_invalid_configuration(configuration) + + # Break-up reference time + issue_date, issue_time = NWMFileCatalog.separate_datetime(reference_time) + + # Set prefix + prefix = f"nwm.{issue_date}/{configuration}/" + + # Generate url + directory = self.server + prefix + + # Get directory listing + html_doc = asyncio.run(self.get_html(directory, self.ssl_context)) + + # Parse content + soup = BeautifulSoup(html_doc, 'html.parser') + + # Get links + elements = soup.select("a[href]") + + # Generate list + blob_list = [] + for e in elements: + filename = e.get("href") + if filename.startswith(f"nwm.t{issue_time}"): + full_path = directory + filename + blob_list.append(full_path) + + return [b for b in blob_list if must_contain in b] + + @property + def server(self) -> str: + return self._server + + @server.setter + def server(self, server: str) -> None: + self._server = server + + @property + def ssl_context(self) -> ssl.SSLContext: + return self._ssl_context + + @ssl_context.setter + def ssl_context(self, ssl_context: ssl.SSLContext) -> None: + self._ssl_context = ssl_context \ No newline at end of file diff --git a/python/nwm_client/build/lib/hydrotools/nwm_client/NWMClient.py b/python/nwm_client/build/lib/hydrotools/nwm_client/NWMClient.py new file mode 100644 index 00000000..2d7d0ca7 --- /dev/null +++ b/python/nwm_client/build/lib/hydrotools/nwm_client/NWMClient.py @@ -0,0 +1,61 @@ +""" +================ +NWM Client Tools +================ +Client tools for retrieving National Water Model data from various sources. + +Classes +------- +NWMClient +""" + +from abc import ABC, abstractmethod +import pandas as pd +import dask.dataframe as dd +from typing import List, Union +import numpy.typing as npt +from .NWMClientDefaults import _NWMClientDefault + +class StoreNotFoundError(Exception): + """Exception raised by methods that require a dataframe store.""" + pass + +class QueryError(Exception): + """Exception raised when a combination of configuration and/or reference + times does not return any results.""" + pass + +class NWMClient(ABC): + """Abstract base class by building National Water Model output data clients.""" + + @abstractmethod + def get( + self, + configurations: List[str], + reference_times: npt.ArrayLike, + variables: List[str] = ["streamflow"], + nwm_feature_ids: npt.ArrayLike = _NWMClientDefault.CROSSWALK.index, + compute: bool = True + ) -> Union[pd.DataFrame, dd.DataFrame]: + """Abstract method to retrieve National Water Model data as a + DataFrame. + + Parameters + ---------- + configurations: List[str], required + List of NWM configurations. + reference_times: array-like, required + array-like of reference times. Should be compatible with pandas.Timestamp. + variables: List[str], optional, default ['streamflow'] + List of variables to retrieve from NWM files. + nwm_feature_ids: array-like, optional + array-like of NWM feature IDs to return. Defaults to channel features + with a known USGS mapping. + compute: bool, optional, default True + When True returns a pandas.DataFrame. When False returns a dask.dataframe.DataFrame. + + Returns + ------- + dask.dataframe.DataFrame of NWM data or a pandas.DataFrame in canonical + format. + """ diff --git a/python/nwm_client/build/lib/hydrotools/nwm_client/NWMClientDefaults.py b/python/nwm_client/build/lib/hydrotools/nwm_client/NWMClientDefaults.py new file mode 100644 index 00000000..47a2ab22 --- /dev/null +++ b/python/nwm_client/build/lib/hydrotools/nwm_client/NWMClientDefaults.py @@ -0,0 +1,112 @@ +""" +=================== +NWM Client Defaults +=================== +Manages default options to build National Water Model clients. + +Classes +------- +NWMClientDefaults +""" +from dataclasses import dataclass, field +import pandas as pd +from .ParquetStore import ParquetStore +from .NWMFileCatalog import NWMFileCatalog +from .GCPFileCatalog import GCPFileCatalog +from .UnitHandler import UnitHandler +import ssl +import dask.dataframe as dd +from tempfile import TemporaryDirectory +from .FileDownloader import FileDownloader +from pathlib import Path +from typing import List, Dict +from enum import Enum +from pint import UnitRegistry + +class MeasurementUnitSystem(Enum): + """A system of units to define measurements. + Options are SI or US. + """ + SI = "SI" + US = "US" + +@dataclass +class NWMClientDefaults: + """Stores application default options. + + STORE: Configured ParquetStore instance. Default is class level object, not instance object. + CATALOG: Concrete NWM data source instance. + SSL_CONTEXT: ssl context instance. Default is class level object, not instance object. + ROUTELINK_URL: URL string path that points at an HDF5 file containing a + pandas.DataFrame with NWM crosswalk data. + VARIABLES: default list of variables to retrieve from channel_rt files. + NWM_TO_SI_UNIT_MAPPING: mapping from NWM units to pint compatible metric unit symbols + SI_TO_US_UNIT_MAPPING: mapping from SI units to default US standard conversion units + CROSSWALK: A property that generates a pandas.DataFrame that maps between + point feature data source identifiers (i.e. USGS gage id -> NWM feature + ID). + NWM_TO_US_UNIT_CONVERSION: Propertying mapping NWM units to US standard units and conversion factors + DOWNLOAD_DIRECTORY: Local path to save downloaded NWM files. Default is class level object, not instance object. + UNIT_SYSTEM: Default system of measurements. + """ + STORE: ParquetStore = field( + default_factory=lambda: ParquetStore( + "hydrotools_data/nwm_store.parquet", + write_index=False, + compression="snappy" + )) + CATALOG: NWMFileCatalog = field(default_factory=GCPFileCatalog) + SSL_CONTEXT: ssl.SSLContext = field(default_factory=ssl.create_default_context) + ROUTELINK_URL: str = "https://www.hydroshare.org/resource/e9fe66730d184bdfbaea19639bd7cb55/data/contents/RouteLink.h5" + VARIABLES: List[str] = field(default_factory=lambda: ["streamflow"]) + NWM_TO_SI_UNIT_MAPPING: Dict[str, str] = field(default_factory=lambda: {"m": "m", "m s-1": "m/s", "m3 s-1": "m^3/s"}) + SI_TO_US_UNIT_MAPPING: Dict[str, str] = field(default_factory=lambda: {"m": "ft", "m/s": "ft/s", "m^3/s": "ft^3/s"}) + DOWNLOAD_DIRECTORY: Path = Path("hydrotools_data/NWMFileClient_NetCDF_files") + UNIT_SYSTEM: MeasurementUnitSystem = field(default_factory=lambda: MeasurementUnitSystem.SI) + + def _download_and_read_routelink_file(self) -> dd.DataFrame: + """Retrieve NWM RouteLink data from URL and return a + dask.dataframe.DataFrame. + + Returns + ------- + df: dask.dataframe.DataFrame + DataFrame containing associated location metadata. + """ + with TemporaryDirectory() as td: + # Setup downloader + downloader = FileDownloader( + output_directory=td, + create_directory=False, + ssl_context=self.SSL_CONTEXT + ) + + # Download files + downloader.get([(self.ROUTELINK_URL, "RouteLink.h5")]) + return dd.from_pandas(pd.read_hdf(Path(td)/"RouteLink.h5"), + npartitions=1) + + @property + def CROSSWALK(self) -> pd.DataFrame: + """Retrieve and store a default crosswalk for use by a NWM client.""" + key = "CROSSWALK" + if key not in self.STORE: + self.STORE[key] = self._download_and_read_routelink_file() + return self.STORE[key].compute()[["nwm_feature_id", "usgs_site_code"]].set_index( + "nwm_feature_id") + + @property + def NWM_TO_US_UNIT_CONVERSION(self) -> Dict[str, Dict[str, float]]: + """Mapping from NWM units to US standard units and respective conversion factors.""" + # Set up unit handler + unit_handler = UnitHandler(unit_registry=UnitRegistry(cache_folder=Path("hydrotools/pint_cache"))) + + # Build conversion from NWM to US + nwm_to_us_mapping = {key: self.SI_TO_US_UNIT_MAPPING[val] for key, val in self.NWM_TO_SI_UNIT_MAPPING.items()} + si_to_us_conversion = {key: unit_handler.conversion_factor(key, val) for key, val in self.SI_TO_US_UNIT_MAPPING.items()} + nwm_to_us_conversion = {key: si_to_us_conversion[val] for key, val in self.NWM_TO_SI_UNIT_MAPPING.items()} + + return {"measurement_unit_conversion": nwm_to_us_mapping, "conversion_factor": nwm_to_us_conversion} + +# Initialize defaults +_NWMClientDefault = NWMClientDefaults() diff --git a/python/nwm_client/build/lib/hydrotools/nwm_client/NWMFileCatalog.py b/python/nwm_client/build/lib/hydrotools/nwm_client/NWMFileCatalog.py new file mode 100644 index 00000000..efaa3504 --- /dev/null +++ b/python/nwm_client/build/lib/hydrotools/nwm_client/NWMFileCatalog.py @@ -0,0 +1,123 @@ +""" +================ +NWM File Catalog +================ +Tools for discovering operational NWM NetCDF data from file-based sources. + +Classes +------- +NWMFileCatalog +""" +from abc import ABC, abstractmethod +from typing import List, Tuple +import pandas as pd + +class NWMFileCatalog(ABC): + """Abstract base class for sources of NWM file data.""" + + def raise_invalid_configuration(self, configuration) -> None: + """Raises an error for an invalid configuration. + + Parameters + ---------- + configuration: str, required + Configuration to validate + + Returns + ------- + None + + Raises + ------ + ValueError if the configuration is invalid. + """ + # Validate configuration + if configuration not in self.configurations: + message = (f"Invalid configuration '{configuration}'. " + + f"Valid options: {str(self.configurations)}") + raise ValueError(message) + + @staticmethod + def separate_datetime(reference_time: pd.Timestamp) -> Tuple[str, str]: + """Divide reference time into separate date and time strings. + + Parameters + ---------- + reference_time: pandas.Timestamp, required + pandas.Timestamp compatible datetime object + + Returns + ------- + Two strings: issue_date, issue_time + """ + # Break-up reference time + tokens = reference_time.strftime("%Y%m%dT%HZ").split('T') + issue_date = tokens[0] + issue_time = tokens[1].lower() + return issue_date, issue_time + + @abstractmethod + def list_blobs( + self, + configuration: str, + reference_time: str + ) -> List[str]: + """Abstract method to query for NWM files. + + Parameters + ---------- + configuration : str, required + Particular model simulation or forecast configuration. For a list + of available configurations see NWMDataService.configurations + reference_time : str, required + Model simulation or forecast issuance/reference time in + %Y%m%dT%HZ format. + + Returns + ------- + A list of blob names that satisfy the criteria set by the parameters. + """ + + @property + def configurations(self) -> List[str]: + return [ + 'analysis_assim', + 'analysis_assim_alaska', + 'analysis_assim_alaska_no_da', + 'analysis_assim_extend', + 'analysis_assim_extend_no_da', + 'analysis_assim_extend_alaska', + 'analysis_assim_extend_alaska_no_da', + 'analysis_assim_hawaii', + 'analysis_assim_hawaii_no_da', + 'analysis_assim_no_da', + 'analysis_assim_puertorico', + 'analysis_assim_puertorico_no_da', + 'analysis_assim_long', + 'analysis_assim_long_no_da', + 'long_range_mem1', + 'long_range_mem2', + 'long_range_mem3', + 'long_range_mem4', + 'medium_range_alaska_mem1', + 'medium_range_alaska_mem2', + 'medium_range_alaska_mem3', + 'medium_range_alaska_mem4', + 'medium_range_alaska_mem5', + 'medium_range_alaska_mem6', + 'medium_range_alaska_no_da', + 'medium_range_mem1', + 'medium_range_mem2', + 'medium_range_mem3', + 'medium_range_mem4', + 'medium_range_mem5', + 'medium_range_mem6', + 'medium_range_mem7', + 'medium_range_no_da', + 'short_range', + 'short_range_alaska', + 'short_range_hawaii', + 'short_range_hawaii_no_da', + 'short_range_puertorico', + 'short_range_puertorico_no_da', + ] diff --git a/python/nwm_client/build/lib/hydrotools/nwm_client/NWMFileClient.py b/python/nwm_client/build/lib/hydrotools/nwm_client/NWMFileClient.py new file mode 100644 index 00000000..a52fcf46 --- /dev/null +++ b/python/nwm_client/build/lib/hydrotools/nwm_client/NWMFileClient.py @@ -0,0 +1,374 @@ +""" +===================== +NWM File Client Tools +===================== +Client tools for retrieving National Water Model data from file-based sources + +Classes +------- +NWMFileClient +""" + +from .NWMClient import NWMClient, QueryError, StoreNotFoundError +from typing import Union, List, Dict +from pathlib import Path +from .NWMClientDefaults import _NWMClientDefault, MeasurementUnitSystem +from .ParquetStore import ParquetStore +from .NWMFileCatalog import NWMFileCatalog +import numpy as np +import pandas as pd +import ssl +import dask.dataframe as dd +from .FileDownloader import FileDownloader +from .NWMFileProcessor import NWMFileProcessor +import numpy.typing as npt +import warnings +import shutil + +class NWMFileClient(NWMClient): + def __init__( + self, + file_directory: Union[str, Path] = _NWMClientDefault.DOWNLOAD_DIRECTORY, + dataframe_store: Union[ParquetStore, None] = _NWMClientDefault.STORE, + catalog: NWMFileCatalog = _NWMClientDefault.CATALOG, + location_metadata_mapping: pd.DataFrame = _NWMClientDefault.CROSSWALK, + ssl_context: ssl.SSLContext = _NWMClientDefault.SSL_CONTEXT, + cleanup_files: bool = False, + unit_system: MeasurementUnitSystem = _NWMClientDefault.UNIT_SYSTEM + ) -> None: + """Client class for retrieving data as dataframes from a remote + file-based source of National Water Model data. + + Parameters + ---------- + file_directory: str or pathlib.Path, optional, default "NWMFileClient_NetCDF_files" + Directory to save downloaded NetCDF files. + dataframe_store: ParquetStore, default ParquetStore("nwm_store.parquet") + Local parquet directory used to locally store retrieved dataframes. + catalog: NWMFileCatalog, optional, default GCPFileCatalog() + NWMFileCatalog object used to discover NWM files. + location_metadata_mapping: pandas.DataFrame with nwm_feature_id Index and + columns of corresponding site metadata. Defaults to 7500+ usgs_site_code + used by the NWM for data assimilation. + ssl_context: ssl.SSLContext, optional, default default_context + SSL configuration context. + cleanup_files: bool, default False + Delete downloaded NetCDF files upon program exit. + unit_system: MeasurementUnitSystem, optional, default MeasurementUnitSystem.SI + The default measurement_unit for NWM streamflow data are cubic meter per second, + meter per second, and meter. Setting this option to MeasurementUnitSystem.US will convert the units + to cubic foot per second, foot per second, or foot respectively. + + Returns + ------- + NWMClient object + """ + super().__init__() + + # Set file output directory + self.file_directory = file_directory + + # Set dataframe store + if dataframe_store: + self.dataframe_store = dataframe_store + else: + self.dataframe_store = None + + # Set file catalog + self.catalog = catalog + + # Set crosswalk + self.crosswalk = location_metadata_mapping + + # Set CA bundle + self.ssl_context = ssl_context + + # Set cleanup flag + self.cleanup_files = cleanup_files + + # Set unit system + self.unit_system = unit_system + + def get_files( + self, + configuration: str, + reference_time: pd.Timestamp, + group_size: int = 20 + ) -> Dict[str, List[Path]]: + """Download files for a single National Water Model cycle. + + Parameters + ---------- + configuration: str, required + NWM configuration cycle. + reference_time: datetime-like, required + pandas.Timestamp compatible datetime object + group_size: int, optional, default 20 + Files are downloaded in groups of 20 by default. This is to accomodate the + xarray, dask, and HDF5 backends that may struggle with opening too many files + at once. This setting is mostly relevant to retrieving medium range forecasts. + + Returns + ------- + dict mapping a group string key to a list of local file paths. + """ + # Validate reference times + reference_time = pd.Timestamp(reference_time) + + # Generate list of urls + urls = self.catalog.list_blobs( + configuration=configuration, + reference_time=reference_time + ) + + # Check urls + if len(urls) == 0: + message = (f"No data found for configuration '{configuration}' and " + + f"reference time '{reference_time}'") + raise QueryError(message) + + # Generate local filenames + filenames = [f"timestep_{idx}.nc" for idx, _ in enumerate(urls)] + + # Output subdirectory + subdirectory = self.file_directory / configuration / reference_time.strftime("RT%Y%m%dT%HZ") + + # Setup downloader + downloader = FileDownloader( + output_directory=subdirectory, + create_directory=True, + ssl_context=self.ssl_context + ) + + # Download files + downloader.get(zip(urls,filenames)) + + # Return nested list of files + files = sorted(list(subdirectory.glob("*.nc"))) + num_groups = len(files) // group_size + 1 + file_groups = np.array_split(files, num_groups) + return {f"group_{idx}": fg for idx, fg in enumerate(file_groups)} + + def get( + self, + configurations: List[str], + reference_times: npt.ArrayLike, + nwm_feature_ids: npt.ArrayLike = _NWMClientDefault.CROSSWALK.index, + variables: List[str] = _NWMClientDefault.VARIABLES, + compute: bool = True + ) -> Union[pd.DataFrame, dd.DataFrame]: + """Abstract method to retrieve National Water Model data as a + DataFrame. + + Parameters + ---------- + configurations: List[str], required + List of NWM configurations. + reference_times: array-like, required + array-like of reference times. Should be compatible with pandas.Timestamp. + nwm_feature_ids: array-like, optional + array-like of NWM feature IDs to return. Defaults to channel features + with a known USGS mapping. + variables: List[str], optional, default ['streamflow'] + List of variables to retrieve from NWM files. + compute: bool, optional, default True + When True returns a pandas.DataFrame. When False returns a dask.dataframe.DataFrame. + + Returns + ------- + dask.dataframe.DataFrame of NWM data or a pandas.DataFrame in canonical + format. + """ + # Check store + if not self.dataframe_store: + raise StoreNotFoundError("get requires a dataframe store") + + # Validate reference times + reference_times = [pd.Timestamp(rft) for rft in reference_times] + + # Put features in array + nwm_feature_ids = np.array(nwm_feature_ids) + + # Collect dataframes + dfs = [] + for cfg in configurations: + for rft in reference_times: + # Build datetime string + rft_str = rft.strftime("%Y%m%dT%HZ") + + # Retrieve or build and store dataframes + for var in variables: + # Generate key + key = f"{cfg}_{rft_str}_{var}" + + # Check store + if key in self.dataframe_store: + # Load data + df = self.dataframe_store[key] + + # Check for features + missing = ~np.isin(nwm_feature_ids, df["nwm_feature_id"].compute()) + missing_ids = nwm_feature_ids[missing] + + # Load + dfs.append(df[df["nwm_feature_id"].isin(nwm_feature_ids)]) + + # If no IDs are missing, continue + if not np.any(missing): + continue + else: + missing_ids = nwm_feature_ids + + # Process data + # NOTE This may be parallizable. This funky mess exists because dask and xarray + # got fussy with the medium range data. + keyed_files = self.get_files(cfg, rft) + for group, files in keyed_files.items(): + # Build subkey + subkey = f"{key}/{group}" + + # Open dataset + ds = NWMFileProcessor.get_dataset(files, missing_ids, ["reference_time"]+variables) + + # Warn for no features + if ds.feature_id.size == 0: + message = f"These filter IDs returned no data: {missing_ids}" + warnings.warn(message) + continue + + # Convert to dask + df = NWMFileProcessor.convert_to_dask_dataframe(ds) + + # Canonicalize + df = df[["reference_time", "feature_id", "time", var]].rename(columns={ + "feature_id": "nwm_feature_id", + "time": "value_time", + var: "value" + }) + + # Add required columns + df["measurement_unit"] = ds[var].attrs["units"] + df["variable_name"] = var + df["configuration"] = ds.attrs["model_configuration"] + + # Address ambigious "No-DA" cycle names + if cfg.endswith("no_da"): + df["configuration"] = df["configuration"] + "_no_da" + + # Map crosswalk + for col in self.crosswalk: + df[col] = df["nwm_feature_id"].map(self.crosswalk[col]) + + # Save + self.dataframe_store.append(subkey, df) + + # Append all parts + df = self.dataframe_store[subkey] + dfs.append(df[df["nwm_feature_id"].isin(missing_ids)]) + + # Close dataset + ds.close() + + # Check for empty data + if not dfs: + message = ( + f"Query returned no data for configurations {configurations}\n" + + f"reference_times {reference_times}\n" + + f"variables {variables}\n" + + f"nwm_feature_ids {nwm_feature_ids}\n" + ) + raise QueryError(message) + + # Clean-up NetCDF files + if self.cleanup_files: + try: + shutil.rmtree(self.file_directory) + except OSError: + message = (f"Unable to delete {self.file_directory}") + warnings.warn(message, RuntimeWarning) + + # Concatenate + # data = dd.multi.concat(dfs) + data = dd.concat(dfs) + + # Convert units + if self.unit_system == MeasurementUnitSystem.US: + # Get conversions + c = _NWMClientDefault.NWM_TO_US_UNIT_CONVERSION + + # Conversion factors + factors = data["measurement_unit"].map(c["conversion_factor"]) + labels = data["measurement_unit"].map(c["measurement_unit_conversion"]) + + # Convert + data["value"] = data["value"].mul(factors) + data["measurement_unit"] = labels + + # Return pandas.DataFrame + if compute: + # Convert to pandas + df = data.compute() + + # Optimize memory + df["nwm_feature_id"] = pd.to_numeric(df["nwm_feature_id"], downcast="integer") + df["value"] = pd.to_numeric(df["value"], downcast="float") + for cat in ["measurement_unit", "usgs_site_code", "variable_name", "configuration"]: + df[cat] = df[cat].astype("category") + + # Reset to unique index + return df.reset_index(drop=True) + + # Return dask dataframe + return data + + @property + def file_directory(self) -> Path: + return self._file_directory + + @file_directory.setter + def file_directory(self, file_directory: Union[str, Path]) -> None: + self._file_directory = Path(file_directory).expanduser().resolve() + self._file_directory.mkdir(exist_ok=True, parents=True) + + @property + def dataframe_store(self) -> ParquetStore: + return self._dataframe_store + + @dataframe_store.setter + def dataframe_store(self, + dataframe_store: Union[ParquetStore, None]) -> None: + self._dataframe_store = dataframe_store + + @property + def catalog(self) -> NWMFileCatalog: + return self._catalog + + @catalog.setter + def catalog(self, + catalog: NWMFileCatalog) -> None: + self._catalog = catalog + + @property + def crosswalk(self) -> pd.DataFrame: + return self._crosswalk + + @crosswalk.setter + def crosswalk(self, + crosswalk: pd.DataFrame) -> None: + self._crosswalk = crosswalk + + @property + def ssl_context(self) -> ssl.SSLContext: + return self._ssl_context + + @ssl_context.setter + def ssl_context(self, ssl_context: ssl.SSLContext) -> None: + self._ssl_context = ssl_context + + @property + def cleanup_files(self) -> bool: + return self._cleanup_files + + @cleanup_files.setter + def cleanup_files(self, cleanup_files: bool) -> None: + self._cleanup_files = cleanup_files diff --git a/python/nwm_client/build/lib/hydrotools/nwm_client/NWMFileProcessor.py b/python/nwm_client/build/lib/hydrotools/nwm_client/NWMFileProcessor.py new file mode 100644 index 00000000..4bc27e22 --- /dev/null +++ b/python/nwm_client/build/lib/hydrotools/nwm_client/NWMFileProcessor.py @@ -0,0 +1,134 @@ +""" +================== +NWM File Processor +================== +Tools for processing NWM data in NetCDF (.nc) format. + +Classes +------- +NWMFileProcessor +""" + +import xarray as xr +import dask.dataframe as dd +import pandas as pd +import numpy as np +import numpy.typing as npt +from typing import List, Union +import warnings +from .NWMClientDefaults import _NWMClientDefault + +class NWMFileProcessor: + """Provides a concrete interface for methods used to process National Water + Model data from NetCDF (.nc) format to xarray.Dataset, + dask.dataframe.Dataframe, or pandas.DataFrame. + """ + + @classmethod + def get_dataset( + cls, + paths: Union[str, npt.ArrayLike], + feature_id_filter: npt.ArrayLike = _NWMClientDefault.CROSSWALK.index, + variables: List[str] = _NWMClientDefault.VARIABLES + ) -> xr.Dataset: + """Generate an xarray.Dataset from an input directory of NWM .nc files. + + Parameters + ---------- + paths: str or array-like of paths, required + Glob string or array-like of paths passed directly to xarray.open_mfdataset + feature_id_filter: array-like, optional + Subset of feature IDs to return. Defaults to USGS assimilation locations. + variables: list of str, optional, default ["streamflow"] + List of variables to retrieve from source files. Options include: + 'streamflow', 'nudge', 'velocity', 'qSfcLatRunoff', 'qBucket', 'qBtmVertRunoff' + + Returns + ------- + xarray.Dataset of paths lazily loaded. + """ + # Minimum coordinates + coordinates = [] + for c in ["feature_id", "time", "reference_time"]: + if c not in variables: + coordinates.append(c) + + # Open dataset + ds = xr.open_mfdataset(paths, engine="netcdf4") + + # Prepare feature_id filter + if len(feature_id_filter) != 0: + # Convert to integer array + feature_id_filter = np.asarray(feature_id_filter, dtype=int) + + # Subset by feature ID and variable + try: + return ds.sel(feature_id=feature_id_filter)[coordinates+variables] + except KeyError: + # Validate filter IDs + check = np.isin(feature_id_filter, ds.feature_id) + + # Note invalid feature IDs + missing = feature_id_filter[~check] + + # Warn + message = f"These filter IDs were not in the index: {missing}" + warnings.warn(message) + + # Subset by valid feature ID and variable + return ds.sel(feature_id=feature_id_filter[check])[coordinates+variables] + + # Subset by variable only + return ds[coordinates+variables] + + @classmethod + def convert_to_dask_dataframe( + cls, + ds: xr.Dataset + ) -> dd.DataFrame: + """Generate a dask.dataframe.DataFrame from an xarray.Dataset. + + Parameters + ---------- + ds: xarray.Dataset, required + xarray.Dataset containing National Water Model data. + + Returns + ------- + dask.dataframe.DataFrame of NWM data. + """ + # Convert to dask dataframe + df = ds.to_dask_dataframe() + + # Compute number of partitions + # Best practice is ~100 MB per partition + npartitions = 1 + len(df.index) // 2_400_000 + + # Sort by feature ID + # Most applications will benefit from this + df = df.sort_values(by="feature_id") + + # Reset index + df = df.set_index("feature_id").reset_index() + + # Repartition + return df.repartition(npartitions=npartitions) + + @classmethod + def convert_to_dataframe( + cls, + ds: xr.Dataset + ) -> pd.DataFrame: + """Generate a pandas.DataFrame from an xarray.Dataset. + + Parameters + ---------- + ds: xarray.Dataset, required + xarray.Dataset containing National Water Model data. + + Returns + ------- + pandas.DataFrame of NWM data. + """ + # Compute pandas dataframe + return cls.convert_to_dask_dataframe(ds).compute() diff --git a/python/nwm_client/build/lib/hydrotools/nwm_client/ParquetStore.py b/python/nwm_client/build/lib/hydrotools/nwm_client/ParquetStore.py new file mode 100644 index 00000000..b53cdc2e --- /dev/null +++ b/python/nwm_client/build/lib/hydrotools/nwm_client/ParquetStore.py @@ -0,0 +1,155 @@ +""" +============================== +Parquet-backed DataFrame Store +============================== +Store dask dataframes using a key-value interface. + +Classes +--------- + - ParquetStore + +""" + +import dask.dataframe as dd +from typing import Union, Iterator +from pathlib import Path +from collections.abc import MutableMapping + +class ParquetStore(MutableMapping): + def __init__(self, root: Union[str, Path], **kwargs) -> None: + """ + Interface for storing dask.dataframe.DataFrame. + + Parameters + ---------- + root: str or pathlib.Path, required + Path to parquet store root directory. + **kwargs + Additional arguments passed to dask.dataframe.DataFrame.to_parquet + + Notes + ----- + ParquetStore is really a collection of conveniene methods for common + data access patterns wrapped around a parquet file. This module + was not specifically designed for parallel workflows and should not + be considered thread-safe. For more complicated file-io patterns + see the dask.dataframe.DataFrame documentation. + + Examples + -------- + >>> import pandas as pd + >>> import dask.dataframe as dd + >>> from time import sleep + >>> from hydrotools.nwm_client.ParquetStore import ParquetStore + >>> def my_long_running_process(data: dict) -> dd.DataFrame: + >>> # Some long running process + >>> sleep(0.2) + >>> return dd.from_pandas(pd.DataFrame(data), npartitions=1) + >>> # Use context manager to setup store + >>> with ParquetStore( + >>> "my_store.parquet", + >>> write_index=False, + >>> compression="snappy" + >>> ) as store: + >>> # Fabricate some data to feed the function + >>> my_data = {"A": [1, 2, 3]} + >>> # Check store before running process + >>> if "my_dataframe" in store: + >>> df = store["my_dataframe"] + >>> else: + >>> df = my_long_running_process(my_data) + >>> store["my_dataframe"] = df + """ + super().__init__() + self.root = root + self.parameters = kwargs + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, exc_traceback): + pass + + def __del__(self): + pass + + def __str__(self) -> str: + # Return root directory string + return str(self.root) + + def __bool__(self) -> bool: + return bool(str(self)) + + def __getitem__(self, subdirectory: str) -> dd.DataFrame: + # Set path + filepath = self.root / subdirectory + + # Check filepath and return dataframe if available + if filepath.exists(): + return dd.read_parquet(filepath) + + # Raise if filepath does not exist + raise KeyError(f"{subdirectory}") + + def __setitem__(self, subdirectory: str, df: dd.DataFrame) -> None: + # Set path + filepath = self.root / subdirectory + + # Save dataframe + df.to_parquet(filepath, **self.parameters) + + def __delitem__(self, subdirectory: str) -> None: + # Set path + filepath = self.root / subdirectory + + # Delete partitions and filepath + if filepath.exists(): + for f in filepath.glob("*"): + f.unlink() + filepath.rmdir() + + def __iter__(self) -> Iterator[str]: + # Iterator of subdirectory names + return iter([f.name for f in self.root.glob("*")]) + + def __len__(self) -> int: + # Number of subdirectories under root + return len([f for f in self.root.glob("*")]) + + def append(self, subdirectory: str, df: dd.DataFrame) -> None: + """Append data to a parquet file. + + Parameters + ---------- + subdirectory: str, required + Key-path under ParquetStore.root where existing dataframe is stored. + df: dask.dataframe.DataFrame, required + Data to append. + + Returns + ------- + None + + """ + # Set path + filepath = self.root / subdirectory + + # Save dataframe + df.to_parquet(filepath, append=True, **self.parameters) + + @property + def root(self) -> Path: + return self._directory + + @root.setter + def root(self, root) -> None: + self._directory = Path(root).resolve().expanduser() + + @property + def parameters(self) -> dict: + return self._parameters + + @parameters.setter + def parameters(self, parameters) -> None: + self._parameters = parameters + \ No newline at end of file diff --git a/searchindex.js b/searchindex.js index 5d770ff6..646eaeca 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({"alltitles": {"Cast Categorical to str": [[21, "cast-categorical-to-str"]], "Categorical Data Types": [[21, "categorical-data-types"]], "Evaluation Metrics": [[14, "evaluation-metrics"]], "Event Detection :: Decomposition": [[12, "event-detection-decomposition"]], "Functions": [[12, "functions"], [14, "functions"]], "Installation": [[21, "installation"]], "Module contents": [[0, "module-hydrotools._restclient"], [9, "module-contents"], [11, "module-hydrotools.events.event_detection"], [13, "module-hydrotools.metrics"], [15, "module-hydrotools.nwis_client"], [17, "module-contents"]], "Motivation": [[21, "motivation"]], "Non-Canonical Column Labels": [[21, "non-canonical-column-labels"]], "OWPHydroTools": [[21, null]], "OWPHydroTools Canonical Format": [[21, "owphydrotools-canonical-format"]], "Remove unused categories": [[21, "remove-unused-categories"]], "Submodules": [[0, "submodules"], [9, "submodules"], [11, "submodules"], [13, "submodules"], [15, "submodules"], [17, "submodules"]], "USGS NWIS Instantaneous Values REST Client": [[16, "usgs-nwis-instantaneous-values-rest-client"]], "UTC Time": [[21, "utc-time"]], "Usage": [[21, "usage"]], "Use observed option with groupby": [[21, "use-observed-option-with-groupby"]], "What\u2019s here?": [[21, "what-s-here"]], "hydrotools._restclient subpackage": [[0, null]], "hydrotools._restclient._iterable_nonstring module": [[1, null]], "hydrotools._restclient._restclient module": [[2, null]], "hydrotools._restclient._restclient_sigs module": [[3, null]], "hydrotools._restclient.async_client module": [[4, null]], "hydrotools._restclient.async_helpers module": [[5, null]], "hydrotools._restclient.urllib module": [[6, null]], "hydrotools._restclient.urllib_types module": [[7, null]], "hydrotools._restclient.utilities module": [[8, null]], "hydrotools.caches subpackage": [[9, null]], "hydrotools.caches.hdf module": [[10, null]], "hydrotools.events.event_detection subpackage": [[11, null]], "hydrotools.events.event_detection.decomposition module": [[12, null]], "hydrotools.metrics subpackage": [[13, null]], "hydrotools.metrics.metrics module": [[14, null]], "hydrotools.nwis_client subpackage": [[15, null]], "hydrotools.nwis_client.iv module": [[16, null]], "hydrotools.nwm_client subpackage": [[17, null]], "hydrotools.nwm_client.gcp module": [[18, null]], "hydrotools.nwm_client.http module": [[19, null]], "hydrotools.nwm_client.utils module": [[20, null]]}, "docnames": ["hydrotools._restclient", "hydrotools._restclient._iterable_nonstring", "hydrotools._restclient._restclient", "hydrotools._restclient._restclient_sigs", "hydrotools._restclient.async_client", "hydrotools._restclient.async_helpers", "hydrotools._restclient.urllib", "hydrotools._restclient.urllib_types", "hydrotools._restclient.utilities", "hydrotools.caches", "hydrotools.caches.hdf", "hydrotools.events.event_detection", "hydrotools.events.event_detection.decomposition", "hydrotools.metrics", "hydrotools.metrics.metrics", "hydrotools.nwis_client", "hydrotools.nwis_client.iv", "hydrotools.nwm_client", "hydrotools.nwm_client.gcp", "hydrotools.nwm_client.http", "hydrotools.nwm_client.utils", "index"], "envversion": {"sphinx": 62, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2}, "filenames": ["hydrotools._restclient.rst", "hydrotools._restclient._iterable_nonstring.rst", "hydrotools._restclient._restclient.rst", "hydrotools._restclient._restclient_sigs.rst", "hydrotools._restclient.async_client.rst", "hydrotools._restclient.async_helpers.rst", "hydrotools._restclient.urllib.rst", "hydrotools._restclient.urllib_types.rst", "hydrotools._restclient.utilities.rst", "hydrotools.caches.rst", "hydrotools.caches.hdf.rst", "hydrotools.events.event_detection.rst", "hydrotools.events.event_detection.decomposition.rst", "hydrotools.metrics.rst", "hydrotools.metrics.metrics.rst", "hydrotools.nwis_client.rst", "hydrotools.nwis_client.iv.rst", "hydrotools.nwm_client.rst", "hydrotools.nwm_client.gcp.rst", "hydrotools.nwm_client.http.rst", "hydrotools.nwm_client.utils.rst", "index.rst"], "indexentries": {"_abc_impl (hydrotools._restclient._iterable_nonstring.iterablenonstringlike attribute)": [[1, "hydrotools._restclient._iterable_nonstring.IterableNonStringLike._abc_impl", false]], "_abc_impl (hydrotools._restclient.urllib.url attribute)": [[6, "hydrotools._restclient.urllib.Url._abc_impl", false]], "_abc_impl (hydrotools._restclient.urllib.variadic attribute)": [[6, "hydrotools._restclient.urllib.Variadic._abc_impl", false]], "_base_url (hydrotools.nwis_client.iv.ivdataservice attribute)": [[16, "hydrotools.nwis_client.iv.IVDataService._base_url", false]], "_bbox_split() (in module hydrotools.nwis_client.iv)": [[16, "hydrotools.nwis_client.iv._bbox_split", false]], "_build_parse_result() (hydrotools._restclient.urllib.url static method)": [[6, "hydrotools._restclient.urllib.Url._build_parse_result", false]], "_build_parse_result_cast_to_url() (hydrotools._restclient.urllib.url static method)": [[6, "hydrotools._restclient.urllib.Url._build_parse_result_cast_to_url", false]], "_clean_parse_result() (hydrotools._restclient.urllib.url static method)": [[6, "hydrotools._restclient.urllib.Url._clean_parse_result", false]], "_create_empty_canonical_df() (in module hydrotools.nwis_client.iv)": [[16, "hydrotools.nwis_client.iv._create_empty_canonical_df", false]], "_datetime_format (hydrotools.nwis_client.iv.ivdataservice attribute)": [[16, "hydrotools.nwis_client.iv.IVDataService._datetime_format", false]], "_get() (hydrotools._restclient._restclient.restclient method)": [[2, "hydrotools._restclient._restclient.RestClient._get", false]], "_handle_date() (hydrotools.nwis_client.iv.ivdataservice method)": [[16, "hydrotools.nwis_client.iv.IVDataService._handle_date", false]], "_handle_response() (hydrotools.nwis_client.iv.ivdataservice static method)": [[16, "hydrotools.nwis_client.iv.IVDataService._handle_response", false]], "_handle_start_end_period_url_params() (hydrotools.nwis_client.iv.ivdataservice method)": [[16, "hydrotools.nwis_client.iv.IVDataService._handle_start_end_period_url_params", false]], "_headers (hydrotools.nwis_client.iv.ivdataservice attribute)": [[16, "hydrotools.nwis_client.iv.IVDataService._headers", false]], "_mget() (hydrotools._restclient._restclient.restclient method)": [[2, "hydrotools._restclient._restclient.RestClient._mget", false]], "_patch_get() (hydrotools._restclient._restclient.restclient method)": [[2, "hydrotools._restclient._restclient.RestClient._patch_get", false]], "_request() (hydrotools._restclient.async_client.clientsession method)": [[4, "hydrotools._restclient.async_client.ClientSession._request", false]], "_validate_construction() (hydrotools._restclient.urllib.url static method)": [[6, "hydrotools._restclient.urllib.Url._validate_construction", false]], "_validate_period_string() (hydrotools.nwis_client.iv.ivdataservice method)": [[16, "hydrotools.nwis_client.iv.IVDataService._validate_period_string", false]], "_value_time_label (hydrotools.nwis_client.iv.ivdataservice attribute)": [[16, "hydrotools.nwis_client.iv.IVDataService._value_time_label", false]], "_verify_case_insensitive_kwargs_handler() (in module hydrotools.nwis_client.iv)": [[16, "hydrotools.nwis_client.iv._verify_case_insensitive_kwargs_handler", false]], "add() (hydrotools._restclient.urllib.url method)": [[6, "hydrotools._restclient.urllib.Url.add", false]], "alias (class in hydrotools._restclient.utilities)": [[8, "hydrotools._restclient.utilities.Alias", false]], "aliasgroup (class in hydrotools._restclient.utilities)": [[8, "hydrotools._restclient.utilities.AliasGroup", false]], "base_chance() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.base_chance", false]], "base_url (hydrotools._restclient._restclient.restclient property)": [[2, "hydrotools._restclient._restclient.RestClient.base_url", false]], "base_url (hydrotools.nwis_client.iv.ivdataservice property)": [[16, "hydrotools.nwis_client.iv.IVDataService.base_url", false]], "build_url() (hydrotools._restclient._restclient.restclient method)": [[2, "hydrotools._restclient._restclient.RestClient.build_url", false]], "cache_enabled (hydrotools.nwis_client.iv.ivdataservice property)": [[16, "hydrotools.nwis_client.iv.IVDataService.cache_enabled", false]], "clientsession (class in hydrotools._restclient.async_client)": [[4, "hydrotools._restclient.async_client.ClientSession", false]], "close() (hydrotools._restclient._restclient.restclient method)": [[2, "hydrotools._restclient._restclient.RestClient.close", false]], "coefficient_of_extrapolation() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.coefficient_of_extrapolation", false]], "coefficient_of_persistence() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.coefficient_of_persistence", false]], "compute_contingency_table() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.compute_contingency_table", false]], "datetime_format (hydrotools.nwis_client.iv.ivdataservice property)": [[16, "hydrotools.nwis_client.iv.IVDataService.datetime_format", false]], "detrend_streamflow() (in module hydrotools.events.event_detection.decomposition)": [[12, "hydrotools.events.event_detection.decomposition.detrend_streamflow", false]], "encode() (hydrotools._restclient.urllib.variadic method)": [[6, "hydrotools._restclient.urllib.Variadic.encode", false]], "equitable_threat_score() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.equitable_threat_score", false]], "event_boundaries() (in module hydrotools.events.event_detection.decomposition)": [[12, "hydrotools.events.event_detection.decomposition.event_boundaries", false]], "find_local_minimum() (in module hydrotools.events.event_detection.decomposition)": [[12, "hydrotools.events.event_detection.decomposition.find_local_minimum", false]], "frequency_bias() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.frequency_bias", false]], "get() (hydrotools._restclient._restclient.restclient method)": [[2, "hydrotools._restclient._restclient.RestClient.get", false]], "get() (hydrotools._restclient.utilities.alias method)": [[8, "hydrotools._restclient.utilities.Alias.get", false]], "get() (hydrotools._restclient.utilities.aliasgroup method)": [[8, "hydrotools._restclient.utilities.AliasGroup.get", false]], "get() (hydrotools.nwis_client.iv.ivdataservice method)": [[16, "hydrotools.nwis_client.iv.IVDataService.get", false]], "get_raw() (hydrotools.nwis_client.iv.ivdataservice method)": [[16, "hydrotools.nwis_client.iv.IVDataService.get_raw", false]], "headers (hydrotools._restclient._restclient.restclient property)": [[2, "hydrotools._restclient._restclient.RestClient.headers", false]], "headers (hydrotools.nwis_client.iv.ivdataservice property)": [[16, "hydrotools.nwis_client.iv.IVDataService.headers", false]], "hydrotools._restclient": [[0, "module-hydrotools._restclient", false]], "hydrotools._restclient._iterable_nonstring": [[1, "module-hydrotools._restclient._iterable_nonstring", false]], "hydrotools._restclient._restclient": [[2, "module-hydrotools._restclient._restclient", false]], "hydrotools._restclient._restclient_sigs": [[3, "module-hydrotools._restclient._restclient_sigs", false]], "hydrotools._restclient.async_client": [[4, "module-hydrotools._restclient.async_client", false]], "hydrotools._restclient.urllib": [[6, "module-hydrotools._restclient.urllib", false]], "hydrotools._restclient.urllib_types": [[7, "module-hydrotools._restclient.urllib_types", false]], "hydrotools._restclient.utilities": [[8, "module-hydrotools._restclient.utilities", false]], "hydrotools.events.event_detection": [[11, "module-hydrotools.events.event_detection", false]], "hydrotools.events.event_detection.decomposition": [[12, "module-hydrotools.events.event_detection.decomposition", false]], "hydrotools.metrics": [[13, "module-hydrotools.metrics", false]], "hydrotools.metrics.metrics": [[14, "module-hydrotools.metrics.metrics", false]], "hydrotools.nwis_client": [[15, "module-hydrotools.nwis_client", false]], "hydrotools.nwis_client.iv": [[16, "module-hydrotools.nwis_client.iv", false]], "iterablenonstringlike (class in hydrotools._restclient._iterable_nonstring)": [[1, "hydrotools._restclient._iterable_nonstring.IterableNonStringLike", false]], "ivdataservice (class in hydrotools.nwis_client.iv)": [[16, "hydrotools.nwis_client.iv.IVDataService", false]], "joinurl() (hydrotools._restclient.urllib.url method)": [[6, "hydrotools._restclient.urllib.Url.joinurl", false]], "keys (hydrotools._restclient.utilities.alias attribute)": [[8, "hydrotools._restclient.utilities.Alias.keys", false]], "keys (hydrotools._restclient.utilities.aliasgroup property)": [[8, "hydrotools._restclient.utilities.AliasGroup.keys", false]], "kling_gupta_efficiency() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.kling_gupta_efficiency", false]], "list_events() (in module hydrotools.events.event_detection.decomposition)": [[12, "hydrotools.events.event_detection.decomposition.list_events", false]], "mark_event_flows() (in module hydrotools.events.event_detection.decomposition)": [[12, "hydrotools.events.event_detection.decomposition.mark_event_flows", false]], "mean_error() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.mean_error", false]], "mean_error_skill_score() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.mean_error_skill_score", false]], "mean_squared_error() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.mean_squared_error", false]], "mget() (hydrotools._restclient._restclient.restclient method)": [[2, "hydrotools._restclient._restclient.RestClient.mget", false]], "module": [[0, "module-hydrotools._restclient", false], [1, "module-hydrotools._restclient._iterable_nonstring", false], [2, "module-hydrotools._restclient._restclient", false], [3, "module-hydrotools._restclient._restclient_sigs", false], [4, "module-hydrotools._restclient.async_client", false], [6, "module-hydrotools._restclient.urllib", false], [7, "module-hydrotools._restclient.urllib_types", false], [8, "module-hydrotools._restclient.utilities", false], [11, "module-hydrotools.events.event_detection", false], [12, "module-hydrotools.events.event_detection.decomposition", false], [13, "module-hydrotools.metrics", false], [14, "module-hydrotools.metrics.metrics", false], [15, "module-hydrotools.nwis_client", false], [16, "module-hydrotools.nwis_client.iv", false]], "nash_sutcliffe_efficiency() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.nash_sutcliffe_efficiency", false]], "option_groups (hydrotools._restclient.utilities.aliasgroup property)": [[8, "hydrotools._restclient.utilities.AliasGroup.option_groups", false]], "percent_correct() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.percent_correct", false]], "probability_of_detection() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.probability_of_detection", false]], "probability_of_false_alarm() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.probability_of_false_alarm", false]], "probability_of_false_detection() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.probability_of_false_detection", false]], "quote (class in hydrotools._restclient.urllib_types)": [[7, "hydrotools._restclient.urllib_types.Quote", false]], "quote (hydrotools._restclient.urllib_types.quote attribute)": [[7, "hydrotools._restclient.urllib_types.Quote.QUOTE", false]], "quote() (hydrotools._restclient.urllib_types.quote method)": [[7, "hydrotools._restclient.urllib_types.Quote.quote", false]], "quote_from_bytes (hydrotools._restclient.urllib_types.quote attribute)": [[7, "hydrotools._restclient.urllib_types.Quote.QUOTE_FROM_BYTES", false]], "quote_plus (hydrotools._restclient.urllib_types.quote attribute)": [[7, "hydrotools._restclient.urllib_types.Quote.QUOTE_PLUS", false]], "quote_style (hydrotools._restclient.urllib_types.quote property)": [[7, "hydrotools._restclient.urllib_types.Quote.quote_style", false]], "quote_treatment (hydrotools._restclient.urllib.url property)": [[6, "hydrotools._restclient.urllib.Url.quote_treatment", false]], "quote_url (hydrotools._restclient.urllib.url property)": [[6, "hydrotools._restclient.urllib.Url.quote_url", false]], "restclient (class in hydrotools._restclient._restclient)": [[2, "hydrotools._restclient._restclient.RestClient", false]], "rolling_minimum() (in module hydrotools.events.event_detection.decomposition)": [[12, "hydrotools.events.event_detection.decomposition.rolling_minimum", false]], "root_mean_squared_error() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.root_mean_squared_error", false]], "sequence_scientific_array_like() (in module hydrotools.nwis_client.iv)": [[16, "hydrotools.nwis_client.iv.sequence_scientific_array_like", false]], "simplify_variable_name() (hydrotools.nwis_client.iv.ivdataservice static method)": [[16, "hydrotools.nwis_client.iv.IVDataService.simplify_variable_name", false]], "slots (hydrotools._restclient._iterable_nonstring.iterablenonstringlike attribute)": [[1, "hydrotools._restclient._iterable_nonstring.IterableNonStringLike.slots", false]], "split() (in module hydrotools.nwis_client.iv)": [[16, "hydrotools.nwis_client.iv.split", false]], "threat_score() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.threat_score", false]], "unquote() (hydrotools._restclient.urllib_types.quote method)": [[7, "hydrotools._restclient.urllib_types.Quote.unquote", false]], "unquote_style (hydrotools._restclient.urllib_types.quote property)": [[7, "hydrotools._restclient.urllib_types.Quote.unquote_style", false]], "url (class in hydrotools._restclient.urllib)": [[6, "hydrotools._restclient.urllib.Url", false]], "url (hydrotools._restclient.urllib.url property)": [[6, "hydrotools._restclient.urllib.Url.url", false]], "validate_optional_combinations() (in module hydrotools.nwis_client.iv)": [[16, "hydrotools.nwis_client.iv.validate_optional_combinations", false]], "value (hydrotools._restclient.utilities.alias attribute)": [[8, "hydrotools._restclient.utilities.Alias.value", false]], "value_time_label (hydrotools.nwis_client.iv.ivdataservice property)": [[16, "hydrotools.nwis_client.iv.IVDataService.value_time_label", false]], "values (hydrotools._restclient.utilities.aliasgroup property)": [[8, "hydrotools._restclient.utilities.AliasGroup.values", false]], "variadic (class in hydrotools._restclient.urllib)": [[6, "hydrotools._restclient.urllib.Variadic", false]], "volumetric_efficiency() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.volumetric_efficiency", false]]}, "objects": {"hydrotools": [[0, 0, 0, "-", "_restclient"], [13, 0, 0, "-", "metrics"], [15, 0, 0, "-", "nwis_client"]], "hydrotools._restclient": [[1, 0, 0, "-", "_iterable_nonstring"], [2, 0, 0, "-", "_restclient"], [3, 0, 0, "-", "_restclient_sigs"], [4, 0, 0, "-", "async_client"], [6, 0, 0, "-", "urllib"], [7, 0, 0, "-", "urllib_types"], [8, 0, 0, "-", "utilities"]], "hydrotools._restclient._iterable_nonstring": [[1, 1, 1, "", "IterableNonStringLike"]], "hydrotools._restclient._iterable_nonstring.IterableNonStringLike": [[1, 2, 1, "", "_abc_impl"], [1, 2, 1, "", "slots"]], "hydrotools._restclient._restclient": [[2, 1, 1, "", "RestClient"]], "hydrotools._restclient._restclient.RestClient": [[2, 3, 1, "", "_get"], [2, 3, 1, "", "_mget"], [2, 3, 1, "", "_patch_get"], [2, 4, 1, "", "base_url"], [2, 3, 1, "", "build_url"], [2, 3, 1, "", "close"], [2, 3, 1, "", "get"], [2, 4, 1, "", "headers"], [2, 3, 1, "", "mget"]], "hydrotools._restclient.async_client": [[4, 1, 1, "", "ClientSession"]], "hydrotools._restclient.async_client.ClientSession": [[4, 3, 1, "", "_request"]], "hydrotools._restclient.urllib": [[6, 1, 1, "", "Url"], [6, 1, 1, "", "Variadic"]], "hydrotools._restclient.urllib.Url": [[6, 2, 1, "", "_abc_impl"], [6, 3, 1, "", "_build_parse_result"], [6, 3, 1, "", "_build_parse_result_cast_to_url"], [6, 3, 1, "", "_clean_parse_result"], [6, 3, 1, "", "_validate_construction"], [6, 3, 1, "", "add"], [6, 3, 1, "", "joinurl"], [6, 4, 1, "", "quote_treatment"], [6, 4, 1, "", "quote_url"], [6, 4, 1, "", "url"]], "hydrotools._restclient.urllib.Variadic": [[6, 2, 1, "", "_abc_impl"], [6, 3, 1, "", "encode"]], "hydrotools._restclient.urllib_types": [[7, 1, 1, "", "Quote"]], "hydrotools._restclient.urllib_types.Quote": [[7, 2, 1, "", "QUOTE"], [7, 2, 1, "", "QUOTE_FROM_BYTES"], [7, 2, 1, "", "QUOTE_PLUS"], [7, 3, 1, "", "quote"], [7, 4, 1, "", "quote_style"], [7, 3, 1, "", "unquote"], [7, 4, 1, "", "unquote_style"]], "hydrotools._restclient.utilities": [[8, 1, 1, "", "Alias"], [8, 1, 1, "", "AliasGroup"]], "hydrotools._restclient.utilities.Alias": [[8, 3, 1, "", "get"], [8, 2, 1, "", "keys"], [8, 2, 1, "", "value"]], "hydrotools._restclient.utilities.AliasGroup": [[8, 3, 1, "", "get"], [8, 4, 1, "", "keys"], [8, 4, 1, "", "option_groups"], [8, 4, 1, "", "values"]], "hydrotools.events": [[11, 0, 0, "-", "event_detection"]], "hydrotools.events.event_detection": [[12, 0, 0, "-", "decomposition"]], "hydrotools.events.event_detection.decomposition": [[12, 5, 1, "", "detrend_streamflow"], [12, 5, 1, "", "event_boundaries"], [12, 5, 1, "", "find_local_minimum"], [12, 5, 1, "", "list_events"], [12, 5, 1, "", "mark_event_flows"], [12, 5, 1, "", "rolling_minimum"]], "hydrotools.metrics": [[14, 0, 0, "-", "metrics"]], "hydrotools.metrics.metrics": [[14, 5, 1, "", "base_chance"], [14, 5, 1, "", "coefficient_of_extrapolation"], [14, 5, 1, "", "coefficient_of_persistence"], [14, 5, 1, "", "compute_contingency_table"], [14, 5, 1, "", "equitable_threat_score"], [14, 5, 1, "", "frequency_bias"], [14, 5, 1, "", "kling_gupta_efficiency"], [14, 5, 1, "", "mean_error"], [14, 5, 1, "", "mean_error_skill_score"], [14, 5, 1, "", "mean_squared_error"], [14, 5, 1, "", "nash_sutcliffe_efficiency"], [14, 5, 1, "", "percent_correct"], [14, 5, 1, "", "probability_of_detection"], [14, 5, 1, "", "probability_of_false_alarm"], [14, 5, 1, "", "probability_of_false_detection"], [14, 5, 1, "", "root_mean_squared_error"], [14, 5, 1, "", "threat_score"], [14, 5, 1, "", "volumetric_efficiency"]], "hydrotools.nwis_client": [[16, 0, 0, "-", "iv"]], "hydrotools.nwis_client.iv": [[16, 1, 1, "", "IVDataService"], [16, 5, 1, "", "_bbox_split"], [16, 5, 1, "", "_create_empty_canonical_df"], [16, 5, 1, "", "_verify_case_insensitive_kwargs_handler"], [16, 5, 1, "", "sequence_scientific_array_like"], [16, 5, 1, "", "split"], [16, 5, 1, "", "validate_optional_combinations"]], "hydrotools.nwis_client.iv.IVDataService": [[16, 2, 1, "", "_base_url"], [16, 2, 1, "", "_datetime_format"], [16, 3, 1, "", "_handle_date"], [16, 3, 1, "", "_handle_response"], [16, 3, 1, "", "_handle_start_end_period_url_params"], [16, 2, 1, "", "_headers"], [16, 3, 1, "", "_validate_period_string"], [16, 2, 1, "", "_value_time_label"], [16, 4, 1, "", "base_url"], [16, 4, 1, "", "cache_enabled"], [16, 4, 1, "", "datetime_format"], [16, 3, 1, "", "get"], [16, 3, 1, "", "get_raw"], [16, 4, 1, "", "headers"], [16, 3, 1, "", "simplify_variable_name"], [16, 4, 1, "", "value_time_label"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "method", "Python method"], "4": ["py", "property", "Python property"], "5": ["py", "function", "Python function"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:method", "4": "py:property", "5": "py:function"}, "terms": {"": [6, 8, 14, 16], "0": [12, 14, 16, 21], "00": 16, "0000": 16, "00060": 16, "003": 14, "01": 16, "01646500": 16, "01t00": 16, "02": 16, "02339495": 16, "02342500": 16, "023432415": 16, "02361000": 16, "02361500": 16, "02362240": 16, "02363000": 16, "02364500": 16, "02369800": 16, "02371500": 16, "0423360405": 2, "05078470": 2, "05078520": 2, "05106000": 2, "05124982": 2, "05125039": 2, "08": 14, "0h": 12, "1": [4, 6, 8, 14, 16, 21], "10": [4, 14], "1016": 14, "1034": 14, "1044": 14, "12": 16, "14": 14, "141": 21, "16": 14, "1970": 14, "1980": 14, "2": [6, 8, 14, 16, 21], "20": [6, 16], "2008": 14, "2009": 14, "2012": 14, "2020": [12, 16], "2021": 16, "22": 14, "237": 14, "27": 6, "2723": 14, "2725": 14, "27arg": 6, "282": 14, "290": 14, "2b": 6, "3": [2, 4, 6, 8, 14, 21], "36": 16, "36107": 16, "36109": 16, "377": 14, "38": 16, "4": [14, 21], "43200": [2, 16], "4326": 21, "451": 14, "5": [14, 16, 21], "5706953": 21, "5706954": 21, "6": [14, 21], "65536": 4, "7": 21, "8": 21, "80": 14, "81": 16, "8190": 4, "83": 16, "8601": 16, "91": 14, "A": [6, 8, 12, 14, 16, 21], "As": 6, "At": 8, "By": 6, "For": 14, "If": [2, 8, 16], "In": [8, 14, 21], "It": [12, 16, 21], "The": [6, 12, 14, 16, 21], "To": [6, 21], "__": 21, "_abc": [1, 6], "_abc_data": [1, 6], "_abc_impl": [0, 1, 6], "_base_url": [15, 16], "_bbox_split": [15, 16], "_build_parse_result": [0, 6], "_build_parse_result_cast_to_url": [0, 6], "_clean_parse_result": [0, 6], "_create_empty_canonical_df": [15, 16], "_datetime_format": [15, 16], "_get": [0, 2], "_handle_d": [15, 16], "_handle_respons": [15, 16], "_handle_start_end_period_url_param": [15, 16], "_header": [15, 16], "_iterable_nonstr": 0, "_mget": [0, 2], "_multidict": 4, "_nestedsequ": 14, "_patch_get": [0, 2], "_request": [0, 4], "_restclient": 21, "_restclient_sig": 0, "_sentinel": 4, "_supportsarrai": 14, "_validate_construct": [0, 6], "_validate_period_str": [15, 16], "_value_time_label": [15, 16], "_verify_case_insensitive_kwargs_handl": [15, 16], "a_r": 14, "a_scal": 14, "abbrevi": 16, "abc": 4, "absolut": 14, "abstract": 14, "abstractcookiejar": 4, "abstracteventloop": [2, 4], "accept": [2, 16, 21], "accord": [14, 21], "account": 14, "accuraci": 14, "activ": [16, 21], "actual": 21, "ad": [16, 21], "add": [0, 4, 6, 16], "addit": 16, "adher": [16, 21], "advanc": 12, "advis": 21, "affect": 21, "aforment": 21, "against": [14, 16], "agreement": 14, "aim": 12, "aiohttp": [2, 4, 16], "al": 16, "alabama": 16, "alarm": 14, "alia": [0, 8], "aliasgroup": [0, 8], "all": [16, 21], "allow": [6, 21], "allow_redirect": [2, 4], "alongsid": 14, "alpha": 14, "also": [6, 8, 14, 16, 21], "altern": [14, 21], "alwai": 14, "among": 21, "an": [6, 8, 12, 14, 16, 21], "analog": 6, "analysi": 14, "ani": [2, 4, 6, 8, 12, 14, 16, 21], "api": [2, 6, 8, 16], "appear": 21, "append": [2, 6], "appli": [12, 14, 21], "applic": [8, 14], "approach": 21, "approxim": 12, "april": 14, "ar": [2, 6, 8, 12, 16, 21], "arg": [4, 6, 7, 8], "arg_map": 16, "argument": [6, 16], "around": [4, 12], "arrai": [14, 16, 21], "arriv": 14, "assembli": 14, "assert": 6, "assess": 14, "assimil": 21, "associ": [12, 16], "assum": [12, 14, 16, 21], "async": [2, 4], "async_cli": 0, "async_help": 0, "asynchron": [2, 16], "asyncio": [2, 4], "attempt": [2, 21], "auth": 4, "author": 14, "auto_decompress": 4, "autom": 12, "automag": 6, "automat": 6, "avail": 21, "avoid": 21, "await": 4, "awar": 21, "b": [6, 14], "b_scale": 14, "backend": [8, 16], "backoff": 2, "backward": 12, "bar": 8, "base": [1, 2, 4, 6, 7, 8, 14, 16, 21], "base_ch": [13, 14], "base_url": [0, 2, 4, 8, 15, 16], "baseconnector": 4, "basecooki": 4, "baseflow": 12, "baseindex": 12, "baselin": 14, "baseurl": 16, "basicauth": 4, "bauwen": 14, "baz": 8, "bbox": 16, "befor": [2, 14], "begin": 21, "behavior": [6, 21], "behind": 2, "below": [8, 21], "beta": 14, "better": 14, "between": 14, "bia": 14, "bin": 21, "bool": [2, 4, 8, 14, 16], "boolean": [12, 14], "both": [8, 14, 21], "bound": 16, "boundari": 12, "box": 16, "bra": 14, "build": 6, "build_url": [0, 2], "built": 21, "byte": [1, 4, 6, 8, 14], "cach": [2, 4, 16, 21], "cache_en": [15, 16], "cache_expire_aft": [2, 16], "cache_filenam": [2, 16], "cachebackend": 4, "cachedrespons": 4, "cachedsess": 4, "call": [6, 14], "callabl": [4, 8], "can": [6, 8, 16, 21], "cannot": 8, "canon": 16, "case": [8, 14, 21], "casrn": 16, "casrn_search": 16, "cat": 21, "categor": 14, "caus": 21, "central": 12, "chanc": 14, "chang": [6, 14, 21], "charact": [6, 16], "chunk": 4, "cimultidict": 4, "cimultidictproxi": 4, "class": [1, 2, 4, 6, 7, 8, 16, 21], "clearest": 8, "client": [2, 4, 15, 21], "client_reqrep": 4, "client_respons": 2, "client_w": 4, "clientrequest": 4, "clientrespons": [2, 4, 16], "clientsess": [0, 2, 4, 6], "clienttimeout": 4, "clientwebsocketrespons": 4, "close": [0, 2], "cloud": 21, "cm": 8, "code": [16, 21], "codec": 6, "coeffici": 14, "coefficient_of_extrapol": [13, 14], "coefficient_of_persist": [13, 14], "coincid": 21, "collect": [8, 16], "column": [12, 16], "combin": [14, 16], "come": 8, "comid": 21, "comma": 16, "common": [14, 21], "commonli": 21, "commun": 21, "compar": [6, 14], "comparison": 6, "compat": [16, 21], "complement": 14, "complex": 14, "compon": [12, 14], "compress": [2, 4, 16], "comput": [14, 21], "compute_contingency_t": [13, 14], "concaten": 6, "conceptu": 14, "concurr": 16, "conda": 21, "condit": 8, "confer": 14, "configur": 21, "conform": 6, "conn_timeout": 4, "connector": 4, "connector_own": 4, "consid": [8, 14, 21], "consider": 21, "consist": 21, "construct": [6, 8, 21], "contain": [14, 21], "conting": 14, "contingency_t": 14, "continu": [12, 14], "conveni": [14, 16], "convent": [6, 21], "convert": 16, "cooki": 4, "cookie_jar": 4, "cool": 8, "coordin": 21, "core": 21, "coro": 2, "correct": [12, 14, 16], "correctli": 14, "correl": 14, "correspond": 8, "could": 21, "counterpart": 21, "counti": 16, "county_queri": 16, "countycd": 16, "cours": 14, "cover": 21, "cr": 21, "creat": [8, 21], "criss": 14, "criteria": 14, "critic": 14, "cross": 21, "csi": 14, "current": [16, 21], "custom": 21, "cut": 8, "dai": 16, "data": [2, 4, 12, 14, 16], "data_structur": 21, "datafram": [12, 14, 16, 21], "datatyp": 16, "date": 16, "dateoffset": 12, "datetim": [12, 16, 21], "datetime64": [16, 21], "datetime_format": [15, 16], "datetimeindex": 12, "decai": 12, "decim": 21, "decomposit": [11, 14], "deepcopi": 8, "deepli": 14, "def": 8, "default": [2, 6, 12, 14, 16, 21], "delai": 12, "delimet": 6, "delimit": 16, "depend": [12, 21], "describ": 12, "descript": 14, "desir": 6, "detail": 16, "detect": [11, 14], "determin": 14, "detrend": 12, "detrend_streamflow": [11, 12], "develop": [8, 21], "deviat": 14, "df": 16, "dict": [2, 6, 14, 16], "dictionari": [6, 8, 16], "differ": [8, 14], "dimension": 14, "directli": 16, "disabl": 2, "disambigu": 21, "discharg": 16, "discret": 12, "discuss": 14, "distanc": 14, "distinguish": 21, "do": [6, 14, 21], "doc": 21, "document": [16, 21], "doe": [6, 14], "doi": 14, "done": 21, "down": 8, "dsintro": 21, "dt": 16, "dtype": [14, 21], "dump": 4, "durat": [12, 16], "e": [6, 14, 16, 21], "each": [2, 6, 12, 14, 21], "easi": [14, 21], "east": 16, "effici": [14, 21], "egu": 14, "either": 6, "elimin": 12, "ellipsi": 6, "els": 8, "emphas": 14, "empti": 16, "en": 21, "enabl": [2, 16], "enable_cach": [2, 16], "encod": [0, 2, 6, 16], "encount": 21, "encourag": 21, "end": [12, 16, 21], "enddt": 16, "enforc": 12, "english": 14, "ensur": 21, "entiti": 8, "entri": 21, "enum": [6, 7], "enumer": 7, "environ": 21, "epsg": 21, "equal": 12, "equit": 14, "equitable_threat_scor": [13, 14], "equival": [6, 8], "erronen": 6, "error": [6, 12, 14], "escap": 6, "estim": 14, "et": 14, "etc": 21, "euclidean": 14, "eumetrain": 14, "evalu": [13, 21], "event": [2, 4, 14, 21], "event_boundari": [11, 12], "event_detect": 21, "event_point": 12, "everi": 2, "ewm": 12, "exactli": 14, "exampl": [1, 2, 6, 8, 14, 16, 21], "except": 16, "exception_messag": 16, "exist": 21, "expect": [16, 21], "expect100": 4, "expert": 21, "expirationtim": 4, "expire_aft": 4, "explicit": 6, "expon": 14, "exponenti": 2, "export": 21, "expos": 2, "extens": 21, "extract": 16, "extrapol": 14, "f": [2, 8, 12, 14], "factor": 14, "factori": 8, "fail": 2, "fallback_charset_resolv": 4, "fals": [1, 4, 12, 14, 16], "false_neg": 14, "false_negative_kei": 14, "false_posit": 14, "false_positive_kei": 14, "farat": 14, "faratio": 14, "fashion": 12, "fbi": 14, "featur": [2, 6, 8, 21], "field": 16, "file": [16, 21], "filenam": [2, 16], "filepath": 16, "filetyp": 2, "filter": 12, "final": 14, "find": 21, "find_local_minimum": [11, 12], "fine": 21, "fingerprint": 4, "first": 16, "fix": 21, "flag": 12, "float": [2, 4, 8, 12, 14, 16], "float32": 21, "flow": 14, "flowlin": 2, "fluctuat": 12, "fmt": 16, "follow": [14, 16, 21], "foo": 8, "foo_alia": 8, "forecast": [14, 21], "form": [6, 16], "format": [6, 16], "formerli": 21, "forward": [6, 12], "frac": 14, "fragment": 6, "frame": 21, "frequenc": [12, 14], "frequency_bia": [13, 14], "frequent": 21, "from": [2, 6, 8, 12, 14, 16, 21], "frozenset": 8, "full": 16, "function": [4, 7, 11, 13], "g": [6, 14, 16, 21], "gage": 21, "gcp": 17, "gener": [12, 14, 21], "geodatafram": 21, "geometri": 21, "geopanda": 21, "geoseri": 21, "geospati": 21, "get": [0, 2, 8, 15, 16, 21], "get_cool_featur": 8, "get_raw": [15, 16], "gi": 16, "given": [2, 8, 14, 21], "go": 21, "good": 14, "googl": 21, "gov": [2, 6, 16], "grab": 21, "greater": 14, "ground": 14, "group": [8, 16], "groupalia": 8, "guarante": 21, "guid": 21, "gupta": 14, "gzip": [2, 16], "h": [14, 16], "ha": 21, "halflif": 12, "handi": 8, "handl": [6, 7, 16], "hashabl": 8, "have": [14, 16, 21], "hdf": [9, 21], "header": [0, 2, 4, 15, 16], "hedg": 14, "height": [16, 21], "help": 16, "helper": 4, "high": 12, "higher": 14, "hit": 14, "how": [12, 21], "howev": [2, 21], "htm": 14, "html": [16, 21], "html_tabl": 16, "http": [2, 6, 14, 16, 17, 21], "http_writer": 4, "httpversion": 4, "huc": 16, "huc_nam": 16, "huccd": 16, "hydrol": 12, "hydrolog": [12, 14, 16, 21], "hydrologi": 14, "hydrometr": 21, "hydrotool": 21, "i": [1, 2, 6, 8, 12, 14, 16, 21], "id": 21, "idiomat": 6, "ignor": 6, "immut": 8, "impart": 12, "implement": 16, "implic": 14, "import": [2, 6, 16], "improv": 14, "inact": 16, "includ": [2, 6, 16, 21], "include_expanded_metadata": 16, "incompat": 21, "incorrectli": 14, "increas": 21, "index": [12, 14], "indic": [12, 14, 21], "indistinguish": 21, "individu": [6, 12, 21], "indiviu": 12, "inf": 14, "info": 21, "inform": 16, "input": 16, "inspect": 12, "instanc": [2, 6, 8], "instantan": [15, 21], "instrument": 12, "int": [2, 4, 8, 12, 14, 16], "int64": 14, "int64index": 21, "integ": [14, 16], "integer32": 21, "intent": 21, "interev": 12, "interfac": 16, "intern": 14, "interpret": 21, "introduc": 16, "invalid": [8, 16], "io": 21, "isinst": 1, "iso": 16, "issu": 21, "istr": 4, "item": 16, "iter": [1, 4, 8, 16], "iterablenonstringlik": [0, 1], "ith": 14, "its": 6, "iv": [15, 21], "ivdataservic": [15, 16], "j": [12, 14], "jhydrol": 14, "job": 21, "join": 6, "join_on": 16, "joinurl": [0, 6], "journal": 14, "json": [2, 4, 6, 8], "json_seri": 4, "just": 21, "k": 14, "kei": [0, 2, 6, 8, 14, 16], "keyerror": 16, "keyword": 6, "kge": 14, "kitanidi": 14, "kling": 14, "kling_gupta_effici": [13, 14], "kwarg": [2, 4, 6, 7], "l": [12, 14], "lab": 2, "label": [14, 16], "labl": 21, "lag": 14, "lambda": 4, "larg": 14, "last": 14, "lat": 16, "latest": [16, 21], "latitud": [16, 21], "lead": 21, "left": 14, "length": [14, 16], "less": [12, 14], "lexicon": 21, "librari": [2, 8], "life": [2, 16], "lighter": 21, "like": [8, 14, 21], "likewis": 6, "limit": 21, "line": 21, "linear": 14, "lingo": 21, "link": 2, "list": [1, 2, 4, 6, 8, 16, 21], "list_ev": [11, 12], "liter": 6, "load": 21, "local": 12, "locat": 21, "log": 14, "logarithm": 14, "logic": 8, "lon": 16, "longitud": [16, 21], "look": 12, "loop": [2, 4], "lower": [14, 16], "m": [8, 16, 21], "made": 2, "mai": [12, 14, 21], "major": 21, "make": [2, 21], "malform": 16, "manag": 21, "mani": 8, "map": [4, 6, 8], "mark": 12, "mark_event_flow": [11, 12], "martinez": 14, "match": [2, 14], "max": 12, "max_field_s": 4, "max_line_s": 4, "max_redirect": 4, "max_sites_per_request": 16, "mb": 21, "md": 21, "me": 14, "mean": [2, 6, 8, 12, 14, 21], "mean_error": [13, 14], "mean_error_skill_scor": [13, 14], "mean_flow": 21, "mean_squared_error": [13, 14], "meaning": 21, "measur": [14, 21], "measurement_unit": [16, 21], "median": 12, "medium_rang": 21, "member": 6, "memori": 21, "mess": 14, "messag": 21, "method": [2, 4, 6, 7, 12, 14, 21], "metric": 21, "mget": [0, 2], "min": 12, "mind": 21, "minimum": 12, "minimum_event_dur": 12, "mirror": 6, "model": [12, 14, 21], "modul": 21, "monkeypatch": 2, "more": [6, 14, 16], "morsel": 4, "most": 21, "move": 12, "msgcr": 14, "much": 12, "multidict": 4, "multipl": [2, 16, 21], "must": 21, "mutat": 8, "my_datafram": 21, "n": [2, 14, 21], "n_retri": [2, 4], "n_sampl": 14, "naiv": 21, "name": [6, 16, 21], "nash": 14, "nash_sutcliffe_effici": [13, 14], "nation": 21, "natur": 14, "navig": 2, "ndarrai": 16, "neg": 14, "nest": 16, "netloc": 6, "new": [6, 12], "nldi": 2, "noaa": 21, "nois": 12, "nomad": 21, "non": [6, 14, 16], "none": [2, 4, 6, 8, 16, 21], "normal": [12, 14], "north": 16, "nossent": 14, "notch": 12, "note": [6, 14, 21], "np": 16, "nse": 14, "number": [12, 14], "numpi": [12, 14, 16, 21], "nw": 21, "nwi": [15, 21], "nwis_client": 21, "nwisiv_cach": 16, "nwissit": 2, "nwm": 21, "nwm_client": 21, "nwm_feature_id": 21, "nws_lid": 21, "o": [6, 14], "o2": 6, "ob": 14, "object": [1, 2, 4, 6, 8, 16, 21], "observ": [14, 16], "occur": 14, "occurr": 14, "offset": 12, "often": [8, 21], "ogden": 12, "one": [8, 12], "onli": [8, 16], "oper": [6, 21], "oppor": [6, 8], "option": [6, 12, 14, 16], "option_group": [0, 8], "org": [8, 14, 21], "organ": 21, "organiz": 21, "origin": 12, "other": [6, 14, 21], "our": 21, "out": 16, "output": [14, 16], "over": [2, 12, 14, 16], "owp": 21, "p": 14, "p1dg": 16, "p5d": 16, "packag": 21, "pag": 14, "painless": 21, "pair": [6, 14], "panda": [12, 14, 16, 21], "param": [4, 6, 16], "param_group": 16, "paramet": [2, 6, 8, 12, 14, 16], "parameter_group_nm": 16, "parameter_nm": 16, "parameter_unit": 16, "parametercd": 16, "pars": 6, "parseresult": 6, "part": [12, 14, 21], "partial": 14, "particular": 21, "pass": [2, 6, 8, 16], "past": 16, "path": [6, 8, 16], "path_1": 8, "path_2": 8, "path_group": 8, "pathlib": 6, "pattern": 8, "pc": 14, "pd": [12, 16], "percent": 14, "percent_correct": [13, 14], "perfect": 14, "perform": [14, 21], "period": 16, "persist": 14, "person": 21, "phase": 12, "pip": 21, "pipenv": 21, "platform": 21, "plu": 6, "pm_group": 16, "pm_search": 16, "pmcode": 16, "pod": 14, "pofa": 14, "pofd": 14, "point": [12, 16], "portion": 14, "posit": [12, 14], "possibl": [6, 16, 21], "post": 14, "power": 14, "practition": 21, "preced": 2, "predict": 14, "predictor": 14, "prefer": 21, "present": [2, 8, 16, 21], "previou": 14, "primit": [2, 6, 21], "principl": 14, "print": [2, 6, 21], "probability_of_detect": [13, 14], "probability_of_false_alarm": [13, 14], "probability_of_false_detect": [13, 14], "probabl": 14, "proc": 12, "process": 14, "produc": 12, "programat": 16, "properti": [2, 6, 7, 8, 16], "propos": 14, "protect": 21, "provid": [2, 6, 8, 16, 21], "proxi": 4, "proxy_auth": 4, "proxy_head": 4, "pydata": 21, "python": 21, "python3": 21, "qualifi": 21, "quantiti": 21, "queri": [2, 6], "quot": [0, 6, 7], "quote_from_byt": [0, 6, 7], "quote_overide_map": 6, "quote_plu": [0, 6, 7], "quote_styl": [0, 7], "quote_treat": [0, 6], "quote_url": [0, 6], "quotestyl": 7, "r": 14, "r_scale": 14, "radio_pm_search": 16, "radiu": 12, "rais": [6, 16], "raise_for_statu": 4, "random": 12, "rang": [14, 16], "rare": 14, "rate": 14, "ratio": 14, "raw": 16, "raw_respons": 16, "re": [6, 14], "reach": 21, "read_bufs": 4, "read_timeout": 4, "read_until_eof": 4, "readabl": 6, "readm": 21, "readthedoc": 21, "real": [14, 21], "recent": 14, "recommend": [6, 8], "record": 16, "redefin": 21, "reduc": 12, "refer": [8, 14, 21], "reference_tim": 21, "refresh": 4, "regex": 16, "regina": 12, "regist": 6, "register_error": 6, "regress": 14, "rel": 14, "relationship": 8, "releas": 2, "relev": 16, "remap": 6, "remov": [6, 12], "remove_unused_categori": 21, "replac": [2, 6], "repositori": 21, "repres": 6, "represent": [6, 16], "reproduc": 21, "request": [2, 8, 16, 21], "request_class": 4, "requir": [12, 14, 21], "requote_redirect_url": 4, "research": 14, "residu": 12, "resolv": 21, "resourc": 14, "resp": 2, "respect": 6, "respons": [8, 16], "response_class": 4, "rest": [2, 8, 15, 21], "restclient": [0, 2, 6], "result": [8, 14, 16], "retain": 6, "retri": [2, 4], "retriev": [2, 16, 21], "return": [2, 6, 8, 12, 14, 16, 21], "review": 12, "right": 14, "river": 14, "roll": 12, "rolling_minimum": [11, 12], "root": 14, "root_mean_squared_error": [13, 14], "row": 12, "run": 21, "run_until_complet": 2, "safe": 6, "sake": 6, "scalar": 8, "scale": 14, "scene": 2, "scheme": 6, "scientif": 21, "scientist": 21, "score": 14, "script": 2, "search": 12, "second": [2, 16], "see": [2, 6, 14, 16, 21], "semi": 16, "sensibl": 21, "sensit": 14, "sentinel": [4, 16], "separ": 16, "seper": [6, 16], "sequenc": 4, "sequence_scientific_array_lik": [15, 16], "seri": [12, 14, 16, 21], "serial": 2, "server_hostnam": 4, "servic": [16, 21], "sessioncli": 4, "set": [2, 6, 8, 12, 14, 16], "shape": 14, "share": 21, "shift": 12, "short_rang": 21, "should": [12, 14, 21], "show": 16, "shown": 8, "si": 21, "signal": 12, "sim": 14, "similar": 14, "simpl": 2, "simplest": 21, "simplifi": [2, 16], "simplify_variable_nam": [15, 16], "simul": [14, 21], "singl": [6, 8, 16, 21], "site": [2, 6, 16, 21], "site_url": 2, "sitenam": 16, "sitestatu": 16, "size": 12, "skill": 14, "skip_auto_head": 4, "slash": 6, "slot": [0, 1], "smooth": 12, "so": [8, 21], "sobol": 14, "solut": 21, "some": [6, 8, 14, 21], "sourc": 21, "south": 16, "space": [6, 14], "special": 21, "specif": 21, "specifi": [6, 12, 16], "split": [15, 16], "split_delimit": 16, "split_threshold": 16, "sqlite": [2, 16], "sqlite3": 16, "squar": 14, "sr": 16, "srsname": 16, "srsname_search": 16, "ssl": 4, "ssl_context": 4, "stabl": 21, "stage": [12, 16], "standard": [16, 21], "start": [12, 16, 21], "start_dat": 21, "start_radiu": 12, "startdt": 16, "state": 16, "statecd": 16, "statement": 8, "static": [6, 16], "statist": 14, "statu": 16, "still": 14, "store": 8, "str": [1, 2, 4, 6, 8, 12, 14, 16], "str_or_url": 4, "streamflow": [12, 21], "strftime": 16, "strict": 6, "string": [1, 6, 16, 21], "structur": 21, "subclass": [1, 12], "subpackag": 21, "success": 14, "suffix": [2, 16], "suitabl": 14, "sum": 14, "sum_": 14, "summari": 14, "summat": 14, "support": [6, 8, 21], "sutcliff": 14, "system": 21, "systemat": 12, "t": [14, 16], "tabl": [14, 21], "take": 12, "taken": 21, "target": 14, "temperatur": 21, "tend": 14, "tendenc": 14, "term": 12, "territori": 16, "test": [1, 6], "text": 2, "than": [12, 14], "thei": 21, "thi": [6, 8, 12, 14, 16, 21], "threat": 14, "threat_scor": [13, 14], "through": [8, 14], "thrown": 8, "time": [2, 6, 12, 14, 16], "timedelta": 12, "timedelta64": 12, "timeout": 4, "timeseri": 12, "timestamp": [12, 16, 21], "timezon": [16, 21], "timseri": 12, "to_datetim": 16, "toggl": 16, "too": 16, "tool": 21, "toolbox": 21, "total": [14, 21], "trace": 4, "trace_config": 4, "trace_request_ctx": 4, "traceconfig": 4, "trail": 6, "transform": [16, 21], "treat": [6, 8], "treatment": 6, "trend": [12, 14], "true": [1, 2, 4, 6, 8, 12, 14, 16, 21], "true_neg": 14, "true_negative_kei": 14, "true_posit": 14, "true_positive_kei": 14, "trust_env": 4, "truth": 14, "try": 16, "tupl": [4, 6, 8, 16], "twice": 12, "two": [12, 14, 16], "type": [1, 2, 4, 6, 8, 12, 14, 16], "typeerror": 16, "typic": 21, "u": 16, "under": [12, 14], "unexpect": 21, "unicodeencodeerror": 6, "union": [2, 6, 8, 16], "unit": [16, 21], "unless": 6, "unquot": [0, 6, 7], "unquote_plu": [6, 7], "unquote_styl": [0, 7], "unquote_to_byt": 7, "unquote_treat": 6, "until": 16, "up": 16, "upgrad": 21, "upon": [12, 21], "url": [0, 2, 4, 6, 8], "urllib": 0, "urllib_typ": [0, 6], "us": [1, 2, 6, 8, 12, 14, 16], "usa": 16, "usac": 21, "usace_gage_id": 21, "usag": 2, "user_guid": 21, "userstr": 6, "usg": [2, 15, 21], "usgs_site_cod": [16, 21], "ut": 2, "utc": 16, "util": [0, 17, 21], "v": [12, 14], "v_0": 6, "v_1": 6, "valid": [8, 16, 21], "valid_arg_kei": 16, "validate_optional_combin": [15, 16], "valu": [0, 6, 7, 8, 12, 14, 15, 21], "value2": 6, "value_d": 21, "value_tim": [16, 21], "value_time_label": [15, 16], "valueerror": 8, "variabl": [14, 16], "variable_nam": [16, 21], "variablenam": 16, "variad": [0, 6], "varianc": 14, "varieti": [8, 21], "variou": 21, "ve": 21, "venv": 21, "verify_ssl": 4, "version": 4, "via": 6, "virtual": 21, "volumetr": 14, "volumetric_effici": [13, 14], "w": 14, "wai": 16, "water": [14, 16, 21], "waterdata": [2, 16], "waterservic": 16, "we": 21, "weather": 2, "web": 21, "weir": 12, "well": 6, "were": 14, "west": 16, "wgs84": 21, "when": [6, 8, 14, 21], "where": [6, 8, 12, 14, 21], "whether": 12, "which": [6, 12, 14, 21], "wide": [16, 21], "window": 12, "winston": 14, "within": [12, 16], "without": 21, "word": [6, 14], "work": [16, 21], "workflow": 21, "world": 21, "would": 14, "wrangl": 16, "wrap": 2, "wrapper": [2, 4], "wre": 16, "write": [2, 8, 21], "ws_response_class": 4, "www": [6, 8, 14], "x": 1, "xmlcharrefreplac": 6, "y": [1, 16], "y_": 14, "y_base": 14, "y_pred": 14, "y_true": 14, "yarl": 4, "yield": 14, "yilmaz": 14, "you": [16, 21], "your": 21, "z": 16, "zone": 21}, "titles": ["hydrotools._restclient subpackage", "hydrotools._restclient._iterable_nonstring module", "hydrotools._restclient._restclient module", "hydrotools._restclient._restclient_sigs module", "hydrotools._restclient.async_client module", "hydrotools._restclient.async_helpers module", "hydrotools._restclient.urllib module", "hydrotools._restclient.urllib_types module", "hydrotools._restclient.utilities module", "hydrotools.caches subpackage", "hydrotools.caches.hdf module", "hydrotools.events.event_detection subpackage", "hydrotools.events.event_detection.decomposition module", "hydrotools.metrics subpackage", "hydrotools.metrics.metrics module", "hydrotools.nwis_client subpackage", "hydrotools.nwis_client.iv module", "hydrotools.nwm_client subpackage", "hydrotools.nwm_client.gcp module", "hydrotools.nwm_client.http module", "hydrotools.nwm_client.utils module", "OWPHydroTools"], "titleterms": {"": 21, "_iterable_nonstr": 1, "_restclient": [0, 1, 2, 3, 4, 5, 6, 7, 8], "_restclient_sig": 3, "async_cli": 4, "async_help": 5, "cach": [9, 10], "canon": 21, "cast": 21, "categor": 21, "categori": 21, "client": 16, "column": 21, "content": [0, 9, 11, 13, 15, 17], "data": 21, "decomposit": 12, "detect": 12, "evalu": 14, "event": [11, 12], "event_detect": [11, 12], "format": 21, "function": [12, 14], "gcp": 18, "groupbi": 21, "hdf": 10, "here": 21, "http": 19, "hydrotool": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], "instal": 21, "instantan": 16, "iv": 16, "label": 21, "metric": [13, 14], "modul": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], "motiv": 21, "non": 21, "nwi": 16, "nwis_client": [15, 16], "nwm_client": [17, 18, 19, 20], "observ": 21, "option": 21, "owphydrotool": 21, "remov": 21, "rest": 16, "str": 21, "submodul": [0, 9, 11, 13, 15, 17], "subpackag": [0, 9, 11, 13, 15, 17], "time": 21, "type": 21, "unus": 21, "urllib": 6, "urllib_typ": 7, "us": 21, "usag": 21, "usg": 16, "utc": 21, "util": [8, 20], "valu": 16, "what": 21}}) \ No newline at end of file +Search.setIndex({"alltitles": {"Cast Categorical to str": [[21, "cast-categorical-to-str"]], "Categorical Data Types": [[21, "categorical-data-types"]], "Evaluation Metrics": [[14, "evaluation-metrics"]], "Event Detection :: Decomposition": [[12, "event-detection-decomposition"]], "Functions": [[12, "functions"], [14, "functions"]], "Installation": [[21, "installation"]], "Module contents": [[0, "module-hydrotools._restclient"], [9, "module-contents"], [11, "module-hydrotools.events.event_detection"], [13, "module-hydrotools.metrics"], [15, "module-hydrotools.nwis_client"], [17, "module-hydrotools.nwm_client"]], "Motivation": [[21, "motivation"]], "Non-Canonical Column Labels": [[21, "non-canonical-column-labels"]], "OWPHydroTools": [[21, null]], "OWPHydroTools Canonical Format": [[21, "owphydrotools-canonical-format"]], "Remove unused categories": [[21, "remove-unused-categories"]], "Submodules": [[0, "submodules"], [9, "submodules"], [11, "submodules"], [13, "submodules"], [15, "submodules"], [17, "submodules"]], "USGS NWIS Instantaneous Values REST Client": [[16, "usgs-nwis-instantaneous-values-rest-client"]], "UTC Time": [[21, "utc-time"]], "Usage": [[21, "usage"]], "Use observed option with groupby": [[21, "use-observed-option-with-groupby"]], "What\u2019s here?": [[21, "what-s-here"]], "hydrotools._restclient subpackage": [[0, null]], "hydrotools._restclient._iterable_nonstring module": [[1, null]], "hydrotools._restclient._restclient module": [[2, null]], "hydrotools._restclient._restclient_sigs module": [[3, null]], "hydrotools._restclient.async_client module": [[4, null]], "hydrotools._restclient.async_helpers module": [[5, null]], "hydrotools._restclient.urllib module": [[6, null]], "hydrotools._restclient.urllib_types module": [[7, null]], "hydrotools._restclient.utilities module": [[8, null]], "hydrotools.caches subpackage": [[9, null]], "hydrotools.caches.hdf module": [[10, null]], "hydrotools.events.event_detection subpackage": [[11, null]], "hydrotools.events.event_detection.decomposition module": [[12, null]], "hydrotools.metrics subpackage": [[13, null]], "hydrotools.metrics.metrics module": [[14, null]], "hydrotools.nwis_client subpackage": [[15, null]], "hydrotools.nwis_client.iv module": [[16, null]], "hydrotools.nwm_client subpackage": [[17, null]], "hydrotools.nwm_client.gcp module": [[18, null]], "hydrotools.nwm_client.http module": [[19, null]], "hydrotools.nwm_client.utils module": [[20, null]]}, "docnames": ["hydrotools._restclient", "hydrotools._restclient._iterable_nonstring", "hydrotools._restclient._restclient", "hydrotools._restclient._restclient_sigs", "hydrotools._restclient.async_client", "hydrotools._restclient.async_helpers", "hydrotools._restclient.urllib", "hydrotools._restclient.urllib_types", "hydrotools._restclient.utilities", "hydrotools.caches", "hydrotools.caches.hdf", "hydrotools.events.event_detection", "hydrotools.events.event_detection.decomposition", "hydrotools.metrics", "hydrotools.metrics.metrics", "hydrotools.nwis_client", "hydrotools.nwis_client.iv", "hydrotools.nwm_client", "hydrotools.nwm_client.gcp", "hydrotools.nwm_client.http", "hydrotools.nwm_client.utils", "index"], "envversion": {"sphinx": 62, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2}, "filenames": ["hydrotools._restclient.rst", "hydrotools._restclient._iterable_nonstring.rst", "hydrotools._restclient._restclient.rst", "hydrotools._restclient._restclient_sigs.rst", "hydrotools._restclient.async_client.rst", "hydrotools._restclient.async_helpers.rst", "hydrotools._restclient.urllib.rst", "hydrotools._restclient.urllib_types.rst", "hydrotools._restclient.utilities.rst", "hydrotools.caches.rst", "hydrotools.caches.hdf.rst", "hydrotools.events.event_detection.rst", "hydrotools.events.event_detection.decomposition.rst", "hydrotools.metrics.rst", "hydrotools.metrics.metrics.rst", "hydrotools.nwis_client.rst", "hydrotools.nwis_client.iv.rst", "hydrotools.nwm_client.rst", "hydrotools.nwm_client.gcp.rst", "hydrotools.nwm_client.http.rst", "hydrotools.nwm_client.utils.rst", "index.rst"], "indexentries": {"_abc_impl (hydrotools._restclient._iterable_nonstring.iterablenonstringlike attribute)": [[1, "hydrotools._restclient._iterable_nonstring.IterableNonStringLike._abc_impl", false]], "_abc_impl (hydrotools._restclient.urllib.url attribute)": [[6, "hydrotools._restclient.urllib.Url._abc_impl", false]], "_abc_impl (hydrotools._restclient.urllib.variadic attribute)": [[6, "hydrotools._restclient.urllib.Variadic._abc_impl", false]], "_base_url (hydrotools.nwis_client.iv.ivdataservice attribute)": [[16, "hydrotools.nwis_client.iv.IVDataService._base_url", false]], "_bbox_split() (in module hydrotools.nwis_client.iv)": [[16, "hydrotools.nwis_client.iv._bbox_split", false]], "_build_parse_result() (hydrotools._restclient.urllib.url static method)": [[6, "hydrotools._restclient.urllib.Url._build_parse_result", false]], "_build_parse_result_cast_to_url() (hydrotools._restclient.urllib.url static method)": [[6, "hydrotools._restclient.urllib.Url._build_parse_result_cast_to_url", false]], "_clean_parse_result() (hydrotools._restclient.urllib.url static method)": [[6, "hydrotools._restclient.urllib.Url._clean_parse_result", false]], "_create_empty_canonical_df() (in module hydrotools.nwis_client.iv)": [[16, "hydrotools.nwis_client.iv._create_empty_canonical_df", false]], "_datetime_format (hydrotools.nwis_client.iv.ivdataservice attribute)": [[16, "hydrotools.nwis_client.iv.IVDataService._datetime_format", false]], "_get() (hydrotools._restclient._restclient.restclient method)": [[2, "hydrotools._restclient._restclient.RestClient._get", false]], "_handle_date() (hydrotools.nwis_client.iv.ivdataservice method)": [[16, "hydrotools.nwis_client.iv.IVDataService._handle_date", false]], "_handle_response() (hydrotools.nwis_client.iv.ivdataservice static method)": [[16, "hydrotools.nwis_client.iv.IVDataService._handle_response", false]], "_handle_start_end_period_url_params() (hydrotools.nwis_client.iv.ivdataservice method)": [[16, "hydrotools.nwis_client.iv.IVDataService._handle_start_end_period_url_params", false]], "_headers (hydrotools.nwis_client.iv.ivdataservice attribute)": [[16, "hydrotools.nwis_client.iv.IVDataService._headers", false]], "_mget() (hydrotools._restclient._restclient.restclient method)": [[2, "hydrotools._restclient._restclient.RestClient._mget", false]], "_patch_get() (hydrotools._restclient._restclient.restclient method)": [[2, "hydrotools._restclient._restclient.RestClient._patch_get", false]], "_request() (hydrotools._restclient.async_client.clientsession method)": [[4, "hydrotools._restclient.async_client.ClientSession._request", false]], "_validate_construction() (hydrotools._restclient.urllib.url static method)": [[6, "hydrotools._restclient.urllib.Url._validate_construction", false]], "_validate_period_string() (hydrotools.nwis_client.iv.ivdataservice method)": [[16, "hydrotools.nwis_client.iv.IVDataService._validate_period_string", false]], "_value_time_label (hydrotools.nwis_client.iv.ivdataservice attribute)": [[16, "hydrotools.nwis_client.iv.IVDataService._value_time_label", false]], "_verify_case_insensitive_kwargs_handler() (in module hydrotools.nwis_client.iv)": [[16, "hydrotools.nwis_client.iv._verify_case_insensitive_kwargs_handler", false]], "add() (hydrotools._restclient.urllib.url method)": [[6, "hydrotools._restclient.urllib.Url.add", false]], "alias (class in hydrotools._restclient.utilities)": [[8, "hydrotools._restclient.utilities.Alias", false]], "aliasgroup (class in hydrotools._restclient.utilities)": [[8, "hydrotools._restclient.utilities.AliasGroup", false]], "base_chance() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.base_chance", false]], "base_url (hydrotools._restclient._restclient.restclient property)": [[2, "hydrotools._restclient._restclient.RestClient.base_url", false]], "base_url (hydrotools.nwis_client.iv.ivdataservice property)": [[16, "hydrotools.nwis_client.iv.IVDataService.base_url", false]], "build_url() (hydrotools._restclient._restclient.restclient method)": [[2, "hydrotools._restclient._restclient.RestClient.build_url", false]], "cache_enabled (hydrotools.nwis_client.iv.ivdataservice property)": [[16, "hydrotools.nwis_client.iv.IVDataService.cache_enabled", false]], "clientsession (class in hydrotools._restclient.async_client)": [[4, "hydrotools._restclient.async_client.ClientSession", false]], "close() (hydrotools._restclient._restclient.restclient method)": [[2, "hydrotools._restclient._restclient.RestClient.close", false]], "coefficient_of_extrapolation() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.coefficient_of_extrapolation", false]], "coefficient_of_persistence() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.coefficient_of_persistence", false]], "compute_contingency_table() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.compute_contingency_table", false]], "datetime_format (hydrotools.nwis_client.iv.ivdataservice property)": [[16, "hydrotools.nwis_client.iv.IVDataService.datetime_format", false]], "detrend_streamflow() (in module hydrotools.events.event_detection.decomposition)": [[12, "hydrotools.events.event_detection.decomposition.detrend_streamflow", false]], "encode() (hydrotools._restclient.urllib.variadic method)": [[6, "hydrotools._restclient.urllib.Variadic.encode", false]], "equitable_threat_score() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.equitable_threat_score", false]], "event_boundaries() (in module hydrotools.events.event_detection.decomposition)": [[12, "hydrotools.events.event_detection.decomposition.event_boundaries", false]], "find_local_minimum() (in module hydrotools.events.event_detection.decomposition)": [[12, "hydrotools.events.event_detection.decomposition.find_local_minimum", false]], "frequency_bias() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.frequency_bias", false]], "get() (hydrotools._restclient._restclient.restclient method)": [[2, "hydrotools._restclient._restclient.RestClient.get", false]], "get() (hydrotools._restclient.utilities.alias method)": [[8, "hydrotools._restclient.utilities.Alias.get", false]], "get() (hydrotools._restclient.utilities.aliasgroup method)": [[8, "hydrotools._restclient.utilities.AliasGroup.get", false]], "get() (hydrotools.nwis_client.iv.ivdataservice method)": [[16, "hydrotools.nwis_client.iv.IVDataService.get", false]], "get_raw() (hydrotools.nwis_client.iv.ivdataservice method)": [[16, "hydrotools.nwis_client.iv.IVDataService.get_raw", false]], "headers (hydrotools._restclient._restclient.restclient property)": [[2, "hydrotools._restclient._restclient.RestClient.headers", false]], "headers (hydrotools.nwis_client.iv.ivdataservice property)": [[16, "hydrotools.nwis_client.iv.IVDataService.headers", false]], "hydrotools._restclient": [[0, "module-hydrotools._restclient", false]], "hydrotools._restclient._iterable_nonstring": [[1, "module-hydrotools._restclient._iterable_nonstring", false]], "hydrotools._restclient._restclient": [[2, "module-hydrotools._restclient._restclient", false]], "hydrotools._restclient._restclient_sigs": [[3, "module-hydrotools._restclient._restclient_sigs", false]], "hydrotools._restclient.async_client": [[4, "module-hydrotools._restclient.async_client", false]], "hydrotools._restclient.urllib": [[6, "module-hydrotools._restclient.urllib", false]], "hydrotools._restclient.urllib_types": [[7, "module-hydrotools._restclient.urllib_types", false]], "hydrotools._restclient.utilities": [[8, "module-hydrotools._restclient.utilities", false]], "hydrotools.events.event_detection": [[11, "module-hydrotools.events.event_detection", false]], "hydrotools.events.event_detection.decomposition": [[12, "module-hydrotools.events.event_detection.decomposition", false]], "hydrotools.metrics": [[13, "module-hydrotools.metrics", false]], "hydrotools.metrics.metrics": [[14, "module-hydrotools.metrics.metrics", false]], "hydrotools.nwis_client": [[15, "module-hydrotools.nwis_client", false]], "hydrotools.nwis_client.iv": [[16, "module-hydrotools.nwis_client.iv", false]], "hydrotools.nwm_client": [[17, "module-hydrotools.nwm_client", false]], "iterablenonstringlike (class in hydrotools._restclient._iterable_nonstring)": [[1, "hydrotools._restclient._iterable_nonstring.IterableNonStringLike", false]], "ivdataservice (class in hydrotools.nwis_client.iv)": [[16, "hydrotools.nwis_client.iv.IVDataService", false]], "joinurl() (hydrotools._restclient.urllib.url method)": [[6, "hydrotools._restclient.urllib.Url.joinurl", false]], "keys (hydrotools._restclient.utilities.alias attribute)": [[8, "hydrotools._restclient.utilities.Alias.keys", false]], "keys (hydrotools._restclient.utilities.aliasgroup property)": [[8, "hydrotools._restclient.utilities.AliasGroup.keys", false]], "kling_gupta_efficiency() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.kling_gupta_efficiency", false]], "list_events() (in module hydrotools.events.event_detection.decomposition)": [[12, "hydrotools.events.event_detection.decomposition.list_events", false]], "mark_event_flows() (in module hydrotools.events.event_detection.decomposition)": [[12, "hydrotools.events.event_detection.decomposition.mark_event_flows", false]], "mean_error() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.mean_error", false]], "mean_error_skill_score() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.mean_error_skill_score", false]], "mean_squared_error() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.mean_squared_error", false]], "mget() (hydrotools._restclient._restclient.restclient method)": [[2, "hydrotools._restclient._restclient.RestClient.mget", false]], "module": [[0, "module-hydrotools._restclient", false], [1, "module-hydrotools._restclient._iterable_nonstring", false], [2, "module-hydrotools._restclient._restclient", false], [3, "module-hydrotools._restclient._restclient_sigs", false], [4, "module-hydrotools._restclient.async_client", false], [6, "module-hydrotools._restclient.urllib", false], [7, "module-hydrotools._restclient.urllib_types", false], [8, "module-hydrotools._restclient.utilities", false], [11, "module-hydrotools.events.event_detection", false], [12, "module-hydrotools.events.event_detection.decomposition", false], [13, "module-hydrotools.metrics", false], [14, "module-hydrotools.metrics.metrics", false], [15, "module-hydrotools.nwis_client", false], [16, "module-hydrotools.nwis_client.iv", false], [17, "module-hydrotools.nwm_client", false]], "nash_sutcliffe_efficiency() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.nash_sutcliffe_efficiency", false]], "option_groups (hydrotools._restclient.utilities.aliasgroup property)": [[8, "hydrotools._restclient.utilities.AliasGroup.option_groups", false]], "percent_correct() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.percent_correct", false]], "probability_of_detection() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.probability_of_detection", false]], "probability_of_false_alarm() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.probability_of_false_alarm", false]], "probability_of_false_detection() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.probability_of_false_detection", false]], "quote (class in hydrotools._restclient.urllib_types)": [[7, "hydrotools._restclient.urllib_types.Quote", false]], "quote (hydrotools._restclient.urllib_types.quote attribute)": [[7, "hydrotools._restclient.urllib_types.Quote.QUOTE", false]], "quote() (hydrotools._restclient.urllib_types.quote method)": [[7, "hydrotools._restclient.urllib_types.Quote.quote", false]], "quote_from_bytes (hydrotools._restclient.urllib_types.quote attribute)": [[7, "hydrotools._restclient.urllib_types.Quote.QUOTE_FROM_BYTES", false]], "quote_plus (hydrotools._restclient.urllib_types.quote attribute)": [[7, "hydrotools._restclient.urllib_types.Quote.QUOTE_PLUS", false]], "quote_style (hydrotools._restclient.urllib_types.quote property)": [[7, "hydrotools._restclient.urllib_types.Quote.quote_style", false]], "quote_treatment (hydrotools._restclient.urllib.url property)": [[6, "hydrotools._restclient.urllib.Url.quote_treatment", false]], "quote_url (hydrotools._restclient.urllib.url property)": [[6, "hydrotools._restclient.urllib.Url.quote_url", false]], "restclient (class in hydrotools._restclient._restclient)": [[2, "hydrotools._restclient._restclient.RestClient", false]], "rolling_minimum() (in module hydrotools.events.event_detection.decomposition)": [[12, "hydrotools.events.event_detection.decomposition.rolling_minimum", false]], "root_mean_squared_error() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.root_mean_squared_error", false]], "sequence_scientific_array_like() (in module hydrotools.nwis_client.iv)": [[16, "hydrotools.nwis_client.iv.sequence_scientific_array_like", false]], "simplify_variable_name() (hydrotools.nwis_client.iv.ivdataservice static method)": [[16, "hydrotools.nwis_client.iv.IVDataService.simplify_variable_name", false]], "slots (hydrotools._restclient._iterable_nonstring.iterablenonstringlike attribute)": [[1, "hydrotools._restclient._iterable_nonstring.IterableNonStringLike.slots", false]], "split() (in module hydrotools.nwis_client.iv)": [[16, "hydrotools.nwis_client.iv.split", false]], "threat_score() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.threat_score", false]], "unquote() (hydrotools._restclient.urllib_types.quote method)": [[7, "hydrotools._restclient.urllib_types.Quote.unquote", false]], "unquote_style (hydrotools._restclient.urllib_types.quote property)": [[7, "hydrotools._restclient.urllib_types.Quote.unquote_style", false]], "url (class in hydrotools._restclient.urllib)": [[6, "hydrotools._restclient.urllib.Url", false]], "url (hydrotools._restclient.urllib.url property)": [[6, "hydrotools._restclient.urllib.Url.url", false]], "validate_optional_combinations() (in module hydrotools.nwis_client.iv)": [[16, "hydrotools.nwis_client.iv.validate_optional_combinations", false]], "value (hydrotools._restclient.utilities.alias attribute)": [[8, "hydrotools._restclient.utilities.Alias.value", false]], "value_time_label (hydrotools.nwis_client.iv.ivdataservice property)": [[16, "hydrotools.nwis_client.iv.IVDataService.value_time_label", false]], "values (hydrotools._restclient.utilities.aliasgroup property)": [[8, "hydrotools._restclient.utilities.AliasGroup.values", false]], "variadic (class in hydrotools._restclient.urllib)": [[6, "hydrotools._restclient.urllib.Variadic", false]], "volumetric_efficiency() (in module hydrotools.metrics.metrics)": [[14, "hydrotools.metrics.metrics.volumetric_efficiency", false]]}, "objects": {"hydrotools": [[0, 0, 0, "-", "_restclient"], [13, 0, 0, "-", "metrics"], [15, 0, 0, "-", "nwis_client"], [17, 0, 0, "-", "nwm_client"]], "hydrotools._restclient": [[1, 0, 0, "-", "_iterable_nonstring"], [2, 0, 0, "-", "_restclient"], [3, 0, 0, "-", "_restclient_sigs"], [4, 0, 0, "-", "async_client"], [6, 0, 0, "-", "urllib"], [7, 0, 0, "-", "urllib_types"], [8, 0, 0, "-", "utilities"]], "hydrotools._restclient._iterable_nonstring": [[1, 1, 1, "", "IterableNonStringLike"]], "hydrotools._restclient._iterable_nonstring.IterableNonStringLike": [[1, 2, 1, "", "_abc_impl"], [1, 2, 1, "", "slots"]], "hydrotools._restclient._restclient": [[2, 1, 1, "", "RestClient"]], "hydrotools._restclient._restclient.RestClient": [[2, 3, 1, "", "_get"], [2, 3, 1, "", "_mget"], [2, 3, 1, "", "_patch_get"], [2, 4, 1, "", "base_url"], [2, 3, 1, "", "build_url"], [2, 3, 1, "", "close"], [2, 3, 1, "", "get"], [2, 4, 1, "", "headers"], [2, 3, 1, "", "mget"]], "hydrotools._restclient.async_client": [[4, 1, 1, "", "ClientSession"]], "hydrotools._restclient.async_client.ClientSession": [[4, 3, 1, "", "_request"]], "hydrotools._restclient.urllib": [[6, 1, 1, "", "Url"], [6, 1, 1, "", "Variadic"]], "hydrotools._restclient.urllib.Url": [[6, 2, 1, "", "_abc_impl"], [6, 3, 1, "", "_build_parse_result"], [6, 3, 1, "", "_build_parse_result_cast_to_url"], [6, 3, 1, "", "_clean_parse_result"], [6, 3, 1, "", "_validate_construction"], [6, 3, 1, "", "add"], [6, 3, 1, "", "joinurl"], [6, 4, 1, "", "quote_treatment"], [6, 4, 1, "", "quote_url"], [6, 4, 1, "", "url"]], "hydrotools._restclient.urllib.Variadic": [[6, 2, 1, "", "_abc_impl"], [6, 3, 1, "", "encode"]], "hydrotools._restclient.urllib_types": [[7, 1, 1, "", "Quote"]], "hydrotools._restclient.urllib_types.Quote": [[7, 2, 1, "", "QUOTE"], [7, 2, 1, "", "QUOTE_FROM_BYTES"], [7, 2, 1, "", "QUOTE_PLUS"], [7, 3, 1, "", "quote"], [7, 4, 1, "", "quote_style"], [7, 3, 1, "", "unquote"], [7, 4, 1, "", "unquote_style"]], "hydrotools._restclient.utilities": [[8, 1, 1, "", "Alias"], [8, 1, 1, "", "AliasGroup"]], "hydrotools._restclient.utilities.Alias": [[8, 3, 1, "", "get"], [8, 2, 1, "", "keys"], [8, 2, 1, "", "value"]], "hydrotools._restclient.utilities.AliasGroup": [[8, 3, 1, "", "get"], [8, 4, 1, "", "keys"], [8, 4, 1, "", "option_groups"], [8, 4, 1, "", "values"]], "hydrotools.events": [[11, 0, 0, "-", "event_detection"]], "hydrotools.events.event_detection": [[12, 0, 0, "-", "decomposition"]], "hydrotools.events.event_detection.decomposition": [[12, 5, 1, "", "detrend_streamflow"], [12, 5, 1, "", "event_boundaries"], [12, 5, 1, "", "find_local_minimum"], [12, 5, 1, "", "list_events"], [12, 5, 1, "", "mark_event_flows"], [12, 5, 1, "", "rolling_minimum"]], "hydrotools.metrics": [[14, 0, 0, "-", "metrics"]], "hydrotools.metrics.metrics": [[14, 5, 1, "", "base_chance"], [14, 5, 1, "", "coefficient_of_extrapolation"], [14, 5, 1, "", "coefficient_of_persistence"], [14, 5, 1, "", "compute_contingency_table"], [14, 5, 1, "", "equitable_threat_score"], [14, 5, 1, "", "frequency_bias"], [14, 5, 1, "", "kling_gupta_efficiency"], [14, 5, 1, "", "mean_error"], [14, 5, 1, "", "mean_error_skill_score"], [14, 5, 1, "", "mean_squared_error"], [14, 5, 1, "", "nash_sutcliffe_efficiency"], [14, 5, 1, "", "percent_correct"], [14, 5, 1, "", "probability_of_detection"], [14, 5, 1, "", "probability_of_false_alarm"], [14, 5, 1, "", "probability_of_false_detection"], [14, 5, 1, "", "root_mean_squared_error"], [14, 5, 1, "", "threat_score"], [14, 5, 1, "", "volumetric_efficiency"]], "hydrotools.nwis_client": [[16, 0, 0, "-", "iv"]], "hydrotools.nwis_client.iv": [[16, 1, 1, "", "IVDataService"], [16, 5, 1, "", "_bbox_split"], [16, 5, 1, "", "_create_empty_canonical_df"], [16, 5, 1, "", "_verify_case_insensitive_kwargs_handler"], [16, 5, 1, "", "sequence_scientific_array_like"], [16, 5, 1, "", "split"], [16, 5, 1, "", "validate_optional_combinations"]], "hydrotools.nwis_client.iv.IVDataService": [[16, 2, 1, "", "_base_url"], [16, 2, 1, "", "_datetime_format"], [16, 3, 1, "", "_handle_date"], [16, 3, 1, "", "_handle_response"], [16, 3, 1, "", "_handle_start_end_period_url_params"], [16, 2, 1, "", "_headers"], [16, 3, 1, "", "_validate_period_string"], [16, 2, 1, "", "_value_time_label"], [16, 4, 1, "", "base_url"], [16, 4, 1, "", "cache_enabled"], [16, 4, 1, "", "datetime_format"], [16, 3, 1, "", "get"], [16, 3, 1, "", "get_raw"], [16, 4, 1, "", "headers"], [16, 3, 1, "", "simplify_variable_name"], [16, 4, 1, "", "value_time_label"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "method", "Python method"], "4": ["py", "property", "Python property"], "5": ["py", "function", "Python function"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:method", "4": "py:property", "5": "py:function"}, "terms": {"": [6, 8, 14, 16], "0": [12, 14, 16, 21], "00": 16, "0000": 16, "00060": 16, "003": 14, "01": 16, "01646500": 16, "01t00": 16, "02": 16, "02339495": 16, "02342500": 16, "023432415": 16, "02361000": 16, "02361500": 16, "02362240": 16, "02363000": 16, "02364500": 16, "02369800": 16, "02371500": 16, "0423360405": 2, "05078470": 2, "05078520": 2, "05106000": 2, "05124982": 2, "05125039": 2, "08": 14, "0h": 12, "1": [4, 6, 8, 14, 16, 21], "10": [4, 14], "1016": 14, "1034": 14, "1044": 14, "12": 16, "14": 14, "141": 21, "16": 14, "1970": 14, "1980": 14, "2": [6, 8, 14, 16, 21], "20": [6, 16], "2008": 14, "2009": 14, "2012": 14, "2020": [12, 16], "2021": 16, "22": 14, "237": 14, "27": 6, "2723": 14, "2725": 14, "27arg": 6, "282": 14, "290": 14, "2b": 6, "3": [2, 4, 6, 8, 14, 21], "36": 16, "36107": 16, "36109": 16, "377": 14, "38": 16, "4": [14, 21], "43200": [2, 16], "4326": 21, "451": 14, "5": [14, 16, 21], "5706953": 21, "5706954": 21, "6": [14, 21], "65536": 4, "7": 21, "8": 21, "80": 14, "81": 16, "8190": 4, "83": 16, "8601": 16, "91": 14, "A": [6, 8, 12, 14, 16, 21], "As": 6, "At": 8, "By": 6, "For": 14, "If": [2, 8, 16], "In": [8, 14, 21], "It": [12, 16, 21], "The": [6, 12, 14, 16, 21], "To": [6, 21], "__": 21, "_abc": [1, 6], "_abc_data": [1, 6], "_abc_impl": [0, 1, 6], "_base_url": [15, 16], "_bbox_split": [15, 16], "_build_parse_result": [0, 6], "_build_parse_result_cast_to_url": [0, 6], "_clean_parse_result": [0, 6], "_create_empty_canonical_df": [15, 16], "_datetime_format": [15, 16], "_get": [0, 2], "_handle_d": [15, 16], "_handle_respons": [15, 16], "_handle_start_end_period_url_param": [15, 16], "_header": [15, 16], "_iterable_nonstr": 0, "_mget": [0, 2], "_multidict": 4, "_nestedsequ": 14, "_patch_get": [0, 2], "_request": [0, 4], "_restclient": 21, "_restclient_sig": 0, "_sentinel": 4, "_supportsarrai": 14, "_validate_construct": [0, 6], "_validate_period_str": [15, 16], "_value_time_label": [15, 16], "_verify_case_insensitive_kwargs_handl": [15, 16], "a_r": 14, "a_scal": 14, "abbrevi": 16, "abc": 4, "absolut": 14, "abstract": 14, "abstractcookiejar": 4, "abstracteventloop": [2, 4], "accept": [2, 16, 21], "accord": [14, 21], "account": 14, "accuraci": 14, "activ": [16, 21], "actual": 21, "ad": [16, 21], "add": [0, 4, 6, 16], "addit": 16, "adher": [16, 21], "advanc": 12, "advis": 21, "affect": 21, "aforment": 21, "against": [14, 16], "agreement": 14, "aim": 12, "aiohttp": [2, 4, 16], "al": 16, "alabama": 16, "alarm": 14, "alia": [0, 8], "aliasgroup": [0, 8], "all": [16, 21], "allow": [6, 21], "allow_redirect": [2, 4], "alongsid": 14, "alpha": 14, "also": [6, 8, 14, 16, 21], "altern": [14, 21], "alwai": 14, "among": 21, "an": [6, 8, 12, 14, 16, 21], "analog": 6, "analysi": 14, "ani": [2, 4, 6, 8, 12, 14, 16, 21], "api": [2, 6, 8, 16], "appear": 21, "append": [2, 6], "appli": [12, 14, 21], "applic": [8, 14], "approach": 21, "approxim": 12, "april": 14, "ar": [2, 6, 8, 12, 16, 21], "arg": [4, 6, 7, 8], "arg_map": 16, "argument": [6, 16], "around": [4, 12], "arrai": [14, 16, 21], "arriv": 14, "assembli": 14, "assert": 6, "assess": 14, "assimil": 21, "associ": [12, 16], "assum": [12, 14, 16, 21], "async": [2, 4], "async_cli": 0, "async_help": 0, "asynchron": [2, 16], "asyncio": [2, 4], "attempt": [2, 21], "auth": 4, "author": 14, "auto_decompress": 4, "autom": 12, "automag": 6, "automat": 6, "avail": 21, "avoid": 21, "await": 4, "awar": 21, "b": [6, 14], "b_scale": 14, "backend": [8, 16], "backoff": 2, "backward": 12, "bar": 8, "base": [1, 2, 4, 6, 7, 8, 14, 16, 21], "base_ch": [13, 14], "base_url": [0, 2, 4, 8, 15, 16], "baseconnector": 4, "basecooki": 4, "baseflow": 12, "baseindex": 12, "baselin": 14, "baseurl": 16, "basicauth": 4, "bauwen": 14, "baz": 8, "bbox": 16, "befor": [2, 14], "begin": 21, "behavior": [6, 21], "behind": 2, "below": [8, 21], "beta": 14, "better": 14, "between": 14, "bia": 14, "bin": 21, "bool": [2, 4, 8, 14, 16], "boolean": [12, 14], "both": [8, 14, 21], "bound": 16, "boundari": 12, "box": 16, "bra": 14, "build": 6, "build_url": [0, 2], "built": 21, "byte": [1, 4, 6, 8, 14], "cach": [2, 4, 16, 21], "cache_en": [15, 16], "cache_expire_aft": [2, 16], "cache_filenam": [2, 16], "cachebackend": 4, "cachedrespons": 4, "cachedsess": 4, "call": [6, 14], "callabl": [4, 8], "can": [6, 8, 16, 21], "cannot": 8, "canon": 16, "case": [8, 14, 21], "casrn": 16, "casrn_search": 16, "cat": 21, "categor": 14, "caus": 21, "central": 12, "chanc": 14, "chang": [6, 14, 21], "charact": [6, 16], "chunk": 4, "cimultidict": 4, "cimultidictproxi": 4, "class": [1, 2, 4, 6, 7, 8, 16, 21], "clearest": 8, "client": [2, 4, 15, 21], "client_reqrep": 4, "client_respons": 2, "client_w": 4, "clientrequest": 4, "clientrespons": [2, 4, 16], "clientsess": [0, 2, 4, 6], "clienttimeout": 4, "clientwebsocketrespons": 4, "close": [0, 2], "cloud": 21, "cm": 8, "code": [16, 21], "codec": 6, "coeffici": 14, "coefficient_of_extrapol": [13, 14], "coefficient_of_persist": [13, 14], "coincid": 21, "collect": [8, 16], "column": [12, 16], "combin": [14, 16], "come": 8, "comid": 21, "comma": 16, "common": [14, 21], "commonli": 21, "commun": 21, "compar": [6, 14], "comparison": 6, "compat": [16, 21], "complement": 14, "complex": 14, "compon": [12, 14], "compress": [2, 4, 16], "comput": [14, 21], "compute_contingency_t": [13, 14], "concaten": 6, "conceptu": 14, "concurr": 16, "conda": 21, "condit": 8, "confer": 14, "configur": 21, "conform": 6, "conn_timeout": 4, "connector": 4, "connector_own": 4, "consid": [8, 14, 21], "consider": 21, "consist": 21, "construct": [6, 8, 21], "contain": [14, 21], "conting": 14, "contingency_t": 14, "continu": [12, 14], "conveni": [14, 16], "convent": [6, 21], "convert": 16, "cooki": 4, "cookie_jar": 4, "cool": 8, "coordin": 21, "core": 21, "coro": 2, "correct": [12, 14, 16], "correctli": 14, "correl": 14, "correspond": 8, "could": 21, "counterpart": 21, "counti": 16, "county_queri": 16, "countycd": 16, "cours": 14, "cover": 21, "cr": 21, "creat": [8, 21], "criss": 14, "criteria": 14, "critic": 14, "cross": 21, "csi": 14, "current": [16, 21], "custom": 21, "cut": 8, "dai": 16, "data": [2, 4, 12, 14, 16], "data_structur": 21, "datafram": [12, 14, 16, 21], "datatyp": 16, "date": 16, "dateoffset": 12, "datetim": [12, 16, 21], "datetime64": [16, 21], "datetime_format": [15, 16], "datetimeindex": 12, "decai": 12, "decim": 21, "decomposit": [11, 14], "deepcopi": 8, "deepli": 14, "def": 8, "default": [2, 6, 12, 14, 16, 21], "delai": 12, "delimet": 6, "delimit": 16, "depend": [12, 21], "describ": 12, "descript": 14, "desir": 6, "detail": 16, "detect": [11, 14], "determin": 14, "detrend": 12, "detrend_streamflow": [11, 12], "develop": [8, 21], "deviat": 14, "df": 16, "dict": [2, 6, 14, 16], "dictionari": [6, 8, 16], "differ": [8, 14], "dimension": 14, "directli": 16, "disabl": 2, "disambigu": 21, "discharg": 16, "discret": 12, "discuss": 14, "distanc": 14, "distinguish": 21, "do": [6, 14, 21], "doc": 21, "document": [16, 21], "doe": [6, 14], "doi": 14, "done": 21, "down": 8, "dsintro": 21, "dt": 16, "dtype": [14, 21], "dump": 4, "durat": [12, 16], "e": [6, 14, 16, 21], "each": [2, 6, 12, 14, 21], "easi": [14, 21], "east": 16, "effici": [14, 21], "egu": 14, "either": 6, "elimin": 12, "ellipsi": 6, "els": 8, "emphas": 14, "empti": 16, "en": 21, "enabl": [2, 16], "enable_cach": [2, 16], "encod": [0, 2, 6, 16], "encount": 21, "encourag": 21, "end": [12, 16, 21], "enddt": 16, "enforc": 12, "english": 14, "ensur": 21, "entiti": 8, "entri": 21, "enum": [6, 7], "enumer": 7, "environ": 21, "epsg": 21, "equal": 12, "equit": 14, "equitable_threat_scor": [13, 14], "equival": [6, 8], "erronen": 6, "error": [6, 12, 14], "escap": 6, "estim": 14, "et": 14, "etc": 21, "euclidean": 14, "eumetrain": 14, "evalu": [13, 21], "event": [2, 4, 14, 21], "event_boundari": [11, 12], "event_detect": 21, "event_point": 12, "everi": 2, "ewm": 12, "exactli": 14, "exampl": [1, 2, 6, 8, 14, 16, 21], "except": 16, "exception_messag": 16, "exist": 21, "expect": [16, 21], "expect100": 4, "expert": 21, "expirationtim": 4, "expire_aft": 4, "explicit": 6, "expon": 14, "exponenti": 2, "export": 21, "expos": 2, "extens": 21, "extract": 16, "extrapol": 14, "f": [2, 8, 12, 14], "factor": 14, "factori": 8, "fail": 2, "fallback_charset_resolv": 4, "fals": [1, 4, 12, 14, 16], "false_neg": 14, "false_negative_kei": 14, "false_posit": 14, "false_positive_kei": 14, "farat": 14, "faratio": 14, "fashion": 12, "fbi": 14, "featur": [2, 6, 8, 21], "field": 16, "file": [16, 21], "filenam": [2, 16], "filepath": 16, "filetyp": 2, "filter": 12, "final": 14, "find": 21, "find_local_minimum": [11, 12], "fine": 21, "fingerprint": 4, "first": 16, "fix": 21, "flag": 12, "float": [2, 4, 8, 12, 14, 16], "float32": 21, "flow": 14, "flowlin": 2, "fluctuat": 12, "fmt": 16, "follow": [14, 16, 21], "foo": 8, "foo_alia": 8, "forecast": [14, 21], "form": [6, 16], "format": [6, 16], "formerli": 21, "forward": [6, 12], "frac": 14, "fragment": 6, "frame": 21, "frequenc": [12, 14], "frequency_bia": [13, 14], "frequent": 21, "from": [2, 6, 8, 12, 14, 16, 21], "frozenset": 8, "full": 16, "function": [4, 7, 11, 13], "g": [6, 14, 16, 21], "gage": 21, "gcp": 17, "gener": [12, 14, 21], "geodatafram": 21, "geometri": 21, "geopanda": 21, "geoseri": 21, "geospati": 21, "get": [0, 2, 8, 15, 16, 21], "get_cool_featur": 8, "get_raw": [15, 16], "gi": 16, "given": [2, 8, 14, 21], "go": 21, "good": 14, "googl": 21, "gov": [2, 6, 16], "grab": 21, "greater": 14, "ground": 14, "group": [8, 16], "groupalia": 8, "guarante": 21, "guid": 21, "gupta": 14, "gzip": [2, 16], "h": [14, 16], "ha": 21, "halflif": 12, "handi": 8, "handl": [6, 7, 16], "hashabl": 8, "have": [14, 16, 21], "hdf": [9, 21], "header": [0, 2, 4, 15, 16], "hedg": 14, "height": [16, 21], "help": 16, "helper": 4, "high": 12, "higher": 14, "hit": 14, "how": [12, 21], "howev": [2, 21], "htm": 14, "html": [16, 21], "html_tabl": 16, "http": [2, 6, 14, 16, 17, 21], "http_writer": 4, "httpversion": 4, "huc": 16, "huc_nam": 16, "huccd": 16, "hydrol": 12, "hydrolog": [12, 14, 16, 21], "hydrologi": 14, "hydrometr": 21, "hydrotool": 21, "i": [1, 2, 6, 8, 12, 14, 16, 21], "id": 21, "idiomat": 6, "ignor": 6, "immut": 8, "impart": 12, "implement": 16, "implic": 14, "import": [2, 6, 16], "improv": 14, "inact": 16, "includ": [2, 6, 16, 21], "include_expanded_metadata": 16, "incompat": 21, "incorrectli": 14, "increas": 21, "index": [12, 14], "indic": [12, 14, 21], "indistinguish": 21, "individu": [6, 12, 21], "indiviu": 12, "inf": 14, "info": 21, "inform": 16, "input": 16, "inspect": 12, "instanc": [2, 6, 8], "instantan": [15, 21], "instrument": 12, "int": [2, 4, 8, 12, 14, 16], "int64": 14, "int64index": 21, "integ": [14, 16], "integer32": 21, "intent": 21, "interev": 12, "interfac": 16, "intern": 14, "interpret": 21, "introduc": 16, "invalid": [8, 16], "io": 21, "isinst": 1, "iso": 16, "issu": 21, "istr": 4, "item": 16, "iter": [1, 4, 8, 16], "iterablenonstringlik": [0, 1], "ith": 14, "its": 6, "iv": [15, 21], "ivdataservic": [15, 16], "j": [12, 14], "jhydrol": 14, "job": 21, "join": 6, "join_on": 16, "joinurl": [0, 6], "journal": 14, "json": [2, 4, 6, 8], "json_seri": 4, "just": 21, "k": 14, "kei": [0, 2, 6, 8, 14, 16], "keyerror": 16, "keyword": 6, "kge": 14, "kitanidi": 14, "kling": 14, "kling_gupta_effici": [13, 14], "kwarg": [2, 4, 6, 7], "l": [12, 14], "lab": 2, "label": [14, 16], "labl": 21, "lag": 14, "lambda": 4, "larg": 14, "last": 14, "lat": 16, "latest": [16, 21], "latitud": [16, 21], "lead": 21, "left": 14, "length": [14, 16], "less": [12, 14], "lexicon": 21, "librari": [2, 8], "life": [2, 16], "lighter": 21, "like": [8, 14, 21], "likewis": 6, "limit": 21, "line": 21, "linear": 14, "lingo": 21, "link": 2, "list": [1, 2, 4, 6, 8, 16, 21], "list_ev": [11, 12], "liter": 6, "load": 21, "local": 12, "locat": 21, "log": 14, "logarithm": 14, "logic": 8, "lon": 16, "longitud": [16, 21], "look": 12, "loop": [2, 4], "lower": [14, 16], "m": [8, 16, 21], "made": 2, "mai": [12, 14, 21], "major": 21, "make": [2, 21], "malform": 16, "manag": 21, "mani": 8, "map": [4, 6, 8], "mark": 12, "mark_event_flow": [11, 12], "martinez": 14, "match": [2, 14], "max": 12, "max_field_s": 4, "max_line_s": 4, "max_redirect": 4, "max_sites_per_request": 16, "mb": 21, "md": 21, "me": 14, "mean": [2, 6, 8, 12, 14, 21], "mean_error": [13, 14], "mean_error_skill_scor": [13, 14], "mean_flow": 21, "mean_squared_error": [13, 14], "meaning": 21, "measur": [14, 21], "measurement_unit": [16, 21], "median": 12, "medium_rang": 21, "member": 6, "memori": 21, "mess": 14, "messag": 21, "method": [2, 4, 6, 7, 12, 14, 21], "metric": 21, "mget": [0, 2], "min": 12, "mind": 21, "minimum": 12, "minimum_event_dur": 12, "mirror": 6, "model": [12, 14, 21], "modul": 21, "monkeypatch": 2, "more": [6, 14, 16], "morsel": 4, "most": 21, "move": 12, "msgcr": 14, "much": 12, "multidict": 4, "multipl": [2, 16, 21], "must": 21, "mutat": 8, "my_datafram": 21, "n": [2, 14, 21], "n_retri": [2, 4], "n_sampl": 14, "naiv": 21, "name": [6, 16, 21], "nash": 14, "nash_sutcliffe_effici": [13, 14], "nation": 21, "natur": 14, "navig": 2, "ndarrai": 16, "neg": 14, "nest": 16, "netloc": 6, "new": [6, 12], "nldi": 2, "noaa": 21, "nois": 12, "nomad": 21, "non": [6, 14, 16], "none": [2, 4, 6, 8, 16, 21], "normal": [12, 14], "north": 16, "nossent": 14, "notch": 12, "note": [6, 14, 21], "np": 16, "nse": 14, "number": [12, 14], "numpi": [12, 14, 16, 21], "nw": 21, "nwi": [15, 21], "nwis_client": 21, "nwisiv_cach": 16, "nwissit": 2, "nwm": 21, "nwm_client": 21, "nwm_feature_id": 21, "nws_lid": 21, "o": [6, 14], "o2": 6, "ob": 14, "object": [1, 2, 4, 6, 8, 16, 21], "observ": [14, 16], "occur": 14, "occurr": 14, "offset": 12, "often": [8, 21], "ogden": 12, "one": [8, 12], "onli": [8, 16], "oper": [6, 21], "oppor": [6, 8], "option": [6, 12, 14, 16], "option_group": [0, 8], "org": [8, 14, 21], "organ": 21, "organiz": 21, "origin": 12, "other": [6, 14, 21], "our": 21, "out": 16, "output": [14, 16], "over": [2, 12, 14, 16], "owp": 21, "p": 14, "p1dg": 16, "p5d": 16, "packag": 21, "pag": 14, "painless": 21, "pair": [6, 14], "panda": [12, 14, 16, 21], "param": [4, 6, 16], "param_group": 16, "paramet": [2, 6, 8, 12, 14, 16], "parameter_group_nm": 16, "parameter_nm": 16, "parameter_unit": 16, "parametercd": 16, "pars": 6, "parseresult": 6, "part": [12, 14, 21], "partial": 14, "particular": 21, "pass": [2, 6, 8, 16], "past": 16, "path": [6, 8, 16], "path_1": 8, "path_2": 8, "path_group": 8, "pathlib": 6, "pattern": 8, "pc": 14, "pd": [12, 16], "percent": 14, "percent_correct": [13, 14], "perfect": 14, "perform": [14, 21], "period": 16, "persist": 14, "person": 21, "phase": 12, "pip": 21, "pipenv": 21, "platform": 21, "plu": 6, "pm_group": 16, "pm_search": 16, "pmcode": 16, "pod": 14, "pofa": 14, "pofd": 14, "point": [12, 16], "portion": 14, "posit": [12, 14], "possibl": [6, 16, 21], "post": 14, "power": 14, "practition": 21, "preced": 2, "predict": 14, "predictor": 14, "prefer": 21, "present": [2, 8, 16, 21], "previou": 14, "primit": [2, 6, 21], "principl": 14, "print": [2, 6, 21], "probability_of_detect": [13, 14], "probability_of_false_alarm": [13, 14], "probability_of_false_detect": [13, 14], "probabl": 14, "proc": 12, "process": 14, "produc": 12, "programat": 16, "properti": [2, 6, 7, 8, 16], "propos": 14, "protect": 21, "provid": [2, 6, 8, 16, 21], "proxi": 4, "proxy_auth": 4, "proxy_head": 4, "pydata": 21, "python": 21, "python3": 21, "qualifi": 21, "quantiti": 21, "queri": [2, 6], "quot": [0, 6, 7], "quote_from_byt": [0, 6, 7], "quote_overide_map": 6, "quote_plu": [0, 6, 7], "quote_styl": [0, 7], "quote_treat": [0, 6], "quote_url": [0, 6], "quotestyl": 7, "r": 14, "r_scale": 14, "radio_pm_search": 16, "radiu": 12, "rais": [6, 16], "raise_for_statu": 4, "random": 12, "rang": [14, 16], "rare": 14, "rate": 14, "ratio": 14, "raw": 16, "raw_respons": 16, "re": [6, 14], "reach": 21, "read_bufs": 4, "read_timeout": 4, "read_until_eof": 4, "readabl": 6, "readm": 21, "readthedoc": 21, "real": [14, 21], "recent": 14, "recommend": [6, 8], "record": 16, "redefin": 21, "reduc": 12, "refer": [8, 14, 21], "reference_tim": 21, "refresh": 4, "regex": 16, "regina": 12, "regist": 6, "register_error": 6, "regress": 14, "rel": 14, "relationship": 8, "releas": 2, "relev": 16, "remap": 6, "remov": [6, 12], "remove_unused_categori": 21, "replac": [2, 6], "repositori": 21, "repres": 6, "represent": [6, 16], "reproduc": 21, "request": [2, 8, 16, 21], "request_class": 4, "requir": [12, 14, 21], "requote_redirect_url": 4, "research": 14, "residu": 12, "resolv": 21, "resourc": 14, "resp": 2, "respect": 6, "respons": [8, 16], "response_class": 4, "rest": [2, 8, 15, 21], "restclient": [0, 2, 6], "result": [8, 14, 16], "retain": 6, "retri": [2, 4], "retriev": [2, 16, 21], "return": [2, 6, 8, 12, 14, 16, 21], "review": 12, "right": 14, "river": 14, "roll": 12, "rolling_minimum": [11, 12], "root": 14, "root_mean_squared_error": [13, 14], "row": 12, "run": 21, "run_until_complet": 2, "safe": 6, "sake": 6, "scalar": 8, "scale": 14, "scene": 2, "scheme": 6, "scientif": 21, "scientist": 21, "score": 14, "script": 2, "search": 12, "second": [2, 16], "see": [2, 6, 14, 16, 21], "semi": 16, "sensibl": 21, "sensit": 14, "sentinel": [4, 16], "separ": 16, "seper": [6, 16], "sequenc": 4, "sequence_scientific_array_lik": [15, 16], "seri": [12, 14, 16, 21], "serial": 2, "server_hostnam": 4, "servic": [16, 21], "sessioncli": 4, "set": [2, 6, 8, 12, 14, 16], "shape": 14, "share": 21, "shift": 12, "short_rang": 21, "should": [12, 14, 21], "show": 16, "shown": 8, "si": 21, "signal": 12, "sim": 14, "similar": 14, "simpl": 2, "simplest": 21, "simplifi": [2, 16], "simplify_variable_nam": [15, 16], "simul": [14, 21], "singl": [6, 8, 16, 21], "site": [2, 6, 16, 21], "site_url": 2, "sitenam": 16, "sitestatu": 16, "size": 12, "skill": 14, "skip_auto_head": 4, "slash": 6, "slot": [0, 1], "smooth": 12, "so": [8, 21], "sobol": 14, "solut": 21, "some": [6, 8, 14, 21], "sourc": 21, "south": 16, "space": [6, 14], "special": 21, "specif": 21, "specifi": [6, 12, 16], "split": [15, 16], "split_delimit": 16, "split_threshold": 16, "sqlite": [2, 16], "sqlite3": 16, "squar": 14, "sr": 16, "srsname": 16, "srsname_search": 16, "ssl": 4, "ssl_context": 4, "stabl": 21, "stage": [12, 16], "standard": [16, 21], "start": [12, 16, 21], "start_dat": 21, "start_radiu": 12, "startdt": 16, "state": 16, "statecd": 16, "statement": 8, "static": [6, 16], "statist": 14, "statu": 16, "still": 14, "store": 8, "str": [1, 2, 4, 6, 8, 12, 14, 16], "str_or_url": 4, "streamflow": [12, 21], "strftime": 16, "strict": 6, "string": [1, 6, 16, 21], "structur": 21, "subclass": [1, 12], "subpackag": 21, "success": 14, "suffix": [2, 16], "suitabl": 14, "sum": 14, "sum_": 14, "summari": 14, "summat": 14, "support": [6, 8, 21], "sutcliff": 14, "system": 21, "systemat": 12, "t": [14, 16], "tabl": [14, 21], "take": 12, "taken": 21, "target": 14, "temperatur": 21, "tend": 14, "tendenc": 14, "term": 12, "territori": 16, "test": [1, 6], "text": 2, "than": [12, 14], "thei": 21, "thi": [6, 8, 12, 14, 16, 21], "threat": 14, "threat_scor": [13, 14], "through": [8, 14], "thrown": 8, "time": [2, 6, 12, 14, 16], "timedelta": 12, "timedelta64": 12, "timeout": 4, "timeseri": 12, "timestamp": [12, 16, 21], "timezon": [16, 21], "timseri": 12, "to_datetim": 16, "toggl": 16, "too": 16, "tool": 21, "toolbox": 21, "total": [14, 21], "trace": 4, "trace_config": 4, "trace_request_ctx": 4, "traceconfig": 4, "trail": 6, "transform": [16, 21], "treat": [6, 8], "treatment": 6, "trend": [12, 14], "true": [1, 2, 4, 6, 8, 12, 14, 16, 21], "true_neg": 14, "true_negative_kei": 14, "true_posit": 14, "true_positive_kei": 14, "trust_env": 4, "truth": 14, "try": 16, "tupl": [4, 6, 8, 16], "twice": 12, "two": [12, 14, 16], "type": [1, 2, 4, 6, 8, 12, 14, 16], "typeerror": 16, "typic": 21, "u": 16, "under": [12, 14], "unexpect": 21, "unicodeencodeerror": 6, "union": [2, 6, 8, 16], "unit": [16, 21], "unless": 6, "unquot": [0, 6, 7], "unquote_plu": [6, 7], "unquote_styl": [0, 7], "unquote_to_byt": 7, "unquote_treat": 6, "until": 16, "up": 16, "upgrad": 21, "upon": [12, 21], "url": [0, 2, 4, 6, 8], "urllib": 0, "urllib_typ": [0, 6], "us": [1, 2, 6, 8, 12, 14, 16], "usa": 16, "usac": 21, "usace_gage_id": 21, "usag": 2, "user_guid": 21, "userstr": 6, "usg": [2, 15, 21], "usgs_site_cod": [16, 21], "ut": 2, "utc": 16, "util": [0, 17, 21], "v": [12, 14], "v_0": 6, "v_1": 6, "valid": [8, 16, 21], "valid_arg_kei": 16, "validate_optional_combin": [15, 16], "valu": [0, 6, 7, 8, 12, 14, 15, 21], "value2": 6, "value_d": 21, "value_tim": [16, 21], "value_time_label": [15, 16], "valueerror": 8, "variabl": [14, 16], "variable_nam": [16, 21], "variablenam": 16, "variad": [0, 6], "varianc": 14, "varieti": [8, 21], "variou": 21, "ve": 21, "venv": 21, "verify_ssl": 4, "version": 4, "via": 6, "virtual": 21, "volumetr": 14, "volumetric_effici": [13, 14], "w": 14, "wai": 16, "water": [14, 16, 21], "waterdata": [2, 16], "waterservic": 16, "we": 21, "weather": 2, "web": 21, "weir": 12, "well": 6, "were": 14, "west": 16, "wgs84": 21, "when": [6, 8, 14, 21], "where": [6, 8, 12, 14, 21], "whether": 12, "which": [6, 12, 14, 21], "wide": [16, 21], "window": 12, "winston": 14, "within": [12, 16], "without": 21, "word": [6, 14], "work": [16, 21], "workflow": 21, "world": 21, "would": 14, "wrangl": 16, "wrap": 2, "wrapper": [2, 4], "wre": 16, "write": [2, 8, 21], "ws_response_class": 4, "www": [6, 8, 14], "x": 1, "xmlcharrefreplac": 6, "y": [1, 16], "y_": 14, "y_base": 14, "y_pred": 14, "y_true": 14, "yarl": 4, "yield": 14, "yilmaz": 14, "you": [16, 21], "your": 21, "z": 16, "zone": 21}, "titles": ["hydrotools._restclient subpackage", "hydrotools._restclient._iterable_nonstring module", "hydrotools._restclient._restclient module", "hydrotools._restclient._restclient_sigs module", "hydrotools._restclient.async_client module", "hydrotools._restclient.async_helpers module", "hydrotools._restclient.urllib module", "hydrotools._restclient.urllib_types module", "hydrotools._restclient.utilities module", "hydrotools.caches subpackage", "hydrotools.caches.hdf module", "hydrotools.events.event_detection subpackage", "hydrotools.events.event_detection.decomposition module", "hydrotools.metrics subpackage", "hydrotools.metrics.metrics module", "hydrotools.nwis_client subpackage", "hydrotools.nwis_client.iv module", "hydrotools.nwm_client subpackage", "hydrotools.nwm_client.gcp module", "hydrotools.nwm_client.http module", "hydrotools.nwm_client.utils module", "OWPHydroTools"], "titleterms": {"": 21, "_iterable_nonstr": 1, "_restclient": [0, 1, 2, 3, 4, 5, 6, 7, 8], "_restclient_sig": 3, "async_cli": 4, "async_help": 5, "cach": [9, 10], "canon": 21, "cast": 21, "categor": 21, "categori": 21, "client": 16, "column": 21, "content": [0, 9, 11, 13, 15, 17], "data": 21, "decomposit": 12, "detect": 12, "evalu": 14, "event": [11, 12], "event_detect": [11, 12], "format": 21, "function": [12, 14], "gcp": 18, "groupbi": 21, "hdf": 10, "here": 21, "http": 19, "hydrotool": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], "instal": 21, "instantan": 16, "iv": 16, "label": 21, "metric": [13, 14], "modul": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], "motiv": 21, "non": 21, "nwi": 16, "nwis_client": [15, 16], "nwm_client": [17, 18, 19, 20], "observ": 21, "option": 21, "owphydrotool": 21, "remov": 21, "rest": 16, "str": 21, "submodul": [0, 9, 11, 13, 15, 17], "subpackag": [0, 9, 11, 13, 15, 17], "time": 21, "type": 21, "unus": 21, "urllib": 6, "urllib_typ": 7, "us": 21, "usag": 21, "usg": 16, "utc": 21, "util": [8, 20], "valu": 16, "what": 21}}) \ No newline at end of file