def transform_index(expr): return expression.linear_map( linear_map.kronecker_product( linear_map.index(expr.key[1], dim(only_arg(expr), 1)), linear_map.index(expr.key[0], dim(only_arg(expr), 0)) ), transform_expr(only_arg(expr)), )
def transform_hstack(expr): m = dim(expr, 0) n = dim(expr, 1) offset = 0 add_args = [] for arg in expr.arg: ni = dim(arg, 1) add_args.append( expression.linear_map( linear_map.right_matrix_product(linear_map.index(slice(offset, offset + ni), n), m), transform_expr(arg) ) ) offset += ni return expression.add(*add_args)
def transform_hstack(expr): m = dim(expr, 0) n = dim(expr, 1) offset = 0 add_args = [] for arg in expr.arg: ni = dim(arg, 1) add_args.append( expression.linear_map( linear_map.right_matrix_product( linear_map.index(slice(offset, offset + ni), n), m), transform_expr(arg))) offset += ni return expression.add(*add_args)
def transform_vstack(expr): m = dim(expr, 0) n = dim(expr, 1) offset = 0 add_args = [] for arg in expr.arg: mi = dim(arg, 0) add_args.append( expression.linear_map( linear_map.left_matrix_product( linear_map.transpose( linear_map.index(slice(offset, offset + mi), m)), n), transform_expr(arg))) offset += mi return expression.add(*add_args)
def transform_vstack(expr): m = dim(expr, 0) n = dim(expr, 1) offset = 0 add_args = [] for arg in expr.arg: mi = dim(arg, 0) add_args.append( expression.linear_map( linear_map.left_matrix_product( linear_map.transpose( linear_map.index(slice(offset, offset+mi), m)), n), transform_expr(arg))) offset += mi return expression.add(*add_args)
def transform_index(expr): return expression.linear_map( linear_map.kronecker_product( linear_map.index(expr.key[1], dim(only_arg(expr), 1)), linear_map.index(expr.key[0], dim(only_arg(expr), 0))), transform_expr(only_arg(expr)))