def eval_constant_SimpleValue(op, context): from .eval_space_imp import eval_space # @Reimport F = eval_space(op.space, context) assert isinstance(F, Space), op assert isinstance(F, RcompUnits) v = op.value.value # promote integer to float if isinstance(v, int) and isinstance(F, (Rcomp, RcompUnits)): v = float(v) if v < 0: if isinstance(F, RcompUnits): F = RbicompUnits(F.units, F.string) else: msg = 'Negative %s not implemented yet.' % F raise_desc(NotImplementedError, msg, F=F) try: F.belongs(v) except NotBelongs as e: msg = 'Not in space' raise_wrapped(DPSemanticError, e, msg, F=F, v=v, op=op) return ValueWithUnits(unit=F, value=v)
def x_minus_constants(x, constants): R0 = x.unit if not isinstance(R0, RcompUnits): msg = 'Cannot evaluate "-" on this space.' raise_desc(DPSemanticError, msg, R0=R0) Rb = RbicompUnits.from_rcompunits(R0) # convert each factor to R0 try: v0 = x.value for c in constants: vi = express_value_in_isomorphic_space(c.unit, c.value, Rb) v0 = RbicompUnits_subtract(Rb, v0, vi) except TypeError as e: msg = 'Failure to compute subtraction.' raise_wrapped(DPInternalError, e, msg, x=x, constants=constants) if Rb.leq(0.0, v0): R1 = R0 else: R1 = Rb return ValueWithUnits(unit=R1, value=v0)