blob: a47d2da358f421d05a9ae79c202e8d25151d85dc [file] [log] [blame]
alexander73010782021-10-18 19:17:24 +01001# Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
2# SPDX-License-Identifier: MIT
3import pytest
4
5from pyarmnn import BackendOptions, BackendOption, BackendId, OptimizerOptions, ShapeInferenceMethod_InferAndValidate
6
7
8@pytest.mark.parametrize("data", (True, -100, 128, 0.12345, 'string'))
9def test_backend_option_ctor(data):
10 bo = BackendOption("name", data)
11 assert "name" == bo.GetName()
12
13
14def test_backend_options_ctor():
15 backend_id = BackendId('a')
16 bos = BackendOptions(backend_id)
17
18 assert 'a' == str(bos.GetBackendId())
19
20 another_bos = BackendOptions(bos)
21 assert 'a' == str(another_bos.GetBackendId())
22
23
24def test_backend_options_add():
25 backend_id = BackendId('a')
26 bos = BackendOptions(backend_id)
27 bo = BackendOption("name", 1)
28 bos.AddOption(bo)
29
30 assert 1 == bos.GetOptionCount()
31 assert 1 == len(bos)
32
33 assert 'name' == bos[0].GetName()
34 assert 'name' == bos.GetOption(0).GetName()
35 for option in bos:
36 assert 'name' == option.GetName()
37
38 bos.AddOption(BackendOption("name2", 2))
39
40 assert 2 == bos.GetOptionCount()
41 assert 2 == len(bos)
42
43
44def test_backend_option_ownership():
45 backend_id = BackendId('b')
46 bos = BackendOptions(backend_id)
47 bo = BackendOption('option', True)
48 bos.AddOption(bo)
49
50 assert bo.thisown
51
52 del bo
53
54 assert 1 == bos.GetOptionCount()
55 option = bos[0]
56 assert not option.thisown
57 assert 'option' == option.GetName()
58
59 del option
60
61 option_again = bos[0]
62 assert not option_again.thisown
63 assert 'option' == option_again.GetName()
64
65
66def test_optimizer_options_with_model_opt():
67 a = BackendOptions(BackendId('a'))
68
69 oo = OptimizerOptions(True,
70 False,
71 False,
72 ShapeInferenceMethod_InferAndValidate,
73 True,
Colm Donelan03bf98a2022-05-30 15:20:36 +010074 [a],
75 True)
alexander73010782021-10-18 19:17:24 +010076
77 mo = oo.m_ModelOptions
78
79 assert 1 == len(mo)
80 assert 'a' == str(mo[0].GetBackendId())
81
82 b = BackendOptions(BackendId('b'))
83
84 c = BackendOptions(BackendId('c'))
85
86 oo.m_ModelOptions = (a, b, c)
87
88 mo = oo.m_ModelOptions
89
90 assert 3 == len(oo.m_ModelOptions)
91
92 assert 'a' == str(mo[0].GetBackendId())
93 assert 'b' == str(mo[1].GetBackendId())
94 assert 'c' == str(mo[2].GetBackendId())
95
96
97def test_optimizer_option_default():
98 oo = OptimizerOptions(True,
99 False,
100 False,
101 ShapeInferenceMethod_InferAndValidate,
102 True)
103
104 assert 0 == len(oo.m_ModelOptions)
105
106
107def test_optimizer_options_fail():
108 a = BackendOptions(BackendId('a'))
109
110 with pytest.raises(TypeError) as err:
111 OptimizerOptions(True,
112 False,
113 False,
114 ShapeInferenceMethod_InferAndValidate,
115 True,
Colm Donelan03bf98a2022-05-30 15:20:36 +0100116 a,
117 True)
alexander73010782021-10-18 19:17:24 +0100118
119 assert "Wrong number or type of arguments" in str(err.value)
120
121 with pytest.raises(RuntimeError) as err:
122 OptimizerOptions(True,
123 False,
124 True,
125 ShapeInferenceMethod_InferAndValidate,
126 True,
Colm Donelan03bf98a2022-05-30 15:20:36 +0100127 [a],
128 True)
alexander73010782021-10-18 19:17:24 +0100129
130 assert "BFloat16 and Float16 optimization cannot be enabled at the same time" in str(err.value)
131
132 with pytest.raises(TypeError) as err:
133 oo = OptimizerOptions(True,
134 False,
135 False,
136 ShapeInferenceMethod_InferAndValidate,
137 True)
138
139 oo.m_ModelOptions = 'nonsense'
140
141 assert "in method 'OptimizerOptions_m_ModelOptions_set', argument 2" in str(err.value)
142
143 with pytest.raises(TypeError) as err:
144 oo = OptimizerOptions(True,
145 False,
146 False,
147 ShapeInferenceMethod_InferAndValidate,
148 True)
149
150 oo.m_ModelOptions = ['nonsense', a]
151
152 assert "in method 'OptimizerOptions_m_ModelOptions_set', argument 2" in str(err.value)