'Returns the smaller value.
like min(self, other) except if one is not a number, returns
NaN (and signals if one is sNaN).  Also rounds.'

def min(self, other, context=None):

    other = _convert_other(other)
    if (self._is_special or other._is_special):
        sn = self._isnan()
        on = other._isnan()
        if (sn or on):
            if ((on == 1) and (sn != 2)):
                return self
            if ((sn == 1) and (on != 2)):
                return other
            return self._check_nans(other, context)
    ans = self
    c = self.__cmp__(other)
    if (c == 0):
        if (self._sign != other._sign):
            if other._sign:
                ans = other
        elif ((self._exp > other._exp) and (not self._sign)):
            ans = other
        elif ((self._exp < other._exp) and self._sign):
            ans = other
    elif (c == 1):
        ans = other
    if (context is None):
        context = getcontext()
    if (context._rounding_decision == ALWAYS_ROUND):
        return ans._fix(context)
    return ans
