Expose UDAValue to Python

This commit is contained in:
Joakim Hove
2021-11-11 15:53:21 +01:00
parent e9ec23b385
commit 0fc2448369
5 changed files with 41 additions and 12 deletions
+20
View File
@@ -5,6 +5,7 @@
#include <opm/parser/eclipse/Deck/DeckValue.hpp>
#include <opm/parser/eclipse/Deck/DeckItem.hpp>
#include <opm/parser/eclipse/Deck/UDAValue.hpp>
#include <opm/parser/eclipse/Deck/DeckKeyword.hpp>
#include <opm/parser/eclipse/Deck/DeckRecord.hpp>
#include <opm/parser/eclipse/Utility/Typetools.hpp>
@@ -241,6 +242,7 @@ void python::common::export_DeckKeyword(py::module& module) {
.def("get_str", &DeckItem::get<std::string>)
.def("get_int", &DeckItem::get<int>)
.def("get_raw", &DeckItem::get<double>)
.def("get_uda", &DeckItem::get<UDAValue>)
.def("get_SI", &DeckItem::getSIDouble)
.def("get_data_list", &item_to_pylist)
.def("get_raw_data_list", &raw_data_to_pylist)
@@ -254,4 +256,22 @@ void python::common::export_DeckKeyword(py::module& module) {
;
py::class_< UDAValue >(module, "UDAValue")
.def(py::init<double, const Dimension& >())
.def(py::init<const std::string&, const Dimension&>())
.def("dimension", &UDAValue::get_dim)
.def("is_double", &UDAValue::is<double>)
.def("is_string", &UDAValue::is<std::string>)
.def("get_string", &UDAValue::get<std::string>)
.def("get_double", &UDAValue::get<double>)
.def("__repr__", [](const UDAValue& value) {
if (value.is<double>())
return fmt::format("UDAValue(value = {})", value.get<double>());
else
return fmt::format("UDAValue(value = {})", value.get<std::string>());
})
;
}
+1
View File
@@ -14,6 +14,7 @@ from .libopmcommon_python import action
from .libopmcommon_python import Parser, ParseContext, Builtin, eclSectionType
from .libopmcommon_python import DeckKeyword
from .libopmcommon_python import DeckItem
from .libopmcommon_python import UDAValue
from .libopmcommon_python import Dimension
from .libopmcommon_python import UnitSystem
+12 -4
View File
@@ -1,5 +1,16 @@
from opm._common import DeckKeyword
from opm._common import DeckItem
from opm._common import UDAValue
@property
def uda_value(self):
if self.is_double():
return self.get_double()
else:
return self.get_string()
setattr(UDAValue, "value", uda_value)
# in prinsiple it should be possible to use the has_value(int) function
@@ -27,10 +38,7 @@ def get_item_deckitem(self):
elif self.is_double():
return self.get_raw(0)
elif self.is_uda():
if self.__is_numeric():
return self.__uda_double()
else:
return self.__uda_str()
return self.get_uda(0)
else:
raise ValueError("Deck Item, unknown type")
+2 -2
View File
@@ -133,8 +133,8 @@ FIPNUM
welln= dkw_wconprod[0][0].value
self.assertEqual(dkw_wconprod[0][2].value, "ORAT")
self.assertEqual(dkw_wconprod[0][3].value, "WUOPRL")
self.assertEqual(dkw_wconprod[0][5].value, 1.5e5)
self.assertEqual(dkw_wconprod[0][3].value.value, "WUOPRL")
self.assertEqual(dkw_wconprod[0][5].value.value, 1.5e5)
dkw_permx = self.deck_spe1case1["PERMX"]
permx = dkw_permx.get_raw_array()
+6 -6
View File
@@ -188,22 +188,22 @@ FIPNUM
self.assertEqual(record[2].get_str(0), "ORAT")
self.assertEqual(record[3].name(), "ORAT")
self.assertTrue(record[3].is_uda())
self.assertEqual(record[3].value, 30000)
self.assertEqual(record[3].value.value, 30000)
self.assertEqual(record[4].name(), "WRAT")
self.assertTrue(record[4].is_uda())
self.assertEqual(record[4].value, 0)
self.assertEqual(record[4].value.value, 0)
self.assertEqual(record[5].name(), "GRAT")
self.assertTrue(record[5].is_uda())
self.assertEqual(record[5].value, 0)
self.assertEqual(record[5].value.value, 0)
self.assertEqual(record[6].name(), "LRAT")
self.assertTrue(record[6].is_uda())
self.assertEqual(record[6].value, 0)
self.assertEqual(record[6].value.value, 0)
self.assertEqual(record[7].name(), "RESV")
self.assertTrue(record[7].is_uda())
self.assertEqual(record[7].value, 0)
self.assertEqual(record[7].value.value, 0)
self.assertEqual(record[8].name(), "BHP")
self.assertTrue(record[8].is_uda())
self.assertEqual(record[8].value, 1000)
self.assertEqual(record[8].value.value, 1000)
def test_deck_kw_vector(self):
parser = Parser()