Expose UDAValue to Python
This commit is contained in:
@@ -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>());
|
||||
})
|
||||
;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user