You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

value_extends.cc 3.3 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /**
  2. * Copyright 2020 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. #include "ir/value.h"
  17. #include <algorithm>
  18. #include <memory>
  19. #include <cmath>
  20. #include <cfloat>
  21. #include "pybind_api/api_register.h"
  22. #include "pipeline/static_analysis/abstract_value.h"
  23. namespace mindspore {
  24. using ContextPtr = abstract::AnalysisContextPtr;
  25. abstract::AbstractBasePtr Scalar::ToAbstract() {
  26. return std::make_shared<abstract::AbstractScalar>(shared_from_base<Value>());
  27. }
  28. abstract::AbstractBasePtr StringImm::ToAbstract() {
  29. return std::make_shared<abstract::AbstractScalar>(shared_from_base<Value>(), std::make_shared<String>());
  30. }
  31. abstract::AbstractBasePtr RefKey::ToAbstract() {
  32. auto refkey = std::make_shared<abstract::AbstractRefKey>();
  33. refkey->set_value(shared_from_base<Value>());
  34. return refkey;
  35. }
  36. abstract::AbstractBasePtr AnyValue::ToAbstract() { return std::make_shared<abstract::AbstractScalar>(); }
  37. abstract::AbstractBasePtr ValueTuple::ToAbstract() {
  38. abstract::AbstractBasePtrList a_list;
  39. (void)std::transform(elements_.begin(), elements_.end(), std::back_inserter(a_list), [](const ValuePtr &ele) {
  40. MS_EXCEPTION_IF_NULL(ele);
  41. return ele->ToAbstract();
  42. });
  43. return std::make_shared<abstract::AbstractTuple>(a_list);
  44. }
  45. abstract::AbstractBasePtr ValueList::ToAbstract() {
  46. abstract::AbstractBasePtrList a_list;
  47. (void)std::transform(elements_.begin(), elements_.end(), std::back_inserter(a_list), [](const ValuePtr &ele) {
  48. MS_EXCEPTION_IF_NULL(ele);
  49. return ele->ToAbstract();
  50. });
  51. return std::make_shared<abstract::AbstractList>(a_list);
  52. }
  53. abstract::AbstractBasePtr ValueSlice::ToAbstract() {
  54. MS_EXCEPTION_IF_NULL(start_);
  55. MS_EXCEPTION_IF_NULL(stop_);
  56. MS_EXCEPTION_IF_NULL(step_);
  57. abstract::AbstractBasePtr start = start_->ToAbstract();
  58. abstract::AbstractBasePtr end = stop_->ToAbstract();
  59. abstract::AbstractBasePtr step = step_->ToAbstract();
  60. return std::make_shared<abstract::AbstractSlice>(start, end, step);
  61. }
  62. abstract::AbstractBasePtr KeywordArg::ToAbstract() {
  63. MS_EXCEPTION_IF_NULL(value_);
  64. abstract::AbstractBasePtr argument = value_->ToAbstract();
  65. return std::make_shared<abstract::AbstractKeywordArg>(key_, argument);
  66. }
  67. abstract::AbstractBasePtr ValueDictionary::ToAbstract() {
  68. std::vector<std::pair<std::string, abstract::AbstractBasePtr>> kv;
  69. (void)std::transform(
  70. key_values_.begin(), key_values_.end(), std::back_inserter(kv),
  71. [](const std::pair<std::string, ValuePtr> &item) { return std::make_pair(item.first, item.second->ToAbstract()); });
  72. return std::make_shared<abstract::AbstractDictionary>(kv);
  73. }
  74. REGISTER_PYBIND_DEFINE(
  75. RefKey, ([](const py::module *m) {
  76. (void)py::class_<RefKey, std::shared_ptr<RefKey>>(*m, "RefKey").def(py::init<std::string>(), py::arg("tag"));
  77. }));
  78. } // namespace mindspore