def test_pad_opset_1(): x = np.ones((2, 2), dtype=np.float32) y = np.pad(x, pad_width=1, mode='constant') model = get_node_model('Pad', x, paddings=[1, 1, 1, 1]) ng_results = run_model(model, [x]) assert np.array_equal(ng_results, [y]) x = np.random.randn(1, 3, 4, 5).astype(np.float32) y = np.pad(x, pad_width=((0, 0), (0, 0), (1, 2), (3, 4)), mode='constant') model = get_node_model('Pad', x, mode='constant', paddings=[0, 0, 1, 3, 0, 0, 2, 4]) ng_results = run_model(model, [x]) assert np.array_equal(ng_results, [y]) # incorrect paddings rank x = np.ones((2, 2), dtype=np.float32) model = get_node_model('Pad', x, paddings=[0, 1, 1, 3, 1, 2]) with pytest.raises(RuntimeError): run_model(model, [x]) # no paddings arttribute model = get_node_model('Pad', x) with pytest.raises(RuntimeError): import_onnx_model(model)
def test_pad_opset_2(): x = np.ones((2, 2), dtype=np.float32) y = np.pad(x, pad_width=1, mode='constant') model = get_node_model('Pad', x, opset=2, pads=[1, 1, 1, 1]) ng_results = run_model(model, [x]) assert np.array_equal(ng_results, [y]) x = np.random.randn(1, 3, 4, 5).astype(np.float32) y = np.pad(x, pad_width=((0, 0), (0, 0), (1, 2), (3, 4)), mode='constant') model = get_node_model('Pad', x, opset=2, mode='constant', pads=[0, 0, 1, 3, 0, 0, 2, 4]) ng_results = run_model(model, [x]) assert np.array_equal(ng_results, [y]) # incorrect pads rank x = np.ones((2, 2), dtype=np.float32) model = get_node_model('Pad', x, opset=2, pads=[0, 1, 1, 3, 1, 2]) with pytest.raises(ValueError): run_model(model, [x]) # negative pads values model = get_node_model('Pad', x, opset=2, pads=[0, -1, -1, 3]) with pytest.raises(NotImplementedError): run_model(model, [x]) # no pads attribute model = get_node_model('Pad', x, opset=2) with pytest.raises(ValueError): import_onnx_model(model)[0]
def test_pad_negative_values_end(): x = np.ones((2, 2), dtype=np.float32) # Axis 1 end model = get_node_model('Pad', x, opset=2, pads=[0, 0, -1, 0]) ng_result = run_model(model, [x])[0] assert np.array_equal(ng_result, np.array([[1., 1.]])) # Axis 2 end model = get_node_model('Pad', x, opset=2, pads=[0, 0, 0, -1]) ng_result = run_model(model, [x])[0] assert np.array_equal(ng_result, np.array([[1], [1]]))
def test_clip_default(): np.random.seed(133391) input_data = -100. + np.random.randn(3, 4, 5).astype(np.float32) * 200.0 model = get_node_model('Clip', input_data, opset=10, min=0.) result = run_model(model, [input_data]) expected = np.clip(input_data, np.float32(0.), np.finfo(np.float32).max) assert np.allclose(result, [expected]) model = get_node_model('Clip', input_data, opset=10, max=0.) result = run_model(model, [input_data]) expected = np.clip(input_data, np.finfo(np.float32).min, np.float32(0.)) assert np.allclose(result, [expected])
def test_cast_to_bool(val_type, input_data): expected = np.array(input_data, dtype=val_type) model = get_node_model('Cast', input_data, opset=6, to=onnx.mapping.NP_TYPE_TO_TENSOR_TYPE[val_type]) result = run_model(model, [input_data]) assert np.allclose(result, expected) model = get_node_model('Cast', input_data, opset=5, to=np_dtype_to_tensor_type_name(val_type)) result = run_model(model, [input_data]) assert np.allclose(result, expected)
def test_clip(min_value, max_value): np.random.seed(133391) input_data = (np.float32(-100.) + np.random.randn(3, 4, 5).astype(np.float32) * np.float32(200.)) model = get_node_model('Clip', input_data, opset=10, min=float(min_value), max=float(max_value)) result = run_model(model, [input_data]) expected = np.clip(input_data, min_value, max_value) assert np.allclose(result, [expected])
def test_cast_to_uint(val_type): np.random.seed(133391) input_data = np.ceil(np.random.rand(2, 3, 4) * 16) expected = np.array(input_data, dtype=val_type) model = get_node_model('Cast', input_data, opset=6, to=onnx.mapping.NP_TYPE_TO_TENSOR_TYPE[val_type]) result = run_model(model, [input_data]) assert np.allclose(result, expected) model = get_node_model('Cast', input_data, opset=5, to=np_dtype_to_tensor_type_name(val_type)) result = run_model(model, [input_data]) assert np.allclose(result, expected)
def test_cast_to_float(val_type, range_start, range_end, in_dtype): np.random.seed(133391) input_data = np.random.randint(range_start, range_end, size=(2, 2), dtype=in_dtype) expected = np.array(input_data, dtype=val_type) model = get_node_model('Cast', input_data, opset=6, to=onnx.mapping.NP_TYPE_TO_TENSOR_TYPE[val_type]) result = run_model(model, [input_data]) assert np.allclose(result, expected)
def test_slice_opset1(): data = np.array([[1, 2, 3, 4], [5, 6, 7, 8]]) expected_output = np.array([[5, 6, 7]]) model = get_node_model('Slice', data, axes=[0, 1], starts=[1, 0], ends=[2, 3]) ng_results = run_model(model, [data]) assert np.array_equal(ng_results, [expected_output]) expected_output = np.array([[2, 3, 4]]) model = get_node_model('Slice', data, starts=[0, 1], ends=[-1, 1000]) ng_results = run_model(model, [data]) assert np.array_equal(ng_results, [expected_output]) data = np.random.randn(20, 10, 5).astype(np.float32) expected_output = data[0:3, 0:10] model = get_node_model('Slice', data, axes=[0, 1], starts=[0, 0], ends=[3, 10]) ng_results = run_model(model, [data]) assert np.array_equal(ng_results, [expected_output]) # default axes data = np.random.randn(20, 10, 5).astype(np.float32) expected_output = data[:, :, 3:4] model = get_node_model('Slice', data, starts=[0, 0, 3], ends=[20, 10, 4]) ng_results = run_model(model, [data]) assert np.array_equal(ng_results, [expected_output]) # end out of bounds data = np.random.randn(20, 10, 5).astype(np.float32) expected_output = data[:, 1:1000] model = get_node_model('Slice', data, axes=[1], starts=[1], ends=[1000]) ng_results = run_model(model, [data]) assert np.array_equal(ng_results, [expected_output]) # negative value data = np.random.randn(20, 10, 5).astype(np.float32) expected_output = data[:, 0:-1] model = get_node_model('Slice', data, axes=[1], starts=[0], ends=[-1]) ng_results = run_model(model, [data]) assert np.array_equal(ng_results, [expected_output]) # start ouf of bounds data = np.random.randn(20, 10, 5).astype(np.float32) expected_output = data[:, 1000:1000] model = get_node_model('Slice', data, axes=[1], starts=[1000], ends=[1000]) ng_results = run_model(model, [data]) assert np.array_equal(ng_results, [expected_output])