Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
N
ngraph
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ngraph
Commits
4aad5209
Commit
4aad5209
authored
5 years ago
by
Adam Procter
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add some execution tests
parent
996879ba
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
104 additions
and
3 deletions
+104
-3
dyn_reshape.cpp
src/ngraph/op/experimental/dyn_reshape.cpp
+13
-3
dynamic.in.cpp
test/dynamic.in.cpp
+91
-0
No files found.
src/ngraph/op/experimental/dyn_reshape.cpp
View file @
4aad5209
...
...
@@ -99,7 +99,8 @@ void op::DynReshape::validate_and_infer_types()
if
(
out_shape_val
[
i
]
==
0
&&
m_zero_flag
)
{
// Copy input_shape[i] for zero values
NGRAPH_CHECK
(
i
<
input_shape
.
size
());
NODE_VALIDATION_CHECK
(
this
,
i
<
input_shape
.
size
(),
"'0' dimension is out of range"
);
partial_shape
[
i
]
=
Dimension
(
input_shape
[
i
]);
output_elements
*=
input_shape
[
i
];
}
...
...
@@ -119,12 +120,21 @@ void op::DynReshape::validate_and_infer_types()
// input elements
if
(
output_elements
==
0
)
{
NGRAPH_CHECK
(
input_elements
==
0
);
// TODO(amprocte): Decide if this is desired behavior here. (NumPy seems
// to fail.)
NODE_VALIDATION_CHECK
(
this
,
input_elements
==
0
,
"Cannot infer '-1' dimension with zero-size output "
"dimension unless at least one input dimension is "
"also zero-size"
);
partial_shape
[
negative_dim
]
=
Dimension
(
0
);
}
else
{
NGRAPH_CHECK
(
input_elements
%
output_elements
==
0
);
NODE_VALIDATION_CHECK
(
this
,
input_elements
%
output_elements
==
0
,
"Non-'-1' output dimensions do not evenly divide the input dimensions"
);
partial_shape
[
negative_dim
]
=
Dimension
(
input_elements
/
output_elements
);
}
}
...
...
This diff is collapsed.
Click to expand it.
test/dynamic.in.cpp
View file @
4aad5209
...
...
@@ -365,3 +365,94 @@ NGRAPH_TEST(dynamic_${BACKEND_NAME}, range)
ASSERT_EQ
(
results
,
test
.
expected_result
);
}
}
NGRAPH_TEST
(
dynamic_
$
{
BACKEND_NAME
},
reshape
)
{
auto
backend
=
runtime
::
Backend
::
create
(
"${BACKEND_NAME}"
,
true
);
auto
build_graph
=
[
&
backend
](
bool
zero_flag
)
{
// Create a graph for f(x,shape) = DynReshape(x,shape,zero_flag=zero_flag).
auto
x
=
make_shared
<
op
::
Parameter
>
(
element
::
i32
,
PartialShape
::
dynamic
());
auto
shape
=
make_shared
<
op
::
Parameter
>
(
element
::
i64
,
PartialShape
::
dynamic
(
1
));
auto
dyn_reshape
=
make_shared
<
op
::
DynReshape
>
(
x
,
shape
,
zero_flag
);
EXPECT_TRUE
(
dyn_reshape
->
get_output_partial_shape
(
0
).
same_scheme
(
PartialShape
::
dynamic
()));
auto
f
=
make_shared
<
Function
>
(
NodeVector
{
dyn_reshape
},
ParameterVector
{
x
,
shape
});
auto
ex
=
backend
->
compile
(
f
);
return
ex
;
};
auto
t_r
=
backend
->
create_dynamic_tensor
(
element
::
i32
,
PartialShape
::
dynamic
());
auto
ex_flag_off
=
build_graph
(
false
);
auto
ex_flag_on
=
build_graph
(
true
);
std
::
vector
<
std
::
tuple
<
bool
,
Shape
,
std
::
vector
<
int32_t
>
,
std
::
vector
<
int64_t
>
,
Shape
>>
tests
;
tests
.
emplace_back
(
make_tuple
(
false
,
Shape
{
2
,
3
},
vector
<
int32_t
>
{
1
,
2
,
3
,
4
,
5
,
6
},
vector
<
int64_t
>
{
6
},
Shape
{
6
}));
tests
.
emplace_back
(
make_tuple
(
true
,
Shape
{
2
,
3
},
vector
<
int32_t
>
{
1
,
2
,
3
,
4
,
5
,
6
},
vector
<
int64_t
>
{
6
},
Shape
{
6
}));
tests
.
emplace_back
(
make_tuple
(
false
,
Shape
{
2
,
3
},
vector
<
int32_t
>
{
1
,
2
,
3
,
4
,
5
,
6
},
vector
<
int64_t
>
{
-
1
},
Shape
{
6
}));
tests
.
emplace_back
(
make_tuple
(
false
,
Shape
{
2
,
3
},
vector
<
int32_t
>
{
1
,
2
,
3
,
4
,
5
,
6
},
vector
<
int64_t
>
{
2
,
-
1
},
Shape
{
2
,
3
}));
tests
.
emplace_back
(
make_tuple
(
false
,
Shape
{
2
,
3
},
vector
<
int32_t
>
{
1
,
2
,
3
,
4
,
5
,
6
},
vector
<
int64_t
>
{
3
,
-
1
},
Shape
{
3
,
2
}));
tests
.
emplace_back
(
make_tuple
(
false
,
Shape
{
2
,
3
},
vector
<
int32_t
>
{
1
,
2
,
3
,
4
,
5
,
6
},
vector
<
int64_t
>
{
3
,
2
,
-
1
},
Shape
{
3
,
2
,
1
}));
tests
.
emplace_back
(
make_tuple
(
true
,
Shape
{
2
,
3
},
vector
<
int32_t
>
{
1
,
2
,
3
,
4
,
5
,
6
},
vector
<
int64_t
>
{
3
,
2
,
-
1
},
Shape
{
3
,
2
,
1
}));
tests
.
emplace_back
(
make_tuple
(
true
,
Shape
{
2
,
3
},
vector
<
int32_t
>
{
1
,
2
,
3
,
4
,
5
,
6
},
vector
<
int64_t
>
{
0
,
0
,
-
1
},
Shape
{
2
,
3
,
1
}));
tests
.
emplace_back
(
make_tuple
(
true
,
Shape
{
2
,
3
},
vector
<
int32_t
>
{
1
,
2
,
3
,
4
,
5
,
6
},
vector
<
int64_t
>
{
2
,
0
,
-
1
},
Shape
{
2
,
3
,
1
}));
tests
.
emplace_back
(
make_tuple
(
true
,
Shape
{
0
,
3
,
4
},
vector
<
int32_t
>
{},
vector
<
int64_t
>
{
3
,
-
1
,
2
},
Shape
{
3
,
0
,
2
}));
for
(
auto
&
test
:
tests
)
{
bool
zero_flag
=
get
<
0
>
(
test
);
const
Shape
&
in_shape
=
get
<
1
>
(
test
);
const
std
::
vector
<
int32_t
>&
data
=
get
<
2
>
(
test
);
const
std
::
vector
<
int64_t
>&
dims
=
get
<
3
>
(
test
);
const
Shape
&
out_shape
=
get
<
4
>
(
test
);
auto
t_x
=
backend
->
create_tensor
(
element
::
i32
,
in_shape
);
auto
t_shape
=
backend
->
create_tensor
(
element
::
i64
,
Shape
{
dims
.
size
()});
copy_data
(
t_x
,
data
);
copy_data
(
t_shape
,
dims
);
auto
ex
=
zero_flag
?
ex_flag_on
:
ex_flag_off
;
ex
->
call_with_validate
({
t_r
},
{
t_x
,
t_shape
});
ASSERT_EQ
(
t_r
->
get_element_type
(),
element
::
i32
);
ASSERT_EQ
(
t_r
->
get_shape
(),
out_shape
);
auto
results
=
read_vector
<
int32_t
>
(
t_r
);
ASSERT_EQ
(
results
,
data
);
}
}
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment