decl_opr('MatrixMul',
         pyname='matrix_mul_v0',
         inputs=['opr0', 'opr1'],
         params='MatrixMulV0',
         desc='matrix multiplication')

decl_opr('BatchedMatrixMul',
         pyname='batched_matrix_mul_v0',
         inputs=['opr0', 'opr1'],
         params='MatrixMulV0',
         desc='batched matrix multiplication: input shapes should be '
         '(n, a, b) and (n, b, c) (assuming transposeA and transeposeB are '
         'False); then :math:`n` independent matrix multiplications would be '
         'performed and output shape is (n, a, c)')

decl_opr('MatrixMul',
         inputs=['opr0', 'opr1'],
         params='MatrixMul',
         desc='matrix multiplication',
         version=2, has_out_dtype=True)

decl_opr('BatchedMatrixMul',
         inputs=['opr0', 'opr1'],
         params='MatrixMul',
         desc='batched matrix multiplication: input shapes should be '
         '(n, a, b) and (n, b, c) (assuming transposeA and transeposeB are '
         'False); then :math:`n` independent matrix multiplications would be '
         'performed and output shape is (n, a, c)',
         version=2, has_out_dtype=True)

decl_opr('Dot',
         inputs=['opr0', 'opr1'],
         params='Empty',
         desc='dot-product of two vectors; inputs must be 1-dimensional, '
         'and scalar input can be automatically broadcasted')

decl_opr('MatrixInverse',
         inputs=['src'],
         params='Empty',
         desc='inverse a batch of matrices; the input must has shape '
         '``[..., n, n]``')

decl_opr('SVD',
         inputs=['src'],
         params='SVD',
         desc='Computes the singular value decompositions of matrices. '
              'The input must has shape ``[..., M, N]``.')

# vim: ft=python
