import numpy as np
import warnings
from typing import List, Union, Optional
from iode import (IodeTypes, comments, equations, identities, lists, scalars, tables, variables,
Equation, Scalar)
from .workspace import ws_content
[docs]
def delete_objects(pattern: str = '*', obj_type: int = IodeTypes.VARIABLES):
names = ws_content(pattern, obj_type)
for name in names:
delete_obj(name, obj_type)
# delete_<obj_type> functions
# ---------------------------
[docs]
def delete_obj(obj_name: str, obj_type: int):
if obj_type == IodeTypes.COMMENTS:
delete_cmt(obj_name, obj_type)
elif obj_type == IodeTypes.EQUATIONS:
delete_eqs(obj_name, obj_type)
elif obj_type == IodeTypes.IDENTITIES:
delete_idt(obj_name, obj_type)
elif obj_type == IodeTypes.LISTS:
delete_lst(obj_name, obj_type)
elif obj_type == IodeTypes.SCALARS:
delete_scl(obj_name, obj_type)
elif obj_type == IodeTypes.TABLES:
delete_tbl(obj_name, obj_type)
elif obj_type == IodeTypes.VARIABLES:
delete_var(obj_name, obj_type)
else:
raise ValueError(f"IODE type {obj_type} is invalid")
[docs]
def delete_cmt(name: str):
warnings.warn("delete_cmt() is deprecated. " +
"Please use the new syntax: del comments[name]",DeprecationWarning, stacklevel=2)
del comments[name]
[docs]
def delete_eqs(name: str):
warnings.warn("delete_eqs() is deprecated. " +
"Please use the new syntax: del equations[name]",DeprecationWarning, stacklevel=2)
del equations[name]
[docs]
def delete_idt(name: str):
warnings.warn("delete_idt() is deprecated. " +
"Please use the new syntax: del identities[name]",DeprecationWarning, stacklevel=2)
del identities[name]
[docs]
def delete_lst(name: str):
warnings.warn("delete_lst() is deprecated. " +
"Please use the new syntax: del lists[name]",DeprecationWarning, stacklevel=2)
del lists[name]
[docs]
def delete_scl(name: str):
warnings.warn("delete_lst() is deprecated. " +
"Please use the new syntax: del scalars[name]",DeprecationWarning, stacklevel=2)
del scalars[name]
[docs]
def delete_tbl(name: str):
warnings.warn("delete_tbl() is deprecated. " +
"Please use the new syntax: del tables[name]",DeprecationWarning, stacklevel=2)
del tables[name]
[docs]
def delete_var(name: str):
warnings.warn("delete_var() is deprecated. " +
"Please use the new syntax: del variables[name]",DeprecationWarning, stacklevel=2)
del variables[name]
# Set and Get IODE objects
# ------------------------
# Comments
# --------
[docs]
def get_cmt(name: str) -> str:
warnings.warn("get_cmt() is deprecated. " +
"Please use the new syntax:\ncomments[name]",DeprecationWarning, stacklevel=2)
return comments[name]
[docs]
def set_cmt(name: str, cmt: str):
warnings.warn("set_cmt() is deprecated. " +
"Please use the new syntax:\ncomments[name] = value",DeprecationWarning, stacklevel=2)
comments[name] = cmt
# Equations
# ---------
[docs]
def get_eqs_lec(eq_name: str) -> str:
warnings.warn("get_eqs_lec() is deprecated. " +
"Please use the new syntax: equations[name].lec",DeprecationWarning, stacklevel=2)
return equations[eq_name].lec
[docs]
def get_eqs(eq_name: str) -> Equation:
warnings.warn("get_eqs() is deprecated. " +
"Please use the new syntax: equations[name]",DeprecationWarning, stacklevel=2)
return equations[eq_name]
[docs]
def set_eqs(eq_name: str, lec: str):
warnings.warn("set_eqs() is deprecated. " +
"Please use the new syntax: equations[name] = lec",DeprecationWarning, stacklevel=2)
equations[eq_name] = lec
# Identities
# ----------
[docs]
def get_idt(name: str) -> str:
'''Return the LEC formula of an IODE identity '''
warnings.warn("get_idt() is deprecated. " +
"Please use the new syntax: identities[name]",DeprecationWarning, stacklevel=2)
return identities[name]
[docs]
def set_idt(name: str, idt: str):
'''Update or create an identity'''
warnings.warn("set_idt() is deprecated. " +
"Please use the new syntax: identities[name] = value",DeprecationWarning, stacklevel=2)
identities[name] = idt
# Lists
# -----
[docs]
def get_lst(name: str) -> str:
'''Return a list as a string'''
warnings.warn("get_lst() is deprecated. " +
"Please use the new syntax: lists[name]",DeprecationWarning, stacklevel=2)
return lists[name]
[docs]
def set_lst(name: str, lst: str):
'''Update or create a list from a string'''
warnings.warn("set_lst() is deprecated. " +
"Please use the new syntax: lists[name] = value",DeprecationWarning, stacklevel=2)
lists[name] = lst
# Scalars
# -------
[docs]
def get_scl(name: str) -> Scalar:
'''Get an IODE scalar in an iode.Scalar class instance'''
warnings.warn("get_scl() is deprecated. " +
"Please use the new syntax: scalars[name]",DeprecationWarning, stacklevel=2)
return scalars[name]
[docs]
def set_scl(name: str, scalar: Scalar):
'''Create or update an IODE scalar from an iode.Scalar class instance'''
warnings.warn("set_scl() is deprecated. " +
"Please use the new syntax: scalars[name] = value",DeprecationWarning, stacklevel=2)
scalars[name] = scalar
# Variables
# ---------
[docs]
def get_var(varname: str) -> List[float]:
warnings.warn("get_var() is deprecated. " +
"Please use the new syntax: variables[name]",DeprecationWarning, stacklevel=2)
return variables[varname]
# Copy (or refer to) an IODE var into a ndarray
[docs]
def get_var_as_ndarray(varname: str, copy: bool = True) -> np.ndarray:
warnings.warn("get_var_as_ndarray() is deprecated. " +
"Please use the new syntax: np.asarray(variables[name])",DeprecationWarning, stacklevel=2)
return np.asarray(variables[varname])
# Copy a ndarray or a list into KV_WS
[docs]
def set_var(varname: str, py_values):
warnings.warn("set_var() is deprecated. " +
"Please use the new syntax: variables[name] = values",DeprecationWarning, stacklevel=2)
variables[varname] = py_values
[docs]
def data_update(obj_name: str, obj_value: str, obj_type: int):
if obj_type == IodeTypes.COMMENTS:
data_update_cmt(obj_name, obj_value)
elif obj_type == IodeTypes.EQUATIONS:
data_update_eqs(obj_name, obj_value)
elif obj_type == IodeTypes.IDENTITIES:
data_update_idt(obj_name, obj_value)
elif obj_type == IodeTypes.LISTS:
data_update_lst(obj_name, obj_value)
elif obj_type == IodeTypes.SCALARS:
data_update_scl(obj_name, obj_value)
elif obj_type == IodeTypes.TABLES:
raise NotImplementedError("Please use the syntax: tables[name] = table")
elif obj_type == IodeTypes.VARIABLES:
data_update_var(obj_name, obj_value)
else:
raise ValueError(f"IODE type {obj_type} is invalid")
# Data update
# -----------
[docs]
def data_update_cmt(obj_name: str, obj_value: str):
warnings.warn("data_update_cmt() is deprecated. " +
"Please use the new syntax:\ncomments[name] = value",DeprecationWarning, stacklevel=2)
comments[obj_name] = obj_value
[docs]
def data_update_eqs(obj_name: str, obj_value: str):
warnings.warn("data_update_eqs() is deprecated. " +
"Please use the new syntax: equations[name] = new_lec",DeprecationWarning, stacklevel=2)
equations[obj_name] = obj_value
[docs]
def data_update_idt(obj_name: str, obj_value: str):
warnings.warn("data_update_idt() is deprecated. " +
"Please use the new syntax: identities[name] = value",DeprecationWarning, stacklevel=2)
identities[obj_name] = obj_value
[docs]
def data_update_lst(obj_name: str, obj_value: str):
warnings.warn("data_update_lst() is deprecated. " +
"Please use the new syntax: lists[name] = value",DeprecationWarning, stacklevel=2)
lists[obj_name] = obj_value
[docs]
def data_update_scl(obj_name: str, value: float = None, relax: float = None, stderr: float = None):
warnings.warn("data_update_scl() is deprecated. " +
"Please use the new syntax: scalars[name] = value, relax",DeprecationWarning, stacklevel=2)
scalars[obj_name] = value, relax
[docs]
def data_update_var(varname: str, values, operation: str = "L", per_from: str = None):
warnings.warn("data_update_var() is deprecated. " +
"Please use the new syntax: variables[name, period] = value\n" +
"variables[name, period_start:period_end] = [vector, of , values]",DeprecationWarning, stacklevel=2)
variables[varname, per_from:] = values
# Miscellaneous
# -------------
[docs]
def idt_execute(sample: Optional[Union[str, List[str]]] = None,
idt_list: Optional[Union[str, List[str]]] = None,
var_files: Optional[Union[str, List[str]]] = None,
scl_files: Optional[Union[str, List[str]]] = None,
trace: bool = False):
r'''
Execute a list of identities
Parameters
----------
sample: Optional[Union[str, List[str]]] = None
range of period on which the identities must be calculated
if sample is None or empty, the WS sample is used
idt_list: Optional[Union[str, List[str]]] = None
list of identities to execute
if empty, all identities are executed
var_files: Optional[Union[str, List[str]]] = None
list of files the needed variables must be read from. "WS" means current current Variable WS.
if empty, only the current KV_WS is used
scl_files: Optional[Union[str, List[str]]] = None
list of files the needed scalars must be read from. "WS" means current current WS.
if empty, only the current workspace is used
trace: bool = False
optional trace indicating the source of the variables and scalars. For example:
Execution of identities
Parameters
Execution sample : 1960Y1:2015Y1
Variables loaded
From WS : AOUC AOUC_ COTRES DEBT DTF DTH EFMY EFXY EX FLG FLGR GAP2 GAP_ GOSF HF
Scalars loaded
From ../data/fun : gamma gamma2 gamma3 gamma4 knf3
'''
warnings.warn("idt_execute() is deprecated. " +
"Please use the new syntax: identities.execute(identities, from_period, " +
"to_period, var_files, scalar_files, trace)",DeprecationWarning, stacklevel=2)
from_period, to_period = sample.split(';')
identities.execute(idt_list, from_period, to_period, var_files, scl_files, trace)