def mul(self, x, y): if is_zero(x) or is_zero(y): return const(0) elif is_one(x): return y elif is_one(y): return x else: return Mult(x,y)
def mul(self, x, y): cx = x.__class__ cy = y.__class__ if cx in self._scalar_shape_classes and cy in self._scalar_shape_classes: if is_zero(x) or is_zero(y): return const(0) elif is_one(x): return y elif is_one(y): return x elif cx is AnyScalar or cy is AnyScalar: return any_scalar else: return Mult(x,y) else: return any_value
def mul(self, x, y): cx = x.__class__ cy = y.__class__ if cx in self._scalar_shape_classes and cy in self._scalar_shape_classes: if is_zero(x) or is_zero(y): return const(0) elif is_one(x): return y elif is_one(y): return x elif cx is AnyScalar or cy is AnyScalar: return any_scalar else: return Mult(x, y) else: return any_value
def div(self, x, y): assert not is_zero(y) if is_one(y): return x elif isinstance(x, Const) and isinstance(y, Const): return const(int(x.value / y.value)) elif isinstance(x, AnyScalar) or isinstance(y, AnyScalar): return any_scalar else: return Div(x, y)
def div(self, x, y): assert not is_zero(y), "Encountered divide by zero during shape inference" cx = x.__class__ cy = y.__class__ if cx in self._scalar_shape_classes and cy in self._scalar_shape_classes: if is_one(y): return x elif cx is AnyScalar or cy is AnyScalar: return any_scalar elif cx is Const and cy is Const: return const(int(x.value / y.value)) elif x == y: return const(1) else: return Div(x, y) else: return any_value
def div(self, x, y): assert not is_zero( y), "Encountered divide by zero during shape inference" cx = x.__class__ cy = y.__class__ if cx in self._scalar_shape_classes and cy in self._scalar_shape_classes: if is_one(y): return x elif cx is AnyScalar or cy is AnyScalar: return any_scalar elif cx is Const and cy is Const: return const(int(x.value / y.value)) elif x == y: return const(1) else: return Div(x, y) else: return any_value