add comments for _extends\graph_kernel\expanders\complex

branch-yixin
yixin 7 months ago
parent f1e159c4b4
commit f8389e877f

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

Loading…
Cancel
Save