mindspore代码标注1

mindspore\mindspore\ccsrc\pipeline\jit\parsedate_couversion.cc代码标注1

小知识:

h文件是C语言和【C++】语言的头文件,一般在【.h】类的头文件里面只放入函数声明,宏定义,函数原型,而具体的实现在【.cpp】文件里面。

C程序的定义文件以.c为后缀,C++程序的定义文件通常以.cpp为后缀(也有一些系统以.cc或.cxx为后缀)

  • 引用系统自带头文件
#include <unordered_map>
#include <utility>
#include <string>
#include <memory>
#include <vector>
  • 引用自己编写的头文件,若找不到时再从系统头文件中寻找

    #include "pipeline/jit/parse/resolve.h"
    #include "pipeline/jit/parse/python_adapter.h"
    #include "frontend/operator/ops.h"
    #include "frontend/operator/composite/composite.h"
    #include "ir/func_graph_cloner.h"
    #include "ir/cell.h"
    #include "utils/symbolic.h"
    #include "utils/ms_context.h"
    
  • 创建一个名为mindspore的空间并在其中嵌套一个parse空间

namespace mindspore {
namespace parse {
}
}
  • 将后面变量名指定别名,并导入变量到当前作用域,方便以后调用。
  • :在此表示一种所属关系,作用域的意思
using Tensor = mindspore::tensor::Tensor;
using TensorPtr = mindspore::tensor::TensorPtr;
using MetaTensor = mindspore::tensor::MetaTensor;
using MetaTensorPtr = mindspore::tensor::MetaTensorPtr;

using InstanceCheckFunc = std::function<bool(const py::object &)>;
using InstanceConvertFunc = std::function<ValuePtr(const py::object &, bool, const TypePtr &)>;

定义了一个 DataConverter类,其中包括一些公有变量和私有变量,以virtural关键字修饰的虚函数

class DataConverter {
 public://公有变量
  explicit DataConverter(InstanceConvertFunc convert_func) : convert_func_(std::move(convert_func)) {}
  virtual ~DataConverter() = default;//一个纯虚类作为回调接口
  virtual bool Matched(const py::object &obj) = 0;//纯虚函数
  virtual ValuePtr ConvertPyObject(const py::object &obj, bool use_sig, const TypePtr &dtype) {
    if (convert_func_ == nullptr) {//如果convert_func_为空即等于0,错误日志记录"convert func is null"
      MS_LOG(EXCEPTION) << "convert func is null";
    }
    return convert_func_(obj, use_sig, dtype);//返回 convert_func_所对应的obj, use_sig, dtype
  }

 private://私有变量
  InstanceConvertFunc convert_func_ = nullptr;//初始化变量
};
template <typename T>//类模板函数模板,声明后可将类型参数用于类的成员函数和成员变量
class ByTypeDataConverter : public DataConverter {//定义一个类
 public://公有变量
  explicit ByTypeDataConverter(const InstanceConvertFunc &convert_func)//下面都是由都是由 explicit修饰的显示函数
      : DataConverter(convert_func), check_func_(py::isinstance<T>) {}
  explicit ByTypeDataConverter(const ValuePtr &converted_type)
      : DataConverter(
          [converted_type](const py::object &, bool, const TypePtr &) -> ValuePtr { return converted_type; }),
        check_func_(py::isinstance<T>) {}
  explicit ByTypeDataConverter(const ArgsObjConvertFunc &convert_func)
      : DataConverter(
          [convert_func](const py::object &obj, bool, const TypePtr &) -> ValuePtr { return convert_func(obj); }),
        check_func_(py::isinstance<T>) {}
  explicit ByTypeDataConverter(const ArgsObjSigConvertFunc &convert_func)
      : DataConverter([convert_func](const py::object &obj, bool use_sig, const TypePtr &) -> ValuePtr {
          return convert_func(obj, use_sig);
        }),
        check_func_(py::isinstance<T>) {}
  explicit ByTypeDataConverter(const ArgsOjbTypeConvertFunc &convert_func)
      : DataConverter([convert_func](const py::object &obj, bool, const TypePtr &dtype) -> ValuePtr {
          return convert_func(obj, dtype);
        }),
        check_func_(py::isinstance<T>) {}
  ~ByTypeDataConverter() override = default;

  bool Matched(const py::object &obj) override { return check_func_ != nullptr ? check_func_(obj) : false; }

 private://私有变量
  InstanceCheckFunc check_func_ = nullptr;//初始化赋值
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值