class ov::op::v1::ReduceSum


Tensor sum operation. More…

#include <reduce_sum.hpp>

class ReduceSum: public ov::op::util::ArithmeticReductionKeepDims
    // construction


        const Output<Node>& arg,
        const Output<Node>& reduction_axes,
        bool keep_dims = false

    // methods

    OPENVINO_OP("ReduceSum", "opset1", util::ArithmeticReductionKeepDims);
    virtual std::shared_ptr<Node> clone_with_new_inputs(const OutputVector& new_args) const;
    bool evaluate(TensorVector& outputs, const TensorVector& inputs) const;
    virtual bool has_evaluate() const;

Inherited Members

    // typedefs

    typedef DiscreteTypeInfo type_info_t;
    typedef std::map<std::string, Any> RTMap;

    // methods

    virtual void validate_and_infer_types();
    void constructor_validate_and_infer_types();
    virtual bool visit_attributes(AttributeVisitor&);
    virtual const ov::op::AutoBroadcastSpec& get_autob() const;
    virtual bool has_evaluate() const;

    virtual bool evaluate(
        const ov::HostTensorVector& output_values,
        const ov::HostTensorVector& input_values
        ) const;

    virtual bool evaluate(
        const ov::HostTensorVector& output_values,
        const ov::HostTensorVector& input_values,
        const EvaluationContext& evaluationContext
        ) const;

    virtual bool evaluate(
        ov::TensorVector& output_values,
        const ov::TensorVector& input_values
        ) const;

    virtual bool evaluate(
        ov::TensorVector& output_values,
        const ov::TensorVector& input_values,
        const ov::EvaluationContext& evaluationContext
        ) const;

    virtual bool evaluate_lower(ov::TensorVector& output_values) const;
    virtual bool evaluate_upper(ov::TensorVector& output_values) const;
    virtual bool evaluate_label(TensorLabelVector& output_labels) const;

    virtual bool constant_fold(
        OutputVector& output_values,
        const OutputVector& inputs_values

    virtual OutputVector decompose_op() const;
    virtual const type_info_t& get_type_info() const = 0;
    const char \* get_type_name() const;
    void set_arguments(const NodeVector& arguments);
    void set_arguments(const OutputVector& arguments);
    void set_argument(size_t position, const Output<Node>& argument);

    void set_output_type(
        size_t i,
        const element::Type& element_type,
        const PartialShape& pshape

    void set_output_size(size_t output_size);
    void invalidate_values();
    virtual void revalidate_and_infer_types();
    virtual std::string description() const;
    const std::string& get_name() const;
    void set_friendly_name(const std::string& name);
    const std::string& get_friendly_name() const;
    virtual bool is_dynamic() const;
    size_t get_instance_id() const;
    virtual std::ostream& write_description(std::ostream& os, uint32_t depth = 0) const;
    const std::vector<std::shared_ptr<Node>>& get_control_dependencies() const;
    const std::vector<Node \*>& get_control_dependents() const;
    void add_control_dependency(std::shared_ptr<Node> node);
    void remove_control_dependency(std::shared_ptr<Node> node);
    void clear_control_dependencies();
    void clear_control_dependents();
    void add_node_control_dependencies(const std::shared_ptr<const Node>& source_node);
    void add_node_control_dependents(const std::shared_ptr<const Node>& source_node);
    void transfer_control_dependents(std::shared_ptr<Node> replacement);
    size_t get_output_size() const;
    const element::Type& get_output_element_type(size_t i) const;
    const element::Type& get_element_type() const;
    const Shape& get_output_shape(size_t i) const;
    const PartialShape& get_output_partial_shape(size_t i) const;
    Output<const Node> get_default_output() const;
    Output<Node> get_default_output();
    virtual size_t get_default_output_index() const;
    size_t no_default_index() const;
    const Shape& get_shape() const;
    descriptor::Tensor& get_output_tensor(size_t i) const;
    descriptor::Tensor& get_input_tensor(size_t i) const;
    std::set<Input<Node>> get_output_target_inputs(size_t i) const;
    size_t get_input_size() const;
    const element::Type& get_input_element_type(size_t i) const;
    const Shape& get_input_shape(size_t i) const;
    const PartialShape& get_input_partial_shape(size_t i) const;
    Node \* get_input_node_ptr(size_t index) const;
    std::shared_ptr<Node> get_input_node_shared_ptr(size_t index) const;
    Output<Node> get_input_source_output(size_t i) const;
    virtual std::shared_ptr<Node> clone_with_new_inputs(const OutputVector& inputs) const = 0;
    std::shared_ptr<Node> copy_with_new_inputs(const OutputVector& new_args) const;

    std::shared_ptr<Node> copy_with_new_inputs(
        const OutputVector& inputs,
        const std::vector<std::shared_ptr<Node>>& control_dependencies
        ) const;

    bool has_same_type(std::shared_ptr<const Node> node) const;
    RTMap& get_rt_info();
    const RTMap& get_rt_info() const;
    NodeVector get_users(bool check_is_used = false) const;
    bool operator < (const Node& other) const;
    std::vector<Input<Node>> inputs();
    std::vector<Input<const Node>> inputs() const;
    std::vector<Output<Node>> input_values() const;
    std::vector<Output<Node>> outputs();
    std::vector<Output<const Node>> outputs() const;
    Input<Node> input(size_t input_index);
    Input<const Node> input(size_t input_index) const;
    Output<Node> input_value(size_t input_index) const;
    Output<Node> output(size_t output_index);
    Output<const Node> output(size_t output_index) const;

    virtual bool match_value(
        ov::pass::pattern::Matcher \* matcher,
        const Output<Node>& pattern_value,
        const Output<Node>& graph_value

    virtual bool match_node(
        ov::pass::pattern::Matcher \* matcher,
        const Output<Node>& graph_value

    static _OPENVINO_HIDDEN_METHODconst ::ov::Node::type_info_t& get_type_info_static();
    virtual const ::ov::Node::type_info_t& get_type_info() const;
    OPENVINO_OP("ReductionBase", "util");
    bool reduction_axes_constant() const;
    const AxisSet get_reduction_axes() const;
    void set_reduction_axes(const AxisSet& reduction_axes);
    virtual bool get_keep_dims() const;
    OPENVINO_OP("ArithmeticReduction", "util");
    virtual void validate_and_infer_types();
    OPENVINO_OP("ArithmeticReductionKeepDims", "util");
    virtual void validate_and_infer_types();
    virtual bool get_keep_dims() const;
    void set_keep_dims(bool keep_dims);

Detailed Documentation

Tensor sum operation.

Element-wise sums the input tensor, eliminating the specified reduction axes. For example:

\[\begin{split}\mathit{sum}\left(\{0\}, \left[ \begin{array}{ccc} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{array} \right]\right) = \left[ (1 + 3 + 5), (2 + 4 + 6) \right] = \left[ 9, 12 \right]~~~\text{(dimension 0 (rows) is eliminated)}\end{split}\]
\[\begin{split}\mathit{sum}\left(\{1\}, \left[ \begin{array}{ccc} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{array} \right]\right) = \left[ (1 + 2), (3 + 4), (5 + 6) \right] = \left[ 3, 7, 11 \right]~~~\text{(dimension 1 (columns) is eliminated)}\end{split}\]
\[\begin{split}\mathit{sum}\left(\{0,1\}, \left[ \begin{array}{ccc} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{array} \right]\right) = (1 + 2) + (3 + 4) + (5 + 6) = 21~~~\text{(both dimensions (rows and columns) are eliminated)}\end{split}\]




The axes to eliminate through summation.


If set to 1 it holds axes that are used for reduction.





\(N[d_1,\dots,d_n]~(n \geq 0)\)

An input tensor of any shape and numeric element type.




The tensor \(T\) , where \(T\) is the input tensor with the reduction_axes \(A\) eliminated by summation.



Constructs a summation operation.

    const Output<Node>& arg,
    const Output<Node>& reduction_axes,
    bool keep_dims = false

Constructs a summation operation.



The tensor to be summed.


The axis positions (0-based) to be eliminated.


If set to 1 it holds axes that are used for reduction.


virtual bool has_evaluate() const

Allows to get information about availability of evaluate method for the current operation.