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_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.0, 1.0]]))

    # 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]]))
Beispiel #3
0
def test_clip_default():
    np.random.seed(133391)
    input_data = -100.0 + np.random.randn(3, 4, 5).astype(np.float32) * 200.0

    model = get_node_model("Clip", input_data, opset=10, min=0.0)
    result = run_model(model, [input_data])
    expected = np.clip(input_data, np.float32(0.0), np.finfo(np.float32).max)
    assert np.allclose(result, [expected])

    model = get_node_model("Clip", input_data, opset=10, max=0.0)
    result = run_model(model, [input_data])
    expected = np.clip(input_data, np.finfo(np.float32).min, np.float32(0.0))
    assert np.allclose(result, [expected])
Beispiel #4
0
def import_and_compute(op_type,
                       input_data_left,
                       input_data_right,
                       opset=7,
                       **node_attributes):
    inputs = [np.array(input_data_left), np.array(input_data_right)]
    onnx_node = onnx.helper.make_node(op_type,
                                      inputs=["x", "y"],
                                      outputs=["z"],
                                      **node_attributes)

    input_tensors = [
        make_tensor_value_info(name, onnx.TensorProto.FLOAT, value.shape)
        for name, value in zip(onnx_node.input, inputs)
    ]
    output_tensors = [
        make_tensor_value_info(name, onnx.TensorProto.FLOAT, ())
        for name in onnx_node.output
    ]

    graph = make_graph([onnx_node], "compute_graph", input_tensors,
                       output_tensors)
    model = make_model(graph, producer_name="ngraph ONNX Importer")
    model.opset_import[0].version = opset
    return run_model(model, inputs)[0]
Beispiel #5
0
def test_clip(min_value, max_value):
    np.random.seed(133391)
    input_data = np.float32(-100.0) + np.random.randn(3, 4, 5).astype(np.float32) * np.float32(200.0)
    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])
Beispiel #6
0
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)
Beispiel #7
0
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)
Beispiel #8
0
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)
Beispiel #9
0
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])