예제 #1
0
파일: gg_ndp.py 프로젝트: kannode/mcdp
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)
예제 #2
0
파일: gg_ndp.py 프로젝트: AndreaCensi/mcdp
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)
예제 #3
0
    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)
예제 #4
0
    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)