#!/usr/bin/python3
# -*- coding: utf-8 -*-
########################################################################
#
# This file is part of python module <pyspc>.
# Copyright (C) 2013-2021 R. Marty
# (renaud.marty@developpement-durable.gouv.fr)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program (see COPYING.txt).
# If not, see <http://www.gnu.org/licenses/>.
#
########################################################################
"""
Modélisations hydrologiques - GRP version 2022 - Pas de temps
"""
from datetime import timedelta as td
import re
import pyspc.core.exception as _exception
RE_JHM = re.compile(r'^\d{2}J\d{2}H\d{2}M$')
[docs]
def str2td(tstep=None):
"""
Définir le pas de temps à partir de la chaine de caractères 'jjJhhHmmM'
Parameters
----------
tstep : str
'jjJhhHmmM'
Returns
-------
tdelta : timedelta
pas de temps
"""
# Renvoi None si tstep est None
if tstep is None:
return None
# Contrôle de la chaine de caractères
_exception.check_str(tstep)
_exception.raise_valueerror(
not RE_JHM.search(tstep),
f"La chaine de caractère '{tstep}' est incorrecte")
# Découpage de la chaine de caractères
d = int(tstep[0:2])
h = int(tstep[3:5])
m = int(tstep[6:8])
t = td(days=d, hours=h, minutes=m)
# Contrôle du pas de temps
_exception.raise_valueerror(
t == td(0),
f"La chaine de caractère '{tstep}' correspond à un pas de temps nul. "
"Veuillez utiliser None")
return t
[docs]
def td2str(tdelta=None):
"""
Définir le pas de temps en une chaine de caractères 'jjJhhHmmM'
Parameters
----------
tdelta : timedelta
pas de temps
Returns
-------
tstep : str
'jjJhhHmmM'
"""
# Renvoi None si tdelta est None
if tdelta is None:
return None
# Contrôle du pas de temps
_exception.check_td(tdelta)
_exception.raise_valueerror(
tdelta == td(0),
f"Le pas de temps '{tdelta}' correspond à un pas de temps nul. "
"Veuillez utiliser None")
# Conversion en str
tstep = f'{tdelta.days:02d}J'\
f'{int(tdelta.seconds / 3600):02d}H'\
f'{int((tdelta.seconds / 60) % 60):02d}M'
return tstep