• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright 2023-2024 Huawei Technologies Co., Ltd
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 #ifndef MINDSPORE_CCSRC_PIPELINE_PYNATIVE_OP_FUNCTION_CONVERTER_H
17 #define MINDSPORE_CCSRC_PIPELINE_PYNATIVE_OP_FUNCTION_CONVERTER_H
18 #include <memory>
19 #include <string>
20 #include <vector>
21 #include <utility>
22 #include "pipeline/pynative/base.h"
23 #include "pipeline/pynative/pynative_execute.h"
24 #include "include/common/pybind_api/api_register.h"
25 #include "include/common/utils/primfunc_utils.h"
26 #include "ops/op_def.h"
27 
28 namespace mindspore {
29 namespace pynative {
30 class Converter {
31  public:
32   explicit Converter(ops::OpDef *op_def);
33   void Parse(const py::list &python_args);
34   ValuePtr ToTensor(const py::list &python_args, size_t i);
35   std::optional<ValuePtr> ToTensorOptional(const py::list &python_args, size_t i);
36   template <typename T>
37   ValueTuplePtr ToTensorList(const py::list &python_args, size_t i);
38   template <typename T>
39   std::optional<ValueTuplePtr> ToTensorListOptional(const py::list &python_args, size_t i);
40   Int64ImmPtr ToInt(const py::list &python_args, size_t i);
41   std::optional<Int64ImmPtr> ToIntOptional(const py::list &python_args, size_t i);
42   template <typename T>
43   ValueTuplePtr ToIntList(const py::list &python_args, size_t i);
44   template <typename T>
45   std::optional<ValueTuplePtr> ToIntListOptional(const py::list &python_args, size_t i);
46   BoolImmPtr ToBool(const py::list &python_args, size_t i);
47   std::optional<BoolImmPtr> ToBoolOptional(const py::list &python_args, size_t i);
48   template <typename T>
49   ValueTuplePtr ToBoolList(const py::list &python_args, size_t i);
50   template <typename T>
51   std::optional<ValueTuplePtr> ToBoolListOptional(const py::list &python_args, size_t i);
52   FP32ImmPtr ToFloat(const py::list &python_args, size_t i);
53   std::optional<FP32ImmPtr> ToFloatOptional(const py::list &python_args, size_t i);
54   template <typename T>
55   ValueTuplePtr ToFloatList(const py::list &python_args, size_t i);
56   template <typename T>
57   std::optional<ValueTuplePtr> ToFloatListOptional(const py::list &python_args, size_t i);
58   ScalarPtr ToScalar(const py::list &python_args, size_t i);
59   std::optional<ScalarPtr> ToScalarOptional(const py::list &python_args, size_t i);
60   StringImmPtr ToString(const py::list &python_args, size_t i);
61   std::optional<StringImmPtr> ToStringOptional(const py::list &python_args, size_t i);
62   Int64ImmPtr ToDtype(const py::list &python_args, size_t i);
63   std::optional<Int64ImmPtr> ToDtypeOptional(const py::list &python_args, size_t i);
64   ValuePtr ConvertByCastDtype(const py::object &input, const ops::OpInputArg &op_arg, size_t i);
65   ValueTuplePtr ConvertValueTupleByCastDtype(const py::list &python_args, const ops::OpInputArg &op_arg, size_t index);
source_type()66   const std::vector<ops::OP_DTYPE> &source_type() const { return source_type_; }
67 
68  private:
69   ops::OpDefPtr op_def_;
70   // If op not type cast, source_type is default type: DT_BEGIN, if op type cast, source_type is origin type.
71   std::vector<ops::OP_DTYPE> source_type_;
72 };
73 }  // namespace pynative
74 }  // namespace mindspore
75 #endif  // MINDSPORE_CCSRC_PIPELINE_PYNATIVE_OP_FUNCTION_CONVERTER_H
76