forked from Qortal/Brooklyn
150 lines
4.0 KiB
Python
150 lines
4.0 KiB
Python
# Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
|
|
# SPDX-License-Identifier: MIT
|
|
import pytest
|
|
|
|
from pyarmnn import BackendOptions, BackendOption, BackendId, OptimizerOptions, ShapeInferenceMethod_InferAndValidate
|
|
|
|
|
|
@pytest.mark.parametrize("data", (True, -100, 128, 0.12345, 'string'))
|
|
def test_backend_option_ctor(data):
|
|
bo = BackendOption("name", data)
|
|
assert "name" == bo.GetName()
|
|
|
|
|
|
def test_backend_options_ctor():
|
|
backend_id = BackendId('a')
|
|
bos = BackendOptions(backend_id)
|
|
|
|
assert 'a' == str(bos.GetBackendId())
|
|
|
|
another_bos = BackendOptions(bos)
|
|
assert 'a' == str(another_bos.GetBackendId())
|
|
|
|
|
|
def test_backend_options_add():
|
|
backend_id = BackendId('a')
|
|
bos = BackendOptions(backend_id)
|
|
bo = BackendOption("name", 1)
|
|
bos.AddOption(bo)
|
|
|
|
assert 1 == bos.GetOptionCount()
|
|
assert 1 == len(bos)
|
|
|
|
assert 'name' == bos[0].GetName()
|
|
assert 'name' == bos.GetOption(0).GetName()
|
|
for option in bos:
|
|
assert 'name' == option.GetName()
|
|
|
|
bos.AddOption(BackendOption("name2", 2))
|
|
|
|
assert 2 == bos.GetOptionCount()
|
|
assert 2 == len(bos)
|
|
|
|
|
|
def test_backend_option_ownership():
|
|
backend_id = BackendId('b')
|
|
bos = BackendOptions(backend_id)
|
|
bo = BackendOption('option', True)
|
|
bos.AddOption(bo)
|
|
|
|
assert bo.thisown
|
|
|
|
del bo
|
|
|
|
assert 1 == bos.GetOptionCount()
|
|
option = bos[0]
|
|
assert not option.thisown
|
|
assert 'option' == option.GetName()
|
|
|
|
del option
|
|
|
|
option_again = bos[0]
|
|
assert not option_again.thisown
|
|
assert 'option' == option_again.GetName()
|
|
|
|
|
|
def test_optimizer_options_with_model_opt():
|
|
a = BackendOptions(BackendId('a'))
|
|
|
|
oo = OptimizerOptions(True,
|
|
False,
|
|
False,
|
|
ShapeInferenceMethod_InferAndValidate,
|
|
True,
|
|
[a])
|
|
|
|
mo = oo.m_ModelOptions
|
|
|
|
assert 1 == len(mo)
|
|
assert 'a' == str(mo[0].GetBackendId())
|
|
|
|
b = BackendOptions(BackendId('b'))
|
|
|
|
c = BackendOptions(BackendId('c'))
|
|
|
|
oo.m_ModelOptions = (a, b, c)
|
|
|
|
mo = oo.m_ModelOptions
|
|
|
|
assert 3 == len(oo.m_ModelOptions)
|
|
|
|
assert 'a' == str(mo[0].GetBackendId())
|
|
assert 'b' == str(mo[1].GetBackendId())
|
|
assert 'c' == str(mo[2].GetBackendId())
|
|
|
|
|
|
def test_optimizer_option_default():
|
|
oo = OptimizerOptions(True,
|
|
False,
|
|
False,
|
|
ShapeInferenceMethod_InferAndValidate,
|
|
True)
|
|
|
|
assert 0 == len(oo.m_ModelOptions)
|
|
|
|
|
|
def test_optimizer_options_fail():
|
|
a = BackendOptions(BackendId('a'))
|
|
|
|
with pytest.raises(TypeError) as err:
|
|
OptimizerOptions(True,
|
|
False,
|
|
False,
|
|
ShapeInferenceMethod_InferAndValidate,
|
|
True,
|
|
a)
|
|
|
|
assert "Wrong number or type of arguments" in str(err.value)
|
|
|
|
with pytest.raises(RuntimeError) as err:
|
|
OptimizerOptions(True,
|
|
False,
|
|
True,
|
|
ShapeInferenceMethod_InferAndValidate,
|
|
True,
|
|
[a])
|
|
|
|
assert "BFloat16 and Float16 optimization cannot be enabled at the same time" in str(err.value)
|
|
|
|
with pytest.raises(TypeError) as err:
|
|
oo = OptimizerOptions(True,
|
|
False,
|
|
False,
|
|
ShapeInferenceMethod_InferAndValidate,
|
|
True)
|
|
|
|
oo.m_ModelOptions = 'nonsense'
|
|
|
|
assert "in method 'OptimizerOptions_m_ModelOptions_set', argument 2" in str(err.value)
|
|
|
|
with pytest.raises(TypeError) as err:
|
|
oo = OptimizerOptions(True,
|
|
False,
|
|
False,
|
|
ShapeInferenceMethod_InferAndValidate,
|
|
True)
|
|
|
|
oo.m_ModelOptions = ['nonsense', a]
|
|
|
|
assert "in method 'OptimizerOptions_m_ModelOptions_set', argument 2" in str(err.value)
|