typenum_x=node.inputs[0].type.dtype_specs()[-1]# retrieve dtype number
typenum_y=node.inputs[1].type.dtype_specs()[-1]# retrieve dtype number
typenum_p=node.inputs[2].type.dtype_specs()[-1]# retrieve dtype number
typenum_zd=tensor.TensorType(node.outputs[0].dtype,[]).dtype_specs()[-1]# retrieve dtype number
typenum_zi=tensor.TensorType(node.outputs[1].dtype,[]).dtype_specs()[-1]# retrieve dtype number
typenum_zp=tensor.TensorType(node.outputs[2].dtype,[]).dtype_specs()[-1]# retrieve dtype number
rval="""
if (%(x)s->nd != 2) {PyErr_SetString(PyExc_NotImplementedError, "rank(x) != 2"); %(fail)s;}
if (%(y)s->nd != 2) {PyErr_SetString(PyExc_NotImplementedError, "rank(y) != 2"); %(fail)s;}
if (%(x)s->descr->type_num != %(typenum_x)s) {
PyErr_SetString(PyExc_NotImplementedError, "Invalid type for x"); %(fail)s;}
if (%(y)s->descr->type_num != %(typenum_y)s) {
PyErr_SetString(PyExc_NotImplementedError, "Invalid type for y"); %(fail)s;}
if (%(p_data)s->descr->type_num != %(typenum_p)s) {
PyErr_SetString(PyExc_NotImplementedError, "Invalid type for pattern"); %(fail)s;}
if (%(x)s->dimensions[1] != %(y)s->dimensions[1])
{PyErr_SetString(PyExc_NotImplementedError, "x's number of columns doesn't match y's rows! Note: sampling_dot is different from dot because y is assumed to be transposed."); %(fail)s;}