Class representing a shape that may be partially or totally dynamic. More...
#include <partial_shape.hpp>
Public Member Functions  
PartialShape (std::initializer_list< Dimension > init)  
Constructs a shape with static rank from an initializer list of Dimension. More...  
PartialShape (const std::vector< Dimension > &dimensions)  
Constructs a PartialShape with static rank from a vector of Dimension. More...  
PartialShape (const std::vector< Dimension::value_type > &dimensions)  
Constructs a PartialShape with static rank from a vector of dimensions values. More...  
PartialShape ()  
Constructs a static PartialShape with zero rank (the shape of a scalar).  
PartialShape (const Shape &shape)  
Constructs a static PartialShape from a Shape. More...  
bool  is_static () const 
Check if this shape is static. More...  
bool  is_dynamic () const 
Check if this shape is dynamic. More...  
Rank  rank () const 
Get the rank of the shape. More...  
bool  compatible (const PartialShape &s) const 
Check whether this shape is compatible with the argument, i.e., whether it is possible to merge them. More...  
bool  same_scheme (const PartialShape &s) const 
Check whether this shape represents the same scheme as the argument. More...  
bool  relaxes (const PartialShape &s) const 
Check whether this shape is a relaxation of the argument. More...  
bool  refines (const PartialShape &s) const 
Check whether this shape is a refinement of the argument. More...  
bool  merge_rank (Rank r) 
Checks that this shape's rank is compatible with r , and, if this shape's rank is dynamic and r is static, updates this shape to have a rank of r with dimensions all dynamic. More...  
Shape  to_shape () const 
Convert a static PartialShape to a Shape. More...  
bool  all_non_negative () const 
Returns true if all static dimensions of the tensor are nonnegative, else false .  
const Dimension &  operator[] (size_t i) const 
Index operator for PartialShape. More...  
Dimension &  operator[] (size_t i) 
Index operator for PartialShape. More...  
operator std::vector< Dimension > () const  
Returns a vector of the dimensions. This has no meaning if dynamic.  
bool  operator== (const PartialShape &partial_shape) const 
bool  operator!= (const PartialShape &partial_shape) const 
Shape  get_max_shape () const 
Get the max bounding shape.  
Shape  get_min_shape () const 
Get the min bounding shape.  
Shape  get_shape () const 
Get the unique shape.  
iterator  begin () noexcept 
Returns a read/write iterator that points to the first element in the shape. Iteration is done in ordinary element order.  
const_iterator  begin () const noexcept 
Returns a readonly (constant) iterator that points to the first element in the shape. Iteration is done in ordinary element order.  
iterator  end () noexcept 
Returns a read/write iterator that points one past the last element in the shape. Iteration is done in ordinary element order.  
const_iterator  end () const noexcept 
Returns a readonly (constant) iterator that points one past the last element in the shape. Iteration is done in ordinary element order.  
reverse_iterator  rbegin () noexcept 
Returns a read/write reverse iterator that points to the last element in the shape. Iteration is done in reverse element order.  
const_reverse_iterator  rbegin () const noexcept 
Returns a readonly (constant) reverse iterator that points to the last element in the shape. Iteration is done in reverse element order.  
reverse_iterator  rend () noexcept 
Returns a read/write reverse iterator that points to one before the first element in the shape. Iteration is done in reverse element order.  
const_reverse_iterator  rend () const noexcept 
Returns a readonly (constant) reverse iterator that points to one before the first element in the shape. Iteration is done in reverse element order.  
const_iterator  cbegin () const noexcept 
Returns a readonly (constant) iterator that points to the first element in the shape. Iteration is done in ordinary element order.  
const_iterator  cend () const noexcept 
Returns a readonly (constant) iterator that points one past the last element in the shape. Iteration is done in ordinary element order.  
const_reverse_iterator  crbegin () const noexcept 
Returns a readonly (constant) reverse iterator that points to the last element in the shape. Iteration is done in reverse element order.  
const_reverse_iterator  crend () const noexcept 
Returns a readonly (constant) reverse iterator that points to one before the first element in the shape. Iteration is done in reverse element order.  
Static Public Member Functions  
static PartialShape  dynamic (Rank r=Rank::dynamic()) 
Construct a PartialShape with the given rank and all dimensions (if any) dynamic. More...  
static bool  merge_into (PartialShape &dst, const PartialShape &src) 
Try to merge one shape into another. More...  
static bool  broadcast_merge_into (PartialShape &dst, const PartialShape &src, const op::AutoBroadcastSpec &autob) 
Try to merge one shape into another along with implicit broadcasting.  
Friends  
NGRAPH_API std::ostream &  operator<< (std::ostream &str, const PartialShape &shape) 
Inserts a humanreadable representation of a PartialShape into an output stream. More...  
PartialShape  operator+ (const PartialShape &s1, const PartialShape &s2) 
Elementwise addition of two PartialShape objects. More...  
Class representing a shape that may be partially or totally dynamic.
XXX: THIS CLASS IS EXPERIMENTAL AND THE ENTIRE DESIGN IS SUBJECT TO CHANGE.
A PartialShape may have:
?
) {1,2,?,4}
, {?,?,?}
) {1,2,3,4}
, {6}
, {}
) ngraph::PartialShape::PartialShape  (  std::initializer_list< Dimension >  init  ) 
Constructs a shape with static rank from an initializer list of Dimension.
init  The Dimension values for the constructed shape. 
Examples:
ngraph::PartialShape::PartialShape  (  const std::vector< Dimension > &  dimensions  ) 
Constructs a PartialShape with static rank from a vector of Dimension.
dimensions  The Dimension values for the constructed shape. 
ngraph::PartialShape::PartialShape  (  const std::vector< Dimension::value_type > &  dimensions  ) 
Constructs a PartialShape with static rank from a vector of dimensions values.
dimensions  The Dimension values for the constructed shape. 
ngraph::PartialShape::PartialShape  (  const Shape &  shape  ) 
Constructs a static PartialShape from a Shape.
shape  The Shape to convert into PartialShape. 
bool ngraph::PartialShape::compatible  (  const PartialShape &  s  )  const 
Check whether this shape is compatible with the argument, i.e., whether it is possible to merge them.
s  The shape to be checked for compatibility with this shape. 
true
if this shape is compatible with s
, else false
.Two shapes are compatible if

static 
Construct a PartialShape with the given rank and all dimensions (if any) dynamic.

inline 
Check if this shape is dynamic.
false
if this shape is static, else true
.A shape is considered static if it has static rank, and all dimensions of the shape are static.
bool ngraph::PartialShape::is_static  (  )  const 
Check if this shape is static.
true
if this shape is static, else false
.A shape is considered static if it has static rank, and all dimensions of the shape are static.

static 
Try to merge one shape into another.
[in,out]  dst  The shape that src will be merged into. 
src  The shape that will be merged into dst . 
true
if merging succeeds, else false
.Merges src
into dst
, returning true
on success and false
on failure. If false
is returned, the effect on dst
is unspecified.
To merge two partial shapes s1
and s2
is to find the most permissive partial shape s
that is no more permissive than s1
or s2
, if s
exists. For example:
This function (merge_into) performs the "merge" operation described above on dst
and src
, but overwrites dst
with the result and returns true
if merging is successful; if merging is unsuccessful, the function returns false
and may make unspecified changes to dst
.
bool ngraph::PartialShape::merge_rank  (  Rank  r  ) 
Checks that this shape's rank is compatible with r
, and, if this shape's rank is dynamic and r
is static, updates this shape to have a rank of r
with dimensions all dynamic.
true
if this shape's rank is compatible with r
, else false
. Dimension& ngraph::PartialShape::operator[]  (  size_t  i  ) 
Index operator for PartialShape.
i  The index of the dimension being selected. 
i
th Dimension of this shape. const Dimension& ngraph::PartialShape::operator[]  (  size_t  i  )  const 
Index operator for PartialShape.
i  The index of the dimension being selected. 
i
th Dimension of this shape.

inline 
Get the rank of the shape.
bool ngraph::PartialShape::refines  (  const PartialShape &  s  )  const 
Check whether this shape is a refinement of the argument.
s  The shape which is being compared against this shape. 
true
if this shape refines s
, else false
.Intuitively, a PartialShape s1
is said to relax s2
(or is a relaxation of s2
) if it is "less permissive" than s2
. In other words, s1
is a relaxation of s2
if anything you can form by plugging things into the dynamic dimensions of s1
is also something you can form by plugging things into the dynamic dimensions of s2
, but not necessarily the other way around.
s1.refines(s2)
is equivalent to s2.relaxes(s1)
.
Formally, PartialShape s1
is said to refine PartialShape s2
if:
s2
has dynamic rank, or s1
and s2
both have static rank r
, and for every i
from 0
to r1
, either s2[i]
is dynamic, or s1[i]
== s2[i]
. bool ngraph::PartialShape::relaxes  (  const PartialShape &  s  )  const 
Check whether this shape is a relaxation of the argument.
s  The shape which is being compared against this shape. 
true
if this shape relaxes s
, else false
.Intuitively, a PartialShape s1
is said to relax s2
(or is a relaxation of s2
) if it is "more permissive" than s2
. In other words, s1
is a relaxation of s2
if anything you can form by plugging things into the dynamic dimensions of s2
is also something you can form by plugging things into the dynamic dimensions of s1
, but not necessarily the other way around.
s1.relaxes(s2)
is equivalent to s2.refines(s1)
.
Formally, PartialShape s1
is said to relax PartialShape s2
if:
i
from 0
to r1
, either s1[i]
contains s2[i]. bool ngraph::PartialShape::same_scheme  (  const PartialShape &  s  )  const 
Check whether this shape represents the same scheme as the argument.
s  The shape whose scheme is being compared with this shape. 
true
if this shape represents the same scheme as s
, else false
.Two shapes s1
and s2
represent the same scheme if
r
, and for every i
from 0
to r1
, s1[i]
represents the same scheme as s2[i]
(see Dimension::same_scheme()). Shape ngraph::PartialShape::to_shape  (  )  const 
Convert a static PartialShape to a Shape.
s
where s[i] = size_t((*this)[i])
. std::invalid_argument  If this PartialShape is dynamic. 

friend 
Elementwise addition of two PartialShape objects.
s1  Left operand for addition. 
s2  Right operand for addition. 
s1
to s2
(see description). std::invalid_argument  If s1 and s2 have inconsistent ranks. 
s1
or s2
has dynamic rank, returns PartialShape::dynamic(). s1 and
s2` both have static rank, and their ranks are unequal, throws std::invalid_argument. s1
and s2
both have static rank, and their ranks are equal, returns a new shape whose i
th dimension is s1[i] + s2[i]
.

friend 
Inserts a humanreadable representation of a PartialShape into an output stream.
str  The output stream targeted for insertion. 
shape  The shape to be inserted into str . 
str
after insertion.The output to the stream is in "informal" notation. In other words:
shape
has dynamic rank, inserts the string ?
. shape
has static rank, inserts the string {
, then inserts each dimension of shape
into the output stream separated by commas, then inserts }
.Example: