From f8389e877f11977d6eee69b2cd70a148dc486270 Mon Sep 17 00:00:00 2001 From: yixin <2050485123@qq.com> Date: Wed, 25 Dec 2024 15:26:11 +0800 Subject: [PATCH] add comments for _extends\graph_kernel\expanders\complex --- .../expanders/complex/__init__.py | 5 ++ .../graph_kernel/expanders/complex/abs.py | 12 +++++ .../graph_kernel/expanders/complex/add.py | 23 ++++++++ .../graph_kernel/expanders/complex/div.py | 53 +++++++++++++------ .../graph_kernel/expanders/complex/mul.py | 50 +++++++++++++---- .../graph_kernel/expanders/complex/sub.py | 26 +++++++++ 6 files changed, 142 insertions(+), 27 deletions(-) diff --git a/src/mindspore2022/mindspore/python/mindspore/_extends/graph_kernel/expanders/complex/__init__.py b/src/mindspore2022/mindspore/python/mindspore/_extends/graph_kernel/expanders/complex/__init__.py index 742db667..8e10678e 100644 --- a/src/mindspore2022/mindspore/python/mindspore/_extends/graph_kernel/expanders/complex/__init__.py +++ b/src/mindspore2022/mindspore/python/mindspore/_extends/graph_kernel/expanders/complex/__init__.py @@ -14,8 +14,13 @@ # ============================================================================ """complex expanders init""" +# 从当前目录下的abs模块中导入CAbs类 from .abs import CAbs +# 从当前目录下的add模块中导入CAdd类 from .add import CAdd +# 从当前目录下的div模块中导入CDiv类 from .div import CDiv +# 从当前目录下的mul模块中导入CMul类 from .mul import CMul +# 从当前目录下的sub模块中导入CSub类 from .sub import CSub diff --git a/src/mindspore2022/mindspore/python/mindspore/_extends/graph_kernel/expanders/complex/abs.py b/src/mindspore2022/mindspore/python/mindspore/_extends/graph_kernel/expanders/complex/abs.py index 44f99afd..0f16730e 100644 --- a/src/mindspore2022/mindspore/python/mindspore/_extends/graph_kernel/expanders/complex/abs.py +++ b/src/mindspore2022/mindspore/python/mindspore/_extends/graph_kernel/expanders/complex/abs.py @@ -20,11 +20,23 @@ class CAbs(Expander): """CAbs expander""" def _expand(self, graph_builder): + # 获取输入的第一个元素 input_x = self.inputs[0] + + # 发射指令CReal,将输入x的实部提取出来 x_real = graph_builder.emit('CReal', [input_x]) + # 发射指令CImag,将输入x的虚部提取出来 x_imag = graph_builder.emit('CImag', [input_x]) + + # 发射指令Mul,计算x的实部的平方 squre_x_real = graph_builder.emit('Mul', [x_real, x_real]) + # 发射指令Mul,计算x的虚部的平方 squre_x_imag = graph_builder.emit('Mul', [x_imag, x_imag]) + + # 发射指令Add,计算实部和虚部的平方和 squre_sum = graph_builder.emit('Add', [squre_x_real, squre_x_imag]) + + # 发射指令Sqrt,计算平方和的平方根 result = graph_builder.emit('Sqrt', [squre_sum]) + return result diff --git a/src/mindspore2022/mindspore/python/mindspore/_extends/graph_kernel/expanders/complex/add.py b/src/mindspore2022/mindspore/python/mindspore/_extends/graph_kernel/expanders/complex/add.py index efb04e1a..4f64d7da 100644 --- a/src/mindspore2022/mindspore/python/mindspore/_extends/graph_kernel/expanders/complex/add.py +++ b/src/mindspore2022/mindspore/python/mindspore/_extends/graph_kernel/expanders/complex/add.py @@ -22,12 +22,35 @@ class CAdd(Expander): """CAdd expander""" def _expand(self, graph_builder): + """ + 将两个复数相加。 + + Args: + graph_builder (GraphBuilder): 图构建器对象。 + + Returns: + Node: 相加后的复数结果。 + + """ + # 获取输入参数 input_x, input_y = self.inputs + + # 将输入参数x转换为实数部分 x_real = graph_builder.emit('CReal', [input_x]) + # 将输入参数y转换为实数部分 y_real = graph_builder.emit('CReal', [input_y]) + + # 将输入参数x转换为虚数部分 x_imag = graph_builder.emit('CImag', [input_x]) + # 将输入参数y转换为虚数部分 y_imag = graph_builder.emit('CImag', [input_y]) + + # 将x和y的实数部分相加 result_real = graph_builder.emit('Add', [x_real, y_real]) + # 将x和y的虚数部分相加 result_imag = graph_builder.emit('Add', [x_imag, y_imag]) + + # 将相加后的实数部分和虚数部分组合为复数 result = graph_builder.emit('Complex', [result_real, result_imag]) + return result diff --git a/src/mindspore2022/mindspore/python/mindspore/_extends/graph_kernel/expanders/complex/div.py b/src/mindspore2022/mindspore/python/mindspore/_extends/graph_kernel/expanders/complex/div.py index 0f681aa5..dc05064c 100644 --- a/src/mindspore2022/mindspore/python/mindspore/_extends/graph_kernel/expanders/complex/div.py +++ b/src/mindspore2022/mindspore/python/mindspore/_extends/graph_kernel/expanders/complex/div.py @@ -22,22 +22,43 @@ class CDiv(Expander): """CDiv expander""" def _expand(self, graph_builder): + """ + CDiv Implementation + + Args: + graph_builder: 图构建器对象,用于构建计算图。 + + Returns: + 返回复数除法结果。 + + 实现复数除法(CDiv)操作。 + 获取两个输入的复数,分别计算它们的实部和虚部。 + 然后计算分母和分子的实部和虚部,并进行除法运算, + 最后将得到的商的实部和虚部合并为复数结果返回。 + """ """CDiv Implementation""" + # 获取输入的两个复数 input_x, input_y = self.inputs - x_real = graph_builder.emit('CReal', [input_x]) - y_real = graph_builder.emit('CReal', [input_y]) - x_imag = graph_builder.emit('CImag', [input_x]) - y_imag = graph_builder.emit('CImag', [input_y]) - squre_y_real = graph_builder.emit('Mul', [y_real, y_real]) - squre_y_imag = graph_builder.emit('Mul', [y_imag, y_imag]) - final_denominator = graph_builder.emit('Add', [squre_y_real, squre_y_imag]) - x_real_mul_y_real = graph_builder.emit('Mul', [x_real, y_real]) - x_imag_mul_y_imag = graph_builder.emit('Mul', [x_imag, y_imag]) - x_real_mul_y_imag = graph_builder.emit('Mul', [x_real, y_imag]) - x_imag_mul_y_real = graph_builder.emit('Mul', [x_imag, y_real]) - final_numerator_real = graph_builder.emit('Add', [x_real_mul_y_real, x_imag_mul_y_imag]) - final_numerator_imag = graph_builder.emit('Sub', [x_imag_mul_y_real, x_real_mul_y_imag]) - result_real = graph_builder.emit('RealDiv', [final_numerator_real, final_denominator]) - result_imag = graph_builder.emit('RealDiv', [final_numerator_imag, final_denominator]) - result = graph_builder.emit('Complex', [result_real, result_imag]) + # 获取输入复数的实部 + x_real = graph_builder.emit('CReal', [input_x]) # 发射 CReal 操作获取 input_x 的实部 + y_real = graph_builder.emit('CReal', [input_y]) # 发射 CReal 操作获取 input_y 的实部 + # 获取输入复数的虚部 + x_imag = graph_builder.emit('CImag', [input_x]) # 发射 CImag 操作获取 input_x 的虚部 + y_imag = graph_builder.emit('CImag', [input_y]) # 发射 CImag 操作获取 input_y 的虚部 + # 计算分母 + squre_y_real = graph_builder.emit('Mul', [y_real, y_real]) # 计算 y_real 的平方 + squre_y_imag = graph_builder.emit('Mul', [y_imag, y_imag]) # 计算 y_imag 的平方 + final_denominator = graph_builder.emit('Add', [squre_y_real, squre_y_imag]) # 计算分母 + # 计算分子 + x_real_mul_y_real = graph_builder.emit('Mul', [x_real, y_real]) # 计算 x_real 和 y_real 的乘积 + x_imag_mul_y_imag = graph_builder.emit('Mul', [x_imag, y_imag]) # 计算 x_imag 和 y_imag 的乘积 + x_real_mul_y_imag = graph_builder.emit('Mul', [x_real, y_imag]) # 计算 x_real 和 y_imag 的乘积 + x_imag_mul_y_real = graph_builder.emit('Mul', [x_imag, y_real]) # 计算 x_imag 和 y_real 的乘积 + final_numerator_real = graph_builder.emit('Add', [x_real_mul_y_real, x_imag_mul_y_imag]) # 计算分子的实部 + final_numerator_imag = graph_builder.emit('Sub', [x_imag_mul_y_real, x_real_mul_y_imag]) # 计算分子的虚部 + # 计算商 + result_real = graph_builder.emit('RealDiv', [final_numerator_real, final_denominator]) # 计算商的实部 + result_imag = graph_builder.emit('RealDiv', [final_numerator_imag, final_denominator]) # 计算商的虚部 + # 将商合并为复数结果 + result = graph_builder.emit('Complex', [result_real, result_imag]) # 将实部和虚部合并为复数结果 return result diff --git a/src/mindspore2022/mindspore/python/mindspore/_extends/graph_kernel/expanders/complex/mul.py b/src/mindspore2022/mindspore/python/mindspore/_extends/graph_kernel/expanders/complex/mul.py index a964ae96..61c18eac 100644 --- a/src/mindspore2022/mindspore/python/mindspore/_extends/graph_kernel/expanders/complex/mul.py +++ b/src/mindspore2022/mindspore/python/mindspore/_extends/graph_kernel/expanders/complex/mul.py @@ -22,17 +22,45 @@ class CMul(Expander): """CMul expander""" def _expand(self, graph_builder): + """ + 计算两个复数的乘积。 + + Args: + graph_builder (GraphBuilder): 图构建器对象,用于在图中生成操作节点。 + + Returns: + Result: 计算得到的复数乘积结果。 + + """ """CMul Implementation""" + # 获取输入的两个复数 input_x, input_y = self.inputs - x_real = graph_builder.emit('CReal', [input_x]) - y_real = graph_builder.emit('CReal', [input_y]) - x_imag = graph_builder.emit('CImag', [input_x]) - y_imag = graph_builder.emit('CImag', [input_y]) - x_real_mul_y_real = graph_builder.emit('Mul', [x_real, y_real]) - x_imag_mul_y_imag = graph_builder.emit('Mul', [x_imag, y_imag]) - x_real_mul_y_imag = graph_builder.emit('Mul', [x_real, y_imag]) - x_imag_mul_y_real = graph_builder.emit('Mul', [x_imag, y_real]) - result_real = graph_builder.emit('Sub', [x_real_mul_y_real, x_imag_mul_y_imag]) - result_imag = graph_builder.emit('Add', [x_real_mul_y_imag, x_imag_mul_y_real]) - result = graph_builder.emit('Complex', [result_real, result_imag]) + + # 获取输入复数的实部 + x_real = graph_builder.emit('CReal', [input_x]) # 发射指令获取input_x的实部 + y_real = graph_builder.emit('CReal', [input_y]) # 发射指令获取input_y的实部 + + # 获取输入复数的虚部 + x_imag = graph_builder.emit('CImag', [input_x]) # 发射指令获取input_x的虚部 + y_imag = graph_builder.emit('CImag', [input_y]) # 发射指令获取input_y的虚部 + + # 计算实部与实部的乘积 + x_real_mul_y_real = graph_builder.emit('Mul', [x_real, y_real]) # 发射指令计算x_real与y_real的乘积 + + # 计算虚部与虚部的乘积 + x_imag_mul_y_imag = graph_builder.emit('Mul', [x_imag, y_imag]) # 发射指令计算x_imag与y_imag的乘积 + + # 计算实部与虚部的乘积 + x_real_mul_y_imag = graph_builder.emit('Mul', [x_real, y_imag]) # 发射指令计算x_real与y_imag的乘积 + x_imag_mul_y_real = graph_builder.emit('Mul', [x_imag, y_real]) # 发射指令计算x_imag与y_real的乘积 + + # 计算复数的实部 + result_real = graph_builder.emit('Sub', [x_real_mul_y_real, x_imag_mul_y_imag]) # 发射指令计算实部结果 + + # 计算复数的虚部 + result_imag = graph_builder.emit('Add', [x_real_mul_y_imag, x_imag_mul_y_real]) # 发射指令计算虚部结果 + + # 构造复数结果 + result = graph_builder.emit('Complex', [result_real, result_imag]) # 发射指令构造复数结果 + return result diff --git a/src/mindspore2022/mindspore/python/mindspore/_extends/graph_kernel/expanders/complex/sub.py b/src/mindspore2022/mindspore/python/mindspore/_extends/graph_kernel/expanders/complex/sub.py index f3715769..8b846f68 100644 --- a/src/mindspore2022/mindspore/python/mindspore/_extends/graph_kernel/expanders/complex/sub.py +++ b/src/mindspore2022/mindspore/python/mindspore/_extends/graph_kernel/expanders/complex/sub.py @@ -22,12 +22,38 @@ class CSub(Expander): """CSub expander""" def _expand(self, graph_builder): + """ + 计算两个复数的差。 + + Args: + graph_builder (GraphBuilder): 图构建器对象,用于生成计算图。 + + Returns: + Tensor: 计算得到的复数差的结果。 + + """ + # 获取输入 input_x, input_y = self.inputs + + # 提取输入x的实部 x_real = graph_builder.emit('CReal', [input_x]) + + # 提取输入y的实部 y_real = graph_builder.emit('CReal', [input_y]) + + # 提取输入x的虚部 x_imag = graph_builder.emit('CImag', [input_x]) + + # 提取输入y的虚部 y_imag = graph_builder.emit('CImag', [input_y]) + + # 计算实部之差 result_real = graph_builder.emit('Sub', [x_real, y_real]) + + # 计算虚部之差 result_imag = graph_builder.emit('Sub', [x_imag, y_imag]) + + # 将实部和虚部组合成复数结果 result = graph_builder.emit('Complex', [result_real, result_imag]) + return result