def make_node(self, M): M = tensor.as_tensor_variable(M) if M.ndim != 0: raise TypeError('%s only works on scalar input' % self.__class__.__name__) elif (not M.dtype.startswith('int')) and \ (not M.dtype.startswith('uint')): # dtype is a theano attribute here raise TypeError('%s only works on integer input' % self.__class__.__name__) return gof.Apply(self, [M], [tensor.dvector()])
def make_node(self, x, weights): x = basic.as_tensor_variable(x) if x.dtype not in BinCountOp.compatible_type: raise TypeError("Inputs dtype must be an integer.") # Some dtypes are not supported by numpy's implementation of bincount. # Until another one is available, we should fail at graph construction # time, not wait for execution. int_bitwidth = theano.gof.cmodule.python_int_bitwidth() if int_bitwidth == 64: numpy_unsupported_dtypes = ('uint64',) if int_bitwidth == 32: numpy_unsupported_dtypes = ('uint32', 'int64', 'uint64') intp_bitwidth = theano.gof.cmodule.local_bitwidth() if intp_bitwidth == 32: out_type = basic.ivector() elif intp_bitwidth == 64: out_type = basic.lvector() if x.dtype in numpy_unsupported_dtypes: raise TypeError( ("Input dtypes %s are not supported by numpy.bincount, " % numpy_unsupported_dtypes), x.dtype) if x.ndim != 1: raise TypeError("Inputs must be of dimension 1.") if weights is None: weights = theano.gof.Constant(theano.gof.Generic(), None) else: weights = basic.as_tensor_variable(weights) out_type = basic.dvector() if weights.ndim != 1: raise TypeError("Weights cannot have a number of" "dimension different of 1.") return theano.Apply(self, [x, weights], [out_type])
def make_node(self, x, weights): x = basic.as_tensor_variable(x) if x.dtype not in BinCountOp.compatible_type: raise TypeError("Inputs dtype must be an integer.") # Some dtypes are not supported by numpy's implementation of bincount. # Until another one is available, we should fail at graph construction # time, not wait for execution. int_bitwidth = theano.gof.cmodule.python_int_bitwidth() if int_bitwidth == 64: numpy_unsupported_dtypes = ('uint64', ) if int_bitwidth == 32: numpy_unsupported_dtypes = ('uint32', 'int64', 'uint64') intp_bitwidth = theano.gof.cmodule.local_bitwidth() if intp_bitwidth == 32: out_type = basic.ivector() elif intp_bitwidth == 64: out_type = basic.lvector() if x.dtype in numpy_unsupported_dtypes: raise TypeError( ("Input dtypes %s are not supported by numpy.bincount, " % numpy_unsupported_dtypes), x.dtype) if x.ndim != 1: raise TypeError("Inputs must be of dimension 1.") if weights is None: weights = theano.gof.Constant(theano.gof.Generic(), None) else: weights = basic.as_tensor_variable(weights) out_type = basic.dvector() if weights.ndim != 1: raise TypeError("Weights cannot have a number of" "dimension different of 1.") return theano.Apply(self, [x, weights], [out_type])