Пример #1
0
 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)
Пример #2
0
 def add(self, x, y):
   if is_zero(x):
     return y
   elif is_zero(y):
     return x
   elif isinstance(x, Const) and isinstance(y, Const):
     return const(x.value + y.value)
   elif isinstance(x, AnyScalar) or isinstance(y, AnyScalar):
     return any_scalar
   else:
     return Add(x,y)
Пример #3
0
  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
Пример #4
0
  def add(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):
        return y
      elif is_zero(y):
        return x
      elif cx is Const and cy is Const: 
        return const(x.value + y.value)
      elif cx is AnyScalar or cy is AnyScalar:
        return any_scalar
      else:
        return Add(x,y)
    else:
      return any_value 
Пример #5
0
    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
Пример #6
0
    def add(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):
                return y
            elif is_zero(y):
                return x
            elif cx is Const and cy is Const:
                return const(x.value + y.value)
            elif cx is AnyScalar or cy is AnyScalar:
                return any_scalar
            else:
                return Add(x, y)
        else:
            return any_value
Пример #7
0
 def sub(self, x, y):
   if is_zero(y):
     return x
   elif isinstance(x, Const) and isinstance(y, Const):
     return const(x.value - y.value)
   elif isinstance(x, AnyScalar) or isinstance(y, AnyScalar):
     return any_scalar
   else:
     return Sub(x, y)
Пример #8
0
 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)
Пример #9
0
 def sub(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(y):
       return x
     elif cx is Const and cy is Const: 
       return const(x.value - y.value)
     elif cx is AnyScalar or cy is AnyScalar:
       return any_scalar
     elif x == y: 
       return Const(0)
     else:
       return Sub(x, y)
   else:
     return any_value 
Пример #10
0
 def sub(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(y):
             return x
         elif cx is Const and cy is Const:
             return const(x.value - y.value)
         elif cx is AnyScalar or cy is AnyScalar:
             return any_scalar
         elif x == y:
             return Const(0)
         else:
             return Sub(x, y)
     else:
         return any_value
Пример #11
0
  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 
Пример #12
0
    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