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)
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)
def _call(self, x): return rcomp_add(x, self.c_value)