pytorch
63 строки · 1.9 Кб
1
2
3
4
5
6import numpy as np7
8from hypothesis import given, settings9import hypothesis.strategies as st10
11from caffe2.python import core12import caffe2.python.hypothesis_test_util as hu13import caffe2.python.serialized_test.serialized_test_util as serial14
15
16class TestClip(serial.SerializedTestCase):17@given(X=hu.tensor(min_dim=0),18min_=st.floats(min_value=-2, max_value=0),19max_=st.floats(min_value=0, max_value=2),20inplace=st.booleans(),21**hu.gcs)22@settings(deadline=10000)23def test_clip(self, X, min_, max_, inplace, gc, dc):24# go away from the origin point to avoid kink problems25if np.isscalar(X):26X = np.array([], dtype=np.float32)27else:28X[np.abs(X - min_) < 0.05] += 0.129X[np.abs(X - max_) < 0.05] += 0.130
31def clip_ref(X):32X = X.clip(min_, max_)33return (X,)34
35op = core.CreateOperator(36"Clip",37["X"], ["Y" if not inplace else "X"],38min=min_,39max=max_)40self.assertReferenceChecks(gc, op, [X], clip_ref)41# Check over multiple devices42self.assertDeviceChecks(dc, op, [X], [0])43# Gradient check wrt X44self.assertGradientChecks(gc, op, [X], 0, [0])45
46@given(X=hu.tensor(min_dim=0),47inplace=st.booleans(),48**hu.gcs)49def test_clip_default(self, X, inplace, gc, dc):50# go away from the origin point to avoid kink problems51if np.isscalar(X):52X = np.array([], dtype=np.float32)53else:54X += 0.04 * np.sign(X)55def clip_ref(X):56return (X,)57
58op = core.CreateOperator(59"Clip",60["X"], ["Y" if not inplace else "X"])61self.assertReferenceChecks(gc, op, [X], clip_ref)62# Check over multiple devices63self.assertDeviceChecks(dc, op, [X], [0])64
65
66if __name__ == "__main__":67import unittest68unittest.main()69