def format_unit(R): if R == BottomCompletion(TopCompletion(Any())): return '[*]' mcdp_dev_warning('fix bug') if isinstance(R, BottomCompletion): return '[*]' if R == R_dimensionless: # TODO: make option return '' elif isinstance(R, RcompUnits): return '[%s]' % format_pint_unit_short(R.units) elif isinstance(R, Rcomp): return '[]' elif hasattr(R, MCDPConstants.ATTR_LOAD_NAME): n = getattr(R, MCDPConstants.ATTR_LOAD_NAME) return '[`%s]' % n else: return '[%s]' % str(R)
def format_unit(R): from mcdp_library.library import ATTR_LOAD_NAME if R == BottomCompletion(TopCompletion(Any())): return '[*]' mcdp_dev_warning('fix bug') if isinstance(R, BottomCompletion): return '[*]' if R == R_dimensionless: # TODO: make option return '' elif isinstance(R, RcompUnits): return '[%s]' % format_pint_unit_short(R.units) elif isinstance(R, Rcomp): return '[]' elif hasattr(R, ATTR_LOAD_NAME): n = getattr(R, ATTR_LOAD_NAME) return '[`%s]' % n else: return '[%s]' % str(R)
def get_embedding(self, A, B): try: self.check_leq(A, B) except NotLeq as e: msg = 'Cannot get embedding if preorder does not hold.' raise_wrapped(DPInternalError, e, msg, compact=True) from mcdp_posets import RcompUnits from mcdp_posets import format_pint_unit_short from mcdp_posets.maps.identity import IdentityMap from mcdp_maps.map_composition import MapComposition from .maps.linearmapcomp import LinearMapComp if isinstance(A, Nat) and isinstance(B, (Rcomp, RcompUnits)): from .maps.coerce_to_int import CoerceToInt from .maps.promote_to_float import PromoteToFloat return PromoteToFloat(A, B), CoerceToInt(B, A) if isinstance(A, Nat) and isinstance(B, Int): return IdentityMap(A, B), IdentityMap(B, A) if isinstance(A, RcompUnits) and isinstance(B, RbicompUnits): assert A.units.dimensionality == B.units.dimensionality factor = float(B.units / A.units) A_to_B = MapComposition((LinearMapComp(A, A, 1.0 / factor), IdentityMap(A, B))) B_to_A = MapComposition((CheckNonnegativeMap(B, A), LinearMapComp(A, A, factor))) a = format_pint_unit_short(A.units) b = format_pint_unit_short(B.units) setattr(B_to_A, '__name__', '%s*-to-%s' % (b, a)) setattr(A_to_B, '__name__', '%s-to-%s*' % (a, b)) return A_to_B, B_to_A if isinstance(A, RcompUnits) and isinstance(B, RcompUnits): assert A.units.dimensionality == B.units.dimensionality factor = float(B.units / A.units) B_to_A = LinearMapComp(B, A, factor) A_to_B = LinearMapComp(A, B, 1.0 / factor) a = format_pint_unit_short(A.units) b = format_pint_unit_short(B.units) setattr(B_to_A, '__name__', '%s-to-%s' % (b, a)) setattr(A_to_B, '__name__', '%s-to-%s' % (a, b)) return A_to_B, B_to_A if self.equal(A, B): return IdentityMap(A, B), IdentityMap(B, A) if isinstance(A, Rcomp) and isinstance(B, RcompUnits): return IdentityMap(A, B), IdentityMap(B, A) if isinstance(B, Rcomp) and isinstance(A, RcompUnits): return IdentityMap(A, B), IdentityMap(B, A) if isinstance(A, PosetProduct) and isinstance(B, PosetProduct): return get_poset_product_embedding(self, A, B) if isinstance(A, SpaceProduct) and isinstance(B, SpaceProduct): return get_space_product_embedding(self, A, B) if isinstance(A, UpperSets) and isinstance(B, UpperSets): P_A_to_B, P_B_to_A = self.get_embedding(A.P, B.P) from .maps.lift_to_uppersets import LiftToUpperSets m1 = LiftToUpperSets(P_A_to_B) m2 = LiftToUpperSets(P_B_to_A) setattr(m1, '__name__', 'L%s' % P_A_to_B.__name__) setattr(m1, '__name__', 'L%s' % P_B_to_A.__name__) return m1, m2 from mcdp_posets import FiniteCollectionsInclusion if (isinstance(A, FiniteCollectionsInclusion) and isinstance(B, FiniteCollectionsInclusion)): a_to_b, b_to_a = self.get_embedding(A.S, B.S) from mcdp_posets.maps.lift_to_finitecollections import LiftToFiniteCollections m1 = LiftToFiniteCollections(a_to_b) m2 = LiftToFiniteCollections(b_to_a) setattr(m1, '__name__', 'L%s' % a_to_b.__name__) setattr(m1, '__name__', 'L%s' % b_to_a.__name__) return m1, m2 if isinstance(B, PosetCoproduct): for i, x in enumerate(B.spaces): try: self.check_leq(A, x) return get_coproduct_embedding(A, B, i) except NotLeq: pass if True: # pragma: no cover msg = 'Spaces are ordered, but you forgot to code embedding.' raise_desc(NotImplementedError, msg, A=A, B=B)