def check_type_forward(self, in_types): type_check.expect(in_types.size() == 1) type_check.expect(in_types[0].ndim > self.axis) if self.indices is not None: indices = self.indices if len(indices) > 0: max_index = type_check.make_variable(indices[-1], 'max_index') type_check.expect(in_types[0].shape[self.axis] >= max_index) else: assert self.sections is not None sections = type_check.make_variable(self.sections, 'sections') type_check.expect(in_types[0].shape[self.axis] % sections == 0)
def check_type_forward(self, in_types): type_check.expect(in_types.size() == 1) type_check.expect(in_types[0].ndim > self.axis) if isinstance(self.indices_or_sections, collections.Iterable): if len(self.indices_or_sections) > 0: max_index = type_check.make_variable( self.indices_or_sections[-1], 'max_index') type_check.expect(in_types[0].shape[self.axis] > max_index) else: sections = type_check.make_variable(self.indices_or_sections, 'sections') type_check.expect(in_types[0].shape[self.axis] % sections == 0)
def check_type_forward(self, in_types): type_check.expect(in_types.size() == 1) type_check.expect(in_types[0].ndim > self.axis) if isinstance(self.indices_or_sections, collections.Iterable): if len(self.indices_or_sections) > 0: max_index = type_check.make_variable( self.indices_or_sections[-1], 'max_index') type_check.expect(in_types[0].shape[self.axis] > max_index) else: sections = type_check.make_variable( self.indices_or_sections, 'sections') type_check.expect(in_types[0].shape[self.axis] % sections == 0)
def __call__(self, ty_args, ty_kwargs): x_type, axis1_type, axis2_type = ty_args if lacks_value(axis1_type) or lacks_value(axis2_type): return TyChainerVariable(x_type.dtype, ndim=x_type.ndim) self.axis1 = extract_value_from_ty(axis1_type) self.axis2 = extract_value_from_ty(axis2_type) self.check_type_forward(type_check.make_variable(x_type, 'x')) return self.infer_return(x_type)
def __call__(self, ty_args, ty_kwargs): xs_type, = ty_args self.length, lacks_length = get_kwarg(ty_kwargs, 'length', None) if not xs_type.is_fixed_len: ret_shape = list((None,) * (xs_type.get().ndim + 1)) if not lacks_length: ret_shape[1] = self.length return TyChainerVariable(xs_type.get().dtype, shape=ret_shape) self.check_type_forward(type_check.make_variable(xs_type, 'xs')) return self.infer_return(xs_type, lacks_length)
def check_type_forward(self, in_types): type_check._argname(in_types, ('x', )) x_type, = in_types if self._cnt == 0: type_check.expect( type_check.prod(x_type.shape) == type_check.prod(self.shape)) else: known_size = 1 for s in self.shape: if s > 0: known_size *= s size_var = type_check.make_variable(known_size, 'known_size(=%d)' % known_size) type_check.expect(type_check.prod(x_type.shape) % size_var == 0)
def check_type_forward(self, in_types): type_check.expect(in_types.size() == 1) ndim = type_check.make_variable(len(self._shape), 'len(shape)') type_check.expect(in_types[0].ndim <= ndim) shape = type_check.eval(in_types[0].shape) # check the shape in inverse order for i in six.moves.range(-1, -len(shape) - 1, -1): if shape[i] == self._shape[i] or shape[i] == 1: continue expect = 'in_type[0].shape[%d] == %d' % (i, self._shape[i]) if self._shape[i] != 1: expect += ' or in_type[0].shape[%d] == 1' % i actual = 'in_type[0].shape: %s' % str(shape) raise type_check.InvalidType(expect, actual)
def check_type_forward(self, in_types): type_check._argname(in_types, ('x',)) x_type, = in_types if self._cnt == 0: type_check.expect( type_check.prod(x_type.shape) == type_check.prod(self.shape)) else: known_size = 1 for s in self.shape: if s > 0: known_size *= s size_var = type_check.make_variable( known_size, 'known_size(=%d)' % known_size) type_check.expect( type_check.prod(x_type.shape) % size_var == 0)
def check_type_forward(self, in_types): type_check._argname(in_types, ('x', )) ndim = type_check.make_variable(len(self._shape), 'len(shape)') type_check.expect(in_types[0].ndim <= ndim) shape = type_check.eval(in_types[0].shape) # check the shape in inverse order for i in six.moves.range(-1, -len(shape) - 1, -1): if shape[i] == self._shape[i] or shape[i] == 1: continue expect = 'in_type[0].shape[%d] == %d' % (i, self._shape[i]) if self._shape[i] != 1: expect += ' or in_type[0].shape[%d] == 1' % i actual = 'in_type[0].shape: %s' % str(shape) raise type_check.InvalidType(expect, actual)
def check_type_forward(self, in_types): type_check.expect(in_types.size() == 1, ) x_type, = in_types cnt = _count_unknown_dims(self.shape) if cnt == 0: type_check.expect( type_check.prod(x_type.shape) == type_check.prod(self.shape)) else: known_size = 1 for s in self.shape: if s > 0: known_size *= s size_var = type_check.make_variable(known_size, 'known_size(=%d)' % known_size) type_check.expect(type_check.prod(x_type.shape) % size_var == 0)
def check_type_forward(self, in_types): type_check.expect(in_types.size() > 0) type_check.expect( in_types[0].ndim > type_check.make_variable(self.axis, 'axis')) type_check.expect(-in_types[0].ndim <= self.axis, self.axis < in_types[0].ndim) ndim = type_check.eval(in_types[0].ndim) axis = self.axis % ndim for i in six.moves.range(1, type_check.eval(in_types.size())): type_check.expect( in_types[0].dtype == in_types[i].dtype, in_types[0].ndim == in_types[i].ndim, ) for d in six.moves.range(0, ndim): if d == axis: continue type_check.expect(in_types[0].shape[d] == in_types[i].shape[d])
def check_type_forward(self, in_types): type_check.expect(in_types.size() > 0) type_check.expect(in_types[0].ndim > type_check.make_variable(self.axis, 'axis')) type_check.expect( -in_types[0].ndim <= self.axis, self.axis < in_types[0].ndim ) ndim = type_check.eval(in_types[0].ndim) axis = self.axis % ndim for i in six.moves.range(1, type_check.eval(in_types.size())): type_check.expect( in_types[0].dtype == in_types[i].dtype, in_types[0].ndim == in_types[i].ndim, ) for d in six.moves.range(0, ndim): if d == axis: continue type_check.expect(in_types[0].shape[d] == in_types[i].shape[d])
def check_type_forward(self, in_types): type_check.expect( in_types.size() == 1, ) x_type, = in_types cnt = _count_unknown_dims(self.shape) if cnt == 0: type_check.expect( type_check.prod(x_type.shape) == type_check.prod(self.shape)) else: known_size = 1 for s in self.shape: if s > 0: known_size *= s size_var = type_check.make_variable( known_size, 'known_size(=%d)' % known_size) type_check.expect( type_check.prod(x_type.shape) % size_var == 0)
def check_type_forward(self, in_types): n_in = type_check.eval(in_types.size()) if n_in != 3 and n_in != 6: raise type_check.InvalidType( '{0} or {1}'.format(in_types.size() == 3, in_types.size() == 6), '{0} == {1}'.format(in_types.size(), n_in)) e1_type, e2_type, W_type = in_types[:3] type_check_prod = type_check.make_variable(numpy.prod, 'prod') type_check.expect( e1_type.dtype == numpy.float32, e1_type.ndim >= 2, e2_type.dtype == numpy.float32, e2_type.ndim >= 2, e1_type.shape[0] == e2_type.shape[0], W_type.dtype == numpy.float32, W_type.ndim == 3, type_check_prod(e1_type.shape[1:]) == W_type.shape[0], type_check_prod(e2_type.shape[1:]) == W_type.shape[1], ) if n_in == 6: out_size = W_type.shape[2] V1_type, V2_type, b_type = in_types[3:] type_check.expect( V1_type.dtype == numpy.float32, V1_type.ndim == 2, V1_type.shape[0] == W_type.shape[0], V1_type.shape[1] == out_size, V2_type.dtype == numpy.float32, V2_type.ndim == 2, V2_type.shape[0] == W_type.shape[1], V2_type.shape[1] == out_size, b_type.dtype == numpy.float32, b_type.ndim == 1, b_type.shape[0] == out_size, )
def check_type_forward(self, in_types): n_in = type_check.eval(in_types.size()) if n_in != 3 and n_in != 6: raise type_check.InvalidType( '{0} or {1}'.format( in_types.size() == 3, in_types.size() == 6), '{0} == {1}'.format(in_types.size(), n_in)) e1_type, e2_type, W_type = in_types[:3] type_check_prod = type_check.make_variable(numpy.prod, 'prod') type_check.expect( e1_type.dtype == numpy.float32, e1_type.ndim >= 2, e2_type.dtype == numpy.float32, e2_type.ndim >= 2, e1_type.shape[0] == e2_type.shape[0], W_type.dtype == numpy.float32, W_type.ndim == 3, type_check_prod(e1_type.shape[1:]) == W_type.shape[0], type_check_prod(e2_type.shape[1:]) == W_type.shape[1], ) if n_in == 6: out_size = W_type.shape[2] V1_type, V2_type, b_type = in_types[3:] type_check.expect( V1_type.dtype == numpy.float32, V1_type.ndim == 2, V1_type.shape[0] == W_type.shape[0], V1_type.shape[1] == out_size, V2_type.dtype == numpy.float32, V2_type.ndim == 2, V2_type.shape[0] == W_type.shape[1], V2_type.shape[1] == out_size, b_type.dtype == numpy.float32, b_type.ndim == 1, b_type.shape[0] == out_size, )
def check_type_forward(self, in_types): type_check.expect(in_types.size() == 1) type_check.expect(in_types[0].ndim > 0) type_check.expect(in_types[0].shape[0] == len(self.lengths)) max_length = type_check.make_variable(max(self.lengths), 'max_length') type_check.expect(in_types[0].shape[1] >= max_length)