Skip to content

Commit

Permalink
[Dy2St]Raise TypeError when call to_static to convert a method of a c…
Browse files Browse the repository at this point in the history
…ommon class (#44781)

* Fix to_static error when call to_static to convert a method of a common class

* raise typerror when class no inherits from layer

* Fix @to_static
  • Loading branch information
0x45f committed Aug 2, 2022
1 parent acfdb8b commit c3d4a3d
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 0 deletions.
Expand Up @@ -257,6 +257,10 @@ def __init__(self, function, input_spec=None, **kwargs):
self._dygraph_function = getattr(function, '__func__')
self._class_instance = getattr(function, '__self__')

if not hasattr(self._class_instance, '_original_funcs'):
raise TypeError(
"When using 'to_static' to convert method of a class, "
"please ensure the class inherits from nn.Layer")
self._class_instance._original_funcs[
function.__name__] = self._dygraph_function
else:
Expand Down Expand Up @@ -406,6 +410,10 @@ def __call__(self, *args, **kwargs):

def _is_train_mode(self):
if self._class_instance is not None:
if not hasattr(self._class_instance, 'training'):
raise TypeError(
"When using 'to_static' to convert method of a class, "
"please ensure the class inherits from nn.Layer")
return self._class_instance.training
else:
return self._training
Expand Down
Expand Up @@ -478,5 +478,21 @@ def test_set_buffers2(self):
paddle.enable_static()


class ClassNoInheritLayer:

def func(self, x):
return x + 1


class TestClassNoInheritLayer(unittest.TestCase):

def test_to_static(self):
paddle.disable_static()
net = ClassNoInheritLayer()
input_spec = [paddle.static.InputSpec(name='x', shape=[1])]
with self.assertRaises(TypeError):
static_func = paddle.jit.to_static(net.func, input_spec=input_spec)


if __name__ == '__main__':
unittest.main()

0 comments on commit c3d4a3d

Please sign in to comment.