/** * Copyright 2019-2020 Huawei Technologies Co., Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef MINDSPORE_CCSRC_UTILS_CONVERT_UTILS_H_ #define MINDSPORE_CCSRC_UTILS_CONVERT_UTILS_H_ #include #include #include #include #include #include #include #include "utils/convert_utils_base.h" #include "utils/any.h" #include "base/base_ref.h" #include "base/base.h" #include "ir/anf.h" #include "ir/func_graph.h" namespace mindspore { namespace tensor { class Tensor; using TensorPtr = std::shared_ptr; } // namespace tensor bool BaseRefToBool(const BaseRef &in, bool *out); bool BaseRefToInt(const ValuePtr &v, int64_t *value); bool ValueToBool(const ValuePtr &in, bool *out); // Isomorphism struct PairHasher { template std::size_t operator()(const std::pair &p) const { auto h1 = std::hash{}(p.first); auto h2 = std::hash{}(p.second); return h1 ^ h2; } }; enum EquivState { kNotEquiv = 0, kEquiv = 1, kPending = 2 }; using FuncGraphPairMapEquiv = std::unordered_map, EquivState, PairHasher>; using NodeMapEquiv = std::unordered_map; bool Isomorphic(FuncGraphPtr g1, FuncGraphPtr g2, FuncGraphPairMapEquiv *equiv_func_graph, NodeMapEquiv *equiv_node); tensor::TensorPtr ScalarToTensor(const ScalarPtr &scalar); void TensorValueToTensor(const ValuePtr &value, std::vector *tensors); } // namespace mindspore #endif // MINDSPORE_CCSRC_UTILS_CONVERT_UTILS_H_