示例#1
0
文件: misc_math.py 项目: rusi/mcdp
def plus_constants2(a, b):
    """ raises ConstantsNotCompatibleForAddition """

    A = a.unit
    B = b.unit

    if isinstance(A, RcompUnits) and isinstance(B, RcompUnits):
        return plus_constants2_rcompunits(a, b)

    if isinstance(A, RcompUnits) and isinstance(B, (Rcomp, Nat)):
        try:
            b2A = b.cast_value(A)
        except NotLeq:
            msg = 'Cannot sum %s and %s.' % (A, B)
            raise_desc(ConstantsNotCompatibleForAddition, msg)
        b2 = ValueWithUnits(b2A, A)
        return plus_constants2_rcompunits(a, b2)

    if isinstance(B, RcompUnits) and isinstance(A, (Rcomp, Nat)):
        try:
            a2B = a.cast_value(B)
        except NotLeq:
            msg = 'Cannot sum %s and %s.' % (A, B)
            raise_desc(ConstantsNotCompatibleForAddition, msg)
        a2 = ValueWithUnits(a2B, B)
        return plus_constants2_rcompunits(a2, b)

    if isinstance(B, Rcomp) and isinstance(A, Rcomp):
        res = rcomp_add(a.value, b.value)
        return ValueWithUnits(value=res, unit=Rcomp())

    if isinstance(B, Rcomp) and isinstance(A, Nat):
        a2v = a.cast_value(B)
        res = rcomp_add(a2v, b.value)
        return ValueWithUnits(value=res, unit=Rcomp())

    if isinstance(A, Rcomp) and isinstance(B, Nat):
        b2v = b.cast_value(A)
        res = rcomp_add(a.value, b2v)
        return ValueWithUnits(value=res, unit=Rcomp())

    if isinstance(B, Nat) and isinstance(A, Nat):
        res = Nat_add(a.value, b.value)
        return ValueWithUnits(value=res, unit=Nat())

    msg = 'Cannot add %r and %r' % (a, b)
    raise DPNotImplementedError(msg)
示例#2
0
def plus_constants2(a, b):

    A = a.unit
    B = b.unit

    if isinstance(A, RcompUnits) and isinstance(B, RcompUnits):
        return plus_constants2_rcompunits(a, b)

    if isinstance(A, RcompUnits) and isinstance(B, (Rcomp, Nat)):
        b2 = ValueWithUnits(b.cast_value(A), A)
        return plus_constants2_rcompunits(a, b2)

    if isinstance(B, RcompUnits) and isinstance(A, (Rcomp, Nat)):
        a2 = ValueWithUnits(a.cast_value(B), B)
        return plus_constants2_rcompunits(a2, b)

    if isinstance(B, Rcomp) and isinstance(A, Rcomp):
        res = rcomp_add(a.value, b.value)
        return ValueWithUnits(value=res, unit=Rcomp())

    if isinstance(B, Rcomp) and isinstance(A, Nat):
        a2v = a.cast_value(B)
        res = rcomp_add(a2v, b.value)
        return ValueWithUnits(value=res, unit=Rcomp())

    if isinstance(A, Rcomp) and isinstance(B, Nat):
        b2v = b.cast_value(A)
        res = rcomp_add(a.value, b2v)
        return ValueWithUnits(value=res, unit=Rcomp())

    if isinstance(B, Nat) and isinstance(A, Nat):
        res = Nat_add(a.value, b.value)
        return ValueWithUnits(value=res, unit=Nat())

    msg = "Cannot add %r and %r" % (a, b)
    raise DPNotImplementedError(msg)
示例#3
0
 def _call(self, x):
     return rcomp_add(x, self.c_value)