Skip to content

Commit 9613a43

Browse files
authoredMar 4, 2025
[core] Fix element type enum value <-> string conversion (openvinotoolkit#29240)
### Details: - Fix conversion the deprecated undefined precision to dynamic type which cause serialization of variable precision to undefined where it was dynamic. - Add unit test to catch this issue. ### Tickets: - [CVS-162923](https://jira.devtools.intel.com/browse/CVS-162923) --------- Signed-off-by: Raasz, Pawel <pawel.raasz@intel.com>
1 parent 8ab7374 commit 9613a43

File tree

3 files changed

+105
-30
lines changed

3 files changed

+105
-30
lines changed
 

‎src/core/src/type/element_type.cpp

+16-30
Original file line numberDiff line numberDiff line change
@@ -302,36 +302,22 @@ size_t Type::bitwidth() const {
302302
namespace ov {
303303
template <>
304304
OPENVINO_API EnumNames<element::Type_t>& EnumNames<element::Type_t>::get() {
305-
OPENVINO_SUPPRESS_DEPRECATED_START
306-
static auto enum_names = EnumNames<element::Type_t>("element::Type_t",
307-
{{"undefined", element::Type_t::undefined},
308-
{"dynamic", element::Type_t::dynamic},
309-
{"boolean", element::Type_t::boolean},
310-
{"bf16", element::Type_t::bf16},
311-
{"f16", element::Type_t::f16},
312-
{"f32", element::Type_t::f32},
313-
{"f64", element::Type_t::f64},
314-
{"i4", element::Type_t::i4},
315-
{"i8", element::Type_t::i8},
316-
{"i16", element::Type_t::i16},
317-
{"i32", element::Type_t::i32},
318-
{"i64", element::Type_t::i64},
319-
{"u1", element::Type_t::u1},
320-
{"u2", element::Type_t::u2},
321-
{"u3", element::Type_t::u3},
322-
{"u4", element::Type_t::u4},
323-
{"u6", element::Type_t::u6},
324-
{"u8", element::Type_t::u8},
325-
{"u16", element::Type_t::u16},
326-
{"u32", element::Type_t::u32},
327-
{"u64", element::Type_t::u64},
328-
{"nf4", element::Type_t::nf4},
329-
{"f8e4m3", element::Type_t::f8e4m3},
330-
{"f8e5m2", element::Type_t::f8e5m2},
331-
{"string", element::Type_t::string},
332-
{"f4e2m1", element::Type_t::f4e2m1},
333-
{"f8e8m0", element::Type_t::f8e8m0}});
334-
OPENVINO_SUPPRESS_DEPRECATED_END
305+
static auto enum_names =
306+
EnumNames<element::Type_t>("element::Type_t",
307+
{{"dynamic", element::Type_t::dynamic}, {"undefined", element::Type_t::dynamic},
308+
{"boolean", element::Type_t::boolean}, {"bf16", element::Type_t::bf16},
309+
{"f16", element::Type_t::f16}, {"f32", element::Type_t::f32},
310+
{"f64", element::Type_t::f64}, {"i4", element::Type_t::i4},
311+
{"i8", element::Type_t::i8}, {"i16", element::Type_t::i16},
312+
{"i32", element::Type_t::i32}, {"i64", element::Type_t::i64},
313+
{"u1", element::Type_t::u1}, {"u2", element::Type_t::u2},
314+
{"u3", element::Type_t::u3}, {"u4", element::Type_t::u4},
315+
{"u6", element::Type_t::u6}, {"u8", element::Type_t::u8},
316+
{"u16", element::Type_t::u16}, {"u32", element::Type_t::u32},
317+
{"u64", element::Type_t::u64}, {"nf4", element::Type_t::nf4},
318+
{"f8e4m3", element::Type_t::f8e4m3}, {"f8e5m2", element::Type_t::f8e5m2},
319+
{"string", element::Type_t::string}, {"f4e2m1", element::Type_t::f4e2m1},
320+
{"f8e8m0", element::Type_t::f8e8m0}});
335321
return enum_names;
336322
}
337323

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
<?xml version="1.0"?>
2+
<net name="my_model" version="11">
3+
<layers>
4+
<layer id="0" name="Parameter_1" type="Parameter" version="opset1">
5+
<data shape="1,1,128" element_type="f32" />
6+
<output>
7+
<port id="0" precision="FP32">
8+
<dim>1</dim>
9+
<dim>1</dim>
10+
<dim>128</dim>
11+
</port>
12+
</output>
13+
</layer>
14+
<layer id="1" name="Relu_2" type="ReLU" version="opset1">
15+
<input>
16+
<port id="0" precision="FP32">
17+
<dim>1</dim>
18+
<dim>1</dim>
19+
<dim>128</dim>
20+
</port>
21+
</input>
22+
<output>
23+
<port id="1" precision="FP32">
24+
<dim>1</dim>
25+
<dim>1</dim>
26+
<dim>128</dim>
27+
</port>
28+
</output>
29+
</layer>
30+
<layer id="2" name="ReadValue_3" type="ReadValue" version="opset6">
31+
<data variable_id="my_var" variable_type="dynamic" variable_shape="..." />
32+
<input>
33+
<port id="0" precision="FP32">
34+
<dim>1</dim>
35+
<dim>1</dim>
36+
<dim>128</dim>
37+
</port>
38+
</input>
39+
<output>
40+
<port id="1" precision="FP32">
41+
<dim>1</dim>
42+
<dim>1</dim>
43+
<dim>128</dim>
44+
</port>
45+
</output>
46+
</layer>
47+
<layer id="3" name="Squeeze_4" type="Squeeze" version="opset1">
48+
<input>
49+
<port id="0" precision="FP32">
50+
<dim>1</dim>
51+
<dim>1</dim>
52+
<dim>128</dim>
53+
</port>
54+
</input>
55+
<output>
56+
<port id="1" precision="FP32">
57+
<dim>128</dim>
58+
</port>
59+
</output>
60+
</layer>
61+
<layer id="4" name="Result_5" type="Result" version="opset1">
62+
<input>
63+
<port id="0" precision="FP32">
64+
<dim>128</dim>
65+
</port>
66+
</input>
67+
</layer>
68+
</layers>
69+
<edges>
70+
<edge from-layer="0" from-port="0" to-layer="1" to-port="0" />
71+
<edge from-layer="1" from-port="1" to-layer="2" to-port="0" />
72+
<edge from-layer="2" from-port="1" to-layer="3" to-port="0" />
73+
<edge from-layer="3" from-port="1" to-layer="4" to-port="0" />
74+
</edges>
75+
<rt_info />
76+
</net>

‎src/core/tests/pass/serialization/deterministicity.cpp

+13
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,19 @@ TEST_F(SerializationDeterministicityTest, ModelWithConstants) {
144144
ASSERT_TRUE(files_equal(bin_1, bin_2));
145145
}
146146

147+
TEST_F(SerializationDeterministicityTest, ModelWithVariable) {
148+
const auto model = ov::test::utils::getModelFromTestModelZoo(
149+
ov::util::path_join({SERIALIZED_ZOO, "ir/dynamic_variable.xml"}).string());
150+
151+
auto expected = ov::test::readModel(model, "");
152+
ov::pass::Serialize(m_out_xml_path_1, m_out_bin_path_1).run_on_model(expected);
153+
154+
std::ifstream xml_1(m_out_xml_path_1, std::ios::in);
155+
std::ifstream xml_2(model, std::ios::in);
156+
157+
ASSERT_TRUE(files_equal(xml_1, xml_2));
158+
}
159+
147160
class SerializationDeterministicityInputOutputTest : public testing::TestWithParam<ov::pass::Serialize::Version>,
148161
public DeterministicityCommon {
149162
protected:

0 commit comments

Comments
 (0)