From 866bd9a5b44564b81069833333bda4b14aa42912 Mon Sep 17 00:00:00 2001 From: janezd Date: Sat, 27 Oct 2018 19:46:43 +0300 Subject: [PATCH] Model: Raise an exception if transformation results in all nans --- Orange/base.py | 8 ++++++++ Orange/data/table.py | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/Orange/base.py b/Orange/base.py index 32a4e712b0e..4251234cf04 100644 --- a/Orange/base.py +++ b/Orange/base.py @@ -9,6 +9,7 @@ from Orange.data import Table, Storage, Instance, Value from Orange.data.filter import HasClass +from Orange.data.table import DomainTransformationError from Orange.data.util import one_hot from Orange.misc.wrapper_meta import WrapperMeta from Orange.preprocess import Continuize, RemoveNaNColumns, SklImpute, Normalize @@ -246,6 +247,13 @@ def __call__(self, data, ret=Value): if isinstance(data, Instance): data = Table(data.domain, [data]) if data.domain != self.domain: + if self.original_domain.attributes != data.domain.attributes \ + and data.X.size \ + and not np.isnan(data.X).all(): + data = data.transform(self.original_domain) + if np.isnan(data.X).all(): + raise DomainTransformationError( + "domain transformation produced no defined values") data = data.transform(self.domain) prediction = self.predict_storage(data) elif isinstance(data, (list, tuple)): diff --git a/Orange/data/table.py b/Orange/data/table.py index c8492fbd456..65bcb62a50b 100644 --- a/Orange/data/table.py +++ b/Orange/data/table.py @@ -44,6 +44,10 @@ def get_sample_datasets_dir(): _conversion_cache_lock = RLock() +class DomainTransformationError(Exception): + pass + + class RowInstance(Instance): sparse_x = None sparse_y = None