Skip to content

Commit

Permalink
remove dump menyanthes method (#471)
Browse files Browse the repository at this point in the history
  • Loading branch information
raoulcollenteur committed Jan 19, 2023
1 parent 043c31b commit bf1da48
Showing 1 changed file with 9 additions and 222 deletions.
231 changes: 9 additions & 222 deletions pastas/io/men.py
Original file line number Diff line number Diff line change
@@ -1,228 +1,15 @@
"""This file contains the export method for men-files.
Export a .men file
R.C. Caljé - march 2018
"""This module is deprecated.
"""

from os import path

from numpy import NaN, array, vstack, zeros
from pandas import Timestamp
from scipy.io import loadmat, savemat

from ..utils import datetime2matlab


def load(fname: str) -> NotImplementedError:
raise NotImplementedError(
"This is not implemented yet. See the " "reads-section for a Menyanthes-read"
)


def dump(fname: str, data: dict, version: int = 3, verbose: bool = True) -> None:
# version can also be a specific version,
# like '2.x.g.t (beta)', or an integer (see below)
if version == 3:
version = "3.x.b.c (gamma)"
elif version == 2:
version = "2.x.g.t (beta)"
# load an empty menyanthes file
io_dir, _ = path.split(__file__)
base_fname = path.join(io_dir, "men", version + ".men")

if not path.exists(base_fname):
msg = "No Menyanthes file found for version {}".format(version)
raise Exception(msg)

men = loadmat(base_fname, matlab_compatible=True)

# add the oseries
dtypeH = men["H"].dtype
fields = dtypeH.fields.keys()
Hdict = {}
for field in fields:
if field == "ID":
Hdict[field] = men["ID"]["H"][0][0][0][0]
men["ID"]["H"] += 1
elif field == "Name":
Hdict[field] = data["oseries"]["name"]
elif field in ["NITGCode", "OLGACode", "NITGnr", "OLGAnr"]:
Hdict[field] = "<no data> (1)"
elif field == "Type":
Hdict[field] = "Head"
elif field in ["Project", "layercode", "LoggerSerial", "area", "datlog_serial"]:
Hdict[field] = ""
elif field == "values":
date = array([datetime2matlab(x) for x in data["oseries"]["series"].index])
vals = data["oseries"]["series"].values
Hdict[field] = [vstack((date, vals)).transpose()]
elif field == "filtnr":
Hdict[field] = 1
elif field in ["handmeas", "aerialphoto", "BWImage", "photo"]:
Hdict[field] = [zeros(shape=(0, 0))]
elif field in [
"LastTUFExport",
"surflev",
"measpointlev",
"upfiltlev",
"lowfiltlev",
"sedsumplength",
"LoggerDepth",
"tranche",
"datlog_depth",
]:
Hdict[field] = NaN
elif field == "xcoord":
if "x" in data["oseries"]["metadata"]:
Hdict[field] = data["oseries"]["metadata"]["x"]
else:
Hdict[field] = NaN
elif field == "ycoord":
if "y" in data["oseries"]["metadata"]:
Hdict[field] = data["oseries"]["metadata"]["y"]
else:
Hdict[field] = NaN
elif field == "date":
Hdict[field] = datetime2matlab(Timestamp.now())
elif field == "comment":
# Hdict[field] = [np.array(['',''])]
obj_arr = zeros((2,), dtype=object)
obj_arr[0] = ""
obj_arr[1] = ""
Hdict[field] = [obj_arr]
elif field in [
"LoggerBrand",
"LoggerType",
"VegTypo",
"VegType",
"Organization",
]:
Hdict[field] = "Unknown"
elif field == "Status":
Hdict[field] = "Active"
elif field == "Comments":
# TODO: has to be a matlab-table
Hdict[field] = ""
elif field == "Meta":
# TODO: has to be a matlab-table
Hdict[field] = ""
elif field == "diver_files":
# has to be a matlab-struct
dtype = [
("name", "O"),
("LoggerSerial", "O"),
("values", "O"),
("orig_values", "O"),
("changes", "O"),
("current_change", "O"),
("drift", "O"),
("importedby", "O"),
("importdate", "O"),
("validated", "O"),
("validatedby", "O"),
("validatedate", "O"),
("battery_cap", "O"),
("iscomp", "O"),
("density", "O"),
("compID", "O"),
("ref", "O"),
("IsEquidistant", "O"),
("IsLoggerfile", "O"),
("timeshift", "O"),
]
Hdict[field] = [array([], dtype=dtype)]
elif field == "oldmetadata":
# for version='2.x.g.t (beta)'
dtype = [
("xcoord", "O"),
("ycoord", "O"),
("upfiltlev", "O"),
("lowfiltlev", "O"),
("surflev", "O"),
("measpointlev", "O"),
("sedsumplength", "O"),
("datlog_serial", "O"),
("datlog_depth", "O"),
("date", "O"),
("comment", "O"),
("LoggerBrand", "O"),
("LoggerType", "O"),
("VegTypo", "O"),
("VegType", "O"),
]
Hdict[field] = [array([], dtype=dtype)]

else:
raise (ValueError("Unknown field " + field))

Hnew = zeros((1,), dtype=dtypeH)
for key, val in Hdict.items():
Hnew[key] = val
men["H"] = vstack((men["H"], Hnew))

# add the stressmodels
dtypeIN = men["IN"].dtype
fields = dtypeIN.fields.keys()
for key in data["stressmodels"].keys():
sm = data["stressmodels"][key]
for istress, stress in enumerate(sm["stress"]):
INdict = {}
for field in fields:
if field == "ID":
INdict[field] = men["ID"]["IN"][0][0][0][0]
men["ID"]["IN"] += 1
elif field == "Name":
INdict[field] = stress["name"]
elif field == "Type":
if sm["stressmodel"] == "StressModel2" and istress == 1:
INdict[field] = "EVAP"
else:
INdict[field] = "PREC"
elif field in ["LoggerSerial", "datlog_serial"]:
INdict[field] = ""
elif field == "values":
date = array([datetime2matlab(x) for x in stress["series"].index])
vals = stress["series"].values
INdict[field] = [vstack((date, vals)).transpose()]
elif field == "filtnr":
INdict[field] = 1
elif field in ["surflev", "upfiltlev", "lowfiltlev"]:
INdict[field] = NaN
elif field == "xcoord":
INdict[field] = NaN
elif field == "ycoord":
INdict[field] = NaN
elif field == "date":
INdict[field] = datetime2matlab(Timestamp.now())
elif field == "Meta":
# TODO: has to be a matlab-table
INdict[field] = ""
else:
raise (ValueError("Unknown field " + field))
INnew = zeros((1,), dtype=dtypeIN)
for key, val in INdict.items():
INnew[key] = val
men["IN"] = vstack((men["IN"], INnew))
msg = (
"Pastas no longer supports export to Menyanthes files and this functionality "
"will be removed in Pastas 1.0."
)

if False:
# correct an error from loadmat
if "AutoImport" in men["PS"].dtype.fields.keys():
for i in range(len(men["PS"]["AutoImport"][0][0][0])):
men["PS"]["AutoImport"][0][0][0][i]["IsEnabled"] = 0
men["PS"]["AutoLocalExportEnabled"] = False
men["PS"]["DrainVisEnabled"] = False
if "RemoteDb" in men["PS"].dtype.fields.keys():
men["PS"]["RemoteDb"][0][0]["IsConnected"] = 0

for key in men["ID"].dtype.fields.keys():
men["ID"][key] = 0
def load(*args, **kwargs):
raise DeprecationWarning(msg)

# currently does not generate a model yet

# save the file
if not fname.endswith(".men"):
fname = fname + ".men"
savemat(fname, men, appendmat=False)
if verbose:
return print("%s file succesfully exported" % fname)
def dump(*args, **kwargs):
raise DeprecationWarning(msg)

0 comments on commit bf1da48

Please sign in to comment.