/** * Copyright 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. */ #include "ir/value.h" #include #include #include #include #include "pybind_api/api_register.h" #include "pipeline/static_analysis/abstract_value.h" namespace mindspore { using ContextPtr = abstract::AnalysisContextPtr; abstract::AbstractBasePtr Scalar::ToAbstract() { return std::make_shared(shared_from_base()); } abstract::AbstractBasePtr StringImm::ToAbstract() { return std::make_shared(shared_from_base(), std::make_shared()); } abstract::AbstractBasePtr RefKey::ToAbstract() { auto refkey = std::make_shared(); refkey->set_value(shared_from_base()); return refkey; } abstract::AbstractBasePtr AnyValue::ToAbstract() { return std::make_shared(); } abstract::AbstractBasePtr ValueTuple::ToAbstract() { abstract::AbstractBasePtrList a_list; (void)std::transform(elements_.begin(), elements_.end(), std::back_inserter(a_list), [](const ValuePtr &ele) { MS_EXCEPTION_IF_NULL(ele); return ele->ToAbstract(); }); return std::make_shared(a_list); } abstract::AbstractBasePtr ValueList::ToAbstract() { abstract::AbstractBasePtrList a_list; (void)std::transform(elements_.begin(), elements_.end(), std::back_inserter(a_list), [](const ValuePtr &ele) { MS_EXCEPTION_IF_NULL(ele); return ele->ToAbstract(); }); return std::make_shared(a_list); } abstract::AbstractBasePtr ValueSlice::ToAbstract() { MS_EXCEPTION_IF_NULL(start_); MS_EXCEPTION_IF_NULL(stop_); MS_EXCEPTION_IF_NULL(step_); abstract::AbstractBasePtr start = start_->ToAbstract(); abstract::AbstractBasePtr end = stop_->ToAbstract(); abstract::AbstractBasePtr step = step_->ToAbstract(); return std::make_shared(start, end, step); } abstract::AbstractBasePtr KeywordArg::ToAbstract() { MS_EXCEPTION_IF_NULL(value_); abstract::AbstractBasePtr argument = value_->ToAbstract(); return std::make_shared(key_, argument); } abstract::AbstractBasePtr ValueDictionary::ToAbstract() { std::vector> kv; (void)std::transform( key_values_.begin(), key_values_.end(), std::back_inserter(kv), [](const std::pair &item) { return std::make_pair(item.first, item.second->ToAbstract()); }); return std::make_shared(kv); } REGISTER_PYBIND_DEFINE( RefKey, ([](const py::module *m) { (void)py::class_>(*m, "RefKey").def(py::init(), py::arg("tag")); })); } // namespace mindspore