Skip to content

Commit

Permalink
fix the bug in generated api code, tests are passed now
Browse files Browse the repository at this point in the history
  • Loading branch information
tiancaishaonvjituizi committed Apr 4, 2022
1 parent 26f4662 commit a7f3410
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 12 deletions.
2 changes: 1 addition & 1 deletion paddle/phi/api/lib/api_gen_utils.cc
Expand Up @@ -144,7 +144,7 @@ phi::TensorBase* SetSparseKernelOutput(Tensor* out, TensorType type) {
std::make_shared<phi::SparseCsrTensor>(phi::DenseTensor(),
phi::DenseTensor(),
phi::DenseTensor(),
phi::DDim{-1});
phi::DDim{-1, -1});
out->set_impl(sparse_tensor);
return sparse_tensor.get();
} else {
Expand Down
8 changes: 5 additions & 3 deletions paddle/phi/core/sparse_csr_tensor.cc
Expand Up @@ -27,9 +27,11 @@ SparseCsrTensor::SparseCsrTensor() {
inline void check_shape(const DDim& dims) {
bool valid = dims.size() == 2 || dims.size() == 3;

PADDLE_ENFORCE(valid,
phi::errors::InvalidArgument(
"the SparseCsrTensor only support 2-D Tensor."));
PADDLE_ENFORCE(
valid,
phi::errors::InvalidArgument("the SparseCsrTensor only support 2-D or "
"3-D Tensor, but get %d-D Tensor",
dims.size()));
}
#define Check(non_zero_crows, non_zero_cols, non_zero_elements, dims) \
{ \
Expand Down
20 changes: 18 additions & 2 deletions paddle/phi/kernels/sparse/activation_grad_kernel.cc
Expand Up @@ -17,5 +17,21 @@ limitations under the License. */
#include "paddle/phi/kernels/activation_grad_kernel.h"
#include "paddle/phi/kernels/sparse/utils.h"

DEFINE_AND_REGISTER_SPARSE_UNARY_GRAD_KERNEL(sparse_relu_grad, ReluGradKernel)
DEFINE_AND_REGISTER_SPARSE_UNARY_GRAD_KERNEL(sparse_sqrt_grad, SqrtGradKernel)
DEFINE_AND_REGISTER_SPARSE_UNARY_GRAD_KERNEL(relu_grad, ReluGradKernel)
DEFINE_AND_REGISTER_SPARSE_UNARY_GRAD_KERNEL(sqrt_grad, SqrtGradKernel)

namespace phi {
namespace sparse {

template <typename T, typename Context>
void SparseCooXXGrad(const Context& dev_ctx,
const SparseCooTensor& x,
SparseCooTensor* out) {
}
} // namespace sparse
} // namespace phi

PD_REGISTER_KERNEL(
sparse_coo_xx_grad, CPU, ALL_LAYOUT, phi::sparse::SparseCooXXGrad, float, double) {
kernel->InputAt(0).SetDataLayout(phi::DataLayout::SPARSE_COO);
}
20 changes: 18 additions & 2 deletions paddle/phi/kernels/sparse/activation_kernel.cc
Expand Up @@ -16,5 +16,21 @@ limitations under the License. */

#include "paddle/phi/kernels/sparse/utils.h"

DEFINE_AND_REGISTER_SPARSE_UNARY_KERNEL(sparse_relu, ReluKernel)
DEFINE_AND_REGISTER_SPARSE_UNARY_KERNEL(sparse_sqrt, SqrtKernel)
DEFINE_AND_REGISTER_SPARSE_UNARY_KERNEL(relu, ReluKernel)
DEFINE_AND_REGISTER_SPARSE_UNARY_KERNEL(sqrt, SqrtKernel)

namespace phi {
namespace sparse {

template <typename T, typename Context>
void SparseCooXX(const Context& dev_ctx,
const SparseCooTensor& x,
SparseCooTensor* out) {
}
} // namespace sparse
} // namespace phi

PD_REGISTER_KERNEL(
sparse_coo_xx, CPU, ALL_LAYOUT, phi::sparse::SparseCooXX, float, double) {
kernel->InputAt(0).SetDataLayout(phi::DataLayout::SPARSE_COO);
}
Expand Up @@ -44,18 +44,17 @@ def test_sparse_coo_sqrt(self):
sparse_act_out = _C_ops.final_state_sparse_coo_sqrt(sparse_coo_x)
correct_result = [2, np.sqrt(2), 4]
actual_result = sparse_act_out.non_zero_elements().numpy()
assert np.array_equal(correct_result, actual_result)
assert np.allclose(correct_result, actual_result)

def test_sparse_csr_sqrt(self):
with _test_eager_guard():
x = [[0, 4, 0, 2], [0, 0, 0, 0], [0, 0, 16, 0]]
dense_x = paddle.to_tensor(x, dtype='float32')
sparse_dim = 2
sparse_coo_x = dense_x.to_sparse_csr(sparse_dim)
sparse_coo_x = dense_x.to_sparse_csr()
sparse_act_out = _C_ops.final_state_sparse_csr_sqrt(sparse_coo_x)
correct_result = [2, np.sqrt(2), 4]
actual_result = sparse_act_out.non_zero_elements().numpy()
assert np.array_equal(correct_result, actual_result)
assert np.allclose(correct_result, actual_result)


if __name__ == "__main__":
Expand Down

0 comments on commit a7f3410

Please sign in to comment.