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 non-negative, 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 read-only (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 read-only (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 read-only (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 read-only (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 read-only (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 read-only (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 read-only (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 read-only (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 human-readable 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. |
ith 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. |
ith 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 r-1, 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 r-1, 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 r-1, 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 ands2` 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 ith dimension is s1[i] + s2[i].
|
friend |
Inserts a human-readable 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: